Duty: addressee, goal, window
Updated 3 October 2026:
concept,except_when,claim,definition … sufficient, anddefaultstrength have been removed, together with their special deprecation diagnostic. References below to the former behavior and corpus sources are historical. New source usesrelation,unless,duty, a strict rule, anddefeasible.
1. What it is in one sentence
Section titled “1. What it is in one sentence”duty is a normative position that requires of its addressee
that something be achieved, maintained, or not done within a given window: the author
reaches for it when the source says “is obliged to”, “must”, “ensures”.
A duty always names who owes it, what is owed, and by when: one addressee, one goal, one performance window.
2. When to take it and when not to
Section titled “2. When to take it and when not to”| Instead | Take when | Selection rule |
|---|---|---|
prohibition | the source says “is prohibited”, “is not allowed” | write prohibition: it is a duty with a forbearance goal spelled the way the act speaks; do not duplicate it with a paired maintenance duty — you get two VIOLATED for one breach |
constraint | a whole world must be rejected, not a person addressed | a constraint has neither an addressee nor a performance window; a duty always names its addressee |
rule strict with an institutional head | a status is derived (“is deemed to have defaulted”), not behaviour required | a fact-head has no position lifecycle |
claim | a claim “creditor against debtor” is to be recorded | avoid claim: write duty with the parties directly — the debtor in the bearer field, the creditor in the beneficiary field |
Three goal kinds: achievement (achieve the condition inside the window),
maintenance (hold the condition over the whole window), forbearance (not
to perform the action in the window; almost always written as prohibition).
A fourth kind, recurring every, is executable in 0.2 (E-0146); mandatory over gives the overall repetition interval.
Grammar: duty, goals, norm head (EBNF verbatim from the language grammar)
Section titled “Grammar: duty, goals, norm head (EBNF verbatim from the language grammar)”Show syntax reference
The duty form — the addressee (bearer), the beneficiary, and a single goal:
duty_conclusion = "duty", [ identifier ], "{", { duty_item }, "}" ;duty_item = "bearer", expression, ";" | "beneficiary", expression, ";" | "goal", goal, [ ";" ] | compact_duty_goal | "activation", formula, ";" | "discharge_policy", reference, ";" | "violation_policy", reference, ";" | source_anchor_item | metadata_item ;The three base forms follow; recurring every <step> { … } over <interval> is executable in 0.2 (E-0146).
achievement_goal = "achievement", "{", "condition", formula, ";", "window", interval_expression, ";", { goal_item }, "}" ;maintenance_goal = "maintenance", "{", "condition", formula, ";", "window", interval_expression, ";", { goal_item }, "}" ;forbearance_goal = "forbearance", "{", "action", expression, ";", "window", interval_expression, ";", { goal_item }, "}" ;The norm head — any modality with an optional template StableId annotation. A claim is written as duty with the parties directly — the debtor in the bearer field, the creditor in the beneficiary field:
norm_conclusion = { annotation }, ( duty_conclusion | liberty_conclusion | power_conclusion | immunity_conclusion | prohibition_conclusion ) ;Position statuses and lifecycle live on the lifecycle page; windows as intervals and their computation — on the deadline-calendar page; window syntax is not duplicated here.
3. Minimal example
Section titled “3. Minimal example”Package examples/duty-achievement/: a supplier must deliver goods in
March 2026. Full code — examples/duty-achievement/package.law; cases and
expectations — examples/duty-achievement/tests/01-in-window.lawtest (scenarios
in the window) and tests/02-after-window.lawtest (scenarios after the window).
rule DeliveryRule defeasible { for s: Supplier; for c: Customer; when contract_signed(s, c); then duty Deliver { bearer s; beneficiary c; goal achievement { condition goods_delivered(s, c); window [@2026-03-01, @2026-03-31]; } };}Case facts: contract_signed(alpha, omega). Query positions().
The engine’s actual answer (see How the engine answers):
legal_time @2026-03-15, no delivery →position(Deliver, ACTIVE), notVIOLATED(before the deadline an unperformed duty is active);- same date +
goods_delivered→position(Deliver, SATISFIED); legal_time @2026-04-10, with no facts of non-performance →position(Deliver, UNDETERMINED), notVIOLATED(absence of proof of performance is not a breach);- same date +
not goods_delivered→position(Deliver, VIOLATED).
Sensitivity check: remove contract_signed from the case — position
Deliver is never created (no body substitution); remove
goods_delivered from the second scenario — the answer changes from
SATISFIED to ACTIVE. The example is not vacuous.
4. Example across domains
Section titled “4. Example across domains”The same “duty with a window” device in different domains:
- Law: the duty to insure cargo —
examples/duty-maintenance/(KeepInsured,maintenancewith a March window; the counterexamplenot goods_insuredgivesVIOLATEDimmediately). - Law: the ban on subcontracting — the same package (
NoSubcontracting;prohibitionreads as adutywith a forbearance goal; the factsubcontractsin the window gives oneVIOLATED). - Standard/protocol: the duty to keep a unit ready
(package
us.army.training— US Army training norms,UnitTrainingReadiness— military training in the samedutyform outside civil law). - Religion/ethics: the duty to respect all religions
(package
mng.corpus.yasa— the Mongol Yasa,RespectAllReligions— the same construct for an ethical norm). - Custom/casework: court duties in banking disputes
(package
kz.corpus.np_bank_loan_disputes— Kazakh banking-dispute casework — five duties with a[den, infinity)window).
Forms in detail — corpus-forms.md.
5. How the engine answers
Section titled “5. How the engine answers”Run output (verbatim):
check OK: docs/research/constructs/10-duty/examples/duty-achievementlaw test research.constructs.duty_achievement: мир research.constructs.duty_achievement ok [research.constructs.duty_achievement#authored] tests/01-in-window.lawtest / in window without delivery — ACTIVE not VIOLATED ok [research.constructs.duty_achievement#authored] tests/01-in-window.lawtest / delivery inside window — SATISFIED ok [research.constructs.duty_achievement#authored] tests/02-after-window.lawtest / after window without explicit non-performance — UNDETERMINED ok [research.constructs.duty_achievement#authored] tests/02-after-window.lawtest / after window with established non-performance — VIOLATEDитого: 4 проверено, 4 прошли, 0 не прошли, 0 не исполнены; код 0check OK: docs/research/constructs/10-duty/examples/duty-maintenancelaw test research.constructs.duty_maintenance: мир research.constructs.duty_maintenance ok [research.constructs.duty_maintenance#authored] tests/01-violations.lawtest / counterexample inside window violates maintenance ok [research.constructs.duty_maintenance#authored] tests/01-violations.lawtest / established action inside window violates prohibition once ok [research.constructs.duty_maintenance#authored] tests/02-excuse.lawtest / force majeure defeats the excusable duty ok [research.constructs.duty_maintenance#authored] tests/02-excuse.lawtest / without force majeure the duty stays activeитого: 4 проверено, 4 прошли, 0 не прошли, 0 не исполнены; код 0Position statuses: PENDING (before the window), ACTIVE (in the window,
unperformed), SATISFIED, VIOLATED, UNDETERMINED, DEFEATED
(defeated by a defeater — status literals are not published),
EXPIRED/CREATED for liberties. Observation in a test — position(Name, STATUS); the normative_status aggregate over several norms
answers UNDETERMINED. In proof — the support of the applying rule and the support
of the goal condition; why_not names the unestablished conjunct.
A window from case variables (tests “case window: ACTIVE before the deadline” and “case window: VIOLATED after the deadline with non-payment”):
| Facts | Question | Answer | Why |
|---|---|---|---|
invoice_issued(…, 5 March, 15 March) | Pay with decision on 10 March | ACTIVE | window from rule variables, deadline not passed |
same + not paid | Pay with decision on 20 March | VIOLATED | window closed, non-performance established |
6. Common mistakes
Section titled “6. Common mistakes”- The goal condition repeats the rule body — the duty is always
SATISFIED(tautological goal; warningLDC-E1371). - Two
goals in one duty — rejectionLDC-E0201. - A prohibition + a paired
maintenanceduty — twoVIOLATEDfor one breach. - A bare name as a window bound — rejection
LDC-E2115; write a date, a body variable, or the open floor[@0001-01-01, infinity). unlesson a norm-head binds not all payload variables — rejectionLDC-E4101on node<Rule>/unless/N.- Rule name coincides with position name —
LDC-E1338. conditionwith_—checkstays silent, execution never finds the literal (a known open gap; seepitfalls.md).
Each analysed — pitfalls.md.
7. References
Section titled “7. References”- The language specification defines positions, goals, neighbouring forms, the lifecycle,
defeat, the
positionsquery, and test observations; this page states how to use them. - Tutorials:
/tutorials/writing-tests/(test observations),/tutorials/defeaters/(defeater versus priority). - Details:
corpus-forms.md,pitfalls.md,boundaries.md.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.