<feed xmlns='http://www.w3.org/2005/Atom'>
<title>colitur.git/data/ef/expected-divergences-missalemeum.sexp, branch v0.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=v0.2.0</id>
<link rel='self' href='https://git.labunix.xyz/colitur.git/atom?h=v0.2.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/'/>
<updated>2026-08-17T12:13:02Z</updated>
<entry>
<title>fix(lectionary): two Judith citations wrong in both engines</title>
<updated>2026-08-17T12:13:02Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-17T12:13:02Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=3565ebd1608a7d87e0d890f9953845efcfe743ca'/>
<id>urn:sha1:3565ebd1608a7d87e0d890f9953845efcfe743ca</id>
<content type='text'>
A live-missalemeum sweep over a full liturgical year (2028, 364 days)
returned 333 matching and 31 differing days: 17 already-known or pure
notation, 3 new. All three now adjudicated against the photographic
scans of the 1962 Missal.

The Assumption's Epistle reads "Iudith 13, 22-25; 15, 10" (scan1:35357).
Both engines carried "Judith 13:22-25; 13:15; 13:10" -- a chapter
carry-over defect that re-applied chapter 13 to the second citation and
so invented two verses the Missal never cites. The Seven Sorrows reads
"Iudith 13, 22 et 23-25" (scan1:36938, corroborated at 28468); both
carried "Judith 13:22; 13:25", dropping the range. The third, St Monica,
resolves the other way: the Missal gives 1 Timothy (scan2:32679, heading
and incipit both legible; scan1:29524 agrees) where missalemeum serves
the Common of Holy Women's Proverbs -- colitur is right, no change.

Layer 3 could not have found either citation defect. colitur's data is
bootstrapped from lectio, and lectio is the other side of that
differential, so while both engines produced the identical wrong answer
the comparison held it against itself and reported agreement -- the
shared-lineage blindness CLAUDE.md names, now with a second live witness
beside Holy Thursday's colour. Only an external oracle could see it, and
only outside the committed fixture's own window.

Fixed upstream in lectio, re-bootstrapped here (provenance SHA-256 moved
to 54f6bfc5, verified against the source), fixture regenerated.

The upstream fix inverted layer 3 from blind to load-bearing here:
reverting the Assumption citation now reddens both layers, where before
it would have reddened neither. Verified by mutation, both directions.

Allow-lists:
- C22 closed and removed (128 rows -&gt; 0), not re-adjudicated -- the other
  engine was fixed to agree, the same shape as the C2-C5/C7/C9-C13/C21
  closures. Its own note had already flagged the Lenten Ember dead-key
  bug for upstream; lectio now also fails its build on any unreachable
  lectionary key rather than serving a plausible wrong Mass.
- M28 opened (3 rows, verdict colitur), pinning both sides' citation
  text rather than the date and diff shape alone, so a different
  divergence landing on the same date cannot be swallowed.
- M8's gate widened, expected_rows unchanged at 2: 2027-08-15 carries
  both its cause and M28's, and one entry is admitted per day. It stays
  under M8, which now requires its own commemoration difference to be
  present and admits the citation difference only when it satisfies
  M28's two-sided predicate. Neither cause absorbs the other.

layer_m_reason's oracle-row parameter, kept named since M2 closed for
exactly such a future reader, is live again.

Register: docs/research/rules-register.md section 6.6.
</content>
</entry>
<entry>
<title>test(oracle): fix round 1 -- C30 disclosure, RG 17(a) misattribution, M26 shapes</title>
<updated>2026-08-17T11:02:39Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-17T11:02:39Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=5d236c75c557a7e9ed4a8a852b8089aca48b594e'/>
<id>urn:sha1:5d236c75c557a7e9ed4a8a852b8089aca48b594e</id>
<content type='text'>
Three Important findings from coordinator review of 8d1eb25, all fixed.

1. C30's own note claimed its 91-row population "is C25's OWN former
   population, before this task narrowed it" -- false. Independently
   re-derived against the real resolver (pre-fix vs post-fix binary) and
   the lectio fixture: only 44 of the 91 rows were ever in C25 (Wed 6/
   Thu 19/Fri 19, matching C25's own fix-round-3 breakdown exactly); the
   other 47 (all of Monday/Tuesday, plus part of Wednesday/Friday)
   previously matched lectio outright -- both engines independently
   landing on the same wrong value -- and are newly allow-listed only
   because colitur is now right. Rewritten to the same "both engines
   silently agreed on the wrong answer" pattern C33/C34 already used.

2. "Diebus ferialibus" is not RG 17(a) -- RG 17(a) states only the
   day-identity privilege; the ferial-Mass rubrics are Mass-propers
   rubrics, a distinction the register's own §6.3 already drew before
   this task's first pass blurred it in code/allow-list comments. A
   further slip: C31/C32 called their own rubric "RG 17(a)'s own next/
   third sentence" when it is a different rubric block ~230 lines away,
   in Holy Family's (not Holy Name's) own feast propers. Fixed the
   attribution chain throughout tools/bootstrap_lectionary.ml,
   data/ef/expected-divergences.sexp's C29-C34, and (gitignored, outside
   this commit) docs/research/rules-register.md -- closed the §6.3 park,
   added §6.5 recording all four citations with corrected attribution.
   Quotes and line numbers were already right; only the chain of custody
   to RG 17(a) was wrong.

3. M26's own 30 rows classify into two nameable shapes, not "three
   confirmed shapes" with an unexplained 23-row residue that was in fact
   empty: 21 rows are RG 78's own already-documented BVM votive-Mass
   gap; 9 rows are a second, distinct gap -- a week whose own Sunday was
   displaced by a movable named feast (Trinity-&gt;Corpus Christi, "Missa
   Dominicae I post Pentecosten"; Christ the King), where the Missal
   requires the displaced Sunday's own Mass to keep informing that
   week's ferias but step 3 walks back to the displacing feast's citation
   instead -- proven directly by colitur's own citation on the Christ-
   the-King rows being literally that feast's own Gospel. verdict open
   unchanged (not fixed here); the shape is now named instead of buried.

Minors: section count corrected 1458-&gt;1456 (four places); "exactly one
candidate, zero ambiguous" corrected to "correctness rests on ordering,
not uniqueness" (2 of 1456 sections genuinely yield two candidates,
Holy Saturday's own Lectio, both years); the stale "nothing in layers
3-5 compares citations" claim corrected (only layer 5 still doesn't);
M18's note corrected (five new entries not six; ~18 of its remaining
352 rows only agree now because of this task's own fixes, not "already"
before it); "five" corrected to "six" otherwise-unoccupied Saturdays in
bootstrap_lectionary.ml; scan2 quotes softened where OCR-garbled.

Also done outside the git-tracked files: the step-4 (Commons) coverage
gap is now recorded in data/ef/expected-divergences-missalemeum.sexp's
own header, not only the commit body and the (gitignored) report.

