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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Je2mXNHoXmi1DS3xEL67rH
This commit is contained in:
2026-09-03 07:26:11 -04:00
parent 2e39fd508a
commit c412086e0a
+17 -20
View File
@@ -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 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 is an open question. Open, not started — needs its own design pass before content/UI work
begins. 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 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 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 - 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 seeded (`isa`) — needs expanding. Bible-plan TSV content also isn't yet in a test table
(see "Bible-plan TSV — bulk conversion done" below). (see "Bible-plan TSV — bulk conversion done" below).
- Lauds/Vespers duplex-majus+ Common-category psalmody: 10 of 24 `SaintRecord.common` - Lauds/Vespers duplex-majus+ Common-category psalmody: all 24 `SaintRecord.common`
categories authored (covering 19 ids via aliases) for Vespers, 9 of 24 (18 ids) for Lauds — categories are resolved (Vespers 10/10 real category files, Lauds 9/10 — see
see "Lauds/Vespers duplex-majus+ Common-category psalmody" below and its follow-up entry. "Lauds/Vespers duplex-majus+ Common-category psalmody" below and its follow-up entry) with
Genuinely still open: `common-of-a-dedication`'s **Lauds** file specifically (Vespers is one genuine gap left: `common-of-a-dedication`'s **Lauds** file specifically (Vespers'
done) — blocked on a real content gap, not a mechanism gap: its OT canticle ("Canticum 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, 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 `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: that one file can be authored without guessing.
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.
3. **Known, deliberate simplifications** — intentional, not bugs, no plan to revisit unless 3. **Known, deliberate simplifications** — intentional, not bugs, no plan to revisit unless
priorities change: 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 - 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 Paschaltide, which should substitute the whole set with a single alleluia-form "Suffragium
Paschale" rather than showing the ordinary set — not modeled. 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 - 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. 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, - `temporal-categories.yml`'s season→category mapping is from general pre-1955 knowledge,
not source-verified entry by entry. 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 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. the sourcing/verification detail behind each decision, not itself in priority order.