Close out P/T/S/N: St. Benedict's/All Saints Benedictine's own content, St. Michael redirect bug
Deploy / deploy (push) Successful in 57s

The last 2 duplex-majus+ saints held back from the original 29-saint
P/T/S/N pass (for lacking a collect at the time) get the same
individual live-query treatment as their peers: real, unique proper
text for both (St. Benedict's own Prime antiphon is the opening line of
St. Gregory the Great's Life of St. Benedict; All Saints of the
Benedictine Order draws on Matt 13:43, Luke 6:22-23, and a well-known
All Saints antiphon) -- 14 new files, English translated throughout
since the source rendered none for either.

A final calendar-wide sweep (every saint's resolveMinorHourAntiphon/
resolveMinorHourChapter) turned up one more real gap, in the mechanism
itself rather than missing data: St. Michael's propers field points at
Apparition of St. Michael's own id (the two feasts are word-for-word
identical), and getDayCollect/getBenedictusAntiphon both explicitly
follow propers when resolving content -- but getMinorHourOverrideId
doesn't; it keys off the day's own winner id directly, so
resolveMinorHourAntiphon was looking for a file that could never exist.
Fixed the same way as Finding of St. Stephen: minorHoursCommon points
directly at his delegate's already-authored proper files.

Every real saint on this app's calendar now has real P/T/S/N content.
The only remaining absence is Ss. Ursula and Companions (no way to
verify a category of one) and the example-confessor test placeholder,
which was never meant to have any.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 11:34:21 -04:00
parent 37dac8b476
commit 75b731221e
17 changed files with 267 additions and 4 deletions
+27
View File
@@ -134,6 +134,19 @@ describe('minorHoursCommon for the *whole* calendar, not just the 94-saint batch
expect(prime.text.la).toContain('Ecce sacérdos magnus');
});
it('the last 2 duplex-majus+ saints held back from the original 29-saint P/T/S/N pass now have their own proper content too', () => {
// St. Benedict and All Saints of the Benedictine Order were excluded
// from that earlier pass for lacking a collect at the time (see
// TODO.md); now that they have one, they get the same individual
// live-query treatment as their peers -- own real text, not a shared
// Common, matching their rank.
const day = resolveDay('2033-03-21'); // St. Benedict
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-benedict' });
const terce = resolveMinorHourAntiphon('terce', day, {});
expect(terce.status).toEqual({ la: 'verified', en: 'draft' });
expect(terce.text.la).toContain('Benedíctus');
});
it("resolves its own file's [Ant 1] as draft, not verified, when it can't be checked against a live rendering", () => {
// Ss. Euphemia, Lucy, and Geminian -- her own file *does* have an
// [Ant 1], but St. Alexius (a winnable saint checked earlier in this
@@ -146,6 +159,20 @@ describe('minorHoursCommon for the *whole* calendar, not just the 94-saint batch
expect(ben.status).toEqual({ la: 'draft', en: 'draft' });
expect(ben.text.la).toContain('Gaudent');
});
it("follows a saint's own propers-redirect for P/T/S/N too, not just the collect/Benedictus antiphon", () => {
// St. Michael's propers points at Apparition of St. Michael's own id
// (the two are word-for-word identical, see st-michael.yml), but
// getMinorHourOverrideId keys off the day's own winner id
// ("st-michael" itself) rather than following propers the way
// getDayCollect/getBenedictusAntiphon do -- a real gap a final
// calendar-wide sweep caught, fixed the same way as Finding of St.
// Stephen: minorHoursCommon points directly at his delegate's id.
const day = resolveDay('2028-09-29');
expect(day.winner).toMatchObject({ kind: 'sanctoral', id: 'st-michael' });
const prime = resolveMinorHourAntiphon('prime', day, {});
expect(prime.status.la).toBe('verified');
});
});
describe('minorHoursCommon/benedictusCommon fallback (2026-08, the 94 propers:null saints)', () => {