dune test: 358 tests green. COLITUR_EXHAUSTIVE_SWEEP=1 dune test
--force: 359 tests green, 95.7s.
</content>
</entry>
<entry>
<title>test(oracle): compare reading citations against missalemeum</title>
<updated>2026-08-17T10:28:03Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-17T10:28:03Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7'/>
<id>urn:sha1:8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7</id>
<content type='text'>
Layer 4 (test_oracle.ml) now extracts and compares the Epistle/Gospel
citation for every one of the 730 days in the 2026-2027 fixture, the
same axis Task 8 already added to layer 3. tools/
extract_missalemeum_oracle.py gained a structural citation-span
detector (the first "*...*"-wrapped span under 40 chars containing a
chapter:verse-shaped digit pair), verified exhaustively over all 1 458
Lectio/Evangelium sections. 728 of 730 days are comparable; the 2 that
are not (Good Friday, both years) have no such section in missalemeum's
own JSON at all -- a structural limit on the oracle's own side (M23),
not a colitur gap. 451 of 730 days differ and are all explained across
19 cited entries; 0 unexplained. Chain step 4 (the Commons) has no
layer-4 witness: confirmed empirically (a scratch sweep, not merely
re-asserted from Task 6's own report) that none of the 15 Commons/proper
saints is ever the observed office in this window.

The comparison surfaced three genuine colitur bugs in
data/ef/lectionary.sexp, all fixed at the source in
tools/bootstrap_lectionary.ml:

1. Holy Name of Jesus (ef-holy-name-sunday/ef-holy-name) carried a
   mis-derived citation, borrowed by analogy from an unrelated ini
   section ("ef-christmas-sunday-0", the Sunday-within-the-Octave's own
   Mass) on the wrong assumption the two share a Mass. Disproved by
   missalemeum's own extraction for both real Holy Name Sundays in its
   window, confirmed against the Missal itself, twice, both scans
   (Acts 4:8-12/Luke 2:21, not Gal 4:1-7/Luke 2:33-40).
2. RG 17(a)'s own "diebus ferialibus" rubric (immediately following the
   Holy Name heading, both scans) was never implemented: 2-5 January
   ferias repeat 1 January's Mass, 7-12 January ferias before Holy
   Family Sunday repeat Epiphany's, and Holy Family's own week has a
   named formula ("Missa Dominicae Primae post Epiphaniam"). All three
   fell to step 3's undifferentiated Sunday walkback instead. Fixed for
   three 5-weekday families, deliberately excluding Saturday from all
   three -- RG 78's BVM Saturday Office wins there unconditionally,
   confirmed against missalemeum's own title on this window's own such
   Saturdays.
3. Corpus Christi and Sacred Heart (both real, never-impeded I-class
   movable feasts) had no lectionary entry at all. Both engines
   independently fell back to Trinity Sunday's own citation and
   silently agreed on the wrong answer -- the "Holy Thursday violet in
   both" shape CLAUDE.md names for exactly this reason.

Because lectionary.sexp is shared with layer 3 (the lectio differential,
2005-2050), these fixes changed colitur's output for the whole domain,
not only 2026-2027. data/ef/expected-divergences.sexp and
test_differential.ml needed matching updates: C1 narrowed 361-&gt;173 and
C25 narrowed 57-&gt;13 (rows that now resolve correctly moved to new
entries), C16's note corrected (count unchanged), and six new entries
added (C29-C34, 397 rows total, all verdict colitur). test_lectionary.ml
and test_lectionary_ef.ml's own pins were updated to match (entry count
131-&gt;148; one step-3 regression test re-pointed to a date that still
genuinely exercises that step).

