Author Matins Nocturn 2/3 patristic readings for the whole post-Pentecost season
Deploy / deploy (push) Successful in 1m27s

Closes the gap the user found on 2026-08-23 (post-pentecost-13's Matins had
no patristic reading): nocturn-readings/ had content for only one temporal
id (post-pentecost-15, the original mechanism proof date). Since
resolveTemporalId maps every day in a liturgical week to the same id, one
file per id covers the whole week — authored all 23 remaining
post-pentecost-NN ids (01-14, 16-24) from the reference engine's own
Tempora/PentNN-0.txt files. Trinity Sunday (01) keeps its own full proper
office including a displaced-Sunday commemoration; 02-11 have real Nocturn
2+3 content; 12 onward are Nocturn-3-only (homily, Gospel incipit skipped
per convention), reusing the same two responsories the source itself
cross-references week to week.

Rest of the temporal cycle (Advent/Christmas/Epiphany/Septuagesima/Lent/
Easter) is a separate follow-up pass, tracked in TODO.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWzE3kaSZCs79fPBrrE1aF
This commit is contained in:
2026-08-23 07:10:20 -04:00
parent 7858692fa7
commit 25e2eeb493
25 changed files with 2365 additions and 1 deletions
+38
View File
@@ -407,3 +407,41 @@ describe('resolveOrdo("matins", ...) Assumption-octave hymn fallback (2026-08-22
expect(hymnLatin(FERIAL_DATE)).toContain('Somno');
});
});
// Temporal-cycle nocturn-readings sweep (2026-08): src/data/propers/
// nocturn-readings/post-pentecost-{01..24}.yml, sourced from the reference
// engine's Tempora files. post-pentecost-15 was the original mechanism
// proof date (see above); this sweep authored the other 23 post-Pentecost
// ids. Every id is keyed by temporalId, which resolveTemporalId maps
// identically for every day in that liturgical week (Sunday and its
// ferias), so one file's content is exercised regardless of which weekday
// is checked. post-pentecost-13 is the date that originally surfaced the
// gap (2026-08-23, a real Sunday). See TODO.md and memory
// vu-temporal-nocturn-sweep-progress for the full sweep record.
describe('resolveOrdo("matins", ...) post-Pentecost season nocturn-readings sweep (2026-08)', () => {
function lessonStatuses(date: string) {
const ordo = resolveOrdo('matins', date);
return ordo.parts
.filter((p) => p.kind === 'lesson')
.map((p) => (p as { text: { status: Record<string, string> } }).text.status);
}
it.each([
['2026-08-23', 'post-pentecost-13 (today, the reported gap)'],
['2027-05-23', 'post-pentecost-01, Trinity Sunday'],
['2026-06-14', 'post-pentecost-02'],
['2026-11-08', 'post-pentecost-24 (season tail)'],
])('%s (%s) resolves at least one non-missing lesson', (date) => {
const statuses = lessonStatuses(date);
expect(statuses.length).toBeGreaterThan(0);
expect(statuses.some((s) => s.la !== 'missing' && s.en !== 'missing')).toBe(true);
});
it('every post-pentecost-NN id (01-24) has an authored nocturn-readings file', async () => {
const { getNocturnReadings } = await import('../../src/propers/nocturn-readings');
for (let n = 1; n <= 24; n += 1) {
const id = `post-pentecost-${String(n).padStart(2, '0')}`;
expect(getNocturnReadings(id).length, id).toBeGreaterThan(0);
}
});
});