summaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 13:19:40 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-13 13:19:40 +0200
commit08c18dd43f0fb891806df1077cdf1bab35a59341 (patch)
tree2413ecad695d1daeddf7f92a13251f2c874fca55 /CLAUDE.md
parentd2bfeb3c9b5cff163ed9cd9e86eb0e1849117f67 (diff)
downloadcolitur-08c18dd43f0fb891806df1077cdf1bab35a59341.tar.gz
colitur-08c18dd43f0fb891806df1077cdf1bab35a59341.zip
docs: close/narrow the Triduum and Litanies open items in CLAUDE.md
Item 5: the Sacred Triduum's own identity is RESOLVED (RG 91 entry 2), full 1583-9999 blast radius measured at zero differing CLI lines -- the change is invisible to layers 2-4, visible only to the two golden/ unit tests built for it. Major Litanies (RG 80) and Rogation Wednesday's own commemoration (RG 87-89) are established from a photographic scan and fully cited, but deliberately not built: both need a rite-computed, Easter-relative, non-competing commemoration candidate -- a kind of thing Precedence.resolve's architecture has no channel for. Measured, not assumed: RG 80's own transfer clause triggers in 194 of 8417 domain years (~2.3%), so building only the ordinary case would trade a known, understood gap for a new wrong answer in those years. Renumbers the trailing three architectural-debt items (5-7 -> 6-8) to make room.
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md83
1 files changed, 74 insertions, 9 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index b809f00..f1a673f 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,77 @@ 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. Major Litanies' ORDINARY case (the ≈97.7% of years
+ RG 80's transfer clause does not trigger) is independently buildable
+ today with zero new machinery — a `Commemoration_only` `Fixed(4,25)`
+ sanctoral entry, `Precedence_ef.privilege_of`'s already-present, dead RG
+ 109(f) branch wired to it — but building only that would leave the
+ transfer years with a NEW wrong answer (a phantom commemoration on
+ Easter Sunday/Monday itself, which RG 80 explicitly forbids), not merely
+ the old, understood gap, so it was not built either. Full reasoning,
+ including the paths considered and rejected (a kernel signature
+ extension threading Easter-offset into `disposition`/`admit` closes half
+ of the Major Litanies problem — suppression — but not the relocation
+ half, and Rogation Wednesday has no equivalent half-solution at all): the
+ `ef-triduum-litanies` task report and register (Rogations/§4, and the two
+ narrowed open items in §6).
## How to work here