One entry, M26 (30 rows, verdict open), is a genuine unfixed gap: colitur's
step-3 "resume the preceding Sunday" fallback is its only ferial-Mass
mechanism, and missalemeum's own selection is more granular in three
confirmed ways (a rotating votive Mass of the BVM, a named weekly
formula for at least one week, and later Time-after-Pentecost weeks this
task's own investigation did not narrow to a single rule) -- the same
"needs a season-keyed selection mechanism, new behaviour not new data"
shape data/ef/expected-divergences.sexp's own C6/C25 and Task 6's own
residual concern already name, out of this task's own scope to build.

dune test: 358 tests green. COLITUR_EXHAUSTIVE_SWEEP=1 dune test
--force: 359 tests green, 89.5s.
</content>
</entry>
<entry>
<title>fix(ef): three colour corrections that contradicted the Missal by name</title>
<updated>2026-08-14T10:40:24Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-14T10:40:24Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=112781d6e3b92310d9d657c53a7e0fc789aefdfb'/>
<id>urn:sha1:112781d6e3b92310d9d657c53a7e0fc789aefdfb</id>
<content type='text'>
The sanctoral audit set chair-of-st-peter (22 Feb), conversion-of-st-paul
(25 Jan) and peter (25 Jan, commemoration) to Red on RG 124(b). All three
are reverted to White.

RG 120(f), fifteen lines above RG 124(b) in the same column of the same
page, names two of them in its enumeration of white: "Cathedrae S. Petri
(22 februarii); Conversionis S. Pauli (25 ianuarii)". RG 124(b)'s own
qualifier "in eorum die natalicio" independently excludes them, and RG
475(e) confirms it a third time by naming the Chair separately from
"natalician feasts of Apostles". lectio and missalemeum both said white
because both were right. peter rested on "match the host day's Red",
whose host is white by that same clause, so the precedent inverts.

Root cause: the audit's page-image method, its real advance, was applied
to the calendarium and not to the rubric. RG 124 was read from the OCR
text layer, where the two-column interleave shreds RG 120(f) across rows
belonging to RG 115 and hyphen-splits Cathedrae, so a text-layer grep
for it returns nothing while RG 124's enumeration survives cleanly. That
read finds 124 and structurally cannot find 120(f).

Two sentinels had been reporting this correctly and were overridden. The
golden pin at 1902-02-22 asserted colour=white, was changed to red, and
had its comment rewritten to guard against "a regression back to the old
one" -- the only pin asserting a colour for any of the 21 slugs. And C18
and M21 both listed the two slugs under an RG 124(b) citation where both
oracles were right. Pin restored; slugs dropped; C18 re-derived 526-&gt;450
from the observed-day counts, M21 20-&gt;18, M15 17-&gt;18.

The audit's own discriminator would have isolated these. Its stated
corroboration was that lectio's name.pl contradicts lectio's colour; run
as a gate across all 21 that splits 17 genuine defects from 4 needing
adjudication, and three of those four are these. It was quoted as
illustration rather than used as a gate.

18 of 21 corrections stand, and the twelve whites are recited to RG
120(e) "Sanctorum non Martyrum" rather than to RG 117's negative
residual. Also records Anastasia's deliberate non-fix in the tracked
tree beside barbara, where the next auditor will be standing.
</content>
</entry>
<entry>
<title>data(ef): sanctoral audit — one genuine gap, 21 wrong colours (RG124)</title>
<updated>2026-08-14T10:00:24Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-14T10:00:24Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=bf326ab963f46c42dc1a3b5141f2022bed81756d'/>
<id>urn:sha1:bf326ab963f46c42dc1a3b5141f2022bed81756d</id>
<content type='text'>
Full re-extraction of the primary CALENDARIUM (both photographic scans,
missale-romanum-1962.pdf and Missale Romanum 1962_text.pdf, rendered page
images read directly rather than trusting either PDF's own OCR text
layer) against all 327 base sanctoral entries plus the two prior overlay
Adds. Both scans agree throughout; no OCR ambiguity required adjudication
this round.

Add `barbara` (4 December): both scans carry a Commemoratio nested under
Peter Chrysologus's own entry, absent from data/ef/sanctoral.sexp AND
from lectio's own tridentine-calendar.ini (confirmed directly) — the same
upstream-gap shape as the five entries the ef-rebootstrap task already
added (agnes-secundo/boniface-martyr/eusebius-confessor/evaristus/
theodore).

Correct 21 sanctoral colours against RG 124 ("De coloribus paramentorum"),
scan-verified word for word: 124(b) red for an Apostle/Evangelist's own
feast day except John's (27 December, already correct); 124(e) red for a
Martyr's own martyrdom; RG 117's five-colour residual otherwise white.
Every one of the 21 is a confirmed lectio/missalemeum bootstrap defect —
checked individually against lectio's own ini, several of whose Polish
name fields already contradict that same record's own colour tag (e.g.
`martha`: "Dziewicy", Virgin, no "Męczennicy", yet `colour = red`) — the
identical root cause and mechanism the `eusebius-confessor` fix already
established. Colour is confirmed read nowhere in Precedence_ef's
resolution logic (grep), so these are output-correctness fixes with zero
observed-office blast radius; three (apollinaris/josaphat/chair-of-st-
peter) additionally disagree with missalemeum's own oracle, not only with
lectio, so they are adjudicated from RG 124's text directly rather than
by which engine happens to agree.

Both corrections applied via data/ef/adjustments.sexp's established
Overlay mechanism (data/ef/sanctoral.sexp stays generated, untouched).

