epiphany/spec
Levi Neuwirth b724e94faf Contract revision 6: round 1 was testing the wrong property on the wrong glyphs
Building round 1's oracle exposed two defects in the round as written, both
mine, and both invisible until something tried to satisfy it.

The glyph set was chosen by subpath count. I wrote that 19 of the 37 bundled
outlines have more than one subpath and named gClef, fClef, timeSig8 and
accidentalFlat as the useful ones -- conflating multi-subpath with has-a-hole.
fClef is the counter-example: its three subpaths are a bowl and two SOLID,
disjoint dots, nested in nothing. Measured across all 37 by point-in-path,
exactly twelve carry a bounded hole; fClef, cClef, barlineFinal and every
repeat glyph carry none.

Round 1 now runs five glyphs in two classes testing two different properties.
Hole checks -- gClef, timeSig8, accidentalFlat and noteheadHalf, which is new
and earns its place by being frequently repeated and semantically consequential
(a filled counter renders half notes as quarter notes, a notation error rather
than an artifact). Disjoint-component check -- fClef alone, no background
requirement, instead requiring one ink point inside EACH of its three filled
subpaths, tagged with its subpath index. That second class catches a
tessellator that keeps only the largest contour, which would pass every hole
check ever written. Hard failure is now stated as either: a bounded hole
painted as ink, or a required filled subpath omitted.

The oracle's status model is now specified rather than inferred from an
absence. fClef passing with zero background points is a SATISFIED result under
its own requirement class; recording it only as background_satisfied = false
would make a correct outcome indistinguishable from a failed one.

The second defect was the criterion itself. Ruling A said epaint does not
implement even-odd/nonzero fill for paths with holes -- framing criterion 1
around the fill RULE. Bravura's contours are correctly oppositely wound
(signed ring areas gClef [8.702, -0.691, -1.803, -0.509]; fClef
[2.534, 0.153, 0.148], all positive, the same fact from the other side), so
even-odd and nonzero AGREE on every bundled hole. The rule is not load-bearing;
preserving every filled contour and every bounded counter is. The criterion is
amended to compound-path / inner-subpath fill correctness, with a more accurate
reason for excluding raw egui shapes than the one it replaces: PathShape is a
single point loop documenting "Fill is only supported for convex polygons", so
it cannot express compound-fill or subtractive-hole semantics -- a Shape::Vec
can group loops, but grouping paints them, it does not subtract a counter from
its enclosing contour.

Signed areas are recorded from the oracle's adaptive flattening rather than an
earlier coarse fixed-step measurement, with the note that magnitudes are
flattening-dependent and the SIGNS are the claim.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RSX4zSLgKvtiXaPjnMqLGz
2026-07-28 21:24:47 -04:00
..
vectors G-minor: the chunk schema minor becomes a derived record 2026-07-28 21:04:34 -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_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 Draft the G2b contract: subset over normalization, and the raise this rung pays 2026-07-28 21:15:07 -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_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
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 File P13-S15: the OperationKind golden lock stops at 29, and close P13-S14 2026-07-28 21:10:17 -04: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 Ratify the G-minor epoch ladder, and narrow the Manifest::SCHEMA rule 2026-07-28 18:39:28 -04:00
PLAN_GMINOR_SCHEMA_MINOR.md Amend the G-minor plan: the seam ruling, the companion consequence, one wrong hash 2026-07-28 18:47:42 -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 Pass 11: ratify provisional byte choices into normative spec text 2026-06-21 22:30:06 -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 G-minor: the chunk schema minor becomes a derived record 2026-07-28 21:04:34 -04:00
binary_format.tex G-minor: the chunk schema minor becomes a derived record 2026-07-28 21:04:34 -04:00
core_spec.pdf G2a review fixes: a false deviation, and two tests that proved less than claimed 2026-07-28 17:37:43 -04:00
core_spec.tex G2a review fixes: a false deviation, and two tests that proved less than claimed 2026-07-28 17:37:43 -04:00
operation_catalog.pdf Genesis G2a: two settings setters, and the vocabulary's documentation catches up 2026-07-28 17:07:46 -04:00
operation_catalog.tex Genesis G2a: two settings setters, and the vocabulary's documentation catches up 2026-07-28 17:07:46 -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 G-minor: the chunk schema minor becomes a derived record 2026-07-28 21:04:34 -04:00
text_projection.tex G-minor: the chunk schema minor becomes a derived record 2026-07-28 21:04:34 -04:00