Compare commits

...

2 Commits

Author SHA1 Message Date
will 3794903c68 Alias common-of-a-confessor-pope to common-of-a-confessor-bishop
Deploy / deploy (push) Successful in 1m51s
While auditing the Lauds/Vespers Common-category psalmody note for
staleness, found 3 saints (St. Pius X, St. Leo II, St. Pius V) use
common: common-of-a-confessor-pope, which had no alias in either
category file -- unlike common-of-a-confessor-doctor, which already
does. Live-verified (votive=C4 vs C4b, both Vespers and Lauds,
Monastic Tridentinum 1617): psalms/antiphons are byte-identical to
Confessor-Bishop's, only the Magnificat antiphon and collect differ
(both already handled per-saint, not through this table).

Note: this doesn't change any currently-visible content -- all 3
saints are ranked duplex/semiduplex, below the duplex-majus+ threshold
this psalmody-override tier is gated at, so they correctly fall to the
plain ferial default regardless. It closes a real data-completeness
gap for whenever a duplex-majus+ Confessor Pope is added.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Je2mXNHoXmi1DS3xEL67rH
2026-09-03 07:26:19 -04:00
will c412086e0a 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
2026-09-03 07:26:11 -04:00
3 changed files with 35 additions and 31 deletions
+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
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.
@@ -5,12 +5,16 @@
# hours/lauds-psalmody-overrides.ts's own doc comment) -- only these
# antiphons are specific to this Common.
#
# `aliases` registers `common-of-a-confessor-doctor` under this same
# scheme -- votive=C4a at Lauds is byte-identical to C4 for these same
# slots (the only difference between C4 and C4a shows up in the
# Magnificat antiphon, handled separately, not this psalmody table).
# `aliases` registers `common-of-a-confessor-doctor` and
# `common-of-a-confessor-pope` under this same scheme -- votive=C4a/C4b
# at Lauds are both byte-identical to C4 for these same slots (the only
# difference shows up in the Magnificat antiphon and collect, handled
# separately, not this psalmody table; confirmed for C4b 2026-09-03,
# live query against the reference engine, closing a real gap -- St.
# Pius X/St. Leo II/St. Pius V were falling through to the plain
# ferial default).
id: common-of-a-confessor-bishop
aliases: [common-of-a-confessor-doctor]
aliases: [common-of-a-confessor-doctor, common-of-a-confessor-pope]
groups:
- psalms: [92]
antiphon:
@@ -2,13 +2,16 @@
# against Divinum Officium (Monastic Tridentinum 1617, command=
# prayVespera, votive=C4, 2026-08-28).
#
# `aliases` registers `common-of-a-confessor-doctor` under this same
# scheme -- `votive=C4a` at Vespers returned byte-identical psalms/
# antiphons to `votive=C4` for these same four slots (only the
# Magnificat antiphon differs, handled separately, not this psalmody
# table).
# `aliases` registers `common-of-a-confessor-doctor` and
# `common-of-a-confessor-pope` under this same scheme -- `votive=C4a`/
# `C4b` at Vespers both returned byte-identical psalms/antiphons to
# `votive=C4` for these same four slots (only the Magnificat antiphon
# and collect differ, handled separately, not this psalmody table;
# confirmed for C4b 2026-09-03, live query against the reference
# engine, closing a real gap -- St. Pius X/St. Leo II/St. Pius V were
# falling through to the plain ferial default).
id: common-of-a-confessor-bishop
aliases: [common-of-a-confessor-doctor]
aliases: [common-of-a-confessor-doctor, common-of-a-confessor-pope]
groups:
- psalms: [109]
antiphon: