<feed xmlns='http://www.w3.org/2005/Atom'>
<title>colitur.git/test/fixtures, branch v1.2.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=v1.2.0</id>
<link rel='self' href='https://git.labunix.xyz/colitur.git/atom?h=v1.2.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/'/>
<updated>2026-08-25T14:31:15Z</updated>
<entry>
<title>test(of): validate Phase 1's Ordinary Time resumption against litcal</title>
<updated>2026-08-25T14:31:15Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-25T14:31:15Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=b9cb5060d2ba5aa7f7a9d6d97e3bced112e30fed'/>
<id>urn:sha1:b9cb5060d2ba5aa7f7a9d6d97e3bced112e30fed</id>
<content type='text'>
Adds a sixth-lineage external validation layer for the OF rite module's
Phase 1 temporal cycle, targeting the single highest-risk function that
report named: the two-block Ordinary Time week arithmetic (Normae n. 44),
which has no external witness anywhere in Phase 1's own suite and whose
output selects the Mass formulary, not merely a label.

Witness: litcal (Liturgical Calendar API), Apache-2.0, already archived
and SHA-256-pinned by the sibling lectio project. AELF was considered and
correctly excluded earlier (its CGU forbids redistribution) -- litcal is
what it was replaced with.

- tools/extract_litcal_ordo.py verifies all twelve archived
  calendar-YYYY-en.json files (2024-2035; the task brief said eleven,
  but twelve are actually pinned in lectio's manifest -- all twelve are
  used) against lectio's own manifest.tsv, then builds one fixture
  spanning the contiguous 4382-day range those twelve liturgical-year
  files cover.
- test/fixtures/litcal-temporal-2024-2035.sexp: one row per day, season
  and (where witnessed) Ordinary Time week, with full provenance,
  licence, per-year Easter dates and the row-selection rules in its own
  header.
- test/test_litcal_of.ml calls Temporal_of.temporal directly (no Rite.t)
  and compares 1:1 against the fixture: zero Ordinary Time week
  mismatches on all 1876 witnessed days (zero tolerance, no allow-list);
  the only season divergence class is the Sacred Triduum, which litcal
  tags with a season value colitur's vocabulary deliberately has none of
  -- one cited allow-list entry, data/of/expected-divergences-litcal.sexp,
  36 rows, exact.
- Mutation-tested: dropping the backward-from-34 adjustment reddens this
  layer (1511 of 1876 days) plus three pre-existing Phase 1 tests; the
  mutation was not committed.

Does not touch lib/rites/rite_ef/, data/ef/, or lib/rites/rite_of/ --
this validates Phase 1, it does not change it. Full suite: 786 tests via
dune test, 791 via make check, exit 0 both; lib/bin diff empty throughout.
</content>
</entry>
<entry>
<title>feat(ordo): wire the extraordinaryform.org preface column in as a third witness</title>
<updated>2026-08-24T14:16:59Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-24T14:16:59Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=0d061abc7cc5cdc51ded6ee69e00e187813f5e1b'/>
<id>urn:sha1:0d061abc7cc5cdc51ded6ee69e00e187813f5e1b</id>
<content type='text'>
Extends the preface comparison (RG 482-499) with a third, independent
publisher, extraordinaryform.org's three annual Ordo editions
(2024-2025, 2025-2026, 2026-2027), previously declined for two reasons
that are now resolved:

- "Advent" is not a preface: RG 494(b) grants the Trinity preface on
  every Advent SUNDAY, RG 498 the residual Common on every Advent
  FERIA; this source's own "Advent" label covers both indiscriminately
  (confirmed live on all 11 non-impeded Advent Sundays in the corpus).
  Classified by the day's own civil weekday, not a static table.
- The known Vigil-of-St-Lawrence gap is reconfirmed, with a nuance not
  present in the earlier audits: colitur's own RG33-third-trigger now
  omits the vigil in some years too, so the corpus's gap and colitur's
  answer coincide in 2025 (a full match, not a coincidence) while 2027
  still shows the classic identity-wrong-but-preface-invisible shape.

