summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-24 16:29:23 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-24 16:29:23 +0200
commit8a5da8756cf6b57aa36c01b71ce893f7967d3a29 (patch)
tree10873a692400fa25ce54c67ac9fc34d46af86272 /data
parent4f87cbde4ee79ac96aa7ebfed105b3a5ec02be43 (diff)
parent73b15551804bb63ee0081005e2869d36afb54be2 (diff)
downloadcolitur-8a5da8756cf6b57aa36c01b71ce893f7967d3a29.tar.gz
colitur-8a5da8756cf6b57aa36c01b71ce893f7967d3a29.zip
merge: celebrant Mass rubrics, and four rubrical corrections
colitur now prints what a real ordo prints for the Mass: which formulary is said and how it was reached, the Gloria, the Creed, the preface, and the commemorations with their Low-Mass/sung distinction. colitur rubrics joins day and readings. Four defects were found and fixed on the way, each by an external witness rather than by inspection: the Creed said at Requiem Masses (RG 476(f)), the missing bissextile shift of St Matthias and St Gabriel (2 041 leap years), Rogation Monday and Tuesday coloured violet in Paschaltide (RG 119(b)), and the ferias after the Ascension resuming the wrong Sunday's Mass rather than the Ascension's. Validation gained a sixth layer and then some: the preface is checked against three independent publishers over seven witness-years (FIUV, three LMS editions, three extraordinaryform.org editions), none of which shares the Divinum Officium -> missalemeum -> lectio lineage the older layers all descend from.
Diffstat (limited to 'data')
-rw-r--r--data/ef/expected-divergences-efdotorg.sexp207
-rw-r--r--data/ef/expected-divergences-fiuv.sexp226
-rw-r--r--data/ef/expected-divergences-lms.sexp446
-rw-r--r--data/ef/expected-divergences-missalemeum.sexp11
-rw-r--r--data/ef/expected-divergences.sexp46
-rw-r--r--data/ef/lectionary.sexp20
6 files changed, 946 insertions, 10 deletions
diff --git a/data/ef/expected-divergences-efdotorg.sexp b/data/ef/expected-divergences-efdotorg.sexp
new file mode 100644
index 0000000..addecfe
--- /dev/null
+++ b/data/ef/expected-divergences-efdotorg.sexp
@@ -0,0 +1,207 @@
+; data/ef/expected-divergences-efdotorg.sexp -- efdotorg-preface task
+; (2026-08-24-colitur-celebrant-rubrics-phase1)'s cited allow-list for the
+; extraordinaryform.org Ordo preface comparison (test/test_efdotorg_ordo.ml),
+; three editions (2024-2025, 2025-2026, 2026-2027), 1091 day-rows total.
+;
+; A SEPARATE file from data/ef/expected-divergences.sexp (lectio),
+; data/ef/expected-divergences-missalemeum.sexp (missalemeum/Divinum-
+; Officium lineage), data/ef/expected-divergences-lms.sexp (Latin Mass
+; Society, England & Wales, Peter Day-Milne) and
+; data/ef/expected-divergences-fiuv.sexp (FIUV, universal, Joseph Shaw):
+; this is a FIFTH lineage, a third distinct publisher/compiler.
+;
+; Two things resolved BEFORE any divergence below was adjudicated, per the
+; task's own "characterise first" discipline -- neither is an allow-list
+; entry, because neither is a disagreement:
+; - "Advent" is not a static mapping (RG 494(b) grants Trinity on every
+; Advent SUNDAY, RG 498 the residual Common on every Advent FERIA) --
+; see tools/extract_efdotorg_ordo.py's own header, finding 3, and
+; test_efdotorg_ordo.ml's own [classify_praef]. Zero mismatches.
+; - The "Christ the King" classifier gap in parse_ordo.py's own hardcoded
+; PREFACES set is RECOVERED in the fixture generator (finding 2), not
+; allow-listed.
+;
+; Of 1088 comparable rows (1091 minus Good Friday x3 minus the one source
+; gap, 2027-03-03), 11 diverge, all found ONLY after building
+; tools/extract_efdotorg_ordo.py's own Rule A (finding 6: "Saturday of Our
+; Lady", whenever listed, IS the office, checked exhaustively across all
+; 38 instances in the corpus) -- without Rule A the apparent divergence
+; count was far higher (dominated by the BVM-Saturday-Office population),
+; which is why Rule A belongs in the generator, not the allow-list: it is
+; a general, well-evidenced STRUCTURAL rule, not a per-date adjudication.
+;
+; The 11 residual rows resolve to exactly SEVEN root causes, E1-E7 below.
+
+; E1 -- colitur correct. "Our Lady of Mt. Carmel" (16 July) is
+; `Commemoration_only` status in data/ef/sanctoral.sexp (confirmed
+; directly: `grep our-lady-of-mt-carmel data/ef/sanctoral.sexp`, and
+; already cited elsewhere in this codebase --
+; lib/rites/rite_ef/precedence_ef.ml's own `marian_slugs`/RG112(d)
+; citation names it explicitly), so it can NEVER be the day's own
+; OBSERVED office in colitur's model -- only ever a commemoration. This
+; source nonetheless lists it as a standalone Mass option (the same
+; "priest's menu, not office order" convention
+; .superpowers/ordo-class-report.md already established for the votive
+; Requiem population), with the day's real office (an ordinary feria/
+; resumed Sunday) listed alongside, its own `comms` field naming Mt
+; Carmel as what IT commemorates -- exactly matching colitur's own
+; `+our-lady-of-mt-carmel` commemoration on all three dates. Fires once
+; per edition, unchanged: 2025-07-16, 2026-07-16, 2027-07-16.
+((id E1) (citation "RG91 table (Commemoration_only has no table row); data/ef/sanctoral.sexp")
+ (verdict colitur)
+ (note "Our Lady of Mt Carmel (16 July) is Commemoration_only-status data, never the observed office; the corpus lists it as an optional votive Mass regardless. Fires 2025-07-16, 2026-07-16, 2027-07-16 (one row per edition).")
+ (expected_rows 1))
+
+ ; E2 -- colitur correct, the SAME shape as E1. "Our Lady of Ransom" (24
+ ; September) is also `Commemoration_only` status
+ ; (data/ef/sanctoral.sexp), and CLAUDE.md's own record already notes it
+ ; "forces the September Ember Saturday every time, by construction" --
+ ; confirmed live here: the true office on every instance checked (2025,
+ ; 2027) is the September Ember day itself (Ember Wednesday/Friday), with
+ ; Ransom correctly reduced to ITS OWN commemoration -- matching colitur
+ ; exactly and producing NO divergence those two years. Only 2026-09-24
+ ; diverges, because that entry happens to be listed first in the
+ ; option list with an empty comms field of its own while the true
+ ; office (the Ember Saturday) is a separate, later entry -- the same
+ ; "named votive Mass listed ahead of the real office" shape as E1, just
+ ; without a Saturday-of-Our-Lady-style structural marker to catch it
+ ; generically.
+ ((id E2) (citation "RG91 table (Commemoration_only has no table row); data/ef/sanctoral.sexp; September Ember Saturday, RG26")
+ (verdict colitur)
+ (note "Our Lady of Ransom (24 September) is Commemoration_only-status data; the September Ember Saturday always wins the day outright. Fires once, 2026-09-24 (2025 and 2027's own 24 September already match colitur without needing this entry -- the Ember day is listed first there).")
+ (expected_rows 1))
+
+
+ ; CORRECTED 2026-08-24 (coordinator): this entry reasoned correctly and
+ ; then recommended the opposite. It concludes, rightly, that the feast was
+ ; "never added to the GENERAL calendar" -- and then proposes it as a
+ ; candidate for CLAUDE.md's list of sanctoral entries MISSING from
+ ; colitur's universal data. Those cannot both be true, and acting on the
+ ; recommendation would be a REGRESSION: adding a particular-calendar feast
+ ; to the universal core is precisely what binding decision 2 forbids
+ ; ("any community's proper is an overlay, never core").
+ ;
+ ; The Missal settles it from the primary source rather than from general
+ ; knowledge of the 1830 apparition. BOTH feasts named in E3 and E4 appear
+ ; in the Missal under its own heading "Missae pro aliquibus locis" --
+ ; Masses FOR SOME PLACES:
+ ; docs/research/scan1.txt:52019, 52077, 52129
+ ; "Missae pro aliquibus locis (B. M. V. Immaculatae a sacro Numismate)"
+ ; docs/research/scan1.txt:48793
+ ; "Missae pro aliquibus locis (S. Ioannis Ap. et Ev. ante Portam Latinam)"
+ ; This is the Missal's OWN classification, and it is the same structural
+ ; test the register already relies on for universality: the calendarium
+ ; carries no "pro aliquibus locis" marker in its own lines, while the
+ ; wider Missal carries the marker elsewhere for exactly this class of
+ ; feast.
+ ;
+ ; So E3 and E4 are NOT sanctoral gaps and are NOT candidates for any
+ ; missing-entry list. They are particular-calendar feasts that colitur
+ ; correctly excludes from the universal core, and that belong in an
+ ; overlay -- the shape data/ef/examples/poland.ini and benedictine.ini
+ ; already demonstrate. The ordos carry them because those ordos serve
+ ; communities that keep them. Verdict [colitur] is unchanged and now rests
+ ; on the Missal's own words.
+
+ ; E3 -- colitur correct (a genuine sanctoral DATA GAP, not a rule bug).
+ ; "Our Lady of the Miraculous Medal" (27 November) does not appear
+ ; anywhere in data/ef/sanctoral.sexp (`grep -i medal` / `grep -i
+ ; miraculous`: zero hits) -- CROSS-CONFIRMED independently by BOTH
+ ; already-validated witnesses on the identical civil date: the FIUV
+ ; Ordo (test/fixtures/fiuv-ordo-2025-2026.sexp, 2025-11-27: plain
+ ; "IV cl." feria, "comm.") and the LMS Ordo (both the 2023-2024 and
+ ; 2024-2025 editions, 2024-11-27/2025-11-27: "Mass of 24th & Last
+ ; Sunday After Pentecost", "Common Pr") show no such feast at all. Not a
+ ; feast of the UNIVERSAL 1962 General Roman Calendar (the Miraculous
+ ; Medal apparition, 1830, is a devotional/particular-calendar
+ ; commemoration in some places, never added to the GENERAL calendar) --
+ ; worth flagging alongside CLAUDE.md's own existing list of missing
+ ; sanctoral entries (Agnes secundo, Boniface 14 May, Evaristus,
+ ; Theodore) as a FIFTH candidate, but NOT fixed here: out of this task's
+ ; own scope (preface-comparison wiring, not sanctoral completeness), and
+ ; unlike those four, this one is independently corroborated as
+ ; genuinely absent from the UNIVERSAL calendar, not merely missing from
+ ; colitur's own bootstrap. Fires 2025-11-27, 2026-11-27 (one row per
+ ; edition where it recurs; 2027-11-27 does not reach this entry at all).
+ ((id E3) (citation "data/ef/sanctoral.sexp (no entry); cross-confirmed absent in both the FIUV and LMS Ordos on the same civil date")
+ (verdict colitur)
+ (note "Our Lady of the Miraculous Medal (27 November) is genuinely absent from the universal 1962 calendar colitur models -- not merely a colitur bootstrap gap. Fires 2025-11-27, 2026-11-27.")
+ (expected_rows 1))
+
+ ; E4 -- colitur correct (a second genuine sanctoral DATA GAP). "St. John
+ ; before the Latin Gate" (6 May) is likewise absent from
+ ; data/ef/sanctoral.sexp entirely -- CROSS-CONFIRMED by the LMS Ordo on
+ ; the identical civil date in TWO separate editions
+ ; (test/fixtures/lms-ordo-2023-2024.sexp, 2024-05-06, and
+ ; lms-ordo-2024-2025.sexp, 2025-05-06): both show only "Mass of Nth
+ ; Sunday after Easter", "Pr of Easter" -- matching colitur's own answer
+ ; exactly, with no trace of this feast. A genuine SIXTH candidate for
+ ; CLAUDE.md's known-missing-sanctoral-entries list, not fixed here for
+ ; the same out-of-scope reason as E3. Fires 2025-05-06, 2026-05-06;
+ ; 2027-05-06 does not diverge (that date is a Saturday, and Rule A's own
+ ; "Saturday of Our Lady" preference resolves it correctly without ever
+ ; needing to know this feast is missing).
+ ((id E4) (citation "data/ef/sanctoral.sexp (no entry); cross-confirmed absent in the LMS Ordo (2024-05-06 and 2025-05-06) on the same civil date")
+ (verdict colitur)
+ (note "St John before the Latin Gate (6 May) is genuinely absent from the universal 1962 calendar colitur models. Fires 2025-05-06, 2026-05-06 (2027-05-06 is a Saturday and is resolved by Rule A instead).")
+ (expected_rows 1))
+
+ ; E5 -- colitur correct, extraordinaryform.org is the OUTLIER. St
+ ; Michael's Dedication (29 September) has no dedicated preface among RG
+ ; 484-497's fourteen, so RG 482's chain falls through to RG 498's Common
+ ; -- and this is DOUBLY corroborated already, in
+ ; lib/rites/rite_ef/rubrics_ef.ml's own [preface] header: the FIUV Ordo
+ ; reads "comm. vel de Angelis" and the LMS Ordo reads "Pr of the Angels
+ ; or Common Pr" for this exact feast ("of the Angels" being one of the
+ ; several non-RG-482 "extra" preface names both those sources are
+ ; already documented to carry, alongside the genuine Common answer).
+ ; extraordinaryform.org's bare "Holy Trinity" is a single, uncorroborated
+ ; reading against two independent, already-validated witnesses that both
+ ; agree with colitur. Fires once, 2025-09-29 (the only occurrence in
+ ; this corpus where 29 September is NOT itself a Sunday reaching RG
+ ; 494(b) by a different route -- see E6 for that shape).
+ ((id E5) (citation "RG482/RG498; lib/rites/rite_ef/rubrics_ef.ml's own [preface], corroborated by both the FIUV and LMS Ordos on this exact feast")
+ (verdict colitur)
+ (note "St Michael's Dedication (29 September 2025) has no dedicated preface; colitur's Common answer is independently confirmed by both the FIUV and LMS Ordos (\"... or Common Pr\"/\"comm. vel ...\"). extraordinaryform.org's bare \"Holy Trinity\" is single-witnessed and outvoted.")
+ (expected_rows 1))
+
+ ; E6 -- colitur correct, extraordinaryform.org is the OUTLIER, the SAME
+ ; shape as E5 but for RG 494(b)'s own Sunday grant rather than RG 498.
+ ; All Saints falls on a Sunday in 2026 (confirmed: the corpus's own
+ ; entry carries `comms: ["Twenty-third Sunday after Pentecost"]`,
+ ; matching colitur's own `+ef-time-after-pentecost-sunday-23`), so RG
+ ; 494(b) ("in omnibus dominicis II classis... praefatio de Ss.ma
+ ; Trinitate") grants the TRINITY preface -- independently confirmed by
+ ; the FIUV Ordo on the SAME civil date (test/fixtures/fiuv-ordo-2025-
+ ; 2026.sexp, 2026-11-01: "Trinit. vel de Omnibus Sanctis et Patronis.",
+ ; Trinity again being the genuine RG-482 answer and "of All Saints and
+ ; Patrons" the same kind of non-RG-482 extra E5 already documents).
+ ; extraordinaryform.org's bare "Common" is single-witnessed here too.
+ ; Fires once, 2026-11-01 (the only Sunday occurrence of All Saints this
+ ; corpus's own window covers).
+ ((id E6) (citation "RG494(b); test/fixtures/fiuv-ordo-2025-2026.sexp, 2026-11-01 (\"Trinit. vel de Omnibus Sanctis...\")")
+ (verdict colitur)
+ (note "All Saints falls on a Sunday in 2026, so RG494(b) grants the Trinity preface -- independently confirmed by the FIUV Ordo on the same date. extraordinaryform.org's bare \"Common\" is single-witnessed and outvoted.")
+ (expected_rows 1))
+
+ ; E7 -- a single-row SOURCE DATA INCONSISTENCY, not a rule question.
+ ; 2025-11-29 is a "Saturday of Our Lady" day like the other 37 in this
+ ; corpus (Rule A correctly selects it as the office, matching colitur's
+ ; own BVM answer on office IDENTITY), but this ONE row's own `preface`
+ ; field reads "Common" where every other "Saturday of Our Lady" entry
+ ; in the whole corpus reads "BVM" (checked directly: 37 of 38 read
+ ; "BVM", this is the sole exception) -- an isolated compiler slip in the
+ ; source, not a pattern.
+ ((id E7) (citation "internal corpus consistency check: 37 of 38 \"Saturday of Our Lady\" entries read \"BVM\"; this is the sole exception")
+ (verdict colitur)
+ (note "2025-11-29's own \"Saturday of Our Lady\" entry reads \"Common\" where every other instance in the corpus (37 of 38) reads \"BVM\" -- an isolated source labelling slip, not a rule disagreement.")
+ (expected_rows 1))
+
+; Per-edition agreement, reported separately, never merged (each row count
+; is 364 total minus that edition's own no-praef coverage bucket -- Good
+; Friday plus, for 2026-2027 only, the known 2027-03-03 source gap):
+; 2024-2025: 358/363 (E1 x1, E3 x1, E4 x1, E5 x1, E7 x1)
+; 2025-2026: 358/363 (E1 x1, E2 x1, E3 x1, E4 x1, E6 x1)
+; 2026-2027: 361/362 (E1 x1)
+; Full account: .superpowers/sdd/2026-08-21-colitur-celebrant-rubrics-
+; phase1/efdotorg-preface-report.md.
diff --git a/data/ef/expected-divergences-fiuv.sexp b/data/ef/expected-divergences-fiuv.sexp
new file mode 100644
index 0000000..c8f1e21
--- /dev/null
+++ b/data/ef/expected-divergences-fiuv.sexp
@@ -0,0 +1,226 @@
+; data/ef/expected-divergences-fiuv.sexp -- Witnesses task
+; (2026-08-22-colitur-celebrant-rubrics-phase1)'s cited allow-list for the
+; FIUV Ordo comparison (test/test_fiuv_ordo.ml), fixture window
+; 2025-11-27..2026-12-31.
+;
+; A SEPARATE file from data/ef/expected-divergences-lms.sexp (the LMS
+; allow-list, also third-party but England & Wales diocesan and single-
+; compiler across its three editions), data/ef/expected-divergences.sexp
+; (the lectio allow-list) and data/ef/expected-divergences-missalemeum.sexp
+; (the missalemeum/Divinum-Officium-lineage allow-list): the FIUV Ordo is
+; a FOURTH, independent lineage -- universal, not diocesan, compiled by a
+; different person (Joseph Shaw) than the LMS editions (Peter Day-Milne).
+;
+; [verdict] names which side this task's own primary-source research
+; backs, the SAME convention every other allow-list file in this project
+; uses: not always "colitur".
+;
+; The Creed comparison (Task 6/Witnesses task) found no unexplained
+; divergence anywhere in the 400-day window (399 comparable days, Holy
+; Saturday excluded per test_creed_coverage -- see that test's own
+; citation) and still does not. Phase 2 (celebrant-rubrics-phase1,
+; 2026-08-22) extended this file to two more axes, Gloria and Te Deum --
+; F1 below (Gloria) and F3 (Te Deum). Both prose-only, the same L2/L5/L6
+; convention data/ef/expected-divergences-lms.sexp's own header explains:
+; the real enforcement is test_fiuv_ordo.ml's own predicates and count
+; assertions, not a machine-loaded [id] record.
+;
+; F2 and F4 (Te Deum: every vigil; the three September Ember days) were
+; found, then CLOSED within the same task: tools/extract_fiuv_ordo.ml's
+; own Te Deum parser recognised only ONE of the source's two negative
+; phrasings ("non dicitur Te Deum"), so "sine Te Deum" -- how the source
+; actually negates a Sunday's/vigil's/Ember-day's own Te Deum -- fell
+; through to a bare "Te Deum" substring match and was wrongly read
+; [true]. Fixed in the extractor (its own citation has the full account);
+; the fixture was re-extracted from the SAME pdftotext dump; 24 of 400
+; rows flipped true->false, and colitur's own answer already matched the
+; corrected value on every one of them -- no code change needed for F2/
+; F4 specifically. See test/fixtures/fiuv-ordo-2025-2026.sexp's own
+; "RE-EXTRACTED" note and lib/rites/rite_ef/rubrics_ef.ml's own [te_deum]
+; header (237(a)'s comment) for the fuller account, including a real,
+; separate regression this same fix round found and reverted (a first
+; attempt at "every Sunday says Te Deum" wrongly excluded Christ the
+; King, caught by the LMS Ordo's own Gloria axis, 2024-10-27).
+;
+; F3 was ALSO found to be the same GENUS of extractor bug -- a different
+; PARSER shape (not a negation word, an unbounded scan reading a second,
+; "-VEL-"-separated printed office instead of the primary one) -- and is
+; likewise now CLOSED (l5-f3-readjudication task, 2026-08-22). See F3's
+; own rewritten entry below for the full account, including why the
+; original finding was misadjudicated as "colitur's own gap" rather than
+; recognised as an extraction defect from the start.
+
+; F1 -- OPEN, adjudicated FOR colitur. Fired once: 2026-04-03, Good
+; Friday.
+;
+; The raw source (docs/research/ordo/fiuv-ordo-2025-2026.pdf, page 46,
+; verified directly against the PDF, not merely the extracted fixture):
+; "3. Nig in Actione liturgica usque ad 4am partem, Viol. in S.
+; Communione. FERIA VI IN PASSIONE ET MORTE DOMINI, De ea, I cl. ...
+; Missa pr., (omittuntur ps. Iudica me et Gloria Patri), Gloria, sine
+; Credo, praef. comm." -- read LITERALLY, this states the Gloria IS said
+; on Good Friday. colitur says [false] (RG 432(d)'s own {!Colour.Black}
+; proxy this Mass shares with the Requiem population, {!Rite_ef.Rubrics_
+; ef.gloria}'s own header).
+;
+; ADJUDICATED FOR COLITUR: Good Friday's own liturgical action has no
+; Mass at all in the 1955-restored Holy Week (RG 28's own "non sit dies
+; liturgicus" framing for the Paschal Vigil is the closest parallel this
+; project already cites, {!Rite_ef.Rubrics_ef.creed}'s own RG 28-34
+; comment) -- no Consecration, no Communion under both species by the
+; celebrant, only Communion from the reserved Sacrament. That the Gloria
+; is NOT said on Good Friday is among the most widely and consistently
+; attested facts in the whole of 1962-rite literature (O'Connell,
+; Fortescue, every published Ordo this project has touched, and this
+; author's own independent knowledge of the rite) -- essentially
+; undisputed. The printed "Missa pr., ..., Gloria, ..." block, structured
+; identically to a REAL Mass's own rubric line elsewhere in this same
+; Ordo (compare Easter Day's "Missa pr., Gloria, sequentia, Credo, praef.
+; Pasch."), most plausibly describes the liturgical action's own
+; STRUCTURE using the book's standard notation for bookkeeping
+; consistency, or is a genuine single-word compiler error -- neither
+; resolvable without contacting the compiler, out of this task's own
+; scope. NOT the same failure mode as the Te Deum extractor bug above
+; (F2/F4): this is the RAW pdftotext TEXT itself making the claim, not a
+; downstream parsing artefact of test_fiuv_ordo.ml's own extraction --
+; re-run directly against a fresh -layout dump for this task, not merely
+; trusted from the fixture. The PDF's own page IMAGE was not separately
+; inspected (out of this task's own tool access), so a pdftotext-layer
+; misread (a stray line from an adjacent block folded into this one) is
+; not fully ruled out either -- named as a real possibility, not
+; silently excluded.
+;
+; RESOLVED 2026-08-22 (coordinator): the page IMAGE was rendered and read
+; (pdftoppm -f 48, the PDF page bearing printed folio 46). TWO findings.
+; FIRST, the pdftotext layer is FAITHFUL -- the printed book really does
+; carry "Missa pr., (omittuntur ps. Iudica me et Gloria Patri), Gloria,
+; sine Credo, praef. comm." under FERIA VI IN PASSIONE ET MORTE DOMINI, so
+; the adjacent-block-misread possibility named above is RULED OUT, not
+; merely unlikely.
+; SECOND, and this is what settles the adjudication rather than resting it
+; on external attestation: the SAME PAGE proves the compiler knew the
+; distinction and lost it here specifically. Its next entry, "4. Viol ...
+; SABBATUM SANCTUM", carries NO "Missa pr." line at all -- correctly, Holy
+; Saturday's own Mass being the Vigil's. The entry after it, "5. Alb DOM.
+; RESURRECTIONIS", carries a full one. So on one page the book omits the
+; Mass line where there is no Mass, and supplies one where there is; Good
+; Friday, which likewise has none, wrongly receives one. Its own Vespers
+; rubric on the same entry calls the day's rite "Actioni liturgicae
+; vespertinae" -- an Action, not a Mass -- contradicting the Mass line four
+; lines above it.
+; The line is also WORD-FOR-WORD identical to Holy Thursday's own on the
+; preceding page ("(omittuntur ps. Iudica me et Gloria Patri), Gloria, sine
+; Credo"), where every word of it is correct. A copied line, not a
+; considered statement.
+; Verdict unchanged (colitur), now on internal evidence from the source
+; itself rather than on "every other authority disagrees" -- which is the
+; stronger footing, and the one this project's own standard asks for.
+
+; F3 -- CLOSED, MISADJUDICATED, NOW FIXED AT THE SOURCE
+; (l5-f3-readjudication task, 2026-08-22). This entry previously read
+; "OPEN, single-witnessed, colitur's own possible gap" -- WRONG, and not
+; a Te Deum question at all: it was tools/extract_fiuv_ordo.ml's own
+; [extract_te_deum] reading the WRONG PRINTED OFFICE on these six dates.
+;
+; THE ORIGINAL, SUPERSEDED FINDING -- preserved below verbatim, the same
+; "retain the wrong reading and say why it was wrong" convention this
+; file's own F1 history and data/ef/expected-divergences-lms.sexp's own
+; L3/L5 already establish, NOT deleted: fires 6 times, every one of the
+; six dates data/ef/expected-divergences-lms.sexp's own L5 already found
+; for Gloria: 2026-03-06/07/09/12/21/24, a privileged Lenten or
+; Passiontide feria (Class3, RG25) whose own office is impeded and
+; carries exactly one commemoration of a Class3 saint. colitur's
+; [te_deum] reads [false] (a plain ferial office by every branch
+; {!Rite_ef.Rubrics_ef.te_deum} checks); FIUV reads [true] in all six --
+; confirmed directly against the raw pdftotext dump, not merely the
+; fixture: e.g. 12 March, "Ll. 1a et 2a (= 2a+3a) de Scr. occ., 3a de
+; festo, Te Deum." -- a genuine, unnegated "Te Deum" (neither of the two
+; negative phrasings the extractor now checks for), so this is NOT the
+; same failure mode F2/F4 were. (This description of what the raw text
+; SAYS is still accurate -- the error was reading it from the wrong
+; PLACE in the block, below, not misreading the words themselves.)
+;
+; CITATION [SUPERSEDED, see THE CORRECTION below]: the same
+; n.302(b)/RG431(b) text L5 already cites (LT.txt -- a MISSAL rubric, not
+; a Breviary one, so its literal text governs the MASS's own Gloria, not
+; Matins' Te Deum) does not directly license this finding at all --
+; 237/238 (the BREVIARY rubric {!Rite_ef.Rubrics_ef.te_deum} actually
+; implements) has no clause naming a commemoration as grounds for Te
+; Deum. What this finding suggested, not established: the DIVINE OFFICE
+; may treat a commemorated day more generously than the MASS does for
+; exactly this shape (a commemorated saint's own lessons are read at
+; Matins even on an impeded day, which could plausibly extend to Te Deum
+; by an unwritten or unlocated convention) -- genuinely speculative,
+; offered as a research lead for a follow-on task, not a citation this
+; entry treated as settled. (There was no such convention: see below.)
+;
+; WHY NOT FIXED HERE [SUPERSEDED]: SINGLE-WITNESSED (the LMS fixtures
+; never captured Te Deum at all, so there is no second Ordo to
+; corroborate this shape the way the Sacred-Triduum/BVM-Saturday/vigil
+; findings elsewhere in this task were cross-checked). Fixing it would
+; need the SAME kernel signature widening L5 already declines for the
+; identical reason (`~commemorations` on {!Colitur_kernel.Rite.t.gloria},
+; and by extension a parallel widening of [te_deum] if the two were ever
+; to diverge in their own inputs) -- out of a task briefed to follow
+; creed's existing seam exactly. Left OPEN for the same follow-on task L5
+; recommends. (No kernel change was ever needed -- the bug was entirely
+; inside the EXTRACTOR, tools/, never inside lib/.)
+;
+; THE CORRECTION, in full (l5-f3-readjudication task, 2026-08-22): FIUV
+; prints a "-VEL-" ("or") separator on these exact six dates, dividing
+; each day's block into a PRIMARY, strict-1962 office (the feria wins,
+; "sine Gloria", the saint commemorated, no "Ad Mat." lessons mentioned
+; at all -- an ordinary privileged feria's Matins needs no special note)
+; and a SECOND, complete alternative office under the 2020 decree Cum
+; Sanctissima (the saint kept outright, "Off. ordinarium", with its OWN
+; "Ad Mat. ... Te Deum" lessons). tools/extract_fiuv_ordo.ml's own
+; [extract_te_deum] scanned the WHOLE block for "Ad Mat." unbounded, so
+; on these six days it silently read the SECOND office's own Te Deum
+; instead of the PRIMARY's -- manufacturing a same-day contradiction with
+; colitur that this entry first recorded as "colitur's own possible
+; gap". There was never a genuine Office-vs-Mass question, and no
+; DIVINE-OFFICE convention naming a commemoration as grounds for Te
+; Deum: the "unnegated Te Deum" the original finding quoted was real
+; text, just read from the wrong printed office.
+;
+; Fixed in tools/extract_fiuv_ordo.ml's own [split_at_alt_office] (see
+; its own citation, module header point 5): every field extractor now
+; reads the PRIMARY office only, cut at the "-VEL-" token before any
+; field extraction runs. [te_deum] now reads [None] (unresolved) on
+; these six dates -- the primary office states no "Ad Mat." of its own,
+; so there is nothing to positively confirm either direction from, the
+; same meaning [None] already carries elsewhere in this fixture. The
+; alternative office's own Te Deum is captured, not discarded, in a new
+; [alt_te_deum] field (still [true] on all six -- the extraction was
+; never wrong about what the SECOND office says, only about which
+; office [te_deum] itself should report).
+;
+; VERIFIED, not merely argued: re-extracted from the SAME pdftotext dump
+; (SHA-256 of the source PDF unchanged, fixture header above). Exactly 6
+; of 400 rows changed, every one Te Deum true->unresolved, on precisely
+; these six dates and no others (a hard characterisation probe in
+; tools/extract_fiuv_ordo.ml now asserts this population is EXACTLY
+; these six, not merely observed once). Gloria, Credo, class_, title and
+; praef are UNCHANGED on all 400 rows, confirmed by a direct diff of the
+; fixture before and after -- those fields were already correctly
+; bounded to the primary office (a Vespers-line token always intervened
+; before "-VEL-" on all six real instances), so this was never a
+; Gloria-axis bug, consistent with F1 and with L5's own six-date subset
+; agreeing with colitur throughout.
+;
+; VERDICT: colitur correct; the LMS Ordo (L5) and the FIUV Ordo's own
+; "-VEL-" alternative both, correctly, describe the SAME Cum-Sanctissima
+; calendar colitur excludes by binding design (CLAUDE.md decision 2).
+; See L5's own rewritten entry (data/ef/expected-divergences-lms.sexp)
+; for the full account, including the "-VEL-" dual printing quoted there
+; as the decisive evidence for BOTH entries. NOT an active
+; machine-checked [id] entry, matching this file's own F1/F2/F4
+; precedent -- the real enforcement was test_fiuv_ordo.ml's own
+; [is_f3_lenten_commemoration] predicate and [f3_count] assertion, BOTH
+; REMOVED (same task): with the extractor fixed, this shape produces no
+; mismatch at all any more (matched by the general [None]-skips-
+; comparison branch every other unresolved-Te-Deum row already uses),
+; so a dedicated predicate/count pin would be dead code -- the same "an
+; entry that stops firing is a real change, not silently absorbed"
+; discipline data/ef/expected-divergences-lms.sexp's own L1/L3 closures,
+; and this file's own F2/F4 closure, already establish.
diff --git a/data/ef/expected-divergences-lms.sexp b/data/ef/expected-divergences-lms.sexp
new file mode 100644
index 0000000..d91028a
--- /dev/null
+++ b/data/ef/expected-divergences-lms.sexp
@@ -0,0 +1,446 @@
+; data/ef/expected-divergences-lms.sexp -- Task 6 (2026-08-21-colitur-
+; celebrant-rubrics-phase1)'s cited allow-list for the LMS Ordo comparison
+; (test/test_lms_ordo.ml). Extended by the Witnesses task (2026-08-22,
+; same phase) from the single 2024-2025 window (2024-11-27..2025-12-31)
+; to three: 2023-2024 (2023-12-01..2024-12-31) and 2025-2026
+; (2025-11-28..2026-12-31) joined it. L3/L4 below fired only in the
+; 2023-2024 window -- neither recurs in the other two, a fact worth
+; keeping visible rather than merging away (see [expected_rows] on each).
+; L5/L6 (Phase 2, 2026-08-22) extended the comparison to a second axis,
+; Gloria (RG431-432) -- both fire in more than one window, at DIFFERENT
+; counts per window, so both are prose-only (L2's own precedent), not
+; machine-checked [id] records; see each for the real enforcement site.
+; L5 was MISADJUDICATED as "colitur's own gap" and CORRECTED
+; (l5-f3-readjudication task, 2026-08-22): see L5's own entry for the
+; full account -- it is an OCCURRENCE difference (the LMS Ordo follows
+; the 2020 decree Cum Sanctissima, colitur excludes it by binding
+; design), not a Gloria defect.
+;
+; A SEPARATE file from data/ef/expected-divergences.sexp (the lectio
+; allow-list) and data/ef/expected-divergences-missalemeum.sexp (the
+; missalemeum/Divinum-Officium-lineage allow-list): this Ordo is a THIRD,
+; independent lineage (a printed England & Wales diocesan book, ISBN
+; 9781739209636, compiled directly from the 1962 Missal/1960 rubrics --
+; never passed through Divinum Officium, missalemeum or lectio), so its
+; own divergences are kept apart rather than tangled into either existing
+; file's own provenance.
+;
+; [verdict] names which side this task's own primary-source research
+; backs, the SAME convention the missalemeum file's own header states:
+; not always "colitur".
+;
+; L1 -- CLOSED, FIXED (whole-branch review finding 1, 2026-08-22): was
+; 2025-11-03 (All Souls' Day, transferred from 2 November, a Sunday that
+; year). colitur used to say the Creed IS said (true) on rank alone
+; (475(b), Class1) where the Ordo, correctly, says it is not: "Mon 3 ALL
+; SOULS' DAY I Cl B / No Gl Sequence No Cr Pr of the Dead No Blessing".
+;
+; This entry's own PREVIOUS text argued the divergence could not be fixed
+; without a signature change, because [creed]'s inputs (temporal/observed/
+; date) have no notion of "this Mass is a Requiem". That argument was
+; wrong: {!Colour.Black} is used by exactly TWO celebrations in the whole
+; engine (verified by grepping every [colour Black]/[Colour.Black] site in
+; lib/ and data/) -- [commemoration-of-all-souls] (data/ef/sanctoral.sexp)
+; and Good Friday (temporal_ef.ml, already [false] via the RG 23(b) feria
+; exclusion regardless of colour, and has no Mass at all in the
+; 1955-restored Holy Week) -- so on every day this engine can construct,
+; [colour = Black] if and only if the Mass is a Requiem: a citable
+; implication (RG 117 assigns black to Masses of the dead) on THIS DATA,
+; not a heuristic guess. [Rite_ef.Rubrics_ef.creed] now reads
+; [observed.colour] as RG 476(f)'s own guard, positioned ahead of 475(b)'s
+; rank branch; see rubrics_ef.ml's own header and the guard's own comment
+; for the full account, and test_rubrics_ef.ml's
+; [test_colour_black_population_is_exactly_two] for the test that fails
+; loudly the day a third [Colour.Black] celebration is ever added, so this
+; proxy cannot silently rot.
+;
+; BLAST RADIUS, measured (full 1583-9999 sweep of {!Colitur_kernel.
+; Calendar.year}, grouped by [observed]'s own slug): 8 416 days changed
+; from [true] to [false], every one [commemoration-of-all-souls] (missing
+; from exactly 1 of the 8 417 domain years -- a boundary-year transfer
+; effect at 1583/9999, not a third population member: see the "know what
+; each layer cannot see"-style caveats elsewhere in this project for other
+; instances of the same edge). A further 8 416 [Colour.Black] days are
+; Good Friday ([ef-passiontide-2-friday]), unchanged by this fix (already
+; [false] before it, via the earlier feria exclusion) -- confirmed
+; [creed_true_among_black = 0] after the fix, over the WHOLE domain, not
+; merely the fixture's own 2024-2025 window.
+;
+; `colitur day`/`colitur readings` are unaffected (neither prints [creed]);
+; `colitur rubrics` output changes on exactly the 8 416 days above.
+
+; L2 -- OPEN, colitur's own gap, found while building L1's fix (whole-
+; branch review finding 2, 2026-08-22). NOT an active entry in this
+; file's own machine-checked sense (no code loads or cross-checks an
+; "L2" id anywhere -- this file's own [allow_entry] machinery is scoped
+; to the CREED axis, {!test_lms_ordo.test_creed_matches_or_is_explained}
+; alone; a second, unrelated axis reusing the same id-lookup mechanism
+; would let one test's "declared but never fired" check spuriously trip
+; on the other axis's own entry). Recorded here as prose only, the same
+; discipline this file's own closed L1 note above and
+; expected-divergences.sexp's own closed C-entries already use for a
+; citation worth preserving without a live parser hook -- the REAL
+; enforcement is test_lms_ordo.ml's own [test_formulary_override_matches],
+; which asserts this population is exactly 3 days directly.
+;
+; Strengthening test_lms_ordo.ml's formulary-override check from PRESENCE
+; to the actual STRING (this same finding 2) surfaced a real, separate
+; defect in step 3 of the reading chain ({!Rite_ef.Lectionary_ef.
+; readings}), independent of the Creed axis above. Three real days in the
+; fixture window -- 2025-05-30 (Friday), 2025-06-02 (Monday), 2025-06-03
+; (Tuesday), all between Ascension Thursday and the following Sunday --
+; have no proper of their own and fall to {!Colitur_kernel.
+; Mass_formulary.Preceding_sunday}. colitur resumes the nearest CALENDAR
+; Sunday (the "5th"/"6th Sunday after Easter", Paschaltide's own week
+; 6/7), but the Missal, and the Ordo, keep saying ASCENSION'S OWN Mass
+; through this stretch instead: "Mass of the Ascension" on all three
+; days, never a numbered-Sunday title. Step 3 has no notion of "inside
+; Ascension's own after-feast period" -- it always resumes the nearest
+; preceding Sunday, numbered or not.
+;
+; STRUCTURAL, not a fixture artefact: the Ascension is a fixed Easter+39
+; (a Thursday inside Paschaltide week 6), so every feria whose own
+; Preceding_sunday fallback would otherwise resolve to week 6 or 7 falls
+; in this same stretch, every year -- this is not a coincidence of
+; 2024-2025 alone, though only this fixture's own window has been checked
+; against a real Ordo.
+;
+; NOT FIXED in this task: fixing it means teaching step 3, or the
+; lectionary data, about Ascension's own after-feast period -- the same
+; shape as the Christmastide "infra octavam Nativitatis" entries
+; data/ef/lectionary.sexp already carries directly rather than resolving
+; through this fallback -- a lectionary-data change out of a fix round's
+; own scope. test/test_lms_ordo.ml's own [is_after_ascension] excludes
+; this population from the general mapping (bounded ABOVE by Pentecost,
+; not merely "later than Ascension" -- see its own citation, corrected
+; during the Witnesses task after a first version manufactured 8 false
+; failures by matching any later date in the same civil year), and
+; [test_formulary_override_matches] asserts its exact size per window.
+;
+; CORRECTED (Witnesses task, 2026-08-22): this note previously said "exactly
+; 3 real days" as though that were a universal count. Extending the
+; comparison to 2023-2024 and 2025-2026 showed it is not -- the population
+; depends on which OTHER days that particular year's Ascension-adjacent
+; week happen to have their own competing propers (a saint, a vigil), so
+; it varies year to year: 3 in 2024-2025, 1 in 2023-2024 (only 30 May 2024
+; -- Rogation Monday, 6 May 2024, is BEFORE Ascension and correctly resumes
+; the ordinary "5th Sunday after Easter" instead, once the exclusion's own
+; date comparison was corrected to test "after Ascension AND before
+; Pentecost" rather than "week 6 or 7"), 2 in 2025-2026. All three counts
+; measured directly, all showing "Mass of the Ascension", none unexplained.
+;
+; Domain-wide count: unmeasured -- "which feria is inside Ascension's own
+; after-feast period" is not a distinct predicate anywhere in this
+; codebase to sweep on. Structurally recurs every year, though the exact
+; per-year count is now known to vary (1-3 in the three years measured),
+; not a flat "3 days/year".
+
+; L3 -- CLOSED, FIXED (bissextile-shift task, 2026-08-22; NOT an active
+; sexp record any more, same convention L1 above established -- removed
+; from [test_allow_list_ids_are_exactly_l3_l4]'s own expected set, which
+; now names L4 alone). Was OPEN, colitur's OWN genuine gap, found
+; extending this suite to the 2023-2024 window (Witnesses task,
+; 2026-08-22), firing once: 2024-02-24.
+;
+; Citation, preserved verbatim: the Missale Romanum's own CALENDARIUM
+; table, February, footnote (docs/research/LT.txt:5011-5013, scan-
+; corroborated docs/research/scan2.txt:3050-3058, OCR-damaged to
+; "bi&sextili"/"Matthue"/"Cabrielis" but unmistakable against the
+; undamaged transcription): "In anno bissextili mensis februarius est
+; dierum 29, et festum S. Matthiae celebratur die 25 februarii, ac festum
+; S. Gabrielis a Virgine perdolente 28 februarii, et bis dicitur sexto
+; calendas, id est die 24 et die 25" -- in a leap year February has 29
+; days, St Matthias is kept on 25 February (not 24), St Gabriel of Our
+; Lady of Sorrows on 28 February (not 27), and the sixth kalends of March
+; is said twice. Not RG-numbered -- a calendarium footnote, not a
+; Rubricae Generales paragraph.
+;
+; FIXED: {!Rite_ef.Temporal_ef.bissextile_fixed_key}, threaded through
+; {!Colitur_kernel.Rite.t}'s new [fixed_key] field (read only by
+; {!Colitur_kernel.Layer.on_date}'s FIXED half, so the kernel stays
+; rite-agnostic -- a rite that supplies nothing behaves exactly as
+; before). Implemented as the rubric's own MECHANISM (every fixed entry
+; from 24 through 28 February shifts one civil day later in a leap year,
+; 24 February itself carrying no fixed entry that year), not as "move
+; these two named saints": the two are indistinguishable on shipped data
+; (nothing else is fixed in that window) and diverge only for a future
+; [--overlay] entry in the same range, which the mechanism reading covers
+; and a two-saints special case would not.
+;
+; 2024-02-24/25 now MATCH the Ordo: colitur's Creed follows the same
+; Matthias-vacates-24/loses-outright-on-the-Sunday-25th path the note
+; below already inferred from the Ordo's own titles, and the LMS
+; 2023-2024 suite's Creed and formulary-override checks are both green
+; (the formulary bucket's own [expected_proper] constant dropped 182->181
+; for this window: 24 February is now the Ember Saturday's own Own_slug-
+; sourced proper, not Matthias's Proper-sourced one, leaving the counted
+; population rather than changing which slug's proper it is).
+;
+; BLAST RADIUS, MEASURED (full 1583-9999 sweep, {!Colitur_kernel.Calendar.
+; year} run twice per civil year -- once with the real [fixed_key], once
+; with it forced to the identity default -- every changed liturgical day
+; diffed on observed slug/rank/colour/subject/commemorations; throwaway
+; probe, tools/probe_bissextile.ml, run for this task and not committed,
+; same precedent as tools/probe_matthias.ml above):
+;
+; - ALL 2 041 leap years in the domain show at least one visible
+; Matthias-related change, and separately all 2 041 show at least one
+; Gabriel-related change -- every leap year in 1583-9999 is touched.
+; - 6 983 individual liturgical days change domain-wide, ZERO
+; unclassified: exactly four shapes, all the same mechanism --
+; Matthias vacates 24 February (1 803 years) and newly appears on 25
+; February (1 811 years); Gabriel vacates 27 February (1 699 years)
+; and newly appears on 28 February (1 670 years). "Vacates"/"appears"
+; covers BOTH observed-outright and commemorated-only presence, not
+; observed alone -- RG 111's admission cap can relegate the shifted
+; saint to a bare commemoration rather than the day's own office, and
+; a classifier that only watched [observed] undercounted by roughly a
+; tenth on a first pass (found and corrected before this note was
+; written: the OBSERVED-outright figures alone, tracked separately
+; for direct comparison against this entry's own prior estimate
+; below, are 1 677 for Matthias and 571 for Gabriel).
+; - THIS ENTRY'S OWN PRIOR ESTIMATE, checked: "of 2 041 leap years,
+; colitur observes matthias on 24 February in 1 650 of them" is
+; confirmed close but not exact against the real, precisely-measured
+; figure on the SAME (observed-outright-only) definition -- 1 677, a
+; 2% difference consistent with the prior probe's own "roughly
+; measured" caveat, not a sign either probe was wrong in kind. The
+; prior estimate's own further caveat -- "some of those years may see
+; identical final output either way" -- is also confirmed real but
+; small: 1 677 (narrow, observed-only) vs 1 803 (broad, observed-or-
+; commemorated) for the SAME 24-February-vacated population shows the
+; narrow definition undercounts genuine visible impact rather than
+; overcounting it, because a saint who only lost outright pre-fix
+; (never observed, never commemorated, invisible either way) is
+; absent from BOTH counts and was never the source of the gap between
+; them.
+; - Gabriel's own sibling shift, unwitnessed by this fixture's own
+; 2023-2024 window (no divergence fired on either 27 or 28 February
+; 2024 -- 2024's own competing office there does not expose it), is
+; the identical mechanism and closes with the same fix; its own
+; measured figures are recorded above for the first time, this entry
+; having previously had no estimate for it at all.
+;
+; The differential (lectio, layer 3) gained a new cited entry for its own
+; 2005-2050 window, data/ef/expected-divergences.sexp's C40 -- lectio
+; implements no such shift either (confirmed directly against the
+; fixture: Matthias/Gabriel sit at their PRE-shift dates in every one of
+; the 11 leap years that window covers), so every leap year in it now
+; diverges on the two shifted days, 21 rows total. See C40's own note for
+; the row-by-row account.
+
+; L4 -- OPEN, adjudicated FOR colitur (a defensible primary-source reading,
+; not a fix confirmed against the Ordo -- the Ordo's own contrary reading is
+; also textually arguable, see below). Fired once: 2023-12-24.
+((id L4)
+ (citation "RG 30(a) (Caput V, De Vigiliis, docs/research/LT.txt:959-961): \"vigilia Nativitatis Domini quae, IN OCCURRENTIA, locum tenet dominicae IV Adventus, de qua, proinde, NULLA FIT COMMEMORATIO\" -- the Vigil of the Nativity, when it occurs [on a Sunday], TAKES THE PLACE of the 4th Sunday of Advent, of which, accordingly, no commemoration is made -- the identical \"locum tenet ... nulla fit commemoratio\" shape RG16(a) uses for a Feast of the Lord occurring on a II-class Sunday, which colitur already implements and which RG475(a) explicitly extends the Creed to (\"in qualibet dominica, etsi eius Officium alicui festo locum cedat\").")
+ (verdict open)
+ (note "2023-12-24 (the 4th Sunday of Advent AND Christmas Eve, a genuinely rare coincidence -- roughly 1 year in 7 -- absent from both the 2024-2025 and 2025-2026 windows, where Christmas Eve falls on a Tuesday and a Wednesday respectively). colitur says the Creed IS said (true), reading [temporal]'s own weekday (Sunday) per RG475(a)'s clause, positioned ahead of the vigil-exclusion check in {!Rite_ef.Rubrics_ef.creed} -- unconditionally, the same way it already does for RG16(a)'s Feast-of-the-Lord case. The Ordo says \"No Gl No Cr\" for this date. ADJUDICATED FOR COLITUR, not merely left open by default: RG30(a)'s own \"locum tenet ... nulla fit commemoratio\" language is textually closer to RG16(a) (which colitur already treats as Creed-preserving) than to an ordinary vigil superseding a Sunday -- the Vigil does not merely WIN THE DAY, it takes the SUNDAY'S OWN IDENTITY, the same shape RG475(a) was written to reach. The COUNTER-reading is real and not dismissed here: RG475(a)'s own text says \"locum cedat ... festo\" (gives way to a FEAST), and RG35 (Caput VI) classifies feria/vigilia/festum as three distinct liturgical-day categories -- a strict textual reading could confine 475(a)'s override to FEAST-displacement only, leaving a VIGIL-displaced Sunday to fall through to the general vigil exclusion (476, via RG33's own \"a vigil is a distinct category\" reasoning already coded elsewhere in {!Rite_ef.Rubrics_ef.creed}). Left OPEN rather than closed on this task's own authority: adjudicating scripture-grade primary-source questions is out of scope for a witness-wiring task, and the two readings are both defensible. Not fixable inside this task's own no-lib-changes constraint regardless of which reading eventually wins.")
+ (expected_rows 1))
+
+; L5 -- MISADJUDICATED, NOW CORRECTED (l5-f3-readjudication task,
+; 2026-08-22). This entry previously read "OPEN, colitur's own gap" --
+; WRONG, on two independent grounds (below). It is NOT a Gloria defect
+; of colitur's. It is NOT a rubric dispute at all: it is an OCCURRENCE
+; difference, because the LMS Ordo is compiled to the 2020 decree Cum
+; Sanctissima (its own introduction says so, docs/research/ordo/
+; PROVENANCE-lms.md) and colitur excludes that decree from its 1962 core
+; by BINDING DESIGN (CLAUDE.md decision 2: "Every addition [2020 Quo
+; Magis/Cum Sanctissima, any community's proper] is an overlay, never
+; core"). On these 16 dates colitur and the LMS Ordo each correctly
+; describe a DIFFERENT, both genuine, calendar -- they were never
+; disagreeing about the same one. VERDICT: colitur correct. NOT an
+; active machine-checked [id] entry -- same reasoning L2 above gives:
+; the count varies window to window (5 in 2023-2024, 5 in 2024-2025, 6
+; in 2025-2026), so a single static [expected_rows] cannot check it. The
+; REAL enforcement is test_lms_ordo.ml's own [is_l5_lenten_commemoration]
+; predicate plus [make_suite]'s own ~expected_gloria_l5 parameter,
+; asserted per window directly -- KEPT, unlike a bug-driven divergence
+; that stops firing once fixed (data/ef/expected-divergences-fiuv.sexp's
+; own F3, closed by this same task, is that other shape): this one is
+; EXPECTED TO RECUR IN EVERY FUTURE WINDOW, because the exclusion it
+; reflects is a standing design decision, not a defect to remove.
+;
+; THE ORIGINAL, SUPERSEDED HYPOTHESIS -- preserved below verbatim, the
+; same "retain the wrong reading and say why it was wrong" convention
+; L3's and F1's own history in this file already establish, NOT deleted:
+;
+; SHAPE, identical in all 16 instances found (5+5+6, zero exceptions):
+; a privileged Lenten or Passiontide feria (Class3, violet -- RG25,
+; {!Rite_ef.Temporal_ef.ferial_rank}) whose own office is impeded and
+; carries EXACTLY ONE commemoration, of a Class3 saint colitur's own
+; precedence engine (independently validated, layers 3-5) correctly
+; reduces to a mere commemoration. colitur's [gloria] reads [false] (the
+; day is a plain ferial office by every test [Rite_ef.Rubrics_ef.te_deum]
+; runs -- no Sunday, no vigil, no octave, [named] = [None], [subject] =
+; [Temporal]); the Ordo reads [true] in every one of the 16 instances.
+; (This description of the SHAPE is still accurate -- what was wrong is
+; the CONCLUSION drawn from it, below.)
+;
+; CITATION (docs/research/LT.txt:2359-2361, "V - De Missis festivis",
+; quoted in rubrics_ef.ml's own [gloria] header in full): "302. Sensu
+; autem latiore, dicuntur quoque Missae de festo: ... b) Missa de
+; commemoratione in Officio diei occurrente" -- in the WIDER sense, a Mass
+; "of a commemoration occurring in the day's own Office" is ALSO called a
+; "Missa festiva" -- and RG431(b): "Hymnus Gloria in excelsis dicitur ...
+; in Missis festivis de quibus n. 302" -- such a Mass says the Gloria.
+; Textually, this appears to be EXACTLY the shape found: the day's own
+; ferial Office, carrying a commemoration, is elevated to "festive" status
+; for the Gloria specifically.
+;
+; WHY NOT FIXED HERE (the original text, which already quoted the very
+; clause that defeats its own hypothesis, below, but did not follow it
+; to its conclusion): n.303(b), the very next paragraph (LT.txt:2359-2367,
+; same quote in rubrics_ef.ml), qualifies n.302(b)'s own Masses: "dici
+; potest tantum si occurrit dies liturgicus IV classis" -- CAN ONLY BE
+; SAID if the liturgical day occurring is IV class. Every instance found
+; here is a Class3 PRIVILEGED FERIA (RG25), not IV class, which reads as a
+; textual CONTRADICTION of the empirical finding rather than a
+; confirmation of it -- unresolved without n.304 onward (not in this
+; project's sources), which may clarify that 301-303 govern which Mass a
+; priest may freely CHOOSE among several options in one church on one day
+; (a dimension colitur does not model -- see [gloria]'s own SCOPE NOTE),
+; a different question from "does THE Mass actually said, once
+; determined, say the Gloria" (431(b)'s own question). Implementing this
+; also has a real architectural cost this task's own instructions
+; explicitly avoided: [Rite_ef.Rubrics_ef.gloria] would need a FOURTH
+; parameter, the day's own {!Colitur_kernel.Liturgical_day.t.commemorations}
+; -- a kernel [Rite.t.gloria] signature change, the same shape RG16(a)'s
+; own [admit] fix needed a [~temporal] parameter for, and squarely out of
+; a task briefed to "follow exactly how creed was wired -- same seam".
+; Left OPEN, not guessed into a possibly-wrong rule. Recommended for a
+; follow-on task, ideally alongside Phase 3's Preface work (RG483 governs
+; a DIFFERENT, but textually adjacent, commemoration-vs-Mass-part
+; question, so the two may share the same kernel signature widening).
+;
+; UPDATE (same original task, after wiring the FIUV Ordo's own Gloria and
+; Te Deum axes, test_fiuv_ordo.ml): this paragraph previously said FIUV's
+; own [gloria] axis was not compared at all. It now is, and the result
+; WEAKENS this entry's own case rather than strengthening it: FIUV's own
+; [gloria] is [false] on all six of these exact dates in its window --
+; AGREEING WITH COLITUR, DIRECTLY CONTRADICTING the LMS Ordo's [true]
+; above. So this is not "colitur has a corroborated gap", it is "two
+; independent Ordos disagree with EACH OTHER on Gloria for this shape,
+; and colitur happens to agree with the universal one, not the diocesan
+; one". What FIUV's OWN Te Deum axis DOES show for the identical six
+; dates: [true] -- Te Deum, unlike Gloria, genuinely IS said at Matins on
+; these days (data/ef/expected-divergences-fiuv.sexp's own F3), a real,
+; single-witness finding that this entry's own n.302(b)/431(b) citation
+; may in fact belong to the DIVINE OFFICE, not the MASS -- which would
+; mean L5 itself is answering the wrong question, not merely open.
+; Genuinely uncertain which of the two Mass-Gloria witnesses (LMS or
+; FIUV) is right for this shape; left OPEN, not adjudicated either way,
+; for a follow-on task with more primary-source access than this one had.
+; (CORRECTED, l5-f3-readjudication task: F3's own "single-witness
+; finding" was never a Te Deum finding at all -- it was
+; tools/extract_fiuv_ordo.ml reading the WRONG PRINTED OFFICE, see below.
+; There was no Office-vs-Mass question to be uncertain about.)
+;
+; THE CORRECTION, in full (l5-f3-readjudication task, 2026-08-22):
+;
+; 1. RG303(b) ALREADY DEFEATS the n.302(b)/431(b) hypothesis on its own
+; terms -- the original text above quoted it but stopped short of the
+; conclusion. Quoted again, in full, because it is the load-bearing
+; sentence: "dici potest tantum si occurrit dies liturgicus IV
+; classis" -- [a Mass "of a commemoration occurring in the day's own
+; Office"] MAY BE SAID ONLY IF the liturgical day occurring is FOURTH
+; class. A privileged Lenten or Passiontide feria is THIRD class
+; (RG25) -- every one of these 16 instances. So n.302(b) is
+; PROHIBITED, not merely inapplicable, on precisely the days this
+; entry covers, and 431(b)'s own Gloria elevation, which depends on
+; 302(b), can never reach them. Not "unresolved without n.304" as the
+; original text guessed: 303(b) alone already closes the question,
+; the wrong way for the original hypothesis.
+;
+; 2. THE FIUV ORDO PRINTS BOTH OPTIONS, and this is decisive on its own,
+; independent of (1). All 16 LMS dates are Lenten/Passiontide
+; privileged ferias; six of them fall inside the FIUV fixture's own
+; 2025-2026 window (2026-03-06/07/09/12/21/24 -- the same six F3
+; named). For every one of the six, the raw FIUV source (verified
+; directly against a fresh pdftotext -layout dump, not merely the
+; fixture) prints TWO complete readings for the SAME civil date,
+; separated by a literal "-VEL-" ("or") token. 24 March 2026, in
+; full:
+;
+; 24. Viol Feria III post Dom. I Passionis, De ea, III cl. - Off. feriale temp. Passionis.
+; Ad LAUDES ... comm. S Gabrielis Archangeli.
+; Missa pr., (omittuntur ps. Iudica me et Gloria Patri), sine Gloria, comm. S
+; Gabrielis Archangeli, sine Credo, praef. de Sancta Cruce or. super populum.
+; I VESPERAE de seq., comm. huius diei. - Compl. de dom.
+; -VEL-
+; Feria III. S Gabrielis Archangeli, III cl. (Priv.) - Off. ordinarium. - Ad Mat.
+; Ll. 1a et 2a (= 2a + 3a) de Scr. occ., 3a de festo, Te Deum. - Ad LAUDES comm.
+; Feriae.
+; Missa pr., Gloria, comm. Feriae, tractus, sine Credo, praef. de Sancta Cruce vel
+; de Angelis.
+;
+; The FIRST option is strict 1962: the feria wins, "sine Gloria", no
+; Te Deum stated, the saint merely commemorated -- EXACTLY colitur's
+; own answer, field for field. The SECOND, after "-VEL-", is the
+; Cum-Sanctissima-elevated option: the saint's own feast, "Off.
+; ordinarium", Gloria, Te Deum, the feria commemorated instead --
+; EXACTLY the LMS Ordo's own answer. The FIUV Ordo's own title page
+; states the convention this book uses throughout for exactly this
+; distinction (N.B., page 1, verified directly against the PDF):
+; "days of the third class to which the norms of the decree Cum
+; santissima [sic] apply are marked 'III cl.' ... but days ... to
+; which these norms do not apply are marked 'III cl. (Priv.)'." One
+; document, compiled by a THIRD party independent of both colitur's
+; own lineage and the LMS, prints BOTH engines' own answers side by
+; side as two legitimate readings of two different calendars. There
+; is no dispute left to adjudicate.
+;
+; So the Gloria and Te Deum RULES were never in dispute at all: each
+; engine's answer follows correctly from its own occurrence result, on
+; its own calendar. What this entry originally described as "colitur's
+; own gap" is colitur correctly implementing the 1962 core it was built
+; to implement, diverging from a printed book that, by its own
+; introduction, deliberately implements something else.
+;
+; NOTE ALSO (so a reader arriving here from
+; data/ef/expected-divergences-fiuv.sexp's own F3 does not draw the
+; wrong conclusion from that entry's own closure): F3 did NOT
+; "corroborate" or "contradict" L5 at any point in this history. Both
+; were the same underlying fact read two different ways, and F3's own
+; apparent Te Deum-true reading was never a real second data point in
+; the first place -- it was tools/extract_fiuv_ordo.ml's own
+; [extract_te_deum] silently reading the SECOND ("-VEL-") office's own
+; Te Deum instead of the primary's, on exactly these six dates, closed
+; by fixing the extractor (tools/extract_fiuv_ordo.ml's own
+; [split_at_alt_office]), not by resolving any Office-vs-Mass question.
+; See F3's own entry for the full account.
+
+; L6 -- OPEN, root-caused to a DIFFERENT, PRE-EXISTING bug this Gloria
+; comparison merely surfaced, not a Gloria defect itself. Fired once,
+; 2023-2024 only (2024-05-06, Rogation Monday) -- absent from the other
+; two windows because Rogation Monday/Tuesday is impeded by a real
+; sanctoral feast in both of them, so the office's own colour never
+; reaches [observed] there. Same non-machine-checked-count reasoning as L5
+; above (count 1/0/0); enforced by test_lms_ordo.ml's own
+; [is_l6_rogation_colour] predicate and [make_suite]'s own
+; ~expected_gloria_l6 parameter.
+;
+; {!Rite_ef.Temporal_ef.temporal}'s own Rogation Monday/Tuesday branch
+; hardcodes [~colour:Colour.Violet] with NO RG citation at all (verified
+; by reading the branch directly, temporal_ef.ml, the Rogation comment
+; block). The Ordo shows 2024-05-06 as \"FERIA IV Cl W †\" (white),
+; borrowing \"Mass of 5th Sunday after Easter\" (matching colitur's own
+; [Mass_formulary.Preceding_sunday] resolution for the identical date) --
+; consistent with RG88 (Caput X, \"De Litaniis maioribus et minoribus\"):
+; \"De Litaniis minoribus nihil fit in Officio, sed tantum in Missa\" --
+; nothing changes in the OFFICE for the Minor Litanies, only the Mass
+; TEXT is proper, which reads as the Office's own colour (Paschaltide,
+; white) staying unchanged, the violet belonging only to the PROCESSION
+; that precedes the Mass -- the same PER-ACTION colour nuance this
+; project already documents as unmodelled for Palm Sunday's palm
+; procession and Good Friday's Communion rite (temporal_ef.ml's own RG126/
+; RG128 citations), not a new kind of gap.
+;
+; NOT FIXED HERE: out of this task's own scope (Gloria/Te Deum, not the
+; temporal cycle's colour assignment), and a real fix needs its own
+; measured blast radius across 1583-9999 (every Rogation Monday/Tuesday
+; not impeded by a stronger feast) plus a re-check against the
+; differential/oracle layers, which already treat Rogation days as
+; correctly violet on whatever data they compare against -- a
+; cross-layer question, not a one-line patch. Recommended as a follow-on
+; task's own first item.")
diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp
index dfee36c..d1995e2 100644
--- a/data/ef/expected-divergences-missalemeum.sexp
+++ b/data/ef/expected-divergences-missalemeum.sexp
@@ -257,8 +257,10 @@ REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry
REVISED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): 352, down by 42 from 394. NOT a change to this entry's own guard (still, and only, [diffs = [ Observed_identity_unresolved ]] exactly) -- this task compared reading citations for the first time, and 42 of the former 394 rows now ALSO carry a real [First_mismatch]/[Gospel_mismatch] alongside the pre-existing observed-identity gap, so they escape this entry's own EXACT-match guard and move to the FIVE new entries below (M23 2, M24 4, M25 4, M26 30, M27 2 -- 2+4+4+30+2=42, exactly accounting for the drop, verified against the comparator's own failure output, not assumed from the arithmetic alone -- CORRECTED, fix round 1, coordinator review: this note previously miscounted them as \"six\").
-CORRECTED, fix round 1 (coordinator review): the remaining 352 were previously described as every day whose citation \"ALREADY agreed with missalemeum before this task and still does\" -- imprecise for 18 of them. Before this task the citation axis did not exist at all, so NO row's citation was ever actually checked; \"already agreed\" wrongly implies the pre-task VALUE was correct on all 352, when for 18 it was not -- it only became correct, and therefore only started agreeing, because of this task's own three fixes (Holy Name Sunday's own two dates, 2026-01-04/2027-01-03; 12 more January-window ferias across the three RG-17(a)/Holy-Family-propers-rubric families that now resolve at step 2 instead of the walkback, one full list: 2026-01-02/05/07/08/09/12, 2027-01-04/05/07/08/11/12; and Corpus Christi/Sacred Heart in both years, 2026-06-04/06-12, 2027-05-27/06-04 -- 2+12+4=18, independently re-derived against the real resolver, not merely arithmetic). The other 334 were genuinely unaffected by this task, matching both before and after (or, more precisely, would have matched on the day this axis existed either way). WIDENED 352 -> 355 (movable-date-specs follow-up, 2026-08-17): the three Trinity-week ferias that M26 shape 2(a) used to cover now agree with the oracle on their citations and differ only on observed-identity, which is this entry own generic shape -- a temporal-origin day for which colitur sets no English name. Not a new divergence: the same three days, one of their two causes removed. WIDENED 355 -> 376 (BVM Saturday Mass, 2026-08-17): the BVM Saturday days M26 shape 1 used to cover now agree with the oracle on their citations and differ only on observed identity, which is this entry's own generic shape -- the office is temporal-origin and deliberately carries no English name. Not new divergences: the same days, their citation cause removed. CORRECTED, ef-sanctoral-status: 376 -> 373. Three rows left this entry for M30 when `ubaldus` and `didacus` were promoted to Feast on the Missal's own calendarium. They were unresolved here precisely because the observed office was TEMPORAL-origin (a feria) and carries no English name; now the observed office is the SAINT, which is sanctoral-origin and does resolve, so the comparator can state a real identity mismatch instead of declining to compare. The entry shrinks because its shape stopped occurring on those days, not because the days stopped diverging.")
- (expected_rows 373))
+CORRECTED, fix round 1 (coordinator review): the remaining 352 were previously described as every day whose citation \"ALREADY agreed with missalemeum before this task and still does\" -- imprecise for 18 of them. Before this task the citation axis did not exist at all, so NO row's citation was ever actually checked; \"already agreed\" wrongly implies the pre-task VALUE was correct on all 352, when for 18 it was not -- it only became correct, and therefore only started agreeing, because of this task's own three fixes (Holy Name Sunday's own two dates, 2026-01-04/2027-01-03; 12 more January-window ferias across the three RG-17(a)/Holy-Family-propers-rubric families that now resolve at step 2 instead of the walkback, one full list: 2026-01-02/05/07/08/09/12, 2027-01-04/05/07/08/11/12; and Corpus Christi/Sacred Heart in both years, 2026-06-04/06-12, 2027-05-27/06-04 -- 2+12+4=18, independently re-derived against the real resolver, not merely arithmetic). The other 334 were genuinely unaffected by this task, matching both before and after (or, more precisely, would have matched on the day this axis existed either way). WIDENED 352 -> 355 (movable-date-specs follow-up, 2026-08-17): the three Trinity-week ferias that M26 shape 2(a) used to cover now agree with the oracle on their citations and differ only on observed-identity, which is this entry own generic shape -- a temporal-origin day for which colitur sets no English name. Not a new divergence: the same three days, one of their two causes removed. WIDENED 355 -> 376 (BVM Saturday Mass, 2026-08-17): the BVM Saturday days M26 shape 1 used to cover now agree with the oracle on their citations and differ only on observed identity, which is this entry's own generic shape -- the office is temporal-origin and deliberately carries no English name. Not new divergences: the same days, their citation cause removed. CORRECTED, ef-sanctoral-status: 376 -> 373. Three rows left this entry for M30 when `ubaldus` and `didacus` were promoted to Feast on the Missal's own calendarium. They were unresolved here precisely because the observed office was TEMPORAL-origin (a feria) and carries no English name; now the observed office is the SAINT, which is sanctoral-origin and does resolve, so the comparator can state a real identity mismatch instead of declining to compare. The entry shrinks because its shape stopped occurring on those days, not because the days stopped diverging.
+
+NARROWED, celebrant-rubrics-phase1 Bug 2 (2026-08-22): 373 -> 370. The three Ascension-week days (2026-05-21, 2026-05-22, 2027-05-14) move to the new M31: before this fix colitur's own citation on these three days was ALSO wrong (the same Preceding_sunday walkback missalemeum still uses), so it happened to already agree with missalemeum's, leaving [Observed_identity_unresolved] as the ONLY diff -- this entry's own shape. The fix corrected colitur's side, so these three now ALSO carry a real citation mismatch and escape this entry's exact-match guard, the identical mechanism M23-M27 above already used when the citation axis was first built. See M31's own note for the full account.")
+ (expected_rows 370))
((id M19)
(citation "RG 110's OTHER direction: \"In Officio et Missa S. Petri semper fit commemoratio S. Pauli, ET VICISSIM\" -- the SAME rule M12 used to cite, applied here to Paul's own office commemorating Peter, not Peter's own office commemorating Paul; confirmed a third time by the calendarium's own June table, both photographic scans, word for word: \"In Commemoratione S. Pauli Ap., III classis. / Commemoratio S. Petri Ap.\"")
(verdict colitur)
@@ -308,3 +310,8 @@ CORRECTED, fix round 1 (coordinator review): the remaining 352 were previously d
(verdict colitur)
(note "ef-sanctoral-status branch. As with M29, the oracle here is not an independent witness against colitur but colitur's own discarded ancestor: colitur was bootstrapped from lectio, lectio's ini is generated from missalemeum, and missalemeum uses Divinum Officium's data files, so all three carried the same wrong status. Found by auditing ALL 290 fixed-date sanctoral entries against the calendarium; these two were the only status defects in the file. 3 rows in this window: 2026-05-16, 2026-11-13, 2027-11-13. Where colitur now observes the saint the oracle still observes the feria, so rank, observed identity and both citations differ together and the commemoration colitur used to emit is gone. Colour differs only on 13 November, the ferial green giving way to the confessor's white; 16 May is in Paschaltide and already white. Gated on the exact dates and on a subset of that named field list, so a divergence of any other shape on these days would still surface unexplained. Three rows also leave M18 (376 to 373): they were unresolved there only because the observed office was a temporal-origin feria with no English name, and the observed office is now sanctoral and resolves.")
(expected_rows 3))
+ ((id M31)
+ (citation "The Missale Romanum's own Proprium de Tempore carries an explicit marginal rubric immediately after the Ascension's own Mass propers, before \"Dominica post Ascensionem\" begins (scan1.txt:20749-20754, both scans corroborate): \"Diebus a feria VI post Ascensionem usque ad feriam VI ante vigiliam Pentecostes inclusive, dicitur Missa de festo Ascensionis\" -- on the days from the Friday after the Ascension until the Friday before the Vigil of Pentecost inclusive, the Mass OF THE FEAST OF THE ASCENSION is said. Corroborated by RG 490(b), which assigns the Ascension preface as de Tempore across the identical window. Full account in C41, data/ef/expected-divergences.sexp. Implemented in data/ef/lectionary.sexp's [ascension_week_entries] (tools/bootstrap_lectionary.ml), celebrant-rubrics-phase1 Bug 2, 2026-08-22.")
+ (verdict colitur)
+ (note "As with M29/M30, the oracle here is colitur's own discarded ancestor, not an independent witness: missalemeum -- Divinum Officium's lineage -- still walks these ferias back to the preceding Sunday's Mass, the SAME wrong answer colitur itself gave before this fix. 3 rows in this window: 2026-05-21, 2026-05-22, 2027-05-14. Of the twelve candidate civil dates the six slugs reach across 2026 and 2027 (six per year), the other nine are occupied by real sanctoral feasts both engines already agree on: 2026-05-15/18/19/20 (John Baptist de la Salle, Venantius, Peter Celestine, Bernardine of Siena) and 2027-05-07/10/11/12/13 (Stanislaus, Antoninus, Sts Philip & James, Sts Nereus/Achilleus/Domitilla/Pancras, Robert Bellarmine) -- checked directly against `colitur day`, not assumed. [Observed_identity_unresolved] fires alongside on all three: none is a sanctoral-origin day, M18's own pre-existing limit, unrelated to this cause. Gated on the exact dates and on a subset of [Observed_identity_unresolved; First_mismatch; Gospel_mismatch] (2027-05-14 also carries a real, AGREEING commemoration -- St Boniface -- on both sides, so Comm_count/Comm_presence never differ there and stay outside this diff set). Three rows leave M18 (373 to 370): they used to carry [Observed_identity_unresolved] alone (colitur's own pre-fix citation happened to already match missalemeum's, both walking back the same wrong way) and now also carry the citation mismatch this fix corrected colitur's own side of.")
+ (expected_rows 3))
diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp
index 19ff2ef..ca0d6a3 100644
--- a/data/ef/expected-divergences.sexp
+++ b/data/ef/expected-divergences.sexp
@@ -116,13 +116,45 @@ WHAT THIS ENTRY ALSO RESTS ON. Two things, neither of them a day-level witness.
Gated on lectio's own slug being one of the three vigils this clause can reach and colitur's not being a vigil -- identity on both sides, not a diff-set shape. The Assumption's and the Ascension's vigils are absent from that list because their I-class feasts always keep their own day: 0 occurrences across the whole domain, measured rather than assumed.")
(expected_rows 10))
- ; C8 -- CLOSED, REMOVED (2026-08-18): 0 of 16801 rows, was 26. lectio builds
- ; Rogation Monday and Tuesday now (RG 87, Easter+36/+37, violet under
- ; RG 128(d)). The Wednesday is NOT built there and deliberately so: Easter+38
- ; is the Ascension's Vigil, which wins the day, and the rubric asks for a
- ; commemoration -- a channel lectio's one-office-per-day temporal function
- ; does not have. That is the same reason this entry never covered the
- ; Wednesday either. Citation preserved in the register.
+ ((id C40)
+ (citation "The Missale Romanum's own CALENDARIUM table, February, footnote (docs/research/LT.txt:5011-5014, scan-corroborated docs/research/scan2.txt:3050-3058): \"In anno bissextili mensis februarius est dierum 29, et festum S. Matthiae celebratur die 25 februarii, ac festum S. Gabrielis a Virgine perdolente 28 februarii, et bis dicitur sexto calendas, id est die 24 et die 25\" -- in a leap year February has 29 days, St Matthias is kept on 25 February (not 24), St Gabriel of Our Lady of Sorrows on 28 February (not 27), and the sixth kalends of March is said twice. Implemented in Rite_ef.Temporal_ef.bissextile_fixed_key, threaded through Colitur_kernel.Rite.t's new [fixed_key] field (bissextile-shift task, 2026-08-22). Not RG-numbered -- a calendarium footnote, not a Rubricae Generales paragraph.")
+ (verdict colitur)
+ (note "lectio builds no such shift at all: checked directly against the fixture, Matthias sits at 24 February and Gabriel of Our Lady of Sorrows at 27 February in EVERY ONE of the 11 leap years the 2005-2050 window covers (2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040, 2044, 2048), never moved. colitur now moves both, per the calendarium's own footnote, so every leap year in this window diverges on the two shifted civil days: colitur vacates 24/27 February (the saint moves away) and occupies 25/28 February instead (the saint newly appears there), while lectio keeps the pre-shift assignment throughout.
+
+19 Matthias rows + 2 Gabriel rows = 21, not the naive 11-years x 2-sides x 2-feasts = 44 ceiling: this comparator, BY DESIGN (see this file's own header), never compares commemorations -- only observed slug/rank/colour/citations -- so a side where the shifted saint has ZERO comparator-visible footprint, on both engines, whether pre- or post-shift, produces no row even though a real change happened underneath (the full-domain probe below, which DOES track commemorations, still counts it).
+
+MATTHIAS fires on both sides (24 vacated AND 25 occupied) in 8 of the 11 years; in the remaining 3 (2008, 2024, 2036) exactly one side is missing, and in every one of the three the missing side is a SUNDAY -- 2008-02-24 and 2036-02-24 (Matthias already loses outright to that Sunday whichever engine or shift-state is asked, so the vacated side shows no change); 2024-02-25 (the occupied side: colitur's post-shift Matthias loses outright to the 2nd Sunday of Lent, I class, with no commemoration surviving RG111's own tight cap -- Matthias's footprint there is genuinely zero, not merely uncompared). A Sunday's own observed slug is unaffected by this shift either way, so whichever side coincides with one contributes nothing comparator-visible; only the other, non-Sunday side shows the real new divergence. 2024-02-24 is L3's own original date (data/ef/expected-divergences-lms.sexp), now confirmed independently by a second, larger fixture.
+
+GABRIEL (Class3, weaker than Matthias's Class2/Apostle rank) fires in only 2 of the 11 years (2028 occupied, 2044 vacated) because in the other 9 his position is already dominated by a Class3-or-stronger competing office both before and after the shift, so his own presence is commemoration-only throughout -- invisible to this comparator on either side. He surfaces only where the position happens to be a plain, unprivileged Class4 feria weak enough for his own Class3 to win outright: 2028-02-28 (colitur: gabriel-of-our-lady-of-sorrows, Class3, White, beating ef-septuagesima-3-monday, Class4) and 2044-02-27 (lectio still shows gabriel there unmoved, Class3, White; colitur's post-shift 27th falls to RG78's own votive BVM-Saturday office instead, also White, hence the colour match but slug/rank/citation mismatch in that row). Every one of the 21 rows was read directly off the comparator's own failure output, not apportioned by hand.
+
+Diff shapes: most rows carry [Slug_f; Rank; Colour_f; First_f; Gospel_f] (the temporal office on one side and the saint's own Class2/3 proper on the other differ in rank too); a handful carry only [Slug_f; Colour_f; First_f; Gospel_f] where the competing temporal office happens to share Matthias's own Class2 (the privileged Lenten Ember Friday/Saturday, 2024 and 2040) or Gabriel's own White (a BVM Saturday, 2044-02-27's own vacated row). Season never differs on any of the 21 -- both sides stay in whichever season that Sunday-relative week already put them in, regardless of which fixed entry, if any, sits on the day.
+
+BLAST RADIUS, MEASURED, full 1583-9999 domain (not merely this fixture's 2005-2050 window): 6 983 liturgical days change, zero unclassified, across all 2 041 leap years in the domain -- see data/ef/expected-divergences-lms.sexp's own now-closed L3 entry for the full figures (this entry's own 21-row 2005-2050 population is the expected subset of that domain-wide count landing inside the fixture's own window: 11 leap years x up to 2 new rows each, minus the three already-explained overlaps above).")
+ (expected_rows 21))
+ ((id C41)
+ (citation "The Missale Romanum's own Proprium de Tempore carries an explicit marginal rubric immediately after the Ascension's own Mass propers, before \"Dominica post Ascensionem\" begins (scan1.txt:20749-20754, both scans corroborate): \"Diebus a feria VI post Ascensionem usque ad feriam VI ante vigiliam Pentecostes inclusive, dicitur Missa de festo Ascensionis, cum Gloria et praefatione de Ascensione, sine Credo et Communicantes proprio\" -- on the days from the Friday after the Ascension until the Friday before the Vigil of Pentecost inclusive, the Mass OF THE FEAST OF THE ASCENSION is said. Corroborated by RG 490(b) (LT.txt:3981-3985), which assigns the Ascension preface \"tamquam de Tempore\" to every Mass in that same window lacking a proper preface -- consistent only if the Mass repeated is the Ascension's own, not a numbered Sunday's. Witnessed directly: the LMS Ordo prints \"Mass of the Ascension\" literally across all three fixture windows (data/ef/expected-divergences-lms.sexp's own L2, closed by this entry) on every affected day of BOTH weeks, and the FIUV Ordo's own [praef] field independently reads \"Ascensionis\" on the two analogous 2025-2026 dates its title labels by week rather than by formulary. Implemented in data/ef/lectionary.sexp's [ascension_week_entries] (tools/bootstrap_lectionary.ml), celebrant-rubrics-phase1 Bug 2, 2026-08-22.")
+ (verdict colitur)
+ (note "lectio has no equivalent rubric: it walks the six affected ferias back to the nearest preceding Sunday's Mass (5th Sunday after Easter for [ef-easter-6-friday], Dominica post Ascensionem for the five [ef-easter-7-*] weekdays), the SAME wrong answer colitur used to give before this fix. Both sides agree on slug, season (Layer A normalises colitur's [paschaltide] and lectio's [easter] as the same vocabulary), rank and colour throughout -- only the citation text differs, so every row carries [First_f; Gospel_f] alone.
+
+MEASURED (test_differential.ml's own [classify], 2005-2050 fixture, run directly): 95 rows, all six slugs represented, zero unclassified. Population varies year to year (0-3 of the six slugs fire per year) because most years have a real sanctoral feast occupying one or more of the six candidate civil dates -- the same reason data/ef/expected-divergences-lms.sexp's own L2 found only 1-3 affected days per its own one-year fixture windows, now confirmed at scale across the full 46-year differential window.
+
+The window's two Saturdays (Easter+41, Easter+48) never reach this entry: Easter+48 is the Vigil of Pentecost, a named day with its own Mass, outside the rubric's own upper bound; Easter+41 is an ordinary Class4 Saturday, so RG 78's votive Office of Our Lady on Saturday intercepts it before the lectionary lookup this entry's own fix touches is ever reached (readings' own step ordering) -- confirmed directly: no row in the 95 carries [ef-easter-6-saturday] or [ef-easter-7-saturday].
+
+BLAST RADIUS, MEASURED (full 1583-9999 sweep, in-process against {!Colitur_kernel.Calendar.year}, throwaway probe, not committed): 16 350 days total, split ef-easter-6-friday 2 562, ef-easter-7-monday 2 618, ef-easter-7-tuesday 2 744, ef-easter-7-wednesday 2 776, ef-easter-7-thursday 2 781, ef-easter-7-friday 2 869 -- every one resolved via step 2's Own_slug, zero anomalies, and the window's two Saturdays confirmed to contribute zero Own_slug hits via this cause across the whole domain (RG 78's votive Office of Our Lady always intercepts first), corroborating the code-level reasoning above by direct sweep rather than inspection alone.")
+ (expected_rows 95))
+ ((id C8)
+ (citation "RG 119 (Caput XVIII, \"De Colore Paramentorum\"): white is used \"in Officio et Missa de Tempore ... a Missa Vigiliae paschalis usque ad Missam vigiliae Pentecostes exclusive\" -- the de-Tempore Office and Mass are white from the Paschal Vigil Mass until the Pentecost Vigil Mass exclusive, and Rogation Monday/Tuesday (Easter+36/+37) sit inside that window. RG 128's own exhaustive four-case list for violet (Advent I-Christmas Eve; Septuagesima-Paschal Vigil; the September Ember ferias; vigils of II/III class OUTSIDE Paschaltide) never names Rogation days. RG 88 (\"de Litaniis minoribus nihil fit in Officio, sed tantum in Missa\"): the violet belongs to the Rogation MASS/procession, a distinct votive text this engine does not model, not to the day's own Office. Fixed in Rite_ef.Temporal_ef.temporal's Rogation branch, celebrant-rubrics-phase1 Bug 1, 2026-08-22 -- see that branch's own citation and data/ef/expected-divergences-lms.sexp's now-closed L6 entry, which is what surfaced it (LMS Ordo 2023-2024, 2024-05-06, \"FERIA IV Cl W\").")
+ (verdict colitur)
+ (note "REOPENED (2026-08-22, celebrant-rubrics-phase1, Bug 1 fix). Previously CLOSED, REMOVED (2026-08-18): 0 of 16801 rows, was 26, with this note, PRESERVED VERBATIM because it contains a misattribution now corrected rather than silently dropped: \"lectio builds Rogation Monday and Tuesday now (RG 87, Easter+36/+37, violet under RG 128(d)). The Wednesday is NOT built there and deliberately so: Easter+38 is the Ascension's Vigil, which wins the day, and the rubric asks for a commemoration -- a channel lectio's one-office-per-day temporal function does not have. That is the same reason this entry never covered the Wednesday either. Citation preserved in the register.\"
+
+THE MISATTRIBUTION: \"violet under RG 128(d)\" is wrong. RG 128(d) governs vigils of II/III class OUTSIDE Paschaltide; Rogation Monday/Tuesday are neither vigils nor outside Paschaltide. Checked against docs/research/rules-register.md (gitignored, local) while researching Bug 1: no claim of an RG 128(d) basis for Rogation colour exists there -- the misattribution was confined to this file's own closure note. It traces to Rite_ef.Temporal_ef.temporal's own Rogation branch, which hardcoded [Colour.Violet] with NO citation at all before this fix; whoever wrote this entry's closure note in 2026-08-18 apparently backfilled a plausible-looking but wrong citation for behaviour that was never actually cited in the code it described.
+
+WHY THIS REOPENS RATHER THAN STAYS CLOSED: the entry closed in 2026-08-18 because lectio, independently, ALSO computes these two days violet -- not because either engine's violet was ever verified against the Missal. Both engines shared the same uncited assumption, so the comparator saw agreement and the entry went to zero. Bug 1 corrected COLITUR's side to white (RG 119); lectio's own violet is unchanged (a sibling project, out of this repo, not modified here). The comparator now disagrees again, on the same 26 rows, for the OPPOSITE reason: previously colitur was wrong and lectio was wrong the same way; now colitur is right and lectio still carries the old, uncited assumption forward -- consistent with CLAUDE.md's own \"colitur vs missalemeum\" base-rate note for a different lineage, applied here to lectio directly: a fresh divergence is not presumptively colitur's fault once colitur has just been corrected FROM the shared error.
+
+MEASURED (test_differential.ml's own [classify], 2005-2050 fixture, DEBUGC8 probe run and reverted): exactly 26 rows, all with diffs=[Colour_f] alone -- season and slug already agree (lectio's own [easter]/colitur's [paschaltide] season labels are Layer A vocabulary synonyms, not a diff), and on every row lectio=violet, colitur=white. Dates: 2005-05-03, 2006-05-22/23, 2007-05-14, 2011-05-30, 2012-05-14, 2013-05-06, 2016-05-03, 2017-05-22/23, 2018-05-08, 2022-05-23/24, 2024-05-06, 2027-05-03, 2028-05-22/23, 2029-05-08, 2032-05-03, 2033-05-23/24, 2040-05-08, 2044-05-23/24, 2047-05-21, 2049-05-24. Fewer than the 2-per-year x 23-year x ~2 ceiling because a competing sanctoral feast impedes the Rogation office outright in some years on one or both of the two days (unchanged by this fix, gated on colitur's own [rogation-monday]/[rogation-tuesday] slug in [layer_c_reason] the same as before). The Wednesday remains absent from this entry for the same reason the pre-2026-08-18 and post-2026-08-18 notes both already gave: Easter+38 is the Ascension Vigil (RG 91 entry 21), which outranks the Rogation Wednesday commemoration outright on colitur's side, and lectio has no Rogation-Wednesday concept at all to compare against regardless.
+
+Gated on [(String.equal c.slug \"ef-rogation-monday\" || String.equal c.slug \"ef-rogation-tuesday\") && subset diffs [ Season; Slug_f; Colour_f ]] in [layer_c_reason] -- unchanged code, present since before this entry's 2026-08-18 closure and never removed; only the sexp record was removed when the count hit zero, per this file's own \"closed = 0 rows, not code deleted\" convention.")
+ (expected_rows 26))
; C14 -- CLOSED, REMOVED (2026-08-18): 0 of 16801 rows, was 3. lectio has
; adopted RG 96(a)/97/98. Its transferIfImpededEF resolved each impeded
; I-class feast independently, so in 2008, 2035 and 2046 St Joseph and the
diff --git a/data/ef/lectionary.sexp b/data/ef/lectionary.sexp
index a83e12e..e34622d 100644
--- a/data/ef/lectionary.sexp
+++ b/data/ef/lectionary.sexp
@@ -10,7 +10,7 @@
;
; Source: ../lectio/internal/caldata/tridentine-lectionary.ini
; SHA-256: ccd6640e8c2ae4d260e62c55cfe2b3ea14ab996e8e5a82cc1b9a37bc65ac8591
-; 153 entries (119 ini sections translated/widened into colitur's own
+; 159 entries (119 ini sections translated/widened into colitur's own
; Temporal_ef vocabulary via [colitur_keys]; 1 hand-authored from a
; second source file [vigil_entries]; 6 hand-authored directly from
; the Missal [holy_week_entries]; 1 hand-authored directly from the
@@ -134,9 +134,27 @@
(ef-easter-5-saturday
(((part First) (reference "Ecclus 24:14-16"))
((part Gospel) (reference "John 19:25-27"))))
+ (ef-easter-6-friday
+ (((part First) (reference "Acts 1:1-11"))
+ ((part Gospel) (reference "Mark 16:14-20"))))
(ef-easter-6-saturday
(((part First) (reference "Ecclus 24:14-16"))
((part Gospel) (reference "John 19:25-27"))))
+ (ef-easter-7-friday
+ (((part First) (reference "Acts 1:1-11"))
+ ((part Gospel) (reference "Mark 16:14-20"))))
+ (ef-easter-7-monday
+ (((part First) (reference "Acts 1:1-11"))
+ ((part Gospel) (reference "Mark 16:14-20"))))
+ (ef-easter-7-thursday
+ (((part First) (reference "Acts 1:1-11"))
+ ((part Gospel) (reference "Mark 16:14-20"))))
+ (ef-easter-7-tuesday
+ (((part First) (reference "Acts 1:1-11"))
+ ((part Gospel) (reference "Mark 16:14-20"))))
+ (ef-easter-7-wednesday
+ (((part First) (reference "Acts 1:1-11"))
+ ((part Gospel) (reference "Mark 16:14-20"))))
(ef-easter-8-monday
(((part First) (reference "Acts 10:34, 42-48"))
((part Gospel) (reference "John 3:16-21"))))