aboutsummaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md110
1 files changed, 101 insertions, 9 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index b809f00..68cb906 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -449,18 +449,18 @@ nowhere in git (`docs/` is gitignored).
failure mode, proven by fabricating a second companion and watching the
whole suite stay green pre-fix).
-5. **`Record` and `Liturgical_day` both claim to be "the single stable output
+6. **`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`.
-6. **`Temporal.RITE` and `Rite.t` are two competing abstractions.** The module
+7. **`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.
-7. **EF-shaped things still in "rite-agnostic" kernel code**: `validate.ml`
+8. **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
@@ -474,12 +474,104 @@ 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**: the Sacred Triduum has no proper office (it uses ordinary
-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.**
+**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.**
+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
+SAME missing machinery (a rite-computed, Easter-relative, non-competing
+commemoration candidate — no channel in `Precedence.resolve`/`calendar.ml`
+constructs one; sanctoral candidates are Fixed-date only, the day's temporal
+candidate is exactly one and already spoken for).
+
+5. **The Sacred Triduum (RG 91 entry 2) — RESOLVED (2026-08-13,
+ `ef-triduum-litanies` task); Major Litanies (RG 80) and Rogation
+ Wednesday's own commemoration (RG 87-89) — established from a
+ photographic scan, deliberately NOT built.** Holy Thursday/Good
+ Friday/Holy Saturday kept their existing slugs
+ (`ef-passiontide-2-{thursday,friday,saturday}` — RG 91 entry 2 is
+ identified structurally by `Precedence_ef.band`, off rank and Easter
+ offset, never off the slug) and gained `Celebration.names` (Latin, both
+ photographic scans, corroborated by the electronic transcription's own
+ table-of-contents listing at the identical headings: "Feria V in Cena
+ Domini", "Feria VI in Passione et Morte Domini", "Sabbato Sancto") and
+ `subject = Lord` (verified safe: RG 112(a) only fires when both sides of
+ an occurrence are `Lord`, and no `Lord`-subject sanctoral entry has a
+ fixed date inside Holy Week's own movable range). **Full 1583-9999
+ blast radius, measured (`git archive` pre- vs post-change, `colitur day`
+ CLI output diffed): ZERO differing lines anywhere in the domain** — the
+ CLI prints neither `names` nor `subject`, so this whole change is
+ invisible to the differential (layer 3), the oracle (layer 4), and even
+ the exhaustive property sweep (layer 2); only `test_golden.ml`'s
+ `describe` (widened this task to add a `name_la` field, the same lesson
+ its own `subject` field was added for) and one new `test_temporal_ef.ml`
+ unit test see it at all. Mutation-tested: reverting `temporal_ef.ml`
+ alone reddens 6 tests across those two files.
+
+ Major Litanies (25 April, RG 80) and Rogation Wednesday's own
+ commemoration (RG 87-89, Minor Litanies) were both investigated to the
+ same depth and **both scan-verified and fully register-cited, but
+ deliberately not built**: RG 80's own transfer clause (25 April moving to
+ the following Tuesday whenever it coincides with Easter Sunday or Easter
+ Monday — **194 of 8,417 domain years, ≈2.3%, measured**, not assumed
+ rare) and Rogation Wednesday's own commemoration (RG 88/89, competing
+ only when the Ascension Vigil already occupies the day) both need a
+ commemoration candidate keyed to a MOVABLE, Easter-relative date that
+ is not the day's own temporal office — a kind of thing
+ `Precedence.resolve`'s architecture has no channel for: sanctoral
+ candidates come exclusively from `Layer.on_date`'s Fixed-`Date_spec`
+ lookup (`date_spec.ml`'s own header: Easter-relative forms "arrive with
+ the OF sanctoral" — not yet), and the day's temporal candidate is
+ exactly one, already spoken for. RG 110's own `rg110_additions`
+ mechanism (item 4 above) looks like a precedent but is not one: it only
+ ever RE-INCLUDES a candidate that already exists elsewhere in that
+ date's own candidate pool (both Peter and Paul are ordinary Fixed-date
+ sanctoral entries); neither the Major Litanies' Easter+2 target nor
+ Rogation Wednesday's own Mass commemoration has any such pre-existing
+ candidate to find.
+
+ **The real reason to defer the Major Litanies, corrected by the
+ fix-round review** — the version above was wrong in two load-bearing
+ ways and is retracted:
+
+ - It said the suppression half needs "a kernel signature extension
+ threading Easter-offset into `disposition`/`admit`". It does not.
+ `admit` **already** takes `~temporal` (added for exactly this class of
+ question during the RG 16(a) task) and `disposition` already takes
+ `~winner`; on 25 April in a transfer year both carry the Easter Sunday
+ or Easter Monday office. A rite-local slug test suppresses it with
+ **zero** kernel surface.
+ - It implied Easter Monday is unmarkable. Measured over the whole
+ domain: `ef-easter-1-monday` occurs **exactly 8 417 times in 8 417
+ years** — once every year, never displaced, since it is an I-class
+ octave day — making it precisely as reliable a marker as
+ `ef-easter-sunday`. The stated asymmetry between the two trigger
+ conditions does not exist.
+
+ So the **guarded** build (a `Commemoration_only` `Fixed(4,25)` entry, RG
+ 109(f) wired, plus slug-based suppression on the two Easter slugs) is a
+ strict improvement, not a regression: 8 223 years newly correct, 194
+ unchanged, zero new wrong answers. "Worse than the recorded gap" was
+ true only of the *unguarded* build, which is the only option that was
+ scored.
+
+ Deferring is still right, for a reason nobody had identified: **25 April
+ is St Mark, II class**, so under **RG 111(c)** a *privileged* Litanies
+ commemoration (RG 109(f)) would **displace** whatever ordinary
+ commemoration the day currently carries, in ≈97.7% of years — a live,
+ unmeasured blast radius straight through layers 3 and 4. That
+ measurement is the prerequisite, and it makes this its own task rather
+ than a rider on another. The 194 figure is exact and reproduced twice
+ (Easter = 25 April in 67 years, Easter Monday = 25 April in 127).
+
+ Full reasoning: the `ef-triduum-litanies` task report and register
+ (Rogations/§4, and the two narrowed open items in §6). **Rogation
+ Wednesday remains genuinely blocked** — Easter+38 coincides with the
+ Ascension Vigil by construction, so there is no `(month, day)` pair a
+ `Fixed` spec could anchor to and no partial build exists at all.
## How to work here