Re-derives the known menu-trap office filter (Requiem-skip, "and "-chain)
against the live JSON and finds a second, general pattern: "Saturday of
Our Lady" (RG78's BVM Saturday Office), whenever listed, is
unconditionally the office -- checked exhaustively across all 38
instances in the corpus, zero counter-examples. A third, generic
"absorption" rule was deliberately not built: it would resolve 2 of the
11 residual divergences but wrongly misfires on a structurally identical
but semantically different shape (an optional Rogation-day Mass option).

The JSON's own extraction carries a genuine classifier gap: parse_ordo.py's
hardcoded PREFACES set omits "Christ the King", misfiling it into comms;
recovered in the generator, not left blank.

11 of 1088 comparable rows diverge, resolving to 7 adjudicated root
causes (E1-E7): two Commemoration_only Marian titles reduced to
commemorations (Mt Carmel, Ransom), two genuine sanctoral data gaps
cross-confirmed absent by the FIUV/LMS witnesses (Miraculous Medal,
St John before the Latin Gate), two single-witnessed efdotorg outliers
against FIUV/LMS agreement (St Michael's Dedication, All Saints on a
Sunday), and one isolated source labelling slip.

Mutation-tested: corrupting the RG495 BVM-Saturday clause reddens 9
tests across this new layer and both existing Ordo witnesses.

Per-edition agreement: 358/363 (2024-2025), 358/363 (2025-2026),
361/362 (2026-2027).
</content>
</entry>
<entry>
<title>feat(ordo): wire the LMS preface column into the witness suite</title>
<updated>2026-08-23T21:01:42Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-23T21:01:42Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=8faf89f89bd6783a518b6fc0b48c6ee452ba2e94'/>
<id>urn:sha1:8faf89f89bd6783a518b6fc0b48c6ee452ba2e94</id>
<content type='text'>
Extends tools/extract_lms_ordo.ml's row type with a praef field (the
first "Pr of ..." / "Common Pr" match in each day's universal block,
same first-in-reading-order discipline already used for Gl/Cr) and
regenerates all three LMS fixtures. Also brings lms-ordo-2024-2025.sexp
under the generalised, probe-verified provenance template the Witnesses
task previously added only for the two newer editions -- it had kept
Task 6's original hand-written header.

