<feed xmlns='http://www.w3.org/2005/Atom'>
<title>colitur.git/lib/kernel/celebration.mli, branch v0.9.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.9.0</id>
<link rel='self' href='https://git.labunix.xyz/colitur.git/atom?h=v0.9.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/'/>
<updated>2026-08-12T15:02:48Z</updated>
<entry>
<title>docs: three comments that outlived the rules they described</title>
<updated>2026-08-12T15:02:48Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-12T15:02:48Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=e5b368dec8fdc9ab983ee0f1dee69c37883cbe12'/>
<id>urn:sha1:e5b368dec8fdc9ab983ee0f1dee69c37883cbe12</id>
<content type='text'>
All three are the project's own "correct code, wrong explanation" shape,
found by the final review of the RG 113 work. No behaviour change.

test_rite_ef.ml's registered Alcotest label said "Thomas of Villanova
observed, Maurice commemorated" while the test asserts the Ember
Wednesday is observed, Thomas is the sole commemoration and Maurice is
omitted -- the opposite of two of its three assertions. The body's own
doc comment was right; only the name a test run prints was wrong.

validate.ml's lead-in still said origin is reconstructed as Sanctoral
uniformly because the EF admit "reads only rank and slug, never origin".
That stopped being true in ea22ad2: admit now orders by band, and band
reads origin via is_temporal, so a temporal-origin commemoration
relabelled Sanctoral would be scored on the wrong table entry. The code
below already recovers the origin exactly; only this comment lagged.

precedence_ef.ml's band guard justified itself by citing
celebration.mli as saying a demoted feast retains its rank for RG 111's
admission-COUNT purposes. celebration.mli says the opposite -- it names
the ORDERING use the guard removes. The guard is right for a reason it
did not give: rank stays load-bearing through RG 111(b)'s "de festo II
classis" floor, which is what excludes these entries from a II-class
Sunday's slot. Both the citation and celebration.mli's own now-stale
line are corrected, each recording what it previously claimed.
</content>
</entry>
<entry>
<title>kernel(celebration): distinguish a feast from a commemoration-only entry</title>
<updated>2026-08-11T17:02:08Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-11T17:02:08Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=8ab24da337a10993b98696df5d499706318beb8e'/>
<id>urn:sha1:8ab24da337a10993b98696df5d499706318beb8e</id>
<content type='text'>
The 1960 reform reduced many feasts to a bare commemoration. They keep a rank,
because RG 111 orders admitted commemorations by dignity, but they can never be
the observed day. Modelled as a separate status rather than a fifth rank: RG 8
fixes the classes at four.
</content>
</entry>
<entry>
<title>kernel: Vocab, Celebration and Temporal parametric types</title>
<updated>2026-08-11T09:59:43Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-11T09:59:43Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=abade24943f2f77c058b5ff768093b8babc9a8c3'/>
<id>urn:sha1:abade24943f2f77c058b5ff768093b8babc9a8c3</id>
<content type='text'>
Rite specificity is carried by type parameters plus a vocab record of
operations rather than by functors: the same guarantee that a rite cannot name
another rite's season, without threading module plumbing through every kernel
module. Celebration takes only the rank parameter, since it has no season
field and OCaml rejects a type variable that appears in no field.
</content>
</entry>
</feed>
