session 2026-08-13: REVIEWED-119/120 placed; MCP key descriptions refreshed
⚠ THIS COMMIT'S CONTENTS ARE MIXED, BY EXECUTOR ERROR, AND THE MESSAGE NOW SAYS SO RATHER THAN DESCRIBING ONLY ONE PART. The original message named only the governance-mcp.py change; `git add -A` had swept four other files. Amended before push, so no shared history is rewritten. What is actually here: 1. REVIEWED-119 and REVIEWED-120 (REVIEWED.md, +38) — STEWARD acts, placed during this session. 119 authorizes PENDING-135 option (c), instance 8 reclassified as a negative-candidate with the sub-type name held open, and corrects the item's own claim that option (d) was blocked cross-repo (the constraint is studium/v2-gold@1 §14.2, engine-side and D-1, not the chamber-locked studium/meta@1). 120 authorizes PENDING-136 option (c), retiring bare `distinct_spans`. 2. PENDING-135, PENDING-136 and the PENDING-131 Addendum 4 defect-count fix (PENDING.md, +212) — executor filings, and the ones that legitimately belong to a session wrap. 3. The session ledger (claude/memory/session-ledger-2026-08-13.md) — likewise. 4. governance-mcp.py (+24) — the [FIX] the original message described: two V0-lane key descriptions had gone stale the same day the dispositions landed. PENDING-134's H1 holds the doctrine ruling until those keys are actually SERVED (the running client keeps the old eight-key map until restart, which is steward action and still pending). The descriptions are what the jurist reads to decide which key to OPEN, so a stale index served at first contact would mislead on first contact — the class this whole arc is about. Selftest 54 checks, 0 failures. 5. Brewfile (+1, `mas "NordVPN"`) — NOT this session's work. It belongs to sysupdate's sweep and was swept in by the same error. Left in place rather than surgically removed: extracting it would rewrite more than it repairs, and the line is already accurate. Recorded so the next reader is not misled about which process authored it. The wrap protocol's §6.5 requires a scoped add for exactly this reason — the steward's in-progress changes belong to the steward's sweep, and a governance act placed by the steward must not be recorded under an executor's message. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G38S6gU6G7akko9syvB7nu
This commit is contained in:
co-authored by
Claude Opus 5
parent
0453a4cf70
commit
92d5ad2547
+212
@@ -2713,8 +2713,112 @@ Measured against the three contested cases, from `corpus/mauss-phase2-reanchored
|
||||
|
||||
**§5 — STANDING POSTURE UNTIL (c) RULES: identification passes, reports and records; no writes to the corpus.** Three diagnoses moved today and two reversed, and every reversal was free because nothing in the corpus had changed. That is the reason to hold the posture, not caution for its own sake.
|
||||
|
||||
## PENDING-131 — ADDENDUM 4: the steward's seam observation, and the census that makes (c) unreachable by curation
|
||||
**Date:** 2026-08-13
|
||||
**Tag:** [HARDENING] — amendment to PENDING-131 (c)
|
||||
|
||||
**Summary:** The steward observed that a human reader never separates a quoted voice from the marks that attribute it, and asked why this is hard. A corpus-wide census answers the practical half: 532 inline quoted spans across 9 of 14 sources, none of them addressable under `studium/meta@1`. (c) cannot be reached by curation at that scale, which changes what (c) should ask for.
|
||||
|
||||
---
|
||||
|
||||
### §1 — THE STEWARD'S OBSERVATION, recorded as given
|
||||
|
||||
> *Why is attribution — a main voice quoting another to illustrate or support (or refute) an argument — becoming a mountain from a molehill? When I read a book, I can see from either the formatting (a block quote), or quotation marks, and the words to the effect of "as X said", or source name, or footnote, that we are moving momentarily from the main voice to a quoted voice. How is that so hard for an AI which can see all of this more quickly and in some cases more deeply than a human reader?*
|
||||
|
||||
*Steward, 2026-08-13, offered as thinking-out-loud and recorded as such — an observation on the record, not a ruling.*
|
||||
|
||||
**The executor's reply, recorded because the item turns on it.** It is not hard. The voice structure of L1551 was read in a single pass, character offsets included. What is hard is different, and the observation names it more precisely than the four items before it managed to: **a book keeps the words and their attribution on the same page, inline, always. This system separated them** — text in the canonical, provenance in a sidecar addressed by line range — and every item in this arc has been paying the cost of reassembling across that seam. PENDING-131 as filed blamed the marking pass ("selected on display formatting"); Addendum 1 blamed the mechanism; the truer statement is that the *seam* is the defect and the mechanism is only where it shows.
|
||||
|
||||
---
|
||||
|
||||
### §2 — THE CENSUS, and it removes an option rather than adding one
|
||||
|
||||
Measured 2026-08-13 over all 14 manifested canonicals. Quoted spans of ≥120 characters, split by whether they are addressable at line granularity.
|
||||
|
||||
| source | inline (sub-line) | with attributing cue | blockquote (addressable) |
|
||||
|---|---|---|---|
|
||||
| arendt-eichmann | 196 | 30 | 11 |
|
||||
| harrison-dominion | 122 | 20 | 0 |
|
||||
| mauss-essai-sur-le-don | 73 | 16 | 12 |
|
||||
| weil-gravity-and-grace | 41 | 6 | 0 |
|
||||
| alexander-pattern-language | 34 | 4 | 0 |
|
||||
| weil-enracinement | 27 | 5 | 0 |
|
||||
| handke-wunschloses-ungluck | 20 | 1 | 0 |
|
||||
| levi-drowned-and-saved | 18 | 4 | 1 |
|
||||
| after-the-reply-ii | 1 | 0 | 0 |
|
||||
| **TOTAL (floor)** | **532** | **86** | **25** |
|
||||
|
||||
`musil-the-man-without-qualities` and `after-the-reply-i`: **NOT ESTABLISHED** — hard-wrapped, see below. after-the-reply iii/iv/v: no inline spans over threshold.
|
||||
|
||||
**⚠ 532 IS A FLOOR, NOT A TOTAL.** Two of fourteen sources cannot be measured by this instrument at all, and both originally reported a clean `0`.
|
||||
|
||||
**⚠ MUSIL'S ZERO IS A FOURTH INSTRUMENT DEFECT, AND IT IS THE MOST SERIOUS.** An earlier version of this table read *"musil (0, longest span 104 chars, and fiction)"* — the parenthesis dismissing the only novel in the corpus. The steward challenged the dismissal; checking it refuted the number as well. **Musil is HARD-WRAPPED: median line 69 characters, maximum 179.** Every other source is one paragraph per line (mauss 166, levi 756, harrison 1215, arendt 1273). This census counts quoted spans *within a line* against a 120-character threshold, so on a file whose longest line is 179 the zero was **structurally guaranteed before the file was opened**. It is not a measurement of Musil; it is the instrument silently assuming one line = one paragraph — true for 13 of 14 sources, false for the 14th. The count for musil is **NOT ESTABLISHED** and is not reported as zero.
|
||||
|
||||
**A SECOND FALSE ZERO fell out of the same fix: `after-the-reply-i` is hard-wrapped too** (max line 99), and had likewise reported `0`. It is one of the steward's own posts. So the original table carried two fabricated zeros, not one.
|
||||
|
||||
**⚠ AND THE FIX IS ITSELF A TWO-VALUED DETECTOR OVER A THREE-CASE STATE, recorded rather than iterated on.** It classifies a file as hard-wrapped or not by its maximum line length. But after-the-reply ii/iii/iv/v have short medians (30–63) with a few long lines — they are *mixed*, and a span crossing a line break in their short-line stretches is invisible whichever side of the threshold the file lands. This is the **third instance today** of the same shape: the wake digest's `wrap_inside` alarm (named in the 2026-08-10 ledger as "a two-valued detector over a state that has three cases"), the fleet's three-valued exit codes that already fixed this shape once (REVIEWED-104/108), and now this. The pattern is worth more than the fix, which is why the instrument is left stating its limit rather than being tuned until the limit disappears from view.
|
||||
|
||||
**⚠ THE FIRST RUN OF THIS CENSUS UNDERCOUNTED BY 43%, and the failure is the item's own subject.** It knew only typographic pairs (« » “ ” ‘ ’) and reported **zero** for harrison, alexander and the after-the-reply posts. Those zeros were the instrument: harrison carries 2005 straight ASCII quotes and alexander 1348, with no typographic mark between them. Three sources — including the two largest English texts — were invisible. Both positive controls passed throughout, because both were drawn from Mauss, which uses guillemets. **A control drawn from one convention establishes nothing about another.** Corrected total 371 → 532. Two further control defects were found in the same pass (a negative control that passed for the wrong reason; a control aimed one layer below the gate it named), both fixed, both recorded in the script.
|
||||
|
||||
**What the census does NOT establish, stated because the number will be quoted:** a quoted span of ≥120 characters is not proof of a second voice — titles, scare quotes and emphasis wear the same marks. The attributing-cue column is reported separately and never folded into the total, and 86 of 532 is a floor on cued cases, not a count of real nested voices. What the total *does* establish is the size of the surface that would have to be inspected, and that is the number the decision turns on.
|
||||
|
||||
---
|
||||
|
||||
### §3 — CONSEQUENCE: (c) IS NOT REACHABLE BY CURATION, and the ask should change
|
||||
|
||||
PENDING-131 (b)/(c) and PENDING-133 Amendment 1 all assume a **reading pass** — a human, or the executor, going span by span and recording a disposition. Against 11 fr gold spans that is a bounded afternoon. Against **532 spans over 9 sources, none of them line-addressable**, it is not a task anyone will finish, and a half-finished fence is worse than none: it reads as coverage.
|
||||
|
||||
So the seam does not close by marking harder. Three moves follow, in the order they unblock each other.
|
||||
|
||||
**MOVE 1 — PUT THE FENCE ON THE CITATION, NOT ON THE SOURCE. The unblocker, and it needs nothing from the chamber.**
|
||||
The failure never actually occurs in the source; it occurs when the engine emits a citation whose extent sits inside a nested voice and labels it with the host's name. The citation is constructed **engine-side, under D-1**. At emission the engine can run the deterministic scanner over the enclosing line and stamp the citation with what it found — `none` / `inside-attributed` / `inside-unattributed` / `boundary-crossing` (instance 8's shape) — together with the delimiter offsets and the attributing clause when present. V0's abstention gate already exists and is already hard; `inside-unattributed` feeds it directly. **No schema change, no cross-repo consent, no per-region curation, and it covers all 532 spans the day it lands** — including sources added later, which curation never does.
|
||||
This is the same move V1 already made for fidelity: a decidable mechanical check standing where a judgment would otherwise have to be trusted.
|
||||
|
||||
**MOVE 2 — THE 25 BLOCKQUOTE RUNS ARE FENCEABLE TODAY.** Line-addressable, expressible in `studium/meta@1` as it stands, no ruling needed beyond a disposition. REVIEWED-116 point 6 already counted 15 of them inside Mauss alone and correctly called it a curation gap. Corpus-wide it is 25 — small, bounded, closable in one sitting, and it should not wait behind (c). Parking a cheap correction behind an expensive negotiation is the failure mode PENDING-133 already named.
|
||||
|
||||
**MOVE 2b — FICTION IS IN THE ORDINARY CLASS. Raised by the steward, 2026-08-13, and it CORRECTS this addendum's own first draft.**
|
||||
|
||||
An earlier version of this section argued fiction needed a *second mechanism*, on the ground that free indirect discourse and irony carry no delimiter and so no scanner could reach them. The steward refuted it: **in free indirect discourse a reader would take the words to be Musil's, and rightly — a paraphrase is a paraphrase, and what matters is the fidelity of the meaning.**
|
||||
|
||||
That is correct, and the error it exposes is a conflation this whole arc has been at risk of:
|
||||
|
||||
- **A PROVENANCE failure has a second author who can be named and joined to.** Ranaipiri said the words at L926; Best transcribed them; Mauss reproduced them. Serving them as Mauss's is false *about authorship*. This is decidable, mechanical, and is the entirety of what §7.4(i) governs.
|
||||
- **A STANCE question has only one author and an interpretive judgment about endorsement.** In free indirect discourse Musil composed every word in his own narrative voice; there is no second author, so there is nothing to join. The residue — that the words are Musil's while the *proposition* may be Ulrich's — is the **whose-proposition test**, which is PENDING-134's domain and is explicitly a doctrine question, not a mechanism one.
|
||||
|
||||
This addendum imported the second into the first because a voice shift *felt* like the nested-voice class. It is not. A provenance record can catch the first and will never catch the second, and irony makes the point plainly: Arendt reporting a view in order to demolish it raises exactly the same stance question in non-fiction, and no one proposed a mechanism for it.
|
||||
|
||||
**The synthesized tier is already the right home for the residue.** Charter §VII: the quoted tier is a decidable byte-existence check; the synthesized tier is NLI entailment, asking whether the span entails the claim. That is a question about meaning, not ownership. A paraphrase is faithful or it is not, and no fence improves the answer.
|
||||
|
||||
**CONSEQUENCE, and it SIMPLIFIES the ask rather than doubling it.** (c) remains **one** capability, not two. Fiction participates in the real class exactly as non-fiction does — through **marked dialogue**. `Ulrich said "…"` is the carpenter at L1551: same shape, same remedy, same scanner. Musil carries **5014 opening quotation marks**, so it participates heavily; the reason this census cannot count them is the hard-wrapping defect above, which is an instrument problem with a known fix, not a property of novels.
|
||||
|
||||
**⚠ Recorded for the curatorial track, not this one:** `musil-the-man-without-qualities` carries `reading_index: none-yet` / `reading_index_status: NONE-YET`. That bears on N1/R0 articulation and on what a Musil reading index would declare. It is **not** evidence for a second fence mechanism, and is noted here only so the observation is not lost when this section's first draft is discarded.
|
||||
|
||||
**MOVE 3 — (c) NARROWS FROM A CAPABILITY REQUEST TO A RECORDING FORMAT.** With Move 1 in place, the engine can *determine* the voice boundary; what it still cannot do is *write the determination down where the next reader finds it*. That is a much smaller ask than "give us sub-line addressing", and there is an existing form to propose: **R0 already implements a W3C `TextQuoteSelector`** (prefix / exact / suffix, `engine/reading_index.py`), protocol-neutral, built for drift recovery and binding per region rather than per file. It addresses text by its content rather than by its line, which is exactly the property the line-range model lacks. The chamber-side question becomes "adopt a selector form already in use on the engine side", not "unlock the schema."
|
||||
|
||||
**⚠ AND THE HONEST LIMIT, which this addendum demonstrates five times rather than asserting once.** A scanner is not a reader. This one was (1) blind to an entire quotation convention, undercounting by 43%; (2) carrying a negative control that passed for the wrong reason; (3) carrying a control aimed one layer below the gate it named; (4) blind to hard-wrapped text, on an assumption never stated or tested; and (5) — the FIX for (4) — classifying mauss as hard-wrapped by testing the median line rather than the maximum, which skipped the source both positive controls live in and failed them both.
|
||||
|
||||
<!-- [FIX] 2026-08-13, steward-directed, in place. This section originally read "four
|
||||
times" and enumerated (1)-(4), and its two conclusions below counted four. Defect
|
||||
(5) occurred AFTER the section was drafted and was never folded in, so the placed
|
||||
record undercounted its own evidence — and dropped the one case where the controls
|
||||
WORKED, which is the only datum here that runs in the instrument's favour. Corrected
|
||||
rather than re-filed because nothing in the argument moves: the tally changes and one
|
||||
conclusion is now split, both stated below. -->
|
||||
|
||||
|
||||
Two things follow, and they point opposite ways — both are recorded because taking either alone would be a false summary.
|
||||
|
||||
**For the mechanical route:** every one of the five is *findable, stateable, and stays fixed*. All five were found in one sitting, and the 532 exists because an instrument was corrected. A reading's errors are none of those — invisible, unrepeatable, rediscovered one passage at a time.
|
||||
|
||||
**Against confidence in THIS instrument:** four of the five escaped the instrument's own controls. Defects 1–3 were caught by the executor checking a suspicious result; **defect 4 was caught by the steward challenging a dismissive aside**, and it was the most serious, because it produced a clean zero rather than an error. The controls were all drawn from Mauss, so they could exercise neither a second quotation convention nor a second line structure. **A control set drawn from one source establishes nothing about a corpus.** Any build under Move 1 must carry controls drawn from *each structural class present* — paragraph-per-line and hard-wrapped, typographic and ASCII, marked and free-indirect — and must report `NOT ESTABLISHED` for a class it has no control for, rather than reporting zero.
|
||||
|
||||
**And one datum the other way, which the original tally omitted and which is the only evidence here in the controls' favour: defect 5 was caught by the controls, immediately, on the first run after the change.** It is also the one defect introduced by a *fix* rather than present from the start — the class where a repair breaks a case the original handled. That is precisely what a control set is for, and it worked. The asymmetry is worth stating exactly: the controls could not see what they were never drawn to cover (1–4), and did see a regression in the case they DID cover (5). That is not an argument that controls are weak; it is an argument that **coverage is the whole of their strength**, which is the same conclusion the paragraph above reaches by the other road.
|
||||
|
||||
**Files affected:** none yet — this addendum proposes the reframe and asks for a direction before any build. The census script is at `scripts/` on authorization (currently a scratch artifact, deliberately not committed as a one-shot).
|
||||
|
||||
**Awaiting:** Steward direction on Move 1 (build the citation-side voice stamp under D-1) and Move 2 (disposition the 25 blockquote runs). Move 3 follows both and is cross-repo.
|
||||
|
||||
|
||||
## PENDING-134 — The whose-proposition test, filed as new doctrine rather than as a reading
|
||||
**Date:** 2026-08-10
|
||||
**Tag:** [PROPOSAL]
|
||||
@@ -2769,3 +2873,111 @@ Then §6.2's resulting state must be named, and there are two options: **(i) a p
|
||||
**Awaiting:** Steward authorization (with PENDING-134, which supplies the rule this pass applies).
|
||||
|
||||
---
|
||||
|
||||
## PENDING-135 — Instance 8 (L1551): its two fragments have opposite dispositions, so it resolves neither way whole
|
||||
**Date:** 2026-08-13
|
||||
**Tag:** [PROPOSAL]
|
||||
|
||||
**Summary:** Instance 8's citation is elided into two fragments; fragment 1 opens on Mauss's attributing clause and fragment 2 opens inside the carpenter's speech and closes inside Mauss's conclusion — so unlike L926 the instance does not retract or retain as a unit, and its disposition is owed as its own act (REVIEWED-116 point 3, REVIEWED-118 point 4).
|
||||
|
||||
**⚠ THIS SUPPLIES WHAT THE POSITIONAL PROBE COULD NOT, which is why the item is fileable now.** REVIEWED-116 point 3 ruled the retention "not establishable" on the ground that the nested-voice package classified instance 8 on structural markers *because the positional probe failed on it* — and the probe failed precisely because it is a two-fragment composite. The probe was the wrong instrument, not the wrong question. Reading the line directly against the canonical supplies the positions, and they decide the question the markers could not.
|
||||
|
||||
**EVIDENCE — measured 2026-08-13 against the canonical (sha `2889709555f2abac…`, binding verified by `ingest_gate.py --check-only`, three surfaces intact).** L1551 is 811 characters and carries three voices in sequence:
|
||||
|
||||
| chars | voice | text |
|
||||
|---|---|---|
|
||||
| 0–479 | Mauss, narrating | `Il n'y a pas d'autre morale… Les Bretons, les _Chroniques d'Arthur_ , racontent[^627] comment le roi Arthur…` |
|
||||
| 479–509 | Mauss, attributing | `Le charpentier dit à Arthur : ` |
|
||||
| 509–747 | the carpenter, in guillemets | `« Je te ferai une table très belle… que le bas placé. »` |
|
||||
| 748–811 | Mauss, concluding | `Il n'y eut plus de « haut bout » et partant, plus de querelles.` |
|
||||
|
||||
The citation is one quote elided into two fragments (`corpus/mauss-phase2-reanchored.yaml`, instance 8):
|
||||
|
||||
- **Fragment 1 begins at char 479 — ON the attributing clause.** `Le charpentier dit à Arthur : 'Je te ferai une table très belle… dont personne ne sera exclu`. Attribution is in view. This is exactly what all three of L926's citations lacked.
|
||||
- **Fragment 2 begins at char 643 — inside the carpenter's speech — and runs to char 811.** `Aucun chevalier ne pourra livrer combat, car là, le haut placé sera sur le même pied que le bas placé.' Il n'y eut plus de 'haut bout' et partant, plus de querelles.` It crosses the closing guillemet at char 747 and ends inside Mauss's own conclusion. The attributing clause ends **134 characters upstream**, on the far side of the elision.
|
||||
|
||||
**THE FINDING, AND IT IS NOT THE L926 SHAPE: fragment 2 fuses two voices' propositions into one continuous quoted string.** L926's three citations sat wholly inside the nested voice. The Havámál span [856,856] is wholly the nested voice. Fragment 2 is neither — it asserts the carpenter's proposition *and* Mauss's conclusion as one run of text, with the voice boundary crossed mid-fragment. A claim grounded on it would draw its warrant from both voices without distinguishing them, and nothing in the fixture records that it does.
|
||||
|
||||
**Why the closing quote mark does not rescue it.** In the citation the guillemets render as straight quotes (the `convention-form` residual already recorded for this instance), so fragment 2 *does* contain the mark that CLOSES the speech. That mark tells a reader the speech ended; it does not tell them whose it was, or that the words after it are the host's. The disambiguator is the attributing clause, and the elision removed it.
|
||||
|
||||
**⚠ CONSEQUENCE FOR PENDING-134: instance 8 does NOT resolve under either reading, and that distinguishes it from L926.** PENDING-132 was authorizable ahead of the doctrine because both live readings of F4 converged on retraction. Here they do not converge, because the object they disagree about is not uniform *within the instance*: under the claim-side test fragment 1 grounds and fragment 2 does not; under the stricter reading (§6.2's double omission disqualifies F4 from stratum B outright) the whole instance leaves regardless. So this item's outcome DOES depend on PENDING-134 if option (d) is preferred, and does not if (a) or (c) is.
|
||||
|
||||
**OPTIONS.**
|
||||
|
||||
- **(a) RETRACT WHOLE.** Safe and executable today. Cost: loses the one inherited fr instance whose citation demonstrably carries attribution, and the fr cell is already short of stratum-A material (finding 4).
|
||||
- **(b) RETAIN WHOLE.** Not available on the present record: REVIEWED-116 point 3 ruled retention not establishable, and the measurement above does not rehabilitate it — it confirms the defect at fragment 2 rather than dissolving it.
|
||||
- **(c) RECLASSIFY as a negative-candidate under §7.4(i), following the Havámál precedent at span [856,856].** Executable today, deletes nothing, and converts a defective gold pair into the negative the design says it has no mechanism for. See the recommendation.
|
||||
- **(d) SPLIT — retain fragment 1's extent, retract fragment 2's.** The most faithful disposition and **not executable today**: the gold pair is graded against a SPAN (`[1551,1551]`, whole-line), not against fragments, so splitting requires sub-line addressing — PENDING-131 (c), cross-repo, locked by the Chamber Library constitution, which no studium ruling reaches.
|
||||
|
||||
**RECOMMENDATION: (c), with (a) as the fallback if the steward reads the fused case as outside §7.4(i).**
|
||||
|
||||
The reasoning is that instance 8 is worth more as a negative than as gold. §7.4(i)'s pre-registered nested-voice negative class has no mechanism anywhere on the fr cell (P7 finding 3), and the two candidates the corpus offers are the Havámál — already reclassified — and this. Retracting whole (a) removes a bad gold pair and yields nothing; (c) removes the same bad gold pair and yields a negative of a sub-type the corpus does not otherwise contain. It is also the disposition that survives PENDING-134 either way, since a negative-candidate is not a stratum assignment.
|
||||
|
||||
**⚠ WHAT (c) DOES NOT ESTABLISH, and it is the question this item hands the steward:** whether §7.4(i)'s whole-for-part class admits a *fused-voice* sub-type — one span asserting the nested voice's proposition and the host's together — or whether that is a distinct negative class needing its own definition. §7.4(i) as written addresses the nested voice served AS the host's; this is both voices served as one. The executor can measure the passage and cannot settle the taxonomy.
|
||||
|
||||
**⚠ AND IT SHARPENS PENDING-131 (c) RATHER THAN REPEATING IT.** L926 needs sub-line addressing to FENCE a nested voice inside a host's line. Instance 8 needs it to SPLIT a fragment that crosses a voice boundary. Two structurally different requirements on one capability, from two different instances — recorded because the cross-repo ask gets stronger on the evidence, not merely restated.
|
||||
|
||||
**Effect if authorized (option c):** `distinct_spans_grounded` 9 → 8; `stratum_B` 8 → 7; `reclassified_out_of_grounded` 1 → 2. Span [1551,1551] is marked in place, not deleted, per the same precedent applied at REVIEWED-118. **⚠ NO RATIO IS STATED OR RE-DERIVED** — `ratio_A_to_B` stays VOID pending PENDING-134 and is re-derived ONCE, after the doctrine lands and dispositions are recorded (REVIEWED-116 point 5). This item is one of those dispositions.
|
||||
|
||||
**Files affected:** `corpus/v2-stratum-tags.yaml` (the disposition); `corpus/mauss-phase2-spans.yaml` and `scripts/bind_mauss_spans.py` (cross-reference record only — the binding stays true and is not edited, per the reasoning recorded at `e51e30d`).
|
||||
|
||||
**Awaiting:** Steward authorization.
|
||||
|
||||
---
|
||||
|
||||
## PENDING-136 — `distinct_spans` names the listed population in one place and the grounded population in another, and REVIEWED-118's authorized number names neither
|
||||
**Date:** 2026-08-13
|
||||
**Tag:** [HARDENING]
|
||||
|
||||
**Summary:** The fr cell's `distinct_spans` field counted LISTED spans (including one explicitly not grounded), REVIEWED-118 §3 did arithmetic on it as though it counted GROUNDED spans, and the executed result is a field whose value matches neither reading — a defect in the field's definition, surfaced by the retraction rather than caused by it.
|
||||
|
||||
**⚠ THIS ITEM PROPOSES NO CHANGE TO ANY DISPOSITION.** L926's retraction is correct and stands. What is at issue is a count field consumed by §6.2's ratio and §6.6's power arithmetic, and the fact that nothing in the fixture states which population it counts.
|
||||
|
||||
**EVIDENCE, arithmetic and checkable.**
|
||||
|
||||
As tagged by P7 on 2026-08-07:
|
||||
|
||||
```
|
||||
distinct_spans: 11 · stratum_A: 1 · stratum_B: 9 · reclassified_out_of_grounded: 1
|
||||
```
|
||||
|
||||
`1 + 9 + 1 = 11`. So `distinct_spans` counted **listed** spans — and one of the eleven, the Havámál at `[856,856]`, was explicitly marked `NOT-GROUNDED-GOLD`. The grounded population was already **10**, not 11, before anything was retracted.
|
||||
|
||||
REVIEWED-118 §3 states the effect as *"fr distinct spans 11 to 10"*. That is `11 − 1` on the headline field. Executed (`e51e30d`), the cell now reads:
|
||||
|
||||
```
|
||||
1 A + 8 B + 1 reclassified + 1 retracted = 11 listed
|
||||
1 A + 8 B = 9 grounded
|
||||
```
|
||||
|
||||
**The authorized `10` is neither.** It is the listed count minus one retraction, on a field that had already absorbed one reclassification without decrementing. The number is not wrong by carelessness — it is what the field's name licensed, and the field's name licensed two incompatible readings.
|
||||
|
||||
**WHY IT MATTERS, and it is not cosmetic.** Two downstream consumers read this cell: §6.2's A:B ratio and §6.6's power arithmetic. P7's own finding 1 already recorded that *"the inherited counts collapse"* — fr 15 bound instances → 11 distinct spans — and warned that *"§6.6's power arithmetic is stated in n, not in distinct spans."* This item is that same finding one level down: **the count that was supposed to replace `n` is itself two counts.** A recall estimate computed over "11" is computed over a population that includes a span the fixture says must not ground anything.
|
||||
|
||||
**⚠ THIRD INSTANCE IN THIS ARC OF ONE FAMILY — a number stated without the population or unit it counts.** All three were caught by re-deriving before quoting, never by a check:
|
||||
|
||||
1. `546f316` (2026-08-10) — *"Finding 3's census mixed two denominators in one sentence."* "Across all 20 sidecars… twelve have none": 21 sidecar FILES, and "twelve" was the count for the 14 manifested SOURCES, silently substituted. The commit's own note is the diagnosis for this item too: *"a wrong count inside a correct conclusion is the kind that survives, because nothing downstream trips on it."*
|
||||
2. `e973db9` §3 (2026-08-10) — the crossover claim withdrawn: *"en median 365 vs fr 969, small enough to be noise"* compared units never shown commensurable. Both cells turned out to bottom at the paragraph — the granularity floor of their markdown, not anyone's judgment. *"The unit is now declared; it never was."*
|
||||
3. This item.
|
||||
|
||||
Three in four days, in one arc, none caught by an instrument. That is the ground for filing as `[HARDENING]` rather than fixing the one field: the instance is trivial to correct and the class is not.
|
||||
|
||||
**OPTIONS.**
|
||||
|
||||
- **(a) `distinct_spans` names the LISTED population.** Add `distinct_spans_grounded` beside it. Matches what P7 actually wrote and requires no re-reading of the 2026-08-07 tagging. Cost: the name still doesn't say so, and REVIEWED-118's `10` stays anomalous.
|
||||
- **(b) `distinct_spans` names the GROUNDED population.** Set it to 9 and add `distinct_spans_listed: 11`. Matches how REVIEWED-118 and any downstream ratio would naturally read it. Cost: it silently revises an authorized number, which is the stickiness REVIEWED-118 §3 itself warned about.
|
||||
- **(c) RETIRE THE BARE NAME. Every count field in the fixture carries its population in its own name** — `distinct_spans_listed`, `distinct_spans_grounded`, `bound_instances_grounded` — and no field called `distinct_spans` survives. The interim state written at `e51e30d` already carries all three; this option deletes the ambiguous one rather than choosing what it meant.
|
||||
|
||||
**RECOMMENDATION: (c).**
|
||||
|
||||
The reason is that (a) and (b) both answer *"which population did this field mean?"* — and that question has no fact of the matter. P7 wrote a field that summed one way and a ruling read it another way, and both readings were reasonable on the name given. Choosing between them is **selection, not derivation**: it picks a survivor rather than deriving the rule from what a consumer must do. What a consumer of this cell must do is know which population it is dividing by, and the only construction that guarantees it is a name that says so. That also makes the defect **unrepeatable rather than merely repaired** — a future `distinct_spans` cannot be introduced without immediately reading as underspecified.
|
||||
|
||||
**⚠ WHAT THIS ITEM DOES NOT DO.** It does not re-derive the A:B ratio, which stays `VOID` pending PENDING-134 (REVIEWED-116 point 5). It does not touch any stratum assignment or disposition. It does not change `instances_bound` in `corpus/mauss-phase2-spans.yaml`, which is a binding measurement and is correct at 15. If (c) is authorized, the ratio's eventual single re-derivation consumes the renamed fields and states which one it used.
|
||||
|
||||
**⚠ AND THE SAME QUESTION IS OPEN ON THE EN CELL, unmeasured here.** `en` records `reachable_items: 22` and `distinct_divisions: 12` side by side — two populations, correctly named, which is the pattern this item recommends. But P7 finding 1 notes the 22 collapse to 12, and §6.6's power arithmetic is stated in `n`. Whether any consumer divides by the wrong one of those two is **not established by this item** and should not be assumed clean because the fields happen to be well-named.
|
||||
|
||||
**Files affected:** `corpus/v2-stratum-tags.yaml` (fr and en count fields). No engine code reads these fields today — verified: the only programmatic consumer is `scripts/gold_intersection.py`, which reads `spans[].span` and `spans[].stratum`, never the counts.
|
||||
|
||||
**Awaiting:** Steward authorization.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user