Characterisation finding: this Ordo prints OPTION LISTS ("Pr of X or Pr
of Y or Common Pr"), not a single value per day, and several named
options (Martyrs, All Saints and Patron Saints, the Dedication of a
Church, the Most Holy Sacrament, St John the Baptist, the Angels) are
genuinely absent from RG 484-497's own fourteen named prefaces. Every
instance found in the universal block pairs such an extra with a
genuine RG-482 answer, so test/test_lms_ordo.ml compares by membership
(classify_praef_options, a 15-entry prefix table split on the
standalone token "or"), not string equality.

Opposite-prediction probes (Nativity/Apostles/Requiem) are hard-
verified inside the extractor itself before any fixture is trusted, the
same discipline already used for the Creed column.

Result: 396/396, 399/399, 398/398 comparable rows agree across the
three editions (Good Friday excluded per edition, no Mass that day),
zero allow-list entries needed.

extraordinaryform.org's own three editions were characterised but
deliberately not wired in this pass -- see
.superpowers/sdd/2026-08-21-colitur-celebrant-rubrics-phase1/preface-witnesses-report.md
for the full account (the field is genuinely per-day, contrary to a
naive header-count read, but carries its own classification anomaly
during Advent and reconfirms the corpus's known St Lawrence vigil
defect, and building a full extractor for it is a separate, comparably
large task not needed to decide the RG 497 question this same report
settles).

Claude-Session: https://claude.ai/code/session_017ZBxCCRM2ojnBupp3SBxV9
</content>
</entry>
<entry>
<title>fix(ordo): correct L5/F3 misadjudication -- Cum Sanctissima, not a gap</title>
<updated>2026-08-22T16:46:27Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-22T16:46:27Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=e5e304c4004089ea75ea472ebd56414197a4190f'/>
<id>urn:sha1:e5e304c4004089ea75ea472ebd56414197a4190f</id>
<content type='text'>
data/ef/expected-divergences-lms.sexp's L5 (16 dates, LMS Ordo Gloria=true
vs colitur's false) and data/ef/expected-divergences-fiuv.sexp's F3 (6
dates, FIUV Te Deum=true vs colitur's false) were both misadjudicated as
colitur's own gap under an RG 302(b)/431(b) hypothesis. Both are wrong.

These are occurrence differences from the 2020 decree Cum Sanctissima,
which colitur excludes from its 1962 core by binding design (CLAUDE.md
decision 2). RG 303(b) ("dici potest tantum si occurrit dies liturgicus IV
classis") already prohibits 302(b) on the Class3 privileged ferias both
entries cover -- the original text quoted 303(b) but never followed it to
its conclusion. Decisively, the FIUV Ordo prints BOTH readings on the six
shared dates, separated by a literal "-VEL-" token: the primary, strict-
1962 reading (feria wins, sine Gloria, no Te Deum) matches colitur exactly;
the second, Cum-Sanctissima reading (saint kept, Gloria, Te Deum) matches
the LMS Ordo exactly.

F3 itself was never a real Te Deum finding: tools/extract_fiuv_ordo.ml's
extract_te_deum scanned each block unbounded for "Ad Mat.", so on these six
days -- whose primary office states no "Ad Mat." of its own -- it silently
read the second office's own Te Deum instead. Fixed with a new
split_at_alt_office, cutting every block at "-VEL-" before any field
extraction runs; the alternative is captured, not discarded, in a new
alt_te_deum field. A hard characterisation probe asserts the split fires on
exactly the six known dates.

Auditing for the same trap elsewhere (this is the third such manufactured
divergence in this project) found a related but narrower marker, "Vel (sec.
decretum &lt;&lt;Cum sanct.&gt;&gt;) Missa ...", offering an alternate Mass formulary
within a single office. It never corrupted Gloria/Credo (always stated
before the marker on all 20 real instances, confirmed by diff), only the
uncompared praef field; hardened defensively anyway, before it could ever
fire live. The LMS Ordo (all three editions) carries no equivalent
dual-print mechanism at all. expected-divergences-missalemeum.sexp's M27
is the same genus but was already correctly adjudicated, not touched.

Both allow-list entries are rewritten, not deleted: the original SHAPE/
CITATION/WHY-NOT-FIXED-HERE reasoning is preserved verbatim as a recorded,
superseded hypothesis, matching this project's own correction convention.
test_lms_ordo.ml's matching predicate is unchanged (the 16-date population
still fires, and always will, because it reflects a standing exclusion,
not a bug); only its citation comment is corrected. test_fiuv_ordo.ml's
F3-specific predicate/count assertion is removed, matching this file's own
prior F2/F4 closure discipline.

lib/ is untouched. dune test: 676/676. make check
(COLITUR_EXHAUSTIVE_SWEEP=1, full 1583-9999 domain): 678/678.
</content>
</entry>
<entry>
<title>feat(ef): the Gloria in excelsis, RG 431-432, deferring to Breviary 237-238</title>
<updated>2026-08-22T15:56:42Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-22T15:56:42Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=f4cc032d7e812d716ff6b5df8192f79a2560e8f0'/>
<id>urn:sha1:f4cc032d7e812d716ff6b5df8192f79a2560e8f0</id>
<content type='text'>
Phase 2 of celebrant-rubrics-phase1: colitur rubrics gains a fifth
column, whether the Gloria is said. Follows the Creed's own seam
exactly -- Rite.t.gloria, Liturgical_day.t.gloria, wired through
calendar.ml the same way.

RG 431(a)/432(a) defer the Gloria to the Breviary's own Te Deum rule
(nn. 237-238), so te_deum is implemented as its own named predicate,
cited clause by clause, not collapsed into a colour heuristic. 431(c)
(Holy Thursday, the Easter Vigil Mass) and 432(b)/(d) (violet; a
Requiem) are independent overrides checked ahead of the Te Deum-derived
answer. Every clause this engine has no dimension to model
(votive Mass classes, the wider n.302 "Missa festiva" categories) is
stated as N/A with its own reasoning, not silently dropped.

Validated against the FIUV universal Ordo (Gloria and Te Deum) and all
three LMS editions (Gloria). A first pass over-trusted a clean-looking
15-for-15 FIUV contradiction of 237(b)'s own Septuagesima exception and
replaced it with a blanket "every Sunday" rule; the evidence was itself
corrupted -- the FIUV extractor recognised only one of the source's two
Te Deum negations ("non dicitur", not "sine"), so every "sine Te Deum"
Sunday read wrongly true. Fixed in tools/extract_fiuv_ordo.ml, fixture
re-extracted, and the literal 237(b) reading restored once the
corrected data confirmed it. A second bug surfaced alongside it (Palm/
Passion Sunday wrongly reading true via Temporal_ef.named's own table
membership, then Christ the King wrongly reading false from an
over-broad fix) is closed with an explicit two-slug exclusion.

Domain-wide 1583-9999: every violet or Rose day is gloria=false except
the Easter Vigil (RG 431(c) lex specialis), every Requiem is
gloria=false, both measured exhaustively, zero exceptions. Mutation-
proved: disabling 431(c) reddens 8 tests including all four oracle
comparisons; disabling 238(c)'s feria-I-classis exclusion reddens
exactly the dedicated Ash Wednesday unit test, a genuine blind spot in
both oracle layers, reported rather than hidden.

Two open, cited findings, neither fixed here (out of this task's
"follow creed's exact seam" scope): a privileged Lenten/Passiontide
feria carrying one commemoration reads Gloria=true in the LMS Ordo but
Te-Deum=true/Gloria=false in FIUV -- the two oracles disagree with each
other, not merely with colitur (data/ef/expected-divergences-lms.sexp
L5, expected-divergences-fiuv.sexp F3); and a pre-existing, uncited
Colour.Violet bug on Rogation Monday/Tuesday in Temporal_ef.temporal,
surfaced by this comparison but root-caused as a separate defect (L6).

day/readings verified byte-identical against a build from the branch
tip before this task (v0.10.1's own tag predates an already-landed
bissextile fix that legitimately changed both, so it is not the right
baseline).

671 tests green (dune test); 678 with the exhaustive sweep
(COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force, ~104s).
</content>
</entry>
<entry>
<title>test(fiuv-ordo): add the FIUV universal Ordo as a second, independent witness</title>
<updated>2026-08-22T13:11:43Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-22T13:11:43Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=96aed1b6f04ef89e8f3d18af8b13e6fd30dbd4d2'/>
<id>urn:sha1:96aed1b6f04ef89e8f3d18af8b13e6fd30dbd4d2</id>
<content type='text'>
Wires in the FIUV (Foederatio Internationalis Una Voce) Ordo for
2025-2026 as validation layer seven -- the first UNIVERSAL (not
diocesan) source in this project, and the first compiled by someone
other than the LMS editions' own Peter Day-Milne (Joseph Shaw, FIUV
President).

