Compare commits

..

2 Commits

Author SHA1 Message Date
will 4835b35fc1 Add Assumption octave commemoration content
Deploy / deploy (push) Successful in 1m13s
Assembled from already-verified Assumption pieces (Benedictus
antiphon, Vespers V/R, post-1950-dogma collect) since the octave
commemoration block this app's own generous-commemorations design
calls for has no direct reference-engine source to copy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L3wxvz3mPXiHxkPB5JpnmD
2026-08-21 07:38:55 -04:00
will 1ed15f15c0 Fix getDayCollects skipping octave commemorations on outright-win days
The substitutedOctaveId gate only checked temporalCategory, not who
actually won the day, so a saint winning outright within an active
octave (e.g. St. Bernard vs. the Assumption octave, Aug 20) silently
lost that octave's own commemoration block at Lauds/Vespers. Now
mirrors resolveOfficeWinner's real gate (day.winner.kind and
ALWAYS_OVERRIDE_TEMPORAL_IDS).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L3wxvz3mPXiHxkPB5JpnmD
2026-08-21 07:38:49 -04:00
2 changed files with 49 additions and 1 deletions
@@ -0,0 +1,40 @@
# Commemoratio Octavæ Assumptionis -- said at Lauds/Vespers on a day
# within the Assumption's octave (Aug 16-22) where the Assumption itself
# doesn't win the day outright (e.g. St. Bernard, Aug 20, Duplex, beats
# the octave's own Semiduplex threshold -- see hours/resolve-common.ts's
# getDayCollects, kind: 'octave' branch). No reference-engine text exists
# for this exact block: the live Monastic Tridentinum 1617 engine (and
# the default Tridentine version) both render only St. Bernard's own
# oration on Aug 20, no Assumption commemoration at all -- this app's own
# "generous commemorations" design (see CLAUDE.md's "Not a
# reconstruction" note) deliberately goes further than any single
# historical rite here, so this block is assembled from already-verified
# Assumption pieces rather than copied whole from one reference-engine
# page: the antiphon from assumption-antiphon.yml (Lauds/Benedictus, the
# only plain antiphon authored for the feast), the versicle/response from
# vespers-versicle-assumption.yml, and the collect from
# assumption-collect.yml (already in the "Per eúmdem" commemoration
# doxology form) -- matching christmas-day-octave-commemoration.yml's own
# "one shared Ant+V/R+collect block regardless of hour" shape and
# assembly method.
id: assumption-octave-commemoration
text:
la: |
Ant. Quæ est ista quæ ascéndit sicut auróra consúrgens, pulchra ut luna, elécta ut sol, terríbilis ut castrórum ácies ordináta?
V. Exaltáta est sancta Dei Génitrix.
R. Super choros Angelórum ad cæléstia regna.
Orémus.
Omnípotens sempitérne Deus, qui Immaculátam Vírginem Maríam, Fílii tui Genetrícem, córpore et ánima ad cæléstem glóriam assumpsísti: concéde, quǽsumus; ut ad supérna semper inténti, ipsíus glóriæ mereámur esse consórtes.
Per eúmdem Dóminum nostrum Jesum Christum Fílium tuum, qui tecum vivit et regnat in unitáte Spíritus Sancti, Deus, per ómnia sǽcula sæculórum.
℟. Amen.
en: |
Ant. Who is she that cometh up like the rising dawn, fair as the moon, clear as the sun, terrible as a fenced camp set in battle array?
V. The holy Mother of God hath been exalted.
R. Over choirs of Angels, into the heavenly kingdom.
Let us pray.
Almighty everlasting God, who hast taken body and soul into heaven the Immaculate Virgin Mary, Mother of thy Son: grant, we beseech thee, that by steadfastly keeping heaven as our goal we may be counted worthy to join her in glory.
Through the same Jesus Christ, thy Son, Our Lord, Who liveth and reigneth with thee in the unity of the Holy Ghost, God, world without end.
℟. Amen.
status:
la: verified
en: verified
+9 -1
View File
@@ -522,8 +522,16 @@ function octaveCommemorationPart(commemoration: Extract<Commemoration, { kind: '
*/
export function getDayCollects(day: LiturgicalDay): ResolvedPart[] {
const parts: ResolvedPart[] = [{ kind: 'prayer', text: getDayCollect(day) }];
// Mirrors resolveOfficeWinner's own gate: an octave only actually
// supplied the primary collect when the day's winner itself wasn't a
// real sanctoral feast (or one of the ALWAYS_OVERRIDE_TEMPORAL_IDS) —
// otherwise the winner's own content stood on its own (e.g. St.
// Bernard, Aug 20, outright beats the Assumption octave's threshold)
// and the octave still needs its own commemoration block below.
const substitutedOctaveId =
day.temporalCategory === 'ordinary-feria' ? resolveActiveOctave(day.date)?.id : undefined;
day.winner.kind !== 'sanctoral' && !ALWAYS_OVERRIDE_TEMPORAL_IDS.has(day.winner.id) && day.temporalCategory === 'ordinary-feria'
? resolveActiveOctave(day.date)?.id
: undefined;
for (const commemoration of day.commemorations) {
if (commemoration.kind === 'temporal') {
parts.push({ kind: 'prayer', text: toResolvedText(getTemporalProper(`${commemoration.id}-collect`)) });