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.
# 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.