tools/extract_fiuv_ordo.ml hand-parses pdftotext's -layout dump of the
Latin-language ordo (no Str/regex, frozen deps). Three real parsing
traps were found and fixed by tracing actual false results against the
raw source, not assumed in advance:

- "Gloria" is also the first word of "Gloria Patri" (the psalm
  doxology), which can appear INSIDE the very Mass clause being scanned
  (Good Friday: "...omittuntur ps. Iudica me et Gloria Patri), Gloria,
  sine Credo..."). Guarded by rejecting any "Gloria" hit whose next
  token is "Patri".
- Christmas Day's own rubric uses the PLURAL "Missae"/"Missae" ("tres
  Missae celebrantur..."), never the singular "Missa" every other real
  day anchors on -- silently produced gloria=None/credo=None on the one
  most doctrinally unambiguous day in the calendar until traced and
  fixed, guarded in turn against "Missae defunctorum" (an unrelated
  Requiem-prohibition notice appearing at the end of many day-blocks).
- The Vespers boundary (bounding the primary Mass option before a
  second "Vel Missa" alternative or before Vespers information) missed
  the ligature spelling "VESPERÆ", the dominant form in this source,
  letting a whole day's trailing prose leak into the captured [praef]
  field on the task brief's own worked example day (19 September).

A distinct second stop-marker bug: the malformed trailing entry this
source shares structurally with the LMS PDFs (a stray, mislabelled
duplicate of 1 January) was initially over-matched by a generic
"first token is 4 digits" heuristic, which false-positived on an
indulgence-decree date citation wrapped mid-sentence in October
("...20 augusti / 1885, 26 augusti 1886..."), truncating the extraction
to 308 of 400 real days. Fixed by anchoring on the tail entry's own
distinctive "1st Jan" opening instead.

Five opposite-prediction Creed probes are re-verified by the tool
itself against its own extracted rows (a failed probe is a hard exit,
not a printed claim) before the fixture is written.

test/test_fiuv_ordo.ml compares the Creed against colitur across all
399 comparable days (Holy Saturday excluded, no Mass that day) --
CLEAN, zero unexplained divergences, a genuine second confirmation of
{!Rite_ef.Rubrics_ef.creed} independent of the LMS lineage. [praef],
[te_deum] and [class_] (including the FIUV ordo's own "III cl." vs
"III cl. (Priv.)" Cum Sanctissima convention, stated on its title
page) are captured into the fixture but deliberately not compared --
colitur has no Gloria/preface predicate yet, and its default
configuration models no Cum Sanctissima overlay to compare the class
convention against.

All 634 tests green (dune test), 635 with the exhaustive sweep and
make check. No lib/ file touched.

Claude-Session: https://claude.ai/code/session_017ZBxCCRM2ojnBupp3SBxV9
</content>
</entry>
<entry>
<title>test(lms-ordo): extend the LMS witness layer from one year to three</title>
<updated>2026-08-22T12:51:07Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-22T12:51:07Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=72dd2426f020f83a392158ead7bd15b36088fd08'/>
<id>urn:sha1:72dd2426f020f83a392158ead7bd15b36088fd08</id>
<content type='text'>
Generalises tools/extract_lms_ordo.ml's start-of-body detection: the
hardcoded "End of November 2024" sentinel assumed every edition opens
with an "End of November" stub section. The 2023-2024 edition has none
(Advent Sunday 2023 fell on 3 December, so the compiler folded the two
tail days into the "December 2023" header directly) -- the generalised
detector anchors on the body's own "ORDO" title line instead, verified
unique in all three known editions and distinct from the Table of
Contents' lowercase "Ordo" entries.

Extracts test/fixtures/lms-ordo-2023-2024.sexp (397 rows) and
lms-ordo-2025-2026.sexp (399 rows), each with a provenance header
carrying its own SHA-256, source citation, and a per-edition
characterisation record: five opposite-prediction Creed probes,
independently re-verified against this run's own extracted rows (a
failed probe is now a hard die, not a printed claim). The 2025-2026
edition needed a different sharp II-class pairing than 2024-2025's
Joachim/Stephen one, because Joachim (16 August) is impeded by a Sunday
that year -- recorded in the fixture header, not silently swapped.

