Stop gating Lauds/Vespers proper psalmody antiphons behind rank
getPsalmodyOverrideFor bundled "which psalm numbers are said" and "which antiphons are used" into one lookup, both gated behind the same duplex-majus+ rank threshold. A saint's own authored proper antiphon text should never be gated behind rank — only the weaker, generic Common-category substitute has any business being rank-gated. Splits the lookup into two independent tiers: the feast's own proper (any rank, via the new getPsalmodyProperOverrideId) tried first, then the existing duplex-majus+ Common-category fallback — mirroring the split getMinorHourOverrideId already made for the chapter/responsory/hymn/ versicle bundle. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VFGHb4XMe6Wya4pGpPhEEi
This commit is contained in:
@@ -180,6 +180,34 @@ export function getOfficeOverrideId(day: LiturgicalDay): string | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* The id to look up for today's winner's own *proper* Lauds/Vespers
|
||||
* psalmody antiphons (`hours/lauds.ts`'s and `hours/vespers.ts`'s own
|
||||
* `getPsalmodyOverrideFor`) — eligible at **any rank**, unlike
|
||||
* `getOfficeOverrideId` above. A saint's own authored proper antiphon
|
||||
* text isn't something rank should ever gate — rank only has standing to
|
||||
* gate the weaker, generic Common-category substitute (still looked up
|
||||
* via `getOfficeOverrideId`'s duplex-majus+ threshold, a real distinct
|
||||
* tier: same conventional psalm numbers, a generic-by-category antiphon,
|
||||
* not this feast's own text). Mirrors `getMinorHourOverrideId`'s identical
|
||||
* "any sanctoral winner is eligible, it's the caller that decides whether
|
||||
* anything's actually authored for the id" reasoning — the psalmody
|
||||
* override table previously reused `getOfficeOverrideId`'s single
|
||||
* duplex-majus+ gate for both its proper and Common tiers at once, which
|
||||
* silently discarded a proper antiphon whenever it happened to be
|
||||
* authored for a sub-duplex-majus feast (fixed 2026-08-29).
|
||||
*/
|
||||
export function getPsalmodyProperOverrideId(day: LiturgicalDay): string | undefined {
|
||||
const winner = resolveOfficeWinner(day);
|
||||
if (winner.kind === 'temporal' && ALWAYS_OVERRIDE_TEMPORAL_IDS.has(winner.id)) {
|
||||
return winner.id;
|
||||
}
|
||||
if (winner.kind === 'sanctoral') {
|
||||
return winner.id;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* The id to look up for today's office winner's (resolveOfficeWinner)
|
||||
* minor-hour content (antiphon + chapter) — `${hourId}-antiphon-${id}`/
|
||||
|
||||
Reference in New Issue
Block a user