diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 16:10:00 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 16:10:00 +0200 |
| commit | d5df5e79c731ac7f7f89969c0cafe564fdc6e8ab (patch) | |
| tree | 9b288fe1bfaf78330aabd4681a4811339298b103 /CLAUDE.md | |
| parent | 957a6d88ed447be16aa8c7e71250f4c9b87a832b (diff) | |
| download | colitur-d5df5e79c731ac7f7f89969c0cafe564fdc6e8ab.tar.gz colitur-d5df5e79c731ac7f7f89969c0cafe564fdc6e8ab.zip | |
docs: RG 91 entry 27 (BVM Saturday) resolved
CLAUDE.md's "Unbuilt, recorded" list and Data section move to reflect
the closed gap: a new item 9 records the office's own build, citations
and measured blast radius; the allow-list counts move to 7 active
lectio entries (C17 new) and 11 active missalemeum entries (M2 closed).
docs/research/rules-register.md (gitignored, not tracked) gets the
matching update: §4's entry marked RESOLVED with a cross-reference,
the §6 open-item checkbox closed, and a new §6.4 with the full
primary-source account -- every scan reading quoted, the blast-radius
reconciliation, and the mutation-test record.
Diffstat (limited to 'CLAUDE.md')
| -rw-r--r-- | CLAUDE.md | 83 |
1 files changed, 73 insertions, 10 deletions
@@ -232,11 +232,11 @@ in its provenance header) · `data/ef/adjustments.sexp` (overlay — `Add` as we 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. +allow-lists, `expected-divergences.sexp` (7 active entries, vs lectio — C1, C6, +C8, C14, C15, C16, C17; several more closed and recorded in the register, not +deleted) and `expected-divergences-missalemeum.sexp` (11 active, vs the oracle — +M2 closed/M18 widened by the `ef-bvm-saturday` task; M12 closed/M19 opened by an +earlier one). Fixtures live in `test/fixtures/` with asserted SHA-256s. **CLI**: `colitur easter <year>`, `temporal <year>`, `day <year>`. @@ -474,11 +474,12 @@ Boniface 14 May, Evaristus, Theodore); and `romanus`, which should not exist on 9 August. lectio's ini is **generated from missalemeum**, so the two are one lineage, not two independent sources. -**Unbuilt, recorded**: RG 91 entry 27's BVM Saturday Office; 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.** The Sacred Triduum's own identity is **RESOLVED — see item 5 below.** +**Unbuilt, recorded**: 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.** The Sacred +Triduum's own identity is **RESOLVED — see item 5 below.** RG 91 entry 27's +BVM Saturday Office is **RESOLVED — see item 9 below.** Major Litanies (25 April) and the Rogation-Wednesday commemoration are **NARROWED, still unbuilt — see item 5 below**: both rules are now scan-verified and register-cited, but neither is built, because both need the @@ -573,6 +574,68 @@ candidate is exactly one and already spoken for). Ascension Vigil by construction, so there is no `(month, day)` pair a `Fixed` spec could anchor to and no partial build exists at all. +9. **RG 91 entry 27, the votive Office of the BVM on Saturday — RESOLVED + (2026-08-13, `ef-bvm-saturday` task).** `Precedence_ef.band` already + routed a plain IV-class Saturday feria to entry 27's own band value + (312 966 times domain-wide), but `Temporal_ef.temporal` never + constructed the office itself. Caput IX of the Rubricae Generales, both + photographic scans and the electronic transcription, word for word (no + scan-vs-transcription conflict — RG 78/79 are General Rubrics prose, not + the Mass-propers body text the transcription is missing): *"78. In + sabbatis, in quibus occurrit Officium de feria IV classis, fit de + sancta Maria in sabbato."* RG 78's own protasis IS "otherwise unoccupied + IV-class Saturday" — decided entirely by the existing occurrence + machinery (`band`'s own entry-27 branch already reads + `rank = Class4 && weekday = Sat` unconditionally and only wins when + nothing outranks it), so **no change to `band`, `disposition` or + `admit` was needed** — rank stays Class4 either way, and none of the + three reads slug/colour/name to decide anything. Colour is white, + unconditionally (RG 120(b), not RG 119/127/128's seasonal rules — this + office is never "de Tempore" for colour). The slug is deliberately + UNCHANGED (reused from the ordinary `<season>-<week>-<weekday>` ferial + fallback), the same precedent the Sacred Triduum (item 5) already set — + identified structurally, never off the slug — and for a second, load- + bearing reason found while building it: a bespoke uniform slug would + have broken `Validate`'s own slug-uniqueness-per-liturgical-year + invariant (asserted with zero exceptions since Plan 2), since the + office recurs many times a year. Subject is tagged `Bvm` (a real + `Subject.t` variant that existed, unused, since the kernel's vocabulary + was designed — no kernel change needed) and the name is Latin only + ("Officium sanctae Mariae in sabbato", RG 91 entry 27's own table title + and RG 79's own heading), the same zero-circularity discipline items + 3–5 already established. The I–V numbered "Missae de sancta Maria in + sabbato" (both scans) are a Mass-propers selection detail (RG 309(a): + *"iuxta temporum diversitatem"*) governing which readings are said, not + which office is kept — out of scope until Plan 4's lectionary. + **Blast radius, measured (`git archive` pre-change binary vs HEAD, full + 1583–9999 `Calendar`-resolved sweep, diffed): 75 853 days, every single + one the identical single-field shape (`colour` alone, always on a + Saturday, always `class-4` on both sides) — no anomaly.** Reconciled + against the full 312 930-day eligible population on the same sweep + domain: 102 144 are actually observed (the office wins), split by + season — 63 195 Time after Pentecost + 7 643 Septuagesima + 5 015 Time + after Epiphany (75 853 total, all VISIBLE, green/violet → white) and + 14 213 Paschaltide + 12 078 Christmastide (26 291, all INVISIBLE — RG + 119 already made those seasons white); the remaining 210 786 are + impeded by a real sanctoral winner and genuinely unaffected. Both + allow-lists moved: the lectio differential gained a new cited entry + (C17, colitur, 416 rows — lectio builds no equivalent office); the + missalemeum oracle's own M2 (previously `verdict missalemeum`, "colitur + is missing a whole office") is **CLOSED, REMOVED** — the colour + divergence it named no longer occurs on any of its 22 dates, and what + is left (`Observed_identity_unresolved` alone, the office is temporal- + origin and deliberately unnamed in English) is exactly `M18`'s own + shape, not a distinct citation any more; `M18` widens 373 → 395 + accordingly. Mutation-tested: reverting the office to a constant-false + guard reddens the dedicated unit test, an end-to-end resolve test, a + golden pin, and both allow-list count pins (in both directions — the + fix present with M2 still declared fails identically to the fix absent + with M2 removed), while a second end-to-end test/golden pin (the office + losing to a real competing feast, 12 September, the one live data + witness that also carries `subject = Bvm`) is correctly untouched by + the mutation, proving RG 26's rank-keyed omission fires before any + subject-keyed rule ever could. + ## How to work here - **Superpowers workflow**: `brainstorming` → `writing-plans` → `executing-plans` |
