<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lectio.git/internal/caldata/roman-calendar.ini, branch v0.45.0</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.45.0</id>
<link rel='self' href='https://git.labunix.xyz/lectio.git/atom?h=v0.45.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/'/>
<updated>2026-07-28T17:10:23Z</updated>
<entry>
<title>caldata: backfill Polish names for the whole OF universal sanctoral</title>
<updated>2026-07-28T17:10:23Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T17:10:23Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=a9faf42cfbb1c060ac69f703f0c78616656566cb'/>
<id>urn:sha1:a9faf42cfbb1c060ac69f703f0c78616656566cb</id>
<content type='text'>
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. &lt;name&gt;, &lt;title&gt;" / "ś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 -&gt;
św. Wojciech, John of Kanty -&gt; św. Jana Kantego, Hedwig -&gt; ś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.
</content>
</entry>
<entry>
<title>fix(calendar): OF precedence/transfer + readings resolution; EF Pentecost octave</title>
<updated>2026-07-28T12:35:24Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T12:35:24Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=a80e61963756a28a3963a0442a8ccc1572518373'/>
<id>urn:sha1:a80e61963756a28a3963a0442a8ccc1572518373</id>
<content type='text'>
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 &amp; Felicity corrected optional -&gt; obligatory memorial.

OF readings resolution (bible.OFRef + lectionary data):
- Verse-accurate Hebrew-&gt;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.
</content>
</entry>
<entry>
<title>fix(of): partial-proper memorials compose proper part + ferial (match USCCB)</title>
<updated>2026-07-28T08:54:28Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T08:54:28Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=f0bfe1efb93e04e0e3b9a33b8b085fc09e86af36'/>
<id>urn:sha1:f0bfe1efb93e04e0e3b9a33b8b085fc09e86af36</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>feat(of): proper Mass readings for the sanctoral (from catholic-resources.org)</title>
<updated>2026-07-28T07:46:54Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T07:46:54Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=97f704b659ea6c72c4aa354378b347283ecc5cac'/>
<id>urn:sha1:97f704b659ea6c72c4aa354378b347283ecc5cac</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>fix(of): recover season-commemorated saints + correct Irenaeus rank</title>
<updated>2026-07-28T06:32:35Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T06:32:35Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=d3b7f41c7a823bda6b7bafae3a156348c4ce687f'/>
<id>urn:sha1:d3b7f41c7a823bda6b7bafae3a156348c4ce687f</id>
<content type='text'>
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' -&gt; 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 &amp; 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-&gt;212).
- Corrects St Irenaeus (June 28) optional -&gt; 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.
</content>
</entry>
<entry>
<title>fix(of): sanctoral generation — exclude temporal &amp; movable, keep transferred-fixed</title>
<updated>2026-07-27T23:05:56Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T23:05:56Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=b12d59b094246163a75f4a4f5ce7f9fb487614bf'/>
<id>urn:sha1:b12d59b094246163a75f4a4f5ce7f9fb487614bf</id>
<content type='text'>
- 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.
</content>
</entry>
<entry>
<title>fix(of): correct memorial readings (ferial fallback) + Lord-feast class</title>
<updated>2026-07-27T22:57:07Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T22:57:07Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=6b7e8dbd26cc34a19a858794a02f1c0ba577a58b'/>
<id>urn:sha1:6b7e8dbd26cc34a19a858794a02f1c0ba577a58b</id>
<content type='text'>
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 -&gt; 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.
</content>
</entry>
<entry>
<title>feat(of): full sanctoral calendar + weekday/memorial readings</title>
<updated>2026-07-27T22:47:16Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T22:47:16Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=e829b48b08c683d9dcef5e4b9502c1c42bc895f1'/>
<id>urn:sha1:e829b48b08c683d9dcef5e4b9502c1c42bc895f1</id>
<content type='text'>
Populate the OF General Roman Calendar sanctoral and extend the OF readings to
weekdays and sanctoral days.

Sanctoral calendar (roman-calendar.ini: 29 -&gt; 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 -&gt; 1018 entries) via genlect-of.go:
- Weekday (ferial) 2-year cycle I/II, keyed &lt;ferial-slug&gt;-&lt;WeekdayCycle&gt;, 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 -&gt; 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-&gt;1 J, PnP-&gt;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.
</content>
</entry>
<entry>
<title>feat(cli): 'lectio --liturgy/-L' prints the computed liturgical day offline</title>
<updated>2026-07-27T10:58:31Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T10:58:31Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=6d78c65c58820f79ec5a978a9476d29969da218f'/>
<id>urn:sha1:6d78c65c58820f79ec5a978a9476d29969da218f</id>
<content type='text'>
Uses the pure engine + embedded universal calendar; UI-language names, rank,
colour, cycles, and inline proper readings. Added the Assumption's propers.
</content>
</entry>
<entry>
<title>feat(caldata): embed + parse the owned universal Roman calendar (initial coverage)</title>
<updated>2026-07-27T10:25:46Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T10:25:46Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=56f3b8161f73c33fe6e25f6461d3f061af427e9e'/>
<id>urn:sha1:56f3b8161f73c33fe6e25f6461d3f061af427e9e</id>
<content type='text'>
</content>
</entry>
</feed>
