Unicode ℣/℟ (U+2123/U+211F) were mixed unpredictably with plain V./R.
across ~550 proper YAML files, sometimes within the same file. Screen
readers can't announce the unicode glyphs. Replace all instances with
plain text.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QC6jHsj75xcsTkapqJR6fD
Every octave-reading yml's source field held only the Latin
attribution copied verbatim from the breviary text; add the matching
English translation now that the field carries both languages.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L3wxvz3mPXiHxkPB5JpnmD
Adds src/scripture/ (types.ts, index.ts), a verse-addressable store mirroring
psalter/index.ts's own pattern exactly -- getScriptureVerses(book, chapter,
range) -- for non-Psalm scripture (Wisdom, Canticles, Ezekiel, Acts, Joel,
etc.). Kept as its own module, not folded into the Psalter, per 2026-08
discussion ("the psalms kind of work differently even if the logic is the
same, they do need their own store").
Octave readings can now declare `passages: [{ book, chapter, verses }]`
instead of embedding text -- each entry becomes its own paragraph, letting a
reading built from several verse ranges keep its original paragraph breaks.
getOctaveReading resolves either shape (embedded text or passages) into the
same OctaveReadingText callers already expect, so nothing downstream needs
to know which was used. Scope, per discussion: only readings that are
Scripture start to finish get this treatment -- prose that merely quotes a
verse or two (most of the patristic sermons pulled so far) keeps its
quotations embedded inline, as before.
Migrates the 9 already-committed octave readings that are pure Scripture
(Wisdom 4:7-20, Canticles 1 and 8, seven different Ezekiel excerpts across
All Saints' octave -- one of which, day 7, genuinely spans two chapters --
and Acts 19/Joel 2 for Pentecost's octave) to the new passages notation,
verified to resolve to character-identical text as before.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
All Saints: all 7 days (2-8) have real content -- a continuous reading
from the book of Ezechiel read straight through the whole octave,
confirmed via each day's own distinctive Invitatory antiphon, present
even on Nov 2 (so this app's own All Souls' Day exclusion doesn't
conflict with anything here). Also fixes two more recurring "dropped
space after capital I" source typos ("Iwill" -> "I will") found by
grepping the accumulated readings so far, retroactively correcting
St. Lawrence's day 8 and the Assumption's day 6.
vite.config.ts: raises workbox's maximumFileSizeToCacheInBytes -- the
growing body of eagerly-bundled octave-reading text (by design, for
offline use) pushed the main chunk past the default 2 MiB precache cap,
which was failing the production build.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>