epiphany/spec
Levi Neuwirth bff9c9aab8
P13-S27 round 12: two requirements that named a constraint but not its value
Independent review against 74dc994. Two findings, both blocking, and both
the same defect -- a requirement stated without the decision it requires,
leaving execution to make a design choice silently.

The convergence loop was not actually bounded. It demanded a bound and
named no limit, so execution would have chosen when non-convergence becomes
failure, changing what the experiment means. Now pinned at one normalising
step: with B0 = B_raw and B(n+1) = serialize_document(document_from_bundle(Bn),
uuid), compute at most B1 and B2, permitted maximum n = 1, with a three-row
outcome table. B1 == B0 means B_raw was already fixed. B1 != B0 with
B2 == B1 is the expected case. B2 != B1 is a hard failure that must report
all three image lengths and the first differing offset.

The bound is one step because it is a property, not a tolerance.
document_from_bundle canonicalises, so serialize_document after
document_from_bundle must reach its canonical form in a single application.
If it does not, there is no canonical form, no principled reference
artifact, and M7 is invalid as a whole -- a finding about the projection
rather than a signal to iterate further. A loop that runs until it happens
to settle tests nothing; it reports how long it took. Raising the bound
needs its own amendment and review round.

M7's location was unchosen. "In a crate that can reach the real constant"
is true of two crates and decisive for neither, and render_text_document is
pub(crate) to epiphany-textproj, so epiphany-testkit could host M7 only via
an unpinned visibility change to another crate's public API. The harness is
now pinned to epiphany-textproj, which alone has both the renderer and, via
its epiphany-ops dependency, the real constant. It lands under existing
touch row 9; no new row.

render_text_document stays pub(crate). Handoff section 1.3 records it as the
one intentional hole in the text refusal, existing solely so a negative
vector can carry the spelling it asserts is refused. Widening it to host a
mutation that gets reverted would leave a permanently widened public surface
behind, which is how a temporary harness becomes an API change nobody
ratified. That improvisation is what execution would have reached for on
hitting the wall, which is why the decision belongs here.

