Fix Vespers ferial psalmody following an anticipated feast's identity

When tonight anticipates tomorrow's First Vespers, resolvePsalmody was
keying off the borrowed day's weekday instead of today's actual calendar
weekday, silently shifting the fixed 6-day psalm rotation. The psalm
cycle has no per-feast override and must stay on today's own place in
the rotation regardless of whose office governs the evening's propers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D1LqodVbQdQVoTGPz9sSw4
This commit is contained in:
2026-08-28 19:46:33 -04:00
parent 4fdddbf4a2
commit 6a17a74b9b
2 changed files with 32 additions and 6 deletions
+14
View File
@@ -235,6 +235,20 @@ describe('resolveOrdo("vespers", ...)', () => {
}
});
it('keeps ferial psalmody on the actual calendar weekday even while the office anticipates tomorrow\'s First Vespers', () => {
// 2026-08-25 is a Tuesday, but its evening anticipates St. Zephyrinus's
// First Vespers (Aug 26) per the test just above -- the psalm cycle has
// no per-feast override (see hours/vespers.ts's resolvePsalmody), so it
// must stay on Tuesday's own group [129, 130, 131, 132], not slip to
// Wednesday's [134, 135, 136, 137] just because the office borrowed
// Wednesday's identity.
const ordo = resolveOrdo('vespers', '2026-08-25');
const psalmNumbers = ordo.parts
.filter((p) => p.kind === 'psalm')
.map((p) => (p.kind === 'psalm' ? p.psalmNumber : undefined));
expect(psalmNumbers).toEqual([129, 130, 131, 132]);
});
it("uses Common-of-Several-Martyrs' real office bundle on Ss. Placid and Companions' own day (Duplex II. classis, keeps own Vespers)", () => {
// Live-verified against Divinum Officium (Monastic Tridentinum 1617)
// votive=C3 -- see vespers-hymn-common-of-several-martyrs.yml's header.