aboutsummaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md123
1 files changed, 105 insertions, 18 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 25d3339..4fb93f9 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -113,11 +113,54 @@ against missalemeum; layer 5 pins ~30 dates.
the week column. It also **shares colitur's own lineage**: colitur's data was
bootstrapped from lectio, so an error both inherited is invisible here. Proven:
Holy Thursday was violet in both because both were wrong.
-- Layer 4 is **two years wide** and compares rank, colour-membership and
- commemoration presence/count — **never celebration identity**.
-- Together they sleep through **commemoration identity**: reversing `admit`'s
- dignity sort, so the engine admits the *worst* commemorations, leaves all eight
- differential and oracle assertions green across 17 531 days.
+- **Layer 4's commemoration-identity gap is CLOSED** (2026-08-12, Task B, branch
+ `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, 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.
+ **`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`)
@@ -186,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)
@@ -199,17 +244,59 @@ nowhere in git (`docs/` is gitignored).
**The two behaviour items, in order:**
-1. **RG 16(a) — the largest known-wrong output on the branch.** A Feast of the
- Lord occurring on a II-class Sunday takes the Sunday's place *"cum omnibus
- iuribus et privilegiis: de dominica, proinde, **nulla fit commemoratio**"*.
- colitur commemorates the Sunday anyway: **5 996 wrong days over 1583–9999**,
- 369 of them in 1583–2100. **Zero** instances fall in the oracle window and none
- is pinned, so all five layers miss it. Needs a signature change — `privilege_of`
- cannot currently see the winner's `subject`. Register §6.0.
-2. **Commemoration identity is unasserted** outside ~3 test rows (see the layer
- caveats above). 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**.
+1. **RG 16(a) — RESOLVED (RG16(a) task, branch `ef-rg16a`, 2026-08-12; ONE
+ FIX ROUND of review after the first pass — see register §6.0 for the full,
+ corrected account).** Was the largest known-wrong output on the branch: a
+ Feast of the Lord occurring on a II-class Sunday takes the Sunday's place
+ *"cum omnibus iuribus et privilegiis: de dominica, proinde, **nulla fit
+ commemoratio**"*, and colitur used to commemorate the Sunday anyway
+ (**5 996 wrong days over 1583–9999**, 369 of them in 1583–2100,
+ re-confirmed exactly, twice, independently). Fixed in
+ `Rite_ef.Precedence_ef.disposition` with **no signature change** —
+ `disposition` already took `winner:...` (RG 33's own vigil-omission branch
+ already read it). A SECOND, related bug needed a genuine kernel signature
+ change: `Precedence.rules.admit` gained a `~temporal` parameter, because
+ RG 16(a) also breaks the assumption that `observed` IS the day's own
+ temporal-cycle office for RG 111(b)'s Sunday rank-floor check (an
+ unrelated saint could otherwise be wrongly admitted into the freed slot —
+ confirmed on 1 178 real days, 6 August, before this second fix).
+ **The sanctoral data question was more contested than the first pass
+ found**: the Purification (2 Feb) was FIRST retagged `Bvm` (calendarium
+ title argument), then REVERTED to `Lord` in fix round 1 on the user's own
+ ruling — follow the oracle, which treats the Purification as taking an
+ occurring Sunday's place outright, unlike an ordinary Marian feast (real
+ primary-text counter-evidence, RG 120(b)'s colour rule, remains on record
+ as the argument the other way). Only `most-holy-name-of-mary` stays
+ retagged `Bvm`. A related, unresolved primary-source finding: the Common
+ of the Dedication of a Church's own classification (*"Festum
+ Dedicationis Ecclesiae est festum Domini"*) means St Michael's Dedication
+ (29 Sep) may also be `Lord`, not `Saint` — measured, not applied (1 200
+ days domain-wide if it were). Two further open items recorded, not fixed:
+ 13 January (Baptism of the Lord, mistagged `Saint`, and separately, RG 112
+ — 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 — 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:**