# Correct an event with a new version ## Intention I want to correct an event's time while keeping the earlier record. An event keeps its identity; a correction is a new version, never a rewrite. ## Incorrect form and why it stays silent A second payload under the previous id is not a correction. ```text title="Incorrect form" Filed { id: "urn:recipe:n-package:03:old", time: @2026-09-12T11:00:00+05:00 } ``` When original is present this is fatal `EVENT_ID_CONFLICT`. ## Correct form A correction has a new id and a `supersedes` reference to the old one. ```law language "law.core" version "0.2"; package recipes.n.r03 version "0.1.0"; namespace "urn:recipe:n-package:03"; event Filed {} relation present(); assert present(); const original: Filed = Filed { id: "urn:recipe:n-package:03:old", time: @2026-09-12T09:00:00+05:00 }; const corrected: Filed = Filed { id: "urn:recipe:n-package:03:new", time: @2026-09-12T11:00:00+05:00, supersedes: "urn:recipe:n-package:03:old" }; ``` ## Frozen execution scene | Facts | Question | Answer | |---|---|---| | original and corrected | present() | TRUE_ONLY, without EVENT_ID_CONFLICT | | Additionally another time for the old id | present() | EVENT_ID_CONFLICT | ```law test "new version keeps history" { 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 truth(present()); expect truth_status == TRUE_ONLY; expect not issue(EVENT_ID_CONFLICT); } ``` ```law test "old id resists rewrite" { 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"; } const overwritten: Filed = Filed { id: "urn:recipe:n-package:03:old", time: @2026-09-12T11:00:00+05:00 }; } evaluate truth(present()); expect issue(EVENT_ID_CONFLICT); } ``` ## Counterfactual The second scene presents the incorrect form from part 2. A static `teaches` counterfactual additionally closes `supersedes` on its own id: `LDC-E1343`. ## Boundary The rule that chooses the chain head does not allow two competing corrections. A break, a cycle, and two heads are EVENT_VERSION_CHAIN_BROKEN. ## Pitfall A package constant and an assertion argument with the same id and different times must stop the document. Correction is only a new version.