Bulk-author nameLa for all 299 remaining saints, close bilingual header backlog
Deploy / deploy (push) Successful in 1m31s

Authors a real Latin nameLa for every saint in src/data/calendar/saints/
except the deliberate example-confessor placeholder (standard
ecclesiastical Latin forms, a lighter sourcing bar than this app's usual
reference-engine verification -- flagged for future spot-check). Fixes a
real mechanism bug found in the process: calendar/index.ts's sanctoral
collision-resolution branch was dropping nameLa for any saint that won
after beating another same-day candidate. Updates ~180 pre-existing test
fixtures across the calendar suite for the new field.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwsZQMjALCvy7u9tFDWmuQ
This commit is contained in:
2026-08-31 06:44:10 -04:00
parent a6261f044a
commit 514300821a
321 changed files with 460 additions and 70 deletions
+33 -16
View File
@@ -33,18 +33,12 @@ across every hour and content type in this app.
2. **Minimal-proof-done, bulk content pending** — mechanism is built and trusted (a proof
date/entry already resolves correctly end-to-end); what's left is authoring/importing more
content in that same shape across the rest of the calendar:
- Latin saint/octave/named-feast names for the bilingual date/day-label header (see
"Bilingual, merged date/day-label header" below and the dated log's new entry at the
bottom of this file) — `SanctoralIdentity`/`SaintRecord`/`TemporalFeastRecord`/
`ActiveOctave` now carry a real optional `nameLa` field, threaded end-to-end through
`calendar/day-label.ts`'s `biName` helper (live-verified: winner, octave-headline, and
commemoration branches all render authored Latin, not the English fallback, for a proof
set of 12 records — all 11 named temporal feasts plus St. Lawrence). Zero saints besides
St. Lawrence have an authored `nameLa` yet — this is now real bulk-content work in an
already-proven shape, same "one saint at a time, sourced against the reference engine's
own `[Officium]`/`[Rank]` title, nominative-noun-phrase form" methodology used for the
named temporal feasts. Weekday names, month names, rank labels, and season/ordinal
phrasing already had real Latin before this.
- ~~Latin saint/octave/named-feast names for the bilingual date/day-label header~~ — DONE
(2026-08-31): all 11 named temporal feasts and 300 of 301 saints (every real one; the one
exception is a deliberate non-real placeholder) now have an authored `nameLa`. See the
dated log's "Bilingual header `nameLa` mechanism" entry below for the full mechanism/
sourcing detail. Moved out of this "bulk content pending" section since there's no more
bulk content left to author here.
- Matins sanctoral-side readings: the per-book Matins responsory pool has only one book
seeded (`isa`) — needs expanding. Bible-plan TSV content also isn't yet in a test table
(see "Bible-plan TSV — bulk conversion done" below).
@@ -4425,7 +4419,30 @@ objects updated to include the new `nameLa` key (Christmas's own octave-commemor
since `christmas-day.yml` picked up a name in this same pass). `npm test` (807 passed) and
`tsc --noEmit` pass.
**Not started**: `nameLa` for the other ~220 saints — the mechanism is now proven in all three
code paths (plain winner, octave headline, sanctoral commemoration); what's left is the same
per-saint sourcing pass the sanctoral-content sweep itself used, just for a name instead of a
collect.
**Bulk pass, same day**: authored `nameLa` for the remaining 299 real saints (every
`src/data/calendar/saints/*.yml` except `example-confessor`, a deliberate non-real placeholder
never wired into `sanctoral-calendar.yml`). Sourcing standard for this bulk pass was lighter than
per-saint reference-engine verification (infeasible at this volume in one sitting): standard,
well-attested ecclesiastical Latin forms — the saint's own canonical Latin name plus a Latin
rendering of their English descriptor (`Bishop``Episcopus`, `Martyr``Martyr`, `Virgin`
`Virgo`, `Confessor and Doctor of the Church``Confessor et Ecclesiæ Doctor`, etc.), nominative
noun phrase throughout, matching the temporal-feast proof set's own convention. Multi-saint feast
names (e.g. `ss-perpetua-and-felicity`) got the equivalent Latin plural construction
(`Sanctæ ... Martyres`). This is a different, lower sourcing bar than the rest of this app's
content (which is reference-engine-verified line by line) — flagged here explicitly since a
future pass may want to spot-check or upgrade individual entries against the reference engine's
own titles, the way the 11 temporal feasts and St. Lawrence were.
Applied via a scratch Python script (`nameLa` inserted right after each `name:` line) plus two
follow-up passes fixing ~180 pre-existing test fixtures across 18-20 test files that asserted
exact `toEqual` objects on `day.winner`/`day.commemorations` (now carrying the new `nameLa` key).
One real mechanism bug surfaced and fixed by this: `calendar/index.ts`'s sanctoral-vs-sanctoral
collision-resolution branch (`resolveDay`'s per-day candidate loop, ~line 40) was rebuilding the
winning candidate as `{ id, name, rank }` without `nameLa`, silently dropping it for any saint
that had *beaten another candidate on the same date* even when winning outright — caught by
`st-giles`, `st-justina`, `nativity-bvm`, and `vigil-of-st-lawrence` all resolving `nameLa:
undefined` despite having real authored data. Also found and fixed one stale test expectation
(`day-label.test.ts`'s Trinity Sunday/Queenship-of-the-BVM case) that had hardcoded "no Latin
name yet" as the expected behavior — now asserts the real Latin. `npm test` (807 passed) and
`tsc --noEmit` pass throughout. **Closes this backlog item** — moved out of the "Open work"
priority list.