<feed xmlns='http://www.w3.org/2005/Atom'>
<title>colitur.git, branch v0.4.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.4.0</id>
<link rel='self' href='https://git.labunix.xyz/colitur.git/atom?h=v0.4.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/'/>
<updated>2026-08-18T09:44:57Z</updated>
<entry>
<title>release: v0.4.0</title>
<updated>2026-08-18T09:44:57Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T09:44:57Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=ca4287a6e99e14846f3560106156ef2b1c4b8cf2'/>
<id>urn:sha1:ca4287a6e99e14846f3560106156ef2b1c4b8cf2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: CHANGELOG entry for 0.4.0</title>
<updated>2026-08-18T09:43:34Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T09:43:34Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=590429b68105013e4dc0963d57d0eaca584427cc'/>
<id>urn:sha1:590429b68105013e4dc0963d57d0eaca584427cc</id>
<content type='text'>
</content>
</entry>
<entry>
<title>merge: EF rubrical corrections from O'Connell and a published 1962 Ordo</title>
<updated>2026-08-18T09:43:13Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T09:43:13Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=9a34f7d8a60ef390a98011ad7ee7cbd2ad4a3f4e'/>
<id>urn:sha1:9a34f7d8a60ef390a98011ad7ee7cbd2ad4a3f4e</id>
<content type='text'>
Three colour fixes, each argued from the Missal and each invisible to every
validation layer that shares colitur's own data lineage.
</content>
</entry>
<entry>
<title>fix(ef): the Assumption and St Lawrence vigils are violet (RG 128)</title>
<updated>2026-08-18T09:36:33Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T09:36:33Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=0281a846ac7c22d22990a6664a37205930a94b7d'/>
<id>urn:sha1:0281a846ac7c22d22990a6664a37205930a94b7d</id>
<content type='text'>
RG 128, transcribed in the rules register since 2026-08-11, gives violet to
"vigils of II and III class outside Paschaltide". The Vigil of the Assumption
(14 August, II class) carried White and the Vigil of St Lawrence (9 August,
III class) carried Red. Both are outside Paschaltide, so both are violet. The
Ascension's vigil is untouched: it is the one II-class vigil inside
Paschaltide and was already correctly white.

The rule had been sitting in the register, disagreeing with the shipped data,
since before the data was bootstrapped. It was invisible because colitur,
lectio and missalemeum all carried the same two wrong colours -- colitur was
bootstrapped from lectio, lectio's ini is generated from missalemeum, and
missalemeum uses Divinum Officium's data files. Three sources agreeing is one
source counted three times, and the differential and the oracle both went
green on the shared error. It surfaced only against witnesses outside that
tree: a published 1962 Ordo flagged the Assumption's, and O'Connell, The
Celebration of Mass 4th ed. (1964), section 4(c) and footnote 169, gave the
general rule and with it St Lawrence's, which the Ordo omits entirely.

Two golden pins added, in years where each vigil is actually observed rather
than impeded. The divergence this creates against every DO-lineage source is
cited in both allow-lists: C37 (lectio, 77 rows -- 92 possible minus 15 where
the vigil falls on a Sunday) and M29 (missalemeum, 3 rows in 2026-2027 and 2
in each of 2035 and 2038). Both gated on the exact slugs or dates and on
colour alone, so any other divergence on those days would still surface.

Also recorded, no code change: rose on Gaudete and Laetare stays. RG 131 is
permissive ("adhiberi possunt") and the Ordo prints violet, so the colour
field carries a permission rather than a requirement on those two Sundays a
year -- a decided position now, not an unexamined one.
</content>
</entry>
<entry>
<title>fix(ef): Good Friday is black, not violet (RG 128(b), RG 132)</title>
<updated>2026-08-18T09:26:04Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T09:26:04Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=01219763c87c84175fcfa469882c6f30a56720d5'/>
<id>urn:sha1:01219763c87c84175fcfa469882c6f30a56720d5</id>
<content type='text'>
RG 128(b)'s own exception list, transcribed in the rules register and
primary-source-verified since Task 16, excepts "Actione liturgica feria VI
in Passione et Morte Domini usque ad Communionem exclusive" from the violet
that otherwise runs from Septuagesima to the Easter Vigil. RG 132 assigns
black there. The register recorded this as an acknowledged gap rather than a
disputed reading -- the code comment beside the Holy Thursday exception says
so in as many words -- and it is closed here.