test/test_lms_ordo.ml is refactored into a parameterised make_suite,
instantiated once per edition; every count Task 6 hardcoded against the
single 2024-2025 window is now a per-edition parameter, several of which
turned out to differ once measured (BVM-Saturday population 12/14/13,
Ascension-week exclusion 1/3/2). Two mapping gaps surfaced only by the
new windows and fixed here (test-side, not colitur): Low Sunday reached
via Preceding_sunday for the first time (absent from 2024-2025's own
window), and the Ascension-week exclusion was wrongly keyed off week
number alone -- Rogation Monday also resumes week 6's Sunday but falls
BEFORE Ascension, not after, and the Ordo prints the ordinary Sunday
text there. Re-bounded by date, against Ascension and Pentecost.

Two genuine divergences surfaced in the 2023-2024 window and are
allow-listed (L3, L4) rather than fixed, per this task's no-lib-changes
scope:

- L3 (verdict ordo): colitur has no bissextile calendar rule. The 1962
  Missal's own calendarium moves St Matthias from 24 to 25 February in
  leap years (docs/research/LT.txt:5011); colitur keeps him on the 24th
  every year. Domain-wide upper bound measured with a throwaway sweep:
  1,650 of 2,041 leap years in 1583-9999 currently observe him there.

- L4 (verdict open): Christmas Eve falling on the 4th Sunday of Advent
  (2023-12-24, roughly 1 year in 7). colitur says the Creed is said,
  reading RG 475(a)'s Sunday clause; the Ordo says it is not. RG 30(a)'s
  own "locum tenet ... nulla fit commemoratio" for this exact vigil
  reads like RG 16(a)'s Feast-of-the-Lord-on-Sunday shape, which colitur
  already treats as Creed-preserving -- but RG 475(a) names "festo"
  specifically, and a vigil is its own liturgical-day category (RG 35),
  so the counter-reading is real too. Left open rather than adjudicated.