Pinned: test_rite_ef.ml (two new tests, verified to fail against the
pre-fix data); test_differential.ml's new C18 predicate (526 rows,
2005-2050) and test_oracle.ml's new M21/M22 predicates (20 + 2 rows,
2026-2027), each with data/ef/expected-divergences{,-missalemeum}.sexp
entries citing RG124 or the matching upstream-gap precedent;
test_golden.ml's 1902-02-22 pin corrected (chair-of-st-peter was white in
the stale pin, RG124(b) makes it red). All 329 tests green, including the
full 1583-9999 exhaustive sweep.

Full method, per-entry adjudication table and corrected bucket counts:
docs/research/rules-register.md (gitignored) and
.superpowers/sdd/2026-08-12-colitur-rg16a/sanctoral-audit-report.md
(gitignored).
</content>
</entry>
<entry>
<title>docs: a confidence raised while its revisit trigger was deleted</title>
<updated>2026-08-13T19:18:58Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T19:18:58Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=72b19098905cd609d87783f6e68311de4f1b61a0'/>
<id>urn:sha1:72b19098905cd609d87783f6e68311de4f1b61a0</id>
<content type='text'>
Five follow-ups from the fix-round re-review, none touching a computed
result.

M20's note had said "moderate-high, not certain" with a specific revisit
trigger attached. The fix round raised the label to "near-certain" and
deleted the trigger in the same edit. Upgrading a confidence while
removing the condition that would lower it again is the one move this
record must not make, so the trigger is restored alongside the higher
label: no primary text anywhere names the Major Litanies in a
Mass-orations-count worked example, only the general II-class-Sunday
rule twice over. RG 434(b) closes the Office-shaped doubt and nothing
further.

"WORD-IDENTICAL" overstated the relation between RG 111(b) and n.
434(b). Only the trailing "quae tamen omittitur si commemoratio
privilegiata facienda sit" is verbatim in both; the openings differ,
n. 434(b) recasting the rule into the orations register. The claim was
self-refuting -- both texts are quoted adjacent to it -- and the
argument never depended on it. Now "identical in its operative clause".

And n. 434 is not "a different part of the same document": the running
heads put RG 111 under Rubricae generales and n. 434 under Rubricae
generales Missalis Romani, two distinct corpora bound in one volume,
which is the entire force of the corroboration. The code comment had
understated its own point.

Also corrects the register's LT line range for n. 434(b) (3574-3576, not
3564-3570; the (b) clause is not in the cited range), and records in
calendar.ml the diagnostic that channel (3) trades away: a rite whose
transfer_target names a date its own disposition omits used to raise a
loud, mislabelled Validate failure and is now silent at the origin. The
kernel cannot distinguish that from a deliberate omission without rite
knowledge it must not have, so accepting it is right -- but the signal
is gone, and that should be written down rather than discovered later.
</content>
</entry>
<entry>
<title>docs(ef): fix round 1 corrections (F2-F5) -- inert fields, a date, an attribution, RG434(b)</title>
<updated>2026-08-13T18:55:43Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T18:55:43Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=cbf6826edc77e3ad5a813237bae27e367221452c'/>
<id>urn:sha1:cbf6826edc77e3ad5a813237bae27e367221452c</id>
<content type='text'>
F2: the task report's "colour/subject/names on the Litanies entry are
currently inert" was false for names -- test_oracle.ml's identity axis
reads Names.find on every commemoration, and the invented English name is
exactly why 2026-04-25 registers as a Comm_identity_mismatch, the reason
M5 had to be re-gated. Corrected precisely, field by field, in the report.

F3: Easter 2027 is 28 March, not 18 April, as previously stated in the
report's own "layer 4 is blind to the transfer" reasoning. The conclusion
survives (28 March is not 25 April); the date is corrected.

F4: "the exhaustive property sweep caught this immediately" was a wrong
attribution, in the report, the register, and calendar.ml's own comment.
The committed exhaustive sweep walks 1583-9998 in order and aborts at the
first failure; the years actually reported (5700, 4747) were draws from
prop_invariants, the default dune test run's 200-year random sample.
Corrected in all three places.

F5: the Litanies' privileged commemoration is due in the MASS specifically
(RG 108 + RG 81), never a separate Office answer -- colitur emits one
resolved day, and the M20 adjudication rests on that being the Mass
reading. Stated explicitly now in M20's own note, the register, and
precedence_ef.ml's own RG111(b) comment.

