diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 12:44:15 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 12:44:15 +0200 |
| commit | dc00d1f730b23fa99cd15ff142ecba515a9fe0b7 (patch) | |
| tree | e40f7f003008b33104723a6d8856168bbdea7633 /CLAUDE.md | |
| parent | 59fbda87d565ad9b98c2493e9703390cd988609d (diff) | |
| parent | e45ec1ccce68d9edb9655004c21861d6bfb33a9d (diff) | |
| download | colitur-dc00d1f730b23fa99cd15ff142ecba515a9fe0b7.tar.gz colitur-dc00d1f730b23fa99cd15ff142ecba515a9fe0b7.zip | |
Merge branch 'ef-holyname-rg110': the Holy Name of Jesus, RG 110
Builds the Most Holy Name of Jesus with the fallback RG 17(a) and the
calendarium both specify -- 'secus die 2 ianuarii', 'vel, ea deficiente,
die 2 ianuarii' -- which was unimplemented, so in 3619 of the domain's
8417 years a II-class feast did not exist at all. Also retags it as a
feast of the Lord per RG 91 entry 14.
Builds RG 110's inseparable Peter/Paul commemoration ('in numero
orationum computando, pro unica habeantur') across the three calendarium
pairs, and adds the 30 June companion, which was missing from lectio's
source and from missalemeum's output alike -- corroborated in both
photographic scans plus RG 124(c), and added through adjustments.sexp so
the bootstrap's provenance stands.
14627 days change, in four shapes, none unclassified. The register's
earlier 852-day estimate for RG 110 reconciles exactly as the Lent Ember
subset of one shape: 288 + 284 + 280.
RG 110(c)'s ordering was implemented backwards at first and corrected:
'huic orationi additur altera' attaches the companion to the trigger's
own oration, so it follows it, where (a) and (b) attach to the day's and
so precede everything. The 'ante omnes alias commemorationes' half
remains unimplemented and is unreachable by construction -- shape (c)
needs the trigger to lose while still being admitted, which only a
I-class day or a II-class Sunday allows, and both RG 111 caps are one.
Records a fifth way the validation layers can be green while wrong:
nothing anywhere compares commemoration order.
Diffstat (limited to 'CLAUDE.md')
| -rw-r--r-- | CLAUDE.md | 132 |
1 files changed, 92 insertions, 40 deletions
@@ -113,6 +113,16 @@ 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. +- **Nothing anywhere compares commemoration ORDER** (found `ef-holyname-rg110` + task, fix round 1, RG 110's own shape-(c) ordering bug): layer 3 doesn't compare + commemorations at all (above); layer 4's own `identity_diff` sorts both sides + into a multiset before comparing; layer 5's own `describe` (test_golden.ml) + sorts its `comms` field too, deliberately, so a golden pin's string comparison + is not accidentally order-sensitive where nothing textual requires it to be. + The ONLY place in the whole suite that asserts commemoration order is + `test_precedence_ef.ml`'s own `admit_cases` table (`Alcotest.(check (list + string))`, unsorted) — proven by mutation: reverting RG 110(c)'s own + trigger/companion order left every layer green except that one table. - **Layer 4's OBSERVED-identity gap is CLOSED** (2026-08-13, branch `ef-rg112-rg110`, register §6.2): it used to compare the observed day's rank and colour and stop there — never whether it is actually the RIGHT day. Holy @@ -218,11 +228,15 @@ ferias, four Ember sets, Rogations, `anchors`) · `precedence_ef` (the full RG 9 commemorations RG 108–112, transfers RG 96–98) · `rite_ef` (the bundle). **Data**: `data/ef/sanctoral.sexp` (322 entries, bootstrapped from lectio, SHA-256 -in its provenance header) · `data/ef/adjustments.sexp` (overlay) · two cited -allow-lists, `expected-divergences.sexp` (5 active entries, vs lectio — C1, C6, -C8, C14, C15; several more closed and recorded in the register, not deleted) and -`expected-divergences-missalemeum.sexp` (12 active, vs the oracle). Fixtures -live in `test/fixtures/` with asserted SHA-256s. +in its provenance header) · `data/ef/adjustments.sexp` (overlay — `Add` as well +as `Suppress`/`Edit`: RG 110's own 30 June companion, `commemoration-of-st-peter`, +is genuinely missing from lectio's own source, not merely from colitur's +bootstrap, so it is hand-authored here rather than upstream) · two cited +allow-lists, `expected-divergences.sexp` (6 active entries, vs lectio — C1, C6, +C8, C14, C15, C16; several more closed and recorded in the register, not deleted) +and `expected-divergences-missalemeum.sexp` (12 active, vs the oracle — M12 +closed/M19 opened this task, net count unchanged). Fixtures live in +`test/fixtures/` with asserted SHA-256s. **CLI**: `colitur easter <year>`, `temporal <year>`, `day <year>`. @@ -253,9 +267,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. - **All three behaviour items below are now RESOLVED** (RG 16(a) and + **All four behaviour items below are now RESOLVED** (RG 16(a) and commemoration identity, closed on branch `ef-rg16a`; Holy Family/RG 112(a) - and observed identity, closed on branch `ef-rg112-rg110`) — kept here as + and observed identity, closed on branch `ef-rg112-rg110`; Holy Name of + Jesus/RG 110, closed on branch `ef-holyname-rg110`) — 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. @@ -267,7 +282,7 @@ triage, and the whole-branch review — is in workspace is deliberately kept, because it and the register corrections exist nowhere in git (`docs/` is gitignored). -**The three behaviour items, in order:** +**The four behaviour items, in order:** 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, @@ -372,37 +387,80 @@ nowhere in git (`docs/` is gitignored). was expected.** The differential's own C1 (the 6-13 January blanket) lost exactly those 7 (of the 1 220) rows within its 2005–2050 window and they were split into their own new cited entry (C15), not silently - re-absorbed — the same discipline the task brief demanded. Not built: - RG 110 (inseparable Peter/Paul, still open, M12) — out of this task's own - dispatched scope despite the branch name. Holy Name of Jesus (RG 17(a)) - has the identical "generic-Sunday-slug masking a real named feast" shape - Holy Family had — flagged as a new open item, not fixed here (no live - collision exists for it in today's data, so nothing is currently WRONG - about it the way Holy Family's own Baptism collision was). **A SECOND, - more severe Holy Name gap, found in review (fix round 1, coordinator - finding 9): unlike RG 17(b)'s own 7–13 January window (never empty), - RG 17(a)'s narrower 2–5 January window CAN be empty of a Sunday, and the - calendarium carries an explicit fallback ("vel, ea deficiente, die 2 - ianuarii") colitur does not implement at all — 3 619 of 8 417 years in - the domain (independently computed, matched exactly) have NO Holy Name - office whatsoever, a genuine missing II-class feast on 43% of years, not - merely an unnamed one. Recorded, not fixed — out of this task's own - dispatched scope. - -**Structural items, cheapest to fix before OF exists:** + re-absorbed — the same discipline the task brief demanded. Not built at + the time: RG 110 (inseparable Peter/Paul, still open, M12) — out of this + task's own dispatched scope despite the branch name. Holy Name of Jesus + (RG 17(a)) had the identical "generic-Sunday-slug masking a real named + feast" shape Holy Family had, PLUS a second, more severe gap (no RG 17(a) + fallback for its own 2–5 January window when empty of a Sunday — 3 619 of + 8 417 domain years). **Both are now RESOLVED — see item 4 below.** +4. **Holy Name of Jesus (RG 17(a)) + RG 110 — RESOLVED (2026-08-13, branch + `ef-holyname-rg110`; see register §6.3 for the full account).** Holy Name + gained the `subject = Lord` tag Holy Family already had (RG 91 entry 14), + plus a genuinely new office: RG 17(a)'s own fallback, *"secus die 2 + ianuarii"* — 2 January carries the feast whenever no Sunday falls 2–5 + January that year, tagged and ranked identically to the Sunday shape (ONE + feast, per the Mass propers' own single heading covering both dates, both + scans). Before this fix colitur emitted no Holy Name office at all in + 3 619 of 8 417 domain years — a genuine missing II-class feast, not + merely an unnamed one. A real asymmetry the fix's own synthetic + precedence tests found and kept honest rather than forced: a losing + Holy-Name-SUNDAY is RG 109(a)-privileged and survives RG 111(a)'s cap; a + losing Holy-Name-FALLBACK is not (2 January genuinely is not a Sunday, no + other RG 109 category names it) — both correct readings of RG 109/111's + own closed lists, no live witness for either today. + RG 110 (*"In Officio et Missa S. Petri semper fit commemoratio S. + Pauli, et vicissim... pro unica habeantur"*) gained a THIRD sub-clause + this register had not transcribed before, (c) — the same inseparable + commemoration also fires when one Apostle is admitted merely AS a + commemoration, not only when he is the day's own office. Three real + pairs in the 1962 calendar (25 January, 22 February, 30 June); the third + had no companion candidate anywhere — a genuine gap in lectio's own + source data AND in missalemeum's own oracle output, not only a colitur + bootstrap miss — closed via `data/ef/adjustments.sexp`'s own `Add` + directive. Built in `Precedence_ef.admit` (`rg110_additions`), layered on + AFTER `admit`'s own four RG 111 branches decide their ordinarily-capped + result, uncapped and additional, never competing for a slot. + **Blast radius, measured (`git archive` pre-change binary vs HEAD, full + 1583–9999 sweep, diffed): 14 627 days, ALL FOUR predicted shapes, zero + unclassified** — 3 619 the Holy Name fallback itself; 3 533 Paul wrongly + excluded from Chair of St Peter's own day by a competing privileged + feria (RG 110 shapes (a)/(b) — supersedes an earlier 852-day estimate + that measured only a delta between two older commits, not the rule's + full scope); 593 Chair of St Peter admitted only as an ordinary + commemoration, Paul entirely absent (shape (c) — a real 7% of the + domain, not a corner case); 6 882 the new 30-June companion. The lectio + differential needed no RG 110 change at all (it does not compare + commemorations); the oracle allow-list needed M12 removed, M15 widened + by one date (a newly-exposed instance of its own pre-existing limit), + and a new M19 for the 30-June gap. + **CORRECTED, fix round 1: RG 110(c)'s own ordering was inverted on all + 593 shape-(c) days.** *"Huic orationi additur altera"* (the companion is + added TO the trigger's own oration) means the trigger comes first, the + companion follows — the original build prepended the companion + uniformly in both shapes, right for (a)/(b) (nothing in the list to + order against) but backwards for (c). Fixed in `rg110_additions` + (splice the companion in immediately after its own trigger for shape + (c) only); the wrong-order unit test is re-pinned. New, permanent + blind spot found and recorded: **nothing in this suite compares + commemoration order except that one unit table** — see "know what each + layer cannot see" above. M19's own predicate was also strengthened to + check commemoration IDENTITY, not merely presence (the same C6/C14 + failure mode, proven by fabricating a second companion and watching the + whole suite stay green pre-fix). -4. **`Record` and `Liturgical_day` both claim to be "the single stable output +5. **`Record` and `Liturgical_day` both claim to be "the single stable output schema".** `Record` cannot express what the engine now computes (no observed celebration, no commemorations, no transfers), has **no test file**, and is used only by the legacy `colitur temporal` path — `day` hand-formats instead. Plan 2's carried item (add a `cycle` field for OF's Sunday A/B/C and weekday I/II) is still open and now costlier: it must pass through `Temporal.t`, which is embedded in the sexp-derived `Liturgical_day.t`. -5. **`Temporal.RITE` and `Rite.t` are two competing abstractions.** The module +6. **`Temporal.RITE` and `Rite.t` are two competing abstractions.** The module type still exists and `temporal_ef` still satisfies it, but it carries none of `rules`, `anchors`, `season_runs`, `transfer_target` — satisfying it now proves almost nothing. `Rite.t` is the load-bearing one. -6. **EF-shaped things still in "rite-agnostic" kernel code**: `validate.ml` +7. **EF-shaped things still in "rite-agnostic" kernel code**: `validate.ml` hardcodes Sunday as the week start; `Liturgical_day.transferred_in` is an `option` justified by RG 96; `Precedence.privilege` is defined by RG 111; `Repose` is EF vocabulary emitted by nothing. Each is one field short of the @@ -417,17 +475,11 @@ Boniface 14 May, Evaristus, Theodore); and `romanus`, which should not exist on lineage, not two independent sources. **Unbuilt, recorded**: the Sacred Triduum has no proper office (it uses ordinary -Passiontide ferial slugs); RG 91 entry 27's BVM Saturday Office; RG 110's -inseparable commemorations; Major Litanies (25 April); the Rogation-Wednesday -commemoration; Holy Name of Jesus (RG 17(a)) still carries `subject = Temporal` -like an ordinary Sunday, the same identity gap Holy Family had until this task, -found while closing it (register §6.2) but not itself fixed — no live collision -exists for it in today's data; **Holy Name of Jesus also has no RG 17(a) fallback -for its own 2–5 January window when it is empty of a Sunday (unlike RG 17(b)'s -7–13 January, never empty) — 3 619 of 8 417 domain years have no Holy Name office -at all, found in review (fix round 1, finding 9), a genuine missing II-class -feast, not merely an unnamed one.** Allow-list entries M11 and M13 are `verdict -open` by design. +Passiontide ferial slugs); RG 91 entry 27's BVM Saturday Office; Major Litanies +(25 April); the Rogation-Wednesday commemoration; RG 112(b)/(c)/(d) (only (a) +has a live witness this codebase's data can construct). Allow-list entries M11 +and M13 are `verdict open` by design. Holy Name of Jesus (RG 17(a)) and RG 110 +(inseparable Peter/Paul commemorations) are **RESOLVED — see item 4 above.** ## How to work here |
