The shell runs with -e, so a failed curl/grep check on any past run would
skip docker stop and leave vu-smoke bound to port 8080 — which is exactly
what happened, blocking this run's own docker run with "port is already
allocated". Remove any leftover container unconditionally before starting,
rather than assuming the previous run's cleanup succeeded.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsdom 30 dropped support for Node 20 (needs ^22.22.2 || ^24.15.0 || >=26.0.0).
The CI workflow was still pinned to Node 20 from before that dependency bump,
so `npm test` failed in every run since — tests passed locally (on Node 26)
but the pipeline never got past the Test step, so neither of the last two
pushes actually deployed. The Dockerfile's own build stage doesn't need the
same bump: it only runs `npm run build` (tsc + vite), which doesn't touch
jsdom.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Pulls in verified content from Divinum Officium rather than placeholders:
17 psalms (2, 6, 7-19, 118, 129), 365 days of the Martyrology, and the full
121-reading Regula cycle, plus the Athanasian Creed.
Ordo corrections driven by review against the real engine output:
- Capitulum and Preces now pick a Sunday/feast vs. ferial form
(calendar/isSundayOrFeast); ferial Preces said every ferial day by choice.
- Chapter responsory, hymn doxology, and the opening versicle's
Alleluia/Laus tibi all vary by season via a shared resolver
(hours/seasonal-propers.ts).
- Real Roman Kalends/Nones/Ides Latin dating (calendar/roman-date.ts,
verified against 363/365 real Martyrology headings) plus the historical
"bis sextus" Feb 29 handling, and the Martyrology's Luna (moon-day)
heading (a ported Golden-Number calculation).
- Fixed responsory structure (was missing its initial full repeat),
weekday psalm antiphons (opening as incipit-or-full by rank, full
repeat after the psalms/Creed as its own part, "*" chant mark kept),
scripture citations on the capitulum/lectio brevis, and V./R. markers
switched from Unicode symbols to plain text for reliable font rendering.
- Dropped Pretiosa and the dead-commemoration psalm (129) for time;
trimmed section headings down to the ones that are actually named
things (Preces, Chapter Office, etc. no longer relabel connective text).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Client-side-first PWA (Vite/TS, no backend) per the approved plan: day-
navigable shell listing all 8 hours, Prime fully resolves via the
calendar -> psalter -> ordo pipeline, the other 7 hours are registered
but flagged not-implemented. Sanctoral/temporal calendar data uses a
day -> id indirection layer (saints, easter-offsets, fixed-date-calendar)
so reassigning a feast to a different day is a data edit, not a code
change. Docker (Caddy-serving-static) + Gitea CI workflow scaffolded to
match the eec/drip/bookshop operational pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>