<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lectio.git/internal/caldata/tridentine-lectionary.ini, branch v0.46.1</title>
<subtitle>offline Catholic daily readings and liturgical calendar in Go, with CLI, TUI and web clients</subtitle>
<id>https://git.labunix.xyz/lectio.git/atom?h=v0.46.1</id>
<link rel='self' href='https://git.labunix.xyz/lectio.git/atom?h=v0.46.1'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/'/>
<updated>2026-08-17T08:05:55Z</updated>
<entry>
<title>caldata: the Lenten Ember days were serving Lent I Sunday's Mass</title>
<updated>2026-08-17T08:05:55Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-17T08:05:55Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=dde760c31c6e8cffa84446b0804ab6d6372ccb30'/>
<id>urn:sha1:dde760c31c6e8cffa84446b0804ab6d6372ccb30</id>
<content type='text'>
Three lectionary sections were keyed ef-lent-1-{wednesday,friday,saturday}
while temporal_ef.go's efEmberSlug computes ef-lent-ember-{wed,fri,sat}. The
lookup in caldata.Readings takes the observed slug and has no alias table, so
it missed the entries entirely and fell through to the preceding-Sunday
fallback. Every Lenten Ember day since the data was added has served Lent I
Sunday's Mass -- three days a year, in a season that prints a proper Mass daily.

The values were already right; only the keys were wrong, and they were stale
rather than mistaken: they predate Lent being added to efEmberSlug, and
scripts/genlect.go keys off day.Observed.Slug, so re-running it would already
write the correct names. Advent and September were never affected -- both
already use the -ember- form.

Renamed, and verified the whole file: every one of the 119 section names is now
a slug the calendar actually computes, checked by sweeping 2005-2050. Those
three were the only dead keys.

Added TestEFLectionaryKeysAreReachableSlugs to make the class detectable rather
than just this instance. Mutation-tested: reverting the three keys fails it,
naming all three.

Found by differencing against colitur, the sibling OCaml engine, while giving
it a lectionary of its own. Worth recording how nearly it escaped: colitur
inherited the same wrong keys from this file during its bootstrap, so both
engines produced the same wrong Mass and the differential between them was
silent. It only surfaced when colitur's data was checked against the Missal
itself. Two implementations agreeing is not evidence when one was seeded from
the other.
</content>
</entry>
<entry>
<title>fix(EF): resumed Sundays after Pentecost use the Epiphany Masses</title>
<updated>2026-07-28T12:54:10Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T12:54:10Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=c5abf87fa7198c8f245f407774e2326e4b6c9b9c'/>
<id>urn:sha1:c5abf87fa7198c8f245f407774e2326e4b6c9b9c</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>fix(EF): fill reading gaps (major feasts, feria-repeat-through-feast, sundays)</title>
<updated>2026-07-28T12:46:17Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T12:46:17Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=cf45e9f7f3146bca6039b63e2be02463b02f8043'/>
<id>urn:sha1:cf45e9f7f3146bca6039b63e2be02463b02f8043</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>feat: complete OF+EF calendar coverage (movable feasts, vigils, ember days, transfers)</title>
<updated>2026-07-28T06:49:57Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T06:49:57Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=70b805018f0ae0d8424c3c7de8f1169476385a35'/>
<id>urn:sha1:70b805018f0ae0d8424c3c7de8f1169476385a35</id>
<content type='text'>
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 &amp; 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).
</content>
</entry>
<entry>
<title>feat(ef): complete offline EF readings — proper ferias, deuterocanon, Latin fallback</title>
<updated>2026-07-27T14:17:18Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T14:17:18Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=a1e041dfbe55194c7fea0636d38cff33ee28315d'/>
<id>urn:sha1:a1e041dfbe55194c7fea0636d38cff33ee28315d</id>
<content type='text'>
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-&lt;season&gt;-&lt;week&gt;-&lt;weekday&gt;" 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-&lt;weekday&gt;" case for the days between Ash
  Wednesday and Lent I, which have their own propers.

Lectionary (tridentine-lectionary.ini, 55 -&gt; 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" -&gt; "4 Kings 5:1") and a
  period-as-separator ("John 20. 19-31" -&gt; "John 20:19-31"), both guarded so
  legitimate multi-chapter citations are untouched.

Citations &amp; corpora:
- books.ini: Douay abbreviations in the [en] dialect (Ex, Ezech, Jonas, and
  3/4 Kings -&gt; 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 -&gt; 0.33.0.
</content>
</entry>
<entry>
<title>feat: EF temporal Sunday lectionary (offline Sunday Mass readings)</title>
<updated>2026-07-27T13:22:14Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T13:22:14Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=88ade3a7b7e15e6742d367bdc4b95b1293b92429'/>
<id>urn:sha1:88ade3a7b7e15e6742d367bdc4b95b1293b92429</id>
<content type='text'>
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. -&gt; 1 Cor). 52/53 Sundays fully
resolve offline.
</content>
</entry>
</feed>
