aboutsummaryrefslogtreecommitdiff
path: root/internal/caldata/readings.go
Commit message (Collapse)AuthorAgeFilesLines
* fix(ef): the ferias between Epiphany and the Sunday after itLukasz Kasprzak2026-08-181-0/+49
| | | | | | | | | | | | | | | | | | They repeat Epiphany's own Mass, Isa 60:1-6 / Matt 2:1-12. lectio gave them the Mass of the first Sunday AFTER Epiphany (Rom 12:1-5 / Luke 2:42-52), which belongs to the ferias that follow that Sunday, not to the ones before it. The two groups cannot be told apart by slug: both are ef-time-after-epiphany-1-<weekday>, because the week numbering starts at the Sunday and the days before it fall in the same numbered week. So the split is made on the date, against the same anchor efWeek uses. Saturdays need no exclusion here -- an unoccupied Saturday in the window carries Our Lady's office and her Mass, and that check runs first. colitur reaches the same result by listing only the five non-Saturday weekdays. 7, 9 and 12 January 2026 now all match colitur, the 12th being the boundary case: it follows the Sunday of the 11th and correctly keeps Rom 12:1-5.
* feat(ef): the Most Holy Name of Jesus, and the ferias of 2-5 JanuaryLukasz Kasprzak2026-08-181-0/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | RG 17(a): "festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii, secus die 2 ianuarii." The Most Holy Name is kept on the Sunday falling 2-5 January and, when no Sunday falls in that window, on 2 January instead. lectio built neither shape, so the day was an ordinary Sunday within the octave and read Gal 4:1-7. The FALLBACK matters more than it looks. The window is four days wide, so in about three years in seven no Sunday lands in it -- in those years there was no Holy Name office at all, a missing II-class feast rather than a misnamed one. The test pins both shapes, checks the fallback does NOT also fire in a year where the Sunday carries the feast, and asserts across 2005-2050 that every year gets it exactly once by one shape or the other. Separately, the ferial days of that window get their own Mass. The Missal's rubric at the feast says it directly: "Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 ianuarii" -- the Circumcision's Mass, Titus 2:11-15 / Luke 2:21. They had been falling through to the Sunday within the octave. Ferial only, and the exclusions are the interesting part: the Sunday carries the Holy Name and its own Mass, and an unoccupied Saturday carries Our Lady's office and hers. 3 January 2026 is such a Saturday and correctly reads Titus 3:4-7, not 2:11-15 -- which works because the BVM check runs first. All four days of 2-5 January 2026 now match colitur.
* fix(ef): the weekdays within the Octave of the Nativity have their own MassLukasz Kasprzak2026-08-181-0/+43
| | | | | | | | | | | | | | | | | | | | | | | | | 29, 30 and 31 December are named days in the Missal's calendarium -- "De V die infra octavam Nativitatis Domini, II classis" and so on -- with a direct formulary, "Diebus infra octavam Nativitatis Domini": Titus 3:4-7 / Luke 2:15-20, and each date's own rubric pointing at it ("Die 29 decembris ... Missa Puer natus est nobis, ut supra"). lectio treated them as ordinary Christmas ferias, so they fell back to the preceding Sunday and served "Dominica infra octavam Nativitatis Domini" (Gal 4:1-7 / Luke 2:33-40) -- a different heading, for the Sunday specifically. Worth recording because it is not a guess: colitur made the IDENTICAL mistake, gave these three days the Sunday's citation, measured it against real years and reverted it. Its bootstrap_lectionary.ml keeps the rejection on record with the scan references for both headings, which is how this one was diagnosed rather than re-derived. Only the weekdays. When 29-31 December falls on a Sunday the day really IS Dominica infra octavam and keeps the Sunday's Mass -- 2030-12-29 is the case, and it is asserted, because a fix applied by date alone would pass on the weekdays and silently swallow the Sunday. Mutation-tested: dropping the Sunday exclusion reddens exactly that assertion and nothing else.
* feat(ef): the Mass of Our Lady on Saturday (RG 309(a))Lukasz Kasprzak2026-08-181-0/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RG 78 gave the day Our Lady's office and its white colour; this gives it her Mass. RG 309(a): "Missae de sancta Maria in sabbato ... iuxta temporum diversitatem" -- the Missal prints five formularies and the season selects among them. Without it the day was kept as Our Lady's and then read the FERIA's Mass, so a Saturday in Septuagesima announced Our Lady and read the parable of the labourers. colitur hit and fixed the identical bug in its own v0.3.0. The five, with the two seams that are easy to get wrong: Advent Isa 7:10-15 / Luke 1:26-38 Christmas Time Titus 3:4-7 / Luke 2:15-20 ...and on until the Purification (2 February), not merely to the end of Christmas Time thereafter Ecclus 24:14-16 / Luke 11:27-28 Paschaltide Ecclus 24:14-16 / John 19:25-27 -- same first reading, different gospel, which is why the test asserts the gospel separately Citations are colitur's, verified there against both photographic scans. The Advent formulary is unreachable as the Saturday office -- Advent has no IV-class ferias -- and is kept anyway, because RG 309's subject is the Masses themselves and a missing branch would fall through silently if the rank rules ever changed. Guarded on the office rather than the day: a sanctoral feast that outranks the Saturday keeps its own readings, so the observed slug must still be the temporal one. All twelve BVM Saturdays of 2026 now agree with colitur on readings, where none did before.
* fix(EF): fill reading gaps (major feasts, feria-repeat-through-feast, sundays)Lukasz Kasprzak2026-07-281-3/+4
| | | | | | | | | | | | | | | | EF readings had ~1.8% of days with no readings (major feasts falling back to the wrong Sunday, feria-repeats broken when the preceding Sunday was a feast). Now 0 gaps over 9496 days (2025-2050); reading correctness spot-checks match missalemeum except the resumed-Epiphany-Sunday edge (next commit). - calendar.TemporalSlug: the green-season weekday-repeats-the-Sunday rule uses the Sunday's TEMPORAL slug, so a Monday still finds its Sunday Mass when that Sunday was displaced by a feast (e.g. the Purification on Feb 2). - Add the missing EF temporal Masses (from missalemeum): the Nativity Day Mass (Heb 1:1-12 / John 1:1-14), Epiphany (Isa 60:1-6 / Matt 2:1-12), the Octave Day of Christmas (Titus 2:11-15 / Luke 2:21), the 6th Sunday after Epiphany (1 Thess 1:2-10 / Matt 13:31-35), and the last Sunday after Pentecost (Col 1:9-14 / Matt 24:15-35).
* fix(of): partial-proper memorials compose proper part + ferial (match USCCB)Lukasz Kasprzak2026-07-281-8/+35
| | | | | | | | | | | | | | | | | | A memorial marked 'PROPER Gospel' (Guardian Angels, Mary Magdalene, Our Lady of Sorrows, Joseph the Worker, the Passion of John the Baptist, Sts Martha/Mary/ Lazarus) uses the FERIAL first reading + its proper gospel; one marked 'PROPER First Reading' (Barnabas) uses its proper first + the ferial gospel. Previously we imported catholic-resources' *suggested* first for the gospel-proper ones, which differs from what USCCB publishes. - readings.go: when the observed's inline Mass has only a proper gospel (or only a proper first), fill the missing reading/psalm from the day's ferial and sort into canonical order. A fully-proper feast is untouched. Factored out ofFerial(). - gen-of-sanctoral-readings.py: keep only the strictly-proper part per the CR source-note. Verified vs USCCB: Guardian Angels (2025-10-02) now = Nehemiah 8 / Ps 19 / Matt 18:1-5,10 exactly. Updates TestUniversalSanctoralReadings.
* feat(of): full sanctoral calendar + weekday/memorial readingsLukasz Kasprzak2026-07-281-6/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Populate the OF General Roman Calendar sanctoral and extend the OF readings to weekdays and sanctoral days. Sanctoral calendar (roman-calendar.ini: 29 -> 202 celebrations): - scripts/gen-sanctoral.go generates it from calapi.inadiutorium.cz (authoritative General Roman Calendar) -- English name/rank/colour from general-en, Latin from general-la, Polish from niedziela DayInfo (obligatory celebrations). Fixed dates the temporal engine already computes are excluded. VALIDATED: my engine's observed rank agrees with calapi on all 86 obligatory sanctoral days of 2026 (0 mismatches). Precedence fix (precedence.go): an optional memorial no longer displaces the weekday as the DEFAULT observed celebration (it sorts below the ferial, shown as an option) -- matching the General Roman Calendar / calapi. Readings (of-lectionary.ini: 254 -> 1018 entries) via genlect-of.go: - Weekday (ferial) 2-year cycle I/II, keyed <ferial-slug>-<WeekdayCycle>, harvested from niedziela over 2020-2025 (multiple years per cycle; retry-on-failure so a glitch year never poisons a key; only TRUE ferials + optional-memorial days, where niedziela shows the ferial). - Obligatory memorials keyed by their OWN slug (niedziela shows their proper, e.g. Barnabas -> Acts 11, or the ferial for memorials without a proper) -- never miskeyed to a ferial position. - caldata.Readings: OF resolves slug+SundayCycle | slug+WeekdayCycle, else a memorial falls back to the day's ferial readings. - Source-glitch normalisation (1J->1 J, PnP->Pnp). books.ini: canonical names "Song of Solomon" and "The Acts" added as their own [en] forms (ToEnglishRef emits the canonical; it must resolve). Fixes ~32 cross-chapter Song-of-Songs/Acts citations. Coverage: 359/365 days of 2026 render (98.4%); 6 residual ferial positions never a true-ferial in 2020-2025. EF sanctoral and OF psalm renumbering still pending.
* feat(caldata): OF Sunday/solemnity readings by slug+cycle (seed table)Lukasz Kasprzak2026-07-271-1/+6
|
* feat(calfeed): shared day builder + reusable reading resolverLukasz Kasprzak2026-07-271-0/+31