Author Guardian Angels/Archangels' Lauds/Vespers bundle from St. Michael's Apparition
Deploy / deploy (push) Successful in 1m19s

Methodology upgrade this session: read each saint's own Sancti/MM-DD.txt
[Rank]/[Rule] field directly instead of hunting for a per-saint clean
year to live-query -- it states the real Common assignment (or a direct
proper-content inheritance) with zero calendar dependency.

Guardian Angels/St. Gabriel/St. Raphael the Archangels' own files say
"vide C4," but that's a Missal/Mass-propers designation -- their real
Monastic-breviary file (SanctiM/10-02.txt) cross-references St. Michael's
Apparition (Sancti/05-08, already fully authored in this app) directly
for the chapter/responsory at every hour. No common-of-an-angel category
exists in the source at all. Duplicated St. Michael's Apparition's 7
Lauds/Vespers files under each of the three saints' own ids (proper
content, not a Common fallback), live-verified on their own real 2026
days.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axryJBrRswYh2niA7WCUc
This commit is contained in:
2026-08-26 08:41:46 -04:00
parent 0e1a1fe08e
commit 98b5c05a84
23 changed files with 557 additions and 0 deletions
+19
View File
@@ -247,6 +247,25 @@ describe('resolveOrdo("lauds", ...)', () => {
}
});
it("resolves the Guardian Angels' and Archangels' own real chapter/hymn, reused from St. Michael's Apparition", () => {
// Their own saint files' [Rank] says "vide C4," but the Monastic
// source's own SanctiM/10-02.txt cross-references St. Michael's
// Apparition (Sancti/05-08) directly for the chapter/responsory at
// every hour -- real proper content, not a Common fallback. See
// lauds-capitulum-guardian-angels.yml's header.
for (const [date, id] of [
['2026-10-02', 'guardian-angels'],
['2026-03-24', 'st-gabriel-archangel'],
['2026-10-24', 'st-raphael-archangel'],
] as const) {
const ordo = resolveOrdo('lauds', date);
const chapter = ordo.parts.find((p) => p.kind === 'chapter');
expect(chapter?.kind === 'chapter' ? chapter.text.citation?.en : undefined).toBe('Rev 1:1-2');
const hymn = ordo.parts.find((p) => p.kind === 'hymn');
expect(hymn?.kind === 'hymn' ? hymn.text.text.la : undefined, id).toContain('Christe sanctórum decus Angelórum');
}
});
it('includes the Kyrie + Our Father lead-in right after the Benedictus, before the day collect (either form)', () => {
const ordo = resolveOrdo('lauds', FERIAL_TUESDAY);
const litanyIndex = ordo.parts.findIndex((p) => p.kind === 'preces' && p.text.text.la?.includes('Kýrie, eléison'));