# Separate an action from a duty ## Intention I want to name an action without automatically attributing a permission or a duty to it. The scenes below check the boundary on a minimal case with a normative position. ## Incorrect form and why it stays silent Declaring an action type itself prescribes nothing. ```law title="Incorrect form" action Submit { actor: Person; } // Этого недостаточно, чтобы возникла SubmitDuty. ``` Another incorrect form is a duty without a bearer; it is rejected with LDC-E1305 and pinned by teaches. ```text title="Incorrect form" then duty SubmitDuty { goal achievement { condition submitted(p); window [@2026-01-01, @2027-01-01); } }; ``` ## Correct form A duty is introduced by the normative head of a separate rule. ```law language "law.core" version "0.2"; package recipes.n.r02 version "0.1.0"; namespace "urn:recipe:n-package:02"; entity Person; action Submit { actor: Person; } relation registered(p: Person); relation submitted(p: Person); rule RecordSubmission strict { for p: Person; when registered(p); then submitted(p); } rule SubmissionDuty strict { for p: Person; when registered(p); then duty SubmitDuty { bearer p; goal achievement { condition submitted(p); window [@2026-01-01, @2027-01-01); } }; } ``` ## Frozen execution scene | Facts | Question | Answer | |---|---|---| | registered(p) | Positions | SubmitDuty SATISFIED | | No registered(p) | Positions | SubmitDuty is absent | | Same registered(p), SubmissionDuty rule cut out | Positions | UNDETERMINED, no positions | ```law test "rule creates duty" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00+05:00; knowledge_time @2026-09-13T09:00:00+05:00; timezone "Asia/Almaty"; } assert registered(entity_ref("urn:recipe:n-package:02:p")); } evaluate positions(); expect position(SubmitDuty, SATISFIED); } ``` ```law test "action declaration creates no duty" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00+05:00; knowledge_time @2026-09-13T09:00:00+05:00; timezone "Asia/Almaty"; } } evaluate positions(); expect not position(SubmitDuty, ACTIVE); expect not position(SubmitDuty, SATISFIED); } ``` ```law test "action without norm prescribes nothing" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00+05:00; knowledge_time @2026-09-13T09:00:00+05:00; timezone "Asia/Almaty"; } assert registered(entity_ref("urn:recipe:n-package:02:p")); } evaluate positions(); expect normative_status == UNDETERMINED; } ``` ## Counterfactual `teaches` removes the required bearer `bearer p` from the normative head and requires a rejection. A scene without registered separately shows: the presence of an action declaration does not create a position. ## Boundary The presence of a duty also does not mean liberty. Permission, prohibition, and weak permission are separate recipes in book A. ## Pitfall A declared action without an activated rule does not produce SubmitDuty; the scenes above pin both sides.