All 630 tests green (dune test), 631 with the exhaustive sweep.

Claude-Session: https://claude.ai/code/session_017ZBxCCRM2ojnBupp3SBxV9
</content>
</entry>
<entry>
<title>test(ef): the LMS Ordo as a sixth validation layer</title>
<updated>2026-08-22T10:58:15Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-22T10:58:15Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=3bfa0c459e3c0b5bfa962b7dbb0227db5a8ba09f'/>
<id>urn:sha1:3bfa0c459e3c0b5bfa962b7dbb0227db5a8ba09f</id>
<content type='text'>
An independent lineage -- neither Divinum Officium, missalemeum nor
lectio -- covering the Mass formulary and the Creed. Characterised
before use, per the discipline the extraordinaryform.org Ordo's
blanket St Lawrence vigil gap taught this session: five opposite-
prediction Creed probes (Sunday/feria, octave-override vs plain
II-class, I-class) all confirmed against the raw extracted text
before a single divergence was adjudicated, recorded in the
fixture's own provenance header.

tools/extract_lms_ordo.ml hand-parses pdftotext -layout output (no
Str/regex, frozen deps) into test/fixtures/lms-ordo-2024-2025.sexp,
400 day-rows (2024-11-27..2025-12-31). Gl/Cr print per Mass-option,
not per day; the extractor takes the first pair in reading order,
which the source's own layout guarantees is the universal entry's,
since a diocesan variant always follows it, never precedes it. The
Ordo's I-V roman numeral ("Missae de sancta Maria in sabbato", RG
309(a)) is matched whole-line only, never by substring -- "V Mass of
BVM" is a substring of "IV Mass of BVM".

test/test_lms_ordo.ml compares two axes 1:1 by date:
  - the Creed (RG 475-476): 399 of 400 days comparable (Good Friday
    has no Mass at all, asserted as the only such day); one genuine
    divergence, adjudicated to the ORDO, not colitur -- All Souls'
    Day 2025-11-03 is a Requiem Mass, and colitur's own creed
    predicate has no notion of one, a pre-existing scope gap
    rubrics_ef.ml already documented in its own header before this
    task existed.
  - the BVM-Saturday seasonal Mass selection, the addendum's own
    "sharper check": all 14 Votive days in the window match their
    season's own numeral exactly, both directions, independently
    re-derived from RG 309(a) rather than calling colitur's private
    function.
  - the formulary override, for the three sources it can honestly
    discriminate (Proper 179, Preceding_sunday 66, Common 2, all
    clean); Own_slug (139) is excluded with evidence, not silently --
    several ferial slugs carry citations byte-identical to their
    Sunday's own, so the Ordo's override line cannot distinguish the
    two representations.

