calendar: model Our Lady's Saturday as a real occurrence outcome
Deploy / deploy (push) Successful in 49s
Deploy / deploy (push) Successful in 49s
On a free Saturday (nothing privileged already claims it, no active octave), the day's own identity is now "Our Lady's Saturday" rather than an anonymous ordinary-feria -- mirrors privileged-feria-minor exactly, per direct instruction: Semiduplex-or-higher still wins outright (Marian Saturday doesn't apply at all); below that (Simplex, and Vigil, both under semiduplex on the FeastClass scale) loses and is commemorated instead. Layered additively after decideOccurrence, same shape as applyOctaves -- never touches decideOccurrence's own rules. Needed a real winner identity (not just the plain temporal feria id) so day-label/antiphon/collect sourcing can recognize it -- added a temporal-feasts record purely for that, and taught getDayLabel to check it for any named temporal winner (a small, free improvement for Christmas/Pentecost's own labels too, previously unhandled). hours: build the duplex-majus+ Lauds psalmody override (per-feast) lauds-psalmody no longer unconditionally uses the plain weekday default: a duplex-majus-or-higher sanctoral winner, or Our Lady's Saturday (unconditional, no rank threshold -- it isn't competing with the weekday default the way a saint is), now substitutes its own proper psalm groups/antiphons/canticle. Per-feast, not per-Common, per direct instruction, even though most duplex-majus+ saints across the year don't have one authored yet and fall back to the plain weekday default until they do. Content for the worked example (St. Lawrence's own day) surfaced a real bug while sourcing it: st-lawrence-antiphon.yml had been read from the Roman/secular rite's own [Ant 1], not Monastic 1617's actual Benedictus antiphon for that day -- corrected from a fresh live query. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -58,12 +58,13 @@ describe('resolveOrdo("lauds", ...)', () => {
|
||||
});
|
||||
|
||||
it("resolves Saturday's own psalmody: only one weekday psalm (142), and the Canticle of Moses said in two pieces (RB 13's own division), one shared antiphon framing both", () => {
|
||||
// Any Saturday works here: lauds-psalmody doesn't yet model the
|
||||
// Commune/feast override real practice would apply on a Marian-
|
||||
// Sabbato Saturday (see hours/types.ts's 'lauds-psalmody' doc comment)
|
||||
// -- the plain weekday distribution is always used, so this is
|
||||
// exercising the real, current behavior, not a stand-in for it.
|
||||
const ordo = resolveOrdo('lauds', '2026-06-20');
|
||||
// Needs a Saturday that ISN'T Our Lady's Saturday, which now wins
|
||||
// (and substitutes its own psalmody) on every ordinary-feria Saturday
|
||||
// — see calendar/index.ts's applyMarianSaturday and tests/calendar/
|
||||
// marian-saturday.test.ts. A privileged-feria Saturday (Lenten Ember
|
||||
// Saturday, 2026-02-28) has real standing of its own that Marian
|
||||
// Saturday doesn't touch, so it still shows the plain weekday default.
|
||||
const ordo = resolveOrdo('lauds', '2026-02-28');
|
||||
const psalmNumbers = ordo.parts
|
||||
.filter((p) => p.kind === 'psalm')
|
||||
.map((p) => (p.kind === 'psalm' ? p.psalmNumber : undefined));
|
||||
@@ -139,10 +140,10 @@ describe('resolveOrdo("lauds", ...)', () => {
|
||||
expect(canticle?.kind === 'canticle' ? canticle.antiphon?.status?.la : undefined).toBeUndefined();
|
||||
});
|
||||
|
||||
it("resolves a real Benedictus antiphon on St. Lawrence's own octave day, from the saint's already-authored proper", () => {
|
||||
it("resolves a real Benedictus antiphon on St. Lawrence's own day, from the saint's already-authored proper", () => {
|
||||
const ordo = resolveOrdo('lauds', '2026-08-10'); // St. Lawrence's own day
|
||||
const canticle = ordo.parts.find((p) => p.kind === 'canticle' && p.canticleId === 'benedictus');
|
||||
expect(canticle?.kind === 'canticle' ? canticle.antiphon?.text.la : undefined).toContain('Levíta Lauréntius');
|
||||
expect(canticle?.kind === 'canticle' ? canticle.antiphon?.text.la : undefined).toContain('In cratícula');
|
||||
});
|
||||
|
||||
it('includes the short litany (Kyrie + Our Father) right after the Benedictus, before the day collect', () => {
|
||||
|
||||
Reference in New Issue
Block a user