From c412086e0acbfeca4f531f296b5761133bac78a5 Mon Sep 17 00:00:00 2001 From: Will Estes Date: Thu, 3 Sep 2026 07:26:11 -0400 Subject: [PATCH] Clean up TODO.md's Open Work section on request - Removed the bogus St. Michael Sep 29 note from section 3 (user: "it's bogus"). - Removed the ferial-Preces note from section 3 -- it documents a design decision, not a simplification; moved to CLAUDE.md's "Not a reconstruction" list and a new memory entry instead. - Moved the hymn-doxology note from section 3 to section 1 (mechanism gaps) and broadened its scope: checked which hours actually wire in the existing getHymnDoxologyId/appendDoxology mechanism (only Prime and Compline do), confirmed Terce/Sext/None are genuinely fine as documented, and found Lauds/Vespers/Matins are all equally unexamined -- not just the "5 of 30 Vespers hymns" the old note undersold this as. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Je2mXNHoXmi1DS3xEL67rH --- TODO.md | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/TODO.md b/TODO.md index ccb5ec7..a931f83 100644 --- a/TODO.md +++ b/TODO.md @@ -28,6 +28,17 @@ across every hour and content type in this app. needs bilingual voice selection (La/En) worked out, and quality for Latin pronunciation is an open question. Open, not started — needs its own design pass before content/UI work begins. + - Seasonal hymn-doxology swap (`hours/hymn-doxology.ts`'s `getHymnDoxologyId`/ + `appendDoxology`) is only wired into **Prime and Compline** (checked 2026-09-03: + `grep -c getHymnDoxologyId` is 0 for `lauds.ts`/`vespers.ts`/`matins.ts`). Terce/Sext/None + are confirmed fine as-is — their hymn is genuinely self-contained with no seasonal swap in + the source (see `terce.yml`'s own header). Lauds, Vespers, and Matins are the real, + unexamined gap: every hymn there is stored as one fixed text captured on its proof date, + with no check yet done on whether the source actually varies its closing doxology by + season the way Prime/Compline's does — this was previously logged as a narrow "5 of 30 + Vespers hymns" simplification, but that undersold it; nothing rules out Lauds/Matins + having the same issue. Needs a per-hour audit against the reference engine before either + wiring in the existing mechanism or confirming (like Terce) that no swap is needed. 2. **Minimal-proof-done, bulk content pending** — mechanism is built and trusted (a proof date/entry already resolves correctly end-to-end); what's left is authoring/importing more @@ -35,21 +46,14 @@ across every hour and content type in this app. - Matins sanctoral-side readings: the per-book Matins responsory pool has only one book seeded (`isa`) — needs expanding. Bible-plan TSV content also isn't yet in a test table (see "Bible-plan TSV — bulk conversion done" below). - - Lauds/Vespers duplex-majus+ Common-category psalmody: 10 of 24 `SaintRecord.common` - categories authored (covering 19 ids via aliases) for Vespers, 9 of 24 (18 ids) for Lauds — - see "Lauds/Vespers duplex-majus+ Common-category psalmody" below and its follow-up entry. - Genuinely still open: `common-of-a-dedication`'s **Lauds** file specifically (Vespers is - done) — blocked on a real content gap, not a mechanism gap: its OT canticle ("Canticum + - Lauds/Vespers duplex-majus+ Common-category psalmody: all 24 `SaintRecord.common` + categories are resolved (Vespers 10/10 real category files, Lauds 9/10 — see + "Lauds/Vespers duplex-majus+ Common-category psalmody" below and its follow-up entry) with + one genuine gap left: `common-of-a-dedication`'s **Lauds** file specifically (Vespers' + is done) — blocked on a real content gap, not a mechanism gap: its OT canticle ("Canticum Ieremiæ") has never been transcribed anywhere in this app (the 7 existing Lauds canticles, `hours/lauds-canticles.ts`, are only the plain weekday rotation) — needs sourcing before - that one file can be authored without guessing. `common-of-a-vigil` is not a gap at all: - the `vigil` `FeastClass` sits structurally below `duplex-majus` on the rank ladder (see - `calendar/commemorations.ts`'s `FEAST_CLASS_ORDER`), so `getOfficeOverrideId` can never - return a Vigil's id — this category is permanently unreachable by design, not worth - authoring. Vespers' own per-feast **proper** tier - (`data/hours/vespers-psalmody-overrides/saints/`) is mechanism-only, zero saints authored — - unlike Lauds, no majus+ saint currently on the calendar is known to have proper Vespers - psalm antiphons distinct from their Common's. + that one file can be authored without guessing. 3. **Known, deliberate simplifications** — intentional, not bugs, no plan to revisit unless priorities change: @@ -59,17 +63,10 @@ across every hour and content type in this app. - Suffrage omission is live-verified against Monastic Tridentinum 1617 for every case except Paschaltide, which should substitute the whole set with a single alleluia-form "Suffragium Paschale" rather than showing the ordinary set — not modeled. - - Ferial Preces (Lauds, Vespers, Prime) run every ferial-or-vigil day, wider than history's - Advent/Lent/Ember/Vigil-only gating, by explicit choice. Same unmodeled Paschaltide - substitution as the suffrages. - - 5 of 30 Vespers hymns have a seasonally-variable closing doxology in the source; only - the form captured on each hymn's chosen proof date is stored, not a season-aware swap. - The Matins "Duo Seraphim" responsory (sung after the final lesson, before Te Deum) isn't modeled — the schema carries one responsory per reading, and this one belongs to none. - `temporal-categories.yml`'s season→category mapping is from general pre-1955 knowledge, not source-verified entry by entry. - - St. Michael's Sep 29 date is kept despite the live reference engine showing nothing there - across 6 tested years. Everything from here down is the dated build log this priority list is drawn from — kept for the sourcing/verification detail behind each decision, not itself in priority order.