data/ef/expected-divergences-lms.sexp carries the one adjudicated
entry (L1), cited to RG 476(f).

Mutation-tested: inverting RG 475(a)'s Sunday clause reddens 10
existing Rubrics_ef unit tests AND this new layer's own comparator,
independently, on a data source none of the other five layers touch.
Reverted after confirming.

No lib/ changes. day/readings/rubrics output re-confirmed byte-
identical (1583, 2026, 2038, 9999) after this task; all three gates
green (dune test, exhaustive sweep, make check).
</content>
</entry>
<entry>
<title>test(differential): C14 and C15 closed -- only slug vocabulary remains</title>
<updated>2026-08-18T15:35:53Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T15:35:53Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=897c274fd28402159ca6d45eedc1257b1ce98696'/>
<id>urn:sha1:897c274fd28402159ca6d45eedc1257b1ce98696</id>
<content type='text'>
lectio adopted the last two Missal corrections colitur argued:

  C14  3 -&gt; 0   RG 96(a)/97/98. lectio resolved each impeded I-class feast's
                transfer independently, so in 2008, 2035 and 2046 St Joseph and
                the Annunciation both walked onto the Monday after Low Sunday
                and Joseph, losing there, was observed on no day of those years
                at all. It now resolves the year's transfers as a set: the
                Annunciation takes the Monday as its sedes propria, Joseph the
                Tuesday.
  C15  7 -&gt; 0   The Holy Family propers' own 13-January rubric, "sine
                commemoratione Baptismatis D.N.I.C.". lectio kept the Baptism
                as the observed office on all seven such years in 2005-2050.

Those were the last two BEHAVIOUR classes. What is left is C1 (138) and C6
(119), both pure slug vocabulary.

Measured across the whole fixture, applying only the season normalisation the
test already applies: 579 of 16801 days differ, and every one of them differs
on the SLUG ALONE. Zero days differ on season, rank, colour, Epistle or Gospel.
(The test's own norm_slug table already maps 322 of the 579; the 257 left are
C1 and C6. The field profile is the same either way.)

So the two engines now agree on every liturgically meaningful field on every
day of 2005-2050. The residue is what the two projects call things --
ef-christmas-2-friday against ef-time-after-epiphany-1-friday for the same day,
same Mass. Aligning it means renaming lectio's slugs, and those are keys: its
lectionary, clectio's generated tables and any user overlay are built on them.
Left as vocabulary rather than forced.

Fixture refreshed against lectio e713da2; 13 rows changed, colitur agrees with
all of them. 24 divergence classes at the start of this work, 2 now.
</content>
</entry>
<entry>
<title>test(differential): C31 closed -- 4 classes left, 257 of 267 rows are naming</title>
<updated>2026-08-18T15:18:16Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-18T15:18:16Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=5773d603a2936638654f8e6bd8e595240de4203a'/>
<id>urn:sha1:5773d603a2936638654f8e6bd8e595240de4203a</id>
<content type='text'>
The ferias between Epiphany and the first Sunday after it repeat Epiphany's
own Mass in lectio now; they had been taking the Mass of the Sunday that
follows them.

  C31  98 -&gt; 0
  C1   40 -&gt; 138   grew, and changed character

C1 is now SLUG VOCABULARY ONLY, and its note says so. Season, rank, colour and
both citations agree with colitur on every day of the January window; what
differs is the identifier -- ef-christmas-2-thursday against
ef-time-after-epiphany-1-thursday for the same day with the same Mass. C6 is
the same shape.

That is 257 of the 267 remaining rows. Aligning the vocabularies would mean
renaming lectio's slugs, and those are keys: its own lectionary, clectio's
generated tables and any user overlay are built on them. Recorded as
vocabulary rather than closed, because the rows do differ -- just not in
anything a reader of either engine's output sees.

Measured for 2026: season, rank and colour agree on all 365 days; 14 days
differ and every one differs on the slug alone.

5 classes -&gt; 4, agreement 98.4%.
</content>
</entry>
</feed>