Also added to M20 and the register: Rubricae Generales Missalis Romani
n. 434(b) ("VIII - De diversis Missae partibus", "D) De orationibus", "I
- De orationibus in genere"), verified word for word against all three
documents -- word-identical to RG 111(b) but explicitly scoped to the
Mass ("post orationem Missae"), answering the objection that RG 111
(Caput XVI, which RG 106 says governs both Office and Mass) might be read
as Office-shaped. Moves the M20 adjudication from "moderate-high, not
certain" to near-certain.
</content>
</entry>
<entry>
<title>test(ef): oracle allow-list for the Major Litanies, and a source-fidelity correction</title>
<updated>2026-08-13T18:15:56Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T18:15:56Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=81c72ce9fc4b769be19e6373ce66852acd5b3425'/>
<id>urn:sha1:81c72ce9fc4b769be19e6373ce66852acd5b3425</id>
<content type='text'>
M5 (the pre-existing register-cited gap this task closes) had a genuine
backwards claim in its own note: it said missalemeum's single admitted
commemoration on 25 April 2027 (the Sunday-conflict year) was "the Major
Litanies". Checked directly against the raw fixture row while adjudicating
this task's own new divergence -- missalemeum's own commemorations field
there is "St. Mark"; "Pro rogationibus" (the Litanies) is the one listed
as displaced. Corrected in place, both the .sexp entry and this file's own
header note. M5 itself now covers only the ordinary case (25 April 2026):
presence agrees now that the entity is built, identity does not (colitur's
own English name vs missalemeum's Latin-ish descriptive string), the same
declared comparator limit M15/M18 already document, hit here for a
different reason.

The real, substantive divergence the correction exposes: colitur now
admits the Litanies on 2027-04-25 where missalemeum admits Mark. New entry
M20, adjudicated colitur -- RG 109(f) places the Litanies in the same
closed privileged list as (a)-(e), and RG 111(b)'s own text is
unconditional ("the II-class commemoration is dropped if a privileged one
is due", no table-order qualifier). The same mechanism already
primary-source-verified and used for other RG 109 categories elsewhere in
this codebase; honestly flagged as the first real, non-synthetic test of
this specific admit clause, consistent with this oracle's own
already-documented pattern of RG 108-111 gaps (M1, M8, M10).

M18's own count moves 395 -&gt; 394 (2027-04-25 no longer falls into "observed-
identity-unresolved alone"; it moved into M20), traced to the specific date
and mechanism, not merely re-baselined.

data/ef/expected-divergences.sexp (the lectio allow-list) needed no
change: lectio computes no Major Litanies at all, and its own row type
carries no commemorations field -- layer 3 is entirely blind to this
change, confirmed rather than assumed.
</content>
</entry>
<entry>
<title>data(ef): close and derive the RG 91 entry 27 allow-list rows</title>
<updated>2026-08-13T13:57:26Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T13:57:26Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=957a6d88ed447be16aa8c7e71250f4c9b87a832b'/>
<id>urn:sha1:957a6d88ed447be16aa8c7e71250f4c9b87a832b</id>
<content type='text'>
The BVM Saturday office is now genuinely correct, so both comparators'
allow-lists move -- every count derived from the harnesses' own failure
output, never transcribed or guessed.

lectio differential (data/ef/expected-divergences.sexp, C17, new,
colitur): lectio builds no equivalent office at all, so it keeps
showing the plain season colour on every otherwise-unoccupied Class4
Saturday where colitur now shows white. Season, slug and rank all still
agree (the office deliberately reuses the ordinary ferial slug), so
Colour_f alone is the complete diff set -- gated on colitur's own
rank/weekday/colour rather than a date list, the same shape M2 used, at
416 rows over 2005-2050.

missalemeum oracle (data/ef/expected-divergences-missalemeum.sexp): M2
is CLOSED, REMOVED, the same shape as this file's own M4/M6/M7/M9/M12/
M14/M17 precedents -- not re-adjudicated to a different verdict, gone
because the colour divergence it named no longer occurs on any of its
former 22 dates. What is left on all 22 is Observed_identity_unresolved
alone (colitur's BVM-Saturday candidate is temporal-origin and
deliberately carries no English name) -- exactly M18's own shape, not a
distinct citation any more. Keeping M2 as a separate id would have kept
silently absorbing these rows under a stale "colour differs" citation
whose own reason had stopped firing (subset's own diff-set test admits
a SMALLER set than the one named) -- the same "count proving cardinality
where identity was required" trap this project's review process
watches for. M18's own expected_rows moves 373 -&gt; 395 accordingly.
</content>
</entry>
<entry>
<title>precedence(ef): RG 110, the inseparable Peter/Paul commemoration</title>
<updated>2026-08-13T09:19:19Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T09:19:19Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=ee5c81e70adcd2ce6cecc57da4c416d482c187ca'/>
<id>urn:sha1:ee5c81e70adcd2ce6cecc57da4c416d482c187ca</id>
<content type='text'>
RG 110 (Caput XIV): "In Officio et Missa S. Petri semper fit
commemoratio S. Pauli, et vicissim... pro unica habeantur" -- in the
Office and Mass of either Peter or Paul, a commemoration of the other
is always made, uncapped by RG 111's own admission count. Both
photographic scans, full text including sub-clause (c) (a separate
trigger this register previously had not transcribed: the same rule
also fires when one Apostle's oration is admitted merely as an
ordinary/privileged commemoration, not only when it is the day's own
office).

Three real pairs in the 1962 calendar, all confirmed on both scans:
25 January (conversion-of-st-paul + peter), 22 February
(chair-of-st-peter + paul), 30 June
(in-commemoratione-sancti-pauli-apostoli + a new
commemoration-of-st-peter). The first two already existed as ordinary
sanctoral candidates but were wired into RG 111's ordinary, capped
admission contest instead of this rule's own uncapped one -- the
defect this closes. 30 June had no companion at all: a genuine gap
in lectio's own source data (confirmed directly against
tridentine-calendar.ini) and in missalemeum's own oracle output for
both fixture years, not only a colitur bootstrap miss, so colitur is
now uniquely correct on this date among the three engines compared.
Added via data/ef/adjustments.sexp's own Add directive, the
architecture's existing extension point for exactly this shape of
gap, since data/ef/sanctoral.sexp is generated and lectio must not be
touched.

Precedence_ef.admit gained rg110_additions/rg110_companion_slug,
layered on after admit's own four ordinarily-capped branches decide
their normal result: checks both the observed candidate and every
already-admitted candidate against the three-pair lookup and prepends
any companion found, uncapped and additional, never competing for
RG 111's own slot.

Measured full blast radius (1583-9999, pre-change binary from git
archive at 59fbda8 vs the fixed binary, 3,074,246 days each side,
14,627 differing days, all four predicted shapes, zero unclassified):
3,619 Holy Name fallback days (previous commit), 3,533 days Paul was
wrongly excluded from Chair of St Peter's own day by a competing
privileged feria, 593 days Chair of St Peter itself was admitted only
as an ordinary commemoration with Paul entirely absent, and 6,882 days
the new 30 June companion is added. The 3,533+593 figure supersedes an
earlier, narrower 852-day estimate that measured only the delta
between two older code commits, not the rule's full scope.

The lectio differential needed no change: it does not compare
commemorations at all, and this fix never touches season, slug, rank,
or colour. The missalemeum oracle allow-list needed three changes:
M12 removed (22 February 2027 no longer diverges in commemoration
count), M15's date list gained 2027-02-22 (now reaching identity
comparison for the first time, where it lands on that entry's own
pre-existing, unrelated limit -- one of the two commemorations is
temporal-origin and unnamed), and a new M19 for the 30 June gap.

Mutation-tested, both halves separately: disabling the admit-level
addition reddens the two new unit tests, the oracle's own M12-shaped
checks, and an existing golden pin (updated to expect the Paul
companion); removing only the 30 June data entry reddens solely the
oracle's new M19 count, confirming the code and data halves are
independently load-bearing.
</content>
</entry>
</feed>
