# Time: the date of law, a rule window, and an edition Law answers as of a date. The same case before a norm's entry into force and after it gets different answers, and neither is a mistake. Dates are the corpus's most frequent literal: over eight thousand in 443 packages out of 508 (measured 05.09.2026). And the most frequent source of the "why is law silent" question: the rule is written correctly, the facts are fed, yet the answer is `NEITHER`, because on this date the rule does not yet exist. This page holds three ways to date a norm and one axis they all check against. The Archive of Veliky Ustin adopts a new edition of the rules from 2027. ```law language "law.core" version "0.2"; package tutorial.archive version "0.4.0"; namespace "urn:law:tutorial:archive"; entity Person; source ARCHIVE_RULES { kind municipal_act; jurisdiction VELIKY_USTIN; number "2026-14"; } edition ARCHIVE_RULES_2026_RU of ARCHIVE_RULES { language ru; officiality official; adopted @2026-01-15; in_force [@2026-02-01, infinity); } edition ARCHIVE_RULES_2027_RU of ARCHIVE_RULES { language ru; officiality official; adopted @2026-11-20; in_force [@2027-01-01, infinity); } fragment ARCHIVE_RULES_2027_P6 in ARCHIVE_RULES_2027_RU { kind paragraph; locator "paragraph/6"; text ru official """Исследователь, состоящий в реестре, вправе заказать оцифровку документа. """; content_hash "sha256:aeb29654149aeea7af992a44563af55ae16c9bde3177074ad72334bd3d201756"; } relation in_researcher_registry(p: Person) kind institutional; relation accredited(p: Person) kind institutional; relation briefing_required(p: Person) kind institutional; relation may_order_digitization(p: Person) kind institutional; relation reader_card_issued(p: Person, on: Date) kind empirical { key(p); } relation card_reissue_required(p: Person) kind institutional; ``` The quoted fragment reads: "A researcher listed in the registry may order digitization of a document." ## The axis everything looks at A case context holds four axes, none taken from the system clock: `legal_time` — the date on which the applicable law is selected; `decision_time` — the moment the answer is issued; `knowledge_time` — the boundary of data known to the system; `timezone` — the zone. All dated things on this page check against the first axis. An answer issued in March 2027 on a June-2026 event counts under June-2026 law — that is the difference between `decision_time` and `legal_time`, and confusing them is costly. A scenario test sets the axes for each scenario separately, so the page speaks in pairs below: one case, two dates of law. ## A rule window From 1 January 2027, rare-collections room access requires a briefing first. The norm gets its own validity window — the `effective` clause. ```law rule BriefingRequired2027 strict { effective [@2027-01-01, infinity); for p: Person; when in_researcher_registry(p); then briefing_required(p); } ``` | `legal_time` | `briefing_required` | `applied(BriefingRequired2027)` | |---|---|---| | 2026-06-01 | `NEITHER` | no | | 2027-06-01 | `TRUE_ONLY` | yes | `effective` is an applicability condition, not a premise. Before the window the rule did not "fire with a false condition": it took no part in the computation at all, and `why_not` will name it a candidate with the `NOT_APPLICABLE` status, not "condition not established". The distinction shows in the test too: the `applied(…)` observation answers "no" before the window and "yes" inside it. The first test is from the page you are reading, byte for byte: ```law test "до окна effective правило не участвует" { given { context { decision_time @2027-03-01T09:00:00+05:00; knowledge_time @2027-03-01T09:00:00+05:00; legal_time @2026-06-01; timezone "Asia/Almaty"; } assert in_researcher_registry(entity_ref("urn:tutorial:ivanova")) { id "assert-reg"; origin case_input; } } evaluate truth(briefing_required(entity_ref("urn:tutorial:ivanova"))); expect truth_status == NEITHER; expect evaluation_status == COMPUTED; expect not applied(BriefingRequired2027); } ``` The test name reads: "Before the `effective` window the rule takes no part." Note: `decision_time` in both scenarios is March 2027, and only `legal_time` changes. The answer date does not select the law. ## A rule dated by edition The right to order digitization appears in the 2027 edition. The norm has no `effective` of its own: the anchor leads to that edition's fragment, and its `in_force` decides the rule's participation. ```law @source(ARCHIVE_RULES_2027_P6) rule DigitizationOrder strict { for p: Person; when in_researcher_registry(p); then may_order_digitization(p); } ``` | `legal_time` | `may_order_digitization` | Document | |---|---|---| | 2026-06-01 | `NEITHER` | issue `EDITION_NOT_APPLICABLE` | | 2027-06-01 | `TRUE_ONLY` | — | This is the corpus's ordinary form: `in_force [@…, infinity)` on the edition and rules without their own window, dated by anchors. A rule is removed only when **all** editions it is anchored to are inapplicable on the date of law; the document carries one issue per edition, and `why_not` answers with the same `NOT_APPLICABLE`. An edition with neither `in_force` nor another applicability event dates nothing: "law is not dated" is an answer, not "not in force". When to choose what. `effective` on a rule — when one article enters into force apart from the act: the Social Code of RK holds nine such windows from 1998 to 2023. An edition — when the act is dated as a whole; then a window on the rule is spare and will sooner or later diverge from `in_force`. ## A date in the body The third way dates no norm at all but compares a fact's date. Tickets issued before the 2026 rules entered into force are subject to reissue: this is a condition on a fact, and it lives in the body. ```law rule OldCardReissue strict { for p: Person; for on: Date; when reader_card_issued(p, on) and on < @2026-02-01; then card_reissue_required(p); } ``` | Ticket issued | `card_reissue_required` | |---|---| | 2025-12-01 | `TRUE_ONLY` | | 2026-03-01 | `NEITHER` | `legal_time` is irrelevant here: the rule applies on any date of law, while the fact's date decides. So the corpus also writes retroactivity: by comparing the event date in the body, not by a window. ## A fact is dated too A norm is dated by law, a fact by the world. A case statement carries a `valid` window: when it holds of the legal state. An accreditation issued from 2027 does not enter supports in June 2026. ```text assert accredited(entity_ref("urn:tutorial:ivanova")) { id "assert-acc-2027"; origin case_input; valid [@2027-01-01, infinity); } ``` | `legal_time` | `accredited` | Document | |---|---|---| | 2026-06-01 | `NEITHER` | issue `ASSERTION_OUTSIDE_VALID` | | 2027-06-01 | `TRUE_ONLY` | — | The window checks against the same `legal_time` axis; `evaluation_status` stays `COMPUTED`, because the computation took place — just without this fact. Two more fact times, `observed` and `recorded`, answer another question: when observed and when entered into the system. They compare with nothing but each other. ## Three compiler refusals A rule holds one window. A second `effective` in the same block is a refusal, not an intersection: ```text error LDC-E1329: повторная клауза `effective` в правиле — не более одной на блок (§94, E-0114) ``` The diagnostic reads: "repeated `effective` clause in a rule — at most one per block". A window boundary is a date, an instant, or `infinity`. The compiler does not accept a name instead of a date, however telling it seems to you: ```text error LDC-E1305: граница effective — дата/instant или infinity ``` The diagnostic reads: "an `effective` boundary is a date/instant or `infinity`". `Date` and `Instant` are different kinds, and they cannot be compared. Replace the date in `OldCardReissue` with the instant `@2026-02-01T00:00:00+05:00`: ```text error LDC-E2108: «<»: несравнимые виды Date и Instant — §57/§48 требуют совпадения видов, неявных конверсий нет ``` The diagnostic reads: "'`<`': incomparable kinds Date and Instant — kinds must match, no implicit conversions". No implicit conversions on purpose: midnight of 1 February in Almaty and in Greenwich are different instants, and which of them is "the date" is a policy question, not an arithmetic one. Write the threshold in the argument's kind: date to date, instant to instant. All three refusals belong to the language. ## Why law stays silent When a norm yields `NEITHER` on any case, dates are the first thing to check. There are three: the case's `legal_time`, the rule's `effective`, and the `in_force` of the edition the `@source` leads to. A stub edition with a future `in_force` removes all rules anchored to it at once, and `check` will not tell: statically all is correct; removal happens at runtime. `why_not` names the candidate and its status — that is the first tool, not the last. ## Next The `effective` window says when a norm applies. When the norm's **addressee** must act — by which date to perform, within which term to answer — is another machine: the calendar, the terms-counting policy, and the `deadline` query; the tutorial on terms is devoted to it. And in the duty tutorial the window will appear on the position itself: the "from 2027" milestone stays in the rule's `effective`, while the aim's window counts from the event. Both pages are in the track plan but not yet written. The exercise for this page is [/tutorials/exercise-time/](/tutorials/exercise-time/).