docs← Back to article

Markdown for LLMs

Correct an event with a new version

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# 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.