Found by two witnesses outside the Divinum Officium lineage that colitur,
lectio and missalemeum all share: O'Connell, The Celebration of Mass, 4th ed.
(1964), revised throughout to the Codex Rubricarum (1960) and the 1962
Missal, and a published 1962 Ordo. Both say black. So does missalemeum's own
colour set, which orders the day "bv".

The rubric is per-action ("usque ad Communionem exclusive") and the model
emits one colour per day; black is the day's principal one, the same
acknowledged limit RG 126's Palm Sunday blessing already carries.

Blast radius: one day per year, colour only, across the whole 1583-9999
domain. Two golden pins re-pinned. Good Friday's 46 differential rows leave
C23 for a new C36 gated on the exact triple [First_f; Gospel_f; Colour_f],
so C23's own exact-pair gate still means what its note says for its
remaining four days: 184 + 46 = 230, no residue, both counts from the
comparator rather than hand-counted.
</content>
</entry>
<entry>
<title>docs: name the lineage problem, and record an independent Ordo witness</title>
<updated>2026-08-18T08:54:01Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T08:54:01Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=cb07b035170eb22e0cff30be6449c74af897cda1'/>
<id>urn:sha1:cb07b035170eb22e0cff30be6449c74af897cda1</id>
<content type='text'>
Two research findings, and the first changes how every earlier
adjudication should be read.

missalemeum's own repository states it uses Divinum Officium's data files
via a git submodule. lectio's ini is generated from missalemeum. colitur
was bootstrapped from lectio. So the chain is Divinum Officium -&gt;
missalemeum -&gt; lectio -&gt; colitur, and the other projects in this space
are the same tree: OfficiumDivinum is an object-oriented rewrite of
Divinum Officium, Breviarium Meum is based on its texts.

That is worse than the caveat already recorded. CLAUDE.md described layer
3 as sharing colitur's lineage and layer 4 as a separate oracle. It is
not separate: layer 4 is layer 3's own upstream. The two oracles are one
source seen at two removes, so every colitur-versus-missalemeum
adjudication is in substance colitur versus Divinum Officium -- the de
facto standard for this whole software space. That makes the six prior
adjudications more consequential, and it means the project has one
external software witness plus the scans, not two.

The second finding is a witness outside that tree entirely: the published
Ordo, compiled by clergy applying the rubrics. The 2025-26 Ordo for the
Traditional Latin Mass shows commemorations AND distinguishes privileged
from ordinary, which is precisely colitur's thinnest axis. Its liturgical
timeline matches colitur exactly, and it confirms seven colitur positions
-- including M16, reversed against Divinum Officium two days ago on RG
111(d), and the Nativity Octave work from this morning, both halves,
including the RG 69 Sunday guard.

Three of the confirmations matter most: the Major Litanies, the RG 110
30-June Peter companion, and St Barbara are entries colitur hand-authored
because they are missing from lectio AND missalemeum, that is from
Divinum Officium. The Ordo carries all three, and even notes the Peter
commemoration is said "w/ 1 conclusion" -- RG 110's own pro unica
habeantur. Those were the least-supported entries in the dataset and are
now the best-corroborated.

The one apparent disagreement resolves in colitur's favour: the Ordo
lists St Evaristus as 26 October's Mass where colitur observes the feria
and commemorates him, but the calendarium reads "Commemoratio S.
Evaristi... Comm." in both sources, and the Ordo's own preamble explains
it lists Masses that may be said on a class 4 feria. An Ordo is a
practical document, not a rank authority.

Not wired in as a layer: the PDF's columns shift between pages, automated
extraction recovered 271 of 364 rows and truncated text mid-word, and a
fragile layer that silently mis-parses is worse than none. A structured
Ordo would be the only way to add a genuinely independent fourth lineage.

Register: section 6.20.
</content>
</entry>
<entry>
<title>docs(ef): close C6 and M26; nothing is left adjudicated against colitur</title>
<updated>2026-08-18T08:31:22Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T08:31:22Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=66162b52b1e7c50fa945cab34e0a184b2623967b'/>
<id>urn:sha1:66162b52b1e7c50fa945cab34e0a184b2623967b</id>
<content type='text'>
C6 was closed by the Nativity-Octave fix rather than by argument. Its own
note had already split the 138 rows into 119 weekday rows, where it
recorded colitur's citation as confirmed correct and said verdict colitur
would be accurate for that subset alone, and 19 Sunday rows where colitur
emitted the weekday formulary against RG 69 and was plainly wrong -- a
Temporal_ef defect the entry deliberately left out of its own scope. That
defect is fixed, and the count fell 138 to 119: exactly the population
the note had enumerated by date. Verdict open becomes colitur on
reasoning already written there.

