docs← Back to article

Markdown for LLMs

Separate fact time from record time

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

Download this articlePlain text ↗
# Separate fact time from record time

## Intent

I want to keep the date of a fact’s effect separate from the dates of observation and recording.

## Wrong form and why it stays silent

```text title="Incorrect form"
evidence Doc: Record { status verified; observed_at @2026-09-03; }
```

On an assertion the observed/recorded fields allow Date. On evidence the observed_at/recorded_at fields require Instant: neighbouring carriers have different contracts.

## Correct form

```law
language "law.core" version "0.2";
package recipes.d.r08 version "0.1.0";
namespace "urn:recipe:d-evidence:08";

entity Person;
entity Record;
relation eligible(p: Person);
assert eligible(entity_ref("urn:recipe:d-evidence:08:p")) {
    id "urn:recipe:d-evidence:08#entry"; origin external_snapshot;
    valid [@2026-09-01, @2026-09-10);
    observed @2026-09-03; recorded @2026-09-12;
}
```

## Frozen execution scene

In the table P and Q are different entities of the page, C is a case; full identifiers are pinned in the scenes.

| Input on 13.09.2026 (a different date is named in the scene) | Question | Answer |
|---|---|---|
| before the start | `truth(eligible(P))` | `NEITHER` / `COMPUTED` |
| inside the window | `truth(eligible(P))` | `TRUE_ONLY` / `COMPUTED` |
| excluded right bound | `truth(eligible(P))` | `NEITHER` / `COMPUTED` |
| knowledge cut before recording | `truth(eligible(P))` | `TRUE_ONLY` / `COMPUTED` |

```law
test "before validity window gives neither" {
    given {
        context {
            legal_time @2026-08-31;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }

    }
    evaluate truth(eligible(entity_ref("urn:recipe:d-evidence:08:p")));
    expect truth_status == NEITHER;
    expect evaluation_status == COMPUTED;
    expect issue(ASSERTION_OUTSIDE_VALID);
}
```

```law
test "inside validity window establishes" {
    given {
        context {
            legal_time @2026-09-05;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }

    }
    evaluate truth(eligible(entity_ref("urn:recipe:d-evidence:08:p")));
    expect truth_status == TRUE_ONLY;
    expect evaluation_status == COMPUTED;

}
```

```law
test "excluded right bound rejects" {
    given {
        context {
            legal_time @2026-09-10;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }

    }
    evaluate truth(eligible(entity_ref("urn:recipe:d-evidence:08:p")));
    expect truth_status == NEITHER;
    expect evaluation_status == COMPUTED;
    expect issue(ASSERTION_OUTSIDE_VALID);
}
```

```law
test "early knowledge cut keeps established truth" {
    given {
        context {
            legal_time @2026-09-05;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-04T09:00:00Z;
            timezone "UTC";
        }

    }
    evaluate truth(eligible(entity_ref("urn:recipe:d-evidence:08:p")));
    expect truth_status == TRUE_ONLY;
    expect evaluation_status == COMPUTED;

}
```

## Counterfactual

Diagnostic mutation (lower-case) — LDC-E1307.

Original fragment:

```law
relation eligible(p: Person);
```

Replacement:

```law
relation eligible(p: Person);
case Bad { evidence Doc: Record { status verified; observed_at @2026-09-03; } }
```

The paired scenes above pin the change of outcome.

## Boundary

On this path ingest filters valid by legal_time; observed/recorded are kept for audit, but themselves do not cut an assertion by knowledge_time. A historical snapshot is chosen by the supplier; explicit available for documents is shown in [Accept admissible evidence](/recipes/d-evidence/admissible-evidence/). We do not promise an automatic bitemporal filter where there is none.

Date in evidence is checked by lowering the case (`lower-case`): a single check still does not execute transport. The refusal form in the sidecar places the document in case Bad. An ordinary assertion carries only a weak bound on knowledge time; availability of policy documents has a separate executable slot.

## Pitfall

On an assertion the observed/recorded fields allow Date; on evidence the observed_at/recorded_at fields require Instant: neighbouring carriers have different contracts.