Make octave-reading source attribution bilingual

The heading above each Matins octave reading was a bare Latin string
(e.g. "Sermo sancti Bernárdi Abbátis") rendered as-is in both the
Latin and English columns, since the app shows both languages side
by side rather than toggling. Widen OctaveReadingText.source and the
lesson part's label to carry per-language text, and render it as its
own lang-columns row like the body text beneath it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L3wxvz3mPXiHxkPB5JpnmD
This commit is contained in:
2026-08-21 08:04:03 -04:00
parent a7da8b0211
commit b52b202909
5 changed files with 41 additions and 9 deletions
+3 -1
View File
@@ -90,7 +90,9 @@ describe('resolveOrdo("prime", ...)', () => {
it('resolves a Regula reading for the day, via the canonical-date table', () => {
const ordo = resolveOrdo('prime', '2026-08-25');
// 08-25 maps to canonical 04-25 (Rule ch. 67) in data/regula/table.yml.
const rule = ordo.parts.find((p) => p.kind === 'lesson' && p.label?.includes('67'));
const rule = ordo.parts.find(
(p) => p.kind === 'lesson' && typeof p.label === 'string' && p.label.includes('67'),
);
expect(rule).toBeDefined();
});
+2 -1
View File
@@ -4,7 +4,8 @@ import { getOctaveReading } from '../../src/propers';
describe('getOctaveReading', () => {
it('resolves a real reading for a day that has one, collapsed into one continuous text', () => {
const reading = getOctaveReading('st-lawrence', 2);
expect(reading?.source).toBe('Sermo sancti Augustíni Epíscopi.');
expect(reading?.source.la).toBe('Sermo sancti Augustíni Epíscopi.');
expect(reading?.source.en).toBe('Sermon of St. Augustine, Bishop');
expect(reading?.text.la).toContain('Beatissimi Laurentii Martyris');
expect(reading?.text.en).toContain('most blessed Martyr, Lawrence');
expect(reading?.status.la).toBe('verified');