[HARDENING] PENDING-127 built — and the defect was unary, not binary
emit fingerprinted 261 of 261 Alexander regions under a hardcoded date. The fix records no new fingerprints at all, because name-landing is anchor-start evidence and content_sha256 is a whole-span claim. My filed acceptance fixture was stale — Alexander front_matter was partitioned out on 2026-08-07 — and measuring produced a better control than I specified: Alexander against Mauss, two real artifacts. stale stays synthetic and labelled. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A35wiD55yRHj5U1ECZAX4t
This commit is contained in:
co-authored by
Claude Opus 5
parent
6c42878e27
commit
5dd158eec1
+19
-1
@@ -2171,6 +2171,24 @@ Three cases, all discriminated: a rule ran → existing output already says so,
|
||||
|
||||
**Files affected:** `~/_Dev/studium-engine/docs/spec/r0-reading-index-contract.md` §4; `~/_Dev/studium-engine/engine/reading_index.py` (`emit`).
|
||||
|
||||
**Awaiting:** Steward authorization (D-1 lane).
|
||||
**Awaiting:** ~~Steward authorization (D-1 lane).~~ → **BUILT 2026-08-08, `ccc4d6c`.**
|
||||
|
||||
---
|
||||
|
||||
### AMENDMENT 1 — 2026-08-08, built; and the defect was one degree worse than filed
|
||||
|
||||
**§A — Not binary. UNARY.** `emit` promoted `baseline_sha256` → `content_sha256` on **every** region — measured **261 of 261** for Alexander, including regions no instrument had verified — under the **hardcoded** date `"2026-08-07"`. So three different answers lived in one contract and one module: §3 three states, §4 two, the code one.
|
||||
|
||||
**§B — The fix goes further than (a) asked, on this item's own logic.** A `content_sha256` attests the **whole span**; name-landing is evidence about the anchor's **first line**. Recording the former because the latter held **promotes a weaker claim into a stronger one** — the PENDING-47 shape. So emission now records **no new fingerprints at all**: verified-by-fingerprint keeps its stored hash · verified-by-name-landing carries none · `stale` keeps the stored hash unaltered · `unverified` carries none. `baseline_sha256` is not emitted — recomputable at any moment, and a baseline in a reviewable artifact is an invitation to promote it. **A fingerprint now enters only through an attested re-verification**, which is PENDING-121 condition 4 made reachable.
|
||||
|
||||
**§C — The divergence guard.** State determination is now **one function** (`region_state`) called by both `validate` and `emit`, which had silently disagreed. That is §3's own *"one mechanism with two call sites, not two mechanisms that drift"*, applied to this module's **interior** rather than to the pair it was written about.
|
||||
|
||||
**§D — ⚠ THE ACCEPTANCE FIXTURE I FILED WAS STALE, and measuring corrected it.** I wrote that Alexander's five `front_matter` anchors must emit `unverified`. They were **partitioned out on 2026-08-07**; Alexander is now **261/261 name-landing with zero unverified**. The real unverified population is **Mauss 23 + after-the-reply 33 = 56**. So the discriminating pair is **Alexander against Mauss — two real artifacts**, which is a better control than the one I specified. Totals now: **271 verified · 56 unverified · 0 stale · 0 fingerprints**, and **emit and validate agree on all of it**.
|
||||
|
||||
⚠ **`stale` is unreachable from live data** — no region carries a stored hash, so nothing can mismatch. Its control is **synthetic and labelled synthetic**, rather than letting the real pair cover a state it cannot reach.
|
||||
|
||||
**§E — One pre-existing check went red and was REPLACED, not deleted.** It asserted the promotion this item rules a defect. A test that pinned the old contract is evidence of what the contract used to say, so the reversal is left legible in place.
|
||||
|
||||
**Landed:** contract **v0.1 → v0.2** with the superseded sentence preserved in place; suite **31 → 44**; fleet **7/7 green**. Both trigger rules fired on the commit.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user