summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 17:56:42 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 17:56:42 +0200
commitf4cc032d7e812d716ff6b5df8192f79a2560e8f0 (patch)
tree65c8c20456ebe66fd1ff2253428357b5b027ec0a /data
parent60e87914718dd2c8e69bb89d8cc48d6bef9bfc74 (diff)
downloadcolitur-f4cc032d7e812d716ff6b5df8192f79a2560e8f0.tar.gz
colitur-f4cc032d7e812d716ff6b5df8192f79a2560e8f0.zip
feat(ef): the Gloria in excelsis, RG 431-432, deferring to Breviary 237-238
Phase 2 of celebrant-rubrics-phase1: colitur rubrics gains a fifth column, whether the Gloria is said. Follows the Creed's own seam exactly -- Rite.t.gloria, Liturgical_day.t.gloria, wired through calendar.ml the same way. RG 431(a)/432(a) defer the Gloria to the Breviary's own Te Deum rule (nn. 237-238), so te_deum is implemented as its own named predicate, cited clause by clause, not collapsed into a colour heuristic. 431(c) (Holy Thursday, the Easter Vigil Mass) and 432(b)/(d) (violet; a Requiem) are independent overrides checked ahead of the Te Deum-derived answer. Every clause this engine has no dimension to model (votive Mass classes, the wider n.302 "Missa festiva" categories) is stated as N/A with its own reasoning, not silently dropped. Validated against the FIUV universal Ordo (Gloria and Te Deum) and all three LMS editions (Gloria). A first pass over-trusted a clean-looking 15-for-15 FIUV contradiction of 237(b)'s own Septuagesima exception and replaced it with a blanket "every Sunday" rule; the evidence was itself corrupted -- the FIUV extractor recognised only one of the source's two Te Deum negations ("non dicitur", not "sine"), so every "sine Te Deum" Sunday read wrongly true. Fixed in tools/extract_fiuv_ordo.ml, fixture re-extracted, and the literal 237(b) reading restored once the corrected data confirmed it. A second bug surfaced alongside it (Palm/ Passion Sunday wrongly reading true via Temporal_ef.named's own table membership, then Christ the King wrongly reading false from an over-broad fix) is closed with an explicit two-slug exclusion. Domain-wide 1583-9999: every violet or Rose day is gloria=false except the Easter Vigil (RG 431(c) lex specialis), every Requiem is gloria=false, both measured exhaustively, zero exceptions. Mutation- proved: disabling 431(c) reddens 8 tests including all four oracle comparisons; disabling 238(c)'s feria-I-classis exclusion reddens exactly the dedicated Ash Wednesday unit test, a genuine blind spot in both oracle layers, reported rather than hidden. Two open, cited findings, neither fixed here (out of this task's "follow creed's exact seam" scope): a privileged Lenten/Passiontide feria carrying one commemoration reads Gloria=true in the LMS Ordo but Te-Deum=true/Gloria=false in FIUV -- the two oracles disagree with each other, not merely with colitur (data/ef/expected-divergences-lms.sexp L5, expected-divergences-fiuv.sexp F3); and a pre-existing, uncited Colour.Violet bug on Rogation Monday/Tuesday in Temporal_ef.temporal, surfaced by this comparison but root-caused as a separate defect (L6). day/readings verified byte-identical against a build from the branch tip before this task (v0.10.1's own tag predates an already-landed bissextile fix that legitimately changed both, so it is not the right baseline). 671 tests green (dune test); 678 with the exhaustive sweep (COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force, ~104s).
Diffstat (limited to 'data')
-rw-r--r--data/ef/expected-divergences-fiuv.sexp108
-rw-r--r--data/ef/expected-divergences-lms.sexp112
2 files changed, 213 insertions, 7 deletions
diff --git a/data/ef/expected-divergences-fiuv.sexp b/data/ef/expected-divergences-fiuv.sexp
index 5506e46..6ed9a04 100644
--- a/data/ef/expected-divergences-fiuv.sexp
+++ b/data/ef/expected-divergences-fiuv.sexp
@@ -15,12 +15,106 @@
; backs, the SAME convention every other allow-list file in this project
; uses: not always "colitur".
;
-; Empty as of this task: the Creed comparison found no unexplained
+; 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). Kept as a file, not deleted, on the same footing as
-; expected-divergences-lms.sexp's own empty-but-live state after L1's
-; closure: the machinery that would explain a FUTURE divergence needs
-; somewhere to live, and an empty allow-list with a live "every entry
-; must be used" check is a real invariant worth keeping, not a
-; formality.
+; 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).
+
+; 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.
+
+; F3 -- OPEN, single-witnessed, colitur's own possible gap (Te Deum
+; axis). 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.
+;
+; CITATION: 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 suggests, not yet 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 treats as settled.
+;
+; WHY NOT FIXED HERE: 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.
diff --git a/data/ef/expected-divergences-lms.sexp b/data/ef/expected-divergences-lms.sexp
index 4cb5d2a..df813f9 100644
--- a/data/ef/expected-divergences-lms.sexp
+++ b/data/ef/expected-divergences-lms.sexp
@@ -6,6 +6,10 @@
; (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.
;
; A SEPARATE file from data/ef/expected-divergences.sexp (the lectio
; allow-list) and data/ef/expected-divergences-missalemeum.sexp (the
@@ -228,3 +232,111 @@
(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 -- OPEN, colitur's own gap, found extending this suite to the Gloria
+; axis (celebrant-rubrics-phase1 Phase 2, 2026-08-22). 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.
+;
+; 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.
+;
+; 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: 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 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.
+
+; 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.")