File what Push 4a found and did not fix
Two open candidates, staged until a third reopens the pass. P13-S1: 169 of core_spec's 207 requirement blocks carry no \label, so no conformance claim can cite them. The audit that surfaced this scoped it to Chapter 4 (9/9 unlabeled). It is not a Chapter 4 problem: Determinism Contract is 15/15, Semantic Operations 24/27, The Score Graph 22/28, Pitch 10/13. Every req:* label this repo cites was added ad hoc by whichever pass needed it. P13-S2: cmn-24 is in the built-in pitch-space table as "CMN extended with 24-EDO quarter-tone accidentals" and cannot be represented -- Cmn.alteration is an i8 of whole semitones, and a quarter-tone is half of one. Blocks Push 4b. Also parked: the Push 4b prerequisites. Push 4a proved transposition needs no tuning catalog; what the catalog is still for -- resolving a scale position to a frequency, applying an instrument's transposition at the written/sounding boundary -- remains, and Chapter 4 is not implementable as written. Two further claims from the audit are recorded as UNVERIFIED rather than inherited: that the JI dimension convention conflicts with its own prime-2 requirement, and that the named historical tunings lack exact ratio data. Neither was needed for 4a; neither was confirmed. An audit finding that has not been executed is a hypothesis. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
91a99b2093
commit
582b0ca234
|
|
@ -551,3 +551,30 @@ the notehead without moving the sound). Saturation is the worst possible
|
|||
failure here because it is invisible: it produces a pitch nobody asked for,
|
||||
reports success, and destroys the evidence. See `epiphany-ops/DECISIONS.md`
|
||||
§"Push 4a" for the operation-level consequences and the frozen `Transpose`.
|
||||
|
||||
## Parked: Push 4b (the Chapter 4 tuning catalog) — what must be decided first
|
||||
|
||||
Push 4a proved that transposition needs no tuning catalog. What the catalog is
|
||||
still needed for — resolving a scale position to a frequency, and applying an
|
||||
instrument's `transposition` at the written/sounding boundary — remains open,
|
||||
and Chapter 4 is not implementable as written. Verified blockers:
|
||||
|
||||
- **`cmn-24` cannot exist** (P13-S2). The built-in pitch-space table declares it
|
||||
as "CMN extended with 24-EDO quarter-tone accidentals", but
|
||||
`PitchSpacePosition::Cmn.alteration` is an `i8` of *whole semitones*. Either
|
||||
`cmn-24` is not `Cmn`-representable, or `alteration` changes unit — a
|
||||
data-model major.
|
||||
- **The core stores only the default space, tuning, and reference.** The
|
||||
overrides, accidental extensions, and SMuFL target Chapter 4 requires are
|
||||
absent, and none of the catalog/resolver types exist
|
||||
(`ScoreTuningContext` in `graph.rs` is the whole surface today).
|
||||
- **Chapter 4's nine requirement blocks are unlabeled**, so none is
|
||||
independently citable in a conformance claim. This is not special to
|
||||
Chapter 4 — 169 of 207 core_spec requirements are unlabeled (P13-S1) — but it
|
||||
means Push 4b cannot declare conformance requirement-by-requirement without
|
||||
first labelling what it implements.
|
||||
|
||||
Two further claims from the Push-4a audit are **unverified** and should be
|
||||
checked, not inherited: that the JI dimension convention conflicts with its own
|
||||
prime-2 requirement, and that the named historical tunings lack exact
|
||||
deterministic ratio data. Neither was needed for 4a, and neither was confirmed.
|
||||
|
|
|
|||
|
|
@ -40,3 +40,14 @@ batch reopens the pass.
|
|||
| P13-I1 | Chapter 7's `ConstrainedLayoutIR` listing elides **three** fields the code carries: `break_origins: Vec<BreakOrigin>` (named by `req:layoutir:break-origin-attribution`, its own shape unlisted), `catalog: GlyphCatalogIdentity` (its type specified, the field unlisted), and `diagnostics: Vec<LayoutDiagnostic>` — which appears **nowhere** in core_spec, though it is how the projection's honesty rule manifests: an unspellable pitch or an unbundled glyph is placed as a fallback *and recorded*, never silently guessed | `crates/epiphany-layout-ir/DECISIONS.md` ("the ConstrainedLayoutIR listing is still abridged") | **resolved** (Pass 13: listing gains all three fields; `BreakOrigin` and `LayoutDiagnostic` shapes added; new `req:layoutir:coverage-diagnostics` ratifies as-implemented that an unengravable object is recorded AND still placed — never guessed, never dropped) |
|
||||
| P13-I2 | `Staff::default_clef` is never consulted: `to_constrained` takes the active clef from the staff instance's `clef_sequence` and falls back to `Clef::default()` (treble), so a bass-clef staff that declares its clef only on the `Staff` engraves as treble. The field is decorative in the projection — is it the fallback, or should it not exist? | `crates/epiphany-layout-ir/DECISIONS.md` ("`Staff::default_clef` is never consulted") | **resolved** (Pass 13: it IS the fallback. `StaffContent` carries it, `active_clef_or` resolves against it, and `editor-core`'s hit-test reads the same function — else a click on a bass staff would resolve its pitch as treble. Removal was rejected: the field is named for its purpose, is encoded on the wire, and dropping it is schema-major) |
|
||||
| P13-I3 | `BRAVURA_METRICS`' `NOTEHEAD_ANCHORS` are hand-written, unconsumed, and doubly suspect: they name `stemUpNW`/`stemDownSE` — the corners a normal notehead's stems do *not* attach to, and a pair Bravura's `noteheadBlack` does not define — and their x of `1180` reads like 1.18 staff spaces written in thousandths rather than the table's `1/1024` units (1.18 sp = 1208). They enter only `metrics_hash`, so any correction moves the `GlyphCatalogIdentity` every conformance claim declares. The font is not vendored, so the values cannot be verified in-tree | `crates/epiphany-layout-ir/DECISIONS.md` ("the notehead stem anchors are unusable as written") | **resolved** (Pass 13: deleted. Unverifiable in-tree, unconsumed, and hand-derived where every neighbouring number is machine-extracted. `extract_bravura_outlines.py --anchors` now emits them from the pinned `bravura_metadata.json`, so the table regains them generated rather than remembered; the metadata's SHA-256 is deliberately unpinned and the script refuses until an operator with the font pins it. `GlyphCatalogIdentity` moves once, now, while no conformance claim declares the old one; user "delete them + teach the extractor") |
|
||||
|
||||
## Open candidates (Batch 3 not yet open)
|
||||
|
||||
Filed as found; the pass reopens at three (the house rule). Neither is a live
|
||||
incorrectness — each is a place where the spec cannot yet support a claim it
|
||||
makes about itself.
|
||||
|
||||
| Id | One-line statement | Filed in | Status |
|
||||
|---|---|---|---|
|
||||
| P13-S1 | **169 of core_spec's 207 `requirement` blocks carry no `\label`**, so no conformance claim can cite them. Chapter 4 (`Tuning Systems and Pitch Spaces`) is 9/9 unlabeled and Chapter 11 (`Determinism Contract`) is 15/15, but the gap is universal, not local: `Semantic Operations` 24/27, `The Score Graph` 22/28, `Pitch` 10/13. The requirements *are* normative and *are* implemented; they simply cannot be named. Every `req:*` label the repo cites was added ad hoc by the pass that needed it | this file | **open** (found while auditing Push 4a; the audit that surfaced it scoped it to Chapter 4, which is where it was noticed, not where it lives) |
|
||||
| P13-S2 | `cmn-24` is declared in the built-in pitch-space table (`core_spec.tex` §"Built-in Catalog") as "CMN extended with 24-EDO quarter-tone accidentals", but **cannot be represented**: `PitchSpacePosition::Cmn.alteration` is an `i8` documented as *whole semitones*, and a quarter-tone is half of one. Either the space is not `Cmn`-representable (and needs `Integer`/`Registered`), or `alteration` needs a finer unit — a data-model major | `crates/epiphany-core/DECISIONS.md` (Push 4b blockers) | **open** (blocks Push 4b) |
|
||||
|
|
|
|||
Loading…
Reference in New Issue