Author Benedictus antiphons for the remaining 26 propers:null saints
Deploy / deploy (push) Successful in 57s

Completes the 94-saint batch's Benedictus-antiphon coverage. A saint
with a genuine proper collect doesn't imply a genuine proper antiphon,
same finding as St. Martin of Tours's mixed proper/shared split from
the original 29-saint pass: of the 26, 15 are genuinely unwinnable
stubs (already documented from the collects pass -- always
commemorated, never the day's own title, so nothing to live-query) and
left honestly missing, matching St. Frances of Rome/St. Bibiana's
precedent from the original 109-saint pass; 7 of the remaining 11
turned out to render byte-identical to an already-authored Common
category (benedictusCommon wired directly, no new content) -- including
Ss. Dionysius and Companions, whose own `common` field says
common-of-a-martyr-bishop but whose live-verified minor-hour text
actually matches common-of-several-martyrs, another case (like Chair of
St. Peter earlier) where the two fields genuinely diverge. The other 4
have real unique text of their own: All Saints of the Benedictine
Order, St. Agnes (secunda), St. Benedict (no English in the source,
translated and marked draft, same gap as St. Scholastica's), and the
Vigil of St. John the Baptist (deliberately echoing the Benedictus
canticle's own opening words).

P/T/S/N for these 26 not attempted here -- a further layer on top, same
as how the original 109 got Benedictus antiphons long before their own
later, separate P/T/S/N pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 09:14:05 -04:00
parent ffaa797940
commit 9faa7168bc
13 changed files with 155 additions and 6 deletions
+25
View File
@@ -71,6 +71,31 @@ describe('minorHoursCommon/benedictusCommon fallback (2026-08, the 94 propers:nu
});
});
describe('the 26 propers-set saints from the 94-saint batch (2026-08)', () => {
it('a saint with a genuine proper collect can still share its Benedictus antiphon with a Common category (benedictusCommon)', () => {
// Ss. Dionysius and Companions -- own proper collect (propers is
// set), but live-verified byte-identical to common-of-several-
// martyrs's Benedictus antiphon, so getBenedictusAntiphon falls
// through to benedictusCommon rather than a nonexistent
// ss-dionysius-and-companions-antiphon.yml.
const day = resolveDay('2025-10-09');
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'ss-dionysius-and-companions' });
expect(getBenedictusAntiphon(day).status).toEqual({ la: 'verified', en: 'verified' });
});
it("a saint with genuinely unique Benedictus antiphon text resolves its own proper file, not a Common", () => {
// St. Benedict -- own proper text ("Sanctíssime Conféssor Dómini...",
// st-benedict-antiphon.yml), sourced from the source's Latin-only
// page (no English rendering, same gap as St. Scholastica's), so
// English is a translation and stays `draft`.
const day = resolveDay('2025-03-21');
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-benedict' });
const ben = getBenedictusAntiphon(day);
expect(ben.status).toEqual({ la: 'verified', en: 'draft' });
expect(ben.text.la).toContain('Benedícte');
});
});
describe('splitNamedAntiphon', () => {
it('carries a verified status through to both the incipit and full forms', () => {
const { incipit, full } = splitNamedAntiphon({