M26 closed on a positive argument, not an absence. Both its other shapes
are now built -- the BVM Saturday Mass selection and Trinity's week --
leaving Christ the King's week. RG 299's rule has an escape clause and
the escape requires an assigned proper Mass; none is assigned for that
week, checked at the source, unlike Trinity's week which prints one and
unlike Holy Name and Holy Family which each carry a ferial rubric. That
absence is not a research gap, it is the condition that triggers RG 299's
default -- and by the default the ferias say the preceding Sunday's Mass,
which on this week is Christ the King's own.

The limit is stated in the entry rather than glossed: this reads a
printed silence as the default rather than as an oversight, which the
text cannot distinguish. It is the same reading applied everywhere else
RG 299 governs, and applying it inconsistently here to match an oracle
already adjudicated wrong six times would be the worse error.

No entry in either allow-list is now verdict open or verdict missalemeum.
The only non-colitur entries are M15 and M18, both unresolvable, and both
are comparator limits rather than calendar disagreements: a
temporal-origin celebration carries no English name, so its identity
cannot be matched even where both streams plainly mean the same thing.

Register: section 6.18.
</content>
</entry>
<entry>
<title>fix(ef): days within the Octave of the Nativity, and RG 69 for 29-31 Dec</title>
<updated>2026-08-18T08:21:39Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T08:21:39Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=e25558fee984837389d0e53cd6e17a3820f8e5ea'/>
<id>urn:sha1:e25558fee984837389d0e53cd6e17a3820f8e5ea</id>
<content type='text'>
M11 was the one entry in the missalemeum allow-list adjudicated against
colitur, and it was right to be. The calendarium directs "Com. octavae
Nativitatis" under each of 26, 27 and 28 December (LT.txt:5454-5459) and
RG 109(c) makes a commemoration of the days within the Octave privileged.
colitur emitted none.

