summaryrefslogtreecommitdiff
path: root/internal/caldata
Commit message (Collapse)AuthorAgeFilesLines
* caldata(ef): finalise the 4 review-flagged Polish namesLukasz Kasprzak2026-07-291-5/+1
| | | | | | | | | | Reviewed the four EF names missalemeum never returns. George (Martyr), Stanislaus (Bishop and Martyr), and Zephyrinus (Pope and Martyr) were correct as best-guessed -- flags cleared as-is. Alexander & Companions had enumerated only three of the martyrs (omitting Juvenal); since the English name is the shortened "& Companions", match it with the faithful Polish "śś. Aleksandra i Towarzyszy, Męczenników". No more # review-pl flags; all 322 EF names stand.
* caldata(ef): add Polish names to the traditional sanctoralLukasz Kasprzak2026-07-291-0/+326
| | | | | | | | | | | | | | | | | | The EF (traditional) calendar showed English memorial names even with the UI switched to Polish, because tridentine-calendar.ini carried only name.en. Add name.pl to all 322 sanctoral entries. Source: missalemeum.com's Polish propers (/pl/api/v5/proper/DATE), the authoritative Polish traditional-calendar naming -- paired to each entry by the celebration id shared across its /en/ and /pl/ responses, fetched across two years so saints superseded by a Sunday in one year are still resolved. 318 entries matched that way; a missalemeum source typo ("Dokotra" -> "Doktora") is corrected in the two it affected. The remaining 4 -- George, Alexander & Companions, Stanislaus, Zephyrinus -- are never returned by missalemeum in the fetched years (superseded every time); they carry a best-guess Polish name tagged with a "# review-pl" comment for a human to verify.
* caldata: allow an external universal sanctorale to override the embedded oneLukasz Kasprzak2026-07-282-1/+73
| | | | | | | | | | | | | | | | The universal calendar of saints can now be refreshed or replaced without a rebuild: if ~/.config/lectio/sanctorale/of.ini (OF) or ef.ini (EF) is present and parses, caldata.Base uses it instead of the embedded calendar; a missing or malformed file falls back to the embedded default, so the binary stays self-contained and correct out of the box. Local diocesan/national additions keep layering on top via calendars/ + `use` (unchanged). The temporal cycle and precedence rules stay in code -- only the sanctorale is data. - caldata.SetSanctoraleDir hook (mirrors bible/naming/i18n); Base() prefers the external file per form. config.SanctoraleDir(); wired in the CLI, TUI and web entry points. Tests cover override, no-file, and malformed-file fallback. - README: new "Calendar of saints" section (two tiers: overlay via `use`, replace via sanctorale/<form>.ini); config comment notes the override.
* caldata: backfill Polish names for the whole OF universal sanctoralLukasz Kasprzak2026-07-281-0/+132
| | | | | | | | | | | Add name.pl to the 132 universal-calendar celebrations that lacked it, so all 212 now carry Polish names (was 80). They follow the existing liturgical style -- genitive case, "św. <name>, <title>" / "świętych ...", feast events in the genitive -- hand-curated from standard Polish nomenclature and keyed to each entry's name.en/name.la. Polish patrons use their Polish forms (Adalbert -> św. Wojciech, John of Kanty -> św. Jana Kantego, Hedwig -> św. Jadwigi Śląskiej). Verified: feast/solemnity saints render their Polish name as the day header, optional memorials appear as Polish options in the day's others.
* fix(EF): resumed Sundays after Pentecost use the Epiphany MassesLukasz Kasprzak2026-07-281-14/+2
| | | | | | | | | | | In early-Easter years there are more than 24 Sundays after Pentecost. Per the 1960 Rubrics the surplus Sundays resume the Sundays after Epiphany that Septuagesima cut short (highest-numbered first) and the last Sunday keeps the 24th (Last) Mass. temporalEF now routes those Sundays to the resumed Epiphany slug for readings while keeping the calendrical time-after-pentecost season; the mis-harvested tail entries (post-Pentecost sundays 24-28) are corrected to the true 24th Mass and the surplus removed. Validated: 88/88 tail/resumed Sunday gospels match missalemeum 2025-2050; EF oracle green.
* fix(EF): fill reading gaps (major feasts, feria-repeat-through-feast, sundays)Lukasz Kasprzak2026-07-282-3/+24
| | | | | | | | | | | | | | | | 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(calendar): OF precedence/transfer + readings resolution; EF Pentecost octaveLukasz Kasprzak2026-07-282-45/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes found by validating the offline engine per-day vs the LiturgicalCalendar API (OF) and missalemeum (EF) across 2005-2050. OF calendar is now 0 real errors in the forward window (season/cycle already perfect). OF precedence/transfer (calendar): - Ash Wednesday and Holy Week Mon-Wed are band-2 privileged, so a coinciding feast (Chair of St Peter on Ash Wednesday) is suppressed, not observed. - Solemnities transfer out of Holy Week / the Easter octave: the Annunciation defers to the Monday after the 2nd Sunday of Easter; St Joseph is anticipated to the Saturday before Palm Sunday; the Nativity of St John the Baptist moves to Jun 23 when a Lord's solemnity (Sacred Heart / Corpus Christi) falls Jun 24. - Within a precedence band, a solemnity of the Lord/BVM outranks a saint's (dignity tiebreak) rather than losing an alphabetical slug tie. - Perpetua & Felicity corrected optional -> obligatory memorial. OF readings resolution (bible.OFRef + lectionary data): - Verse-accurate Hebrew->Vulgate psalm mapping incl. the split psalms (9/10, 114/115, 116, 147); "+" verse joins and abbreviated ranges ("127-28") normalized; single-chapter books (2/3 John, Jude) get chapter 1. - Cleaned harvest artifacts from of-lectionary.ini (descriptive-suffix gospels, "or Year A" alternates, "*"/"[Vulg.]"/bracket markers, slash abbreviations); Joel/Malachi/Zechariah/Esther book-versification citations fixed to Vulgate. - Split a merged Ps 15:10/11 row in vul.tsv. Result: 0 unresolvable OF readings over 2557 rendered days (cycles A/B/C, varied Easters). EF: the Octave of Pentecost (Whit Monday-Saturday) is red, not white.
* fix(of): partial-proper memorials compose proper part + ferial (match USCCB)Lukasz Kasprzak2026-07-283-31/+52
| | | | | | | | | | | | | | | | | | 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): Christmas-season weekday ferials from catholic-resources.org ↵Lukasz Kasprzak2026-07-282-0/+153
| | | | | | | | | | | | | | | (date-based) Completes the seasonal weekday lectionary. The Christmas-season weekdays sit on the AdventChristmas page in a SHIFTED 6-column layout (Day in c[1], not c[2] like Advent's 7-column) -- the generator now finds the Day column wherever it is. Adds date-based slugs to temporal.go: christmas-dec-<29..31> (octave), christmas-jan-<2..7> (before Epiphany), christmas-after-epiphany-<weekday> (before the Baptism). Fixes the christmas-octave-fri coverage gap and the by-date/by-week collision. 362/362 seasonal ferial-days render across 2026-2029 with 0 gaps. Extends TestOFSeasonalFerials. All of Advent/Lent/Easter/Christmas weekdays now CR-sourced; only the Commons remain (optional -- memorials default to the ferial).
* feat(of): seasonal weekday ferials from catholic-resources.org + date-based ↵Lukasz Kasprzak2026-07-282-343/+511
| | | | | | | | | | | | | | | | | | | | | | late Advent Re-sources the proper weekdays of Advent (weeks 1-3), Lent, and Eastertide from catholic-resources.org (scripts/genlect-of-season-ferials-cr.py; single-cycle, so both -I/-II keys get the same readings). The diff caught real niedziela defects: - Easter weekday first readings contaminated (easter-3-mon had 1 Cor 15 instead of Acts 6:8-15; easter-4-thu had Rev 12 instead of Acts 13:13-25). - The Easter octave weekdays (Easter Mon-Sat) had no readings at all. - Stray psalm-numbering artifacts (147A(146), Ps42(41)) cleared. Late Advent (Dec 17-24) is proper to the DATE, not the Advent week, so temporal.go now keys those days 'advent-dec-<day>' (fixing the same by-date/by-week collision as the OT numbering) and the generator supplies them (Dec 17 = the genealogy Matt 1:1-17; Dec 24 = the Benedictus). 157 seasonal ferial-days render across 2026-2028 with 1 residual gap (christmas-octave-fri). Adds TestOFSeasonalFerials, credits the source, bumps to 0.43.0. Christmas-season weekdays (Dec 29-31, Jan 2-5) remain niedziela-sourced (CR's shifted layout + Epiphany-dependent assignment -- a documented follow-up).
* feat(of): complete Sunday lectionary from catholic-resources.org (restore ↵Lukasz Kasprzak2026-07-282-312/+547
| | | | | | | | | | | | | | | | | | | | | | | | | | 2nd readings) The niedziela harvest had dropped the SECOND reading on 271 of ~299 Sunday-cycle entries (a Sunday Mass is first/psalm/second/gospel). scripts/genlect-of-sundays-cr.py re-sources the temporal Sunday & solemnity lectionary (Ordinary Time, Advent, Christmas, Lent, Easter, Trinity, Corpus Christi, Sacred Heart, Christ the King; all three cycles A/B/C) from catholic-resources.org, keyed by liturgical position, and merges the complete readings into of-lectionary.ini. - Also corrects ~6 contaminated Sunday first readings the niedziela by-date harvest had picked up (ordinary-sunday-21-B had a Marian Prov 8; advent-2-A had the Immaculate Conception's Gen 3; Christ the King B/C, Trinity C, Pentecost, Ascension/7th-of-Easter were wrong). - Content-validated: every changed first reading verified against the old one (all changes are correct fixes or the identical passage, book spelling aside). - Handles source quirks: hyphen/en-dash/ABC cycle markers, verbose Year-A solemnity names, 'opt:' cycle-proper alternates, '[2025: Corpus Christi]' displacement notes appended to names, Palm Sunday (cycle-independent first/second, per-cycle Passion gospel kept), and abbreviation variants (Jon/Is/Mt/Act/Zac...). 157/157 Sundays render first+psalm+second+gospel across 2026-2028. Adds TestOFSundayCompleteReadings, credits the source in NOTICE, bumps to 0.42.0.
* feat(of): proper Mass readings for the sanctoral (from catholic-resources.org)Lukasz Kasprzak2026-07-282-0/+160
| | | | | | | | | | | | | | OF feasts, solemnities, and proper-reading memorials had no readings of their own and fell back to the day's ferial (Barnabas showed the ferial instead of Acts 11; Our Lady of Sorrows / the Guardian Angels showed the ferial instead of their proper gospel). scripts/gen-of-sanctoral-readings.py scrapes catholic-resources.org's Proper of Saints table and inlines reading.first/psalm/second/gospel into roman-calendar.ini for the 41 universal-calendar celebrations marked PROPER (plus every feast/solemnity); memorials that draw on a Common keep the ferial, which is the OF default. Handles the source quirks: 'or' alternatives (takes the first), cycle-specific A:/B:/C: gospels (takes A), lectionary # refs, and vigil-vs-day (keeps the day Mass). All 41 render; citations only. Adds TestUniversalSanctoralReadings, credits the source in NOTICE, bumps to 0.41.0.
* fix(of): canonical OT ferial week numbering + CR-sourced ferial lectionaryLukasz Kasprzak2026-07-281-964/+1022
| | | | | | | | | | | | | | | | | | | | | | The Ordinary Form ferial lectionary had two linked defects, both from harvesting niedziela.pl by date: (1) post-Pentecost Ordinary-Time ferial WEEK NUMBERS were one too high (temporal.go counted back from Christ the King using the weekday itself, not its preceding Sunday, so a ferial took the next week's number), and (2) ~17 ferial keys held a SAINT's readings (stored when a saint displaced the ferial on the queried date, e.g. week 22 smeared with a Marian Prov 8/John 2), plus 16 weekday slots were missing entirely. - temporal.go: number a span-2 ferial from its preceding Sunday. Verified 388/388 ferial-week agreement with calapi across 2026-2028. - scripts/genlect-of-cr.py: regenerate the Ordinary-Time ferial lectionary (first/psalm/gospel, both years, all 34 weeks) from catholic-resources.org (Fr. Felix Just, S.J.), which is keyed by liturgical position (immune to by-date contamination) and complete. Citations only; text still rendered from the public-domain corpora. of-lectionary.ini OT ferials now 408 (was 392). Fixes ~17 contaminated entries + 16 gaps + the week-numbering audit item. Psalms already share modern numbering, so no conversion. Adds TestOFOrdinaryTimeFerialWeek. Credits catholic-resources.org in NOTICE. Bumps to 0.40.0.
* feat: complete OF+EF calendar coverage (movable feasts, vigils, ember days, ↵Lukasz Kasprzak2026-07-282-133/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | transfers) Ordinary Form: - Add the movable Marian memorials that have no fixed date: Mary, Mother of the Church (Monday after Pentecost) and the Immaculate Heart (Saturday after the Sacred Heart), computed in computeOF. - General Norms 60: two coinciding obligatory memorials both become optional and the ferial is observed -- except Mary, Mother of the Church, which keeps precedence per its 2018 decree. Extraordinary Form: - Capture fixed-date vigils in the sanctoral harvest (Christmas, the Nativity of St John the Baptist, Sts Peter & Paul, St Lawrence, the Assumption, All Saints, the Immaculate Conception) -- previously filtered out. - temporalEF: the movable vigils of the Ascension (I class eve) and Pentecost (Whitsun Eve), and the September/Advent Ember days (II class violet ferias). - transferIfImpededEF: the Annunciation transfers past Holy Week/the Easter octave to the Monday after Low Sunday; All Souls moves to Nov 3 when Nov 2 is a Sunday. - genlect harvests proper Masses for the new Ember/vigil days. Adds TestEFCoverage + TestOFMovableMemorials. Bumps to 0.39.0. Verified per-day: OF 0 real errors vs calapi (2026-2028, 100% correct-observed); EF 0 real errors vs missalemeum (2025-2027), residual = deep-tail vigil-occurrence and St Joseph Passiontide-transfer edges (~1-2 days/yr, documented).
* fix(of): recover season-commemorated saints + correct Irenaeus rankLukasz Kasprzak2026-07-281-63/+183
| | | | | | | | | | | | | | | | | | | Audit of the OF sanctoral vs calapi's full celebration list (2026-2028) found saints that calapi only ever shows as 'commemoration' in a privileged season (Lent, late Advent, the Christmas octave) were dropped by the generator, and 'first-year-wins' froze a stale rank. - gen-sanctoral.go: map calapi 'commemoration' -> optional memorial; keep the HIGHEST rank per saint across an expanded 2025-2029 reference span (so a saint is seen at its true rank on an ordinary weekday, e.g. Polycarp as a memorial when Feb 23 falls in Ordinary Time). - Recovers 15 saints: Polycarp, Perpetua & Felicity, John of God, Frances of Rome, Patrick, Cyril of Jerusalem, Turibius, Isidore, Vincent Ferrer, Peter Canisius, John of Kanty, Thomas Becket, Sylvester I, and others (197->212). - Corrects St Irenaeus (June 28) optional -> obligatory memorial (2022 change). Verified vs calapi per-day 2026-2028: remaining diffs are only the 3 skipped movable memorials and name-phrasing of temporal days.
* feat(ef): full 1962 universal sanctoral (16 -> 317 celebrations)Lukasz Kasprzak2026-07-282-76/+2301
| | | | | | | | | | | | Generate internal/caldata/tridentine-calendar.ini from missalemeum's per-date proper API (Divinum Officium 1962 data) via scripts/gen-sanctoral-ef.go: each fixed date's observed saint with rank, colour, English name and proper Epistle/Gospel citations, plus sancti commemorations. Multiple reference years are tried per date so a saint occulted by a Sunday in one year is still captured observed in another; saints never observed are ranked commemoration. Feasts of the Lord are marked class=lord. Latin names hand-curated (missalemeum has none). Adds TestTridentineLoads, credits missalemeum in NOTICE, bumps to 0.38.0.
* fix(of): sanctoral generation — exclude temporal & movable, keep ↵Lukasz Kasprzak2026-07-281-105/+58
| | | | | | | | | | | | | | | | transferred-fixed - Skip ALL dates the temporal engine owns (Sundays + its solemnities/feasts), so Christ the King / Trinity no longer leak into the sanctoral as duplicate fixed-date entries; saints are captured on their weekday occurrences. - Explicit skip-list for genuinely movable memorials (Mary Mother of the Church, Immaculate Heart, BVM-on-Saturday) that a fixed-date calendar cannot represent -- a documented gap needing temporal-engine support. - 'first year wins' keeps a transferred-but-fixed feast (Annunciation Mar 25) on its proper date. Lord-feast class inference fixed earlier. Calendar rank vs calapi: 2026 1/86, 2027 2/86, 2028 2/92 mismatches (~98-99%); residual = the skipped movable memorials.
* chore(of): extend lectionary harvest to 2018-2025 (98.4% coverage)Lukasz Kasprzak2026-07-281-229/+296
| | | | | | | More true-ferial years per position; 359/365 days of 2026 now resolve. The 6 residual gaps are rare pre-Lent Ordinary-Time positions (weeks 3/4/9) that never occurred as a true ferial in the harvestable past (niedziela publishes no future years) -- an irreducible limit of date-based harvesting, documented.
* fix(of): correct memorial readings (ferial fallback) + Lord-feast classLukasz Kasprzak2026-07-282-718/+82
| | | | | | | | | | | | | | | | | | | Validation vs USCCB (Catholic Readings API) caught two bugs: - Obligatory memorials were keyed by their own slug, freezing ONE year's ferial (a memorial's fixed date lands in a different Ordinary-Time week each year), so most weekday memorials showed the wrong week's reading. Now memorials are skipped in the harvest and fall back to the day's ferial slug at runtime -> the correct week's reading. (Proper-reading memorials show the permitted ferial; their propers are a later refinement.) - gen-sanctoral classOf missed feasts of the Lord whose title says 'Holy Cross' (not 'of the Cross') etc., so the Exaltation of the Cross (and Transfiguration, Presentation) did not displace an Ordinary Sunday. Fixed the Lord/BVM class inference; the Cross now correctly displaces the Sunday and shows its proper. USCCB agreement on the sampled 2025 window rose to ~92%; residual diffs are proper-reading memorials (Guardian Angels/Sorrows gospels), citation-granularity (same reading, different verse range), and week numbering around feast-displaced Sundays -- documented as known refinements.
* feat(of): full sanctoral calendar + weekday/memorial readingsLukasz Kasprzak2026-07-284-292/+5665
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* test(caldata): OF Sunday readings resolve end-to-end (real engine + table)Lukasz Kasprzak2026-07-271-0/+23
|
* feat(caldata): generate OF Sunday/solemnity lectionary from niedzielaLukasz Kasprzak2026-07-272-11/+1289
| | | | | | | | | | | | | | | | | Task 2. scripts/genlect-of.go harvests niedziela over the PAST cycle-equivalent years 2023(A)/2024(B)/2025(C) -- niedziela only publishes ~6 weeks ahead, so the future 2025-2027 span was unfetchable; the 3-year cycle repeats, so a liturgical position's cycle-A readings are identical whether they fall in 2023 or 2026. Produces internal/caldata/of-lectionary.ini: 254 entries (A=86, B=87, C=81), keyed <slug>-<cycle>, citations English-canonical via ToEnglishRef. Also: books.ini [en] Matthew gains "Mat" (ToEnglishRef maps Polish Mt->Mat; now resolves and displays as Matt). of_test.go assertion relaxed to accept either spelling. KNOWN GAP: 8 cross-chapter range citations (e.g. Sirach 27:30-28:7, John 18:1-19:42) don't yet resolve -- the bible ref parser handles semicolon groups but not a dash-range spanning a chapter boundary. Fix next.
* feat(caldata): OF Sunday/solemnity readings by slug+cycle (seed table)Lukasz Kasprzak2026-07-274-3/+67
|
* feat(calfeed): shared day builder + reusable reading resolverLukasz Kasprzak2026-07-271-0/+31
|
* feat(ef): complete offline EF readings — proper ferias, deuterocanon, ↵Lukasz Kasprzak2026-07-271-1/+353
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Latin fallback Finish the Extraordinary Form (1962) offline Mass readings so every day of the year resolves in both English and Polish. Temporal engine (temporal_ef.go): - Unique ferial slugs "ef-<season>-<week>-<weekday>" so penitential-season weekdays (Lent, Advent, Passiontide, Easter octave) can key their own proper Masses; green-season ferias have no entry and fall back to the preceding Sunday (the 1962 rule). - Special "ef-lent-after-ashes-<weekday>" case for the days between Ash Wednesday and Lent I, which have their own propers. Lectionary (tridentine-lectionary.ini, 55 -> 143 entries) via genlect.go: - Generator now fetches proper-season weekdays and stores a feria only when its Mass differs from the preceding Sunday's. - cleanCite() normalises two missalemeum data glitches: a stray comma between book and chapter ("4 Kings, 5:1" -> "4 Kings 5:1") and a period-as-separator ("John 20. 19-31" -> "John 20:19-31"), both guarded so legitimate multi-chapter citations are untouched. Citations & corpora: - books.ini: Douay abbreviations in the [en] dialect (Ex, Ezech, Jonas, and 3/4 Kings -> canonical 1/2 Kings), so the EF Lenten epistles resolve while the display keeps modern sigla. - drb.tsv: +205 rows backfilling the deuterocanonical Daniel 13-14 (Susanna, Bel) and Esther 11-16 (Greek additions) from get.bible douayrheims, which the base corpus omitted; scripts/gen-deutero.py documents the fetch. Rendering (liturgy.go): - readingLine() falls back to the Latin Vulgate (complete) when the vernacular corpus lacks a passage, with a clear note. Covers the Polish Wujek deuterocanon gap (no clean public-domain source exists) and any future vernacular gap; faithful to the EF as a Latin rite. Result: 730/730 days resolve for both EN (native) and PL (native + Latin fallback for 3 deuterocanon days). Version 0.32.0 -> 0.33.0.
* feat: EF temporal Sunday lectionary (offline Sunday Mass readings)Lukasz Kasprzak2026-07-272-0/+255
| | | | | | | | | Unique temporal-day slugs (season-sunday-week); scripts/genlect.go generates tridentine-lectionary.ini from missalemeum keyed by slug (55 entries: the Sundays of the whole EF year). caldata.TemporalReadings(form,slug) lookup; --liturgy resolves proper-of-feast else the temporal cycle and renders the text. bible.ParseRef strips abbreviation dots (1 Cor. -> 1 Cor). 52/53 Sundays fully resolve offline.
* fix(bible): resolve + format cross-chapter citations (13:22-25; 15:10)Lukasz Kasprzak2026-07-271-2/+2
| | | | | | | normalizeSigla treats ';' as a group separator so SplitRef resolves each chapter; FormatRef renders multi-chapter refs per chapter in the dialect's sigla. Restored the full Assumption (Judith 13:22-25; 15:10) and St Lucy (2 Cor 10:17-18; 11:1-2) epistles.
* feat(cli,caldata): EF feast proper readings — offline text in --liturgyLukasz Kasprzak2026-07-271-0/+30
| | | | | | | Added 1962 Epistle+Gospel citations (from missalemeum) to the 15 EF feasts; --liturgy now resolves + renders the reading text via the corpora (drb/wuj), incl. deuterocanon (Assumption's Judith epistle). Cross-chapter citations use their primary range pending multi-chapter parser support.
* feat(caldata,cli): embed 1962 EF calendar + form-aware Stack; --liturgy ↵Lukasz Kasprzak2026-07-273-10/+155
| | | | | | | | computes EF caldata.Tridentine()/Base(form); Stack(form,dir,use); runLiturgy drops the EF guard and uses the form's base; rankLabel shows I-IV class; display omits OF cycles + strips ef- slug prefix for EF.
* feat(caldata): export ParseLayer + LoadLayer + Stack (user calendar layers)Lukasz Kasprzak2026-07-272-2/+97
|
* feat(cli): 'lectio --liturgy/-L' prints the computed liturgical day offlineLukasz Kasprzak2026-07-271-0/+4
| | | | | Uses the pure engine + embedded universal calendar; UI-language names, rank, colour, cycles, and inline proper readings. Added the Assumption's propers.
* feat(caldata): embed + parse the owned universal Roman calendar (initial ↵Lukasz Kasprzak2026-07-273-0/+325
coverage)