Still NOT RATIFIED, NOT DISPATCHABLE. Findings 9, 6, 6, 5, 4, 3, 3, 2, 2, 1,
3, 2. Blocking 4, 4, 4, 4, 2, 3, 3, 2, 2, 1, 2, 2. Twelve rounds, none
clean. The last two rounds found the same kind of defect -- a requirement
that reads as a decision but is not one -- so the next scan should hunt
remaining instructions that name a constraint without naming its value.
Everything M7 now specifies is pinned to a number, a crate or a named
artifact, which is a checkable property a round can test directly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ps1szk2mSfgp4Cz21eVH9x
2026-08-08 16:27:54 +02:00
..
vectors Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00
ANALYSIS_GENESIS_PERSISTENCE.md The operation set absorbs genesis 2026-07-24 15:11:36 -04:00
ANALYSIS_TEXT_RUN_PRIMITIVES.md Editor T4-pre W3: the text run carries both its string and its ink 2026-07-28 14:38:06 -04:00
AUDIT_GMINOR_VOCABULARIES.md Audit the G-minor reachable vocabularies: a ledger, a matrix, one stale sentence 2026-07-28 18:27:35 -04:00
CONTRACT_CORE_DECODE_VECTORS.md The decode vector corpus reaches the core score wire 2026-07-24 11:38:15 -04:00
CONTRACT_EDITOR_T1A_GOLDENS.md Editor track: the plan, and the T1a golden-harness contract 2026-07-23 14:57:43 -04:00
CONTRACT_EDITOR_T2_SELECTION.md Editor T2: contract for selection v2, the golden gate, and copy/paste 2026-07-23 17:07:18 -04:00
CONTRACT_EDITOR_T3_CARET.md Editor T3: contract for the note-entry caret 2026-07-24 12:55:05 -04:00
CONTRACT_EDITOR_T4PRE_IR.md Editor T4-pre: the IR readiness contract, and the genesis-persistence table 2026-07-24 14:47:08 -04:00
CONTRACT_EDITOR_T4PRE_W2_GLYPHS.md Editor T4-pre W2: the glyph-asset contract, and three parallelism claims get finer 2026-07-24 17:50:02 -04:00
CONTRACT_EDITOR_T4_SPIKE.md Contract revision 6: round 1 was testing the wrong property on the wrong glyphs 2026-07-28 21:24:47 -04:00
CONTRACT_FORMAT_EPOCH_MAJOR1.md Format epoch amended: pin 3c bounds the interval's conformance cost 2026-08-07 11:41:51 -04:00
CONTRACT_GENESIS_G1_INSTRUMENT.md Contract G1: one operation, and the two things that make from-empty correct 2026-07-24 18:04:30 -04:00
CONTRACT_GENESIS_G2A_SETTINGS.md Contract G2a round five: the sixth hand-maintained site, and locking Registered 2026-07-28 15:47:17 -04:00
CONTRACT_GENESIS_G2B_TUNING.md Sign t9 with a mutation that actually kills it 2026-07-29 10:18:57 -04:00
CONTRACT_GENESIS_G3A_ENTITIES.md G3a contract: ten source locators, corrected forward 2026-07-31 19:47:43 -04:00
CONTRACT_GENESIS_G3A_UNDO_REPAIR.md G3a undo repair: the tombstone branch was reachable all along 2026-07-29 18:21:45 -04:00
CONTRACT_GENESIS_G3B_MEASURE.md P13-S18: the invariant-20 outcome matrix, and what the residue actually is 2026-07-31 17:05:49 -04:00
CONTRACT_GMINOR_IMPLEMENTATION.md Amend the G-minor contract: the [7f] oracle, and the PDFs the touch table missed 2026-07-28 18:59:00 -04:00
CONTRACT_GMINOR_VOCABULARY_AUDIT.md Audit contract amendments: a possible gate, and four scoping repairs 2026-07-28 18:08:55 -04:00
CONTRACT_P13S1_LABELS.md P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
CONTRACT_P13S6_PROMOTION.md P13-S6 ratified: the lattice block, and an argument that did not survive arithmetic 2026-07-22 14:26:08 -04:00
CONTRACT_P13S6_TEMPERAMENTS.md P13-S6: the tuning constructions, drafted -- and why sourcing was not enough 2026-07-22 11:50:06 -04:00
CONTRACT_P13S16_PROJECTION.md P13-S16 scoped and blocked; P13-S27 filed 2026-07-31 20:27:43 -04:00
CONTRACT_P13S18_MATRIX.md P13-S18: the invariant-20 outcome matrix, and what the residue actually is 2026-07-31 17:05:49 -04:00
CONTRACT_P13S19_PARTIAL.md P13-S19: what a partial measure actually costs 2026-07-31 18:13:44 -04:00
CONTRACT_P13S22_TAGLOCK.md P13-S22 contract: M2's whole-test alternative was false 2026-07-31 19:30:21 -04:00
CONTRACT_P13S27_REDUCTION_AUTHORITY.md P13-S27 round 12: two requirements that named a constraint but not its value 2026-08-08 16:27:54 +02:00
CONTRACT_PUSH4B_3BII_IDENTITY.md Push 4b tranche 3b-ii: one SmuflVersion, and a live ordering bug dies with the homonym 2026-07-23 19:30:52 -04:00
CONTRACT_PUSH4B_3BI_WIRE.md Push 4b tranche 3b-i: the score wire opens schema major 3 2026-07-23 17:35:55 -04:00
CONTRACT_PUSH4B_ACCIDENTALS.md Push 4b tranche 3a: contract for the accidental vocabulary, and S10-S12 filed 2026-07-23 13:55:19 -04:00
CONTRACT_PUSH4B_ADAPTIVE.md Push 4b: ji-adaptive-5limit resolves, and the blocker was never HarmonicContext 2026-07-24 10:17:46 -04:00
CONTRACT_PUSH4B_PITCHSPACES.md Push 4b tranche 1: contract for the pitch-space slice 2026-07-22 17:08:00 -04:00
CONTRACT_PUSH4B_RESOLVER.md Push 4b tranche 2: contract for the in-memory tuning resolver 2026-07-23 10:06:25 -04:00
CONTRACT_PUSH4B_SPEC1.md Push 4b Wave 1a: three ratified corrections, and a citation that pointed the wrong way 2026-07-22 11:49:40 -04:00
CONTRACT_PUSH4B_TEMPERAMENTS.md Push 4b tranche 2b: contract for the ten historical temperaments 2026-07-23 11:38:14 -04:00
CONTRACT_TEXTPROJ_DOCUMENT.md Text Projection: the document layer, and the equation closes 2026-07-21 15:05:28 -04:00
CONTRACT_TEXTPROJ_OPS.md Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
DRAFT_P13S6_TEMPERAMENTS.md P13-S6 ratified: the lattice block, and an argument that did not survive arithmetic 2026-07-22 14:26:08 -04:00
HANDOFF_2026-08-07.md CLAUDE.md: the entry point an agent actually reads 2026-08-07 13:40:48 -04:00
PASS11_RATIFICATION_LOG.md P12-I2: wire the ratified MUSCLOID layout-object id derivation 2026-06-27 12:46:19 -04:00
PASS11_WORKLIST.md Pass 11: ratify provisional byte choices into normative spec text 2026-06-21 22:30:06 -04:00
PASS12_BATCH.md Pass 12 G-pass: ratify the full batch (28 rows) — spec tranche 2026-07-07 10:23:30 -04:00
PASS12_RATIFICATION_LOG.md P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
PASS12_WORKLIST.md Pass 12 G-pass: ratify the full batch (28 rows) — spec tranche 2026-07-07 10:23:30 -04:00
PASS13_CANDIDATES.md P13-S27 round 12: two requirements that named a constraint but not its value 2026-08-08 16:27:54 +02:00
PHASE2_F_WEEK0_WORKLIST.md Phase 2: spelling + decomposition pre-passes (Agent H) with F merge gate 2026-06-23 16:33:39 -04:00
PHASE2_QUICKSTART.md Phase 2: spelling + decomposition pre-passes (Agent H) with F merge gate 2026-06-23 16:33:39 -04:00
PLAN_EDITOR_APP.md Contract revision 6: round 1 was testing the wrong property on the wrong glyphs 2026-07-28 21:24:47 -04:00
PLAN_GENESIS_OPS.md G3b packet 3b: the documentation half, and the ladder closes 2026-07-30 20:45:27 -04:00
PLAN_GMINOR_SCHEMA_MINOR.md P13-S21: the two precondition reasons the wire spec never named 2026-07-30 20:57:59 -04:00
PLAN_P13S1_LABELS.md P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
PLAN_P13S2_CMN24.md P13-S2: the alteration is space-relative, and the core fails closed 2026-07-22 09:00:09 -04:00
PLAN_PUSH4B_TUNING.md Push 4b Wave 1a: three ratified corrections, and a citation that pointed the wrong way 2026-07-22 11:49:40 -04:00
PLAN_TEXTPROJ_DOCUMENT.md Text Projection: the document layer, and the equation closes 2026-07-21 15:05:28 -04:00
PLAN_TEXTPROJ_OPS.md Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
QUICKSTART.md G3b packet 3b: the documentation half, and the ladder closes 2026-07-30 20:45:27 -04:00
RULING_GENESIS_PERSISTENCE.md Editor T4-pre W2: the glyph-asset contract, and three parallelism claims get finer 2026-07-24 17:50:02 -04:00
binary_format.pdf Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00
binary_format.tex Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00
core_spec.pdf Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00
core_spec.tex Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00
operation_catalog.pdf P13-S19: what a partial measure actually costs 2026-07-31 18:13:44 -04:00
operation_catalog.tex P13-S19: what a partial measure actually costs 2026-07-31 18:13:44 -04:00
quality_metric_catalog.pdf P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
quality_metric_catalog.tex P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
reference_suite.pdf P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
reference_suite.tex P13-S1: every requirement is named, and now it is also numbered 2026-07-21 18:27:52 -04:00
text_projection.pdf Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00
text_projection.tex Container major 1: the format epoch carries base provenance 2026-08-07 12:51:14 -04:00