aboutsummaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md120
1 files changed, 70 insertions, 50 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 0f18537..4fb93f9 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -114,38 +114,53 @@ against missalemeum; layer 5 pins ~30 dates.
bootstrapped from lectio, so an error both inherited is invisible here. Proven:
Holy Thursday was violet in both because both were wrong.
- **Layer 4's commemoration-identity gap is CLOSED** (2026-08-12, Task B, branch
- `ef-rg16a`): it used to compare presence/count only, never *which* commemoration
- won — reversing `admit`'s dignity sort (the engine admitting the *worst*
- commemoration, an outright RG 111 violation) left all eight differential and
- oracle assertions green across 17 531 days. Layer 4 now also compares **identity**
- — colitur's own resolved English name (`Celebration.t.names`, `en`) against
- missalemeum's title text, for every day both streams admit the same count. The
- mapping resolves **every SANCTORAL-origin commemoration** (colitur's own name
- field, bootstrapped from lectio, verified to match missalemeum's titles
- character-for-character); it **cannot resolve a TEMPORAL-origin one** (an
- impeded feria/Ember/Rogation day — `Rite_ef.Temporal_ef` never sets a celebration
- name) — that case is **never silently skipped**: it is a separate, counted,
- allow-listed outcome (`Comm_identity_unresolved`, 19 of 227 non-empty-commemoration
- days over 2026–2027), not a silent pass. Two genuine identity mismatches surfaced
- and were adjudicated (register §4/§6.1, `data/ef/expected-divergences-missalemeum
- .sexp` M16/M17): a known unimplemented office (the Seven Sorrows of Passion
- Friday) and the RG 113 same-band tie-break residual (below), the latter left
- explicitly OPEN, not defaulted to either side. Proof of teeth: reversing
- `admit`'s *dignity*-based sort (the same historical defect shape) now turns
- layer 4 red — `test_no_unexplained_differences` reports an unexplained
- `commemoration-identity-mismatch` day (colitur admitting "St. Thecla" where both
- the rubric and missalemeum require "St. Linus") — reverted after confirming.
+ `ef-rg16a`, two fix rounds): it used to compare presence/count only, never
+ *which* commemoration won — reversing `admit`'s dignity sort (the engine
+ admitting the *worst* commemoration, an outright RG 111 violation) left all
+ eight differential and oracle assertions green across 17 531 days. Layer 4 now
+ also compares **identity** — colitur's own resolved English name
+ (`Celebration.t.names`, `en`) against missalemeum's title text, for every day
+ both streams admit the same count. The mapping resolves **every
+ SANCTORAL-origin commemoration** (colitur's own name field, bootstrapped from
+ lectio, verified to match missalemeum's titles character-for-character); it
+ **cannot resolve a TEMPORAL-origin one** (an impeded feria/Ember/Rogation day —
+ `Rite_ef.Temporal_ef` never sets a celebration name) — that case is **never
+ silently skipped**: it is a separate, counted, allow-listed outcome
+ (`Comm_identity_unresolved`, 19 of 227 non-empty-commemoration days over
+ 2026–2027), not a silent pass. ONE genuine identity mismatch remains adjudicated
+ open (register §4/§6.1, `data/ef/expected-divergences-missalemeum.sexp` M16): a
+ known unimplemented office (the Seven Sorrows of Passion Friday). Proof of
+ teeth, reproduced twice: reversing `admit`'s *dignity*-based sort (the
+ historical defect shape) turns layer 4 red — an unexplained
+ `commemoration-identity-mismatch` day (colitur admitting "St. Thecla" where
+ both the rubric and missalemeum require "St. Linus"); separately, disabling
+ `band`'s own `Commemoration_only` guard (below) also turns it red, on the same
+ date this whole gap was originally found through — both reverted after
+ confirming.
- **The `admit` same-rank tie-break is RG 113, not an uncited convention** (same
- task): RG 113's own second sentence ("in admittendis et ordinandis aliis
- commemorationibus, servetur ordo tabellae praecedentiae"), previously quoted only
- in its first half, is the real rule — `admit` now orders/selects by
+ task, fix round 1): RG 113's own second sentence ("in admittendis et ordinandis
+ aliis commemorationibus, servetur ordo tabellae praecedentiae"), previously
+ quoted only in its first half, is the real rule — `admit` now orders/selects by
`Precedence_ef.band` (RG 91's own table), not RG 8's coarse four-class rank.
- Measured (not assumed): the fix's blast radius against the pre-change binary is
- **zero admitted-commemoration changes across the entire 1583–9999 domain** — a
- correctness-of-citation fix, not an answer-changing one, on this codebase's
- current data. A narrower residual remains open where two candidates land on the
- *identical* RG 91 table entry (RG 113 gives no further instruction there);
- `admit` still breaks that alphabetically, still uncited, register §6.1.
+ **`band` itself had a fidelity bug this exercise surfaced**: RG 91's table
+ enumerates only "dies liturgici" (real feasts), so a `Celebration.t.status =
+ Commemoration_only` candidate has NO row in it at all — `band` used to read
+ `rank` alone and silently lent such a candidate the same table entry as a
+ genuine `Feast` of its own rank, manufacturing ties RG 113 never created (the
+ original "Maurice vs Thomas of Villanova, both entry 24" example was this bug,
+ not a real RG 91 tie). Fixed at the source: `band` now returns `unclassified`
+ for any `Commemoration_only` candidate, checked first. Measured, independently,
+ twice (`compare_precedence`'s own ordering-criterion change, then `band`'s
+ fidelity fix): the ORDERING-CRITERION change alone is zero-blast-radius
+ (byte-identical across the whole 1583–9999 domain — a correctness-of-citation
+ fix, not an answer-changing one); the `band`-FIDELITY fix has a real, large,
+ fully-classified effect, **4 451 days across the whole domain, exactly 4
+ verified shapes, no surprises** (register §6.1). A genuine "two different
+ candidates on the identical REAL table entry" residual was searched for
+ exhaustively across the whole domain and found EMPTY — the tie-break `admit`
+ still breaks alphabetically is real but narrower than first thought: it is only
+ ever exercised between two `Commemoration_only` candidates, neither of which has
+ any RG 91 table position to compare in the first place.
## Current state (Plans 1–3 DONE — verify with `git log`)
@@ -214,8 +229,10 @@ dune exec colitur -- day 2026 | head
- **Plan 4 — OF rite module** (proves `RITE` generalizes) → the lectionary
bootstrap and citations → full output/rendering → hardening and a first tag.
- **Open Plan 4 with the two behaviour items below**, before OF: they are the
- places the five layers, taken together, currently sleep through a real error.
+ **Both behaviour items below are now RESOLVED** (RG 16(a) and commemoration
+ identity, closed on branch `ef-rg16a`) — kept here as the record of what the
+ five layers, taken together, used to sleep through, and as the shape a
+ future gap of the same kind would need to be caught by.
### Carried into Plan 4 (read before starting)
@@ -259,24 +276,27 @@ nowhere in git (`docs/` is gitignored).
— a feast/mystery of one Divine Person excludes a commemoration of
another of the SAME Person — entirely unimplemented, confirmed live on 7
real years).
-2. **Commemoration identity is unasserted** outside ~3 test rows (see the layer
- caveats above) — **the exact gap the RG 16(a) fix round exploited**: the
- lectio differential compares season/slug/rank/colour only, never
- commemorations, so of the 5 996 days RG 16(a) changes, the differential
- sees at most the handful where the OBSERVED slug itself also changes (the
- Purification's own 1 200, and only because it happens to change who is
- observed) — RG 16(a) proper moved ZERO differential rows either round.
- The missalemeum oracle window (2026–2027) contains zero live RG 16(a)
- instances at all. Every finding in the RG 16(a) fix round, both the
- original bug and the fix-round-1 review's own catch (Pope Sixtus II
- wrongly admitted, both golden pins promoted from output rather than
- independently derived), rested entirely on unit tests and two golden
- pins — this is precisely how a defect of this shape gets through
- undetected for as long as it did, and precisely how the review's own
- correction had to be caught by the same narrow means. Related:
- `compare_dignity` breaks same-rank ties
- **alphabetically**, with no RG warrant, and over 2005–2050 the admission cut
- falls between two same-rank candidates on **66 days**.
+2. **Commemoration identity — RESOLVED (Task B, branch `ef-rg16a`, 2026-08-12;
+ ONE FIX ROUND of review after the first pass — see register §6.1 for the
+ full, corrected account).** Was unasserted outside ~3 test rows — **the
+ exact gap the RG 16(a) fix round above had exploited**: the lectio
+ differential (layer 3) compares season/slug/rank/colour only, never
+ commemorations, BY DESIGN (lectio has no RG 111 admission logic of its
+ own) and still does not — that part of this item is unchanged and remains
+ the reason layer 4, not layer 3, had to close this gap. Layer 4
+ (missalemeum, 2026–2027) now compares commemoration IDENTITY, not only
+ presence/count (see the "know what each layer cannot see" section above
+ for the mapping and its limits). While building it, found and fixed a
+ SECOND, independent bug the exercise surfaced: `Precedence_ef.band` gave a
+ `Commemoration_only` candidate the same RG 91 table entry as a genuine
+ `Feast` of its own rank (RG 91's table has no row for a bare commemoration
+ at all) — **4 451 days wrong across the whole 1583–9999 domain**, exactly
+ 4 verified shapes, fixed at the source. The `admit` same-rank tie-break
+ itself is RG 113 (previously uncited), not the alphabetical convention
+ this item used to describe — reconciled against the Plan-3-era "66 days"
+ figure: 599 is the tie POPULATION, 65 (or 67) the real ADMITTED-SET
+ decisions within it, 149 order-only — all now independently reproduced
+ (register §6.1), not merely asserted.
**Structural items, cheapest to fix before OF exists:**