The cause was a reasoning error stated in Temporal_ef's own comment:
"26-28 Dec are Stephen, John and the Innocents, hence sanctoral". Their
office is sanctoral -- those II-class feasts win the day -- but they
remain days WITHIN the Octave (RG 67, "Dies infra octavam sunt II
classis"), and colitur built them as generic Class4 ferias. With no
octave-day candidate there was nothing for the feast to be commemorated
over. Building days 2-4 exactly as days 5-7 always were makes the
commemoration fall out of the existing machinery rather than needing a
special case: the feast wins on rank, the octave day loses, RG 109(c)
privileges it, RG 111(c)'s single slot goes to it.

A second, independent defect surfaced while fixing it. The octave-day
branch covered 29-31 December unconditionally, so a Sunday falling there
got a feria identity -- where RG 69 says a Sunday occurring 26-31
December SEMPER keeps its own office and commemorates the feast.
Confirmed against the oracle rather than argued: missalemeum shows
"Sunday in the Octave of Christmas" on 2035-12-30, a Sunday, where
colitur showed a feria. Both named and anchors now exclude Sundays;
anchors had asserted the octave slugs unconditionally and was wrong the
same way.

Blast radius, full sweep against the pre-change binary: 25251 days, every
one 26-31 December, exactly two shapes, zero unclassified -- 21653
carrying an octave-day slug and 3598 that are all Sundays, the RG 69
correction.

Allow-lists: M11 closed and removed. C6 narrowed 138 to 119, nineteen of
its days having changed temporal identity rather than verdict. M15
widened 18 to 22 -- both streams now commemorate the octave, but the
candidate is temporal-origin and carries no English name to match against
missalemeum's own, this entry's documented limit on four more dates.

Stated rather than glossed: this trades a substantive divergence, colitur
omitting a commemoration the Missal directs, for a comparator limit, the
commemoration existing but not being name-matchable. That is a real
improvement, but what the oracle now proves is that both streams
commemorate something on those days; the identity rests on the rubric and
the calendarium.

Register: section 6.17.
</content>
</entry>
<entry>
<title>test(oracle): compare commemorations in the live windows</title>
<updated>2026-08-18T07:59:48Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T07:59:48Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=d8f4bece5480cfb94088fae62fa875a66b5b4e7e'/>
<id>urn:sha1:d8f4bece5480cfb94088fae62fa875a66b5b4e7e</id>
<content type='text'>
Commemorations were checked against an oracle in the 2026-2027 fixture
alone -- 227 days out of roughly 968 000 commemoration-bearing days in the
domain, about 0.02%, and by some distance the thinnest axis in the
project. Layer 3's 16 801 days compare none of them and never can:
lectio's trailing "+slug" tokens are its losing candidates, not an RG 111
admitted set. About a third of all days carry a commemoration and admit is
the most intricate code in the engine, so the gap was worth closing.

2035 and 2038 now compare presence, count and identity, reusing the
2026-2027 comparator's own identity_diff with the same limits: a
sanctoral-origin commemoration resolves by colitur's English name, a
temporal-origin one cannot and is reported as a counted, classified
outcome rather than a silent pass. Observed-identity stays out
deliberately -- that is M18's separate limit and folding it in would
flood these windows with a class that says nothing about commemorations.

36 differing rows across 730 days, every one classified. The great
majority of commemoration days agree, which is the headline. Four rows
are not calendar differences at all but name forms -- colitur's "The
Seven Sorrows of the Blessed Virgin Mary" against the oracle's "For Our
Lady of the Seven Sorrows", "The Major Litanies" against "Pro
rogationibus" -- which is this month's new entities appearing correctly
in windows that had never seen them.

One finding is genuinely new. On 2038-06-02 the Ascension Vigil admits
one commemoration under RG 111(c) and two candidates compete:
rogation-wednesday and sts-marcellinus-peter-erasmus. Both are
Commemoration_only, so neither has a row in RG 91's table, band returns
unclassified for both, RG 113 has nothing to order by, and admit falls
through to its alphabetical slug tie-break -- which decides the day.
missalemeum keeps the saints.

That tie-break was already documented as existing only between two
Commemoration_only candidates; this is its first live,
externally-witnessed instance, and the decision is made by slug alphabet,
which is arbitrary and not rubrical. There may be a real rule going
unused: RG 113's first sentence is "Commemoratio de Tempore fit primo
loco", and a Rogation is arguably de Tempore -- which turns on whether
the entry should carry subject Temporal rather than the Saint it
inherited from the Major Litanies precedent, a question the
movable-date-specs spec deferred as behaviourally inert and which
demonstrably is not.

Not decided here. Adopting whichever answer matches the oracle is exactly
the reasoning this project refuses, so it is recorded and cited for a
task that can weigh it on its own terms.

Register: section 6.16.
</content>
</entry>
<entry>
<title>feat(data): ship a worked example overlay calendar</title>
<updated>2026-08-18T07:26:26Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T07:26:26Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=051716cdee0197351fa966af1e13738c443045c4'/>
<id>urn:sha1:051716cdee0197351fa966af1e13738c443045c4</id>
<content type='text'>
`--overlay` shipped last week with nothing to point at. The only example
was a test fixture, explicitly labelled invented and living where no user
would find it, so "colitur supports local calendars" was true but
undemonstrated.

data/ef/examples/diocesan-example.sexp is installed to
&lt;prefix&gt;/share/colitur/examples/ and is runnable documentation: every
celebration in it is invented, with example- slugs that cannot collide,
and its header explains the four directives, the three date shapes, and
the field vocabularies before showing any of them.

It demonstrates the range deliberately rather than the minimum: a
fixed-date local patron with its own propers; a movable dedication on the
first Sunday of October, I class because a church's own dedication
anniversary is I class in that church and at III it would lose to the
Sunday every year; an Easter-relative commemoration; an Edit raising a
universal feast for local use; and a Suppress shown commented out,
because suppressing a universal feast is a real liturgical act and an
example should not invite it casually.

Two things the header says plainly, since this is the one file that lets
someone change what colitur computes: an overlay is applied ON TOP of the
shipped calendar and never instead of it, and an overlay is applied, NOT
validated -- the five test layers assert things about the shipped data
and cannot vouch for a user's file.

A test asserts it loads against the real EF rank vocabulary, still
demonstrates at least four directives, and applies with NO diagnostics.
The last matters most: a directive naming a slug the universal calendar
lacks would warn, and an example that warns teaches the wrong lesson. It
deliberately does not pin which days it produces -- those celebrations
are invented, and pinning their dates would make an illustrative file
behave like calendar data.
</content>
</entry>
</feed>
