| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Layers 2 and 5 for the reading citations, which until now had coverage
from layers 3 and 4 only -- both oracle-bounded, at 2050 and 2027.
test_validate.ml said so in its own words ("No fixture here exercises
citations") and test_golden.ml's describe pinned twelve fields, none of
them a citation. 358 tests -> 369, and 370 under the sweep.
Layer 2 as two Validate checks rather than standalone QCheck properties,
so they ride the existing prop_invariants and the exhaustive sweep
instead of duplicating that machinery. "citations" asserts a day's parts,
sorted, are exactly [First; Gospel] -- one condition carrying three
invariants: zero or two but never one, nothing outside First and Gospel
since the chants are deliberately unbuilt, and no part twice, which a
bare cardinality test would miss. "citations-unresolved" is the separate
coverage half: the chain fell through every step. Both are gated on the
rite producing some citation somewhere, so a rite whose lectionary is not
built is held to neither and the synthetic fixtures stay unaffected.
The result over the whole domain: every day of every liturgical year
1583-9999 resolves exactly one Epistle and one Gospel. Mutation-proved
live rather than merely silent -- treating a well-formed pair as
malformed reddens the suite with real days showing [first,gospel].
citations-unresolved has no live witness at all, which is why
test_validate.ml gains five fixtures driving both checks through a new
?readings override, including the gate itself.
Layer 5 as six pins, one per chain step, so a regression names the step
that broke. Every literal was read out of the scans before being
compared with colitur, per that file's standing rule; scan lines are in
each pin's comment. Two of the six cover step 4, and the plan's own dates
for steps 1 and 4 were wrong: 2030-01-13 is a temporal day (Holy Family
on the generic Sunday slug) and would not have exercised step 1, while
2038-03-08 is John of God, who has a full proper Mass and never routes
through a Common -- so he becomes the step-1 pin instead.
A separate formatter rather than widening describe: widening would
invalidate all thirty existing literals at once and the only practical
way back would be pasting in whatever colitur printed, which is what the
file's header forbids. Restoring them honestly means hand-verifying
thirty more Masses against the scans, a task of its own. Stated rather
than hidden, and defensible because layer 2 now checks the shape of
every day in every year, which is the breadth that widening would have
bought.
Two pins earned their keep immediately. Lent I Monday failed on "Ezek"
against colitur's "Ezech" -- notation only, and colitur matches the
Missal's own abbreviation; layer 3 normalises this away and cannot see
it. The displaced-Sunday feria pins M26 shape 2(b)'s known-wrong
walkback deliberately, labelled as such so a future fix fails loudly,
and established two things M26 had not recorded: both parts come from
the displacing feast, not only the Gospel it cites, and the reference
carries a stray trailing period inherited through the bootstrap.
Blast radius: zero. The CLI never calls Validate, no data file changed,
and 20 years spanning 1583-9998 produce 7301 byte-identical lines
between the pre-change binary and HEAD.
Step 4's blind spot is now measured rather than argued. Corrupting the
Common of Non-Virgins I's Epistle leaves layer 3 (16801 days) and layer
4 (730 days) both green, reddening only one unit test and one new pin.
Both step-4 pins matched the scans on the first attempt -- the first
independent confirmation that route has ever had. It narrows the gap
without closing it: two of five Common-routed saints are witnessed,
isidore-of-seville is not, and gregory-the-great and patrick are
unreachable in any year 2005-2050.
Register: section 6.7 addendum. validate.mli documents both new labels;
liturgical_day.mli's "always empty until Plan 4" was outlived by the
lectionary and is corrected.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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->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->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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fifteen class-3 saints had no readings anywhere in colitur -- the 6 March -
5 April cluster whose RANKS lectio's generator fix of 2026-08-12 restored
without backfilling readings, and lectio has no Commons concept to have
backfilled them from. They are exactly the fifteen `status Feast` entries in
data/ef/sanctoral.sexp carrying `(citations ())`.
The Missal splits them eight/seven, and NOT as the plan predicted. It
expected propers for Benedict, Patrick, Thomas Aquinas and Gregory the
Great; only Thomas Aquinas has one. Benedict ("Missa Os iusti, de Communi
Abbatum"), Patrick ("Missa Statuit, de Communi Confessoris Pontificis I
loco") and Gregory the Great ("Missa Si diligis me, de Communi unius aut
plurium Summorum Pontificum") are all sent to a Common, with only Oratio,
Secreta and Postcommunio printed at the date. All three reversals verified
on the page images (pp. 488, 492) as well as in both OCR text layers.
PROPERS (data/ef/adjustments.sexp, `Edit ... Set_citation`):
thomas-aquinas 7 Mar Sap 7:7-14 / Mt 5:13-19
john-of-god 8 Mar Eccli 31:8-11 / Mt 22:34-46
forty-holy-martyrs 10 Mar Hebr 11:33-39 / Luc 6:17-23
cyril-of-jerusalem 18 Mar Eccli 39:6-14 / Mt 10:23-28
gabriel-the-archangel 24 Mar Dan 9:21-26 / Luc 1:26-38
john-damascene 27 Mar Sap 10:10-17 / Luc 6:6-11
john-of-capistrano 28 Mar Sap 10:10-14 / Luc 9:1-6
francis-of-paola 2 Apr Philipp 3:7-12 / Luc 12:32-34
COMMONS (data/ef/commons.sexp), each quoting the Missal's own instruction at
the saint's date:
sts-felicitas-perpetua 6 Mar non Virginum I Eccli 51:1-8,12 / Mt 13:44-52
frances-rome 9 Mar non Virginum II Prov 31:10-31 / Mt 13:44-52
gregory-the-great 12 Mar Summ. Pontificum 1 Petri 5:1-4,10-11 / Mt 16:13-19
patrick 17 Mar Conf. Pont. I Eccli 44:16-27;45:3-20 / Mt 25:14-23
benedict 21 Mar Abbatum Eccli 45:1-6 / Mt 19:27-29
isidore-of-seville 4 Apr Doctorum 2 Tim 4:1-8 / Mt 5:13-19
vincent-ferrer 5 Apr Conf. non Pont. I Eccli 31:8-11 / Luc 12:35-40
Every value read in three independent places -- both OCR text layers (two
DIFFERENT printings, whose Commune Sanctorum pagination differs by 1-2, so
the data keys on heading plus Mass incipit and never on the bracketed page
number) and the rendered page images. That caught a genuine typographical
error in one printing: it gives St Gabriel's Gospel as "Luc. 2, 26-38" (on
the page image, so not an OCR artefact). Luke 1:26-38 is settled by the
other printing, by the pericope text in both, and by the SAME edition citing
the identical pericope correctly two pages later at the Annunciation.
Step 4 EXECUTES SECOND (order 1, 4, 2, 3), not last as the plan sketched.
Measured: every day on which one of the fifteen is actually the observed
office already has a non-empty step-2 or step-3 answer waiting, so a step 4
placed after the ferial fallback is unreachable on every date in 1583-9999 --
and wrong where it would fire (2038-03-06 would emit Septuagesima II
Saturday's Mass on a day whose office is Sts Perpetua and Felicity). Step 4
is also the only step in the chain with a direct primary-source warrant: the
Missal names the Mass at each such saint's own date, while steps 2 and 3 rest
only on lectio's observed behaviour. Guarded so it can never divert a day
whose observed office IS its temporal office -- ferias, Sundays, the Triduum
and the RG 78 Saturday Office of the BVM (which deliberately shares the
ferial slug) are structurally excluded. Step NUMBERS are unchanged so every
"step 3" already written down still names the same branch.
The Commons are caller-supplied, like the lectionary: `Rite_ef.context` gains
a REQUIRED `~commons`, not an optional one -- a silently-defaulted empty
table would give a rite whose class-3 saints quietly lose their Mass, and
nothing in layers 3-5 compares citations, so that loss would be invisible.
`Commons.load` rejects the four defects indistinguishable downstream from
"this saint has no Common": duplicate common id, duplicate assignment, empty
formulary, assignment naming a common that does not exist.
KNOWN LIMITS, recorded rather than papered over. There is no oracle: lectio
has no readings for these feasts and missalemeum's 2026-2027 window never
observes one of the fifteen. Eight of the fifteen are NEVER the observed
office anywhere in the domain (10-28 March always falls to a Lenten or
Passiontide feria that outranks a III-class feast), so they have no
end-to-end witness and are covered by dedicated table tests instead. The
Commune Sanctorum's own opening rubric permits any Epistle or Gospel of a
Common in any Mass of that Common unless one is assigned, so what is emitted
is the reading PRINTED WITH the named formulary, not the only lawful one;
labelled alternatives (e.g. the widow's Epistle 1 Tim 5:3-10, squarely
available to St Frances of Rome) are noted in the data and deliberately not
encoded. The BVM Common is NOT authored: the RG 78 Saturday Office shares the
ordinary ferial slug, so assigning a Common to it would hand the BVM Mass to
every feria sharing that slug; routing it needs a subject-keyed lookup and a
season-keyed choice among the Missal's five "Missae de sancta Maria in
sabbato" -- new behaviour, not new data. It currently emits its feria's Mass,
now pinned as such.
Blast radius, measured (git archive HEAD binary vs HEAD, full 1583-9999
`colitur day` sweep, diffed): ZERO differing lines, 3 074 246 lines each
side, byte-identical -- the CLI prints no citations, so this change is
invisible to layers 2-5 by construction, and the sanctoral overlay perturbed
nothing else.
357 tests green (344 before), 358 with the exhaustive sweep. Mutation-tested
six ways, all reverted after confirming: relegating step 4 to last reddens
exactly the four step-4 pins and nothing else; corrupting a Common's citation,
dropping an assignment, dropping a proper Edit, and corrupting either an
unreachable proper or an unreachable Common each redden their own pins. The
load-bearing assertion is stated over the loaded layer rather than a
hard-coded list: every sanctoral entry that can ever BE the observed office
now has either a proper or an assigned Common -- fifteen failures before,
zero after, and a future re-bootstrap adding a readingless class-3 feast
fails there instead of silently emitting its feria's Mass.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Critical (coordinator review): a clean `dune build` produced a `colitur`
that died at startup on EVERY subcommand, including ones touching no
lectionary data at all. Root cause was two-fold: data/ef/lectionary.sexp was
never added to the root default-build alias (only materialised as a side
effect of the test suite's own deps, which is why every check in the prior
report passed), and Rite_ef.context loaded it as a module-init side effect
via failwith, undoing Lectionary.load's own "never raises" promise at a
point no caller could catch.
Fixed structurally: Rite_ef.context is now a function taking ~lectionary,
Lectionary_ef.readings takes ~lectionary, and neither touches the filesystem
any more -- the same caller-supplied discipline the sanctoral layer already
had, restoring rite_ef.mli's own pre-existing claim about it and leaving a
seam for a future diocesan lectionary overlay. bin/main.ml grows
load_ef_lectionary, a sibling of load_ef_layer, routed through the same
colitur: %s / exit 2 path. data/ef/lectionary.sexp added to the root default
alias. Every caller of Rite_ef.context updated to supply it.
Also: two new tests that genuinely distinguish chain step 1 from step 2
(19 March 2026, Joseph's own proper over a competing temporal entry; 13
January 2030, Holy Family reached only through the temporal slug, the
Baptism entirely absent) -- the prior two tests both survived swapping the
chain order. Both new pins verified directly against the real data. The
chain's own comment now states plainly that its warrant is lectio's observed
behaviour, not a confirmed Missal citation, per the rules register's own
open item.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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->450
from the observed-day counts, M21 20->18, M15 17->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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
test_precedence_ef.ml: a privilege_cases row for RG109(f), deliberately
rank Class4 so it cannot pass via the pre-existing "of a I-class day"
branch by accident. Three disposition_cases rows: the two RG80 trigger
shapes (Transfer, not Commemorate) and a synthetic third row proving the
winner-slug guard is specific to the two named trigger days, not "any
I-class winner". Two transfer_target unit tests, both using a pathological
always-blocking occupant to prove no RG96 search runs at all for this
candidate -- a much stronger witness than a cooperative occupant, which
could pass by accident.
test_golden.ml: three new pinned tests through the real data pipeline --
the ordinary case (2026-04-25, matches the oracle's own M5 date), the four
Sunday-displacement years in 2005-2050 (2010, 2021, 2027, 2032, RG111(b)),
and the Easter-Monday transfer shape (2011, complementing the
Easter-Sunday shape already pinned by the existing 1666/2038 Easter-extreme
tests, now widened to include the transfer and its target).
test_rite_ef.ml: the existing "no transfer lands inside the Easter octave"
property gets a named, cited exemption for the Major Litanies (RG80's own
deliberate exception), plus a positive companion test asserting the
exemption is not vacuous (exactly two landings in 2005-2050, both
Easter+2). That companion test was written but never registered in its
own suite list -- caught while mutation-testing the transfer (a mutation
that should have failed it passed silently); fixed by registering it.
Mutation-tested, each of the three parts separately (recorded in the
task's own report): moving the data entity off 25 April fails 7 tests
(golden + oracle only -- zero unit tests, since they build synthetic
candidates); corrupting the transfer's winner-slug guard fails 6 (the two
disposition_cases rows, 3 golden pins, and the newly-registered
transfer-count test); flipping the privilege to Ordinary fails 9
(privilege_cases, the disposition SYNTHETIC row, the oracle's count pin,
5 golden pins, and the exhaustive Validate property sweep).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The BVM Saturday Office is itself "de B. Maria Virg."; RG 112(d) (Caput
XVI, "De Commemorationibus") excludes another commemoration whose own
oration invokes the SAME BVM's intercession. our-lady-of-mt-carmel (16
July, Commemoration_only) was wrongly admitted as an ordinary
commemoration alongside the Office on every 16-July-Saturday -- its own
collect explicitly invokes "her" (eius) patronage, and both photographic
scans print a rubric anticipating exactly this collision (an either/or
of Mass texts, not a joint commemoration).
Precedence_ef gains marian_slugs (a closed, hand-verified list of
sanctoral slugs that are themselves feasts of the BVM) and is_bvm_office
(true for subject = Bvm OR a marian_slugs member -- the disjunction is
load-bearing: the Office is identified only by subject, since its own
slug is deliberately reused from the ordinary ferial fallback; Mt Carmel
is identified only by the list, since its own subject tag is Saint, not
Bvm). disposition gains a new branch, checked before the pre-existing
Commemoration_only catch-all, since the one live witness is
Commemoration_only and that branch's own "always Commemorate" had no
exception for this shape.
Checked exhaustively against every Marian-named sanctoral entry: only
Commemoration_only-status entries can ever reach this branch live (a
Feast-status one always wins outright instead of losing). Of the two
such entries in the data, only Mt Carmel is reachable --
our-lady-of-ransom (24 September) is provably unreachable: 24 September
falling on a Saturday forces 1 September to a Thursday, which by
construction makes 24 September the September Ember Saturday, Class2,
every time, not a sampled coincidence.
Re-measured against the full pre-change binary: the original 75,853-day
blast radius is unchanged in total, splitting into 74,633 colour-only +
1,220 colour+comms (16-July Saturdays). Mutation-tested: exactly 3 new
tests redden, nothing else.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Entry 27's band branch has been unreachable for the right reason since
it was written: precedence_ef.ml's own comment on it acknowledged the
row existed, but the one test exercising it built a hand-typed
candidate, never a real Temporal_ef.temporal output, and nothing built
the office itself. Closes that gap on both sides:
- The band-table row now sources its candidate from Temporal_ef.temporal
directly (of_temporal), the same review-finding-3 discipline the
Ember/vigil rows already use, so a future regression in the office's
own construction fails this row too, not only the unit-level test.
- Two new resolve-level end-to-end tests, using the real band/
disposition/admit triple (not stubs): the office winning a real
otherwise-unoccupied Saturday and admitting an ordinary commemoration
alongside it (1 August 2026, Holy Machabees -- the task brief's own
worked oracle example), and the office genuinely losing to a real
competing feast and being omitted under RG 26, with no confusion from
the one live data witness that also carries subject Bvm (12 September,
Most Holy Name of Mary) -- proving RG 26's rank-keyed omission fires
before any subject-keyed rule ever could.
- Two golden pins mirroring the same two dates, checked by hand against
`colitur day 2026` before being typed in, following this file's own
"a golden test blesses whatever it is given, verified independently"
discipline. The existing 2038-03-06 pin (RG 91 entry 24 outranking a
Class4 candidate) is corrected in passing: that date is itself a
Saturday, so the displaced candidate the pin's own omitted-list check
names is now precisely entry 27's own shape, not entry 28's bare
catch-all -- the win/lose outcome the pin proves is unchanged, only
its own more precise citation.
Mutation-tested (recorded in the task report): reverting
is_bvm_saturday to a constant false reddens the dedicated unit test, the
new end-to-end resolve test, and the 2026-08-01 golden pin, while
leaving the 2026-09-12 "loses to a real feast" pin untouched, exactly as
expected since that date's outcome never depended on the fix.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two corrections from the fix-round review, both to the record.
"Sabbato Sancto" is attested zero times in either photographic scan. The
scans print SABBATO SANCTO as the heading (once) and "Sabbato sancto" as
the running header (28x and 30x); the shipped casing appears only in the
electronic transcription's table of contents -- the source this
project's own methodology rule deprecates -- while the comment beside it
called the value "both photographic scans, word for word". Recased to
the running-header form, which is the convention the other three Latin
names in the file already follow, with a source note recording the
count. Third source-fidelity slip this week, and the first where the
wrong value came from the deprecated source itself.
The Major Litanies deferral was recorded with two false blockers. It
claimed a kernel signature extension was needed to suppress the feast in
transfer years: admit already takes ~temporal and disposition already
takes ~winner, both carrying the Easter office on 25 April, so a
rite-local slug test does it with zero kernel surface. And it implied
Easter Monday is unmarkable: ef-easter-1-monday occurs exactly 8417
times in 8417 years, as reliable as ef-easter-sunday. So the guarded
build -- never scored -- is a strict improvement, 8223 years newly
correct against 194 unchanged, and "worse than the gap" was true only of
the unguarded one.
Deferring is still right, for a reason nobody had found: 25 April is St
Mark, II class, so under RG 111(c) a privileged Litanies commemoration
would displace the day's existing ordinary commemoration in ~97.7% of
years -- an unmeasured blast radius through layers 3 and 4. That
measurement is the prerequisite. The 194 figure is exact and reproduces.
Also corrects a subject-audit list that named five months for six
entries, omitting the Precious Blood on 1 July.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Holy Thursday, Good Friday and Holy Saturday resolved to the generic
Passiontide ferial slugs with no distinct identity of their own -- rank
and colour were already correct (RG 91 entry 2; Holy Thursday's white
per RG 128(b)/RG 122), only Celebration.names/subject were missing.
Keeps the slug (RG 91 entry 2 is identified structurally, off rank and
Easter offset, by Precedence_ef.band -- never off the slug -- so
renaming it would touch precedence for no reason and break the lectio
differential's own slug mapping for these three lectionary keys, the
same reasoning already given for Holy Family/Holy Name). Carries the
identity in Celebration.names instead, the same treatment those two
established: Latin, not English, to avoid reading the oracle this axis
is compared against.
Names sourced from both photographic scans, word for word, corroborated
by the electronic transcription's own table-of-contents-style listing at
the identical three headings (three-way agreement, nothing to
adjudicate): "Feria V in Cena Domini" (Holy Thursday), "Feria VI in
Passione et Morte Domini" (Good Friday -- not the transcription's own
informal "Feria VI Parasceve" used in passing elsewhere), "Sabbato
Sancto" (Holy Saturday).
Also tags subject = Lord, going further than Holy Family/Holy Name
strictly required (they needed it only because band's entry 14 reads
subject to outrank a colliding fixed feast; entry 2 here needs no such
thing). Safe: disposition's RG 112(a) branch only fires when both sides
of an occurrence are tagged Lord, and no Lord-subject sanctoral entry
has a fixed civil date inside Holy Week's own movable range; any Class1
sanctoral entry landing there (e.g. a transferred Annunciation) reaches
disposition's earlier, subject-blind Transfer branch first regardless.
Verified against the full 1583-9999 domain: zero
observed/commemorations/transferred_* difference traceable to the tag.
test_golden.ml's describe gains a name_la field alongside subject, for
the same reason subject was added: a names-only change is otherwise
invisible to every pin whose rank/colour/slug are already correct (this
task's own catalogued vacuity flavour #1). Six existing pins move from
subject=temporal to subject=lord (the three Easter-extreme Holy Saturday
pins, 2016's Good Friday, and the 2026 Holy Thursday/Good Friday pair);
the rest gain name_la=- by construction (no other temporal-cycle
candidate carries a name yet).
Mutation-tested: reverting temporal_ef.ml alone (keeping the tests)
reddens the new Rite_ef unit test plus five golden pins across two
independent layers.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 110(c), word for word: "quoties vero oratio unius Apostoli addenda
est ad modum commemorationis, huic orationi additur altera immediate,
ante omnes alias commemorationes." "Huic orationi" (dative, "to this
oration") refers to the trigger's own oration; "additur altera" means
the companion is added to it, i.e. follows it. "Ante omnes alias
commemorationes" governs the pair's position relative to other,
unrelated commemorations, not the pair's own internal order. The
previous build prepended the companion uniformly in both RG 110
shapes, citing this same clause for both -- correct for (a)/(b) (the
day's own oration, not a list member, has nothing to order against),
backwards for (c), where the trigger is itself a list member and the
companion belongs after it. Fixed in rg110_additions: shape (a)/(b)
still prepends; shape (c) now splices the companion in immediately
after its own trigger. Re-pinned the unit test that had asserted the
wrong order, and corrected both rows' comments to cite the clause that
actually governs each shape.
No layer in this codebase compares commemoration order: the lectio
differential never compares commemorations, the oracle sorts both
sides into a multiset, and the golden tests' own describe function
sorts its commemorations field too. Recorded as a new, permanent blind
spot in CLAUDE.md and the register, not merely fixed around -- the
admit_cases unit table is the only place order is asserted at all.
Re-measured the full blast radius against the same pre-change binary:
same 14,627 differing days, same four shapes and counts, confirming
the fix changed only the content of the 593 shape-(c) rows and nothing
else. Mutation-tested: reverting the splice back to a uniform prepend
reddens exactly the shape-(c) unit test; a new golden pin for a real
shape-(c) day (2004-02-22) stays green under the same mutation, living
proof that golden pins cannot see this axis, not merely a claim.
Separately, M19's own predicate checked a date and a diff shape but
not which candidate -- proved insufficient by fabricating a second,
bogus companion on 30 June and confirming the whole suite stayed
green. Fixed by requiring the admitted commemoration to be exactly
commemoration-of-st-peter, mirroring C16's own identity guard. Added a
golden pin for 30 June, the only assertion of that entry's identity
outside the allow-list.
Also: corrected a false claim in the task report that the electronic
transcription carries no corroboration of the Holy Name fallback --
its own table of contents does, at a line not checked on the first
pass. Added two further citations, both re-verified against the scan:
RG 17's own closing paragraph, settling the Sunday shape's Sunday-
exclusion at the rubric level rather than only in the propers; RG
124(c), which assigns red to 30 June by paragraph number rather than
by the generic apostle/martyr default. Noted the fragility of deriving
the Sunday shape's RG 109(a) privilege from a slug-substring match
rather than from a citation. Cosmetic: a stray blank line and an
indentation inconsistency.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 17(a): "festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit
a die 2 ad 5 ianuarii (secus die 2 ianuarii)" -- both photographic scans,
confirmed on the calendarium's own January table and the Mass propers'
own heading. Two defects closed together, since they interact through
RG 91 entry 14/RG 16(a):
1. The Sunday shape (2-5 January) now tags subject = Lord, matching
RG 91 entry 14 ("Festa Domini II classis") -- previously subject =
Temporal, the same defect shape Holy Family had before it.
2. The fallback (RG 17(a)'s own "secus die 2 ianuarii", the calendarium's
"vel, ea deficiente, die 2 ianuarii") is now built: 2 January carries
the feast whenever no Sunday falls 2-5 January that year. Before this
fix colitur emitted no Holy Name office at all in such a year -- a
real II-class feast simply missing, on 3,619 of 8,417 years in the
domain (43%; 20 of the 46 years 2005-2050, independently re-derived
against `date -d`).
Both shapes band identically at RG 91 entry 14's MOVABLE half
(Precedence_ef.entry_14_movable_band) -- one feast, not two differently
classified ones, per the Mass propers' own single heading covering both
dates. No live collision exists in the current sanctoral data (nothing
fixed-date falls 2-5 January besides a Commemoration_only entry on 5
Jan), so the RG 16(a)/RG 112(a) interaction is proved with synthetic
precedence-level fixtures mirroring Holy Family's own precedent, not a
live-data regression. One asymmetry the synthetic tests found and kept
honest rather than forced: a losing Holy-Name-Sunday is privileged
(RG 109(a), "of a Sunday") and survives RG 111(a)'s cap; a losing
Holy-Name-fallback is not (2 January is not a Sunday, and no other
RG 109(a)-(f) category applies to it), so it gets no commemoration at
all if ever outranked -- both individually correct readings of RG 109/111's
closed lists.
Golden pins follow the brief's own vacuity warning: the Sunday shape
already emitted the right slug/rank/colour before this fix (an ordinary
Sunday and Holy Name coincide on those fields), so its pin asserts
subject explicitly rather than pinning the whole line uncritically; the
fallback pin (2029-01-02) is the one with teeth against the larger
defect, reddening on slug/rank/subject together if reverted.
Mutation-tested: each half of the fix reverted separately reddens
exactly its own tests (Sunday subject: the dedicated unit test, the
golden pin's subject field, one precedence end-to-end test; fallback:
the fallback unit/anchor/golden tests, the new C16 differential count,
and both shapes of the precedence end-to-end tests) and nothing else.
Adds data/ef/expected-divergences.sexp's C16 (lectio has no fallback for
this window at all) -- the lectio differential's own count, independently
re-derived against `date -d` for the fixture's 2005-2050 span, not
transcribed from the domain-wide figure. The missalemeum oracle window
(2026-2027) exercises only the Sunday shape and needed no new entry:
subject is not one of its compared fields, and both years' rows already
corroborate the Sunday-shape ranking (missalemeum's own 2026-01-04 and
2027-01-03 rows: rank 2, white, title "Holy Name of Jesus").
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG16(a)/RG112(a) key on
Two of the three original Holy Family pins (2026-01-11, ordinary
year; 2024-01-07, earliest possible date) were byte-identical before
and after temporal_ef.ml's own fix. Reverting the feature failed only
the 2030-01-13 collision pin -- describe omitted subject, the ONE
field the change actually touches on an ordinary (non-collision)
year, so those two pins asserted an ordinary Sunday's identity and
called it Holy Family. Vacuity flavour #1 (an assertion already true
before the code under test ran), not #8 (promoted from actual
output) -- the other nine fields' values were independently sourced
and remain so.
subject added to describe's own formatted line. Every existing golden
pin's expected string updated to match -- each value independently
sourced (grep data/ef/sanctoral.sexp for the sanctoral-origin pins;
Temporal for every ef-* temporal slug) before running the suite to
verify, not copied from actual output and rationalised afterward. All
matched on the first attempt.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
An ordinary year (2026-01-11, no fixed-date competitor), the latest
possible date and the one 13-January collision (2030-01-13, the
fixed Baptism of the Lord excluded entirely by RG91 e14 + RG112(a)),
and the earliest possible date (2024-01-07, Epiphany a Saturday) --
proving RG 17(b)'s own 7-13 January window at both ends, not only
its middle. Every field independently traced against the primary
text before typing it in, per this file's own header rule: season
stays christmastide (RG 72-73, unaffected by which Sunday of it this
is), week stays unset (Christmastide has no numbered weeks at all),
slug is unchanged from the plain Sunday key this date always carried
(temporal_ef.ml's own comment on why RG 17(b) needs no new
lectionary key), rank II class, colour white. Each weekday
independently cross-checked against "date -d <iso> +%A" (GNU
coreutils).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
are silent
The comment on test_iii_class_feast_wins_class4_feria gave a single reason
for why 8 of the 15 rank-corrected slugs produce zero diff rows anywhere in
the domain: "always fall inside Lent/Passiontide proper, RG 91 entry 22,
which already outranks entry 24". Wrong for 3 of the 8: gabriel-the-
archangel (24 Mar), john-damascene (27 Mar) and john-of-capistrano (28 Mar)
land in Paschaltide 226/846/1108 times domain-wide, always at class-1
(inside the Easter Octave, RG91 entry 2/10), never entry 22.
The conclusion (zero diff rows) was and remains right; only the reason was
wrong -- exactly the "correct code, wrong explanation" defect this project
has repeatedly caught before. Corrected to the actual, checked shield:
every context these 8 dates ever land in domain-wide is either class-1/2
(trivially outranking any class-3 candidate and excluding it from
commemoration by RG111's own rank floors, regardless of status) or the
season's own class-3 feria at entry 22 (which outranks entry 24 for
observation but admits the losing saint's commemoration identically
whether Commemoration_only or Feast, RG111(c)/(d) having no ferial-class
gate on an ordinary sanctoral candidate).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
2008-04-02/04/05 and 2038-03-06/08/09 are the six dates the re-bootstrap's
own brief named as producing a wrong observed office under the old data
(a III-class feast wrongly demoted to Commemoration_only, unable to win
against an ordinary class-4 feria it should trivially outrank). Verified
against the Missal before pinning, per this file's own rule: RG 91 entry 24
("Festa III classis, in calendario Ecclesiae universae inscripta")
outranks entry 28 ("feriae IV classis"), a plain, unqualified table
reading, and the calendarium text for all six was already primary-verified
in the register before this task ran -- only the data was wrong.
Each pin proves the mechanism, not merely the answer: an omitted_has check
(one per season family, Paschaltide and Septuagesima) confirms the
displaced class-4 feria actually reached disposition and was actively
excluded under RG26, not merely absent because nothing was ever offered.
test_easter_extreme_2038_late_modern's own header previously recorded these
three March dates as a DELIBERATE EXCLUSION because they were known wrong;
corrected in place to point at the now-existing pin instead of continuing
to justify an exclusion whose reason no longer holds.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
day's own Sunday-ness, not observed
Fix round 1 review, two findings landed together because each golden pin's
correctness depends on both.
CRITICAL (item 1): reverts this branch's own first-pass retag of the
Purification (2 February) from Lord back to Bvm -> Lord. The calendarium
titles it 'B. Mariae Virg.', but missalemeum -- this project's designated
EF oracle -- treats it as taking an occurring II-class Sunday's place
outright, commemorations empty, exactly RG16(a)'s own festum Domini
treatment (2020-02-02, 2014-02-02, independently fetched). Control,
2019-09-08 (the Nativity of the BVM, an ordinary Marian feast, on a
Sunday): the Sunday observed, the feast merely commemorated -- the
opposite pattern, proving the Purification's own oracle treatment is
deliberate, not a gap. RG16(a) alone, on the untouched data, would have
matched the oracle character for character; retagging Bvm is what moved
colitur away from it on 1200 domain-wide days. The user has ruled: follow
the oracle. Genuine primary-text counter-evidence (RG120(b), the colour
rule grouping 2 February under 'B. Mariae Virg.', a category separate
from 'Domini') is recorded in the register, not discarded -- a different
project could reasonably rule the other way on the same evidence.
most-holy-name-of-mary stays retagged Bvm; that one was never disputed.
Removes the now-unneeded C12 lectio allow-list entry (data/ef/
expected-divergences.sexp, test_differential.ml): with the Purification
Lord again, colitur matches lectio's own class = lord on every affected
date, no divergence to allow-list.
IMPORTANT (item 2): Precedence.rules.admit gains a ~temporal parameter --
a genuine kernel signature change, unlike RG16(a) itself. RG111(b)'s own
Sunday rank floor ('one commemoration, namely of a II-class feast') used
to be detected by reading observed's own slug for a Sunday marker, which
silently assumed observed IS the day's temporal-cycle office. RG16(a)
breaks that assumption on purpose: a Feast of the Lord standing in for an
impeded Sunday 'cum omnibus iuribus et privilegiis' keeps the day a
dominica II classis for RG111(b) too, even though the FEAST, not the
Sunday, is observed. Before this fix an unrelated saint (Pope Sixtus II
et al., 6 August, Class3) was wrongly admitted into the freed slot on
every one of 1178 domain-wide days. Oracle-confirmed directly: 2023-08-06
(a Sunday) shows him displaced, commemorations empty; 2026-08-06 (an
ordinary Thursday) shows him admitted -- being a Sunday is exactly what
excludes him. admit now reads Sunday-ness off ~temporal (the day's own
temporal-cycle candidate, passed through from Precedence.resolve
unchanged) instead of observed. Validate's own admission fixed-point
invariant updated to pass the same real temporal candidate through.
Both golden pins in test_golden.ml were promoted from actual colitur day
output without independently consulting the rubric or the oracle first --
a real defect the review caught. Re-derived from both before re-pinning:
2028-08-06 and 2025-02-02 now pin comms=[], no commemoration at all,
matching missalemeum exactly in both cases.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two real dates, hand-verified against the rubric before pinning
(test_golden.ml's own discipline): 2028-08-06, the Transfiguration
suppressing an ordinary Sunday's commemoration entirely (with an
unrelated III-class saint the same fixed date, Pope Sixtus II et al.,
still getting its own ordinary commemoration -- proof the rule targets
the Sunday specifically, not every commemoration due that day); and
2025-02-02, the corrected Purification -- the Sunday observed, the
Purification surviving as an ordinary commemoration, the exact opposite
of what RG16(a) would have done to it before the data fix.
Re-ran the exhaustive sweep (COLITUR_EXHAUSTIVE_SWEEP=1 dune test
--force): 1583-9999, 0 failures, including the resolution invariants
that now see RG16(a)'s changed commemoration accounting.
|
|
|
Validation layer 5: fourteen hand-verified pins in test/test_golden.ml,
wired into the suite via test/test_colitur.ml. Each pinned day was computed
and checked against its RG citation before being written down, never
transcribed from `colitur day` output:
- Easter extremes 1598 (earliest, 22 Mar), 1666 (latest, 25 Apr) and 2038
(late-modern instance of the same latest date) -- all three independently
computed by hand via the Gauss/Meeus Gregorian Easter algorithm, not read
off Computus.gregorian_easter. extreme_years in test_validate.ml already
established 1598/1666 as the true 1583-2500 extremes (correcting a stale
1818/2038 comment); this file pins the resolved DAY there, not just the
date.
- Annunciation transfer, 25 March inside Holy Week (2016: 25 March is
literally Good Friday) and the double transfer with St Joseph (2008:
RG96's Attamen(a) claims Easter+8 for the Annunciation first, Joseph's
own RG96 walk continues past it to the next day).
- The RG96 Attamen(a) exception's own CONDITION pinned on both sides: 2057,
2007, 2012 (general walk suffices, lands before Easter, no exception) vs
2016/2024 (walk would cross Easter, Easter+8 fires).
- 2011-07-04, the Precious Blood transfer (Sacred Heart outranks it
outright on 1 July; the RG96 walk skips Visitation and a Sunday before
landing on 4 July).
- All Souls falling on a Sunday (2025, RG96 Attamen(b)) and Christmas
falling on a Sunday (2022, RG91 entry 1 -- no contest, since 25 December
is never an ordinary Sunday candidate in the EF temporal cycle).
- Holy Thursday's white amid violet Passiontide (2026, RG128(b)/RG122) --
the case colitur and lectio previously agreed was violet, so the
differential could never have caught it; only a golden pin or the
missalemeum oracle can.
- Advent/Lent Ember ferias commemorated when impeded (1900, 1902, RG24 +
RG109(e)) contrasted with IV-class ferias never commemorated (2026,
RG26) and RG111(b)'s Sunday rank floor (2009, 2026) -- all three assert
the actual displaced/excluded candidate is present in `omitted`, not just
that `commemorations` is empty, so a day with no losing candidate at all
could not pass vacuously.
2038 is deliberately NOT pinned day-by-day: register item F4 confirms
2038-03-06/08/09 are wrong (a lectio bootstrap-generator defect, not
fixable here). Only the Easter-week days, untouched by that bug, are
pinned; the exclusion is stated in the test's own comment, not silent.
Every weekday asserted was independently cross-checked against `date -d
<iso> +%A` (glibc, wholly outside this codebase) before being written down.
Precedence outcomes were traced against precedence_ef.ml's own band/
disposition/admit/transfer_target, not merely observed to look plausible;
where the primary text alone doesn't fully settle an outcome (the 2008
Annunciation/Joseph tie-break, both landing at RG91 table entry 11), the
test's own comment says so rather than overclaiming a citation.
Perturbation-tested: temporarily broke Holy Thursday's white-colour special
case in temporal_ef.ml, confirmed the golden test failed with a clear
day-and-field diff, reverted.
|