<feed xmlns='http://www.w3.org/2005/Atom'>
<title>colitur.git/test/test_sanctoral_ef.ml, branch v0.1.0</title>
<subtitle>deterministic OCaml engine to compute and validate liturgical calendars for multiple rites, template-driven output to year 9999</subtitle>
<id>https://git.labunix.xyz/colitur.git/atom?h=v0.1.0</id>
<link rel='self' href='https://git.labunix.xyz/colitur.git/atom?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/'/>
<updated>2026-08-14T22:05:35Z</updated>
<entry>
<title>data(ef): carry sanctoral propers on the celebration</title>
<updated>2026-08-14T22:05:35Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-14T22:05:35Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=f1d90a83ece4d8301061e8247e23ec2af8293ab4'/>
<id>urn:sha1:f1d90a83ece4d8301061e8247e23ec2af8293ab4</id>
<content type='text'>
Celebration.citations has existed in the type, the .mli and the sexp schema
since Plan 2 and has been emitted as () for every entry; the bootstrap now
writes the real values for the 208 entries lectio has them for.

On the celebration rather than in the lectionary table deliberately: a
diocesan overlay adding a saint then carries his readings through the
existing overlay algebra, with no second file to edit and no new directive.

Asserted both ways -- the 13 January proper is present, and no
Commemoration_only entry has readings, because in the EF a commemoration
contributes an oration, not a reading.
</content>
</entry>
<entry>
<title>test(sanctoral_ef): fix round 1 (F8) -- guard against wholesale name.pl loss</title>
<updated>2026-08-12T16:26:21Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-12T16:26:21Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=dbde8523f2ec2f0db4d2619afed8575ccf8a3641'/>
<id>urn:sha1:dbde8523f2ec2f0db4d2619afed8575ccf8a3641</id>
<content type='text'>
The previous commit's bootstrap_sanctoral.ml change (name.pl optional) is
correct and verified not to silently drop a present name, but nothing in
the suite would have caught a regeneration that dropped name.pl WHOLESALE
-- the exact defect lectio itself shipped once (a regeneration that lost
all 322 Polish names, only caught because that project's own review ran
cmd/lectio-ef-dump, which happens to include name fields; this project's
own test_load_and_counts checks entry/status/rank counts only, none of
which move if every name.pl vanishes).

Added a 322-of-327 count assertion (5 legitimately lack it, matching
parse_names's own list), independently re-derived: `grep -c '^name.pl'
tridentine-calendar.ini` = 322, cross-checked against `grep -c '(pl'
data/ef/sanctoral.sexp` = 322 exactly.
</content>
</entry>
<entry>
<title>data(ef): re-bootstrap sanctoral.sexp from the corrected lectio source</title>
<updated>2026-08-12T15:49:11Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-12T15:49:11Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=25fedcaf3044828333ba15b232fdc7c7f84970e5'/>
<id>urn:sha1:25fedcaf3044828333ba15b232fdc7c7f84970e5</id>
<content type='text'>
Regenerated via tools/bootstrap_sanctoral.ml against lectio's
tridentine-calendar.ini (SHA-256 6a25e634... -&gt; 1b303ef2...), whose own
generator was independently fixed in a concurrent session. 327 entries (223
feast, 104 commemoration-only), up from 322 (208/114):

- 15 entries wrongly bootstrapped `rank = commemoration` are now
  `class-3` (a real III-class Feast) -- all 6 March-5 April, all
  primary-source-verified against the calendarium (register's own
  "Commemoration-only entries' inferred STATUS" item).
- 5 new entries: agnes-secundo (28 Jan), boniface-martyr (14 May),
  eusebius-confessor (14 Aug), evaristus (26 Oct), theodore (9 Nov) --
  all Commemoration_only, all primary-source-verified (register's "Four
  confirmed sanctoral DATA GAPS" item + expected-divergences-missalemeum
  .sexp's former M4/M6/M7/M9/M14).
- commemoration-of-the-baptism-of-the-lord (13 Jan) is now
  `(subject Lord)` (the source's own `class` field, not a colitur
  overlay); most-holy-name-of-mary (12 Sep) no longer carries `class =
  lord` at all (the source dropped it), so the bootstrap default
  (Subject.Saint) is now correct there without help from
  adjustments.sexp's own Edit.

test_sanctoral_ef.ml's pinned counts (327/104/12 Class1) are re-derived
directly from the source INI (`grep -c '^\['`, `grep '^rank' | sort |
uniq -c`), not transcribed from a bootstrap-tool or `colitur day` run.

data/ef/adjustments.sexp and the differential/oracle allow-lists still
need updating for the consequences of this regeneration -- follow-up
commits.
</content>
</entry>
<entry>
<title>data(ef): bootstrap the 1962 sanctoral from lectio</title>
<updated>2026-08-11T22:05:57Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-11T22:05:57Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=4624441d0bc9c1f28dea54606ab7999041d4b323'/>
<id>urn:sha1:4624441d0bc9c1f28dea54606ab7999041d4b323</id>
<content type='text'>
Convert lectio's tridentine-calendar.ini (322 entries) into
data/ef/sanctoral.sexp via a validating OCaml converter, tools/
bootstrap_sanctoral.ml, rather than a hand-written script: every field is
built through Slug.of_string, Colour.of_string and Vocab_ef.rank_of_string,
so the emitted sexp is valid by construction.

Two conversion decisions, both documented rather than buried:
- subject defaults to Subject.Saint, overriding Celebration.make's kernel
  default of Subject.Temporal, for the 316 entries with no explicit class;
- rank = commemoration maps to status = Commemoration_only with an inferred
  Class3 (not a citation -- it is what the 1960 reform reduced most simple
  feasts from), recorded as an open item in the rules register for the
  oracle to adjudicate.

Every celebration is tagged layer = Precedence_ef.universal_layer, the
provenance id RG 91's band classifier reads to tell the universal calendar
from proper/indult data.

The generated file carries a provenance header: source path, its SHA-256,
and the UTC conversion date, so re-bootstrapping against a newer lectio is
reproducible and diffable. Output is byte-identical across runs.

test/test_sanctoral_ef.ml loads the file through Layer.load and checks the
counts independently derived from the source INI (322 entries, 114
Commemoration_only, 12 Class1, no Subject.Temporal, every date resolves in
a leap year), plus two named spot-checks against the INI's own text -- one
entry with an explicit class field, one commemoration -- so a passing count
cannot hide the wrong 322 entries having been converted.
</content>
</entry>
</feed>
