epiphany/crates/epiphany-ops/src
Levi Neuwirth 2cf2dae31b Push 4b tranche 1: pitch spaces become structure, and cmn-24 transposes end-to-end
The Chapter 4 pitch-space vocabulary lands in epiphany-core as in-memory types
with a real consumer, the built-in catalog as PitchSpaceId -> PositionStructure
data, and the P13-S2 "cmn-12" string guard is replaced -- not preserved beside --
by structural resolution over that catalog. Dispatched as one vertical slice
rather than the plan's three steps, because a Chapter 4 type surface with no
consumer is the shape that produced Staff::default_clef and NOTEHEAD_ANCHORS.

No Codec impls, no struct_codec! additions, no Score/ScoreTuningContext field:
these types stay in memory so Ruling C keeps them free to change. Canonical
bytes are byte-identical -- no golden or fuzz digest moved.

Six of the thirteen built-in pitch spaces are underdetermined by the spec (the
three ji-* generators, and all of maqam-base/gamelan-slendro/gamelan-pelog);
they resolve to None and fail closed at every consumer rather than being
invented. SpellingParameters, whose shape the spec calls an open question, is a
documented zero-field marker for the same reason.

The plan's proof of life -- cmn-24 transposing end-to-end -- held at the core
layer and FAILED one layer up, invisibly to the tranche's own tests.
resolve_transposed_spellings took the transposed 12-TET semitone with a ? before
checking whether any spelling needed it, so the 12-chromatic-only gate refused
every cmn-24 transpose, even one with nothing to spell (measured: NoOp
TranspositionOutOfRange, value untouched). P13-S3-shaped: latent in code, made
reachable the moment the space resolved. Moved the ? to point of use; a
spelling-less cmn-24 now transposes, one with an authored spelling still refuses
(the pre-pass cannot write a 24-chromatic accidental). Two tests, each killed by
a different mutation.

Verified independently of the agent that wrote the core half: the "cmn-12"
string survives only in doc comments and fixtures, not control flow; the
proof-of-life arithmetic (B4 -> natural C5 in cmn-24, chromatic 22, 118 - 120
carrying to octave 5) recomputed by hand; the strictly-increasing third clause
of req:tuning:diatonic-chromatic-mapping mutation-killed; full gate green (fmt,
clippy 0, workspace 0 failed, rustdoc 0, conformance 8/8, requirement counts
unmoved at 212/282/282).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 09:41:18 -04:00
..
anomaly.rs Phase 2 (Agent K) M1: value-typed operation payloads + Operation Catalog scaffold 2026-06-24 11:52:02 -04:00
causal.rs Pass 11: ratify provisional byte choices into normative spec text 2026-06-21 22:30:06 -04:00
conflict.rs Pass 11: consolidated byte-layout appendix + pin ObjectKind/ResolutionAction discriminants 2026-06-22 13:16:20 -04:00
decode.rs Pass 12 G-pass: code tranche (K3/K9/C4/H7) + review fixes 2026-07-07 11:21:22 -04:00
effect.rs P13-S2: the alteration is space-relative, and the core fails closed 2026-07-22 09:00:09 -04:00
encode.rs A B C D F 2026-06-19 12:42:31 -04:00
envdecode.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
envelope.rs Schema major 1 Phase D2: CreateRegion op-block major + cross-major read-only 2026-07-06 12:09:30 -04:00
fuzz.rs One tag vocabulary the compiler owns, and ratify the corpus in the companion 2026-07-09 20:32:35 -04:00
lib.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
migrate.rs TransposeInterval: the faithful transpose, and the frozen one it replaces 2026-07-09 15:46:43 -04:00
opset.rs Phase 2 (Agent K) M1: value-typed operation payloads + Operation Catalog scaffold 2026-06-24 11:52:02 -04:00
payload.rs Text Projection: the Chapter-5 value layer, from one field list 2026-07-21 12:17:49 -04:00
reduce.rs Push 4b tranche 1: pitch spaces become structure, and cmn-24 transposes end-to-end 2026-07-23 09:41:18 -04:00
slot.rs A B C D F 2026-06-19 12:42:31 -04:00
stamp.rs A B C D F 2026-06-19 12:42:31 -04:00
support.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
textproj_conformance.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
textproj_envelope.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
textproj_kind.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
textproj_leaf.rs Text Projection: the operation layer, and the tests that can see it fail 2026-07-21 13:43:09 -04:00
undo.rs A B C D F 2026-06-19 12:42:31 -04:00
v0.rs TransposeInterval: the faithful transpose, and the frozen one it replaces 2026-07-09 15:46:43 -04:00
validate.rs Schema major 2 Phase D: the repeat-authoring pair (code tranche) 2026-07-07 20:06:18 -04:00
valuegen.rs Schema major 2 Phase D: the repeat-authoring pair (code tranche) 2026-07-07 20:06:18 -04:00
vectors.rs One tag vocabulary the compiler owns, and ratify the corpus in the companion 2026-07-09 20:32:35 -04:00