Correct an event with a new version
Intention
Section titled “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
Section titled “Incorrect form and why it stays silent”A second payload under the previous id is not a correction.
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
Section titled “Correct form”A correction has a new id and a supersedes reference to the old one.
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
Section titled “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 |
new version keeps history
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);}old id resists rewrite
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
Section titled “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
Section titled “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
Section titled “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.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.