# A collective duty as a whole ## Intention I want to create one duty of a collective without multiplying it onto members. ## Incorrect form and why it stays silent ```text title="Incorrect form" // Члены коллектива автоматически получают отдельные обязанности. ``` The collective remains a single bearer. All three allocation/discharge/violation fields are dropped at lowering with warning LDC-E1305; the policy algorithm is not wired in; activity of the catalogue fields is not claimed. ## Correct form ```law language "law.core" version "0.2"; package recipes.a.r08 version "0.1.0"; namespace "urn:recipe:a-positions:08"; entity Team; entity Person; relation formed(g: Team); relation member(g: Team, p: Person); relation delivered(g: Team); const Discharge: Text = "policy-defined-by-author"; const Violation: Text = "policy-defined-by-author"; rule R strict { for g: Team; when formed(g); then duty Joint { bearer g; allocation_policy joint; discharge_policy Discharge; violation_policy Violation; achieve delivered(g) during [@2026-09-01, @2026-09-10]; }; } ``` ## Frozen execution scene | Facts and snapshot | Question | Answer | |---|---|---| | two members, one duty; 2026-09-05 | `positions()` | `position_count(Joint, ACTIVE, 1);` / `COMPUTED` | | performed by the collective; 2026-09-05 | `positions()` | `position_count(Joint, SATISFIED, 1);` / `COMPUTED` | | policy references removed; 2026-09-05 | `positions()` | `position_count(Joint, SATISFIED, 1);` / `COMPUTED` | ```law test "two members share one duty" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert formed(entity_ref("urn:recipe:a-positions:08:g")); assert member(entity_ref("urn:recipe:a-positions:08:g"), entity_ref("urn:recipe:a-positions:08:p")); assert member(entity_ref("urn:recipe:a-positions:08:g"), entity_ref("urn:recipe:a-positions:08:q")); } evaluate positions(); expect position_count(Joint, ACTIVE, 1); expect evaluation_status == COMPUTED; } ``` ```law test "collective performance satisfies" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert formed(entity_ref("urn:recipe:a-positions:08:g")); assert member(entity_ref("urn:recipe:a-positions:08:g"), entity_ref("urn:recipe:a-positions:08:p")); assert member(entity_ref("urn:recipe:a-positions:08:g"), entity_ref("urn:recipe:a-positions:08:q")); assert delivered(entity_ref("urn:recipe:a-positions:08:g")); } evaluate positions(); expect position_count(Joint, SATISFIED, 1); expect evaluation_status == COMPUTED; } ``` ```law test "removed policy references still satisfy" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert formed(entity_ref("urn:recipe:a-positions:08:g")); assert member(entity_ref("urn:recipe:a-positions:08:g"), entity_ref("urn:recipe:a-positions:08:p")); assert member(entity_ref("urn:recipe:a-positions:08:g"), entity_ref("urn:recipe:a-positions:08:q")); assert delivered(entity_ref("urn:recipe:a-positions:08:g")); } evaluate positions(); expect position_count(Joint, SATISFIED, 1); expect evaluation_status == COMPUTED; } ``` ```python >>> import runpy >>> check = runpy.run_path("docs/recipes/a-positions/resources/check.py") >>> check["check_boundary"](https://github.com/arxohq/law/blob/master/docs/recipes/a-positions/8) 'А8: граница проверена' ``` ## Counterfactual Mutation: `bearer g;` → ``; rejection LDC-E1305. Additional counterfactuals are shown as separate scenes. ## Boundary The constants name teaching references; they do not implement an allocation algorithm. Individual and joint consequences cannot be derived from these labels.