Observation — history

The dated record of how Observation got here, moved out of the spec on 2026-10-20 because a reader does not need it to use the spec today. The spec keeps every section spec-format.md requires and its Deleted: tombstones; everything smaller is in git log --follow -- atoms/observation.md.

Decisions

Entries that record a migration or a rename rather than a turn the pattern took, and the two turns that put the amend’s two writes in one transaction under an observation’s own critical section and forbade repairing a split amend, which the Store contract took over on 2026-10-20.

  • 2026-08-30 — One writer per transition, and no repair leg. Chose: transactional atomicity as the only conforming implementation of [Amend]’s two writes, the crash-recovery scan withdrawn; the per-id serialization stated as a critical section with its semantics — taken before the state check, released on return or death, a lease’s expiry the invocation’s terminus, a stalled invocation re-reading the state under the critical section and landing [Already Amended]; a deployment-declared clock offset allowance under which the future-dated check on a caller-supplied [Recording Instant] runs. Over: a scan “that detects and repairs dangling amendment links on restart” offered as an equal alternative to a transaction, beside a caller told to read the original and retry; a future-dated refusal decided by comparing the caller’s stamp to the node’s clock with no margin. Because: the scan presumed a visible partial record that Invariant 7 says never exists, could relink one dangling shape but not the other — the successor’s content is nowhere in the store, and un-marking the original rewrites a write-once field — and made a second writer for an act the caller’s retry could already have landed; and a caller’s stamp and the node’s reading are two clocks, so a refusal resting on their comparison needs the margin on the page (the frozen rules of 2026-08-30 — A compensator is exclusive, A stamp from another seam never decides a write alone — with Recovery commits under a declared service identity … and what cannot be re-derived is re-run, frozen 2026-08-29).

  • 2026-09-13 — Rewritten in GRACE lang v0.40; nothing but language changed. Chose: the four actions as a signature block, Invariant 1 through 9 keeping their numbers, every success effect conditioned on a declared admitted record, admitted amend, admitted retract or admitted read (Hard invariant 16), [Amend] and [Retract] unified under a declared chain action so their shared guards are stated once, the per-action rejection priority paragraph collapsed to one seven-row case space, the arithmetic in recorded_at ≤ now + clock_offset_allowance routed through a declared future bound so no rule carries a sum (Closed vocabulary 9), the five acceptance areas opened into Check 1.1 through 6.1 with four External checks, the Non-goals-and-edge-cases prose split into a Non-goal 1 through 22 family and four edge-case families. Over: the prose spec. Because: the migration plan; cites.py --into clinical-observation found nothing citing this atom by label. 61.2 KB → 60.7 KB, the smallest reduction of the migration — this atom’s prose carried almost no restatement, and what came out was one repeated precedence paragraph.

  • 2026-09-13 — The only atom that forbids repair-later. Chose: Invariant 7.3 and Atomic writes 4 — no reader may observe a partial record once a crash has landed, and the implementation MUST NOT repair a dangling amend. Over: the crash-recovery scan every other store in the corpus is permitted. Because: the partial record is visible between the crash and the repair, which is the state Invariant 7.3 says never exists — and one of the two dangling shapes cannot be repaired at all, because an original marked amended with a successor id naming no record has lost the successor’s value, unit, clinician and reason entirely, and un-marking it would rewrite a write-once field (Invariant 9.1).

  • 2026-09-13 — Renamed from Clinical Observation; the domain was in the name, not the concept. Chose: Observation, with patient_ref renamed subject reference and the clinician vocabulary neutralized wherever it was definitional. Over: holding the name, and over Superseding Record and Amendment Chain, which name the invariant more precisely and read less naturally. Because: atoms/TAXONOMY.md had flagged this atom as the corpus’s masquerade candidate since 2026-06-08 — a neutral concept dressed in domain clothes — and gated the judgment on the EOS strip test rather than on taste. The GRACE migration made the test decidable. Of 173 labelled rules, not one carries a clinical semantic: value, unit and observation type are opaque (Identity 14, Identity 15), the atom is forbidden to interpret a value (Non-goal 4) or confirm one correct (Non-goal 5), and what counts as valid is entirely the deployment’s (Non-goal 1, Operation 5). Strip the setting and what remains is an amendable, attributed, retractable measurement record — equally a vital sign, an assay, an instrument reading, a financial mark. The two domain-flavoured identifiers were opaque references, and renaming one of them removed the last of it. Medication Order stays tagged domain: healthcare and earned it — its guards are irreducibly clinical and no census can count them away. The calibration the maintainer set is visible in what did not change: the worked example keeps its nurse and its blood pressure, and the Standards references keep their healthcare anchors, because those are illustration and evidence rather than framing. Neutral where the text is definitional, concrete where it is illustrative.

Migration notes

  • 2026-09-15 — Capability requirement 1, moved from Operation. What the deployment supplies, which is what the family means. The rule stood under Operation — one action’s rules — while naming no action, because this spec was migrated before the standard family had a home in an atom; the five atoms migrated a day later put the same obligation here. The words are the words the rule carried (council read 76).

↑