Author real proper Matins/Vespers content for the Nativity of St. John the Baptist
Deploy / deploy (push) Successful in 1m30s

nativity-of-st-john-the-baptist.yml's `common` field (common-of-an-apostle)
was the same mistaken placeholder as the Beheading's, but this feast
needed a different fix: the reference engine assigns it no Commune at
all -- every [Rule] line in Sancti/06-24.txt and SanctiM/06-24.txt points
to proper text, never a Commune category -- so there's no better-fitting
id to swap in either.

Authored the real proper content that was still falling through to the
apostle Common, live-verified against the local Divinum Officium CGI
instance (Monastic Tridentinum 1617):

- Matins invitatory antiphon ("Regem Præcursóris Dóminum")
- Matins hymn ("Antra desérti téneris," with the Monastic doxology
  substitution already used by this feast's own Lauds/Vespers hymns)
- Full Matins Nocturn 1-3 psalmody + nocturn versicles (Nocturn 1/2 reuse
  St. Lawrence's own shared psalm-number pool per "Psalmi Dominica";
  Nocturn 3 reuses St. Lawrence's own canticle scripture files verbatim,
  since the citations are identical)
- Vespers psalmody (only 4 psalm slots at this Monastic rank, not 5 as a
  naive reading of the raw Ant Vespera list would suggest)
- Nocturn 2/3 responsories on the existing nocturn-readings file

`common: common-of-an-apostle` is left in place as a fully inert
placeholder (a non-optional field with no better id available) with an
updated comment explaining why.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvnBMq7HGfXRyMsVLu2v4D
This commit is contained in:
2026-08-29 06:24:33 -04:00
parent d4ec104d59
commit a6e4bb15b1
8 changed files with 286 additions and 5 deletions
+34
View File
@@ -705,3 +705,37 @@ describe('resolveOrdo("matins", ...) remaining Common categories\' Matins hymns
expect(hymnLatin('2026-08-06')).toContain('Quicúmque Christum quǽritis');
});
});
describe('resolveOrdo("matins", ...) Nativity of St. John the Baptist (2026-06-24) real proper content', () => {
// Regression test: nativity-of-st-john-the-baptist.yml's `common`
// field (common-of-an-apostle) used to leak into the invitatory, hymn,
// and Nocturn psalmody since no proper override existed for any of
// them. The reference engine assigns this feast no Commune at all, so
// real proper text was authored for each instead of swapping the
// Common id.
const ordo = resolveOrdo('matins', '2026-06-24');
it("resolves the invitatory antiphon to its own proper text, not the apostle Common's", () => {
const antiphonParts = ordo.parts.filter((p) => p.kind === 'antiphon') as { text: { text: Record<string, string> } }[];
const invitatoryLatin = antiphonParts[0]?.text.text.la;
expect(invitatoryLatin).toContain('Regem Præcursóris Dóminum');
expect(invitatoryLatin).not.toContain('Regem Apostolórum');
});
it("resolves the Matins hymn to its own proper text, not the apostle Common's", () => {
const hymn = ordo.parts.find((p) => p.kind === 'hymn') as { text: { text: { la: string } } } | undefined;
expect(hymn?.text.text.la).toContain('Antra desérti téneris sub annis');
expect(hymn?.text.text.la).not.toContain('Ætérna Christi múnera');
});
it("resolves Nocturn 1/2 psalmody to its own proper antiphons over the shared Sunday psalm pool, not the apostle Common's antiphons", () => {
const psalms = ordo.parts.filter((p) => p.kind === 'psalm') as {
psalmNumber: number;
antiphon?: { text: Record<string, string> };
}[];
const psalm1 = psalms.find((p) => p.psalmNumber === 1);
const psalm63 = psalms.find((p) => p.psalmNumber === 63);
expect(psalm1?.antiphon?.text.la).toContain('Priúsquam te formárem');
expect(psalm63?.antiphon?.text.la).toContain('Nazarǽus');
});
});