From a003d01ed0762fd9b0abec8e299c86039eb5fbd0 Mon Sep 17 00:00:00 2001 From: Will Estes Date: Thu, 27 Aug 2026 21:48:02 -0400 Subject: [PATCH] Alias Abbot/Confessor-not-Bishop/Apostles-plural to existing Matins Common schemes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Live-verified byte-identical psalms, antiphons, and versicles against St. Maurus/St. Gall (Abbot), St. Francis of Assisi/St. Jerome (Confessor-not-Bishop), and the Octave of Ss. Peter and Paul (Apostles-plural) — genuine full redirects, not new content. Swaps the matins.test.ts ferial-fallback proof off St. Anthony Abbot (no longer unauthored) onto St. Monica (Widow, still unauthored). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PhysogLP9eCeKS7JEwRi6y --- .../categories/common-of-a-confessor.yml | 12 ++++++++++++ .../categories/common-of-an-apostle.yml | 8 ++++++++ tests/hours/matins.test.ts | 17 ++++++++++------- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/data/hours/matins-psalmody-overrides/categories/common-of-a-confessor.yml b/src/data/hours/matins-psalmody-overrides/categories/common-of-a-confessor.yml index 872ffc7..bb81993 100644 --- a/src/data/hours/matins-psalmody-overrides/categories/common-of-a-confessor.yml +++ b/src/data/hours/matins-psalmody-overrides/categories/common-of-a-confessor.yml @@ -16,7 +16,19 @@ # redirect) because the versicles are a real, if small, difference — # `common-of-a-confessor-bishop.yml` is its own full file, duplicating # these same psalm/antiphon groups with its own versicles. +# +# `aliases` also registers `common-of-an-abbot` and +# `common-of-a-confessor-not-bishop` under this same scheme (2026-08), +# live-verified as a genuine full redirect (psalms, antiphons, AND +# versicles all byte-identical, unlike the Bishop case above): St. Maurus +# (2026-01-15, Duplex II. classis) and St. Gall (2026-10-16, Duplex) for +# Abbot; St. Francis of Assisi (2026-10-04, Duplex) and St. Jerome +# (2026-09-30, Duplex) for Confessor-non-Bishop — all four reproduce this +# file's content exactly, confirming vu's own separately-named ids +# collapse to one Matins scheme in the reference engine (Reference votive +# numbers C5/C5b both point here per `horas.dialog`'s `[votives]` index). id: common-of-a-confessor +aliases: [common-of-an-abbot, common-of-a-confessor-not-bishop] nocturn1: groups: - psalms: [1] diff --git a/src/data/hours/matins-psalmody-overrides/categories/common-of-an-apostle.yml b/src/data/hours/matins-psalmody-overrides/categories/common-of-an-apostle.yml index 2c99aa3..7d9e4f2 100644 --- a/src/data/hours/matins-psalmody-overrides/categories/common-of-an-apostle.yml +++ b/src/data/hours/matins-psalmody-overrides/categories/common-of-an-apostle.yml @@ -10,7 +10,15 @@ # pattern already established for Common-of-a-Martyr (see that category # file's own doc comment). # +# `aliases` also registers `common-of-apostles` (plural, vu's separate id +# for feasts of two-or-more Apostles together) under this same scheme +# (2026-08) — live-verified against the Octave of Ss. Peter and Paul +# (2026-07-06, Duplex): psalms, antiphons, and versicles all +# byte-identical to this file, a genuine full redirect (reference votive +# number C1 covers both per `horas.dialog`'s `[votives]` index, which +# doesn't distinguish singular from plural Apostle commons). id: common-of-an-apostle +aliases: [common-of-apostles] nocturn1: groups: - psalms: [18] diff --git a/tests/hours/matins.test.ts b/tests/hours/matins.test.ts index 1352fb5..a69e458 100644 --- a/tests/hours/matins.test.ts +++ b/tests/hours/matins.test.ts @@ -330,16 +330,19 @@ describe('resolveOrdo("matins", ...) Duplex+ weekday-feast (3-nocturn, non-Sunda }); it('falls all the way back to the plain ferial weekday table, redistributed into 3 nocturns, when neither a proper nor a Common entry is authored', () => { - // St. Anthony, Abbot (Duplex, Common of an Abbot -- no - // matins-psalmody-overrides category authored yet for either tier) - // -- 2029-01-17, a Wednesday, confirmed clean (no Sunday collision). - const fallback = resolveOrdo('matins', '2029-01-17'); + // St. Monica, Widow (Duplex, Common of a Widow -- no + // matins-psalmody-overrides category authored yet for either tier; + // Common-of-an-Abbot no longer qualifies for this proof as of + // 2026-08-27, now aliased to Common-of-a-Confessor) -- 2029-05-04, a + // Friday, confirmed clean (no Sunday collision, per her own + // saint-file comment). + const fallback = resolveOrdo('matins', '2029-05-04'); const psalms = fallback.parts.filter((p) => p.kind === 'psalm').map((p) => (p as { psalmNumber: number }).psalmNumber); - // Ps 3 + 94, then Wednesday's own 9-psalm ferial table - // (psalter-distribution.yml), not any Common-of-an-Abbot scheme. + // Ps 3 + 94, then Friday's own 9-psalm ferial table + // (psalter-distribution.yml), not any Common-of-a-Widow scheme. expect(psalms[0]).toBe(3); expect(psalms[1]).toBe(94); - expect(psalms.slice(2)).toEqual(getPsalmsFor('matins', 'wednesday').map((r) => r.number)); + expect(psalms.slice(2)).toEqual(getPsalmsFor('matins', 'friday').map((r) => r.number)); expect(fallback.parts.some((p) => p.kind === 'te-deum')).toBe(true); expect(fallback.parts.some((p) => p.kind === 'canticle')).toBe(false); });