<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lectio.git/internal/cli/liturgy.go, branch perf/hoist-date-independent-work</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=perf%2Fhoist-date-independent-work</id>
<link rel='self' href='https://git.labunix.xyz/lectio.git/atom?h=perf%2Fhoist-date-independent-work'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/'/>
<updated>2026-07-28T16:15:29Z</updated>
<entry>
<title>naming: localise liturgical day names in any language</title>
<updated>2026-07-28T16:15:29Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T16:15:29Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=539a7c71b60115144959f712ef5966f48c63f9f0'/>
<id>urn:sha1:539a7c71b60115144959f712ef5966f48c63f9f0</id>
<content type='text'>
Add internal/naming, which renders temporal day names and celebration
display names from the calendar engine's slugs in any language. English is
the built-in baseline; a language is data -- an embedded lang/&lt;code&gt;.ini
(pl shipped) and/or a user file at &lt;config dir&gt;/names/&lt;code&gt;.ini that
overrides it key by key. Names compose from a small vocabulary plus
per-language format templates, so word order and grammatical case can
differ (e.g. Polish genitive "3. Niedziela Okresu Zwykłego"); any string a
language omits falls back to English.

- Move day-name generation out of calendar (calendar.HumanizeSlug removed,
  calendar stays a pure engine) into naming.DayName; the English golden
  cases carry over verbatim.
- naming.CelebrationName unifies the three duplicated resolvers
  (cli/readings/calfeed): name.&lt;lang&gt; -&gt; English -&gt; Latin -&gt; humanized slug.
  Saint names stay in the calendar data (name.&lt;lang&gt;), overridable via
  calendar layers.
- config: ui_language now accepts any code (lower-cased, not clamped to
  en/pl) so names/&lt;code&gt;.ini applies; UI chrome still resolves en/pl and
  falls back to English. Add NamesDir(); wire naming.SetUserDir (and the
  previously unwired bible.SetUserCorporaDir) in the TUI and web mains too,
  so external corpora and name files work across all three binaries.
</content>
</entry>
<entry>
<title>refactor: remove the niedziela/missalemeum scrapers, bt, traditional_lang</title>
<updated>2026-07-28T10:50:31Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T10:50:31Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=7b220084cf3951c8cde0582efdfcf628afc64336'/>
<id>urn:sha1:7b220084cf3951c8cde0582efdfcf628afc64336</id>
<content type='text'>
The daily view now computes entirely offline (previous commit), so retire the
network path and everything that served it:

- Delete internal/tradlit (missalemeum) and the niedziela scraper from
  internal/liturgy (fetch/store/parse + fixtures); keep Section, DayInfo and
  ExtractCitation.
- Remove the "bt" version everywhere (render gatherBT + branches, config,
  i18n, web form, TUI) and bible.ToEnglishRef (Polish citation converter).
  A legacy config carrying "bt" migrates to "wuj" on load (config.migrateBT).
- Remove the traditional_lang config field and the -g/--lang flag from all
  three binaries.
- Drop the now-dead flags -R/--refresh, -o/--offline, -u/--update,
  -C/--clean and the harvest/clean commands.
- New defaults: versions = wuj,vul,grb,drb; default_version = vul.

Update the README (offline-by-design, no harvest/update), help text, and
stale niedziela/bt doc comments. Tests updated for the offline reality;
go test ./... and go vet ./... are clean, all three binaries build and run
offline (OF + EF, compare, web).
</content>
</entry>
<entry>
<title>feat: humanize temporal-day display names (OF + EF)</title>
<updated>2026-07-28T09:00:19Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-28T09:00:19Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=efeadd49b9d78e29778647835bd2a454ddce73a5'/>
<id>urn:sha1:efeadd49b9d78e29778647835bd2a454ddce73a5</id>
<content type='text'>
Temporal days with no proper name showed a slug-derived string ('triduum fri',
'ordinary 11 tue', 'advent-dec-17'). Add calendar.HumanizeSlug, used by both
celebrationName fallbacks (cli + calfeed), turning slugs into proper liturgical
names: Good Friday, Ash Wednesday, 'Tuesday of the 11th Week in Ordinary Time',
'11th Sunday in Ordinary Time', 'December 17', 'The Most Holy Trinity', and the
EF forms ('4th Week after Pentecost', 'Passion Week', 'Ember Wednesday of
September'). Adds TestHumanizeSlug.
</content>
</entry>
<entry>
<title>feat(calfeed): shared day builder + reusable reading resolver</title>
<updated>2026-07-27T19:30:56Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T19:30:56Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=bec7c034aca15537900d74a7063d85c0f4deacae'/>
<id>urn:sha1:bec7c034aca15537900d74a7063d85c0f4deacae</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(cli): config-driven reading corpus + surface user corpora</title>
<updated>2026-07-27T18:40:12Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T18:40:12Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=588d9fb64e023d08b3e6105b69c08d3f9ddf6083'/>
<id>urn:sha1:588d9fb64e023d08b3e6105b69c08d3f9ddf6083</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(readings): stop auto-rendering from the defective wuj corpus</title>
<updated>2026-07-27T17:16:32Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T17:16:32Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=14d5ae922ad6e32dcb04997244712a20974e8391'/>
<id>urn:sha1:14d5ae922ad6e32dcb04997244712a20974e8391</id>
<content type='text'>
The Wujek (wuj) corpus is missing the deuterocanonical Daniel 3:24-90 (Song
of the Three), Daniel 13-14, and Esther 10:4-16:24, plus ~400 verses its
builder (parse_bwujek.py) dropped or mis-numbered (e.g. Matthew 5:13/39 are
in the source HTML but absent from wuj.tsv). Rendering computed readings from
it silently produced gaps.

vernacularVersion() now renders Polish from the complete Latin Vulgate (vul)
instead of wuj; English stays on Douay-Rheims (complete after the deuterocanon
backfill). wuj remains embedded for explicit `--ref -b wuj` and version
comparison -- it just isn't auto-selected for computed reading text. A properly
formatted Polish Bible can later be dropped in as a user corpus (the
national-bibles feature) to restore native Polish rendering.
</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(cli): EF ferial readings — weekdays repeat the preceding Sunday's Mass</title>
<updated>2026-07-27T13:30:14Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T13:30:14Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=bde4553d2ffba578bb9c7b46b6f66e5adcc8a4d9'/>
<id>urn:sha1:bde4553d2ffba578bb9c7b46b6f66e5adcc8a4d9</id>
<content type='text'>
dayReadings() falls back, for an EF weekday with no proper Mass, to the
preceding Sunday's temporal lectionary (the 1962 green-season rule). Lenten/
Advent proper ferias show the Sunday's readings pending their own data.
</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>
<entry>
<title>feat: books.toml -&gt; books.ini, multi-language (add Latin dialect), config-scoped citation display</title>
<updated>2026-07-27T12:59:14Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T12:59:14Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=cb3379f41c06a94085c77fe359709b46712850dc'/>
<id>urn:sha1:cb3379f41c06a94085c77fe359709b46712850dc</id>
<content type='text'>
books.ini with [en]/[pl]/[la]; parseBooks reads INI (bible drops go-toml).
Latin dialect resolves EF citations (Eccli-&gt;Sirach, Apoc-&gt;Revelation, Luc...);
sigla_style gains 'latin'. Reading citations now DISPLAY in the configured
sigla (FormatRef(SiglaLang)), not raw English. One-shot books.toml-&gt;books.ini
user migration (go-toml now config-only). Web settings editor -&gt; books.ini.
</content>
</entry>
</feed>
