Skip to content
docs
Arxo ↗

Position statuses and lifecycle

For LLMs6 sections

In one sentence: the lifecycle constructs answer “what is the state of the duty now: created, active, performed, breached, or gone altogether”. The author takes them when a norm cares not only about the conclusion (“due”) but about its fate in time: the performance window, breach, waiver, defeat of a norm conclusion.

A position moves through a fixed ladder — created, active, satisfied or violated — and can be defeated, waived, suspended, or terminated; breach, compensation, and sanction chain from the breach. Norm syntax lives on the duty, prohibition, power, and liberty pages; only statuses and lifecycle live here.

InsteadSelection rule
positions() vs truth()Asking about the norm’s fate (“is the duty performed”) — positions() with a status (SATISFIED, VIOLATED, …); asking about a world fact (“is the fee paid”) — truth(). The same fee is visible to both queries but they answer differently: the fact is TRUE_ONLY, the position is SATISFIED
VIOLATED vs UNDETERMINED after the deadlineBreach of achievement requires a completeness ground: explicit non-performance, a completeness certificate, or a decision. The deadline passed with no ground — UNDETERMINED, not VIOLATED. A silent case is no proof of non-payment
Achievement VIOLATED vs maintenance VIOLATEDAchievement is breached by silence under completeness; maintenance — only by an accepted counterexample: a recorded breaching action. No counterexample — no breach, even after the window
DEFEATED vs NEITHERDefeat means a position created by a rule whose every ground is defeated (an unless defeater): it is VISIBLE in positions with status DEFEATED but publishes nothing. NEITHER means no position at all. “No norm” and “norm withdrawn” are different answers
A subject-matter predicate (obligation_terminated) vs a std literal (terminated)The lifecycle runs on std literals urn:law:std#waived/suspended/terminated over the position id: only they move the waiver/suspension/termination ladder. The corpus’s own predicates (obligation_terminated(o)) do not move the ladder — they are world facts, not lifecycle acts
expired vs the lifecycle outcomesThe 0.2 duty ladder does not produce expired: after the window closes — SATISFIED, VIOLATED, UNDETERMINED, for a BOTH pair — CONFLICTED plus the waiver/suspension/termination statuses

Package examples/achievement-ladder/: a member’s fee with a window until end of March, two “as of” moments.

Arxo Law
rule MembershipFee(p: Person) strict {
label ru-KZ official "Участник платит взнос до конца марта";
when is_member(p);
then duty PayFee {
bearer p;
goal achievement {
condition fee_paid(p);
window [@2026-01-01, @2026-03-31];
}
};
}

Case 1: is_member(p) + fee_paid(p), decision_time inside the window. Query: evaluate positions(). Case 2: is_member(p) only, decision_time after the window.

The engine’s actual answer:

Output
law test research.lifecycle.ladder: мир research.lifecycle.ladder
ok [research.lifecycle.ladder#authored] tests/01-satisfied.lawtest / urn:query:research-lifecycle-01
ok [research.lifecycle.ladder#authored] tests/02-overdue.lawtest / urn:query:research-lifecycle-02
итого: 2 проверено, 2 прошли, 0 не прошли, 0 не исполнены; код 0

law engine check — check OK, no warnings. Sensitivity: case 1 answers position(PayFee, SATISFIED) (accepted support confirms the condition in the window); case 2 — position(PayFee, UNDETERMINED) (window closed, no performance, no completeness ground — silence is not a breach). Deleting the fee_paid fact changes the outcome from SATISFIED to UNDETERMINED, not to VIOLATED — the nearest wrong outcome a newcomer expects.

Second package examples/defeat-and-violation/ — two ladder rungs missing from the first:

FactsQuestionAnswerWhy
member + waiverpositions(), PayFeeDEFEATEDevery ground defeated by an unless defeater; the position visible, no publications
facility running + recorded dischargepositions(), KeepCleanVIOLATEDan accepted counterexample in the maintenance window

Second-package sensitivity: deleting fee_exempt revives the position (the ground is defeated no longer — the status leaves DEFEATED); deleting discharge_detected lifts the breach (no counterexample).

  • Law: Uzbekistan Civil Code (package uz.civil_code) — termination of an obligation (rule TerminationOnGround, see corpus-forms.md): the same ladder, but with the subject-matter predicate obligation_terminated(o) — a known boundary.
  • Standard/protocol: weekly rest of at least 42 hours — package uz.labor_code — Labour Code of Uzbekistan (then weekly_rest_violated(...)): the breach is derived by a rule from a measurement, not by the lifecycle engine; the std ladder needs a counterexample in a maintenance window.
  • Religion/ethics: Uzbekistan family code (package uz.family_code) — maintenance minimum: breach computed by comparison (amount * 10000 < mrot * 1175), the same boundary: a subject-matter predicate, not a std status.
  • Science/teaching case: examples/defeat-and-violation/ — norm-conclusion defeat (DEFEATED) and maintenance breach (VIOLATED) in miniature; the 1922 Union Treaty question catalogue (package su.union_treaty_1922) shows the corpus form of a positions() query with ACTIVE.

Table — actual runs of this directory’s examples:

FactsQuestionAnswerWhy
member + fee paid, decision in windowpositions(), PayFeeSATISFIEDsupport confirms the condition in the window
member without fee, decision after windowpositions(), PayFeeUNDETERMINEDwindow closed, no completeness
member + waiverpositions(), PayFeeDEFEATEDground defeated by unless
facility + recorded dischargepositions(), KeepCleanVIOLATEDmaintenance counterexample
facility without dischargepositions(), KeepCleanACTIVEwindow open, no counterexample
contract, decision before the windowpositions(), PayFeePENDINGthe deadline has not started yet (before the window an unperformed duty is pending)
  • In positions every position carries payload, createdBy, and proof-refs; the normative_status summary never destroys the original support: on conflict — CONFLICTED plus normative_status_supports.
  • A defeated position is visible and addressable but takes no part in conclusions: normative_status over it is DEFEATED, not NEITHER.
  • A breach is a derived institutional fact about the position instance (violated(P)), not a logical conflict: an opposite norm alone never gives a breach.
  • Chains run as separate rule applications and proof nodes: primary breach → compensatory duty → sanction; a step through a power effect enters the next step’s fixpoint.
  • In why_not a position with UNDETERMINED is explained by missing support and completeness, not by “a breach left unproven”.
  1. Reading an overdue deadline without completeness as VIOLATED — the engine answers UNDETERMINED (see pitfalls.md).
  2. Own predicates (obligation_terminated, minimum_violated) instead of std literals — the waiver/suspension/termination ladder does not move; these are world facts, not cycle acts (see pitfalls.md).
  3. Expecting DEFEATED as absence of a position — it is visible in positions but silent in conclusions (see pitfalls.md).
  4. Deriving a breach from an opposite norm — a breach is not a conflict (see pitfalls.md).
  5. Expecting expired on a duty — the 0.2 ladder never produces it (see pitfalls.md).
  6. Taking the “as of” moment from legal_time — it is decision_time (different axes: law vs deadline; see pitfalls.md).
  • The language specification defines position statuses, activation, achievement, maintenance, deadlines, waiver, suspension, termination, breach, compensation, sanction, and chains; this page states how to use them.
  • Tutorials: /tutorials/writing-tests/ (test observations).
  • Details: corpus-forms.md, pitfalls.md, boundaries.md.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.