aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/cli.t159
-rw-r--r--test/dune10
-rw-r--r--test/fixtures/efdotorg-ordo-2024-2025.sexp398
-rw-r--r--test/fixtures/efdotorg-ordo-2025-2026.sexp398
-rw-r--r--test/fixtures/efdotorg-ordo-2026-2027.sexp398
-rw-r--r--test/fixtures/fiuv-ordo-2025-2026.sexp1817
-rw-r--r--test/fixtures/lms-ordo-2023-2024.sexp1692
-rw-r--r--test/fixtures/lms-ordo-2024-2025.sexp1719
-rw-r--r--test/fixtures/lms-ordo-2025-2026.sexp1706
-rw-r--r--test/golden/grid-2027.html4
-rw-r--r--test/golden/grid-2027.ms2
-rw-r--r--test/golden/grid-2027.tex4
-rw-r--r--test/golden/grid-2027.typ4
-rw-r--r--test/golden/ordo-2027.adoc4
-rw-r--r--test/golden/ordo-2027.html6
-rw-r--r--test/golden/ordo-2027.md4
-rw-r--r--test/golden/ordo-2027.ms6
-rw-r--r--test/golden/ordo-2027.tex6
-rw-r--r--test/golden/ordo-2027.txt6
-rw-r--r--test/golden/ordo-2027.typ6
-rw-r--r--test/test_calendar.ml20
-rw-r--r--test/test_colitur.ml11
-rw-r--r--test/test_differential.ml50
-rw-r--r--test/test_efdotorg_ordo.ml403
-rw-r--r--test/test_fiuv_ordo.ml595
-rw-r--r--test/test_golden.ml132
-rw-r--r--test/test_lectionary.ml38
-rw-r--r--test/test_lectionary_ef.ml91
-rw-r--r--test/test_lms_ordo.ml1020
-rw-r--r--test/test_mass_formulary.ml41
-rw-r--r--test/test_oracle.ml47
-rw-r--r--test/test_precedence.ml55
-rw-r--r--test/test_rubrics_ef.ml1312
-rw-r--r--test/test_validate.ml128
34 files changed, 12233 insertions, 59 deletions
diff --git a/test/cli.t b/test/cli.t
index 2e9a0e2..4ae116f 100644
--- a/test/cli.t
+++ b/test/cli.t
@@ -17,7 +17,7 @@ A year outside the supported domain is rejected (exit 2):
No/garbage arguments give a usage error (exit 2):
$ colitur
- colitur: usage: colitur easter <year> | colitur temporal <year> | colitur day <year> | colitur readings <year> | colitur emit --format FMT --from Y --to Y | colitur table --year Y --template FILE | colitur render --template FILE --year Y | colitur publish --from Y --to Y --out DIR | colitur lang --list|--dump CODE|--check FILE | colitur config --show | colitur check FILE | colitur new-overlay (try: colitur --help)
+ colitur: usage: colitur easter <year> | colitur temporal <year> | colitur day <year> | colitur readings <year> | colitur rubrics <year> | colitur emit --format FMT --from Y --to Y | colitur table --year Y --template FILE | colitur render --template FILE --year Y | colitur publish --from Y --to Y --out DIR | colitur lang --list|--dump CODE|--check FILE | colitur config --show | colitur check FILE | colitur new-overlay (try: colitur --help)
[2]
The EF temporal cycle for a year, one line per day:
@@ -199,6 +199,91 @@ A year outside the supported domain is rejected (exit 2):
colitur: year 1000 out of range 1583..9999
[2]
+Rubrics (Task 4, celebrant-rubrics-phase1): the day's own Mass formulary, one
+row per day: date, the formulary's slug (which Mass is actually said, not
+always the day's own), and how that was decided
+(proper/own/preceding-sunday/common/votive). TAB-separated -- not space like
+`day`, not " | " like `readings` -- because a resolved formulary NAME (a
+later column, not this one) can itself contain both spaces and punctuation a
+citation never does, and TAB is what stays unambiguous either way. A
+separate command for the same mechanical reason `readings` is: `day`'s row
+is fixed-width space-separated with a variable-length "+slug" tail.
+
+ $ colitur rubrics 2026 | head -3
+ 2026-01-01 ef-circumcision own true true nativity
+ 2026-01-02 ef-christmas-1-friday own false true nativity
+ 2026-01-03 ef-christmas-1-saturday votive false true bvm
+
+ $ colitur rubrics 2026 | wc -l
+ 365
+
+1 January reads "own", not "proper": the Circumcision is a TEMPORAL-origin
+office (Rite_ef.Temporal_ef, not the sanctoral Layer), so step 1 of the
+resolution chain (a SANCTORAL observed celebration's own proper) does not
+apply to it -- step 2 does (the day's own temporal slug in the lectionary),
+tagged `own`. Contrast a real sanctoral saint with his own proper:
+
+ $ colitur rubrics 2038 | grep '^2038-03-08'
+ 2038-03-08 john-of-god proper false true common
+
+A saint with no proper of his own says his assigned Common (step 4):
+
+ $ colitur rubrics 2038 | grep '^2038-03-06'
+ 2038-03-06 common-of-non-virgins-1 common false true common
+
+A weekday with no proper of its own resumes the preceding Sunday's, never
+its own observed slug -- 1 December 2025 is the Monday after Advent I, and
+Advent's ferias have no Mass of their own (step 3):
+
+ $ colitur rubrics 2025 | grep '^2025-12-01'
+ 2025-12-01 ef-advent-sunday-1 preceding-sunday false false common
+
+3 January 2026 above ("votive") is the RG 78/309(a) Saturday Mass of Our
+Lady, said IN PLACE of the day's own office's Mass while the office (an
+unoccupied IV-class Saturday) itself is kept unchanged -- distinct from
+`own` precisely because a votive Mass is not the day's own, even though
+`said` names the identical slug either way.
+
+A year outside the supported domain is rejected (exit 2):
+
+ $ colitur rubrics 1000
+ colitur: year 1000 out of range 1583..9999
+ [2]
+
+--overlay is accepted, the same reasoning `readings` gets it: an overlay can
+change which celebration is observed, hence which Mass formulary is said.
+Baseline, the unoccupied Saturday says Our Lady's votive Mass; with the
+diocesan overlay's local patron observed instead (no proper or Common of his
+own in the fixture), the chain falls all the way back to step 3:
+
+ $ colitur rubrics 2026 --overlay fixtures/overlay-example-diocesan.sexp | grep '^2026-07-11'
+ 2026-07-11 ef-time-after-pentecost-sunday-6 preceding-sunday false true common
+ $ colitur rubrics 2026 | grep '^2026-07-11'
+ 2026-07-11 ef-time-after-pentecost-6-saturday votive false true bvm
+
+`--lang`/`--raw`/`--sigla-*` are refused rather than silently ignored, unlike
+`readings`: this row resolves no display name and no citation for any of
+them to affect.
+
+ $ colitur rubrics 2026 --lang en
+ colitur: --lang/--raw have no effect on `rubrics`; refusing rather than ignoring them
+ [2]
+
+ $ colitur rubrics 2026 --raw
+ colitur: --lang/--raw have no effect on `rubrics`; refusing rather than ignoring them
+ [2]
+
+ $ colitur rubrics 2026 --sigla-style en
+ colitur: --sigla-style/--sigla-book/--sigla-tradition have no effect on `rubrics`; refusing rather than ignoring them
+ [2]
+
+`colitur day` and `colitur readings` are unaffected by any of the above:
+
+ $ colitur day 2026 --raw | head -1
+ 2026-01-01 thursday christmastide - ef-circumcision class-1 white
+ $ colitur readings 2026 --raw | head -1
+ 2026-01-01 ef-circumcision | Titus 2:11-15 | Luke 2:21
+
An explicit COLITUR_DATA_DIR that does not hold the data is an error (exit 2),
never a silent fall-back to some other copy. A packager or operator who names
a directory has stated an intent; quietly calendaring off a different one
@@ -247,7 +332,24 @@ The error path is the mirror image -- nothing on stdout, exit 2:
Every command the help lists is a command the binary actually accepts. This
is the check that catches help text drifting away from the dispatch:
- $ for c in easter temporal day readings; do colitur $c 2026 > /dev/null || echo "$c FAILED"; done
+ $ for c in easter temporal day readings rubrics; do colitur $c 2026 > /dev/null || echo "$c FAILED"; done
+
+`rubrics`' own field count drifted once already (Task 5 landed a fourth
+column, creed; --help's "output formats" section and its worked example
+still showed three, and stayed wrong for a whole review round because
+nothing here pinned the help BODY, only command dispatch above). This
+compares --help's own worked example against what `rubrics` actually
+prints for the identical day, so the two cannot silently drift apart
+again in either direction:
+
+ $ colitur --help | grep '^ rubrics date'
+ rubrics date, formulary slug, source, creed, gloria, preface -- TAB-separated
+
+ $ colitur --help | sed -n '/^ rubrics date/{n;p}'
+ 2026-01-01[TAB]ef-circumcision[TAB]own[TAB]true[TAB]true[TAB]nativity
+
+ $ colitur rubrics 2026 | grep '^2026-01-01' | sed $'s/\t/[TAB]/g'
+ 2026-01-01[TAB]ef-circumcision[TAB]own[TAB]true[TAB]true[TAB]nativity
--version prints the version alone, to standard output, exit 0. Deliberately
not embedded in the help text above: this pin would then have to be edited
@@ -327,14 +429,14 @@ A flag needing a value, given none:
$ colitur day 2026 --overlay
colitur: --overlay needs a file path
- colitur: usage: colitur easter <year> | colitur temporal <year> | colitur day <year> | colitur readings <year> | colitur emit --format FMT --from Y --to Y | colitur table --year Y --template FILE | colitur render --template FILE --year Y | colitur publish --from Y --to Y --out DIR | colitur lang --list|--dump CODE|--check FILE | colitur config --show | colitur check FILE | colitur new-overlay (try: colitur --help)
+ colitur: usage: colitur easter <year> | colitur temporal <year> | colitur day <year> | colitur readings <year> | colitur rubrics <year> | colitur emit --format FMT --from Y --to Y | colitur table --year Y --template FILE | colitur render --template FILE --year Y | colitur publish --from Y --to Y --out DIR | colitur lang --list|--dump CODE|--check FILE | colitur config --show | colitur check FILE | colitur new-overlay (try: colitur --help)
[2]
An unknown option is rejected rather than treated as a positional word:
$ colitur day 2026 --diocese
colitur: unknown option --diocese
- colitur: usage: colitur easter <year> | colitur temporal <year> | colitur day <year> | colitur readings <year> | colitur emit --format FMT --from Y --to Y | colitur table --year Y --template FILE | colitur render --template FILE --year Y | colitur publish --from Y --to Y --out DIR | colitur lang --list|--dump CODE|--check FILE | colitur config --show | colitur check FILE | colitur new-overlay (try: colitur --help)
+ colitur: usage: colitur easter <year> | colitur temporal <year> | colitur day <year> | colitur readings <year> | colitur rubrics <year> | colitur emit --format FMT --from Y --to Y | colitur table --year Y --template FILE | colitur render --template FILE --year Y | colitur publish --from Y --to Y --out DIR | colitur lang --list|--dump CODE|--check FILE | colitur config --show | colitur check FILE | colitur new-overlay (try: colitur --help)
[2]
The shipped example overlay is runnable documentation, and it must actually
@@ -449,10 +551,55 @@ CSV run rather than one per year:
$ colitur emit --format csv --from 2027 --to 2028 | wc -l
732
-sexp and xml are also available:
+sexp and xml are also available. This line count moved twice in the same
+whole-branch review fix round, for two different reasons, both cosmetic:
+[emit --format sexp] pretty-prints with [Sexplib.Sexp.to_string_hum], a
+column-width wrapping printer, not a fixed-shape one, so any change to a
+value's own rendered WIDTH can shift where it wraps.
+
+9010 -> 9011 (RG 476(f)): 2027's All Souls' Day (2 November) record grew
+a single wrapped line when its own [creed] field's value changed from
+[true] to [false] (the Creed is never said at a Requiem Mass; see
+rubrics_ef.ml), because "false" is one character longer than "true" and
+pushed that one line's rendered width over the wrap threshold.
+
+9011 -> 9025 (Mass_formulary.t.said honesty, Fix 3): [said] gained an
+[option] (its own .mli has the full account) -- every day's formulary
+record now prints [(said (<slug>))] instead of [(said <slug>)], one
+character wider, and a [Votive] day (the RG 78 Saturday Mass of Our
+Lady) prints [(said ())] instead of naming a slug at all, since the
+data genuinely names none for the Mass actually said. Both changes ripple
+across many lines' own wrap points, not just the days whose DATA changed
+-- confirmed directly (diffed the full sexp output line by line): every
+difference is exactly this [said] shape change or a consequent wrap
+shift, nothing else. Not a claim that [emit]'s FORMAT changed, only that
+individual records' pretty-printed SHAPE did.
+
+9025 -> 9197 (Gloria, celebrant-rubrics-phase1 Phase 2): {!Liturgical_day.t}
+gained a [gloria] field, the same seam [creed] already used -- [emit
+--format sexp] dumps the whole record ({!Sexplib.Sexp.to_string_hum} over
+[Liturgical_day.sexp_of_t]) unlike [csv]/[json]/[xml] (a curated
+[View]/[Record] projection that has never included [creed] either, hence
+their own line counts above are UNCHANGED by this task -- confirmed by
+this cram file's own diff touching only the [sexp] count). All 365 of
+2027's records print a new [(gloria <bool>)] token (checked directly,
+[grep -c gloria]), but the wrap-point mechanics are the same cosmetic
+reflow the two entries above describe, not a fixed one-line-per-record
+addition: 2027-01-01's own record wraps [gloria] onto its own new line,
+while 2027-01-02's fits it on the same line as [creed] and [formulary] --
+172 of 365 records happened to cross a wrap boundary, the rest did not.
+
+9197 -> 9252 (preface, celebrant-rubrics-phase1 Phase 3): {!Liturgical_day.t}
+gained a [preface] field, the same seam [gloria] just above used -- all
+365 of 2027's records print a new [(preface (<variant>))] token (checked
+directly, [grep -c "(preface"]), [(preface ())] on exactly one day
+(2027's own Good Friday, 26 March -- this engine resolves no Mass at all
+that day, {!Rite_ef.Rubrics_ef.preface}'s own citation). Same cosmetic
+reflow mechanics as every entry above, not a fixed one-line-per-record
+addition.
$ colitur emit --format sexp --from 2027 --to 2027 | wc -l
- 8472
+ 9252
$ colitur emit --format xml --from 2027 --to 2027 | head -2
<?xml version="1.0" encoding="UTF-8"?>
diff --git a/test/dune b/test/dune
index d883d2f..840f0d1 100644
--- a/test/dune
+++ b/test/dune
@@ -9,6 +9,9 @@
../lang/traditions.ini
../data/ef/expected-divergences.sexp
../data/ef/expected-divergences-missalemeum.sexp
+ ../data/ef/expected-divergences-lms.sexp
+ ../data/ef/expected-divergences-fiuv.sexp
+ ../data/ef/expected-divergences-efdotorg.sexp
../data/ef/lectionary.sexp
../data/ef/commons.sexp
../data/ef/examples/diocesan-example.sexp
@@ -16,6 +19,13 @@
fixtures/missalemeum-ef-2026-2027.txt
fixtures/missalemeum-ef-2038.txt
fixtures/missalemeum-ef-2035.txt
+ fixtures/lms-ordo-2023-2024.sexp
+ fixtures/lms-ordo-2024-2025.sexp
+ fixtures/lms-ordo-2025-2026.sexp
+ fixtures/fiuv-ordo-2025-2026.sexp
+ fixtures/efdotorg-ordo-2024-2025.sexp
+ fixtures/efdotorg-ordo-2025-2026.sexp
+ fixtures/efdotorg-ordo-2026-2027.sexp
../templates/ef/ordo.tex
../templates/ef/ordo.ms
../templates/ef/ordo.html
diff --git a/test/fixtures/efdotorg-ordo-2024-2025.sexp b/test/fixtures/efdotorg-ordo-2024-2025.sexp
new file mode 100644
index 0000000..be69daa
--- /dev/null
+++ b/test/fixtures/efdotorg-ordo-2024-2025.sexp
@@ -0,0 +1,398 @@
+; test/fixtures/efdotorg-ordo-2024-2025.sexp -- efdotorg-preface task
+; (2026-08-24-colitur-celebrant-rubrics-phase1): the THIRD independent
+; preface witness (RG 482-499), extraordinaryform.org's 2024-2025 Ordo,
+; extracted from the already-parsed, fidelity-audited corpus
+; docs/research/ordo/ordo-2024-2027.json (SHA-256 18a417fb8b30dc438c3f12f64b43dfdf5e2e9313857f2eccd04bf02072ca7e3c) rather than
+; re-parsed from the PDF -- see tools/extract_efdotorg_ordo.py's own
+; header for the full characterisation this fixture rests on (the menu-
+; trap office filter, the Christ-the-King classifier-gap recovery, why
+; "Advent" is not baked into a single mapping here, the known Vigil-of-
+; St-Lawrence gap, and the two source-PDF defects that turn out not to
+; touch this field).
+;
+; Generator: tools/extract_efdotorg_ordo.py -- do not hand-edit; re-run
+; against the same JSON and commit the diff instead.
+; python3 tools/extract_efdotorg_ordo.py docs/research/ordo/ordo-2024-2027.json test/fixtures
+;
+; Source PDF (gitignored, CLAUDE.md: "docs/ is gitignored", see
+; docs/research/ordo/SHA256SUMS for its own hash): 2024-2025Ordo.pdf,
+; extraordinaryform.org.
+;
+; COVERAGE: 364 day-rows, 2024-12-01..2025-11-29 (this edition's own civil-date
+; span, re-derived from the JSON's own seams -- see the generator's own
+; EDITIONS comment). 0 row(s) are a genuine SOURCE GAP (2027-03-03
+; only, a PDF row-drop, ordo-fidelity-report.md) -- mass/cls/colour/praef
+; all absent, the same shape a structurally blank day (Good Friday) uses.
+; 1 further row(s) have mass/cls/colour but no praef at all
+; (Good Friday -- RG 28, no Mass in the 1955-restored Holy Week).
+;
+; Each row's `praef` is RAW TEXT from the day's own OFFICE (after the
+; menu-trap filter, with the Christ-the-King recovery already applied) --
+; classified against {!Colitur_kernel.Preface.t} by
+; test/test_efdotorg_ordo.ml, not here.
+(
+ ((date 2024-12-01) (mass ("First Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-02) (mass ("St. Bibiana, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2024-12-03) (mass ("St. Francis Xavier, Confessor")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2024-12-04) (mass ("St. Peter Chrysologus, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2024-12-05) (mass ("Feria \226\128\147 First Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-06) (mass ("St. Nicholas, Confessor & Bishop")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2024-12-07) (mass ("St. Ambrose, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2024-12-08) (mass ("Immaculate Conception")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2024-12-09) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-10) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-11) (mass ("St. Damasus I, Pope")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2024-12-12) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-13) (mass ("St. Lucy, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2024-12-14) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-15) (mass ("Third Sunday of Advent \226\128\147 Gaudete")) (cls (1)) (colour ("rose")) (praef ("Advent")))
+ ((date 2024-12-16) (mass ("St. Eusebius, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2024-12-17) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-18) (mass ("Ember Wednesday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-19) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-20) (mass ("Ember Friday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-21) (mass ("St. Thomas, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2024-12-22) (mass ("Fourth Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-23) (mass ("Feria - Fourth Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-24) (mass ("Vigil of Nativity of Our Lord")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2024-12-25) (mass ("Nativity of Our Lord - Mass at Midnight")) (cls (1)) (colour ("white")) (praef ("Nativity")))
+ ((date 2024-12-26) (mass ("Day II in the Octave, St. Stephen, Protomartyr")) (cls (2)) (colour ("red")) (praef ("Nativity")))
+ ((date 2024-12-27) (mass ("Day III in the Octave, St. John, Apostle & Evangelist")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2024-12-28) (mass ("Day IV in the Octave, Holy Innocents")) (cls (2)) (colour ("red")) (praef ("Nativity")))
+ ((date 2024-12-29) (mass ("Sunday within the Octave of Christmas")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2024-12-30) (mass ("Day VI in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2024-12-31) (mass ("Day VII in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-01-01) (mass ("Day VIII in the Octave, Circumcision of Our Lord")) (cls (1)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-01-02) (mass ("Feria in Christmastide")) (cls (4)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-01-03) (mass ("Feria in Christmastide")) (cls (4)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-01-04) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-01-05) (mass ("Holy Name of Jesus")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-01-06) (mass ("Epiphany of Our Lord")) (cls (1)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-07) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-08) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-09) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-10) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-11) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-01-12) (mass ("Holy Family")) (cls (2)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-13) (mass ("Baptism of Our Lord")) (cls (2)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2025-01-14) (mass ("St. Hilary, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-15) (mass ("St. Paul, First Hermit, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-16) (mass ("St. Marcellus I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-01-17) (mass ("St. Anthony, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-18) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-01-19) (mass ("Second Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-01-20) (mass ("Ss. Fabian, Pope, & Sebastian, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-01-21) (mass ("St. Agnes, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-01-22) (mass ("Ss. Vincent & Anastasius, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-01-23) (mass ("St. Raymund of Pennafort, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-24) (mass ("St. Timothy, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-01-25) (mass ("Conversion of St. Paul, Apostle")) (cls (3)) (colour ("white")) (praef ("Apostles")))
+ ((date 2025-01-26) (mass ("Third Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-01-27) (mass ("St. John Chrysostom, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-28) (mass ("St. Peter Nolasco, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-29) (mass ("St. Francis de Sales, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-01-30) (mass ("St. Martina, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-01-31) (mass ("St. John Bosco, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-01) (mass ("St. Ignatius of Antioch, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-02-02) (mass ("and Purification of the BVM")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-02-03) (mass ("St. Blase, Bishop & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-02-04) (mass ("St. Andrew Corsini, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-05) (mass ("St. Agatha, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-02-06) (mass ("St. Titus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-07) (mass ("St. Romuald, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-08) (mass ("St. John of Matha, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-09) (mass ("Fifth Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-02-10) (mass ("St. Scholastica, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-11) (mass ("Our Lady of Lourdes")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-02-12) (mass ("Seven Holy Founders, Confessors")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-13) (mass ("Feria \226\128\147 Fifth Sunday after Epiphany")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-02-14) (mass ("St. Valentine, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-02-15) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-02-16) (mass ("Septuagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2025-02-17) (mass ("Feria - Septuagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-02-18) (mass ("St. Simeon, Bishop & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-02-19) (mass ("Feria - Septuagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-02-20) (mass ("Feria - Septuagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-02-21) (mass ("Feria - Septuagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-02-22) (mass ("Chair of St. Peter")) (cls (2)) (colour ("white")) (praef ("Apostles")))
+ ((date 2025-02-23) (mass ("Sexagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2025-02-24) (mass ("St. Matthias, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-02-25) (mass ("Feria - Sexagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-02-26) (mass ("Feria - Sexagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-02-27) (mass ("St. Gabriel of Our Lady of Sorrows")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-02-28) (mass ("Feria - Sexagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-03-01) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-03-02) (mass ("Quinquagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2025-03-03) (mass ("Feria - Quinquagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-03-04) (mass ("St. Casimir, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-03-05) (mass ("and Ash Wednesday")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-06) (mass ("Thursday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-07) (mass ("Friday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-08) (mass ("Saturday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-09) (mass ("1st Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-10) (mass ("Monday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-11) (mass ("Tuesday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-12) (mass ("Ember Wednesday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-13) (mass ("Thursday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-14) (mass ("Ember Friday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-15) (mass ("Ember Saturday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-16) (mass ("2nd Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-17) (mass ("Monday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-18) (mass ("Tuesday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-19) (mass ("St. Joseph, Spouse of the BVM")) (cls (1)) (colour ("white")) (praef ("St. Joseph")))
+ ((date 2025-03-20) (mass ("Thursday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-21) (mass ("Friday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-22) (mass ("Saturday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-23) (mass ("3rd Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-24) (mass ("Monday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-25) (mass ("Annunciation of the BVM")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-03-26) (mass ("Wednesday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-27) (mass ("Thursday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-28) (mass ("Friday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-29) (mass ("Saturday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-03-30) (mass ("4th Sunday of Lent \226\128\147 L\195\166tare Sunday")) (cls (1)) (colour ("rose")) (praef ("Lent")))
+ ((date 2025-03-31) (mass ("Monday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-04-01) (mass ("Tuesday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-04-02) (mass ("Wednesday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-04-03) (mass ("Thursday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-04-04) (mass ("Friday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-04-05) (mass ("Saturday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2025-04-06) (mass ("Passion Sunday")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-07) (mass ("Monday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-08) (mass ("Tuesday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-09) (mass ("Wednesday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-10) (mass ("Thursday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-11) (mass ("Friday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-12) (mass ("Saturday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-13) (mass ("and Palm Sunday")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-14) (mass ("Monday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-15) (mass ("Tuesday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-16) (mass ("Wednesday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2025-04-17) (mass ("Holy Thursday")) (cls (1)) (colour ("white")) (praef ("Holy Cross")))
+ ((date 2025-04-18) (mass ("Good Friday")) (cls (1)) (colour ("black")) (praef ()))
+ ((date 2025-04-19) (mass ("and Easter Vigil Mass")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-20) (mass ("Easter Sunday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-21) (mass ("Easter Monday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-22) (mass ("Easter Tuesday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-23) (mass ("Easter Wednesday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-24) (mass ("Easter Thursday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-25) (mass ("Easter Friday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-26) (mass ("Easter Saturday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-27) (mass ("Low Sunday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-28) (mass ("St. Paul of the Cross, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-04-29) (mass ("St. Peter of Verona, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2025-04-30) (mass ("St. Catherine of Siena, Virgin")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-01) (mass ("St. Joseph the Workman, Confessor")) (cls (1)) (colour ("white")) (praef ("St. Joseph")))
+ ((date 2025-05-02) (mass ("St. Athanasius, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-03) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-05-04) (mass ("Second Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-05) (mass ("St. Pius V, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-06) (mass ("St. John before the Latin Gate")) (cls (4)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-05-07) (mass ("St. Stanislaus, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2025-05-08) (mass ("Apparition of St. Michael")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-09) (mass ("St. Gregory Nanzianzen, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-10) (mass ("St. Antoninus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-11) (mass ("Third Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-12) (mass ("Ss. Nereus, Achilleus, Domitila, & Pancras, Martyrs")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2025-05-13) (mass ("St. Robert Bellarmine, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-14) (mass ("St. Boniface, Martyr")) (cls (4)) (colour ("red")) (praef ("Easter")))
+ ((date 2025-05-15) (mass ("St. John Baptist de la Salle, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-16) (mass ("St. Ubald, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-17) (mass ("St. Paschal Baylon, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-18) (mass ("Fourth Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-19) (mass ("St. Peter Celestine, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-20) (mass ("St. Bernardine of Siena, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-21) (mass ("Feria - Fourth Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-22) (mass ("Feria - Fourth Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-23) (mass ("Feria - Fourth Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-24) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-05-25) (mass ("5th Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-26) (mass ("St. Philip Neri, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-27) (mass ("St. Bede the Venerable, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-28) (mass ("Vigil of Ascension")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2025-05-29) (mass ("Ascension of Our Lord")) (cls (1)) (colour ("white")) (praef ("Ascension")))
+ ((date 2025-05-30) (mass ("St. Felix I, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Ascension")))
+ ((date 2025-05-31) (mass ("Queenship of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-06-01) (mass ("Sunday after the Ascension")) (cls (2)) (colour ("white")) (praef ("Ascension")))
+ ((date 2025-06-02) (mass ("Ss. Marcellinus, Peter, & Erasmus, Martyrs")) (cls (4)) (colour ("red")) (praef ("Ascension")))
+ ((date 2025-06-03) (mass ("Feria - Ascension")) (cls (4)) (colour ("white")) (praef ("Ascension")))
+ ((date 2025-06-04) (mass ("St. Francis Caracciolo, Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2025-06-05) (mass ("St. Boniface, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Ascension")))
+ ((date 2025-06-06) (mass ("St. Norbert, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2025-06-07) (mass ("Vigil of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-08) (mass ("Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-09) (mass ("Monday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-10) (mass ("Tuesday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-11) (mass ("Ember Wednesday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-12) (mass ("Thursday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-13) (mass ("Ember Friday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-14) (mass ("Ember Saturday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2025-06-15) (mass ("Trinity Sunday")) (cls (1)) (colour ("white")) (praef ("Holy Trinity")))
+ ((date 2025-06-16) (mass ("Feria - First Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-06-17) (mass ("St. Gregory Barbarigo, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-06-18) (mass ("St. Ephrem of Syria, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-06-19) (mass ("Corpus Christi")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2025-06-20) (mass ("St. Silverius, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-06-21) (mass ("St. Aloyisius Gonzaga, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-06-22) (mass ("Second Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-06-23) (mass ("Vigil of Nativity of St. John the Baptist")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-06-24) (mass ("Nativity of St. John the Baptist")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2025-06-25) (mass ("St. William, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-06-26) (mass ("Ss. John & Paul, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-06-27) (mass ("Most Sacred Heart of Jesus")) (cls (1)) (colour ("white")) (praef ("Sacred Heart")))
+ ((date 2025-06-28) (mass ("Vigil of Ss. Peter & Paul")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-06-29) (mass ("Ss. Peter & Paul, Apostles")) (cls (1)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-06-30) (mass ("Commemoration of St. Paul, Apostle")) (cls (3)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-07-01) (mass ("Most Precious Blood of Our Lord")) (cls (1)) (colour ("red")) (praef ("Holy Cross")))
+ ((date 2025-07-02) (mass ("Visitation of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-07-03) (mass ("St. Irenaeus, Doctor of the Church")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-04) (mass ("In Commemoration of All Holy Popes")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-05) (mass ("St. Anthony Mary Zaccaria, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-06) (mass ("Fourth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-07-07) (mass ("Ss. Cyril & Methodius, Bishops & Confessors")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-08) (mass ("St. Elizabeth of Portugal, Queen & Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-09) (mass ("Feria - Fourth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-07-10) (mass ("Seven Holy Brothers, & Ss. Rufina & Secunda, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-11) (mass ("St. Pius I, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-12) (mass ("St. John Gualbert, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-13) (mass ("Fifth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-07-14) (mass ("St. Bonaventure, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-15) (mass ("St. Henry II, Emperor, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-16) (mass ("Our Lady of Mt. Carmel")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-07-17) (mass ("St. Alexius, Confessor")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-18) (mass ("St. Camillus de Lellis, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-19) (mass ("St. Vincent de Paul, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-20) (mass ("Sixth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-07-21) (mass ("St. Lawrence of Brindisi, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-22) (mass ("St. Mary Magdalene, Penitent")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-23) (mass ("St. Apollinarus, Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-24) (mass ("St. Christina, Virgin & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-25) (mass ("St. James the Greater, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-07-26) (mass ("St. Anne, Mother of the BVM")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-27) (mass ("Seventh Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-07-28) (mass ("Ss. Nazarius & Celsus, Martyrs, Victor I, Pope & Martyr,")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-29) (mass ("St. Martha, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-07-30) (mass ("Ss. Abdon & Sennen, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-07-31) (mass ("St. Ignatius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-01) (mass ("Holy Machabees, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-08-02) (mass ("St. Alphonsus of Liguori, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-03) (mass ("Eighth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-08-04) (mass ("St. Dominic, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-05) (mass ("Our Lady of the Snows")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-08-06) (mass ("Transfiguration of Our Lord")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-07) (mass ("St. Cajetan, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-08) (mass ("St. John Mary Vianney, Confessor & Priest")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-09) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-08-10) (mass ("Ninth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-08-11) (mass ("Ss. Tiburtius & Susanna, Virgin, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-08-12) (mass ("St. Clare, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-13) (mass ("Ss. Hippolytus & Cassian, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-08-14) (mass ("Vigil of the Assumption")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-08-15) (mass ("Assumption of the BVM")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-08-16) (mass ("St. Joachim, Father of the BVM")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-17) (mass ("Tenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-08-18) (mass ("St. Agapitus, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-08-19) (mass ("St. John Eudes, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-20) (mass ("St. Bernard of Clairvaux, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-21) (mass ("St. Jane Frances de Chantal, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-22) (mass ("Immaculate Heart of Mary")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-08-23) (mass ("St. Philip Benizi, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-24) (mass ("Eleventh Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-08-25) (mass ("St. Louis IX, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-26) (mass ("St. Zephirynus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-08-27) (mass ("St. Joseph Calasanctius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-28) (mass ("St. Augustine, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-29) (mass ("Beheading of St. John the Baptist")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-08-30) (mass ("St. Rose of Lima, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-08-31) (mass ("Twelfth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-09-01) (mass ("St. Giles, Abbot")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-02) (mass ("St. Stephen, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-03) (mass ("St. Pius X, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-04) (mass ("Feria - Twelfth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-09-05) (mass ("St. Lawrence Justinian, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-06) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-09-07) (mass ("Thirteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-09-08) (mass ("Nativity of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-09-09) (mass ("St. Gorgonius, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-09-10) (mass ("St. Nicholas of Tolentino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-11) (mass ("Ss. Protus & Hyacinth, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-09-12) (mass ("Most Holy Name of Mary")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-09-13) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-09-14) (mass ("Exaltation of the Holy Cross")) (cls (2)) (colour ("red")) (praef ("Holy Cross")))
+ ((date 2025-09-15) (mass ("Seven Sorrows of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-09-16) (mass ("St. Cornelius, Pope, & St. Cyprian, Bishop, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-09-17) (mass ("Stigmata of St. Francis")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-18) (mass ("St. Joseph of Cupertino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-19) (mass ("St. Januarius, Bishop, & Companions, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-09-20) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-09-21) (mass ("Fifteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-09-22) (mass ("St. Thomas of Villanova, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-09-23) (mass ("St. Linus, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-09-24) (mass ("Ember Wednesday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-09-25) (mass ("Feria - Fifteenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-09-26) (mass ("Ember Friday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-09-27) (mass ("Ember Saturday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2025-09-28) (mass ("Sixteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-09-29) (mass ("St. Michael the Archangel")) (cls (1)) (colour ("white")) (praef ("Holy Trinity")))
+ ((date 2025-09-30) (mass ("St. Jerome, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-01) (mass ("St. Remigius, Bishop & Confessor")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-02) (mass ("Holy Guardian Angels")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-03) (mass ("St. Teresa of the Child Jesus, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-04) (mass ("St. Francis of Assisi, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-05) (mass ("Seventeenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-10-06) (mass ("St. Bruno, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-07) (mass ("Our Lady of the Rosary")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-10-08) (mass ("St. Bridget, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-09) (mass ("St. John Leonard, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-10) (mass ("St. Francis Borgia, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-11) (mass ("Maternity of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-10-12) (mass ("Eighteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-10-13) (mass ("St. Edward, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-14) (mass ("St. Callistus I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-10-15) (mass ("St. Teresa of Avila, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-16) (mass ("St. Hedwig, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-17) (mass ("St. Margaret Mary Alacoque, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-18) (mass ("St. Luke the Evangelist")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-10-19) (mass ("Nineteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-10-20) (mass ("St. John Cantius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-21) (mass ("St. Hilarion, Abbot")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-22) (mass ("Feria - Nineteenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-10-23) (mass ("St. Anthony Mary Claret, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-24) (mass ("St. Raphael the Archangel")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-10-25) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-10-26) (mass ("Christ the King")) (cls (1)) (colour ("white")) (praef ("Christ the King")))
+ ((date 2025-10-27) (mass ("Feria - Twentieth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-10-28) (mass ("Ss. Simon & Jude, Apostles")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2025-10-29) (mass ("Feria - Twentieth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-10-30) (mass ("Feria - Twentieth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-10-31) (mass ("Feria - Twentieth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-11-01) (mass ("All Saints")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-02) (mass ("Twenty-first Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-11-03) (mass ("All Souls - Mass 1")) (cls (1)) (colour ("black")) (praef ("For the Dead")))
+ ((date 2025-11-04) (mass ("St. Charles Borromeo, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-05) (mass ("The Holy Relics")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2025-11-06) (mass ("Feria - Twenty-first Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-11-07) (mass ("Feria - Twenty-first Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-11-08) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-11-09) (mass ("Dedication of the Archbasilica of Our Holy Savior")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-11-10) (mass ("St. Andrew Avellino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-11) (mass ("St. Martin of Tours, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-12) (mass ("St. Martin I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-11-13) (mass ("St. Didacus, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-14) (mass ("St. Josaphat, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-11-15) (mass ("St. Albert the Great, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-16) (mass ("Twenty-third Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-11-17) (mass ("St. Gregory Thaumaturgus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-18) (mass ("Dedication of the Basilicas of Ss. Peter & Paul")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-19) (mass ("St. Elizabeth of Hungary, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-20) (mass ("St. Felix of Valois, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-21) (mass ("Presentation of the BVM")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-11-22) (mass ("St. Cecilia, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-11-23) (mass ("Last Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2025-11-24) (mass ("St. John of the Cross, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-25) (mass ("St. Catherine of Alexandria, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2025-11-26) (mass ("St. Sylvester, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2025-11-27) (mass ("Our Lady of the Miraculous Medal")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-11-28) (mass ("Feria - Last Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2025-11-29) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("Common")))
+)
diff --git a/test/fixtures/efdotorg-ordo-2025-2026.sexp b/test/fixtures/efdotorg-ordo-2025-2026.sexp
new file mode 100644
index 0000000..c94a0a8
--- /dev/null
+++ b/test/fixtures/efdotorg-ordo-2025-2026.sexp
@@ -0,0 +1,398 @@
+; test/fixtures/efdotorg-ordo-2025-2026.sexp -- efdotorg-preface task
+; (2026-08-24-colitur-celebrant-rubrics-phase1): the THIRD independent
+; preface witness (RG 482-499), extraordinaryform.org's 2025-2026 Ordo,
+; extracted from the already-parsed, fidelity-audited corpus
+; docs/research/ordo/ordo-2024-2027.json (SHA-256 18a417fb8b30dc438c3f12f64b43dfdf5e2e9313857f2eccd04bf02072ca7e3c) rather than
+; re-parsed from the PDF -- see tools/extract_efdotorg_ordo.py's own
+; header for the full characterisation this fixture rests on (the menu-
+; trap office filter, the Christ-the-King classifier-gap recovery, why
+; "Advent" is not baked into a single mapping here, the known Vigil-of-
+; St-Lawrence gap, and the two source-PDF defects that turn out not to
+; touch this field).
+;
+; Generator: tools/extract_efdotorg_ordo.py -- do not hand-edit; re-run
+; against the same JSON and commit the diff instead.
+; python3 tools/extract_efdotorg_ordo.py docs/research/ordo/ordo-2024-2027.json test/fixtures
+;
+; Source PDF (gitignored, CLAUDE.md: "docs/ is gitignored", see
+; docs/research/ordo/SHA256SUMS for its own hash): 2025-2026Ordo.pdf,
+; extraordinaryform.org.
+;
+; COVERAGE: 364 day-rows, 2025-11-30..2026-11-28 (this edition's own civil-date
+; span, re-derived from the JSON's own seams -- see the generator's own
+; EDITIONS comment). 0 row(s) are a genuine SOURCE GAP (2027-03-03
+; only, a PDF row-drop, ordo-fidelity-report.md) -- mass/cls/colour/praef
+; all absent, the same shape a structurally blank day (Good Friday) uses.
+; 1 further row(s) have mass/cls/colour but no praef at all
+; (Good Friday -- RG 28, no Mass in the 1955-restored Holy Week).
+;
+; Each row's `praef` is RAW TEXT from the day's own OFFICE (after the
+; menu-trap filter, with the Christ-the-King recovery already applied) --
+; classified against {!Colitur_kernel.Preface.t} by
+; test/test_efdotorg_ordo.ml, not here.
+(
+ ((date 2025-11-30) (mass ("First Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-01) (mass ("Feria \226\128\147 First Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-02) (mass ("St. Bibiana, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2025-12-03) (mass ("St. Francis Xavier, Confessor")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2025-12-04) (mass ("St. Peter Chrysologus, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2025-12-05) (mass ("Feria \226\128\147 First Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-06) (mass ("St. Nicholas, Confessor & Bishop")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2025-12-07) (mass ("Second Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-08) (mass ("Immaculate Conception")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2025-12-09) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-10) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-11) (mass ("St. Damasus I, Pope")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2025-12-12) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-13) (mass ("St. Lucy, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2025-12-14) (mass ("Third Sunday of Advent \226\128\147 Gaudete")) (cls (1)) (colour ("rose")) (praef ("Advent")))
+ ((date 2025-12-15) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-16) (mass ("St. Eusebius, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2025-12-17) (mass ("Ember Wednesday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-18) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-19) (mass ("Ember Friday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-20) (mass ("Ember Saturday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-21) (mass ("Fourth Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-22) (mass ("Feria - Fourth Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-23) (mass ("Feria - Fourth Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-24) (mass ("Vigil of Nativity of Our Lord")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2025-12-25) (mass ("Nativity of Our Lord - Mass at Midnight")) (cls (1)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-12-26) (mass ("Day II in the Octave, St. Stephen, Protomartyr")) (cls (2)) (colour ("red")) (praef ("Nativity")))
+ ((date 2025-12-27) (mass ("Day III in the Octave, St. John, Apostle & Evangelist")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-12-28) (mass ("Sunday within the Octave of Christmas")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-12-29) (mass ("Day V in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-12-30) (mass ("Day VI in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2025-12-31) (mass ("Day VII in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-01-01) (mass ("Day VIII in the Octave, Circumcision of Our Lord")) (cls (1)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-01-02) (mass ("Feria in Christmastide")) (cls (4)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-01-03) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-01-04) (mass ("Holy Name of Jesus")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-01-05) (mass ("St. Telesphorus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Nativity")))
+ ((date 2026-01-06) (mass ("Epiphany of Our Lord")) (cls (1)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-07) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-08) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-09) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-10) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-01-11) (mass ("Holy Family")) (cls (2)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-12) (mass ("Feria after Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-13) (mass ("Baptism of Our Lord")) (cls (2)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2026-01-14) (mass ("St. Hilary, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-15) (mass ("St. Paul, First Hermit, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-16) (mass ("St. Marcellus I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-17) (mass ("St. Anthony, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-18) (mass ("Second Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-01-19) (mass ("Ss. Marius, Martha, Audifax, & Abachum, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-20) (mass ("Ss. Fabian, Pope, & Sebastian, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-21) (mass ("St. Agnes, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-22) (mass ("Ss. Vincent & Anastasius, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-23) (mass ("St. Raymund of Pennafort, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-24) (mass ("St. Timothy, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-25) (mass ("Third Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-01-26) (mass ("St. Polycarp, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-27) (mass ("St. John Chrysostom, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-28) (mass ("St. Peter Nolasco, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-29) (mass ("St. Francis de Sales, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-01-30) (mass ("St. Martina, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-01-31) (mass ("St. John Bosco, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-01) (mass ("Septuagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2026-02-02) (mass ("and Purification of BVM")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-02-03) (mass ("St. Blaise, Bishop & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-02-04) (mass ("St. Andrew Corsini, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-05) (mass ("St. Agatha, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-02-06) (mass ("St. Titus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-07) (mass ("St. Romuald, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-08) (mass ("Sexagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2026-02-09) (mass ("St. Cyril, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-10) (mass ("St. Scholastica, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-11) (mass ("Our Lady of Lourdes")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-02-12) (mass ("Seven Holy Founders, Confessors")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-02-13) (mass ("Feria - Sexagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-02-14) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-02-15) (mass ("Quinquagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2026-02-16) (mass ("Feria - Quinquagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-02-17) (mass ("Feria - Quinquagesima")) (cls (4)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-02-18) (mass ("and Ash Wednesday")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-19) (mass ("Thursday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-20) (mass ("Friday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-21) (mass ("Saturday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-22) (mass ("1st Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-23) (mass ("Monday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-24) (mass ("St. Matthias, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-02-25) (mass ("Ember Wednesday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-26) (mass ("Thursday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-27) (mass ("Ember Friday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-02-28) (mass ("Ember Saturday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-01) (mass ("2nd Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-02) (mass ("Monday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-03) (mass ("Tuesday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-04) (mass ("Wednesday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-05) (mass ("Thursday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-06) (mass ("Friday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-07) (mass ("Saturday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-08) (mass ("3rd Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-09) (mass ("Monday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-10) (mass ("Tuesday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-11) (mass ("Wednesday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-12) (mass ("Thursday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-13) (mass ("Friday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-14) (mass ("Saturday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-15) (mass ("4th Sunday of Lent \226\128\147 L\195\166tare Sunday")) (cls (1)) (colour ("rose")) (praef ("Lent")))
+ ((date 2026-03-16) (mass ("Monday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-17) (mass ("Tuesday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-18) (mass ("Wednesday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-19) (mass ("St. Joseph, Spouse of the BVM")) (cls (1)) (colour ("white")) (praef ("St. Joseph")))
+ ((date 2026-03-20) (mass ("Friday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-21) (mass ("Saturday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2026-03-22) (mass ("Passion Sunday")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-23) (mass ("Monday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-24) (mass ("Tuesday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-25) (mass ("Annunciation of the BVM")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-03-26) (mass ("Thursday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-27) (mass ("Friday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-28) (mass ("Saturday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-29) (mass ("and Palm Sunday")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-30) (mass ("Monday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-03-31) (mass ("Tuesday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-04-01) (mass ("Wednesday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2026-04-02) (mass ("Holy Thursday")) (cls (1)) (colour ("white")) (praef ("Holy Cross")))
+ ((date 2026-04-03) (mass ("Good Friday")) (cls (1)) (colour ("black")) (praef ()))
+ ((date 2026-04-04) (mass ("and Easter Vigil Mass")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-05) (mass ("Easter Sunday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-06) (mass ("Easter Monday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-07) (mass ("Easter Tuesday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-08) (mass ("Easter Wednesday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-09) (mass ("Easter Thursday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-10) (mass ("Easter Friday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-11) (mass ("Easter Saturday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-12) (mass ("Low Sunday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-13) (mass ("St.Hermenegild, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-14) (mass ("St. Justin, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-15) (mass ("Feria - First Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-16) (mass ("Feria - First Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-17) (mass ("St. Anicetus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-18) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-04-19) (mass ("Second Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-20) (mass ("Feria - Second Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-21) (mass ("St. Anselm, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-22) (mass ("Ss. Soter & Cajus, Popes & Martyrs")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-23) (mass ("St. George, Martyr")) (cls (4)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-24) (mass ("St. Fidelis. Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-25) (mass ("St. Mark, Evangelist")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-04-26) (mass ("Third Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-27) (mass ("St. Peter Canisius, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-28) (mass ("St. Paul of the Cross, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-04-29) (mass ("St. Peter of Verona, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-04-30) (mass ("St. Catherine of Siena, Virgin")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-01) (mass ("St. Joseph the Workman, Confessor")) (cls (1)) (colour ("white")) (praef ("St. Joseph")))
+ ((date 2026-05-02) (mass ("St. Athanasius, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-03) (mass ("Fourth Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-04) (mass ("St. Monica, Widow")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-05) (mass ("St. Pius V, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-06) (mass ("St. John before the Latin Gate")) (cls (4)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-05-07) (mass ("St. Stanislaus, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-05-08) (mass ("Apparition of St. Michael")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-09) (mass ("St. Gregory Nanzianzen, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-10) (mass ("5th Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-11) (mass ("Ss. Philip & James, Apostles")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-05-12) (mass ("Ss. Nereus, Achilleus, Domitila, & Pancras, Martyrs")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2026-05-13) (mass ("Vigil of Ascension")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2026-05-14) (mass ("Ascension of Our Lord")) (cls (1)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-15) (mass ("St. John Baptist de la Salle, Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-16) (mass ("St. Ubald, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-17) (mass ("Sunday after the Ascension")) (cls (2)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-18) (mass ("St. Venantius, Martyr")) (cls (3)) (colour ("red")) (praef ("Ascension")))
+ ((date 2026-05-19) (mass ("St. Peter Celestine, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-20) (mass ("St. Bernardine of Siena, Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-21) (mass ("Feria - Ascension")) (cls (4)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-22) (mass ("Feria - Ascension")) (cls (4)) (colour ("white")) (praef ("Ascension")))
+ ((date 2026-05-23) (mass ("Vigil of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-24) (mass ("Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-25) (mass ("Monday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-26) (mass ("Tuesday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-27) (mass ("Ember Wednesday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-28) (mass ("Thursday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-29) (mass ("Ember Friday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-30) (mass ("Ember Saturday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2026-05-31) (mass ("Trinity Sunday")) (cls (1)) (colour ("white")) (praef ("Holy Trinity")))
+ ((date 2026-06-01) (mass ("St. Angela Merici, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-02) (mass ("Ss. Marcellinus, Peter, & Erasmus, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-06-03) (mass ("Feria - First Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-06-04) (mass ("Corpus Christi")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-05) (mass ("St. Boniface, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-06-06) (mass ("St. Norbert, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-07) (mass ("Second Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-06-08) (mass ("Feria - Second Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-06-09) (mass ("Ss. Primus & Felician, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-06-10) (mass ("St. Margaret, Queen of Scotland, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-11) (mass ("St. Barnabas, Apostle")) (cls (3)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-06-12) (mass ("Most Sacred Heart of Jesus")) (cls (1)) (colour ("white")) (praef ("Sacred Heart")))
+ ((date 2026-06-13) (mass ("St. Anthony of Padua, Doctor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-14) (mass ("Third Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-06-15) (mass ("Ss. Vitus, Modestus, & Crescentia, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-06-16) (mass ("Feria - Third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-06-17) (mass ("St. Gregory Barbarigo, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-18) (mass ("St. Ephrem of Syria, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-19) (mass ("St. Juliana Falconieri, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-20) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-06-21) (mass ("Fourth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-06-22) (mass ("St. Paulinus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-23) (mass ("Vigil of Nativity of St. John the Baptist")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-06-24) (mass ("Nativity of St. John the Baptist")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-25) (mass ("St. William, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-06-26) (mass ("Ss. John & Paul, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-06-27) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-06-28) (mass ("Fifth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-06-29) (mass ("Ss. Peter & Paul, Apostles")) (cls (1)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-06-30) (mass ("Commemoration of St. Paul, Apostle")) (cls (3)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-07-01) (mass ("Most Precious Blood of Our Lord")) (cls (1)) (colour ("red")) (praef ("Holy Cross")))
+ ((date 2026-07-02) (mass ("Visitation of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-07-03) (mass ("St. Irenaeus, Doctor of the Church")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-04) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-07-05) (mass ("Sixth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-07-06) (mass ("St. Maria Goretti, Virgin Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-07) (mass ("Ss. Cyril & Methodius, Bishops & Confessors")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-08) (mass ("St. Elizabeth of Portugal, Queen & Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-09) (mass ("Feria - Sixth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-07-10) (mass ("Seven Holy Brothers, & Ss. Rufina & Secunda, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-11) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-07-12) (mass ("Seventh Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-07-13) (mass ("Feria - Seventh Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-07-14) (mass ("St. Bonaventure, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-15) (mass ("St. Henry II, Emperor, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-16) (mass ("Our Lady of Mt. Carmel")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-07-17) (mass ("St. Alexius, Confessor")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-18) (mass ("St. Camillus de Lellis, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-19) (mass ("Eighth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-07-20) (mass ("St. Jerome Emiliani, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-21) (mass ("St. Lawrence of Brindisi, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-22) (mass ("St. Mary Magdalene, Penitent")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-23) (mass ("St. Apollinarus, Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-24) (mass ("St. Christina, Virgin & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-25) (mass ("St. James the Greater, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-07-26) (mass ("Ninth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-07-27) (mass ("St. Pantaleon, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-28) (mass ("Ss. Nazarius & Celsus, Martyrs, Victor I, Pope & Martyr,")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-29) (mass ("St. Martha, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-07-30) (mass ("Ss. Abdon & Sennen, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-07-31) (mass ("St. Ignatius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-01) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-08-02) (mass ("Tenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-08-03) (mass ("The Finding of the Body of St. Stephen")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-04) (mass ("St. Dominic, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-05) (mass ("Our Lady of the Snows")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-08-06) (mass ("Transfiguration of Our Lord")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-07) (mass ("St. Cajetan, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-08) (mass ("St. John Mary Vianney, Confessor & Priest")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-09) (mass ("Eleventh Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-08-10) (mass ("St. Lawrence, Deacon & Martyr")) (cls (2)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-11) (mass ("Ss. Tiburtius & Susanna, Virgin, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-12) (mass ("St. Clare, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-13) (mass ("Ss. Hippolytus & Cassian, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-14) (mass ("Vigil of the Assumption")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-08-15) (mass ("Assumption of the BVM")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-08-16) (mass ("Twelfth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-08-17) (mass ("St. Hyacinth of Poland, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-18) (mass ("St. Agapitus, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-19) (mass ("St. John Eudes, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-20) (mass ("St. Bernard of Clairvaux, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-21) (mass ("St. Jane Frances de Chantal, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-22) (mass ("Immaculate Heart of Mary")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-08-23) (mass ("Thirteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-08-24) (mass ("St. Bartholomew, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-08-25) (mass ("St. Louis IX, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-26) (mass ("St. Zephirynus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-27) (mass ("St. Joseph Calasanctius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-28) (mass ("St. Augustine, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-08-29) (mass ("Beheading of St. John the Baptist")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-08-30) (mass ("Fourteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-08-31) (mass ("St. Raymond Nonnatus, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-01) (mass ("St. Giles, Abbot")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-02) (mass ("St. Stephen, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-03) (mass ("St. Pius X, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-04) (mass ("Feria - Fourteenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-09-05) (mass ("St. Lawrence Justinian, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-06) (mass ("Fifteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-09-07) (mass ("Feria - Fifteenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-09-08) (mass ("Nativity of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-09-09) (mass ("St. Gorgonius, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-09-10) (mass ("St. Nicholas of Tolentino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-11) (mass ("Ss. Protus & Hyacinth, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-09-12) (mass ("Most Holy Name of Mary")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-09-13) (mass ("Sixteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-09-14) (mass ("Exaltation of the Holy Cross")) (cls (2)) (colour ("red")) (praef ("Holy Cross")))
+ ((date 2026-09-15) (mass ("Seven Sorrows of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-09-16) (mass ("St. Cornelius, Pope, & St. Cyprian, Bishop, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-09-17) (mass ("Stigmata of St. Francis")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-18) (mass ("St. Joseph of Cupertino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-19) (mass ("St. Januarius, Bishop, & Companions, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-09-20) (mass ("Seventeenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-09-21) (mass ("St. Matthew, Apostle & Evangelist")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-09-22) (mass ("St. Thomas of Villanova, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-23) (mass ("Ember Wednesday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-09-24) (mass ("Our Lady of Ransom")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-09-25) (mass ("Ember Friday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-09-26) (mass ("Ember Saturday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2026-09-27) (mass ("Eighteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-09-28) (mass ("St. Wenceslaus, Duke, Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-09-29) (mass ("St. Michael the Archangel")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2026-09-30) (mass ("St. Jerome, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-01) (mass ("St. Remigius, Bishop & Confessor")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-02) (mass ("Holy Guardian Angels")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-03) (mass ("St. Teresa of the Child Jesus, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-04) (mass ("Nineteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-10-05) (mass ("Ss. Placid & Companions, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-10-06) (mass ("St. Bruno, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-07) (mass ("Our Lady of the Rosary")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-10-08) (mass ("St. Bridget, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-09) (mass ("St. John Leonard, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-10) (mass ("St. Francis Borgia, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-11) (mass ("Twentieth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-10-12) (mass ("Feria - Twentieth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-10-13) (mass ("St. Edward, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-14) (mass ("St. Callistus I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-10-15) (mass ("St. Teresa of Avila, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-16) (mass ("St. Hedwig, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-17) (mass ("St. Margaret Mary Alacoque, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-18) (mass ("Twenty-first Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-10-19) (mass ("St. Peter of Alcantara, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-20) (mass ("St. John Cantius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-21) (mass ("St. Hilarion, Abbot")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-22) (mass ("Feria - Twenty-first Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-10-23) (mass ("St. Anthony Mary Claret, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-24) (mass ("St. Raphael the Archangel")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-10-25) (mass ("Christ the King")) (cls (1)) (colour ("white")) (praef ("Christ the King")))
+ ((date 2026-10-26) (mass ("St. Evaristus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-10-27) (mass ("Feria - Twenty-second Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-10-28) (mass ("Ss. Simon & Jude, Apostles")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-10-29) (mass ("Feria - Twenty-second Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-10-30) (mass ("Feria - Twenty-second Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-10-31) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-11-01) (mass ("All Saints")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-02) (mass ("All Souls - Mass 1")) (cls (1)) (colour ("black")) (praef ("For the Dead")))
+ ((date 2026-11-03) (mass ("Feria - Twenty-third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-11-04) (mass ("St. Charles Borromeo, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-05) (mass ("The Holy Relics")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2026-11-06) (mass ("Feria - Twenty-third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2026-11-07) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-11-08) (mass ("Resumed 5th Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-11-09) (mass ("Dedication of the Archbasilica of Our Holy Savior")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-10) (mass ("St. Andrew Avellino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-11) (mass ("St. Martin of Tours, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-12) (mass ("St. Martin I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-11-13) (mass ("St. Didacus, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-14) (mass ("St. Josaphat, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-11-15) (mass ("Resumed 6th Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-11-16) (mass ("St. Gertrude, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-17) (mass ("St. Gregory Thaumaturgus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-18) (mass ("Dedication of the Basilicas of Ss. Peter & Paul")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-19) (mass ("St. Elizabeth of Hungary, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-20) (mass ("St. Felix of Valois, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-21) (mass ("Presentation of the BVM")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-11-22) (mass ("Last Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2026-11-23) (mass ("St. Clement I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-11-24) (mass ("St. John of the Cross, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-25) (mass ("St. Catherine of Alexandria, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2026-11-26) (mass ("St. Sylvester, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2026-11-27) (mass ("Our Lady of the Miraculous Medal")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-11-28) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+)
diff --git a/test/fixtures/efdotorg-ordo-2026-2027.sexp b/test/fixtures/efdotorg-ordo-2026-2027.sexp
new file mode 100644
index 0000000..dc95641
--- /dev/null
+++ b/test/fixtures/efdotorg-ordo-2026-2027.sexp
@@ -0,0 +1,398 @@
+; test/fixtures/efdotorg-ordo-2026-2027.sexp -- efdotorg-preface task
+; (2026-08-24-colitur-celebrant-rubrics-phase1): the THIRD independent
+; preface witness (RG 482-499), extraordinaryform.org's 2026-2027 Ordo,
+; extracted from the already-parsed, fidelity-audited corpus
+; docs/research/ordo/ordo-2024-2027.json (SHA-256 18a417fb8b30dc438c3f12f64b43dfdf5e2e9313857f2eccd04bf02072ca7e3c) rather than
+; re-parsed from the PDF -- see tools/extract_efdotorg_ordo.py's own
+; header for the full characterisation this fixture rests on (the menu-
+; trap office filter, the Christ-the-King classifier-gap recovery, why
+; "Advent" is not baked into a single mapping here, the known Vigil-of-
+; St-Lawrence gap, and the two source-PDF defects that turn out not to
+; touch this field).
+;
+; Generator: tools/extract_efdotorg_ordo.py -- do not hand-edit; re-run
+; against the same JSON and commit the diff instead.
+; python3 tools/extract_efdotorg_ordo.py docs/research/ordo/ordo-2024-2027.json test/fixtures
+;
+; Source PDF (gitignored, CLAUDE.md: "docs/ is gitignored", see
+; docs/research/ordo/SHA256SUMS for its own hash): 2026-2027Ordo.pdf,
+; extraordinaryform.org.
+;
+; COVERAGE: 364 day-rows, 2026-11-29..2027-11-27 (this edition's own civil-date
+; span, re-derived from the JSON's own seams -- see the generator's own
+; EDITIONS comment). 1 row(s) are a genuine SOURCE GAP (2027-03-03
+; only, a PDF row-drop, ordo-fidelity-report.md) -- mass/cls/colour/praef
+; all absent, the same shape a structurally blank day (Good Friday) uses.
+; 1 further row(s) have mass/cls/colour but no praef at all
+; (Good Friday -- RG 28, no Mass in the 1955-restored Holy Week).
+;
+; Each row's `praef` is RAW TEXT from the day's own OFFICE (after the
+; menu-trap filter, with the Christ-the-King recovery already applied) --
+; classified against {!Colitur_kernel.Preface.t} by
+; test/test_efdotorg_ordo.ml, not here.
+(
+ ((date 2026-11-29) (mass ("First Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-11-30) (mass ("St. Andrew, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-12-01) (mass ("Feria \226\128\147 First Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-02) (mass ("St. Bibiana, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Advent")))
+ ((date 2026-12-03) (mass ("St. Francis Xavier, Confessor")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2026-12-04) (mass ("St. Peter Chrysologus, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2026-12-05) (mass ("Feria \226\128\147 First Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-06) (mass ("Second Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-07) (mass ("St. Ambrose, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2026-12-08) (mass ("Immaculate Conception")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2026-12-09) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-10) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-11) (mass ("St. Damasus I, Pope")) (cls (3)) (colour ("white")) (praef ("Advent")))
+ ((date 2026-12-12) (mass ("Feria \226\128\147 Second Sunday of Advent")) (cls (3)) (colour ("rose")) (praef ("Advent")))
+ ((date 2026-12-13) (mass ("Third Sunday of Advent \226\128\147 Gaudete")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-14) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-15) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (3)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-16) (mass ("Ember Wednesday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-17) (mass ("Feria \226\128\147 Third Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-18) (mass ("Ember Friday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-19) (mass ("Ember Saturday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-20) (mass ("Fourth Sunday of Advent")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-21) (mass ("St. Thomas, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2026-12-22) (mass ("Feria - Fourth Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-23) (mass ("Feria - Fourth Sunday of Advent")) (cls (2)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-24) (mass ("Vigil of Nativity of Our Lord")) (cls (1)) (colour ("violet")) (praef ("Advent")))
+ ((date 2026-12-25) (mass ("Nativity of Our Lord - Mass at Midnight")) (cls (1)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-12-26) (mass ("Day II in the Octave, St. Stephen, Protomartyr")) (cls (2)) (colour ("red")) (praef ("Nativity")))
+ ((date 2026-12-27) (mass ("Sunday within the Octave of Christmas")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-12-28) (mass ("Day IV in the Octave, Holy Innocents")) (cls (2)) (colour ("red")) (praef ("Nativity")))
+ ((date 2026-12-29) (mass ("Day V in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-12-30) (mass ("Day VI in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2026-12-31) (mass ("Day VII in the Octave")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2027-01-01) (mass ("Day VIII in the Octave, Circumcision of Our Lord")) (cls (1)) (colour ("white")) (praef ("Nativity")))
+ ((date 2027-01-02) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-01-03) (mass ("Holy Name of Jesus")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2027-01-04) (mass ("Feria in Christmastide")) (cls (4)) (colour ("white")) (praef ("Nativity")))
+ ((date 2027-01-05) (mass ("St. Telesphorus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Nativity")))
+ ((date 2027-01-06) (mass ("Epiphany of Our Lord")) (cls (1)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2027-01-07) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2027-01-08) (mass ("Feria of Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2027-01-09) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-01-10) (mass ("Holy Family")) (cls (2)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2027-01-11) (mass ("St. Hyginus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Epiphany")))
+ ((date 2027-01-12) (mass ("Feria after Epiphany")) (cls (4)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2027-01-13) (mass ("Baptism of Our Lord")) (cls (2)) (colour ("white")) (praef ("Epiphany")))
+ ((date 2027-01-14) (mass ("St. Hilary, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-01-15) (mass ("St. Paul, First Hermit, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-01-16) (mass ("St. Marcellus I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-17) (mass ("Second Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-01-18) (mass ("St. Prisca, Virgin & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-19) (mass ("Ss. Marius, Martha, Audifax, & Abachum, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-20) (mass ("Ss. Fabian, Pope, & Sebastian, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-21) (mass ("St. Agnes, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-22) (mass ("Ss. Vincent & Anastasius, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-23) (mass ("St. Raymund of Pennafort, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-01-24) (mass ("Septuagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2027-01-25) (mass ("Conversion of St. Paul, Apostle")) (cls (3)) (colour ("white")) (praef ("Apostles")))
+ ((date 2027-01-26) (mass ("St. Polycarp, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-27) (mass ("St. John Chrysostom, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-01-28) (mass ("St. Peter Nolasco, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-01-29) (mass ("St. Francis de Sales, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-01-30) (mass ("St. Martina, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-01-31) (mass ("Sexagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2027-02-01) (mass ("St. Ignatius of Antioch, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-02-02) (mass ("and Purification of BVM")) (cls (2)) (colour ("white")) (praef ("Nativity")))
+ ((date 2027-02-03) (mass ("St. Blaise, Bishop & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-02-04) (mass ("St. Andrew Corsini, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-02-05) (mass ("St. Agatha, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-02-06) (mass ("St. Titus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-02-07) (mass ("Quinquagesima")) (cls (2)) (colour ("violet")) (praef ("Holy Trinity")))
+ ((date 2027-02-08) (mass ("St. John of Matha, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-02-09) (mass ("St. Cyril, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-02-10) (mass ("and Ash Wednesday")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-11) (mass ("Thursday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-12) (mass ("Friday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-13) (mass ("Saturday after Ash Wednesday")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-14) (mass ("1st Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-15) (mass ("Monday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-16) (mass ("Tuesday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-17) (mass ("Ember Wednesday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-18) (mass ("Thursday after the 1st Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-19) (mass ("Ember Friday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-20) (mass ("Ember Saturday of Lent")) (cls (2)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-21) (mass ("2nd Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-22) (mass ("Chair of St. Peter")) (cls (2)) (colour ("white")) (praef ("Apostles")))
+ ((date 2027-02-23) (mass ("Tuesday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-24) (mass ("St. Matthias, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-02-25) (mass ("Thursday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-26) (mass ("Friday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-27) (mass ("Saturday after the 2nd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-02-28) (mass ("3rd Sunday of Lent")) (cls (1)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-01) (mass ("Monday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-02) (mass ("Wednesday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-03) (mass ()) (cls ()) (colour ()) (praef ()))
+ ((date 2027-03-04) (mass ("Thursday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-05) (mass ("Friday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-06) (mass ("Saturday after the 3rd Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-07) (mass ("4th Sunday of Lent \226\128\147 L\195\166tare Sunday")) (cls (1)) (colour ("rose")) (praef ("Lent")))
+ ((date 2027-03-08) (mass ("Monday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-09) (mass ("Tuesday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-10) (mass ("Wednesday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-11) (mass ("Thursday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-12) (mass ("Friday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-13) (mass ("Saturday after the 4th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Lent")))
+ ((date 2027-03-14) (mass ("Passion Sunday")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-15) (mass ("Monday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-16) (mass ("Tuesday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-17) (mass ("Wednesday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-18) (mass ("Thursday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-19) (mass ("St. Joseph, Spouse of the BVM")) (cls (1)) (colour ("white")) (praef ("St. Joseph")))
+ ((date 2027-03-20) (mass ("Saturday after the 5th Sunday of Lent")) (cls (3)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-21) (mass ("and Palm Sunday")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-22) (mass ("Monday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-23) (mass ("Tuesday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-24) (mass ("Wednesday of Holy Week")) (cls (1)) (colour ("violet")) (praef ("Holy Cross")))
+ ((date 2027-03-25) (mass ("Holy Thursday")) (cls (1)) (colour ("white")) (praef ("Holy Cross")))
+ ((date 2027-03-26) (mass ("Good Friday")) (cls (1)) (colour ("black")) (praef ()))
+ ((date 2027-03-27) (mass ("and Easter Vigil Mass (circa midnight)")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-03-28) (mass ("Easter Sunday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-03-29) (mass ("Easter Monday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-03-30) (mass ("Easter Tuesday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-03-31) (mass ("Easter Wednesday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-01) (mass ("Easter Thursday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-02) (mass ("Easter Friday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-03) (mass ("Easter Saturday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-04) (mass ("Low Sunday")) (cls (1)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-05) (mass ("Annunciation of the BVM")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-04-06) (mass ("Feria - First Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-07) (mass ("Feria - First Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-08) (mass ("Feria - First Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-09) (mass ("Feria - First Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-10) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-04-11) (mass ("Second Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-12) (mass ("Feria - Second Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-13) (mass ("St.Hermenegild, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-14) (mass ("St. Justin, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-15) (mass ("Feria - Second Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-16) (mass ("Feria - Second Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-17) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-04-18) (mass ("Third Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-19) (mass ("Feria - Third Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-20) (mass ("Feria - Third Sunday after Easter")) (cls (4)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-21) (mass ("St. Anselm, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-22) (mass ("Ss. Soter & Cajus, Popes & Martyrs")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-23) (mass ("St. George, Martyr")) (cls (4)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-24) (mass ("St. Fidelis. Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-25) (mass ("Fourth Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-26) (mass ("Ss. Cletus & Marcellinus, Popes & Martyrs")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-27) (mass ("St. Peter Canisius, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-28) (mass ("St. Paul of the Cross, Confessor")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-04-29) (mass ("St. Peter of Verona, Martyr")) (cls (3)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-04-30) (mass ("St. Catherine of Siena, Virgin")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-05-01) (mass ("St. Joseph the Workman, Confessor")) (cls (1)) (colour ("white")) (praef ("St. Joseph")))
+ ((date 2027-05-02) (mass ("5th Sunday after Easter")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-05-03) (mass ("Ss. Alexander, Eventius, & Theodulus, Martyrs")) (cls (4)) (colour ("red")) (praef ("Easter")))
+ ((date 2027-05-04) (mass ("St. Monica, Widow")) (cls (3)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-05-05) (mass ("Vigil of Ascension")) (cls (2)) (colour ("white")) (praef ("Easter")))
+ ((date 2027-05-06) (mass ("Ascension of Our Lord")) (cls (1)) (colour ("white")) (praef ("Ascension")))
+ ((date 2027-05-07) (mass ("St. Stanislaus, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Ascension")))
+ ((date 2027-05-08) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-05-09) (mass ("Sunday after the Ascension")) (cls (2)) (colour ("white")) (praef ("Ascension")))
+ ((date 2027-05-10) (mass ("St. Antoninus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2027-05-11) (mass ("Ss. Philip & James, Apostles")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-05-12) (mass ("Ss. Nereus, Achilleus, Domitila, & Pancras, Martyrs")) (cls (3)) (colour ("red")) (praef ("Ascension")))
+ ((date 2027-05-13) (mass ("St. Robert Bellarmine, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Ascension")))
+ ((date 2027-05-14) (mass ("St. Boniface, Martyr")) (cls (4)) (colour ("red")) (praef ("Ascension")))
+ ((date 2027-05-15) (mass ("Vigil of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-16) (mass ("Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-17) (mass ("Monday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-18) (mass ("Tuesday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-19) (mass ("Ember Wednesday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-20) (mass ("Thursday after Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-21) (mass ("Ember Friday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-22) (mass ("Ember Saturday of Pentecost")) (cls (1)) (colour ("red")) (praef ("Holy Spirit")))
+ ((date 2027-05-23) (mass ("Trinity Sunday")) (cls (1)) (colour ("white")) (praef ("Holy Trinity")))
+ ((date 2027-05-24) (mass ("Feria - First Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-05-25) (mass ("St. Gregory VII, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-05-26) (mass ("St. Philip Neri, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-05-27) (mass ("Corpus Christi")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2027-05-28) (mass ("St. Augustine of Canterbury, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-05-29) (mass ("St. Mary Magdalen de Pazzi, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-05-30) (mass ("Second Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-05-31) (mass ("Queenship of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-06-01) (mass ("St. Angela Merici, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-02) (mass ("Ss. Marcellinus, Peter, & Erasmus, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-06-03) (mass ("Feria - Second Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-06-04) (mass ("Most Sacred Heart of Jesus")) (cls (1)) (colour ("white")) (praef ("Sacred Heart")))
+ ((date 2027-06-05) (mass ("St. Boniface, Bishop & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-06-06) (mass ("Third Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-06-07) (mass ("Feria - Third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-06-08) (mass ("Feria - Third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-06-09) (mass ("Ss. Primus & Felician, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-06-10) (mass ("St. Margaret, Queen of Scotland, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-11) (mass ("St. Barnabas, Apostle")) (cls (3)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-06-12) (mass ("St. John of San Facundo, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-13) (mass ("Fourth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-06-14) (mass ("St. Basil the Great, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-15) (mass ("Ss. Vitus, Modestus, & Crescentia, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-06-16) (mass ("Feria - Fourth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-06-17) (mass ("St. Gregory Barbarigo, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-18) (mass ("St. Ephrem of Syria, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-19) (mass ("St. Juliana Falconieri, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-20) (mass ("Fifth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-06-21) (mass ("St. Aloysius Gonzaga, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-22) (mass ("St. Paulinus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-23) (mass ("Vigil of Nativity of St. John the Baptist")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2027-06-24) (mass ("Nativity of St. John the Baptist")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-25) (mass ("St. William, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-06-26) (mass ("Ss. John & Paul, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-06-27) (mass ("Sixth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-06-28) (mass ("Vigil of Ss. Peter & Paul")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2027-06-29) (mass ("Ss. Peter & Paul, Apostles")) (cls (1)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-06-30) (mass ("Commemoration of St. Paul, Apostle")) (cls (3)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-07-01) (mass ("Most Precious Blood of Our Lord")) (cls (1)) (colour ("red")) (praef ("Holy Cross")))
+ ((date 2027-07-02) (mass ("Visitation of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-07-03) (mass ("St. Irenaeus, Doctor of the Church")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-04) (mass ("Seventh Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-07-05) (mass ("St. Anthony Mary Zaccaria, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-06) (mass ("St. Maria Goretti, Virgin Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-07) (mass ("Ss. Cyril & Methodius, Bishops & Confessors")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-08) (mass ("St. Elizabeth of Portugal, Queen & Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-09) (mass ("Feria - Seventh Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-07-10) (mass ("Seven Holy Brothers, & Ss. Rufina & Secunda, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-11) (mass ("Eighth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-07-12) (mass ("St. John Gualbert, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-13) (mass ("Feria - Eighth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-07-14) (mass ("St. Bonaventure, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-15) (mass ("St. Henry II, Emperor, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-16) (mass ("Our Lady of Mt. Carmel")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-07-17) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-07-18) (mass ("Ninth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-07-19) (mass ("St. Vincent de Paul, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-20) (mass ("St. Jerome Emiliani, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-21) (mass ("St. Lawrence of Brindisi, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-22) (mass ("St. Mary Magdalene, Penitent")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-23) (mass ("St. Apollinarus, Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-24) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-07-25) (mass ("Tenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-07-26) (mass ("St. Anne, Mother of the BVM")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-27) (mass ("St. Pantaleon, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-28) (mass ("Ss. Nazarius & Celsus, Martyrs, Victor I, Pope & Martyr,")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-29) (mass ("St. Martha, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-07-30) (mass ("Ss. Abdon & Sennen, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-07-31) (mass ("St. Ignatius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-01) (mass ("Eleventh Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-08-02) (mass ("St. Alphonsus of Liguori, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-03) (mass ("The Finding of the Body of St. Stephen")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-04) (mass ("St. Dominic, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-05) (mass ("Our Lady of the Snows")) (cls (3)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-08-06) (mass ("Transfiguration of Our Lord")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-07) (mass ("St. Cajetan, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-08) (mass ("Twelfth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-08-09) (mass ("St. Romanus, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-10) (mass ("St. Lawrence, Deacon & Martyr")) (cls (2)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-11) (mass ("Ss. Tiburtius & Susanna, Virgin, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-12) (mass ("St. Clare, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-13) (mass ("Ss. Hippolytus & Cassian, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-14) (mass ("Vigil of the Assumption")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2027-08-15) (mass ("Assumption of the BVM")) (cls (1)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-08-16) (mass ("St. Joachim, Father of the BVM")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-17) (mass ("St. Hyacinth of Poland, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-18) (mass ("St. Agapitus, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-19) (mass ("St. John Eudes, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-20) (mass ("St. Bernard of Clairvaux, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-21) (mass ("St. Jane Frances de Chantal, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-22) (mass ("Fourteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-08-23) (mass ("St. Philip Benizi, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-24) (mass ("St. Bartholomew, Apostle")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-08-25) (mass ("St. Louis IX, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-26) (mass ("St. Zephirynus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-08-27) (mass ("St. Joseph Calasanctius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-28) (mass ("St. Augustine, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-29) (mass ("Fifteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-08-30) (mass ("St. Rose of Lima, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-08-31) (mass ("St. Raymond Nonnatus, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-01) (mass ("St. Giles, Abbot")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-02) (mass ("St. Stephen, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-03) (mass ("St. Pius X, Pope & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-04) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-09-05) (mass ("Sixteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-09-06) (mass ("Feria - Sixteenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-09-07) (mass ("Feria - Sixteenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-09-08) (mass ("Nativity of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-09-09) (mass ("St. Gorgonius, Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-09-10) (mass ("St. Nicholas of Tolentino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-11) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-09-12) (mass ("Seventeenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-09-13) (mass ("Feria - Seventeenth Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-09-14) (mass ("Exaltation of the Holy Cross")) (cls (2)) (colour ("red")) (praef ("Holy Cross")))
+ ((date 2027-09-15) (mass ("Seven Sorrows of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-09-16) (mass ("St. Cornelius, Pope, & St. Cyprian, Bishop, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-09-17) (mass ("Stigmata of St. Francis")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-18) (mass ("St. Joseph of Cupertino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-19) (mass ("Eighteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-09-20) (mass ("St. Eustace & Companions, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-09-21) (mass ("St. Matthew, Apostle & Evangelist")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-09-22) (mass ("Ember Wednesday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2027-09-23) (mass ("St. Linus, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-09-24) (mass ("Ember Friday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2027-09-25) (mass ("Ember Saturday")) (cls (2)) (colour ("violet")) (praef ("Common")))
+ ((date 2027-09-26) (mass ("Nineteenth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-09-27) (mass ("Ss. Cosmas & Damian, Martyrs")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-09-28) (mass ("St. Wenceslaus, Duke, Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-09-29) (mass ("St. Michael the Archangel")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2027-09-30) (mass ("St. Jerome, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-01) (mass ("St. Remigius, Bishop & Confessor")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-02) (mass ("Holy Guardian Angels")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-03) (mass ("Twentieth Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-10-04) (mass ("St. Francis of Assisi, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-05) (mass ("Ss. Placid & Companions, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-10-06) (mass ("St. Bruno, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-07) (mass ("Our Lady of the Rosary")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-10-08) (mass ("St. Bridget, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-09) (mass ("St. John Leonard, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-10) (mass ("Twenty-first Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-10-11) (mass ("Maternity of the BVM")) (cls (2)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-10-12) (mass ("Feria - Twenty-first Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-10-13) (mass ("St. Edward, King, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-14) (mass ("St. Callistus I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-10-15) (mass ("St. Teresa of Avila, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-16) (mass ("St. Hedwig, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-17) (mass ("Twenty-second Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-10-18) (mass ("St. Luke the Evangelist")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-10-19) (mass ("St. Peter of Alcantara, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-20) (mass ("St. John Cantius, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-21) (mass ("St. Hilarion, Abbot")) (cls (4)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-22) (mass ("Feria - Twenty-second Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-10-23) (mass ("St. Anthony Mary Claret, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-10-24) (mass ("Twenty-third Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-10-25) (mass ("Ss. Chrysanthus & Darius, Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-10-26) (mass ("St. Evaristus, Pope & Martyr")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-10-27) (mass ("Feria - Twenty-third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-10-28) (mass ("Ss. Simon & Jude, Apostles")) (cls (2)) (colour ("red")) (praef ("Apostles")))
+ ((date 2027-10-29) (mass ("Feria - Twenty-third Sunday after Pentecost")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-10-30) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-10-31) (mass ("Christ the King")) (cls (1)) (colour ("white")) (praef ("Christ the King")))
+ ((date 2027-11-01) (mass ("All Saints")) (cls (1)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-02) (mass ("All Souls - Mass 1")) (cls (1)) (colour ("black")) (praef ("For the Dead")))
+ ((date 2027-11-03) (mass ("Feria - Resumed 4th Sunday after Epiphany")) (cls (4)) (colour ("green")) (praef ("Common")))
+ ((date 2027-11-04) (mass ("St. Charles Borromeo, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-05) (mass ("The Holy Relics")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-11-06) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+ ((date 2027-11-07) (mass ("Resumed 5th Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-11-08) (mass ("Four Holy Crowned Martyrs")) (cls (4)) (colour ("red")) (praef ("Common")))
+ ((date 2027-11-09) (mass ("Dedication of the Archbasilica of Our Holy Savior")) (cls (2)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-10) (mass ("St. Andrew Avellino, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-11) (mass ("St. Martin of Tours, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-12) (mass ("St. Martin I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-11-13) (mass ("St. Didacus, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-14) (mass ("Resumed 6th Sunday after Epiphany")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-11-15) (mass ("St. Albert the Great, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-16) (mass ("St. Gertrude, Virgin")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-17) (mass ("St. Gregory Thaumaturgus, Bishop & Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-18) (mass ("Dedication of the Basilicas of Ss. Peter & Paul")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-19) (mass ("St. Elizabeth of Hungary, Widow")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-20) (mass ("St. Felix of Valois, Confessor")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-21) (mass ("Last Sunday after Pentecost")) (cls (2)) (colour ("green")) (praef ("Holy Trinity")))
+ ((date 2027-11-22) (mass ("St. Cecilia, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-11-23) (mass ("St. Clement I, Pope & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-11-24) (mass ("St. John of the Cross, Doctor of the Church")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-25) (mass ("St. Catherine of Alexandria, Virgin & Martyr")) (cls (3)) (colour ("red")) (praef ("Common")))
+ ((date 2027-11-26) (mass ("St. Sylvester, Abbot")) (cls (3)) (colour ("white")) (praef ("Common")))
+ ((date 2027-11-27) (mass ("Saturday of Our Lady")) (cls (4)) (colour ("white")) (praef ("BVM")))
+)
diff --git a/test/fixtures/fiuv-ordo-2025-2026.sexp b/test/fixtures/fiuv-ordo-2025-2026.sexp
new file mode 100644
index 0000000..2ea9913
--- /dev/null
+++ b/test/fixtures/fiuv-ordo-2025-2026.sexp
@@ -0,0 +1,1817 @@
+; test/fixtures/fiuv-ordo-2025-2026.sexp -- Witnesses task (2026-08-22-colitur-
+; celebrant-rubrics-phase1)'s SEVENTH validation layer, and the first
+; UNIVERSAL (non-diocesan), SECOND-COMPILER witness: the FIUV (Foederatio
+; Internationalis Una Voce) Ordo, compiled independently of the Latin Mass
+; Society's own three editions (test/test_lms_ordo.ml) -- see
+; docs/research/ordo/PROVENANCE-ordo-corpus.md for the full four-reasons
+; account of why this source is the more valuable of the two newly-
+; acquired ones.
+;
+; Generator: tools/extract_fiuv_ordo.ml -- do not hand-edit; re-run
+; against a fresh pdftotext dump and commit the diff instead.
+;
+; Source: "Ordo Divini Officii recitandi sacrique peragendi secundum
+; antiquam Ritus Romani formam pro anno Domini 2026", Foederatio
+; Internationalis Una Voce, compiled by Joseph Shaw (Praefatio signed
+; "Joseph Shaw, President", Feast of the Nativity of Our Lady [8 Sept]
+; 2025) -- title page and Praefatio, verified directly against the PDF's
+; own extracted text. 2025 is stated as the Federation's own 60th
+; anniversary year.
+; PDF metadata: Creator "TeX", Producer "pdfTeX-1.40.22", CreationDate
+; 2025-11-08, 128 pages.
+; URL: identified via web search as
+; https://lms.org.uk/sites/default/files/u5374/fiuv_ordo_2025-2026_1.1_a5_format.pdf
+; (hosted by the Latin Mass Society's own site alongside its own three
+; editions -- Joseph Shaw is both FIUV President and LMS Chairman, which
+; plausibly also explains why this PDF's own trailing malformed entry
+; (see COVERAGE below) is structurally identical to the LMS PDFs' own,
+; despite the two being compiled by different people); NOT independently
+; re-downloaded and byte-compared in this session -- recorded honestly
+; rather than presented as verified, the same discipline the LMS
+; fixtures' own headers use.
+; The local PDF (docs/research/ordo/fiuv-ordo-2025-2026.pdf) is gitignored (CLAUDE.md: "docs/
+; is gitignored"), so this header, not git, is this fixture's only record
+; of where it came from.
+; SHA-256 of docs/research/ordo/fiuv-ordo-2025-2026.pdf: 4335cc112b5fb6ec4d9511465ccc9381bed9b6056a56bc82dbaa5b2d85d0d855
+; Extracted (UTC): 2026-08-22
+; Exact commands:
+; pdftotext -layout docs/research/ordo/fiuv-ordo-2025-2026.pdf /tmp/fiuv.txt
+; dune exec tools/extract_fiuv_ordo.exe -- /tmp/fiuv.txt \
+; docs/research/ordo/fiuv-ordo-2025-2026.pdf test/fixtures/fiuv-ordo-2025-2026.sexp
+;
+; COVERAGE: 400 day-rows, 2025-11-27 through 2026-12-31. Starts at the book's own first
+; real content line ("November MMXXV", the FIRST month header found with
+; a parseable Roman-numeral year -- used as this parser's sole date
+; anchor, see the tool's own header on why no LATER header's year is ever
+; read, the second one being a publisher typo, "December MMXV" for 2025).
+; Stops before a malformed trailing entry, structurally the SAME artefact
+; found in all three LMS editions (a stray, mislabelled duplicate of the
+; fixture's own already-extracted 1 January row, headed "1st Jan / 2025."
+; -- see extract_lms_ordo.ml's own COVERAGE section for the fuller
+; account of this shared publisher-side quirk).
+;
+; CHARACTERISATION FINDINGS (non-negotiable per the task brief -- the
+; extraordinaryform.org Ordo silently omitted St Lawrence's vigil on
+; EVERY date it covered, which nearly produced a false corroboration
+; during the RG 33 work; this Ordo was probed with the same discipline
+; before a single divergence was adjudicated):
+;
+; 1. UNIVERSAL, not diocesan: unlike the three LMS editions (which had to
+; exclude diocesan variants from every comparison, quantified in each
+; of their own fixture headers), this Ordo carries ONE block per day,
+; always. There is no [has_diocesan_variant] field in this fixture's
+; own [row] at all -- there is nothing to exclude.
+;
+; 2. OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.creed (RG
+; 475-476), RE-CHECKED BY THIS TOOL RUN against its own extracted
+; [rows] before this header was even written -- a failed probe is a
+; hard [die], never a printed claim:
+; 2025-11-30 (Advent Sunday, I class, RG 475(a)) -> TRUE
+; 2025-12-01 (ordinary Advent feria, III class, RG 476(b)/(d)) -> FALSE
+; 2025-12-26 (St Stephen, II class, inside the Nativity octave, RG 475(d)) -> TRUE
+; 2026-08-10 (St Laurence, II class martyr, no Lord/BVM/apostle clause applies, RG 476(b)) -> FALSE
+; 2026-08-15 (the Assumption, I class, RG 475(b)) -> TRUE
+; All 5 predictions confirmed, both directions -- this source is
+; discriminating, not a constant, on the Creed.
+;
+; 3. THE SUBSTRING TRAP this parser defends against, found live in this
+; corpus: "Gloria" is also the first word of "Gloria Patri" (the psalm
+; doxology), which can appear INSIDE the very Mass clause being
+; scanned (Good Friday, 3 April 2026: "Missa pr., (omittuntur ps.
+; Iudica me et Gloria Patri), Gloria, sine Credo, praef. comm." -- the
+; real, standalone Gloria mention follows immediately after). See
+; [find_word]'s own citation.
+;
+; 4. RAW SUBSTRING COUNTS measured against this session's own pdftotext
+; dump, for comparison against the task brief's own figures (328
+; Gloria / 132 sine Gloria / 119 Credo / 260 sine Credo, 262 Te Deum):
+; "sine Gloria" 132 (EXACT match), "sine Credo" 260 (EXACT match), raw
+; "Te Deum" substring 262 (EXACT match, includes negated occurrences
+; as substring hits -- 42 of them are "non dicitur Te Deum"). Raw
+; "Gloria"/"Credo" substring totals (494/411) do NOT match the brief's
+; implied positive totals (328/119) even after subtracting the 25
+; "Gloria Patri" occurrences (469, still 9 over) -- not chased further
+; here; this extractor's own token-scoped, Missa-clause-bounded counts
+; below are what this fixture actually asserts, not a forced match to
+; the brief's approximate figures.
+;
+; 5. THE ALTERNATIVE-OFFICE TRAP (celebrant-rubrics-phase1 Phase 2
+; correction, 2026-08-22, closing F3): six real days print BOTH a
+; strict-1962 reading and a complete SECOND office (the same saint
+; kept outright under the 2020 decree Cum Sanctissima), separated by
+; a literal "-VEL-" token. [extract_te_deum] used to scan the WHOLE
+; block unbounded, so on these six days -- whose PRIMARY office states
+; no "Ad Mat." of its own -- it silently read the SECOND office's own
+; Te Deum instead, manufacturing a same-day contradiction with colitur
+; that F3 first recorded as "colitur's own possible gap". Every field
+; now reads the PRIMARY office only (module header point 5 has the
+; full account); the alternative is captured, not discarded, in its
+; own [alt_te_deum] field. Confirmed to fire on EXACTLY six dates by a
+; hard characterisation probe (this run's own output, above), not
+; merely asserted here.
+;
+; MEASURED DISTRIBUTION (this extraction, not the brief's figures): Gloria
+; true=269 false=130 unresolved=1; Credo true=116 false=283 unresolved=1;
+; Te Deum true=201 false=66 unresolved=133; alt Te Deum (the six "-VEL-"
+; Cum Sanctissima alternatives, point 5 above) true=6 false=0 none=394
+; (a day contributes to "none" here either because it has no "-VEL-"
+; alternative at all -- 394 of 400 -- or, for a day that does, because
+; that alternative's own text doesn't state Te Deum either; not
+; distinguished by this one count).
+;
+; FIX HISTORY (fixed text, HISTORICAL counts from the run that found each
+; bug, not re-verified live by every later run -- this section exists so
+; regenerating this fixture from a fresh pdftotext dump, which rewrites
+; this whole header from the template, does not silently erase either
+; finding; earlier this header carried the first entry below as a
+; hand-appended note that a regeneration between then and now had
+; already dropped once):
+;
+; 1. RE-EXTRACTED (celebrant-rubrics-phase1 Phase 2, 2026-08-22): the FIRST
+; extraction's own Te Deum parser recognised only ONE of the source's two
+; negative phrasings ("non dicitur Te Deum") -- "sine Te Deum" (how the
+; source actually negates a SUNDAY's own Te Deum, among others) fell
+; through to a bare "Te Deum" substring match and was wrongly read
+; [true]. Found by hand, comparing the raw pdftotext dump against this
+; fixture's own values directly, not by any coverage check (both counted
+; the same 127 unresolved rows before and after). Fixed in
+; tools/extract_fiuv_ordo.ml's own [extract_te_deum] (see its own
+; citation); this fixture re-extracted from the SAME pdftotext dump
+; (SHA-256 of the source PDF unchanged, above). 24 of 400 rows changed,
+; every one Te Deum true->false, every one independently confirmed
+; against the raw text: true 231->207, false 42->66, unresolved 127
+; unchanged. See lib/rites/rite_ef/rubrics_ef.ml's own [te_deum] header
+; (237(a)'s comment) for the full account of what this corrected, and
+; the .superpowers task report for the complete before/after date list.
+;
+; 2. RE-EXTRACTED (celebrant-rubrics-phase1 Phase 2 correction, 2026-08-22):
+; module header point 5 and CHARACTERISATION point 5 above have the
+; full account of the "-VEL-" alternative-office bug this closes
+; (data/ef/expected-divergences-fiuv.sexp's own F3). This fixture
+; re-extracted from the SAME pdftotext dump (SHA-256 of the source PDF
+; unchanged, above). 6 of 400 rows changed, every one Te Deum
+; true->unresolved (2026-03-06/07/09/12/21/24), every one independently
+; confirmed against the raw text: Te Deum true 207->201 (this run's own
+; unresolved count went 127->133, consistent with those same 6 rows).
+; Gloria/Credo/class_/title/praef are UNCHANGED on all 400 rows --
+; those fields were already correctly bounded to the primary office
+; before this fix (a Vespers-line token always intervened before the
+; "-VEL-" separator on all six real instances), confirmed by a direct
+; diff of the fixture before and after, not merely by argument.
+;
+; 3. RE-EXTRACTED (celebrant-rubrics-phase1 same correction, defensive
+; hardening, 2026-08-22): auditing for the SAME trap elsewhere (the
+; task brief's own item 5) found a THIRD, narrower alternate-Mass
+; marker, "Vel (sec. decretum <<Cum sanct.>>) Missa ...", offering a
+; Cum-Sanctissima Mass FORMULARY choice within a single office
+; (unlike point 5 above, no second "Ad Mat." set of lessons -- a
+; narrower thing than a full alternate office). 20 occurrences in the
+; whole corpus, confirmed by direct grep; on all 20, Gloria/Credo were
+; ALREADY stated before reaching this marker, so this was NEVER a
+; live divergence for those two fields (confirmed by this same diff:
+; 0 Gloria/Credo/class_/title/alt_te_deum rows changed). [praef]
+; alone changed on 20 of 400 rows (its own "rest of the primary
+; clause" capture no longer runs past this marker into the
+; alternative's own text) -- harmless in itself ([praef] is
+; documented CAPTURED, NOT VALIDATED, compared by nothing), but added
+; as a defensive boundary in [extract_missa_fields] so a FUTURE year
+; whose primary clause does not restate Gloria/Credo before this
+; marker cannot silently read the alternative's own value instead --
+; the identical failure shape as point 2 above, closed before it was
+; ever observed live rather than after.
+(((date 2025-11-27) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXIV & Ultima post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2025-11-28) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXIV & Ultima post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2025-11-29) (class_ ("IV cl."))
+ (title "Alb Sabb. S. Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2025-11-30) (class_ ("I cl."))
+ (title "Viol DOM. I ADVENTUS, De ea,") (te_deum (false)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")) (alt_te_deum ()))
+ ((date 2025-12-01) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. I Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-02) (class_ ("III cl."))
+ (title "Rub Feria III. S Bibianae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. AD"))
+ (alt_te_deum ()))
+ ((date 2025-12-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Francisci Xavierii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. AD")) (alt_te_deum ()))
+ ((date 2025-12-04) (class_ ("III cl."))
+ (title "Alb Feria V. S Petri Chrysologi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2025-12-05) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. I Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")) (alt_te_deum ()))
+ ((date 2025-12-06) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Nicolai Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")) (alt_te_deum ()))
+ ((date 2025-12-07) (class_ ("I cl."))
+ (title "Viol DOM. II ADVENTUS, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2025-12-08) (class_ ("I cl."))
+ (title "Alb Feria II. IN CONCEPTIONE IMMACULATA B. MARIAE VIRGINIS,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("BMV Et te in Conceptione Immaculata. AD")) (alt_te_deum ()))
+ ((date 2025-12-09) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-10) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-11) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Damasi I Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. AD")) (alt_te_deum ()))
+ ((date 2025-12-12) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-13) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. S Luciae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I"))
+ (alt_te_deum ()))
+ ((date 2025-12-14) (class_ ("I cl."))
+ (title "Viol/ DOM. III ADVENTUS (GAUDETE), De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2025-12-15) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. III Adventus (Gaudete), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2025-12-16) (class_ ("III cl."))
+ (title "Alb Feria III. S Eusebii Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. AD")) (alt_te_deum ()))
+ ((date 2025-12-17) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm.\226\128\147 Quoad Flectamus genua vide RM 440."))
+ (alt_te_deum ()))
+ ((date 2025-12-18) (class_ ("II cl."))
+ (title "Viol FERIA V POST DOM. III ADVENTUS (GAUDETE), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2025-12-19) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-20) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I"))
+ (alt_te_deum ()))
+ ((date 2025-12-21) (class_ ("I cl."))
+ (title "Viol DOM. IV ADVENTUS, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2025-12-22) (class_ ("II cl."))
+ (title "Viol FERIA II POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-23) (class_ ("II cl."))
+ (title "Viol FERIA III POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2025-12-24) (class_ ("I cl."))
+ (title "Viol Feria IV. VIGILIA NATIVITATIS DOMINI,") (te_deum (false))
+ (gloria (false)) (credo (false)) (praef ("comm. I")) (alt_te_deum ()))
+ ((date 2025-12-25) (class_ ("I cl."))
+ (title "Alb Feria V. IN NATIVITATE DOMINI,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("et Communic. pr. per totam oct. \226\128\147 In Communicantes: in 1\194\170 Missa dicitur Noctem sacratissimam celebrantes, qua, in 2\194\170 et 3\194\170 Missa et per octavam Diem sacratissimum celebrantes, quo. \226\128\147 In 2\194\170 Missa (etiam in cantu) fit comm. S. Anastasi\195\166 * M. \226\128\147 In Missis in cantu, ad verba symboli Et incarnatus est\226\128\166 et homo factus est, omnes genuflectunt versus altare, non tantum cum a celebrante recitantur, sed etiam cum a choro canuntur (RM 518 b). II"))
+ (alt_te_deum ()))
+ ((date 2025-12-26) (class_ ("II cl."))
+ (title "Rub Feria VI. S STEPHANI * PROTOMARTYRIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. AD"))
+ (alt_te_deum ()))
+ ((date 2025-12-27) (class_ ("II cl."))
+ (title "Alb Sabb. S IOANNIS * AP. ET EV.,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. AD"))
+ (alt_te_deum ()))
+ ((date 2025-12-28) (class_ ("II cl."))
+ (title "Alb DOM. INFRA OCTAVAM NATIVITATIS, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad II"))
+ (alt_te_deum ()))
+ ((date 2025-12-29) (class_ ("II cl."))
+ (title "Alb FERIA II DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum."))
+ (alt_te_deum ()))
+ ((date 2025-12-30) (class_ ("II cl."))
+ (title "Alb FERIA III DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum."))
+ (alt_te_deum ()))
+ ((date 2025-12-31) (class_ ())
+ (title
+ "Alb FERIA IV DOM. INFRA OCTAVAM NATIVITATIS, De ea. \226\128\147 Off. semifestivum. \226\128\147 Ad MAT. invit., hymnus, 9 antt. et 9 pss. cum ultimo V de festo Nativ., Ll. de Scr. occ. cum suis RR (ad 2um additur Gloria Patri)\226\128\147 Ad Laudes antt. de Nativ., pss. de dom., comm. S Silvestri I Papae et Conf. \226\128\147 Ad HORAS ant. et pss. de feria curr., rel ut in festo Nativ. \226\128\147 Ad Primam in R Br. V Qui natus es de Maria Virgine. Missa Puer natus de diebus infra octavam, Gloria, Credo, comm. S Silvestri I Papae et Conf., praef. de Nativ., Communic. de Nativ. diem sacratissimum. I VESPER\195\134 de seq. \226\128\147 Compl. de dom. Hodie ad solemnem recitationem hymni Te Deum, indulgentia plenaria lucrari potest. 16")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. I"))
+ (alt_te_deum ()))
+ ((date 2026-01-01) (class_ ("I cl."))
+ (title "Al Feria V. OCTAVA NATIVITATIS,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. II"))
+ (alt_te_deum ()))
+ ((date 2026-01-02) (class_ ("IV cl."))
+ (title "Alb Feria VI post Octavam Nativitatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("de Nativ., sine Communic. pr. Feria VI prima in mense."))
+ (alt_te_deum ()))
+ ((date 2026-01-03) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-01-04) (class_ ("II cl."))
+ (title "Alb Dom. SS.MI NOMINIS IESU,") (te_deum ()) (gloria (true))
+ (credo (true)) (praef ("de Nativ., sine Communic. pr. II"))
+ (alt_te_deum ()))
+ ((date 2026-01-05) (class_ ("IV cl."))
+ (title "Alb Feria II post Octavam Nativitatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("de Nativ., sine Communic. pr. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-01-06) (class_ ("I cl."))
+ (title "Alb Feria III. IN EPIPHANIA DOMINI,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("et Communic pr. II"))
+ (alt_te_deum ()))
+ ((date 2026-01-07) (class_ ("IV cl."))
+ (title "Alb Feria IV post Epiphaniam, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("de Epiphania."))
+ (alt_te_deum ()))
+ ((date 2026-01-08) (class_ ("IV cl."))
+ (title "Alb Feria V post Epiphaniam, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("de Epiphania."))
+ (alt_te_deum ()))
+ ((date 2026-01-09) (class_ ("IV cl."))
+ (title "Alb Feria VI post Epiphaniam, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("de Epiphania."))
+ (alt_te_deum ()))
+ ((date 2026-01-10) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione. I")) (alt_te_deum ()))
+ ((date 2026-01-11) (class_ ("II cl."))
+ (title
+ "Alb Dom. I post Epiphaniam. SANCT\195\134 FAMILI\195\134 IESU, MARI\195\134, IOSEPH *,")
+ (te_deum ()) (gloria (true)) (credo (true)) (praef ("de Epiphania. II"))
+ (alt_te_deum ()))
+ ((date 2026-01-12) (class_ ("IV cl."))
+ (title "Alb Feria II post Dom. I post Epiphaniam, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("de Epiphania.")) (alt_te_deum ()))
+ ((date 2026-01-13) (class_ ("II cl."))
+ (title "Alb Feria III. IN COMMEMORATIONE BAPTISMATIS D.N.I.C.,")
+ (te_deum ()) (gloria (true)) (credo (true)) (praef ("de Epiphania. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-01-14) (class_ ("III cl."))
+ (title "Alb Feria IV. S Hilarii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-01-15) (class_ ("III cl."))
+ (title "Alb Feria V. S Pauli Primi Eremitae Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-01-16) (class_ ("III cl."))
+ (title "Rub Feria VI. S Marcelli I Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-01-17) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Antonii Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. I")) (alt_te_deum ()))
+ ((date 2026-01-18) (class_ ("II cl."))
+ (title "Vir DOM. II POST EPIPHANIAM, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-01-19) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. II post Epiphaniam, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-01-20) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria III. SS Fabiani Papae et Sebastiani Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")) (alt_te_deum ()))
+ ((date 2026-01-21) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria IV. S Agnetis * Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-01-22) (class_ ("III cl."))
+ (title "Rub Feria V. SS Vincentii et Anastasii Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-01-23) (class_ ("III cl."))
+ (title "Alb Feria VI. S Raymundi de Pe\195\177afort Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-01-24) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. S Timothei Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I"))
+ (alt_te_deum ()))
+ ((date 2026-01-25) (class_ ("II cl."))
+ (title "Vir DOM. III POST EPIPHANIAM, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-01-26) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria II. S Polycarpi Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-01-27) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Ioannis Chrysostomi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-01-28) (class_ ("III cl."))
+ (title "Alb Feria IV. S Petri Nolasci Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-01-29) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Francisci Salesii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-01-30) (class_ ("III cl."))
+ (title "Rub Feria VI. S Martinae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-01-31) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Ioannis Bosco Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. I")) (alt_te_deum ()))
+ ((date 2026-02-01) (class_ ("II cl."))
+ (title "Viol DOM. SEPTUAGESIMAE, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. II")) (alt_te_deum ()))
+ ((date 2026-02-02) (class_ ("II cl."))
+ (title "Alb Feria II. IN PURIFICATIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ. Ad benedictionem candelarum: ut in Missali. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-02-03) (class_ ("IV cl."))
+ (title "Viol Feria III Dom. Septuagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-02-04) (class_ ("III cl."))
+ (title "Alb Feria IV. S Andreae Corsini Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-02-05) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria V. S Agathae * Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-02-06) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Titi Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")) (alt_te_deum ()))
+ ((date 2026-02-07) (class_ ("III cl."))
+ (title "Alb Sabb. S Romualdi Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. Sabbatum primum in mense. I"))
+ (alt_te_deum ()))
+ ((date 2026-02-08) (class_ ("II cl."))
+ (title "Viol DOM. SEXAGESIMAE, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. II")) (alt_te_deum ()))
+ ((date 2026-02-09) (class_ ("III cl."))
+ (title "Alb Feria II. S Cyrilli Ep. Alexandrini, Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-02-10) (class_ ("III cl."))
+ (title "Alb Feria III. S Scholasticae Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-02-11) (class_ ("III cl."))
+ (title "Alb Feria IV. In Apparitione B. Mariae Virg. Immaculatae,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("BMV Et te in Conceptione Immaculata.")) (alt_te_deum ()))
+ ((date 2026-02-12) (class_ ("III cl."))
+ (title
+ "Alb Feria V. SS Septem Fundatorum Ordinis Servorum B. Mariae Virg., Cc.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-02-13) (class_ ("IV cl."))
+ (title "Viol Feria VI Dom. Sexagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-02-14) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-02-15) (class_ ("II cl."))
+ (title "Viol DOM. QUINQUAGESIMAE, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. II")) (alt_te_deum ()))
+ ((date 2026-02-16) (class_ ("IV cl."))
+ (title "Viol Feria II Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-02-17) (class_ ("IV cl."))
+ (title "Viol Feria III Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-02-18) (class_ ("I cl."))
+ (title "Viol FERIA IV CINERUM, De ea,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("Quadr., or. super populum. In Missa qu\195\166 dicitur post benedictionem et impositionem cinerum omittuntur omnes preces ad gradus altaris dicend\195\166, necnon ors. Aufer a nobis et Oramus te, Domine, non autem osculum altaris (RM, 424 a)."))
+ (alt_te_deum ()))
+ ((date 2026-02-19) (class_ ("III cl."))
+ (title "Viol Feria V Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-02-20) (class_ ("III cl."))
+ (title "Viol Feria VI Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-02-21) (class_ ("III cl."))
+ (title "Viol Sabb. Dom. Quinquagesimae, De eo,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum. I"))
+ (alt_te_deum ()))
+ ((date 2026-02-22) (class_ ("I cl."))
+ (title "Viol DOM. I QUADRAGESIMAE, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")) (alt_te_deum ()))
+ ((date 2026-02-23) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. I Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-02-24) (class_ ("II cl."))
+ (title "Rub Feria III. S MATTHIAE AP.,") (te_deum ()) (gloria (true))
+ (credo (true)) (praef ("App. Ad")) (alt_te_deum ()))
+ ((date 2026-02-25) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef
+ ("Quadr., or. super populum. \226\128\147 Quoad Flectamus genua vide RM 440."))
+ (alt_te_deum ()))
+ ((date 2026-02-26) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. I Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-02-27) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-02-28) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("Quadr., or. super populum. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I"))
+ (alt_te_deum ()))
+ ((date 2026-03-01) (class_ ("I cl."))
+ (title "Viol DOM. II QUADRAGESIMAE, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")) (alt_te_deum ()))
+ ((date 2026-03-02) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-03) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-04) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-05) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-06) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. Feria VI prima in mense."))
+ (alt_te_deum (true)))
+ ((date 2026-03-07) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. II Quadragesimae, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. Sabbatum primum in mense. I"))
+ (alt_te_deum (true)))
+ ((date 2026-03-08) (class_ ("I cl."))
+ (title "Viol DOM. III QUADRAGESIMAE, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")) (alt_te_deum ()))
+ ((date 2026-03-09) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum (true)))
+ ((date 2026-03-10) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-11) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-12) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum (true)))
+ ((date 2026-03-13) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum."))
+ (alt_te_deum ()))
+ ((date 2026-03-14) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. III Quadragesimae, De eo,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum. I"))
+ (alt_te_deum ()))
+ ((date 2026-03-15) (class_ ("I cl."))
+ (title "Viol/ DOM. IV QUADRAGESIMAE (LAETARE), De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")) (alt_te_deum ()))
+ ((date 2026-03-16) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-17) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-18) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. I")) (alt_te_deum ()))
+ ((date 2026-03-19) (class_ ("I cl."))
+ (title
+ "Alb Feria V. S IOSEPH * SPONSI B. MARIAE VIRG., CONF. ET ECCLESIAE UNIVERSAE PATRONI,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de S Iosepho Et te in festivitate. II")) (alt_te_deum ()))
+ ((date 2026-03-20) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-21) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. IV Quadragesimae (Laetare), De eo,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. I")) (alt_te_deum (true)))
+ ((date 2026-03-22) (class_ ("I cl."))
+ (title "Viol DOM. I PASSIONIS, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("de Sancta Cruce. II"))
+ (alt_te_deum ()))
+ ((date 2026-03-23) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-24) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum. I")) (alt_te_deum (true)))
+ ((date 2026-03-25) (class_ ("I cl."))
+ (title "Alb Feria IV. IN ANNUNTIATIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("BMV Et te in Annuntiatione \226\128\147 In Missis in cantu, ad verba symboli Et incarnatus est\226\128\166 et homo factus est, omnes genuflectunt versus altare, non tantum cum a celebrante recitantur, sed etiam cum a choro canuntur (RM 518 b). II"))
+ (alt_te_deum ()))
+ ((date 2026-03-26) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-27) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-28) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. I Passionis, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum. I")) (alt_te_deum ()))
+ ((date 2026-03-29) (class_ ("I cl."))
+ (title
+ "Rub in Officio, Rub. ad Bened. ramorum et in Processione, Viol. in Missa. DOM. IN PALMIS, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (true))
+ (praef
+ ("de Sancta Cruce. \194\171Asperges\194\187 omittitur. \226\128\147 Benedictio palmorum et processio ante missam principalem celebrandae sunt. \226\128\147 Orationes praeparatoriae omittuntur. \226\128\147 Evangelium de passione secundum S Matthiam 26, 36-75; 27,1-60 legitur. Munda cor dicitur, celebrans autem (vel diaconus chronista) signum crucis nec super libro nec super se facit, necque librum osculatur, necque Laus tibi Domine dicit. \226\128\147 Evangelium finale omittitur. \226\128\147 In Missis sine processione, legitur in fine Evangelium Cum appropinquasset de benedictione ramorum. Sacerdotibus plures quam unam missam dicentibus licet Evangelium S Matthi\195\166 27, 45-52 legere potius quam Evangelium Passionis. II"))
+ (alt_te_deum ()))
+ ((date 2026-03-30) (class_ ("I cl."))
+ (title "Viol FERIA II HEBDOMADAE SANCTAE, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")) (alt_te_deum ()))
+ ((date 2026-03-31) (class_ ("I cl."))
+ (title "Viol FERIA II HEBDOMADAE SANCTAE, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef
+ ("de Sancta Cruce or. super populum. Passio secundum S Marcum 14, 32-72; 15,1-46. Munda cor dicitur, celebrans autem (vel diaconus chronista) signum crucis nec super libro nec super se facit, necque librum osculatur, necque Laus tibi Domine dicit."))
+ (alt_te_deum ()))
+ ((date 2026-04-01) (class_ ("I cl."))
+ (title "Viol FERIA IV HEBDOMADAE SANCTA, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef
+ ("de Sancta Cruce or. super populum. Passio secundum S Lucam 22, 39-71; 23, 1-53. Munda cor dicitur, celebrans autem (vel diaconus chronista) signum crucis nec super libro nec super se facit, necque librum osculatur, necque Laus tibi Domine dicit."))
+ (alt_te_deum ()))
+ ((date 2026-04-02) (class_ ("I cl."))
+ (title "Viol. in Off., Alb. in Missa. FERIA V IN CENA DOMINI, De ea,")
+ (te_deum ()) (gloria (true)) (credo (false))
+ (praef
+ ("de Sancta Cruce, Communicantes, Hanc igitur et Qui pridie pr., ad triplex Agnus Dei ter respondetur miserere nobis. Osculum pacis non datur, et omittitur or. Domine Iesu Christe, qui dixisti."))
+ (alt_te_deum ()))
+ ((date 2026-04-03) (class_ ("I cl."))
+ (title
+ "Nig in Actione liturgica usque ad 4am partem, Viol. in S. Communione. FERIA VI IN PASSIONE ET MORTE DOMINI, De ea,")
+ (te_deum ()) (gloria (true)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")) (alt_te_deum ()))
+ ((date 2026-04-04) (class_ ("I cl."))
+ (title "Viol in Vig. pasch., Alb. in Missa. SABBATUM SANCTUM, De eo,")
+ (te_deum ()) (gloria ()) (credo ()) (praef ()) (alt_te_deum ()))
+ ((date 2026-04-05) (class_ ("I cl."))
+ (title "Alb DOM. RESURRECTIONIS, De ea,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("Pasch. (in hac potissimum die), Communic. et Hanc igitur pr., ad Ite, missa est additur duplex Alleluia. Hodie prohibentur omnes Missae defunctorum, etiam exsequialis."))
+ (alt_te_deum ()))
+ ((date 2026-04-06) (class_ ("I cl."))
+ (title "Alb FERIA II INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia."))
+ (alt_te_deum ()))
+ ((date 2026-04-07) (class_ ("I cl."))
+ (title "Alb FERIA III INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia."))
+ (alt_te_deum ()))
+ ((date 2026-04-08) (class_ ("I cl."))
+ (title "Alb FERIA IV INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia."))
+ (alt_te_deum ()))
+ ((date 2026-04-09) (class_ ("I cl."))
+ (title "Alb FERIA V INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia."))
+ (alt_te_deum ()))
+ ((date 2026-04-10) (class_ ("I cl."))
+ (title "Alb FERIA VI INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia."))
+ (alt_te_deum ()))
+ ((date 2026-04-11) (class_ ("I cl."))
+ (title "Alb SABBATUM IN ALBIS, De eo,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia. I"))
+ (alt_te_deum ()))
+ ((date 2026-04-12) (class_ ("I cl.")) (title "Alb DOM. IN ALBIS,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef ("Pasch. \226\128\147 Ite Missa est sine Alleluia. II"))
+ (alt_te_deum ()))
+ ((date 2026-04-13) (class_ ("III cl."))
+ (title "Rub Feria II. S Hermenegildi Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-04-14) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria III. S Iustini Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-04-15) (class_ ("IV cl."))
+ (title "Alb Feria IV Dom. in Albis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Pasch.)) (alt_te_deum ()))
+ ((date 2026-04-16) (class_ ("IV cl."))
+ (title "Alb Feria V Dom. in Albis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-04-17) (class_ ("IV cl."))
+ (title "Alb Feria VI Dom. in Albis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-04-18) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione. I")) (alt_te_deum ()))
+ ((date 2026-04-19) (class_ ("II cl."))
+ (title "Alb DOM. III PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")) (alt_te_deum ()))
+ ((date 2026-04-20) (class_ ("IV cl."))
+ (title "Alb Feria II post Dom. III Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Pasch.)) (alt_te_deum ()))
+ ((date 2026-04-21) (class_ ("III cl."))
+ (title "Alb Feria III. S Anselmi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("Pasch. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-04-22) (class_ ("III cl."))
+ (title "Rub Feria IV. SS Soteris et Caii Pp. et Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-04-23) (class_ ("IV cl."))
+ (title "Alb Feria V post Dom. III Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-04-24) (class_ ("III cl."))
+ (title "Rub Feria VI. S Fidelis de Sigmaringa Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-04-25) (class_ ("II cl."))
+ (title "Rub Sabb. LITANIA MAIOR. S MARCI EVANGELISTAE,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")) (alt_te_deum ()))
+ ((date 2026-04-26) (class_ ("II cl."))
+ (title "Alb DOM. IV PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")) (alt_te_deum ()))
+ ((date 2026-04-27) (class_ ("III cl."))
+ (title "Alb Feria II. S Petri Canisii Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("Pasch. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-04-28) (class_ ("III cl."))
+ (title "Alb Feria III. S Pauli a Cruce Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-04-29) (class_ ("III cl."))
+ (title "Rub Feria IV. S Petri Mart.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("Pasch. vel de Martyribus \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-04-30) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Catharinae Senensis Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. I")) (alt_te_deum ()))
+ ((date 2026-05-01) (class_ ("I cl."))
+ (title
+ "Alb Feria VI. S IOSEPH * OPIFICIS SPONSI B. MARIAE VIRG., CONF.,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de S Iosepho Et te in solemnitate \226\128\147 Etiam dici potest Missa Adiutor (cfr. in Missis votivis), cum Alleluia pasch., praef. S Ioseph Et et in solemnitate. Feria VI prima in mense. II"))
+ (alt_te_deum ()))
+ ((date 2026-05-02) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Athanasii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Pasch. Sabbatum primum in mense. I")) (alt_te_deum ()))
+ ((date 2026-05-03) (class_ ("II cl."))
+ (title "Alb DOM. V PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")) (alt_te_deum ()))
+ ((date 2026-05-04) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria II. S Monicae Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (Pasch.)) (alt_te_deum ()))
+ ((date 2026-05-05) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Pii V Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. Ad")) (alt_te_deum ()))
+ ((date 2026-05-06) (class_ ("IV cl."))
+ (title "Alb Feria IV post Dom. V Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-05-07) (class_ ("III cl."))
+ (title "Rub Feria V. S Stanislai Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-05-08) (class_ ("IV cl."))
+ (title "Alb Feria VI post Dom. V Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-05-09) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Gregorii Nazianzeni Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("Pasch. I"))
+ (alt_te_deum ()))
+ ((date 2026-05-10) (class_ ("II cl."))
+ (title "Alb DOM. VI PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")) (alt_te_deum ()))
+ ((date 2026-05-11) (class_ ("II cl."))
+ (title "Rub Feria II. SS PHILIPPI * & IACOBI * APP,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")) (alt_te_deum ()))
+ ((date 2026-05-12) (class_ ("III cl."))
+ (title
+ "Rub Feria III. SS Nerei, Achillei, Domitillae Virg., & Pancratii Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Pasch. vel de Martyribus.")) (alt_te_deum ()))
+ ((date 2026-05-13) (class_ ("II cl."))
+ (title "Alb Feria IV. VIGILIA ASCENSIONIS,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. I")) (alt_te_deum ()))
+ ((date 2026-05-14) (class_ ("I cl."))
+ (title "Alb Feria V. IN ASCENSIONE DOMINI NOSTRI IESU CHRISTI,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("Ascensionis, Communic pr. In Missa principali post Evangelium exstinguitur cereus paschalis. II"))
+ (alt_te_deum ()))
+ ((date 2026-05-15) (class_ ("III cl."))
+ (title "Alb Feria VI. S Ioannis Baptistae de la Salle Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Ascensionis \226\128\147")) (alt_te_deum ()))
+ ((date 2026-05-16) (class_ ("III cl."))
+ (title "Alb Sabb. S Ubaldi Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Ascensionis \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-05-17) (class_ ("II cl."))
+ (title "Alb DOM. POST ASCENSIONEM, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true))
+ (praef
+ ("Ascensionis. Hodie prohibentur omnes Missae defunctorum, excepta exsequiali."))
+ (alt_te_deum ()))
+ ((date 2026-05-18) (class_ ("III cl."))
+ (title "Rub Feria II. S Venantii Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("Ascensionis vel de Martyribus.")) (alt_te_deum ()))
+ ((date 2026-05-19) (class_ ("III cl."))
+ (title "Alb Feria III. S Petri Caelestini Papae et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Ascensionis \226\128\147")) (alt_te_deum ()))
+ ((date 2026-05-20) (class_ ("III cl."))
+ (title "Alb Feria IV. S Bernardini Senensis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Ascensionis.)) (alt_te_deum ()))
+ ((date 2026-05-21) (class_ ("IV cl."))
+ (title "Alb Feria V Dom. post Ascensionem, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Ascensionis.)) (alt_te_deum ()))
+ ((date 2026-05-22) (class_ ("IV cl."))
+ (title "Alb Feria VI Dom. post Ascensionem, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Ascensionis \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-05-23) (class_ ("I cl."))
+ (title "Rub Sabb. VIGILIA PENTECOSTES,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. I"))
+ (alt_te_deum ()))
+ ((date 2026-05-24) (class_ ("I cl.")) (title "Rub Dom. PENTECOSTES,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur. II"))
+ (alt_te_deum ()))
+ ((date 2026-05-25) (class_ ("I cl."))
+ (title "Rub FERIA II INFRA OCTAVAM PENTECOSTES, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur."))
+ (alt_te_deum ()))
+ ((date 2026-05-26) (class_ ("I cl."))
+ (title "Rub FERIA III INFRA OCTAVAM PENTECOSTES, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur."))
+ (alt_te_deum ()))
+ ((date 2026-05-27) (class_ ("I cl."))
+ (title
+ "Rub FERIA IV QUATTUOR TEMPORUM INFRA OCTAVAM PENTECOSTES, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur."))
+ (alt_te_deum ()))
+ ((date 2026-05-28) (class_ ("I cl."))
+ (title "Rub FERIA V INFRA OCTAVAM PENTECOSTES, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur."))
+ (alt_te_deum ()))
+ ((date 2026-05-29) (class_ ("I cl."))
+ (title
+ "Rub FERIA VI QUATTUOR TEMPORUM INFRA OCTAVAM PENTECOSTES, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur."))
+ (alt_te_deum ()))
+ ((date 2026-05-30) (class_ ("I cl."))
+ (title
+ "Rub SABBATUM QUATTUOR TEMPORUM II INFRA OCTAVAM PENTECOSTES, De eo,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur (quae in forma Miss\195\166 longiori post sixtam lectionem dicitur). Post Nonam exspirat tempus paschale. Compl de dom., cum antiphona finali de B. V. M. Salve Regina, quae dicitur ad Feriam VI ante Dom. I Adventus inclusive. Hodie prohibentur omnes Missae defunctorum, excepta exsequiali."))
+ (alt_te_deum ()))
+ ((date 2026-05-31) (class_ ("I cl."))
+ (title "Alb Dom. I post Pentecosten. IN FESTO SANCTISSIMAE TRINITATIS,")
+ (te_deum ()) (gloria (true)) (credo (true)) (praef ("Trinit. II"))
+ (alt_te_deum ()))
+ ((date 2026-06-01) (class_ ("III cl."))
+ (title "Alb Feria II. S Angelae Mericiae Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-06-02) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. I post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-06-03) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. I post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef ("comm. I"))
+ (alt_te_deum ()))
+ ((date 2026-06-04) (class_ ("I cl."))
+ (title "Alb Feria V. CORPORIS CHRISTI,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("comm. vel de Cor Sacratissimo. \226\128\147 Si processio cum benedicto sacramento post missam principalem fit, in Missa Benedicamus Domino dicitur, sed benedictio et evangelium finale omittuntur. II"))
+ (alt_te_deum ()))
+ ((date 2026-06-05) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria VI. S Bonifatii Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus. Feria VI prima in mense."))
+ (alt_te_deum ()))
+ ((date 2026-06-06) (class_ ("III cl."))
+ (title "Alb Sabb. S Norberti Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")) (alt_te_deum ()))
+ ((date 2026-06-07) (class_ ("II cl."))
+ (title "Vir DOM. II POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-06-08) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. II post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-06-09) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. II post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-06-10) (class_ ("III cl."))
+ (title "Alb Feria IV. S Margaritae Reginae, Vid.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-06-11) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria V. S Barnabae Apostoli,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("App. I")) (alt_te_deum ()))
+ ((date 2026-06-12) (class_ ("I cl."))
+ (title "Alb Feria VI. SACRATISSIMI CORDIS IESU,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Ss.mi Corde Iesu. Hodie, in qualibet ecclesia, coram Ss. Sacramento exposito, legatur formula reparationis et cantentur vel recitentur Litani\195\166 Sacratissimi Cordis Iesu (cfr. Enchiridion Indulgentiarum. Preces et pia opera, 1952, n.256, p.163). II"))
+ (alt_te_deum ()))
+ ((date 2026-06-13) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Antonii de Padua Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-06-14) (class_ ("II cl."))
+ (title "Vir DOM. III POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-06-15) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. III post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-06-16) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. III post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-06-17) (class_ ("III cl."))
+ (title "Alb Feria IV. S Gregorii Barbadici Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-06-18) (class_ ("III cl."))
+ (title "Alb Feria V. S Ephraem Syri Diaconi, Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-06-19) (class_ ("III cl."))
+ (title "Alb Feria VI. S Iulianae De Falconeriis Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-06-20) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-06-21) (class_ ("II cl."))
+ (title "Vir DOM. IV POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-06-22) (class_ ("III cl."))
+ (title "Alb Feria II. S Paulini Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-06-23) (class_ ("II cl."))
+ (title "Viol Feria III. VIGILIA NATIVITATIS S IOANNIS * BAPTISTAE,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef ("comm. I"))
+ (alt_te_deum ()))
+ ((date 2026-06-24) (class_ ("I cl."))
+ (title "Alb Feria IV. IN NATIVITATE S IOANNIS * BAPTISTAE,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("comm. vel de S Ioanni Baptista. II")) (alt_te_deum ()))
+ ((date 2026-06-25) (class_ ("III cl."))
+ (title "Alb Feria V. S Gulielmi Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-06-26) (class_ ("III cl."))
+ (title "Rub Feria VI. SS Ioannis * et Pauli * Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-06-27) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-06-28) (class_ ("II cl."))
+ (title "Vir DOM. V POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. I")) (alt_te_deum ()))
+ ((date 2026-06-29) (class_ ("I cl."))
+ (title "Rub Feria II. SS PETRI * ET PAULI * APP.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. II")) (alt_te_deum ()))
+ ((date 2026-06-30) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria III. In Commemoratione S Pauli * Ap.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("App. I"))
+ (alt_te_deum ()))
+ ((date 2026-07-01) (class_ ("I cl."))
+ (title "Rub Feria IV. PRETIOSISSIMI SANGUINIS D. N. I. C.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("de Sancta Cruce. II"))
+ (alt_te_deum ()))
+ ((date 2026-07-02) (class_ ("II cl."))
+ (title "Alb Feria V. IN VISITATIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Visitatione. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-07-03) (class_ ("III cl."))
+ (title "Rub Feria VI. S Iren\195\166i Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus. Feria VI prima in mense."))
+ (alt_te_deum ()))
+ ((date 2026-07-04) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-07-05) (class_ ("II cl."))
+ (title "Vir DOM. VI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-07-06) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. VI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-07) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. SS Cyrilli et Methodii Epp. et Cc.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-07-08) (class_ ("III cl."))
+ (title "Alb Feria IV. S Elisabeth Reginae, Vid.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")) (alt_te_deum ()))
+ ((date 2026-07-09) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. VI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-10) (class_ ("III cl."))
+ (title
+ "Rub Feria VI. SS Septem Fratrum Mm., Ac SS Rufinae et Secundae Vv. et Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")) (alt_te_deum ()))
+ ((date 2026-07-11) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-07-12) (class_ ("II cl."))
+ (title "Vir DOM. VII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-07-13) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. VII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-07-14) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Bonaventurae Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-07-15) (class_ ("III cl."))
+ (title "Alb Feria IV. S Henrici Imperatoris Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-07-16) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. VII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-17) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. VII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-18) (class_ ("III cl."))
+ (title "Alb Sabb. S Camilli de Lellis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-07-19) (class_ ("II cl."))
+ (title "Vir DOM. VIII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-07-20) (class_ ("III cl."))
+ (title "Alb Feria II. S Hieronymi \211\148miliani Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-21) (class_ ("III cl."))
+ (title "Alb Feria III. S Laurentii de Brundusio Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-22) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Mariae Magdalenae P\197\147nitentis,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-07-23) (class_ ("III cl."))
+ (title "Rub Feria V. S Apollinaris Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-24) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. VIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-25) (class_ ("II cl."))
+ (title "Rub Sabb. S IACOBI * APOSTOLI,") (te_deum ()) (gloria (true))
+ (credo (true)) (praef ("App. Ad")) (alt_te_deum ()))
+ ((date 2026-07-26) (class_ ("II cl."))
+ (title "Vir DOM. IX POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-07-27) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. IX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-28) (class_ ("III cl."))
+ (title
+ "Rub Feria III. SS Nazarii et Celsi, Mm., Victoris I Papae et Mart. ac Inocentii I Papae et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")) (alt_te_deum ()))
+ ((date 2026-07-29) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Marthae Virg.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-07-30) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. IX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-07-31) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Ignatii Conf.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-01) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-08-02) (class_ ("II cl."))
+ (title "Vir DOM. X POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-08-03) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. X post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-04) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Dominici Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-05) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. In Dedicatione S Mariae ad Nives,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("BMV Et te in Festivitate.")) (alt_te_deum ()))
+ ((date 2026-08-06) (class_ ("II cl."))
+ (title "Alb Feria V. IN TRANSFIGURATIONE D. N. I. C.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("comm. II")) (alt_te_deum ()))
+ ((date 2026-08-07) (class_ ("III cl."))
+ (title "Alb Feria VI. S Caietani Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-08-08) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Ioannis Mariae Vianney Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-08-09) (class_ ("II cl."))
+ (title "Vir DOM. XI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-08-10) (class_ ("II cl."))
+ (title "Rub Feria II. S LAURENTII * MART.,") (te_deum ()) (gloria (true))
+ (credo (false)) (praef ("comm. vel de Martyribus. II")) (alt_te_deum ()))
+ ((date 2026-08-11) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-12) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Clarae Virg.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-13) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-14) (class_ ("II cl."))
+ (title "Viol Feria VI. VIGILIA ASSUMPTIONIS B. MARIAE VIRG.,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef ("comm. I"))
+ (alt_te_deum ()))
+ ((date 2026-08-15) (class_ ("I cl."))
+ (title "Alb Sabb. IN ASSUMPTIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Assumptione. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-08-16) (class_ ("II cl."))
+ (title "Vir DOM. XII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-08-17) (class_ ("III cl."))
+ (title "Alb Feria II. S Hyacinthi Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-18) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-19) (class_ ("III cl."))
+ (title "Alb Feria IV. S Ioannis Eudes Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-20) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Bernardi Abb. et Eccl. Doct.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-08-21) (class_ ("III cl."))
+ (title
+ "Alb Feria VI. S Ioannae Franciscae Fr\195\169miot de Chantal Vid.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-08-22) (class_ ("II cl."))
+ (title "Alb Sabb. IMMACULATI CORDIS B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Festivitate. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-08-23) (class_ ("II cl."))
+ (title "Vir DOM. XIII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-08-24) (class_ ("II cl."))
+ (title "Rub Feria II. S BARTHOLOMAEI * AP.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef (App.)) (alt_te_deum ()))
+ ((date 2026-08-25) (class_ ("III cl."))
+ (title "Alb Feria III. S Ludovici Regis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-26) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. XIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-27) (class_ ("III cl."))
+ (title "Alb Feria V. S Iosephi Calasanctii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-08-28) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Augustini Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-29) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. In Decollatione S Ioannis * Baptistae,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de S Ioanni Baptista \226\128\147")) (alt_te_deum ()))
+ ((date 2026-08-30) (class_ ("II cl."))
+ (title "Vir DOM. XIV POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-08-31) (class_ ("III cl."))
+ (title "Alb Feria II. S Raymundi Nonnati Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-09-01) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XIV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-02) (class_ ("III cl."))
+ (title "Alb Feria IV. S Stephani Regis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-09-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Pii X Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")) (alt_te_deum ()))
+ ((date 2026-09-04) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XIV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-05) (class_ ("III cl."))
+ (title "Alb Sabb. S Laurentii Iustiniani Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")) (alt_te_deum ()))
+ ((date 2026-09-06) (class_ ("II cl."))
+ (title "Vir DOM. XV POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-09-07) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-09-08) (class_ ("II cl."))
+ (title "Alb Feria III. IN NATIVITATE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Nativitate. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-09-09) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. XV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-10) (class_ ("III cl."))
+ (title "Alb Feria V. S Nicolai de Tolentino Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-09-11) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-12) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. Sanctissimi Nominis Mariae,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("BMV Et te in Festivitate. I"))
+ (alt_te_deum ()))
+ ((date 2026-09-13) (class_ ("II cl."))
+ (title "Vir DOM. XVI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-09-14) (class_ ("II cl."))
+ (title "Rub Feria II. IN EXALTATIONE S CRUCIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Sancta Cruce. In Epistola ad verba Ut in nomine Iesu usque ad infernorum inclusive genuflectitur, item in Choro ab omnibus in Missa in cantu. II"))
+ (alt_te_deum ()))
+ ((date 2026-09-15) (class_ ("II cl."))
+ (title "Alb Feria III. SEPTEM DOLORUM B. MARIAE VIRGINIS,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Transfixione. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-09-16) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria IV. SS Cornelis * Papae et Cypriani * Ep., Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")) (alt_te_deum ()))
+ ((date 2026-09-17) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XVI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-18) (class_ ("III cl."))
+ (title "Alb Feria VI. S Iosephi de Cupertino Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-09-19) (class_ ("III cl."))
+ (title "Rub Sabb. SS Ianuarii Ep. et Sociorum Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I"))
+ (alt_te_deum ()))
+ ((date 2026-09-20) (class_ ("II cl."))
+ (title "Vir DOM. XVII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-09-21) (class_ ("II cl."))
+ (title "Rub Feria II. S MATTHAEI * AP. ET EV.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef (App.)) (alt_te_deum ()))
+ ((date 2026-09-22) (class_ ("III cl."))
+ (title "Alb Feria III. S Thomae de Villanova Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-23) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum (false))
+ (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147 Quoad Flectamus genua vide RM 440."))
+ (alt_te_deum ()))
+ ((date 2026-09-24) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XVII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-09-25) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum (false))
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-09-26) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum (false))
+ (gloria (false)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I"))
+ (alt_te_deum ()))
+ ((date 2026-09-27) (class_ ("II cl."))
+ (title "Vir DOM. XVIII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-09-28) (class_ ("III cl."))
+ (title "Rub Feria II. S Wenceslai Ducis Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I"))
+ (alt_te_deum ()))
+ ((date 2026-09-29) (class_ ("I cl."))
+ (title "Alb Feria III. IN DEDICATIONE S MICHA\195\139LIS ARCHANGELI,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("comm. vel de Angelis. II")) (alt_te_deum ()))
+ ((date 2026-09-30) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Hieronymi Presbyteri, Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-10-01) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XVIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-02) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. SS Angelorum Custodum,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. vel de Angelis. Feria VI prima in mense. Vesper\195\166 pr."))
+ (alt_te_deum ()))
+ ((date 2026-10-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Teresiae a Iesu Infante Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. Sabbatum primum in mense. I Vesper\195\166 de seq. dom., ut in Psalt. de sabb, ad Magn. ant. Adaperiat (dom. I octobris), or. pr., sine comm. \226\128\147 Compl. de sabb."))
+ (alt_te_deum ()))
+ ((date 2026-10-04) (class_ ("II cl."))
+ (title "Vir DOM. XIX POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-10-05) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XIX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-06) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Brunonis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo. 100")) (alt_te_deum ()))
+ ((date 2026-10-07) (class_ ("II cl."))
+ (title "Alb Feria IV. B. MARIAE VIRG. A ROSARIO,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Festivitate. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-10-08) (class_ ("III cl."))
+ (title "Alb Feria V. S Birgittae Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-09) (class_ ("III cl."))
+ (title "Alb Feria VI. S Ioannis Leonardi Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-10-10) (class_ ("III cl."))
+ (title "Alb Sabb. S Francisci Borgiae Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. I Vesper\195\166 de seq. dom., ut in Psalt. de sabb, ad Magn. ant. Refulsit sol (dom. II octobris), or. pr., sine comm. \226\128\147 Compl. de sabb."))
+ (alt_te_deum ()))
+ ((date 2026-10-11) (class_ ("II cl."))
+ (title "Vir DOM. XX POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-10-12) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. pr\195\166c."))
+ (alt_te_deum ()))
+ ((date 2026-10-13) (class_ ("III cl."))
+ (title "Alb Feria III. S Eduardis Regis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo.")) (alt_te_deum ()))
+ ((date 2026-10-14) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria IV. S Callisti I Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus. Vesper\195\166 de festo."))
+ (alt_te_deum ()))
+ ((date 2026-10-15) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Teresiae Virg.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-16) (class_ ("III cl."))
+ (title "Alb Feria VI. S Hedwigis Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. Vesper\195\166 de festo."))
+ (alt_te_deum ()))
+ ((date 2026-10-17) (class_ ("III cl."))
+ (title "Alb Sabb. S Margaritae Mariae Alacoque Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. I Vesper\195\166 de seq. dom., ut in Psalt. de sabb, ad Magn. ant. Exaudiat Dominus (dom. IV octobris), or. pr., sine comm. \226\128\147 Compl. de sabb."))
+ (alt_te_deum ()))
+ ((date 2026-10-18) (class_ ("II cl."))
+ (title "Vir DOM. XXI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-10-19) (class_ ("III cl."))
+ (title "Alb Feria II. S Petri de Alcantara Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo.")) (alt_te_deum ()))
+ ((date 2026-10-20) (class_ ("III cl."))
+ (title "Alb Feria III. S Ioannis Cantii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo.")) (alt_te_deum ()))
+ ((date 2026-10-21) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. XXI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-22) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. pr\195\166c."))
+ (alt_te_deum ()))
+ ((date 2026-10-23) (class_ ("III cl."))
+ (title "Alb Feria VI. S Antonii Mariae Claret Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-24) (class_ ("III cl."))
+ (title "Alb Sabb. S Rapha\195\171lis Archangeli,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. vel de Angelis. I Vesper\195\166 de seq., sine comm. \226\128\147 Compl. de dom. 104"))
+ (alt_te_deum ()))
+ ((date 2026-10-25) (class_ ("I cl."))
+ (title "Alb Dom. DOMINI NOSTRI JESU CHRISTI REGIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Domino Nostro Jesu Rege. Hodie, in omnibus ecclesiis, coram Ss.mo Sacramento exposito, recitetur formula consecrationis generis humani Christo Regi, cum Litaniis de eodem Sacro Corde. II Vesper\195\166 pr. Hodie prohibentur omnes Missae defunctorum, etiam exsequialis."))
+ (alt_te_deum ()))
+ ((date 2026-10-26) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-10-27) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria, or. dom. XXII post Pent."))
+ (alt_te_deum ()))
+ ((date 2026-10-28) (class_ ("II cl."))
+ (title "Rub Feria IV. SS SIMONIS * ET IUD\195\134 * APP.,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("App. In Canone Miss\195\166, nomen S. Apostoli Iud\195\166 inscribitur cum nomine Thadd\195\166i: ergo inclinatur caput quando dicitur Thadd\195\166i. Vesper\195\166 de Comm. \226\128\147 Compl. de dom. Hodie permittuntur tantum Missae votivae et defunctorum I et II classis."))
+ (alt_te_deum ()))
+ ((date 2026-10-29) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. XXII post Pent."))
+ (alt_te_deum ()))
+ ((date 2026-10-30) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. XXII post Pent."))
+ (alt_te_deum ()))
+ ((date 2026-10-31) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("BMV Et te in Veneratione. I Vesper\195\166 de seq. \226\128\147 Compl. de dom. 106"))
+ (alt_te_deum ()))
+ ((date 2026-11-01) (class_ ("I cl.")) (title "Alb Dom. OMNIUM SANCTORUM,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("Trinit. vel de Omnibus Sanctis et Patronis. II"))
+ (alt_te_deum ()))
+ ((date 2026-11-02) (class_ ("I cl."))
+ (title "Nig Feria II. IN COMMEMORATIONE OMNIUM FIDELIUM DEFUNCTORUM,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef
+ ("defunctorum, unica or. \226\128\147 Benedictio non dicitur. \226\128\147 Si tres Miss\195\166 celebrantur sine intermissione, sequentia dici debet tantum in Missa principali; si minus, dici debet in Missa prima. In aliis Missis, nisi sint in cantu, sequentia omitti potest."))
+ (alt_te_deum ()))
+ ((date 2026-11-03) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XXIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-11-04) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Caroli Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-11-05) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-06) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")) (alt_te_deum ()))
+ ((date 2026-11-07) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef ("BMV Et te in Veneratione. Sabbatum primum in mense. I"))
+ (alt_te_deum ()))
+ ((date 2026-11-08) (class_ ("II cl."))
+ (title "Vir DOM. V QUI SUPERFUIT POST EPIPHANIAM, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef
+ ("Trinit. Dicitur Missa qu\195\166 inscribitur \194\171Dominica. V qui superfuit post Epiphaniam\194\187. Antiphonae ad Introitum, ad Offertorium et ad Communionem, necnon graduale et Alleluia cum suo versu, sumuntur e Dom. XXIII post Pent.; orationes, Epistola et Evangelium, e Dom. V qui superfuit post Epiphaniam. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-11-09) (class_ ("II cl."))
+ (title
+ "Alb Feria II. IN DEDICATIONE ARCHIBASILICAE SANCTISSIMI SALVATORIS,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("comm. vel de Dedicatione ecclesi\195\166.")) (alt_te_deum ()))
+ ((date 2026-11-10) (class_ ("III cl."))
+ (title "Alb Feria III. S Andreae Avellini Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147"))
+ (alt_te_deum ()))
+ ((date 2026-11-11) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Martini Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-11-12) (class_ ("III cl."))
+ (title "Rub Feria V. S Martini I Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-11-13) (class_ ("III cl."))
+ (title "Alb Feria VI. S Didaci Conf.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-14) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. S Iosaphat Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-15) (class_ ("II cl."))
+ (title "Vir DOM. VI QUI SUPERFUIT POST EPIPHANIAM, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef
+ ("Trinit. Dicitur Missa qu\195\166 inscribitur \194\171Dominica. VI qui superfuit post Epiphaniam\194\187. Antiphonae ad Introitum, ad Offertorium et ad Communionem, necnon graduale et Alleluia cum suo versu, sumuntur e Dom. XXIII post Pent.; orationes, Epistola et Evangelium, e Dom. VI qui superfuit post Epiphaniam. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-11-16) (class_ ("III cl."))
+ (title "Alb Feria II. S Gertrudis Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-11-17) (class_ ("III cl."))
+ (title "Alb Feria III. S Gregorii Thaumaturgi Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-11-18) (class_ ("III cl. (Priv.)"))
+ (title
+ "Alb Feria IV. In Dedicatione Basilicarum SS Petri et Pauli App.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Dedicatione ecclesi\195\166.")) (alt_te_deum ()))
+ ((date 2026-11-19) (class_ ("III cl."))
+ (title "Alb Feria V. S Elisabeth Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-20) (class_ ("III cl."))
+ (title "Alb Feria VI. S Felicis de Valois Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-11-21) (class_ ("III cl."))
+ (title "Alb Sabb. In Praesentatione B. Mariae Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("BMV Et te in Pr\195\166sentatione. I")) (alt_te_deum ()))
+ ((date 2026-11-22) (class_ ("II cl."))
+ (title "Vir DOM. XXIV & ULTIMA POST PENTECOSTEN, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-11-23) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria II. S Clementis I * Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-11-24) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Ioannis a Cruce Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-25) (class_ ("III cl."))
+ (title "Rub Feria IV. S Catharinae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus."))
+ (alt_te_deum ()))
+ ((date 2026-11-26) (class_ ("III cl."))
+ (title "Alb Feria V. S Silvestri Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-27) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXIV & Ultima post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-11-28) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione. I")) (alt_te_deum ()))
+ ((date 2026-11-29) (class_ ("I cl."))
+ (title "Viol DOM. I ADVENTUS, De ea,") (te_deum (false)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")) (alt_te_deum ()))
+ ((date 2026-11-30) (class_ ("II cl."))
+ (title "Rub Feria II. S ANDREAE * APOSTOLI,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")) (alt_te_deum ()))
+ ((date 2026-12-01) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. I Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-12-02) (class_ ("III cl."))
+ (title "Rub Feria IV. S Bibianae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-12-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Francisci Xavierii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")) (alt_te_deum ()))
+ ((date 2026-12-04) (class_ ("III cl."))
+ (title "Alb Feria VI. S Petri Chrysologi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-12-05) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. I Adventus, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")) (alt_te_deum ()))
+ ((date 2026-12-06) (class_ ("I cl."))
+ (title "Viol DOM. II ADVENTUS, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-12-07) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria II. S Ambrosii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")) (alt_te_deum ()))
+ ((date 2026-12-08) (class_ ("I cl."))
+ (title "Alb Feria III. IN CONCEPTIONE IMMACULATA B. MARIAE VIRGINIS,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("BMV Et te in Conceptione Immaculata. Ad")) (alt_te_deum ()))
+ ((date 2026-12-09) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-12-10) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-12-11) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Damasi I Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")) (alt_te_deum ()))
+ ((date 2026-12-12) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. II Adventus, De eo,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("comm. I")) (alt_te_deum ()))
+ ((date 2026-12-13) (class_ ("I cl."))
+ (title "DOM. III ADVENTUS (GAUDETE), De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-12-14) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. III Adventus (Gaudete), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-12-15) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. III Adventus (Gaudete), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-12-16) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147 Quoad Flectamus genua vide RM 440."))
+ (alt_te_deum ()))
+ ((date 2026-12-17) (class_ ("II cl."))
+ (title "Viol FERIA V POST DOM. III ADVENTUS (GAUDETE), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.))
+ (alt_te_deum ()))
+ ((date 2026-12-18) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-12-19) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I"))
+ (alt_te_deum ()))
+ ((date 2026-12-20) (class_ ("I cl."))
+ (title "Viol DOM. IV ADVENTUS, De ea,") (te_deum (false))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-12-21) (class_ ("II cl."))
+ (title "Rub Feria II. S THOM\195\134 * APOSTOLI,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")) (alt_te_deum ()))
+ ((date 2026-12-22) (class_ ("II cl."))
+ (title "Viol FERIA III POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-12-23) (class_ ("II cl."))
+ (title "Viol FERIA IV POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)) (alt_te_deum ()))
+ ((date 2026-12-24) (class_ ("I cl."))
+ (title "Viol Feria V. VIGILIA NATIVITATIS DOMINI,") (te_deum (false))
+ (gloria (false)) (credo (false)) (praef ("comm. I")) (alt_te_deum ()))
+ ((date 2026-12-25) (class_ ("I cl."))
+ (title "Alb Feria VI. IN NATIVITATE DOMINI,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("et Communic. pr. per totam oct. \226\128\147 In Communicantes: in 1\194\170 Missa dicitur Noctem sacratissimam celebrantes, qua, in 2\194\170 et 3\194\170 Missa et per octavam Diem sacratissimum celebrantes, quo. \226\128\147 In 2\194\170 Missa (etiam in cantu) fit comm. S. Anastasi\195\166 * M. \226\128\147 In Missis in cantu, ad verba symboli Et incarnatus est\226\128\166 et homo factus est, omnes genuflectunt versus altare, non tantum cum a celebrante recitantur, sed etiam cum a choro canuntur (RM 518 b). II"))
+ (alt_te_deum ()))
+ ((date 2026-12-26) (class_ ("II cl."))
+ (title "Rub Sabb. S STEPHANI * PROTOMARTYRIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-12-27) (class_ ("II cl."))
+ (title "Alb DOM. INFRA OCTAVAM NATIVITATIS, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad II"))
+ (alt_te_deum ()))
+ ((date 2026-12-28) (class_ ("II cl."))
+ (title "Rub Feria II. SS INNOCENTIUM MM.,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad"))
+ (alt_te_deum ()))
+ ((date 2026-12-29) (class_ ("II cl."))
+ (title "Alb FERIA III DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum."))
+ (alt_te_deum ()))
+ ((date 2026-12-30) (class_ ("II cl."))
+ (title "Alb FERIA IV DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum."))
+ (alt_te_deum ()))
+ ((date 2026-12-31) (class_ ())
+ (title
+ "Alb FERIA V DOM. INFRA OCTAVAM NATIVITATIS, De ea. \226\128\147 Off. semifestivum. \226\128\147 Ad MAT. invit., hymnus, 9 antt. et 9 pss. cum ultimo V de festo Nativ., Ll. de Scr. occ. cum suis RR (ad 2um additur Gloria Patri)\226\128\147 Ad Laudes antt. de Nativ., pss. de dom., comm. S Silvestri I Papae et Conf. \226\128\147 Ad HORAS ant. et pss. de feria curr., rel ut in festo Nativ. \226\128\147 Ad Primam in R Br. V Qui natus es de Maria Virgine. Missa Puer natus de diebus infra octavam, Gloria, Credo, comm. S Silvestri I Papae et Conf., praef. de Nativ., Communic. de Nativ. diem sacratissimum. I VESPER\195\134 de seq. \226\128\147 Compl. de dom. Hodie ad solemnem recitationem hymni Te Deum, indulgentia plenaria lucrari potest. 126")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. I"))
+ (alt_te_deum ())))
diff --git a/test/fixtures/lms-ordo-2023-2024.sexp b/test/fixtures/lms-ordo-2023-2024.sexp
new file mode 100644
index 0000000..c2ee62d
--- /dev/null
+++ b/test/fixtures/lms-ordo-2023-2024.sexp
@@ -0,0 +1,1692 @@
+; /tmp/lms-ordo-2023-2024.sexp -- Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1),
+; extending Task 6's single LMS fixture (2024-2025) to three editions of
+; the Latin Mass Society's own printed Ordo for England & Wales -- a
+; lineage independent of Divinum Officium/missalemeum/lectio (layers 3-4)
+; and of the electronic LT.txt transcription (layers 1-2/5): a physically
+; printed, professionally-compiled liturgical calendar with its own ISBN.
+;
+; Generator: tools/extract_lms_ordo.ml -- do not hand-edit; re-run against
+; a fresh pdftotext dump and commit the diff instead.
+;
+; Source: "The Ordo 2023-2024", compiled by Peter Day-Milne, The Latin
+; Mass Society, 9 Mallow Street, London EC1Y 8RQ (title page and
+; colophon, verified directly against the PDF's own extracted text --
+; ISBN 978-1-7392096-2-9, Copyright (c) The Latin Mass Society, UK 2023).
+; PDF metadata: Author "Peter Day-Milne", Producer "LibreOffice 6.4", CreationDate 2023-11-01, 140 pages.
+; URL (identified 2026-08-22 via web search matching the PDF's own edition year to the publisher's own hosting path; NOT independently re-downloaded and byte-compared in this session -- recorded honestly rather than presented as verified):
+; https://lms.org.uk/sites/default/files/u5374/ordo_2023-2024_2.2_final.pdf
+; The local PDF (docs/research/ordo/lms-ordo-2023-2024.pdf) is gitignored
+; (CLAUDE.md: "docs/ is gitignored"), so this header, not git, is this
+; fixture's only record of where it came from.
+; SHA-256 of docs/research/ordo/lms-ordo-2023-2024.pdf: 805a021bab246212c09a91706a04f4834fba052104de091b2fc5ed77c455bbba
+; Extracted (UTC): 2026-08-23
+; Exact commands:
+; pdftotext -layout docs/research/ordo/lms-ordo-2023-2024.pdf /tmp/lms.txt
+; dune exec tools/extract_lms_ordo.exe -- /tmp/lms.txt \
+; docs/research/ordo/lms-ordo-2023-2024.pdf /tmp/lms-ordo-2023-2024.sexp
+;
+; COVERAGE: 397 day-rows, 2023-12-01 through 2024-12-31 (starting 1 December 2023 (this edition carries NO "End of November" stub section at all -- Advent Sunday 2023 fell on 3 December, so only 2 tail days of the prior liturgical year remained, and the compiler folded them directly into the "December 2023" header instead of giving them their own mini-section; see CHARACTERISATION below),
+; through the day before a malformed trailing entry the extractor
+; deliberately stops before -- see CHARACTERISATION below).
+;
+; CHARACTERISATION FINDINGS (Step 1, non-negotiable per the task brief --
+; the extraordinaryform.org Ordo silently omitted St Lawrence's vigil on
+; EVERY date it covered, which nearly produced a false corroboration
+; during the RG 33 work; every LMS edition, including this one, is probed
+; with the same discipline before a single divergence is adjudicated):
+;
+; 1. Gl/Cr are printed PER MASS-OPTION, not per day (confirmed again for
+; THIS edition: it carries many more Gl/Cr pairs than day-rows, because
+; every diocesan variant repeats its own "Gl ... Cr ... Pr of ..."
+; line). This extractor resolves the day's OWN office by taking the
+; FIRST Gl/Cr pair in reading order, which the source's own layout
+; guarantees is the universal entry's (diocesan variants are always
+; introduced by a colon-terminated diocese-list line that comes AFTER
+; the universal block, never before -- checked structurally, not
+; assumed, in every sampled block during development, this edition
+; included).
+;
+; 2. OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.creed (RG
+; 475-476), RE-CHECKED BY THIS TOOL RUN (not merely copied from a prior
+; edition's findings) before a single row of this fixture is trusted --
+; the technique CLAUDE.md records as the one that catches a source
+; silently omitting the very thing it is meant to witness. This run's
+; own extracted [rows] were checked against every one of the following
+; before this header was even written; a failure here is a hard [die],
+; not a printed claim:
+; 2023-12-03 (Advent Sunday, RG 475(a)) -> TRUE
+; 2023-12-04 (St Peter Chrysologus, III class, ordinary Advent day, RG 476(b)/(d)) -> FALSE
+; 2023-12-26 (St Stephen, II class, inside the Nativity octave, RG 475(d)) -> TRUE
+; 2024-08-15 (the Assumption, I class, RG 475(b)) -> TRUE
+; 2024-08-16 (St Joachim, II class, no Lord/BVM/apostle clause applies, RG 476(b)) -> FALSE
+; All 5 predictions confirmed, both directions (TRUE and FALSE each
+; independently witnessed) -- this edition is discriminating, not a
+; constant, on the Creed.
+;
+; 3. The BVM-Saturday roman numeral (I-V, "Missae de sancta Maria in
+; sabbato", RG 309(a)) is anchored by WHOLE-LINE match against the five
+; literal strings below, NEVER by substring search: "V Mass of BVM" is
+; a substring of "IV Mass of BVM", so a naive `contains` check
+; misreads every fourth-Mass day as the fifth (the coordinator's own
+; misreading, recorded and retracted in commit 27b07b4 before Task 6
+; existed; the same anchoring logic runs unchanged for every edition).
+;
+; 4. SCOPE EXCLUDED, quantified, not silently dropped:
+; - Diocesan variants: present on 159 of 397 days (40.1%) -- their own
+; text is read only far enough to set [has_diocesan_variant],
+; never compared, because colitur computes the UNIVERSAL General
+; Roman Calendar only, with no diocesan overlay loaded.
+; - The single malformed trailing entry ("...The OCTAVE DAY of the
+; NATIVITY..." with a bare 4-digit token where a weekday+day-number
+; pair belongs) is excluded outright: the extractor's own stop
+; marker (a line whose first token is a bare 4-digit token) halts
+; the scan before it. CONFIRMED IDENTICAL, word for word, across
+; ALL FOUR known editions of this publisher's Ordo (2023-2024,
+; 2024-2025, 2025-2026, and the 2024-2025 fixture's own prior
+; header) -- always the literal stray year token "2025", regardless
+; of which edition or which real trailing year it should read: a
+; stale copy-paste leftover the compiler's own master document
+; carries forward unedited release to release (even the 2024-2025
+; PDF's own tail page footer nearby still reads "Latin Mass Society
+; Ordo 2021-2022"), not something specific to this edition.
+; - Front matter, the Abbreviations/Rubrical-Primer/Breviary sections,
+; and the "When may I say...?"/Appendix tail are never scanned at
+; all (the extractor's own start/stop markers bound it to the Ordo
+; proper).
+;
+; 5. THE "Pr of" (PREFACE) COLUMN (Preface-witnesses task, 2026-08-23) --
+; [row.praef], the RAW text from the FIRST "Pr of ..." / "Common Pr"
+; match in the universal block's own reading order (the same
+; FIRST-in-reading-order discipline finding 1 above already
+; establishes for Gl/Cr). CAPTURED, NOT CLASSIFIED by this tool --
+; classification into {!Colitur_kernel.Preface.t} and the comparison
+; against {!Rite_ef.Rubrics_ef.preface} both happen test-side
+; (test/test_lms_ordo.ml's own [classify_praef]).
+;
+; CHARACTERISATION FINDING, non-negotiable per the same discipline as
+; finding 2: this Ordo prints OPTION LISTS ("Pr of X or Pr of Y or
+; Common Pr"), not always a single value -- and several of the named
+; options ("Martyrs", "All Saints and Patron Saints" [diocesan-only,
+; every occurrence checked falls strictly after this block's own
+; colon boundary], "the Dedication of a Church", "the Most Holy
+; Sacrament" [Corpus Christi's own universal entry], "St John the
+; Baptist", "the Angels") are genuinely NOT among the fourteen the
+; 1962 Missale Romanum's own RG 484-497 enumerate (docs/research/LT.txt,
+; lines 3936-4020, checked directly: no "de Martyribus"/"de Angelis"/
+; "de Dedicatione"/"de Ss.mo Sacramento"/"de S. Ioanne Baptista" clause
+; exists anywhere in 482-499). Every one of these extras, in every
+; instance found in this edition's UNIVERSAL block, is printed
+; ALONGSIDE a genuine RG 482 answer (most often "or Common Pr"; on 24
+; March-shaped days, "or Pr of Lent", the live RG 486(b) de-Tempore
+; answer) -- never as the row's OWN AND ONLY option. This is why the
+; test-side comparison checks colitur's single computed answer is a
+; MEMBER of this row's own parsed option set (dropping any unmapped
+; extra name from that set first), not string equality against
+; whichever option happens to print first -- the same "capture, don't
+; force a match invented at extraction time" discipline
+; tools/extract_fiuv_ordo.ml's own [row.praef] doc comment already
+; states for a different publisher's format.
+;
+; OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.preface (RG
+; 482-499), the SAME discipline as finding 2, applied to this new
+; column -- RE-CHECKED BY THIS TOOL RUN before this header was
+; written; a failed probe is a hard [die]:
+; 2023-12-25 (the Nativity of Our Lord, I class, RG 484(a)) -> "Pr of the Nativity"
+; 2024-06-29 (SS Peter & Paul, I class, RG 497) -> "Pr of the Apostles"
+; 2024-11-02 (All Souls' Day, I class, RG 499) -> "Pr of the Dead"
+; All 3 predictions confirmed -- this column, too, is discriminating,
+; not a constant, across three different RG-cited outcomes (Nativity/
+; Apostles/Requiem).
+;
+; COVERAGE: 1 of 397 rows have no "Pr of"/"Common Pr" text found at
+; all -- checked directly against this window's own Good Friday
+; (Easter-2): its block carries NO Gl/Cr/Pr line whatsoever in this
+; source (the 1955-restored Holy Week's own liturgical action has no
+; Mass that day at all -- the SAME structural fact
+; {!test_creed_coverage}'s own [window_good_fridays] already asserts
+; for Gl/Cr), so [praef] shares that single expected gap rather than
+; having a coverage gap of its own.
+(((date 2023-12-01) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2023-12-02) (weekday Sat)
+ (title "St BIBIANA V M III Cl R # IH JCHP") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2023-12-03) (weekday Sun) (title "ADVENT SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2023-12-04) (weekday Mon)
+ (title "St PETER CHRYSOLOGUS B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2023-12-05) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2023-12-06) (weekday Wed) (title "St NICOLAS B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2023-12-07) (weekday Thu)
+ (title "St AMBROSE B C D III Cl (Priv.) W JCHP*") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-08) (weekday Fri)
+ (title "The IMMACULATE CONCEPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant true))
+ ((date 2023-12-09) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2023-12-10) (weekday Sun) (title "2nd SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2023-12-11) (weekday Mon)
+ (title "St DAMASUS I P C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2023-12-12) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-13) (weekday Wed) (title "St LUCY V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2023-12-14) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-15) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-16) (weekday Sat) (title "St EUSEBIUS B M III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2023-12-17) (weekday Sun)
+ (title "3rd SUNDAY of ADVENT (GAUDETE SUNDAY) I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2023-12-18) (weekday Mon) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-19) (weekday Tue) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-20) (weekday Wed)
+ (title "EMBER WEDNESDAY of ADVENT II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2023-12-21) (weekday Thu) (title "St THOMAS \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2023-12-22) (weekday Fri) (title "EMBER FRIDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2023-12-23) (weekday Sat) (title "EMBER SATURDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2023-12-24) (weekday Sun)
+ (title "VIGIL of The NATIVITY of OUR LORD I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2023-12-25) (weekday Mon) (title "The NATIVITY of OUR LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of the Nativity Proper Communic at Midnight noctem sacratissimam at"))
+ (has_diocesan_variant false))
+ ((date 2023-12-26) (weekday Tue)
+ (title "St STEPHEN \194\167 Protomartyr II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2023-12-27) (weekday Wed)
+ (title "St JOHN \194\167 Ap Evangelist II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2023-12-28) (weekday Thu) (title "The HOLY INNOCENTS MM II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2023-12-29) (weekday Fri)
+ (title "5th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2023-12-30) (weekday Sat)
+ (title "6th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2023-12-31) (weekday Sun)
+ (title "SUNDAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-01-01) (weekday Mon)
+ (title "The OCTAVE DAY of the NATIVITY of the LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-01-02) (weekday Tue)
+ (title "The MOST HOLY NAME of JESUS II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2024-01-03) (weekday Wed) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant true))
+ ((date 2024-01-04) (weekday Thu) (title "FERIA IV Cl W \226\128\160 JCHP")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2024-01-05) (weekday Fri) (title "FERIA IV Cl W \226\128\160 SH")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2024-01-06) (weekday Sat) (title "The EPIPHANY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany Proper Communic"))
+ (has_diocesan_variant false))
+ ((date 2024-01-07) (weekday Sun)
+ (title "The HOLY FAMILY of JESUS, MARY AND JOSEPH II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant true))
+ ((date 2024-01-08) (weekday Mon) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of 1st Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2024-01-09) (weekday Tue) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of 1st Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2024-01-10) (weekday Wed) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of 1st Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2024-01-11) (weekday Thu) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of 1st Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2024-01-12) (weekday Fri) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of 1st Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant true))
+ ((date 2024-01-13) (weekday Sat) (title "The BAPTISM of OUR LORD II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2024-01-14) (weekday Sun)
+ (title "2nd SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-01-15) (weekday Mon)
+ (title "St PAUL the FIRST HERMIT C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-01-16) (weekday Tue) (title "St MARCELLUS I P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-01-17) (weekday Wed) (title "St ANTHONY Ab III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-18) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-01-19) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-01-20) (weekday Sat)
+ (title "SS FABIAN P & SEBASTIAN M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-21) (weekday Sun)
+ (title "3rd SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-01-22) (weekday Mon)
+ (title "SS VINCENT & ANASTASIUS MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-23) (weekday Tue)
+ (title "St RAYMUND of PENAFORT C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-01-24) (weekday Wed) (title "St TIMOTHY B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-25) (weekday Thu)
+ (title "The CONVERSION of St PAUL \194\167 Ap III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-01-26) (weekday Fri) (title "St POLYCARP B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-27) (weekday Sat)
+ (title "St JOHN CHRYSOSTOM B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-28) (weekday Sun) (title "SEPTUAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-01-29) (weekday Mon)
+ (title "St FRANCIS de SALES B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-30) (weekday Tue) (title "St MARTINA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-01-31) (weekday Wed) (title "St JOHN BOSCO C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-02-01) (weekday Thu)
+ (title "St IGNATIUS \194\167 B M III Cl (Priv.) R JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-02-02) (weekday Fri)
+ (title "The PURIFICATION of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2024-02-03) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2024-02-04) (weekday Sun) (title "SEXAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-02-05) (weekday Mon)
+ (title "St AGATHA \194\167 V M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-02-06) (weekday Tue) (title "St TITUS B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-02-07) (weekday Wed) (title "St ROMUALD Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-02-08) (weekday Thu) (title "St JOHN of MATHA C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-02-09) (weekday Fri)
+ (title "St CYRIL of ALEXANDRIA B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-02-10) (weekday Sat) (title "St SCHOLASTICA V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-02-11) (weekday Sun) (title "QUINQUAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-02-12) (weekday Mon)
+ (title "The SEVEN HOLY FOUNDERS of the ORDER of the SERVANTS of the")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-02-13) (weekday Tue) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Quinquagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-02-14) (weekday Wed) (title "ASH WEDNESDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-15) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-16) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-02-17) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-02-18) (weekday Sun) (title "1st SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2024-02-19) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-20) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-21) (weekday Wed) (title "EMBER WEDNESDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-22) (weekday Thu)
+ (title "The CHAIR of St PETER \194\167 Ap II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-02-23) (weekday Fri) (title "EMBER FRIDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-02-24) (weekday Sat) (title "EMBER SATURDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-25) (weekday Sun) (title "2nd SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2024-02-26) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-27) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-02-28) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-02-29) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-01) (weekday Fri) (title "FERIA III Cl V SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-02) (weekday Sat) (title "FERIA III Cl V IH JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-03) (weekday Sun) (title "3rd SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2024-03-04) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-05) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-06) (weekday Wed)
+ (title "SS PERPETUA \194\167 & FELICITY \194\167 MM III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Lent")) (has_diocesan_variant false))
+ ((date 2024-03-07) (weekday Thu)
+ (title "St THOMAS AQUINAS C D III Cl (Priv.) W JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2024-03-08) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-09) (weekday Sat)
+ (title "St FRANCES of ROME W III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Lent"))
+ (has_diocesan_variant false))
+ ((date 2024-03-10) (weekday Sun) (title "4th SUNDAY in LENT I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2024-03-11) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-12) (weekday Tue)
+ (title "St GREGORY I P C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Lent"))
+ (has_diocesan_variant true))
+ ((date 2024-03-13) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-14) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-15) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-16) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-17) (weekday Sun) (title "PASSION SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2024-03-18) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-19) (weekday Tue)
+ (title "St JOSEPH \194\167 SPOUSE of the BVM C, PATRON of the UNIVERSAL")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St Joseph Et te in festivitate"))
+ (has_diocesan_variant false))
+ ((date 2024-03-20) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2024-03-21) (weekday Thu) (title "St BENEDICT Ab III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2024-03-22) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-23) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-24) (weekday Sun) (title "PALM SUNDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2024-03-25) (weekday Mon) (title "MONDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-26) (weekday Tue) (title "TUESDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-27) (weekday Wed) (title "WEDNESDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2024-03-28) (weekday Thu) (title "MAUNDY THURSDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Holy Cross. No Judica No Gloria Patri at"))
+ (has_diocesan_variant false))
+ ((date 2024-03-29) (weekday Fri) (title "GOOD FRIDAY I Cl B")
+ (formulary_override ()) (bvm_numeral ()) (gloria ()) (creed ())
+ (praef ()) (has_diocesan_variant false))
+ ((date 2024-03-30) (weekday Sat) (title "HOLY SATURDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter (in hac potissimum nocte)."))
+ (has_diocesan_variant false))
+ ((date 2024-03-31) (weekday Sun) (title "EASTER I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter (die) Proper Communic Proper Hanc igitur"))
+ (has_diocesan_variant false))
+ ((date 2024-04-01) (weekday Mon) (title "EASTER MONDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2024-04-02) (weekday Tue) (title "EASTER TUESDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2024-04-03) (weekday Wed) (title "EASTER WEDNESDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2024-04-04) (weekday Thu) (title "EASTER THURSDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2024-04-05) (weekday Fri) (title "EASTER FRIDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2024-04-06) (weekday Sat)
+ (title "EASTER SATURDAY (SABBATO in ALBIS) I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2024-04-07) (weekday Sun) (title "LOW SUNDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-04-08) (weekday Mon)
+ (title "The ANNUNCIATION of the BVM I Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Annuntiatione"))
+ (has_diocesan_variant true))
+ ((date 2024-04-09) (weekday Tue) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of Low Sunday")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2024-04-10) (weekday Wed) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of Low Sunday")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2024-04-11) (weekday Thu) (title "St LEO P C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-04-12) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of Low Sunday")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2024-04-13) (weekday Sat) (title "St HERMENEGILD M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-04-14) (weekday Sun) (title "2nd SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-04-15) (weekday Mon) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2024-04-16) (weekday Tue) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2024-04-17) (weekday Wed) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2024-04-18) (weekday Thu) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2024-04-19) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2024-04-20) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("IV Mass of BVM")) (bvm_numeral (IV))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2024-04-21) (weekday Sun) (title "3rd SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-04-22) (weekday Mon)
+ (title "SS SOTER & CAIUS PP MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-04-23) (weekday Tue) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 3rd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2024-04-24) (weekday Wed)
+ (title "St FIDELIS of SIGMARINGEN M III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-04-25) (weekday Thu)
+ (title "THE GREATER LITANIES. St MARK Evangelist II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2024-04-26) (weekday Fri)
+ (title "St CLETUS & MARCELLINUS PP MM III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-04-27) (weekday Sat) (title "St PETER CANISIUS C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-04-28) (weekday Sun) (title "4th SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-04-29) (weekday Mon) (title "St PETER M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-04-30) (weekday Tue)
+ (title "St CATHERINE of SIENNA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-05-01) (weekday Wed)
+ (title "St JOSEPH \194\167 the WORKER, SPOUSE of the BVM C I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St Joseph Et te in solemnitate"))
+ (has_diocesan_variant false))
+ ((date 2024-05-02) (weekday Thu)
+ (title "St ATHANASIUS B C D III Cl (Priv.) W JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2024-05-03) (weekday Fri) (title "FERIA IV Cl W \226\128\161 SH")
+ (formulary_override ("Mass of 4th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2024-05-04) (weekday Sat)
+ (title "St MONICA W III Cl (Priv.) W IH JCHP*") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2024-05-05) (weekday Sun) (title "5th SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-05-06) (weekday Mon) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 5th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2024-05-07) (weekday Tue) (title "St STANISLAUS B M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-05-08) (weekday Wed) (title "VIGIL of The ASCENSION II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2024-05-09) (weekday Thu) (title "The ASCENSION I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Ascension Proper Communic"))
+ (has_diocesan_variant false))
+ ((date 2024-05-10) (weekday Fri) (title "St ANTONINUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant false))
+ ((date 2024-05-11) (weekday Sat)
+ (title "SS PHILIP \194\167 & JAMES \194\167 App II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-05-12) (weekday Sun)
+ (title "SUNDAY after the ASCENSION II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant false))
+ ((date 2024-05-13) (weekday Mon)
+ (title "St ROBERT BELLARMINE B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2024-05-14) (weekday Tue) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of the Ascension")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Ascension"))
+ (has_diocesan_variant true))
+ ((date 2024-05-15) (weekday Wed)
+ (title "St JOHN BAPTIST de la SALLE C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant false))
+ ((date 2024-05-16) (weekday Thu) (title "St UBALDUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2024-05-17) (weekday Fri) (title "St PASCHAL BAYLON C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant false))
+ ((date 2024-05-18) (weekday Sat) (title "VIGIL of PENTECOST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef
+ ("Pr of the Holy Spirit hodierna die Proper Communic Proper Hanc igitur"))
+ (has_diocesan_variant false))
+ ((date 2024-05-19) (weekday Sun) (title "PENTECOST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-20) (weekday Mon) (title "WHIT MONDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-21) (weekday Tue) (title "WHIT TUESDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-22) (weekday Wed)
+ (title "WHIT WEDNESDAY (EMBER DAY) I Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-23) (weekday Thu) (title "WHIT THURSDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-24) (weekday Fri) (title "WHIT FRIDAY (EMBER DAY) I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-25) (weekday Sat) (title "WHIT SATURDAY (EMBER DAY) I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2024-05-26) (weekday Sun) (title "The MOST HOLY TRINITY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-05-27) (weekday Mon)
+ (title "St BEDE the VENERABLE C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-05-28) (weekday Tue) (title "St AUGUSTINE B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-05-29) (weekday Wed)
+ (title "St MARY MAGDALEN dei PAZZI V III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-05-30) (weekday Thu) (title "CORPUS CHRISTI I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Most Holy Sacrament or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-05-31) (weekday Fri)
+ (title "The BLESSED VIRGIN MARY, QUEEN II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2024-06-01) (weekday Sat)
+ (title "St ANGELA MERICI V III Cl W # IH JCHP") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-02) (weekday Sun)
+ (title "2nd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-06-03) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-06-04) (weekday Tue)
+ (title "St FRANCIS CARACCIOLO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-05) (weekday Wed) (title "St BONIFACE B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-06) (weekday Thu) (title "St NORBERT B C III Cl W # JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-06-07) (weekday Fri) (title "The SACRED HEART of JESUS I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Sacred Heart")) (has_diocesan_variant false))
+ ((date 2024-06-08) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2024-06-09) (weekday Sun)
+ (title "3rd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-06-10) (weekday Mon) (title "St MARGARET Q W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-06-11) (weekday Tue) (title "St BARNABAS Ap III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-06-12) (weekday Wed)
+ (title "St JOHN of SAN FACONDO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-06-13) (weekday Thu)
+ (title "St ANTHONY of PADUA C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-14) (weekday Fri)
+ (title "St BASIL the GREAT B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-15) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2024-06-16) (weekday Sun)
+ (title "4th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-06-17) (weekday Mon)
+ (title "St GREGORY BARBARIGO B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-18) (weekday Tue)
+ (title "St EPHREM the SYRIAN Deacon C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-06-19) (weekday Wed)
+ (title "St JULIANA FALCONIERI V III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-20) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-21) (weekday Fri)
+ (title "St ALOYSIUS GONZAGA C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-22) (weekday Sat) (title "St PAULINUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-23) (weekday Sun)
+ (title "5th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-06-24) (weekday Mon)
+ (title "The NATIVITY of JOHN the BAPTIST \194\167 I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St John the Baptist or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-06-25) (weekday Tue) (title "St WILLIAM Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-26) (weekday Wed)
+ (title "SS JOHN & PAUL \194\167 MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-27) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 5th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-06-28) (weekday Fri)
+ (title "VIGIL of SS PETER \194\167 & PAUL \194\167 App II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-06-29) (weekday Sat)
+ (title "SS PETER \194\167 & PAUL \194\167 App I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2024-06-30) (weekday Sun)
+ (title "6th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-07-01) (weekday Mon)
+ (title "The MOST PRECIOUS BLOOD of OUR LORD JESUS CHRIST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2024-07-02) (weekday Tue)
+ (title "The VISITATION of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Visitatione"))
+ (has_diocesan_variant false))
+ ((date 2024-07-03) (weekday Wed) (title "St IRENAEUS B M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-07-04) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 6th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-05) (weekday Fri)
+ (title "St ANTHONY MARY ZACCARIA C III Cl W # SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-07-06) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2024-07-07) (weekday Sun)
+ (title "7th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-07-08) (weekday Mon) (title "St ELIZABETH Q W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-07-09) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-10) (weekday Wed)
+ (title "The SEVEN HOLY BROTHERS MM & SS RUFINA & SECUNDA VV MM III")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-07-11) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-12) (weekday Fri) (title "St JOHN GUALBERTI Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-07-13) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2024-07-14) (weekday Sun)
+ (title "8th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-07-15) (weekday Mon) (title "St HENRY Emperor C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-07-16) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 8th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-17) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 8th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-18) (weekday Thu)
+ (title "St CAMILLUS de LELLIS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-19) (weekday Fri)
+ (title "St VINCENT de PAUL C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-07-20) (weekday Sat) (title "St JEROME EMILIANI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-07-21) (weekday Sun)
+ (title "9th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-07-22) (weekday Mon)
+ (title "St MARY MAGDALEN Penitent III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-07-23) (weekday Tue) (title "St APOLLINARIS B M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-07-24) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 9th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-07-25) (weekday Thu) (title "St JAMES \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-07-26) (weekday Fri)
+ (title "St ANNE MOTHER of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-07-27) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2024-07-28) (weekday Sun)
+ (title "10th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-07-29) (weekday Mon) (title "St MARTHA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-07-30) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 10th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-07-31) (weekday Wed) (title "St IGNATIUS C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-08-01) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 10th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-08-02) (weekday Fri)
+ (title "St ALPHONSUS MARIA LIGUORI B C D III Cl (Priv.) W SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-03) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2024-08-04) (weekday Sun)
+ (title "11th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-08-05) (weekday Mon)
+ (title "The DEDICATION of St MARY of the SNOWS III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2024-08-06) (weekday Tue)
+ (title "The TRANSFIGURATION of OUR LORD JESUS CHRIST II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-07) (weekday Wed) (title "St CAJETAN C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-08) (weekday Thu)
+ (title "St JOHN MARY VIANNEY C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-08-09) (weekday Fri)
+ (title "VIGIL of St LAURENCE \194\167 M III Cl V #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-10) (weekday Sat) (title "St LAURENCE \194\167 M II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-11) (weekday Sun)
+ (title "12th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-08-12) (weekday Mon) (title "St CLARE V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-13) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 12th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-08-14) (weekday Wed)
+ (title "VIGIL of The ASSUMPTION of the BVM II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-15) (weekday Thu) (title "The ASSUMPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Assumptione"))
+ (has_diocesan_variant false))
+ ((date 2024-08-16) (weekday Fri)
+ (title "St JOACHIM FATHER of the BVM C II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-08-17) (weekday Sat) (title "St HYACINTH C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-08-18) (weekday Sun)
+ (title "13th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-08-19) (weekday Mon) (title "St JOHN EUDES C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-08-20) (weekday Tue) (title "St BERNARD Ab D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-08-21) (weekday Wed)
+ (title "St JANE FRANCES FREMIOT de CHANTAL W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-08-22) (weekday Thu)
+ (title "The IMMACULATE HEART of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2024-08-23) (weekday Fri) (title "St PHILIP BENIZI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-24) (weekday Sat)
+ (title "St BARTHOLOMEW \194\167 Ap II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-08-25) (weekday Sun)
+ (title "14th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-08-26) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 14th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-08-27) (weekday Tue)
+ (title "St JOSEPH CALASANCTIUS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-08-28) (weekday Wed)
+ (title "St AUGUSTINE B C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-08-29) (weekday Thu)
+ (title "The BEHEADING of St JOHN the BAPTIST \194\167 III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of St John the Baptist or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-08-30) (weekday Fri) (title "St ROSE of LIMA V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-08-31) (weekday Sat) (title "St RAYMUND NONNATUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-01) (weekday Sun)
+ (title "15th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-09-02) (weekday Mon) (title "St STEPHEN K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-03) (weekday Tue) (title "St PIUS X P C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-04) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 15th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-05) (weekday Thu)
+ (title "St LAURENCE JUSTINIAN B C III Cl W # JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-06) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 15th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-07) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione."))
+ (has_diocesan_variant false))
+ ((date 2024-09-08) (weekday Sun)
+ (title "16th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-09-09) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 16th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-09-10) (weekday Tue)
+ (title "St NICOLAS of TOLENTINO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-09-11) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 16th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-12) (weekday Thu)
+ (title "The MOST HOLY NAME of MARY III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2024-09-13) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 16th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-14) (weekday Sat)
+ (title "The EXALTATION of the HOLY CROSS II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2024-09-15) (weekday Sun)
+ (title "17th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-09-16) (weekday Mon)
+ (title
+ "SS CORNELIUS \194\167 P & CYPRIAN \194\167 B MM III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-17) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 17th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-09-18) (weekday Wed)
+ (title "EMBER WEDNESDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-09-19) (weekday Thu)
+ (title "St JANUARIUS B & COMPS MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-20) (weekday Fri)
+ (title "EMBER FRIDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-09-21) (weekday Sat)
+ (title "St MATTHEW \194\167 Ap Evangelist II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2024-09-22) (weekday Sun)
+ (title "18th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-09-23) (weekday Mon) (title "St LINUS P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-09-24) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 18th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-25) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 18th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-26) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 18th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-09-27) (weekday Fri)
+ (title "SS COSMAS \194\167 & DAMIAN \194\167 MM III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-09-28) (weekday Sat) (title "St WENCESLAUS Duke M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-09-29) (weekday Sun)
+ (title "The DEDICATION of St MICHAEL Archangel I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Angels or Pr of the Trinity"))
+ (has_diocesan_variant false))
+ ((date 2024-09-30) (weekday Mon)
+ (title "St JEROME Priest C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-01) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 19th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-10-02) (weekday Wed)
+ (title "The HOLY GUARDIAN ANGELS III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-10-03) (weekday Thu)
+ (title "St TERESA of the CHILD JESUS V III Cl (Priv.) W JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-04) (weekday Fri)
+ (title "St FRANCIS of ASSISI C III Cl (Priv.) W SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-05) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2024-10-06) (weekday Sun)
+ (title "20th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-10-07) (weekday Mon) (title "The BVM of the ROSARY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2024-10-08) (weekday Tue) (title "St BRIDGET W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-09) (weekday Wed) (title "St JOHN LEONARDI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-10) (weekday Thu) (title "St FRANCIS BORGIA C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-11) (weekday Fri)
+ (title "The MOTHERHOOD of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2024-10-12) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2024-10-13) (weekday Sun)
+ (title "21st SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-10-14) (weekday Mon)
+ (title "St CALLISTUS I P M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-10-15) (weekday Tue) (title "St TERESA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-16) (weekday Wed) (title "St HEDWIG W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-17) (weekday Thu)
+ (title "St MARGARET MARY ALACOQUE V III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-18) (weekday Fri) (title "St LUKE Evangelist II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2024-10-19) (weekday Sat)
+ (title "St PETER of ALCANTARA C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-20) (weekday Sun)
+ (title "22nd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-10-21) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-22) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-23) (weekday Wed)
+ (title "St ANTHONY MARY CLARET B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-10-24) (weekday Thu) (title "St RAPHAEL Archangel III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-10-25) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-26) (weekday Sat)
+ (title "CELEBRATION of the BVM IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2024-10-27) (weekday Sun) (title "CHRIST the KING I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Our Lord Jesus Christ the King"))
+ (has_diocesan_variant false))
+ ((date 2024-10-28) (weekday Mon)
+ (title "SS SIMON \194\167 & JUDE \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2024-10-29) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 23rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-30) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 23rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-10-31) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 23rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-01) (weekday Fri) (title "ALL SAINTS' DAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of All Saints and Patron Saints or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-02) (weekday Sat) (title "ALL SOULS' DAY I Cl B")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Dead No Blessing")) (has_diocesan_variant false))
+ ((date 2024-11-03) (weekday Sun)
+ (title "4th SUNDAY remaining after the EPIPHANY II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-11-04) (weekday Mon) (title "St CHARLES B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-05) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday remaining after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-06) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday remaining after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-07) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 4th Sunday remaining after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-08) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday remaining after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-09) (weekday Sat)
+ (title "The DEDICATION of the ARCHBASILICA of OUR SAVIOUR II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Dedication of a Church or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-10) (weekday Sun)
+ (title "5th SUNDAY remaining after the EPIPHANY II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-11-11) (weekday Mon) (title "St MARTIN B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-12) (weekday Tue) (title "St MARTIN I P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-13) (weekday Wed) (title "St DIDACUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-14) (weekday Thu) (title "St JOSAPHAT B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-11-15) (weekday Fri)
+ (title "St ALBERT the GREAT B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-16) (weekday Sat) (title "St GERTRUDE V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-11-17) (weekday Sun)
+ (title "6th SUNDAY remaining after the EPIPHANY II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2024-11-18) (weekday Mon)
+ (title
+ "The DEDICATION of the BASILICAS of SS PETER & PAUL III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Dedication of a Church or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-19) (weekday Tue) (title "St ELIZABETH W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-20) (weekday Wed) (title "St FELIX de VALOIS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2024-11-21) (weekday Thu)
+ (title "The PRESENTATION of the BVM III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Pr\195\166sentatione"))
+ (has_diocesan_variant false))
+ ((date 2024-11-22) (weekday Fri)
+ (title "St CECILIA \194\167 V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-11-23) (weekday Sat)
+ (title "St CLEMENT I \194\167 P M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2024-11-24) (weekday Sun)
+ (title "24th & LAST SUNDAY After PENTECOST II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-11-25) (weekday Mon) (title "St CATHERINE V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-26) (weekday Tue) (title "St SILVESTER Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-11-27) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-28) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-29) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-30) (weekday Sat) (title "St ANDREW \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-12-01) (weekday Sun) (title "ADVENT SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-12-02) (weekday Mon) (title "St BIBIANA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-03) (weekday Tue)
+ (title "St FRANCIS XAVIER C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-04) (weekday Wed)
+ (title "St PETER CHRYSOLOGUS B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-05) (weekday Thu) (title "FERIA III Cl V JCHP")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-06) (weekday Fri)
+ (title "St NICOLAS B C III Cl (Priv.) W SH") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-07) (weekday Sat)
+ (title "St AMBROSE B C D III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-08) (weekday Sun)
+ (title "The IMMACULATE CONCEPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant false))
+ ((date 2024-12-09) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-10) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-11) (weekday Wed)
+ (title "St DAMASUS I P C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-12) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-13) (weekday Fri) (title "St LUCY V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-14) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-15) (weekday Sun)
+ (title "3rd SUNDAY of ADVENT (GAUDETE SUNDAY) I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-12-16) (weekday Mon) (title "St EUSEBIUS B M III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-17) (weekday Tue) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-18) (weekday Wed)
+ (title "EMBER WEDNESDAY of ADVENT II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-19) (weekday Thu) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-20) (weekday Fri) (title "EMBER FRIDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-21) (weekday Sat) (title "St THOMAS \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-12-22) (weekday Sun) (title "4th SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-12-23) (weekday Mon) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-24) (weekday Tue)
+ (title "VIGIL of The NATIVITY of OUR LORD I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-25) (weekday Wed) (title "The NATIVITY of OUR LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of the Nativity Proper Communic at Midnight noctem sacratissimam at"))
+ (has_diocesan_variant false))
+ ((date 2024-12-26) (weekday Thu)
+ (title "St STEPHEN \194\167 Protomartyr II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-12-27) (weekday Fri)
+ (title "St JOHN \194\167 Ap Evangelist II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-12-28) (weekday Sat) (title "The HOLY INNOCENTS MM II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2024-12-29) (weekday Sun)
+ (title "SUNDAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2024-12-30) (weekday Mon)
+ (title "6th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-12-31) (weekday Tue)
+ (title "7th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false)))
diff --git a/test/fixtures/lms-ordo-2024-2025.sexp b/test/fixtures/lms-ordo-2024-2025.sexp
new file mode 100644
index 0000000..9c717f8
--- /dev/null
+++ b/test/fixtures/lms-ordo-2024-2025.sexp
@@ -0,0 +1,1719 @@
+; /tmp/lms-ordo-2024-2025.sexp -- Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1),
+; extending Task 6's single LMS fixture (2024-2025) to three editions of
+; the Latin Mass Society's own printed Ordo for England & Wales -- a
+; lineage independent of Divinum Officium/missalemeum/lectio (layers 3-4)
+; and of the electronic LT.txt transcription (layers 1-2/5): a physically
+; printed, professionally-compiled liturgical calendar with its own ISBN.
+;
+; Generator: tools/extract_lms_ordo.ml -- do not hand-edit; re-run against
+; a fresh pdftotext dump and commit the diff instead.
+;
+; Source: "The Ordo 2024-2025", compiled by Peter Day-Milne, The Latin
+; Mass Society, 9 Mallow Street, London EC1Y 8RQ (title page and
+; colophon, verified directly against the PDF's own extracted text --
+; ISBN 9781739209636, Copyright (c) The Latin Mass Society, UK 2024).
+; PDF metadata: Author "Peter Day-Milne", Producer "LibreOffice 7.4", CreationDate 2024-11-06, 140 pages.
+; URL (identified via web search matching the PDF's own version number and filename to the publisher's own hosting path (product page: https://lms.org.uk/product/latin-mass-society-ordo-2024-25); NOT independently re-downloaded and byte-compared in this session -- recorded honestly rather than presented as verified):
+; https://lms.org.uk/sites/default/files/u5374/ordo_2.21_2024-2025.pdf
+; The local PDF (docs/research/ordo/lms-ordo-2024-2025.pdf) is gitignored
+; (CLAUDE.md: "docs/ is gitignored"), so this header, not git, is this
+; fixture's only record of where it came from.
+; SHA-256 of docs/research/ordo/lms-ordo-2024-2025.pdf: 7c482684d177b2e1aa7498e302405bf37ee15042f892c65f7a6091fd5d169f7d
+; Extracted (UTC): 2026-08-23
+; Exact commands:
+; pdftotext -layout docs/research/ordo/lms-ordo-2024-2025.pdf /tmp/lms.txt
+; dune exec tools/extract_lms_ordo.exe -- /tmp/lms.txt \
+; docs/research/ordo/lms-ordo-2024-2025.pdf /tmp/lms-ordo-2024-2025.sexp
+;
+; COVERAGE: 400 day-rows, 2024-11-27 through 2025-12-31 (starting 27 November 2024 ("End of November 2024", the same shape as the 2025-2026 edition -- Advent Sunday 2024 fell on 1 December, so 4 tail days remained (27-30 November)),
+; through the day before a malformed trailing entry the extractor
+; deliberately stops before -- see CHARACTERISATION below).
+;
+; CHARACTERISATION FINDINGS (Step 1, non-negotiable per the task brief --
+; the extraordinaryform.org Ordo silently omitted St Lawrence's vigil on
+; EVERY date it covered, which nearly produced a false corroboration
+; during the RG 33 work; every LMS edition, including this one, is probed
+; with the same discipline before a single divergence is adjudicated):
+;
+; 1. Gl/Cr are printed PER MASS-OPTION, not per day (confirmed again for
+; THIS edition: it carries many more Gl/Cr pairs than day-rows, because
+; every diocesan variant repeats its own "Gl ... Cr ... Pr of ..."
+; line). This extractor resolves the day's OWN office by taking the
+; FIRST Gl/Cr pair in reading order, which the source's own layout
+; guarantees is the universal entry's (diocesan variants are always
+; introduced by a colon-terminated diocese-list line that comes AFTER
+; the universal block, never before -- checked structurally, not
+; assumed, in every sampled block during development, this edition
+; included).
+;
+; 2. OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.creed (RG
+; 475-476), RE-CHECKED BY THIS TOOL RUN (not merely copied from a prior
+; edition's findings) before a single row of this fixture is trusted --
+; the technique CLAUDE.md records as the one that catches a source
+; silently omitting the very thing it is meant to witness. This run's
+; own extracted [rows] were checked against every one of the following
+; before this header was even written; a failure here is a hard [die],
+; not a printed claim:
+; 2024-12-01 (Advent Sunday, RG 475(a)) -> TRUE
+; 2024-12-02 (ordinary Advent feria, RG 476(b)/(d)) -> FALSE
+; 2024-12-26 (St Stephen, II class, inside the Nativity octave, RG 475(d)) -> TRUE
+; 2025-08-15 (the Assumption, I class, RG 475(b)) -> TRUE
+; 2025-08-16 (St Joachim, II class, no Lord/BVM/apostle clause applies, RG 476(b)) -> FALSE
+; All 5 predictions confirmed, both directions (TRUE and FALSE each
+; independently witnessed) -- this edition is discriminating, not a
+; constant, on the Creed.
+;
+; 3. The BVM-Saturday roman numeral (I-V, "Missae de sancta Maria in
+; sabbato", RG 309(a)) is anchored by WHOLE-LINE match against the five
+; literal strings below, NEVER by substring search: "V Mass of BVM" is
+; a substring of "IV Mass of BVM", so a naive `contains` check
+; misreads every fourth-Mass day as the fifth (the coordinator's own
+; misreading, recorded and retracted in commit 27b07b4 before Task 6
+; existed; the same anchoring logic runs unchanged for every edition).
+;
+; 4. SCOPE EXCLUDED, quantified, not silently dropped:
+; - Diocesan variants: present on 156 of 400 days (39.0%) -- their own
+; text is read only far enough to set [has_diocesan_variant],
+; never compared, because colitur computes the UNIVERSAL General
+; Roman Calendar only, with no diocesan overlay loaded.
+; - The single malformed trailing entry ("...The OCTAVE DAY of the
+; NATIVITY..." with a bare 4-digit token where a weekday+day-number
+; pair belongs) is excluded outright: the extractor's own stop
+; marker (a line whose first token is a bare 4-digit token) halts
+; the scan before it. CONFIRMED IDENTICAL, word for word, across
+; ALL FOUR known editions of this publisher's Ordo (2023-2024,
+; 2024-2025, 2025-2026, and the 2024-2025 fixture's own prior
+; header) -- always the literal stray year token "2025", regardless
+; of which edition or which real trailing year it should read: a
+; stale copy-paste leftover the compiler's own master document
+; carries forward unedited release to release (even the 2024-2025
+; PDF's own tail page footer nearby still reads "Latin Mass Society
+; Ordo 2021-2022"), not something specific to this edition.
+; - Front matter, the Abbreviations/Rubrical-Primer/Breviary sections,
+; and the "When may I say...?"/Appendix tail are never scanned at
+; all (the extractor's own start/stop markers bound it to the Ordo
+; proper).
+;
+; 5. THE "Pr of" (PREFACE) COLUMN (Preface-witnesses task, 2026-08-23) --
+; [row.praef], the RAW text from the FIRST "Pr of ..." / "Common Pr"
+; match in the universal block's own reading order (the same
+; FIRST-in-reading-order discipline finding 1 above already
+; establishes for Gl/Cr). CAPTURED, NOT CLASSIFIED by this tool --
+; classification into {!Colitur_kernel.Preface.t} and the comparison
+; against {!Rite_ef.Rubrics_ef.preface} both happen test-side
+; (test/test_lms_ordo.ml's own [classify_praef]).
+;
+; CHARACTERISATION FINDING, non-negotiable per the same discipline as
+; finding 2: this Ordo prints OPTION LISTS ("Pr of X or Pr of Y or
+; Common Pr"), not always a single value -- and several of the named
+; options ("Martyrs", "All Saints and Patron Saints" [diocesan-only,
+; every occurrence checked falls strictly after this block's own
+; colon boundary], "the Dedication of a Church", "the Most Holy
+; Sacrament" [Corpus Christi's own universal entry], "St John the
+; Baptist", "the Angels") are genuinely NOT among the fourteen the
+; 1962 Missale Romanum's own RG 484-497 enumerate (docs/research/LT.txt,
+; lines 3936-4020, checked directly: no "de Martyribus"/"de Angelis"/
+; "de Dedicatione"/"de Ss.mo Sacramento"/"de S. Ioanne Baptista" clause
+; exists anywhere in 482-499). Every one of these extras, in every
+; instance found in this edition's UNIVERSAL block, is printed
+; ALONGSIDE a genuine RG 482 answer (most often "or Common Pr"; on 24
+; March-shaped days, "or Pr of Lent", the live RG 486(b) de-Tempore
+; answer) -- never as the row's OWN AND ONLY option. This is why the
+; test-side comparison checks colitur's single computed answer is a
+; MEMBER of this row's own parsed option set (dropping any unmapped
+; extra name from that set first), not string equality against
+; whichever option happens to print first -- the same "capture, don't
+; force a match invented at extraction time" discipline
+; tools/extract_fiuv_ordo.ml's own [row.praef] doc comment already
+; states for a different publisher's format.
+;
+; OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.preface (RG
+; 482-499), the SAME discipline as finding 2, applied to this new
+; column -- RE-CHECKED BY THIS TOOL RUN before this header was
+; written; a failed probe is a hard [die]:
+; 2024-12-25 (the Nativity of Our Lord, I class, RG 484(a)) -> "Pr of the Nativity"
+; 2025-06-29 (SS Peter & Paul, I class, RG 497) -> "Pr of the Apostles"
+; 2025-11-03 (All Souls' Day, I class, RG 499 -- TRANSFERRED from 2 November, a Sunday in this edition's own calendar) -> "Pr of the Dead"
+; All 3 predictions confirmed -- this column, too, is discriminating,
+; not a constant, across three different RG-cited outcomes (Nativity/
+; Apostles/Requiem).
+;
+; COVERAGE: 1 of 400 rows have no "Pr of"/"Common Pr" text found at
+; all -- checked directly against this window's own Good Friday
+; (Easter-2): its block carries NO Gl/Cr/Pr line whatsoever in this
+; source (the 1955-restored Holy Week's own liturgical action has no
+; Mass that day at all -- the SAME structural fact
+; {!test_creed_coverage}'s own [window_good_fridays] already asserts
+; for Gl/Cr), so [praef] shares that single expected gap rather than
+; having a coverage gap of its own.
+(((date 2024-11-27) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-28) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-11-29) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-11-30) (weekday Sat) (title "St ANDREW \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-12-01) (weekday Sun) (title "ADVENT SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-12-02) (weekday Mon) (title "St BIBIANA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-03) (weekday Tue)
+ (title "St FRANCIS XAVIER C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-04) (weekday Wed)
+ (title "St PETER CHRYSOLOGUS B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-05) (weekday Thu) (title "FERIA III Cl V JCHP")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-06) (weekday Fri)
+ (title "St NICOLAS B C III Cl (Priv.) W SH") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-07) (weekday Sat)
+ (title "St AMBROSE B C D III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-08) (weekday Sun)
+ (title "The IMMACULATE CONCEPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant false))
+ ((date 2024-12-09) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-10) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-11) (weekday Wed)
+ (title "St DAMASUS I P C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2024-12-12) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-13) (weekday Fri) (title "St LUCY V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-14) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-15) (weekday Sun)
+ (title "3rd SUNDAY of ADVENT (GAUDETE SUNDAY) I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-12-16) (weekday Mon) (title "St EUSEBIUS B M III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-17) (weekday Tue) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-18) (weekday Wed)
+ (title "EMBER WEDNESDAY of ADVENT II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-19) (weekday Thu) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-20) (weekday Fri) (title "EMBER FRIDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-21) (weekday Sat) (title "St THOMAS \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2024-12-22) (weekday Sun) (title "4th SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2024-12-23) (weekday Mon) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2024-12-24) (weekday Tue)
+ (title "VIGIL of The NATIVITY of OUR LORD I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2024-12-25) (weekday Wed) (title "The NATIVITY of OUR LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of the Nativity Proper Communic at Midnight noctem sacratissimam at other"))
+ (has_diocesan_variant false))
+ ((date 2024-12-26) (weekday Thu)
+ (title "St STEPHEN \194\167 Protomartyr II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-12-27) (weekday Fri)
+ (title "St JOHN \194\167 Ap Evangelist II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-12-28) (weekday Sat) (title "The HOLY INNOCENTS MM II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2024-12-29) (weekday Sun)
+ (title "SUNDAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2024-12-30) (weekday Mon)
+ (title "6th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2024-12-31) (weekday Tue)
+ (title "7th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-01-01) (weekday Wed)
+ (title "The OCTAVE DAY of the NATIVITY of the LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-01-02) (weekday Thu) (title "FERIA IV Cl W \226\128\160 JCHP")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2025-01-03) (weekday Fri) (title "FERIA IV Cl W \226\128\160 SH")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant true))
+ ((date 2025-01-04) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("II Mass of BVM")) (bvm_numeral (II))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-01-05) (weekday Sun)
+ (title "The MOST HOLY NAME of JESUS II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant true))
+ ((date 2025-01-06) (weekday Mon) (title "The EPIPHANY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany Proper Communic"))
+ (has_diocesan_variant false))
+ ((date 2025-01-07) (weekday Tue) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2025-01-08) (weekday Wed) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2025-01-09) (weekday Thu) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2025-01-10) (weekday Fri) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2025-01-11) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("II Mass of BVM")) (bvm_numeral (II))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-01-12) (weekday Sun)
+ (title "The HOLY FAMILY of JESUS, MARY AND JOSEPH II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2025-01-13) (weekday Mon) (title "The BAPTISM of OUR LORD II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2025-01-14) (weekday Tue) (title "St HILARY B C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-01-15) (weekday Wed)
+ (title "St PAUL the FIRST HERMIT C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-01-16) (weekday Thu) (title "St MARCELLUS I P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-01-17) (weekday Fri) (title "St ANTHONY Ab III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-18) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("II Mass of BVM")) (bvm_numeral (II))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-01-19) (weekday Sun)
+ (title "2nd SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-01-20) (weekday Mon)
+ (title "SS FABIAN P & SEBASTIAN M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-21) (weekday Tue)
+ (title "St AGNES \194\167 V M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-22) (weekday Wed)
+ (title "SS VINCENT & ANASTASIUS MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-23) (weekday Thu)
+ (title "St RAYMUND of PENAFORT C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-01-24) (weekday Fri) (title "St TIMOTHY B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-25) (weekday Sat)
+ (title "The CONVERSION of St PAUL \194\167 Ap III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2025-01-26) (weekday Sun)
+ (title "3rd SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-01-27) (weekday Mon)
+ (title "St JOHN CHRYSOSTOM B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-28) (weekday Tue) (title "St PETER NOLASCO C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-29) (weekday Wed)
+ (title "St FRANCIS de SALES B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-30) (weekday Thu) (title "St MARTINA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-01-31) (weekday Fri) (title "St JOHN BOSCO C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-02-01) (weekday Sat)
+ (title "St IGNATIUS \194\167 B M III Cl (Priv.) R IH JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-02-02) (weekday Sun)
+ (title "The PURIFICATION of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2025-02-03) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-02-04) (weekday Tue) (title "St ANDREW CORSINI B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-02-05) (weekday Wed)
+ (title "St AGATHA \194\167 V M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-02-06) (weekday Thu)
+ (title "St TITUS B C III Cl (Priv.) W JCHP*") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-02-07) (weekday Fri) (title "St ROMUALD Ab III Cl W # SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-02-08) (weekday Sat) (title "St JOHN of MATHA C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-02-09) (weekday Sun)
+ (title "5th SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-02-10) (weekday Mon) (title "St SCHOLASTICA V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-02-11) (weekday Tue)
+ (title "The APPARITION of the BVM IMMACULATE III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant true))
+ ((date 2025-02-12) (weekday Wed)
+ (title "The SEVEN HOLY FOUNDERS of the ORDER of the SERVANTS of the")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-02-13) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 5th Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-02-14) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 5th Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-02-15) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("III Mass of BVM")) (bvm_numeral (III))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-02-16) (weekday Sun) (title "SEPTUAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-02-17) (weekday Mon) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Septuagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-02-18) (weekday Tue) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Septuagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-02-19) (weekday Wed) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Septuagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-02-20) (weekday Thu) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Septuagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-02-21) (weekday Fri) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Septuagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-02-22) (weekday Sat)
+ (title "The CHAIR of St PETER \194\167 Ap II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2025-02-23) (weekday Sun) (title "SEXAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-02-24) (weekday Mon) (title "St MATTHIAS Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2025-02-25) (weekday Tue) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Sexagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-02-26) (weekday Wed) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Sexagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-02-27) (weekday Thu)
+ (title "St GABRIEL of OUR LADY of SORROWS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-02-28) (weekday Fri) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Sexagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-03-01) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP")
+ (formulary_override ("III Mass of BVM")) (bvm_numeral (III))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-03-02) (weekday Sun) (title "QUINQUAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-03-03) (weekday Mon) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Quinquagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-03-04) (weekday Tue) (title "St CASIMIR C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-03-05) (weekday Wed) (title "ASH WEDNESDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-06) (weekday Thu)
+ (title
+ "SS PERPETUA \194\167 & FELICITY \194\167 MM III Cl (Priv.) R JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-07) (weekday Fri)
+ (title "St THOMAS AQUINAS C D III Cl (Priv.) W SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-08) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-09) (weekday Sun) (title "1st SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-10) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-11) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-12) (weekday Wed) (title "EMBER WEDNESDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-13) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-14) (weekday Fri) (title "EMBER FRIDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-15) (weekday Sat) (title "EMBER SATURDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-16) (weekday Sun) (title "2nd SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-17) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-18) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-19) (weekday Wed)
+ (title "St JOSEPH \194\167 SPOUSE of the BVM C, PATRON of the UNIVERSAL")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St Joseph Et te in festivitate"))
+ (has_diocesan_variant false))
+ ((date 2025-03-20) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-21) (weekday Fri) (title "St BENEDICT Ab III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-22) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-23) (weekday Sun) (title "3rd SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-24) (weekday Mon)
+ (title "St GABRIEL Archangel III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-25) (weekday Tue)
+ (title "The ANNUNCIATION of the BVM I Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Annuntiatione"))
+ (has_diocesan_variant false))
+ ((date 2025-03-26) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-27) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-03-28) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-29) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-03-30) (weekday Sun) (title "4th SUNDAY in LENT I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2025-03-31) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-01) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-02) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-04-03) (weekday Thu) (title "FERIA III Cl V JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2025-04-04) (weekday Fri) (title "FERIA III Cl V SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-05) (weekday Sat) (title "FERIA III Cl V IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-06) (weekday Sun) (title "PASSION SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2025-04-07) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-08) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-09) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-10) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-11) (weekday Fri) (title "St LEO P C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2025-04-12) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-13) (weekday Sun) (title "PALM SUNDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2025-04-14) (weekday Mon) (title "MONDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-15) (weekday Tue) (title "TUESDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-16) (weekday Wed) (title "WEDNESDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2025-04-17) (weekday Thu) (title "MAUNDY THURSDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Holy Cross. No Judica No Gloria Patri at"))
+ (has_diocesan_variant false))
+ ((date 2025-04-18) (weekday Fri) (title "GOOD FRIDAY I Cl B")
+ (formulary_override ()) (bvm_numeral ()) (gloria ()) (creed ())
+ (praef ()) (has_diocesan_variant false))
+ ((date 2025-04-19) (weekday Sat) (title "HOLY SATURDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter (in hac potissimum nocte)."))
+ (has_diocesan_variant false))
+ ((date 2025-04-20) (weekday Sun) (title "EASTER I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter (die) Proper Communic Proper Hanc igitur"))
+ (has_diocesan_variant true))
+ ((date 2025-04-21) (weekday Mon) (title "EASTER MONDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2025-04-22) (weekday Tue) (title "EASTER TUESDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2025-04-23) (weekday Wed) (title "EASTER WEDNESDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2025-04-24) (weekday Thu) (title "EASTER THURSDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2025-04-25) (weekday Fri)
+ (title "THE GREATER LITANIES. EASTER FRIDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2025-04-26) (weekday Sat)
+ (title "EASTER SATURDAY (SABBATO in ALBIS) I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2025-04-27) (weekday Sun) (title "LOW SUNDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-04-28) (weekday Mon)
+ (title "St PAUL of the CROSS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-04-29) (weekday Tue) (title "St PETER M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-04-30) (weekday Wed)
+ (title "St CATHERINE of SIENNA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-01) (weekday Thu)
+ (title "St JOSEPH \194\167 the WORKER, SPOUSE of the BVM C I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St Joseph Et te in solemnitate"))
+ (has_diocesan_variant false))
+ ((date 2025-05-02) (weekday Fri)
+ (title "St ATHANASIUS B C D III Cl (Priv.) W SH") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2025-05-03) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP")
+ (formulary_override ("IV Mass of BVM")) (bvm_numeral (IV))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-05-04) (weekday Sun) (title "2nd SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-05-05) (weekday Mon) (title "St PIUS V P C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-05-06) (weekday Tue) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-07) (weekday Wed) (title "St STANISLAUS B M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-05-08) (weekday Thu) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2025-05-09) (weekday Fri)
+ (title "St GREGORY NAZIANZEN B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-10) (weekday Sat) (title "St ANTONINUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-11) (weekday Sun) (title "3rd SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-12) (weekday Mon)
+ (title "SS NEREUS, ACHILLEUS, DOMITILLA V, & PANCRAS MM III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-05-13) (weekday Tue)
+ (title "St ROBERT BELLARMINE B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-14) (weekday Wed) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 3rd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-15) (weekday Thu)
+ (title "St JOHN BAPTIST de la SALLE C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-16) (weekday Fri) (title "St UBALDUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-05-17) (weekday Sat) (title "St PASCHAL BAYLON C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-18) (weekday Sun) (title "4th SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-19) (weekday Mon)
+ (title "St PETER CELESTINE P C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-20) (weekday Tue)
+ (title "St BERNARD of SIENNA C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-21) (weekday Wed) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-22) (weekday Thu) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2025-05-23) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-24) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("IV Mass of BVM")) (bvm_numeral (IV))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-05-25) (weekday Sun) (title "5th SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2025-05-26) (weekday Mon)
+ (title "St PHILIP NERI C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-27) (weekday Tue)
+ (title "St BEDE the VENERABLE C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2025-05-28) (weekday Wed) (title "VIGIL of The ASCENSION II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2025-05-29) (weekday Thu) (title "The ASCENSION I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Ascension Proper Communic"))
+ (has_diocesan_variant false))
+ ((date 2025-05-30) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of the Ascension")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Ascension"))
+ (has_diocesan_variant true))
+ ((date 2025-05-31) (weekday Sat)
+ (title "The BLESSED VIRGIN MARY, QUEEN II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2025-06-01) (weekday Sun)
+ (title "SUNDAY after the ASCENSION II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2025-06-02) (weekday Mon) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of the Ascension")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Ascension"))
+ (has_diocesan_variant false))
+ ((date 2025-06-03) (weekday Tue) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of the Ascension")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Ascension"))
+ (has_diocesan_variant false))
+ ((date 2025-06-04) (weekday Wed)
+ (title "St FRANCIS CARACCIOLO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2025-06-05) (weekday Thu)
+ (title "St BONIFACE B M III Cl (Priv.) R JCHP") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of the Ascension"))
+ (has_diocesan_variant true))
+ ((date 2025-06-06) (weekday Fri) (title "St NORBERT B C III Cl W # SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant false))
+ ((date 2025-06-07) (weekday Sat) (title "VIGIL of PENTECOST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef
+ ("Pr of the Holy Spirit hodierna die Proper Communic Proper Hanc igitur"))
+ (has_diocesan_variant false))
+ ((date 2025-06-08) (weekday Sun) (title "PENTECOST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-09) (weekday Mon) (title "WHIT MONDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-10) (weekday Tue) (title "WHIT TUESDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-11) (weekday Wed)
+ (title "WHIT WEDNESDAY (EMBER DAY) I Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-12) (weekday Thu) (title "WHIT THURSDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-13) (weekday Fri) (title "WHIT FRIDAY (EMBER DAY) I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-14) (weekday Sat) (title "WHIT SATURDAY (EMBER DAY) I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2025-06-15) (weekday Sun) (title "The MOST HOLY TRINITY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-06-16) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 1st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-06-17) (weekday Tue)
+ (title "St GREGORY BARBARIGO B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-06-18) (weekday Wed)
+ (title "St EPHREM the SYRIAN Deacon C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-06-19) (weekday Thu) (title "CORPUS CHRISTI I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Most Holy Sacrament or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-06-20) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 1st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-06-21) (weekday Sat)
+ (title "St ALOYSIUS GONZAGA C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-06-22) (weekday Sun)
+ (title "2nd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-06-23) (weekday Mon)
+ (title "VIGIL of The NATIVITY of JOHN the BAPTIST \194\167 II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-06-24) (weekday Tue)
+ (title "The NATIVITY of JOHN the BAPTIST \194\167 I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St John the Baptist or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-06-25) (weekday Wed) (title "St WILLIAM Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-06-26) (weekday Thu)
+ (title "SS JOHN & PAUL \194\167 MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-06-27) (weekday Fri) (title "The SACRED HEART of JESUS I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Sacred Heart")) (has_diocesan_variant true))
+ ((date 2025-06-28) (weekday Sat)
+ (title "VIGIL of SS PETER \194\167 & PAUL \194\167 App II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-06-29) (weekday Sun)
+ (title "SS PETER \194\167 & PAUL \194\167 App I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2025-06-30) (weekday Mon)
+ (title "The COMMEMORATION of St PAUL \194\167 Ap III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2025-07-01) (weekday Tue)
+ (title "The MOST PRECIOUS BLOOD of OUR LORD JESUS CHRIST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2025-07-02) (weekday Wed)
+ (title "The VISITATION of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Visitatione"))
+ (has_diocesan_variant false))
+ ((date 2025-07-03) (weekday Thu) (title "St IRENAEUS B M III Cl R # JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-07-04) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 3rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-05) (weekday Sat)
+ (title "St ANTHONY MARY ZACCARIA C III Cl W # IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-07-06) (weekday Sun)
+ (title "4th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-07-07) (weekday Mon)
+ (title "SS CYRIL & METHODIUS BB CC III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-07-08) (weekday Tue) (title "St ELIZABETH Q W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-07-09) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-10) (weekday Thu)
+ (title "The SEVEN HOLY BROTHERS MM & SS RUFINA & SECUNDA VV MM")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-07-11) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-12) (weekday Sat) (title "St JOHN GUALBERTI Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-07-13) (weekday Sun)
+ (title "5th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-07-14) (weekday Mon)
+ (title "St BONAVENTURE B C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-07-15) (weekday Tue) (title "St HENRY Emperor C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-07-16) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 5th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-17) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 5th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-18) (weekday Fri)
+ (title "St CAMILLUS de LELLIS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-19) (weekday Sat)
+ (title "St VINCENT de PAUL C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-07-20) (weekday Sun)
+ (title "6th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-07-21) (weekday Mon)
+ (title "St LAURENCE of BRINDISI C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-22) (weekday Tue)
+ (title "St MARY MAGDALEN Penitent III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-07-23) (weekday Wed) (title "St APOLLINARIS B M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-07-24) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 6th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-07-25) (weekday Fri) (title "St JAMES \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2025-07-26) (weekday Sat)
+ (title "St ANNE MOTHER of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-07-27) (weekday Sun)
+ (title "7th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-07-28) (weekday Mon)
+ (title "SS NAZARIUS & CELSUS MM & VICTOR I P M & INNOCENT I P C III Cl")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-07-29) (weekday Tue) (title "St MARTHA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-07-30) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-07-31) (weekday Thu) (title "St IGNATIUS C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-08-01) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-08-02) (weekday Sat)
+ (title "St ALPHONSUS MARIA LIGUORI B C D III Cl (Priv.) W IH JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-03) (weekday Sun)
+ (title "8th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-08-04) (weekday Mon) (title "St DOMINIC C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-05) (weekday Tue)
+ (title "The DEDICATION of St MARY of the SNOWS III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2025-08-06) (weekday Wed)
+ (title "The TRANSFIGURATION of OUR LORD JESUS CHRIST II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-07) (weekday Thu) (title "St CAJETAN C III Cl W # JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-08) (weekday Fri)
+ (title "St JOHN MARY VIANNEY C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-08-09) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-08-10) (weekday Sun)
+ (title "9th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-08-11) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 9th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-08-12) (weekday Tue) (title "St CLARE V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-13) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 9th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-08-14) (weekday Thu)
+ (title "VIGIL of The ASSUMPTION of the BVM II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-15) (weekday Fri) (title "The ASSUMPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Assumptione"))
+ (has_diocesan_variant false))
+ ((date 2025-08-16) (weekday Sat)
+ (title "St JOACHIM FATHER of the BVM C II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-08-17) (weekday Sun)
+ (title "10th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-08-18) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 10th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-08-19) (weekday Tue) (title "St JOHN EUDES C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-08-20) (weekday Wed) (title "St BERNARD Ab D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-08-21) (weekday Thu)
+ (title "St JANE FRANCES FR\195\137MIOT de CHANTAL W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-08-22) (weekday Fri)
+ (title "The IMMACULATE HEART of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2025-08-23) (weekday Sat) (title "St PHILIP BENIZI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-24) (weekday Sun)
+ (title "11th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-08-25) (weekday Mon) (title "St LOUIS K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-26) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 11th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-08-27) (weekday Wed)
+ (title "St JOSEPH CALASANCTIUS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-08-28) (weekday Thu)
+ (title "St AUGUSTINE B C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-08-29) (weekday Fri)
+ (title "The BEHEADING of St JOHN the BAPTIST \194\167 III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of St John the Baptist or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-08-30) (weekday Sat) (title "St ROSE of LIMA V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-08-31) (weekday Sun)
+ (title "12th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-09-01) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 12th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-02) (weekday Tue) (title "St STEPHEN K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-09-03) (weekday Wed) (title "St PIUS X P C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-09-04) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 12th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-05) (weekday Fri)
+ (title "St LAURENCE JUSTINIAN B C III Cl W # SH") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-06) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-09-07) (weekday Sun)
+ (title "13th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-09-08) (weekday Mon) (title "The NATIVITY of the BVM II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Nativitate"))
+ (has_diocesan_variant false))
+ ((date 2025-09-09) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 13th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-09-10) (weekday Wed)
+ (title "St NICOLAS of TOLENTINO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-09-11) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 13th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-12) (weekday Fri)
+ (title "The MOST HOLY NAME of MARY III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2025-09-13) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-09-14) (weekday Sun)
+ (title "The EXALTATION of the HOLY CROSS II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2025-09-15) (weekday Mon)
+ (title "The SEVEN SORROWS of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Transfixione"))
+ (has_diocesan_variant false))
+ ((date 2025-09-16) (weekday Tue)
+ (title
+ "SS CORNELIUS \194\167 P & CYPRIAN \194\167 B MM III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-09-17) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 14th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-09-18) (weekday Thu)
+ (title "St JOSEPH of CUPERTINO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-09-19) (weekday Fri)
+ (title "St JANUARIUS B & COMPS MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-09-20) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-09-21) (weekday Sun)
+ (title "15th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-09-22) (weekday Mon)
+ (title "St THOMAS of VILLANOVA B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-23) (weekday Tue) (title "St LINUS P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-09-24) (weekday Wed)
+ (title "EMBER WEDNESDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-25) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 15th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-26) (weekday Fri)
+ (title "EMBER FRIDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-09-27) (weekday Sat)
+ (title "EMBER SATURDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-09-28) (weekday Sun)
+ (title "16th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-09-29) (weekday Mon)
+ (title "The DEDICATION of St MICHAEL Archangel I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-09-30) (weekday Tue)
+ (title "St JEROME Priest C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-10-01) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 16th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-10-02) (weekday Thu)
+ (title "The HOLY GUARDIAN ANGELS III Cl (Priv.) W JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-10-03) (weekday Fri)
+ (title "St TERESA of the CHILD JESUS V III Cl (Priv.) W SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-04) (weekday Sat)
+ (title "St FRANCIS of ASSISI C III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-05) (weekday Sun)
+ (title "17th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-10-06) (weekday Mon) (title "St BRUNO C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-10-07) (weekday Tue) (title "OUR LADY of the ROSARY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2025-10-08) (weekday Wed) (title "St BRIDGET W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-09) (weekday Thu) (title "St JOHN LEONARDI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-10) (weekday Fri) (title "St FRANCIS BORGIA C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-11) (weekday Sat)
+ (title "The MOTHERHOOD of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2025-10-12) (weekday Sun)
+ (title "18th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-10-13) (weekday Mon) (title "St EDWARD K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-14) (weekday Tue)
+ (title "St CALLISTUS I P M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-10-15) (weekday Wed) (title "St TERESA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-16) (weekday Thu) (title "St HEDWIG W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-17) (weekday Fri)
+ (title "St MARGARET MARY ALACOQUE V III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-10-18) (weekday Sat) (title "St LUKE Evangelist II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2025-10-19) (weekday Sun)
+ (title "19th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-10-20) (weekday Mon) (title "St JOHN CANTIUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-10-21) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 19th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-10-22) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 19th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-10-23) (weekday Thu)
+ (title "St ANTHONY MARY CLARET B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-10-24) (weekday Fri) (title "St RAPHAEL Archangel III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-10-25) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-10-26) (weekday Sun) (title "CHRIST the KING I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Our Lord Jesus Christ the King"))
+ (has_diocesan_variant false))
+ ((date 2025-10-27) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 20th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-10-28) (weekday Tue)
+ (title "SS SIMON \194\167 & JUDE \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2025-10-29) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 20th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-10-30) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 20th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-10-31) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 20th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-11-01) (weekday Sat) (title "ALL SAINTS' DAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of All Saints and Patron Saints or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-11-02) (weekday Sun)
+ (title "21st SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-11-03) (weekday Mon) (title "ALL SOULS' DAY I Cl B")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Dead No Blessing")) (has_diocesan_variant false))
+ ((date 2025-11-04) (weekday Tue) (title "St CHARLES B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-05) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 21st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-11-06) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 21st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-11-07) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 21st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-11-08) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2025-11-09) (weekday Sun)
+ (title "The DEDICATION of the ARCHBASILICA of OUR SAVIOUR II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Dedication of a Church or Pr of the Trinity"))
+ (has_diocesan_variant false))
+ ((date 2025-11-10) (weekday Mon) (title "St ANDREW AVELLINO C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-11-11) (weekday Tue) (title "St MARTIN B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-12) (weekday Wed) (title "St MARTIN I P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-13) (weekday Thu) (title "St DIDACUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-14) (weekday Fri) (title "St JOSAPHAT B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-11-15) (weekday Sat)
+ (title "St ALBERT the GREAT B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-11-16) (weekday Sun)
+ (title "23rd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-11-17) (weekday Mon)
+ (title "St GREGORY THAUMATURGUS B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-11-18) (weekday Tue)
+ (title
+ "The DEDICATION of the BASILICAS of SS PETER & PAUL III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Dedication of a Church or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-11-19) (weekday Wed) (title "St ELIZABETH W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-20) (weekday Thu) (title "St FELIX de VALOIS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-11-21) (weekday Fri)
+ (title "The PRESENTATION of the BVM III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Pr\195\166sentatione"))
+ (has_diocesan_variant false))
+ ((date 2025-11-22) (weekday Sat)
+ (title "St CECILIA \194\167 V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2025-11-23) (weekday Sun)
+ (title "24th & LAST SUNDAY After PENTECOST II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2025-11-24) (weekday Mon)
+ (title "St JOHN of the CROSS C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-25) (weekday Tue) (title "St CATHERINE V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-26) (weekday Wed) (title "St SILVESTER Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-11-27) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-11-28) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-11-29) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-11-30) (weekday Sun) (title "ADVENT SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-01) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-02) (weekday Tue) (title "St BIBIANA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-03) (weekday Wed)
+ (title "St FRANCIS XAVIER C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-04) (weekday Thu)
+ (title "St PETER CHRYSOLOGUS B C D III Cl W # JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-12-05) (weekday Fri) (title "FERIA III Cl V SH")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-06) (weekday Sat)
+ (title "St NICOLAS B C III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-07) (weekday Sun) (title "2nd SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-08) (weekday Mon)
+ (title "The IMMACULATE CONCEPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant true))
+ ((date 2025-12-09) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-10) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-11) (weekday Thu)
+ (title "St DAMASUS I P C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-12) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-13) (weekday Sat) (title "St LUCY V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-14) (weekday Sun)
+ (title "3rd SUNDAY of ADVENT (GAUDETE SUNDAY) I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-15) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-16) (weekday Tue) (title "St EUSEBIUS B M III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-17) (weekday Wed)
+ (title "EMBER WEDNESDAY of ADVENT II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-18) (weekday Thu) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-19) (weekday Fri) (title "EMBER FRIDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-20) (weekday Sat) (title "EMBER SATURDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-21) (weekday Sun) (title "4th SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-22) (weekday Mon) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-23) (weekday Tue) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-24) (weekday Wed)
+ (title "VIGIL of The NATIVITY of OUR LORD I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-25) (weekday Thu) (title "The NATIVITY of OUR LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of the Nativity Proper Communic at Midnight noctem sacratissimam at"))
+ (has_diocesan_variant false))
+ ((date 2025-12-26) (weekday Fri)
+ (title "St STEPHEN \194\167 Protomartyr II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-12-27) (weekday Sat)
+ (title "St JOHN \194\167 Ap Evangelist II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-12-28) (weekday Sun)
+ (title "SUNDAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2025-12-29) (weekday Mon)
+ (title "5th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2025-12-30) (weekday Tue)
+ (title "6th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-12-31) (weekday Wed)
+ (title "7th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false)))
diff --git a/test/fixtures/lms-ordo-2025-2026.sexp b/test/fixtures/lms-ordo-2025-2026.sexp
new file mode 100644
index 0000000..13b1d11
--- /dev/null
+++ b/test/fixtures/lms-ordo-2025-2026.sexp
@@ -0,0 +1,1706 @@
+; /tmp/lms-ordo-2025-2026.sexp -- Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1),
+; extending Task 6's single LMS fixture (2024-2025) to three editions of
+; the Latin Mass Society's own printed Ordo for England & Wales -- a
+; lineage independent of Divinum Officium/missalemeum/lectio (layers 3-4)
+; and of the electronic LT.txt transcription (layers 1-2/5): a physically
+; printed, professionally-compiled liturgical calendar with its own ISBN.
+;
+; Generator: tools/extract_lms_ordo.ml -- do not hand-edit; re-run against
+; a fresh pdftotext dump and commit the diff instead.
+;
+; Source: "The Ordo 2025-2026", compiled by Peter Day-Milne, The Latin
+; Mass Society, 9 Mallow Street, London EC1Y 8RQ (title page and
+; colophon, verified directly against the PDF's own extracted text --
+; ISBN 978-1-7392096-5-0, Copyright (c) The Latin Mass Society, UK 2025).
+; PDF metadata: Author "Peter Day-Milne", Producer "LibreOffice 25.2.6.2 (X86_64) / LibreOffice Community", CreationDate 2025-10-23, 146 pages.
+; URL (NOT found by URL-pattern web search this session (unlike the 2023-2024 and 2024-2025 editions, no exact download link matching this PDF's own filename/version turned up under lms.org.uk/sites/default/files/u5374/; several near-miss candidates were checked and rejected -- none matched this PDF's own metadata) -- left honestly blank rather than guessed; the file was supplied locally to this session, not fetched by this tool):
+; (not found -- see the note on this line)
+; The local PDF (docs/research/ordo/lms-ordo-2025-2026.pdf) is gitignored
+; (CLAUDE.md: "docs/ is gitignored"), so this header, not git, is this
+; fixture's only record of where it came from.
+; SHA-256 of docs/research/ordo/lms-ordo-2025-2026.pdf: 3d71ad56af3fc8d9c1b37515bf9d946025961f8ef415c3b92520b9de7661f8a3
+; Extracted (UTC): 2026-08-23
+; Exact commands:
+; pdftotext -layout docs/research/ordo/lms-ordo-2025-2026.pdf /tmp/lms.txt
+; dune exec tools/extract_lms_ordo.exe -- /tmp/lms.txt \
+; docs/research/ordo/lms-ordo-2025-2026.pdf /tmp/lms-ordo-2025-2026.sexp
+;
+; COVERAGE: 399 day-rows, 2025-11-28 through 2026-12-31 (starting 28 November 2025 ("End of November 2025", the same shape as the 2024-2025 edition -- Advent Sunday 2025 fell on 30 November, so only 3 tail days remained; note this excludes 27 November 2025, which the PRECEDING edition's own window (2024-2025, through 2025-12-31) already covers -- a one-day-short overlap between consecutive editions' own windows, not a gap or a bug in either extraction,
+; through the day before a malformed trailing entry the extractor
+; deliberately stops before -- see CHARACTERISATION below).
+;
+; CHARACTERISATION FINDINGS (Step 1, non-negotiable per the task brief --
+; the extraordinaryform.org Ordo silently omitted St Lawrence's vigil on
+; EVERY date it covered, which nearly produced a false corroboration
+; during the RG 33 work; every LMS edition, including this one, is probed
+; with the same discipline before a single divergence is adjudicated):
+;
+; 1. Gl/Cr are printed PER MASS-OPTION, not per day (confirmed again for
+; THIS edition: it carries many more Gl/Cr pairs than day-rows, because
+; every diocesan variant repeats its own "Gl ... Cr ... Pr of ..."
+; line). This extractor resolves the day's OWN office by taking the
+; FIRST Gl/Cr pair in reading order, which the source's own layout
+; guarantees is the universal entry's (diocesan variants are always
+; introduced by a colon-terminated diocese-list line that comes AFTER
+; the universal block, never before -- checked structurally, not
+; assumed, in every sampled block during development, this edition
+; included).
+;
+; 2. OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.creed (RG
+; 475-476), RE-CHECKED BY THIS TOOL RUN (not merely copied from a prior
+; edition's findings) before a single row of this fixture is trusted --
+; the technique CLAUDE.md records as the one that catches a source
+; silently omitting the very thing it is meant to witness. This run's
+; own extracted [rows] were checked against every one of the following
+; before this header was even written; a failure here is a hard [die],
+; not a printed claim:
+; 2025-11-30 (Advent Sunday, RG 475(a)) -> TRUE
+; 2025-12-01 (ordinary Advent feria, RG 476(b)/(d)) -> FALSE
+; 2025-12-26 (St Stephen, II class, inside the Nativity octave, RG 475(d)) -> TRUE
+; 2026-08-10 (St Laurence, II class martyr, no Lord/BVM/apostle clause applies, RG 476(b) -- St Joachim (16 August) is IMPEDED by a Sunday in this edition's own calendar (12th Sunday after Pentecost), so this edition needed a DIFFERENT sharp non-octave II-class pairing than the 2023-2024/2024-2025 editions used; a real, edition-specific finding, not an extraction quirk) -> FALSE
+; 2026-08-15 (the Assumption, I class, RG 475(b)) -> TRUE
+; All 5 predictions confirmed, both directions (TRUE and FALSE each
+; independently witnessed) -- this edition is discriminating, not a
+; constant, on the Creed.
+;
+; 3. The BVM-Saturday roman numeral (I-V, "Missae de sancta Maria in
+; sabbato", RG 309(a)) is anchored by WHOLE-LINE match against the five
+; literal strings below, NEVER by substring search: "V Mass of BVM" is
+; a substring of "IV Mass of BVM", so a naive `contains` check
+; misreads every fourth-Mass day as the fifth (the coordinator's own
+; misreading, recorded and retracted in commit 27b07b4 before Task 6
+; existed; the same anchoring logic runs unchanged for every edition).
+;
+; 4. SCOPE EXCLUDED, quantified, not silently dropped:
+; - Diocesan variants: present on 163 of 399 days (40.9%) -- their own
+; text is read only far enough to set [has_diocesan_variant],
+; never compared, because colitur computes the UNIVERSAL General
+; Roman Calendar only, with no diocesan overlay loaded.
+; - The single malformed trailing entry ("...The OCTAVE DAY of the
+; NATIVITY..." with a bare 4-digit token where a weekday+day-number
+; pair belongs) is excluded outright: the extractor's own stop
+; marker (a line whose first token is a bare 4-digit token) halts
+; the scan before it. CONFIRMED IDENTICAL, word for word, across
+; ALL FOUR known editions of this publisher's Ordo (2023-2024,
+; 2024-2025, 2025-2026, and the 2024-2025 fixture's own prior
+; header) -- always the literal stray year token "2025", regardless
+; of which edition or which real trailing year it should read: a
+; stale copy-paste leftover the compiler's own master document
+; carries forward unedited release to release (even the 2024-2025
+; PDF's own tail page footer nearby still reads "Latin Mass Society
+; Ordo 2021-2022"), not something specific to this edition.
+; - Front matter, the Abbreviations/Rubrical-Primer/Breviary sections,
+; and the "When may I say...?"/Appendix tail are never scanned at
+; all (the extractor's own start/stop markers bound it to the Ordo
+; proper).
+;
+; 5. THE "Pr of" (PREFACE) COLUMN (Preface-witnesses task, 2026-08-23) --
+; [row.praef], the RAW text from the FIRST "Pr of ..." / "Common Pr"
+; match in the universal block's own reading order (the same
+; FIRST-in-reading-order discipline finding 1 above already
+; establishes for Gl/Cr). CAPTURED, NOT CLASSIFIED by this tool --
+; classification into {!Colitur_kernel.Preface.t} and the comparison
+; against {!Rite_ef.Rubrics_ef.preface} both happen test-side
+; (test/test_lms_ordo.ml's own [classify_praef]).
+;
+; CHARACTERISATION FINDING, non-negotiable per the same discipline as
+; finding 2: this Ordo prints OPTION LISTS ("Pr of X or Pr of Y or
+; Common Pr"), not always a single value -- and several of the named
+; options ("Martyrs", "All Saints and Patron Saints" [diocesan-only,
+; every occurrence checked falls strictly after this block's own
+; colon boundary], "the Dedication of a Church", "the Most Holy
+; Sacrament" [Corpus Christi's own universal entry], "St John the
+; Baptist", "the Angels") are genuinely NOT among the fourteen the
+; 1962 Missale Romanum's own RG 484-497 enumerate (docs/research/LT.txt,
+; lines 3936-4020, checked directly: no "de Martyribus"/"de Angelis"/
+; "de Dedicatione"/"de Ss.mo Sacramento"/"de S. Ioanne Baptista" clause
+; exists anywhere in 482-499). Every one of these extras, in every
+; instance found in this edition's UNIVERSAL block, is printed
+; ALONGSIDE a genuine RG 482 answer (most often "or Common Pr"; on 24
+; March-shaped days, "or Pr of Lent", the live RG 486(b) de-Tempore
+; answer) -- never as the row's OWN AND ONLY option. This is why the
+; test-side comparison checks colitur's single computed answer is a
+; MEMBER of this row's own parsed option set (dropping any unmapped
+; extra name from that set first), not string equality against
+; whichever option happens to print first -- the same "capture, don't
+; force a match invented at extraction time" discipline
+; tools/extract_fiuv_ordo.ml's own [row.praef] doc comment already
+; states for a different publisher's format.
+;
+; OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.preface (RG
+; 482-499), the SAME discipline as finding 2, applied to this new
+; column -- RE-CHECKED BY THIS TOOL RUN before this header was
+; written; a failed probe is a hard [die]:
+; 2025-12-25 (the Nativity of Our Lord, I class, RG 484(a)) -> "Pr of the Nativity"
+; 2026-06-29 (SS Peter & Paul, I class, RG 497) -> "Pr of the Apostles"
+; 2026-11-02 (All Souls' Day, I class, RG 499) -> "Pr of the Dead"
+; All 3 predictions confirmed -- this column, too, is discriminating,
+; not a constant, across three different RG-cited outcomes (Nativity/
+; Apostles/Requiem).
+;
+; COVERAGE: 1 of 399 rows have no "Pr of"/"Common Pr" text found at
+; all -- checked directly against this window's own Good Friday
+; (Easter-2): its block carries NO Gl/Cr/Pr line whatsoever in this
+; source (the 1955-restored Holy Week's own liturgical action has no
+; Mass that day at all -- the SAME structural fact
+; {!test_creed_coverage}'s own [window_good_fridays] already asserts
+; for Gl/Cr), so [praef] shares that single expected gap rather than
+; having a coverage gap of its own.
+(((date 2025-11-28) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-11-29) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2025-11-30) (weekday Sun) (title "ADVENT SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-01) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-02) (weekday Tue) (title "St BIBIANA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-03) (weekday Wed)
+ (title "St FRANCIS XAVIER C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-04) (weekday Thu)
+ (title "St PETER CHRYSOLOGUS B C D III Cl W # JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2025-12-05) (weekday Fri) (title "FERIA III Cl V SH")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-06) (weekday Sat)
+ (title "St NICOLAS B C III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-07) (weekday Sun) (title "2nd SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-08) (weekday Mon)
+ (title "The IMMACULATE CONCEPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant true))
+ ((date 2025-12-09) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-10) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-11) (weekday Thu)
+ (title "St DAMASUS I P C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2025-12-12) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-13) (weekday Sat) (title "St LUCY V M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-14) (weekday Sun)
+ (title "3rd SUNDAY of ADVENT (GAUDETE SUNDAY) I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-15) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-16) (weekday Tue) (title "St EUSEBIUS B M III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-17) (weekday Wed)
+ (title "EMBER WEDNESDAY of ADVENT II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-18) (weekday Thu) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-19) (weekday Fri) (title "EMBER FRIDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-20) (weekday Sat) (title "EMBER SATURDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-21) (weekday Sun) (title "4th SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2025-12-22) (weekday Mon) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-23) (weekday Tue) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2025-12-24) (weekday Wed)
+ (title "VIGIL of The NATIVITY of OUR LORD I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2025-12-25) (weekday Thu) (title "The NATIVITY of OUR LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of the Nativity Proper Communic at Midnight noctem sacratissimam at"))
+ (has_diocesan_variant false))
+ ((date 2025-12-26) (weekday Fri)
+ (title "St STEPHEN \194\167 Protomartyr II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-12-27) (weekday Sat)
+ (title "St JOHN \194\167 Ap Evangelist II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-12-28) (weekday Sun)
+ (title "SUNDAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2025-12-29) (weekday Mon)
+ (title "5th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2025-12-30) (weekday Tue)
+ (title "6th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2025-12-31) (weekday Wed)
+ (title "7th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2026-01-01) (weekday Thu)
+ (title "The OCTAVE DAY of the NATIVITY of the LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2026-01-02) (weekday Fri) (title "FERIA IV Cl W \226\128\160 SH")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2026-01-03) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP")
+ (formulary_override ("II Mass of BVM")) (bvm_numeral (II))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2026-01-04) (weekday Sun)
+ (title "The MOST HOLY NAME of JESUS II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2026-01-05) (weekday Mon) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override
+ ("Mass of the Octave Day of the Nativity of the Lord"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2026-01-06) (weekday Tue) (title "The EPIPHANY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany Proper Communic"))
+ (has_diocesan_variant false))
+ ((date 2026-01-07) (weekday Wed) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2026-01-08) (weekday Thu) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2026-01-09) (weekday Fri) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of the Epiphany")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Epiphany"))
+ (has_diocesan_variant false))
+ ((date 2026-01-10) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("II Mass of BVM")) (bvm_numeral (II))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2026-01-11) (weekday Sun)
+ (title "The HOLY FAMILY of JESUS, MARY AND JOSEPH II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2026-01-12) (weekday Mon) (title "FERIA IV Cl W \226\128\160")
+ (formulary_override ("Mass of 1st Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant true))
+ ((date 2026-01-13) (weekday Tue) (title "The BAPTISM of OUR LORD II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Epiphany")) (has_diocesan_variant false))
+ ((date 2026-01-14) (weekday Wed) (title "St HILARY B C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-01-15) (weekday Thu)
+ (title "St PAUL the FIRST HERMIT C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-01-16) (weekday Fri) (title "St MARCELLUS I P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-01-17) (weekday Sat) (title "St ANTHONY Ab III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-18) (weekday Sun)
+ (title "2nd SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-01-19) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after the Epiphany"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-01-20) (weekday Tue)
+ (title "SS FABIAN P & SEBASTIAN M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-21) (weekday Wed)
+ (title "St AGNES \194\167 V M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-22) (weekday Thu)
+ (title "SS VINCENT & ANASTASIUS MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-23) (weekday Fri)
+ (title "St RAYMUND of PENAFORT C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-01-24) (weekday Sat) (title "St TIMOTHY B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-25) (weekday Sun)
+ (title "3rd SUNDAY after the EPIPHANY II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-01-26) (weekday Mon) (title "St POLYCARP B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-27) (weekday Tue)
+ (title "St JOHN CHRYSOSTOM B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-28) (weekday Wed) (title "St PETER NOLASCO C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-29) (weekday Thu)
+ (title "St FRANCIS de SALES B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-30) (weekday Fri) (title "St MARTINA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-01-31) (weekday Sat) (title "St JOHN BOSCO C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-02-01) (weekday Sun) (title "SEPTUAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-02-02) (weekday Mon)
+ (title "The PURIFICATION of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity")) (has_diocesan_variant false))
+ ((date 2026-02-03) (weekday Tue)
+ (title
+ "Today may be given the special blessing of candles; the special blessing of throats; and")
+ (formulary_override ("Mass of Septuagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-02-04) (weekday Wed) (title "St ANDREW CORSINI B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-02-05) (weekday Thu)
+ (title "St AGATHA \194\167 V M III Cl (Priv.) R JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-02-06) (weekday Fri) (title "St TITUS B C III Cl (Priv.) W SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-02-07) (weekday Sat)
+ (title "St ROMUALD Ab III Cl W # IH JCHP*") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-02-08) (weekday Sun) (title "SEXAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-02-09) (weekday Mon)
+ (title "St CYRIL of ALEXANDRIA B C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-02-10) (weekday Tue) (title "St SCHOLASTICA V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-02-11) (weekday Wed)
+ (title "The APPARITION of the BVM IMMACULATE III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant true))
+ ((date 2026-02-12) (weekday Thu)
+ (title "The SEVEN HOLY FOUNDERS of the ORDER of the SERVANTS of the")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-02-13) (weekday Fri) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Sexagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-02-14) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("III Mass of BVM")) (bvm_numeral (III))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2026-02-15) (weekday Sun) (title "QUINQUAGESIMA SUNDAY II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-02-16) (weekday Mon) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Quinquagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-02-17) (weekday Tue) (title "FERIA IV Cl V \226\128\161")
+ (formulary_override ("Mass of Quinquagesima Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-02-18) (weekday Wed) (title "ASH WEDNESDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-02-19) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-02-20) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-02-21) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-02-22) (weekday Sun) (title "1st SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2026-02-23) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-02-24) (weekday Tue) (title "St MATTHIAS Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-02-25) (weekday Wed) (title "EMBER WEDNESDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-02-26) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-02-27) (weekday Fri) (title "EMBER FRIDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-02-28) (weekday Sat) (title "EMBER SATURDAY of LENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-01) (weekday Sun) (title "2nd SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant true))
+ ((date 2026-03-02) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-03) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-04) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-05) (weekday Thu) (title "FERIA III Cl V JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-06) (weekday Fri)
+ (title "SS PERPETUA \194\167 & FELICITY \194\167 MM III Cl (Priv.) R SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Lent")) (has_diocesan_variant false))
+ ((date 2026-03-07) (weekday Sat)
+ (title "St THOMAS AQUINAS C D III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2026-03-08) (weekday Sun) (title "3rd SUNDAY in LENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2026-03-09) (weekday Mon)
+ (title "St FRANCES of ROME W III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Lent"))
+ (has_diocesan_variant false))
+ ((date 2026-03-10) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-11) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-12) (weekday Thu)
+ (title "St GREGORY I P C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Lent"))
+ (has_diocesan_variant true))
+ ((date 2026-03-13) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-14) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-15) (weekday Sun) (title "4th SUNDAY in LENT I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2026-03-16) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-17) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-18) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-19) (weekday Thu)
+ (title "St JOSEPH \194\167 SPOUSE of the BVM C, PATRON of the UNIVERSAL")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St Joseph Et te in festivitate"))
+ (has_diocesan_variant false))
+ ((date 2026-03-20) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of Lent Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-21) (weekday Sat) (title "St BENEDICT Ab III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Lent")) (has_diocesan_variant false))
+ ((date 2026-03-22) (weekday Sun) (title "PASSION SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2026-03-23) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-24) (weekday Tue)
+ (title "St GABRIEL Archangel III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Pr of the Holy Cross"))
+ (has_diocesan_variant false))
+ ((date 2026-03-25) (weekday Wed)
+ (title "The ANNUNCIATION of the BVM I Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Annuntiatione"))
+ (has_diocesan_variant false))
+ ((date 2026-03-26) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-27) (weekday Fri) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-28) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant true))
+ ((date 2026-03-29) (weekday Sun) (title "PALM SUNDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2026-03-30) (weekday Mon) (title "MONDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-03-31) (weekday Tue) (title "TUESDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-04-01) (weekday Wed) (title "WEDNESDAY of HOLY WEEK I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Holy Cross Prayer over the People"))
+ (has_diocesan_variant false))
+ ((date 2026-04-02) (weekday Thu) (title "MAUNDY THURSDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Holy Cross. No Judica No Gloria Patri at"))
+ (has_diocesan_variant false))
+ ((date 2026-04-03) (weekday Fri) (title "GOOD FRIDAY I Cl B")
+ (formulary_override ()) (bvm_numeral ()) (gloria ()) (creed ())
+ (praef ()) (has_diocesan_variant false))
+ ((date 2026-04-04) (weekday Sat) (title "HOLY SATURDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter (in hac potissimum nocte)."))
+ (has_diocesan_variant false))
+ ((date 2026-04-05) (weekday Sun) (title "EASTER I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter (die) Proper Communic Proper Hanc igitur"))
+ (has_diocesan_variant false))
+ ((date 2026-04-06) (weekday Mon) (title "EASTER MONDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2026-04-07) (weekday Tue) (title "EASTER TUESDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2026-04-08) (weekday Wed) (title "EASTER WEDNESDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2026-04-09) (weekday Thu) (title "EASTER THURSDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2026-04-10) (weekday Fri) (title "EASTER FRIDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2026-04-11) (weekday Sat)
+ (title "EASTER SATURDAY (SABBATO in ALBIS) I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of Easter (in hac potissimum die) Proper Communic Proper Hanc"))
+ (has_diocesan_variant false))
+ ((date 2026-04-12) (weekday Sun) (title "LOW SUNDAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-04-13) (weekday Mon) (title "St HERMENEGILD M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-04-14) (weekday Tue) (title "St JUSTIN M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-04-15) (weekday Wed) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of Low Sunday")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2026-04-16) (weekday Thu) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of Low Sunday")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2026-04-17) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of Low Sunday")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2026-04-18) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("IV Mass of BVM")) (bvm_numeral (IV))
+ (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2026-04-19) (weekday Sun) (title "2nd SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-04-20) (weekday Mon) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2026-04-21) (weekday Tue) (title "St ANSELM B C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-04-22) (weekday Wed)
+ (title "SS SOTER & CAIUS PP MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-04-23) (weekday Thu) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2026-04-24) (weekday Fri)
+ (title "St FIDELIS of SIGMARINGEN M III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-04-25) (weekday Sat)
+ (title "THE GREATER LITANIES. St MARK Evangelist II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2026-04-26) (weekday Sun) (title "3rd SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-04-27) (weekday Mon) (title "St PETER CANISIUS C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-04-28) (weekday Tue)
+ (title "St PAUL of the CROSS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2026-04-29) (weekday Wed) (title "St PETER M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-04-30) (weekday Thu)
+ (title "St CATHERINE of SIENA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-05-01) (weekday Fri)
+ (title "St JOSEPH \194\167 the WORKER, SPOUSE of the BVM C I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St Joseph Et te in solemnitate"))
+ (has_diocesan_variant false))
+ ((date 2026-05-02) (weekday Sat)
+ (title "St ATHANASIUS B C D III Cl (Priv.) W IH JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-05-03) (weekday Sun) (title "4th SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-05-04) (weekday Mon) (title "St MONICA W III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-05-05) (weekday Tue) (title "St PIUS V P C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-05-06) (weekday Wed) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant true))
+ ((date 2026-05-07) (weekday Thu)
+ (title "St STANISLAUS B M III Cl R # JCHP*") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-05-08) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of 4th Sunday after Easter")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of Easter"))
+ (has_diocesan_variant false))
+ ((date 2026-05-09) (weekday Sat)
+ (title "St GREGORY NAZIANZEN B C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-05-10) (weekday Sun) (title "5th SUNDAY after EASTER II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Easter")) (has_diocesan_variant false))
+ ((date 2026-05-11) (weekday Mon)
+ (title "SS PHILIP \194\167 & JAMES \194\167 App II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2026-05-12) (weekday Tue)
+ (title "SS NEREUS, ACHILLEUS, DOMITILLA V, & PANCRAS MM III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-05-13) (weekday Wed) (title "VIGIL of The ASCENSION II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Easter")) (has_diocesan_variant true))
+ ((date 2026-05-14) (weekday Thu) (title "The ASCENSION I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Ascension Proper Communic"))
+ (has_diocesan_variant false))
+ ((date 2026-05-15) (weekday Fri)
+ (title "St JOHN BAPTIST de la SALLE C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2026-05-16) (weekday Sat) (title "St UBALDUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2026-05-17) (weekday Sun)
+ (title "SUNDAY after the ASCENSION II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant false))
+ ((date 2026-05-18) (weekday Mon) (title "St VENANTIUS M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Pr of the Ascension"))
+ (has_diocesan_variant false))
+ ((date 2026-05-19) (weekday Tue)
+ (title "St PETER CELESTINE P C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2026-05-20) (weekday Wed)
+ (title "St BERNARDINE of SIENA C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Ascension")) (has_diocesan_variant true))
+ ((date 2026-05-21) (weekday Thu) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of the Ascension")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Ascension"))
+ (has_diocesan_variant true))
+ ((date 2026-05-22) (weekday Fri) (title "FERIA IV Cl W \226\128\161")
+ (formulary_override ("Mass of the Ascension")) (bvm_numeral ())
+ (gloria (true)) (creed (false)) (praef ("Pr of the Ascension"))
+ (has_diocesan_variant false))
+ ((date 2026-05-23) (weekday Sat) (title "VIGIL of PENTECOST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef
+ ("Pr of the Holy Spirit hodierna die Proper Communic Proper Hanc igitur"))
+ (has_diocesan_variant false))
+ ((date 2026-05-24) (weekday Sun) (title "PENTECOST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-25) (weekday Mon) (title "WHIT MONDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-26) (weekday Tue) (title "WHIT TUESDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-27) (weekday Wed)
+ (title "WHIT WEDNESDAY (EMBER DAY) I Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-28) (weekday Thu) (title "WHIT THURSDAY I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-29) (weekday Fri) (title "WHIT FRIDAY (EMBER DAY) I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-30) (weekday Sat) (title "WHIT SATURDAY (EMBER DAY) I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Spirit hodierna die"))
+ (has_diocesan_variant false))
+ ((date 2026-05-31) (weekday Sun) (title "The MOST HOLY TRINITY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-06-01) (weekday Mon) (title "St ANGELA MERICI V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-06-02) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 1st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-06-03) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 1st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-06-04) (weekday Thu) (title "CORPUS CHRISTI I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Most Holy Sacrament or Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-06-05) (weekday Fri)
+ (title "St BONIFACE B M III Cl (Priv.) R SH") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-06-06) (weekday Sat)
+ (title "St NORBERT B C III Cl W # IH JCHP") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-06-07) (weekday Sun)
+ (title "2nd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-06-08) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-06-09) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 2nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-06-10) (weekday Wed) (title "St MARGARET Q W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-06-11) (weekday Thu) (title "St BARNABAS Ap III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-06-12) (weekday Fri) (title "The SACRED HEART of JESUS I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Sacred Heart")) (has_diocesan_variant false))
+ ((date 2026-06-13) (weekday Sat)
+ (title "St ANTHONY of PADUA C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-06-14) (weekday Sun)
+ (title "3rd SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-06-15) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 3rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-06-16) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 3rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-06-17) (weekday Wed)
+ (title "St GREGORY BARBARIGO B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-06-18) (weekday Thu)
+ (title "St EPHREM the SYRIAN Deacon C D III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-06-19) (weekday Fri)
+ (title "St JULIANA FALCONIERI V III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-06-20) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2026-06-21) (weekday Sun)
+ (title "4th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-06-22) (weekday Mon) (title "St PAULINUS B C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-06-23) (weekday Tue)
+ (title "VIGIL of The NATIVITY of JOHN the BAPTIST \194\167 II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-06-24) (weekday Wed)
+ (title "The NATIVITY of JOHN the BAPTIST \194\167 I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of St John the Baptist or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-06-25) (weekday Thu) (title "St WILLIAM Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-06-26) (weekday Fri)
+ (title "SS JOHN & PAUL \194\167 MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-06-27) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2026-06-28) (weekday Sun)
+ (title "5th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-06-29) (weekday Mon)
+ (title "SS PETER \194\167 & PAUL \194\167 App I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2026-06-30) (weekday Tue)
+ (title "The COMMEMORATION of St PAUL \194\167 Ap III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2026-07-01) (weekday Wed)
+ (title "The MOST PRECIOUS BLOOD of OUR LORD JESUS CHRIST I Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2026-07-02) (weekday Thu)
+ (title "The VISITATION of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Visitatione"))
+ (has_diocesan_variant false))
+ ((date 2026-07-03) (weekday Fri) (title "St IRENAEUS B M III Cl R # SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-07-04) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2026-07-05) (weekday Sun)
+ (title "6th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-07-06) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 6th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-07-07) (weekday Tue)
+ (title "SS CYRIL & METHODIUS BB CC III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-07-08) (weekday Wed) (title "St ELIZABETH Q W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-07-09) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 6th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-07-10) (weekday Fri)
+ (title "The SEVEN HOLY BROTHERS MM & SS RUFINA & SECUNDA VV MM")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-07-11) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2026-07-12) (weekday Sun)
+ (title "7th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-07-13) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-07-14) (weekday Tue)
+ (title "St BONAVENTURE B C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-07-15) (weekday Wed) (title "St HENRY Emperor C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-07-16) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-07-17) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 7th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-07-18) (weekday Sat)
+ (title "St CAMILLUS de LELLIS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-07-19) (weekday Sun)
+ (title "8th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-07-20) (weekday Mon) (title "St JEROME EMILIANI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-07-21) (weekday Tue)
+ (title "St LAURENCE of BRINDISI C D III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-07-22) (weekday Wed)
+ (title "St MARY MAGDALEN Penitent III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-07-23) (weekday Thu) (title "St APOLLINARIS B M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-07-24) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 8th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-07-25) (weekday Sat) (title "St JAMES \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-07-26) (weekday Sun)
+ (title "9th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-07-27) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 9th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-07-28) (weekday Tue)
+ (title "SS NAZARIUS & CELSUS MM & VICTOR I P M & INNOCENT I P C III Cl")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-07-29) (weekday Wed) (title "St MARTHA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-07-30) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 9th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-07-31) (weekday Fri) (title "St IGNATIUS C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-08-01) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2026-08-02) (weekday Sun)
+ (title "10th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-08-03) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 10th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-08-04) (weekday Tue) (title "St DOMINIC C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-05) (weekday Wed)
+ (title "The DEDICATION of St MARY of the SNOWS III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2026-08-06) (weekday Thu)
+ (title "The TRANSFIGURATION of OUR LORD JESUS CHRIST II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-07) (weekday Fri) (title "St CAJETAN C III Cl W # SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-08) (weekday Sat)
+ (title "St JOHN MARY VIANNEY C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-08-09) (weekday Sun)
+ (title "11th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-08-10) (weekday Mon) (title "St LAURENCE \194\167 M II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-11) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 11th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-08-12) (weekday Wed) (title "St CLARE V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-13) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 11th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-08-14) (weekday Fri)
+ (title "VIGIL of The ASSUMPTION of the BVM II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-15) (weekday Sat) (title "The ASSUMPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Assumptione"))
+ (has_diocesan_variant false))
+ ((date 2026-08-16) (weekday Sun)
+ (title "12th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-08-17) (weekday Mon) (title "St HYACINTH C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-08-18) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 12th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-08-19) (weekday Wed) (title "St JOHN EUDES C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-08-20) (weekday Thu) (title "St BERNARD Ab D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-08-21) (weekday Fri)
+ (title "St JANE FRANCES FR\195\137MIOT de CHANTAL W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-08-22) (weekday Sat)
+ (title "The IMMACULATE HEART of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2026-08-23) (weekday Sun)
+ (title "13th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-08-24) (weekday Mon)
+ (title "St BARTHOLOMEW \194\167 Ap II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-08-25) (weekday Tue) (title "St LOUIS K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-08-26) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 13th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-08-27) (weekday Thu)
+ (title "St JOSEPH CALASANCTIUS C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-08-28) (weekday Fri)
+ (title "St AUGUSTINE B C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-08-29) (weekday Sat)
+ (title "The BEHEADING of St JOHN the BAPTIST \194\167 III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of St John the Baptist or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-08-30) (weekday Sun)
+ (title "14th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-08-31) (weekday Mon) (title "St RAYMUND NONNATUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-09-01) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 14th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-02) (weekday Wed) (title "St STEPHEN K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-09-03) (weekday Thu)
+ (title "St PIUS X P C III Cl (Priv.) W JCHP") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-04) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 14th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-05) (weekday Sat)
+ (title "St LAURENCE JUSTINIAN B C III Cl W # IH JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-09-06) (weekday Sun)
+ (title "15th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-09-07) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 15th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-09-08) (weekday Tue) (title "The NATIVITY of the BVM II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Nativitate"))
+ (has_diocesan_variant false))
+ ((date 2026-09-09) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 15th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-09-10) (weekday Thu)
+ (title "St NICOLAS of TOLENTINO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-09-11) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 15th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-12) (weekday Sat)
+ (title "The MOST HOLY NAME of MARY III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant true))
+ ((date 2026-09-13) (weekday Sun)
+ (title "16th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-09-14) (weekday Mon)
+ (title "The EXALTATION of the HOLY CROSS II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Holy Cross")) (has_diocesan_variant false))
+ ((date 2026-09-15) (weekday Tue)
+ (title "The SEVEN SORROWS of the BVM II Cl W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Transfixione"))
+ (has_diocesan_variant false))
+ ((date 2026-09-16) (weekday Wed)
+ (title
+ "SS CORNELIUS \194\167 P & CYPRIAN \194\167 B MM III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-09-17) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 16th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-09-18) (weekday Fri)
+ (title "St JOSEPH of CUPERTINO C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-09-19) (weekday Sat)
+ (title "St JANUARIUS B & COMPS MM III Cl R #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-09-20) (weekday Sun)
+ (title "17th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-09-21) (weekday Mon)
+ (title "St MATTHEW \194\167 Ap Evangelist II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant true))
+ ((date 2026-09-22) (weekday Tue)
+ (title "St THOMAS of VILLANOVA B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-23) (weekday Wed)
+ (title "EMBER WEDNESDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-24) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 17th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-25) (weekday Fri)
+ (title "EMBER FRIDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-26) (weekday Sat)
+ (title "EMBER SATURDAY of SEPTEMBER II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-09-27) (weekday Sun)
+ (title "18th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-09-28) (weekday Mon) (title "St WENCESLAUS Duke M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-09-29) (weekday Tue)
+ (title "The DEDICATION of St MICHAEL Archangel I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-09-30) (weekday Wed)
+ (title "St JEROME Priest C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-01) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 18th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-10-02) (weekday Fri)
+ (title "The HOLY GUARDIAN ANGELS III Cl (Priv.) W SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-10-03) (weekday Sat)
+ (title "St TERESA of the CHILD JESUS V III Cl (Priv.) W IH JCHP*")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-04) (weekday Sun)
+ (title "19th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-10-05) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 19th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-06) (weekday Tue) (title "St BRUNO C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-10-07) (weekday Wed) (title "OUR LADY of the ROSARY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Festivitate"))
+ (has_diocesan_variant false))
+ ((date 2026-10-08) (weekday Thu) (title "St BRIDGET W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-09) (weekday Fri) (title "St JOHN LEONARDI C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-10) (weekday Sat) (title "St FRANCIS BORGIA C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-11) (weekday Sun)
+ (title "20th SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-10-12) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 20th Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-13) (weekday Tue) (title "St EDWARD K C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-14) (weekday Wed)
+ (title "St CALLISTUS I P M III Cl (Priv.) R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-10-15) (weekday Thu) (title "St TERESA V III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-16) (weekday Fri) (title "St HEDWIG W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-17) (weekday Sat)
+ (title "St MARGARET MARY ALACOQUE V III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-18) (weekday Sun)
+ (title "21st SUNDAY after PENTECOST II Cl G") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-10-19) (weekday Mon)
+ (title "St PETER of ALCANTARA C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-20) (weekday Tue) (title "St JOHN CANTIUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-10-21) (weekday Wed) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 21st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-22) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 21st Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-23) (weekday Fri)
+ (title "St ANTHONY MARY CLARET B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-10-24) (weekday Sat) (title "St RAPHAEL Archangel III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Angels or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-10-25) (weekday Sun) (title "CHRIST the KING I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of Our Lord Jesus Christ the King"))
+ (has_diocesan_variant false))
+ ((date 2026-10-26) (weekday Mon) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-27) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-10-28) (weekday Wed)
+ (title "SS SIMON \194\167 & JUDE \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-10-29) (weekday Thu) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-30) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 22nd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-10-31) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2026-11-01) (weekday Sun) (title "ALL SAINTS' DAY I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of All Saints and Patron Saints or Pr of the Trinity"))
+ (has_diocesan_variant false))
+ ((date 2026-11-02) (weekday Mon) (title "ALL SOULS' DAY I Cl B")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Pr of the Dead No Blessing")) (has_diocesan_variant false))
+ ((date 2026-11-03) (weekday Tue) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 23rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-11-04) (weekday Wed) (title "St CHARLES B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-05) (weekday Thu) (title "FERIA IV Cl G \226\128\161 JCHP")
+ (formulary_override ("Mass of 23rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-11-06) (weekday Fri) (title "FERIA IV Cl G \226\128\161 SH")
+ (formulary_override ("Mass of 23rd Sunday after Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-11-07) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160 IH JCHP*")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant true))
+ ((date 2026-11-08) (weekday Sun)
+ (title "5th SUNDAY remaining after the EPIPHANY II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-11-09) (weekday Mon)
+ (title "The DEDICATION of the ARCHBASILICA of OUR SAVIOUR II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Dedication of a Church or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-11-10) (weekday Tue) (title "St ANDREW AVELLINO C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-11-11) (weekday Wed) (title "St MARTIN B C III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-12) (weekday Thu) (title "St MARTIN I P M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-13) (weekday Fri) (title "St DIDACUS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-14) (weekday Sat) (title "St JOSAPHAT B M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-11-15) (weekday Sun)
+ (title "6th SUNDAY remaining after the EPIPHANY II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-11-16) (weekday Mon) (title "St GERTRUDE V III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-11-17) (weekday Tue)
+ (title "St GREGORY THAUMATURGUS B C III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-11-18) (weekday Wed)
+ (title
+ "The DEDICATION of the BASILICAS of SS PETER & PAUL III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the Dedication of a Church or Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-11-19) (weekday Thu) (title "St ELIZABETH W III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-20) (weekday Fri) (title "St FELIX de VALOIS C III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-11-21) (weekday Sat)
+ (title "The PRESENTATION of the BVM III Cl W #") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of the BVM Et te in Pr\195\166sentatione"))
+ (has_diocesan_variant false))
+ ((date 2026-11-22) (weekday Sun)
+ (title "24th & LAST SUNDAY After PENTECOST II Cl G")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant true))
+ ((date 2026-11-23) (weekday Mon)
+ (title "St CLEMENT I \194\167 P M III Cl (Priv.) R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant true))
+ ((date 2026-11-24) (weekday Tue)
+ (title "St JOHN of the CROSS C D III Cl (Priv.) W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-25) (weekday Wed) (title "St CATHERINE V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-26) (weekday Thu) (title "St SILVESTER Ab III Cl W #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-11-27) (weekday Fri) (title "FERIA IV Cl G \226\128\161")
+ (formulary_override ("Mass of 24th & Last Sunday After Pentecost"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-11-28) (weekday Sat)
+ (title "OUR LADY on SATURDAY IV Cl W \226\128\160")
+ (formulary_override ("V Mass of BVM")) (bvm_numeral (V)) (gloria (true))
+ (creed (false)) (praef ("Pr of the BVM Et te in Veneratione"))
+ (has_diocesan_variant false))
+ ((date 2026-11-29) (weekday Sun) (title "ADVENT SUNDAY I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-11-30) (weekday Mon) (title "St ANDREW \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-12-01) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-12-02) (weekday Wed) (title "St BIBIANA V M III Cl R #")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Pr of Martyrs or Common Pr")) (has_diocesan_variant false))
+ ((date 2026-12-03) (weekday Thu)
+ (title "St FRANCIS XAVIER C III Cl (Priv.) W JCHP")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-12-04) (weekday Fri)
+ (title "St PETER CHRYSOLOGUS B C D III Cl W # SH")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant true))
+ ((date 2026-12-05) (weekday Sat) (title "FERIA III Cl V IH JCHP*")
+ (formulary_override ("Mass of Advent Sunday")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-12-06) (weekday Sun) (title "2nd SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-12-07) (weekday Mon)
+ (title "St AMBROSE B C D III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-12-08) (weekday Tue)
+ (title "The IMMACULATE CONCEPTION of the BVM I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the BVM Et te in Conceptione Immaculata"))
+ (has_diocesan_variant false))
+ ((date 2026-12-09) (weekday Wed) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-10) (weekday Thu) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-12-11) (weekday Fri)
+ (title "St DAMASUS I P C III Cl (Priv.) W") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant true))
+ ((date 2026-12-12) (weekday Sat) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 2nd Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-13) (weekday Sun)
+ (title "3rd SUNDAY of ADVENT (GAUDETE SUNDAY) I Cl V/Rose")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-12-14) (weekday Mon) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-15) (weekday Tue) (title "FERIA III Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-16) (weekday Wed)
+ (title "EMBER WEDNESDAY of ADVENT II Cl V") (formulary_override ())
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-17) (weekday Thu) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 3rd Sunday of Advent (Gaudete Sunday)"))
+ (bvm_numeral ()) (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-18) (weekday Fri) (title "EMBER FRIDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-12-19) (weekday Sat) (title "EMBER SATURDAY of ADVENT II Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-12-20) (weekday Sun) (title "4th SUNDAY of ADVENT I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (true))
+ (praef ("Pr of the Trinity")) (has_diocesan_variant false))
+ ((date 2026-12-21) (weekday Mon) (title "St THOMAS \194\167 Ap II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Apostles")) (has_diocesan_variant false))
+ ((date 2026-12-22) (weekday Tue) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-23) (weekday Wed) (title "FERIA II Cl V")
+ (formulary_override ("Mass of 4th Sunday of Advent")) (bvm_numeral ())
+ (gloria (false)) (creed (false)) (praef ("Common Pr"))
+ (has_diocesan_variant false))
+ ((date 2026-12-24) (weekday Thu)
+ (title "VIGIL of The NATIVITY of OUR LORD I Cl V")
+ (formulary_override ()) (bvm_numeral ()) (gloria (false)) (creed (false))
+ (praef ("Common Pr")) (has_diocesan_variant false))
+ ((date 2026-12-25) (weekday Fri) (title "The NATIVITY of OUR LORD I Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef
+ ("Pr of the Nativity Proper Communic at Midnight noctem sacratissimam at"))
+ (has_diocesan_variant false))
+ ((date 2026-12-26) (weekday Sat)
+ (title "St STEPHEN \194\167 Protomartyr II Cl R") (formulary_override ())
+ (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2026-12-27) (weekday Sun)
+ (title "SUNDAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2026-12-28) (weekday Mon) (title "The HOLY INNOCENTS MM II Cl R")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2026-12-29) (weekday Tue)
+ (title "5th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant true))
+ ((date 2026-12-30) (weekday Wed)
+ (title "6th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false))
+ ((date 2026-12-31) (weekday Thu)
+ (title "7th DAY within the OCTAVE of the NATIVITY II Cl W")
+ (formulary_override ()) (bvm_numeral ()) (gloria (true)) (creed (true))
+ (praef ("Pr of the Nativity Proper Communic diem sacratissimum"))
+ (has_diocesan_variant false)))
diff --git a/test/golden/grid-2027.html b/test/golden/grid-2027.html
index daa6ba5..92a73ec 100644
--- a/test/golden/grid-2027.html
+++ b/test/golden/grid-2027.html
@@ -131,10 +131,10 @@
<td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="white"><span class="dom">1</span>St. Joseph the Workman<span class="sigla">Col 3:14-15, 17, 23-24 &middot; Matt 13:54-58</span></td>
</tr>
<tr>
- <td class="white"><span class="dom">2</span>5th Sunday after Easter<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="violet"><span class="dom">3</span>Rogation Monday<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">4</span>St. Monica<span class="sigla">1 Tim 5:3-10 &middot; Luke 7:11-16</span></td><td class="white"><span class="dom">5</span>Vigil of the Ascension<span class="sigla">Eph 4:7-13 &middot; John 17:1-11</span></td><td class="white"><span class="dom">6</span>The Ascension of Our Lord<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">7</span>St. Stanislaus<span class="sigla">Wis 5:1-5 &middot; John 15:1-7</span></td><td class="white"><span class="dom">8</span>Our Lady&#39;s Saturday Office<span class="sigla">Ecclus 24:14-16 &middot; John 19:25-27</span></td>
+ <td class="white"><span class="dom">2</span>5th Sunday after Easter<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">3</span>Rogation Monday<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">4</span>St. Monica<span class="sigla">1 Tim 5:3-10 &middot; Luke 7:11-16</span></td><td class="white"><span class="dom">5</span>Vigil of the Ascension<span class="sigla">Eph 4:7-13 &middot; John 17:1-11</span></td><td class="white"><span class="dom">6</span>The Ascension of Our Lord<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">7</span>St. Stanislaus<span class="sigla">Wis 5:1-5 &middot; John 15:1-7</span></td><td class="white"><span class="dom">8</span>Our Lady&#39;s Saturday Office<span class="sigla">Ecclus 24:14-16 &middot; John 19:25-27</span></td>
</tr>
<tr>
- <td class="white"><span class="dom">9</span>Sunday after the Ascension<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="white"><span class="dom">10</span>St. Antoninus<span class="sigla">Ecclus 44:16-27; 45:3-20 &middot; Matt 25:14-23</span></td><td class="red"><span class="dom">11</span>Sts. Philip &amp; James<span class="sigla">Wis 5:1-5 &middot; John 14:1-13</span></td><td class="red"><span class="dom">12</span>Sts. Nereus, Achilleus, Domitilla, &amp; Pancras<span class="sigla">Wis 5:1-5 &middot; John 4:46-53</span></td><td class="white"><span class="dom">13</span>St. Robert Bellarmine<span class="sigla">Wis 7:7-14 &middot; Matt 5:13-19</span></td><td class="white"><span class="dom">14</span>Friday of the 7th Week of Eastertide<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="red"><span class="dom">15</span>Vigil of Pentecost<span class="sigla">Acts 19:1-8 &middot; John 14:15-21</span></td>
+ <td class="white"><span class="dom">9</span>Sunday after the Ascension<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="white"><span class="dom">10</span>St. Antoninus<span class="sigla">Ecclus 44:16-27; 45:3-20 &middot; Matt 25:14-23</span></td><td class="red"><span class="dom">11</span>Sts. Philip &amp; James<span class="sigla">Wis 5:1-5 &middot; John 14:1-13</span></td><td class="red"><span class="dom">12</span>Sts. Nereus, Achilleus, Domitilla, &amp; Pancras<span class="sigla">Wis 5:1-5 &middot; John 4:46-53</span></td><td class="white"><span class="dom">13</span>St. Robert Bellarmine<span class="sigla">Wis 7:7-14 &middot; Matt 5:13-19</span></td><td class="white"><span class="dom">14</span>Friday of the 7th Week of Eastertide<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">15</span>Vigil of Pentecost<span class="sigla">Acts 19:1-8 &middot; John 14:15-21</span></td>
</tr>
<tr>
<td class="red"><span class="dom">16</span>Pentecost Sunday (Whitsunday)<span class="sigla">Acts 2:1-11 &middot; John 14:23-31</span></td><td class="red"><span class="dom">17</span>Monday of Pentecost Week<span class="sigla">Acts 10:34, 42-48 &middot; John 3:16-21</span></td><td class="red"><span class="dom">18</span>Tuesday of Pentecost Week<span class="sigla">Acts 8:14-17 &middot; John 10:1-10</span></td><td class="red"><span class="dom">19</span>Pentecost Ember Wednesday<span class="sigla">Acts 5:12-16 &middot; John 6:44-52</span></td><td class="red"><span class="dom">20</span>Thursday of Pentecost Week<span class="sigla">Acts 8:5-8 &middot; Luke 9:1-6</span></td><td class="red"><span class="dom">21</span>Pentecost Ember Friday<span class="sigla">Joel 2:23-24; 2:26-27 &middot; Luke 5:17-26</span></td><td class="red"><span class="dom">22</span>Pentecost Ember Saturday<span class="sigla">Rom 5:1-5 &middot; Luke 4:38-44</span></td>
diff --git a/test/golden/grid-2027.ms b/test/golden/grid-2027.ms
index 4f71416..3432d8f 100644
--- a/test/golden/grid-2027.ms
+++ b/test/golden/grid-2027.ms
@@ -767,7 +767,7 @@ T} T{
T} T{
\fB14\fP \s-2Friday of the 7th Week of Eastertide\s+2
.br
-\s-21 Pet 4:7-11 \(bu John 15:26-27; 16:1-4\s+2
+\s-2Acts 1:1-11 \(bu Mark 16:14-20\s+2
T} T{
\fB15\fP \s-2Vigil of Pentecost\s+2
.br
diff --git a/test/golden/grid-2027.tex b/test/golden/grid-2027.tex
index 674b9c4..1585bda 100644
--- a/test/golden/grid-2027.tex
+++ b/test/golden/grid-2027.tex
@@ -151,8 +151,8 @@
\begin{tabular}{|*{7}{p{\cellw}|}}\hline
\textbf{ Sunday } & \textbf{ Monday } & \textbf{ Tuesday } & \textbf{ Wednesday } & \textbf{ Thursday } & \textbf{ Friday } & \textbf{ Saturday } \\ \hline
& & & & & & \cellcolor{cwhite}\daycell{ 1 }{ St. Joseph the Workman }{ 1st Class }{ Col 3:14-15, 17, 23-24\ \textperiodcentered\ Matt 13:54-58 } \\ \hline
-\cellcolor{cwhite}\daycell{ 2 }{ 5th Sunday after Easter }{ 2nd Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cviolet}\daycell{ 3 }{ Rogation Monday }{ 4th Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cwhite}\daycell{ 4 }{ St. Monica }{ 3rd Class }{ 1 Tim 5:3-10\ \textperiodcentered\ Luke 7:11-16 } & \cellcolor{cwhite}\daycell{ 5 }{ Vigil of the Ascension }{ 2nd Class }{ Eph 4:7-13\ \textperiodcentered\ John 17:1-11 } & \cellcolor{cwhite}\daycell{ 6 }{ The Ascension of Our Lord }{ 1st Class }{ Acts 1:1-11\ \textperiodcentered\ Mark 16:14-20 } & \cellcolor{cred}\daycell{ 7 }{ St. Stanislaus }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 15:1-7 } & \cellcolor{cwhite}\daycell{ 8 }{ Our Lady's Saturday Office }{ 4th Class }{ Ecclus 24:14-16\ \textperiodcentered\ John 19:25-27 } \\ \hline
-\cellcolor{cwhite}\daycell{ 9 }{ Sunday after the Ascension }{ 2nd Class }{ 1 Pet 4:7-11\ \textperiodcentered\ John 15:26-27; 16:1-4 } & \cellcolor{cwhite}\daycell{ 10 }{ St. Antoninus }{ 3rd Class }{ Ecclus 44:16-27; 45:3-20\ \textperiodcentered\ Matt 25:14-23 } & \cellcolor{cred}\daycell{ 11 }{ Sts. Philip \& James }{ 2nd Class }{ Wis 5:1-5\ \textperiodcentered\ John 14:1-13 } & \cellcolor{cred}\daycell{ 12 }{ Sts. Nereus, Achilleus, Domitilla, \& Pancras }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 4:46-53 } & \cellcolor{cwhite}\daycell{ 13 }{ St. Robert Bellarmine }{ 3rd Class }{ Wis 7:7-14\ \textperiodcentered\ Matt 5:13-19 } & \cellcolor{cwhite}\daycell{ 14 }{ Friday of the 7th Week of Eastertide }{ 4th Class }{ 1 Pet 4:7-11\ \textperiodcentered\ John 15:26-27; 16:1-4 } & \cellcolor{cred}\daycell{ 15 }{ Vigil of Pentecost }{ 1st Class }{ Acts 19:1-8\ \textperiodcentered\ John 14:15-21 } \\ \hline
+\cellcolor{cwhite}\daycell{ 2 }{ 5th Sunday after Easter }{ 2nd Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cwhite}\daycell{ 3 }{ Rogation Monday }{ 4th Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cwhite}\daycell{ 4 }{ St. Monica }{ 3rd Class }{ 1 Tim 5:3-10\ \textperiodcentered\ Luke 7:11-16 } & \cellcolor{cwhite}\daycell{ 5 }{ Vigil of the Ascension }{ 2nd Class }{ Eph 4:7-13\ \textperiodcentered\ John 17:1-11 } & \cellcolor{cwhite}\daycell{ 6 }{ The Ascension of Our Lord }{ 1st Class }{ Acts 1:1-11\ \textperiodcentered\ Mark 16:14-20 } & \cellcolor{cred}\daycell{ 7 }{ St. Stanislaus }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 15:1-7 } & \cellcolor{cwhite}\daycell{ 8 }{ Our Lady's Saturday Office }{ 4th Class }{ Ecclus 24:14-16\ \textperiodcentered\ John 19:25-27 } \\ \hline
+\cellcolor{cwhite}\daycell{ 9 }{ Sunday after the Ascension }{ 2nd Class }{ 1 Pet 4:7-11\ \textperiodcentered\ John 15:26-27; 16:1-4 } & \cellcolor{cwhite}\daycell{ 10 }{ St. Antoninus }{ 3rd Class }{ Ecclus 44:16-27; 45:3-20\ \textperiodcentered\ Matt 25:14-23 } & \cellcolor{cred}\daycell{ 11 }{ Sts. Philip \& James }{ 2nd Class }{ Wis 5:1-5\ \textperiodcentered\ John 14:1-13 } & \cellcolor{cred}\daycell{ 12 }{ Sts. Nereus, Achilleus, Domitilla, \& Pancras }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 4:46-53 } & \cellcolor{cwhite}\daycell{ 13 }{ St. Robert Bellarmine }{ 3rd Class }{ Wis 7:7-14\ \textperiodcentered\ Matt 5:13-19 } & \cellcolor{cwhite}\daycell{ 14 }{ Friday of the 7th Week of Eastertide }{ 4th Class }{ Acts 1:1-11\ \textperiodcentered\ Mark 16:14-20 } & \cellcolor{cred}\daycell{ 15 }{ Vigil of Pentecost }{ 1st Class }{ Acts 19:1-8\ \textperiodcentered\ John 14:15-21 } \\ \hline
\cellcolor{cred}\daycell{ 16 }{ Pentecost Sunday (Whitsunday) }{ 1st Class }{ Acts 2:1-11\ \textperiodcentered\ John 14:23-31 } & \cellcolor{cred}\daycell{ 17 }{ Monday of Pentecost Week }{ 1st Class }{ Acts 10:34, 42-48\ \textperiodcentered\ John 3:16-21 } & \cellcolor{cred}\daycell{ 18 }{ Tuesday of Pentecost Week }{ 1st Class }{ Acts 8:14-17\ \textperiodcentered\ John 10:1-10 } & \cellcolor{cred}\daycell{ 19 }{ Pentecost Ember Wednesday }{ 1st Class }{ Acts 5:12-16\ \textperiodcentered\ John 6:44-52 } & \cellcolor{cred}\daycell{ 20 }{ Thursday of Pentecost Week }{ 1st Class }{ Acts 8:5-8\ \textperiodcentered\ Luke 9:1-6 } & \cellcolor{cred}\daycell{ 21 }{ Pentecost Ember Friday }{ 1st Class }{ Joel 2:23-24; 2:26-27\ \textperiodcentered\ Luke 5:17-26 } & \cellcolor{cred}\daycell{ 22 }{ Pentecost Ember Saturday }{ 1st Class }{ Rom 5:1-5\ \textperiodcentered\ Luke 4:38-44 } \\ \hline
\cellcolor{cwhite}\daycell{ 23 }{ Trinity Sunday }{ 1st Class }{ Rom 11:33-36\ \textperiodcentered\ Matt 28:18-20 } & \cellcolor{cgreen}\daycell{ 24 }{ Monday of the 1st Week of the Time after Pentecost }{ 4th Class }{ 1 John 4:8-21\ \textperiodcentered\ Luke 6:36-42 } & \cellcolor{cwhite}\daycell{ 25 }{ St. Gregory VII }{ 3rd Class }{ 1 Pet 5:1-4; 5:10-11\ \textperiodcentered\ Matt 16:13-19 } & \cellcolor{cwhite}\daycell{ 26 }{ St. Philip Neri }{ 3rd Class }{ Wis 7:7-14\ \textperiodcentered\ Luke 12:35-40 } & \cellcolor{cwhite}\daycell{ 27 }{ Corpus Christi }{ 1st Class }{ 1 Cor 11:23-29\ \textperiodcentered\ John 6:56-59 } & \cellcolor{cwhite}\daycell{ 28 }{ St. Augustine of Canterbury }{ 3rd Class }{ 1 Thess 2:2-9\ \textperiodcentered\ Luke 10:1-9 } & \cellcolor{cwhite}\daycell{ 29 }{ St. Mary Magdalene de Pazzi }{ 3rd Class }{ 2 Cor 10:17-18; 11:1-2\ \textperiodcentered\ Matt 25:1-13 } \\ \hline
\cellcolor{cgreen}\daycell{ 30 }{ 2nd Sunday after Pentecost }{ 2nd Class }{ 1 John 3:13-18\ \textperiodcentered\ Luke 14:16-24 } & \cellcolor{cwhite}\daycell{ 31 }{ Queenship of the Blessed Virgin Mary }{ 2nd Class }{ Ecclus 24:5; 14:7; 14:9-11; 24:30-31\ \textperiodcentered\ Luke 1:26-33 } & & & & & \\ \hline
diff --git a/test/golden/grid-2027.typ b/test/golden/grid-2027.typ
index 800edf9..cc4d440 100644
--- a/test/golden/grid-2027.typ
+++ b/test/golden/grid-2027.typ
@@ -2056,7 +2056,7 @@
- table.cell(fill: cgrid.at("violet"))[
+ table.cell(fill: cgrid.at("white"))[
#block(height: cellh - 2 * cellinset, clip: true)[
#set par(leading: 0.3em)
#text(weight: "bold")[3] #text(size: 6.5pt)[Rogation Monday]
@@ -2207,7 +2207,7 @@
#text(weight: "bold")[14] #text(size: 6.5pt)[Friday of the 7th Week of Eastertide]
#v(1fr)
#text(size: 6pt)[4th Class] \
- #text(size: 6pt)[1 Pet 4:7\-11 #sym.dot.c John 15:26\-27; 16:1\-4]
+ #text(size: 6pt)[Acts 1:1\-11 #sym.dot.c Mark 16:14\-20]
]
],
diff --git a/test/golden/ordo-2027.adoc b/test/golden/ordo-2027.adoc
index 39e5ae4..93a233d 100644
--- a/test/golden/ordo-2027.adoc
+++ b/test/golden/ordo-2027.adoc
@@ -879,7 +879,7 @@ Epistle Jas 1:22-27 Gospel John 16:23-30
*3* Rogation Monday +
-class-4 · violet +
+class-4 · white +
Epistle Jas 1:22-27 Gospel John 16:23-30
+
Commemoration Sts. Alexander & Companions
@@ -952,7 +952,7 @@ Epistle Wis 7:7-14 Gospel Matt 5:13-19
*14* Friday of the 7th Week of Eastertide +
class-4 · white +
-Epistle 1 Pet 4:7-11 Gospel John 15:26-27; 16:1-4
+Epistle Acts 1:1-11 Gospel Mark 16:14-20
+
Commemoration St. Boniface
diff --git a/test/golden/ordo-2027.html b/test/golden/ordo-2027.html
index 8513909..2a3f5e1 100644
--- a/test/golden/ordo-2027.html
+++ b/test/golden/ordo-2027.html
@@ -672,9 +672,9 @@
<div class="meta">class-2 &middot; white &middot; Epistle Jas 1:22-27 &middot; Gospel John 16:23-30</div>
</div>
-<div class="day violet">
+<div class="day white">
<span class="dom">3</span>Rogation Monday
- <div class="meta">class-4 &middot; violet &middot; Epistle Jas 1:22-27 &middot; Gospel John 16:23-30</div>
+ <div class="meta">class-4 &middot; white &middot; Epistle Jas 1:22-27 &middot; Gospel John 16:23-30</div>
<div class="meta">Commemoration Sts. Alexander &amp; Companions</div>
</div>
<div class="day white">
@@ -730,7 +730,7 @@
</div>
<div class="day white">
<span class="dom">14</span>Friday of the 7th Week of Eastertide
- <div class="meta">class-4 &middot; white &middot; Epistle 1 Pet 4:7-11 &middot; Gospel John 15:26-27; 16:1-4</div>
+ <div class="meta">class-4 &middot; white &middot; Epistle Acts 1:1-11 &middot; Gospel Mark 16:14-20</div>
<div class="meta">Commemoration St. Boniface</div>
</div>
<div class="day red">
diff --git a/test/golden/ordo-2027.md b/test/golden/ordo-2027.md
index 3d96240..c90b65e 100644
--- a/test/golden/ordo-2027.md
+++ b/test/golden/ordo-2027.md
@@ -789,7 +789,7 @@
**3** Rogation Monday
-`class-4` · violet · Epistle Jas 1:22-27 · Gospel John 16:23-30
+`class-4` · white · Epistle Jas 1:22-27 · Gospel John 16:23-30
- Commemoration Sts. Alexander & Companions
@@ -853,7 +853,7 @@
**14** Friday of the 7th Week of Eastertide
-`class-4` · white · Epistle 1 Pet 4:7-11 · Gospel John 15:26-27; 16:1-4
+`class-4` · white · Epistle Acts 1:1-11 · Gospel Mark 16:14-20
- Commemoration St. Boniface
diff --git a/test/golden/ordo-2027.ms b/test/golden/ordo-2027.ms
index e029a76..c9e6f5e 100644
--- a/test/golden/ordo-2027.ms
+++ b/test/golden/ordo-2027.ms
@@ -1354,7 +1354,7 @@ May
.IP "3" 4
\fBRogation Monday\fR
.br
-\s74th Class \(bu Violet\s9
+\s74th Class \(bu White\s9
.br
\s7Epistle Jas 1:22-27\s9
.br
@@ -1464,9 +1464,9 @@ May
.br
\s74th Class \(bu White\s9
.br
-\s7Epistle 1 Pet 4:7-11\s9
+\s7Epistle Acts 1:1-11\s9
.br
-\s7Gospel John 15:26-27; 16:1-4\s9
+\s7Gospel Mark 16:14-20\s9
.br
\s7Commemoration St. Boniface\s9
.sp 0.25v
diff --git a/test/golden/ordo-2027.tex b/test/golden/ordo-2027.tex
index 0db4121..0debd17 100644
--- a/test/golden/ordo-2027.tex
+++ b/test/golden/ordo-2027.tex
@@ -1548,9 +1548,9 @@
\begin{tcolorbox}[colback=white,colframe=black!35,boxrule=0.3pt,sharp corners,boxsep=0mm,left=1.6mm,right=1.6mm,top=0.4mm,bottom=0.4mm,before skip=0.3mm,after skip=0mm]
-\fontsize{9}{9}\selectfont\bfseries 3 \fontsize{7}{9}\selectfont\mdseries\;Monday\hfill\swatch{licolviolet}\\
+\fontsize{9}{9}\selectfont\bfseries 3 \fontsize{7}{9}\selectfont\mdseries\;Monday\hfill\swatch{licolwhite}\\
\fontsize{9}{9.7}\selectfont\bfseries Rogation Monday\\
-\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ Violet \quad Epistle\ Jas 1:22-27 \quad Gospel\ John 16:23-30 \\
+\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ White \quad Epistle\ Jas 1:22-27 \quad Gospel\ John 16:23-30 \\
\fontsize{6.5}{7.4}\selectfont\mdseries Commemoration\ Sts. Alexander \& Companions
\end{tcolorbox}
@@ -1648,7 +1648,7 @@
\begin{tcolorbox}[colback=white,colframe=black!35,boxrule=0.3pt,sharp corners,boxsep=0mm,left=1.6mm,right=1.6mm,top=0.4mm,bottom=0.4mm,before skip=0.3mm,after skip=0mm]
\fontsize{9}{9}\selectfont\bfseries 14 \fontsize{7}{9}\selectfont\mdseries\;Friday\hfill\swatch{licolwhite}\\
\fontsize{9}{9.7}\selectfont\bfseries Friday of the 7th Week of Eastertide\\
-\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ White \quad Epistle\ 1 Pet 4:7-11 \quad Gospel\ John 15:26-27; 16:1-4 \\
+\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ White \quad Epistle\ Acts 1:1-11 \quad Gospel\ Mark 16:14-20 \\
\fontsize{6.5}{7.4}\selectfont\mdseries Commemoration\ St. Boniface
\end{tcolorbox}
diff --git a/test/golden/ordo-2027.txt b/test/golden/ordo-2027.txt
index 0af67b3..b2c68a3 100644
--- a/test/golden/ordo-2027.txt
+++ b/test/golden/ordo-2027.txt
@@ -728,7 +728,7 @@ May 2027
Gospel John 16:23-30
3 Rogation Monday
- class-4 · violet
+ class-4 · white
Epistle Jas 1:22-27
Gospel John 16:23-30
Commemoration Sts. Alexander & Companions
@@ -790,8 +790,8 @@ May 2027
14 Friday of the 7th Week of Eastertide
class-4 · white
- Epistle 1 Pet 4:7-11
- Gospel John 15:26-27; 16:1-4
+ Epistle Acts 1:1-11
+ Gospel Mark 16:14-20
Commemoration St. Boniface
15 Vigil of Pentecost
diff --git a/test/golden/ordo-2027.typ b/test/golden/ordo-2027.typ
index 0d87f04..23afb88 100644
--- a/test/golden/ordo-2027.typ
+++ b/test/golden/ordo-2027.typ
@@ -1480,9 +1480,9 @@
#block(width: 100%, above: 0.4mm, below: 0mm, breakable: false, stroke: 0.4pt + luma(160), inset: (x: 1.6mm, y: 0.4mm))[
#set par(leading: 0.36em)
- #text(weight: "bold")[3] #h(2mm) #text(size: 7pt)[Monday] #h(1fr) #swatch("violet") \
+ #text(weight: "bold")[3] #h(2mm) #text(size: 7pt)[Monday] #h(1fr) #swatch("white") \
#text(weight: "bold")[Rogation Monday] \
- #text(size: 6.5pt)[4th Class #sym.dot.c Violet #h(2mm) Epistle Jas 1:22\-27 #h(2mm) Gospel John 16:23\-30] \
+ #text(size: 6.5pt)[4th Class #sym.dot.c White #h(2mm) Epistle Jas 1:22\-27 #h(2mm) Gospel John 16:23\-30] \
#text(size: 6.5pt)[Commemoration Sts. Alexander & Companions]
]
@@ -1589,7 +1589,7 @@
#set par(leading: 0.36em)
#text(weight: "bold")[14] #h(2mm) #text(size: 7pt)[Friday] #h(1fr) #swatch("white") \
#text(weight: "bold")[Friday of the 7th Week of Eastertide] \
- #text(size: 6.5pt)[4th Class #sym.dot.c White #h(2mm) Epistle 1 Pet 4:7\-11 #h(2mm) Gospel John 15:26\-27; 16:1\-4] \
+ #text(size: 6.5pt)[4th Class #sym.dot.c White #h(2mm) Epistle Acts 1:1\-11 #h(2mm) Gospel Mark 16:14\-20] \
#text(size: 6.5pt)[Commemoration St. Boniface]
]
diff --git a/test/test_calendar.ml b/test/test_calendar.ml
index 132a466..9059574 100644
--- a/test/test_calendar.ml
+++ b/test/test_calendar.ml
@@ -99,9 +99,18 @@ module Fixture = struct
let rec search d = if (occupant d).Cel.rank = Lo then d else search (D.add_days d 1) in
search (D.add_days origin 1)
- (* No fixture here exercises citations -- readings is a harmless constant
- [], the same role [empty_layer] plays for the sanctoral side. *)
- let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = []
+ (* No fixture here exercises citations or the formulary -- readings is a
+ harmless constant [(None, [])], the same role [empty_layer] plays for
+ the sanctoral side. *)
+ let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = (None, [])
+
+ (* No fixture here exercises the Creed, Gloria or preface rubrics either
+ -- a rite that has not implemented them returns [false]/[None]
+ explicitly, {!Rite.t.creed}/{!Rite.t.gloria}/{!Rite.t.preface}'s own
+ documented default. *)
+ let creed ~temporal:_ ~observed:_ ~date:_ = false
+ let gloria ~temporal:_ ~observed:_ ~date:_ = false
+ let preface ~temporal:_ ~observed:_ ~date:_ = None
let rite : (season, rank) Rite.t =
{ Rite.id = "synthetic-calendar"; vocab; year_start; temporal; anchors = (fun _ -> []);
@@ -110,7 +119,10 @@ module Fixture = struct
any for a fixture; nothing here is Easter-relative, so the value
is never actually read. *)
easter = Colitur_kernel.Computus.gregorian_easter;
- rules; season_runs = [ A; B ]; transfer_target; readings }
+ (* Not a Roman rite either, so no bissextile-doubling convention:
+ identity, {!Rite.t.fixed_key}'s own documented default. *)
+ fixed_key = (fun d -> Some (D.month d, D.day d));
+ rules; season_runs = [ A; B ]; transfer_target; readings; creed; gloria; preface }
let entry ~month ~day ~slug ~rank =
{ Layer.date = (match Date_spec.fixed ~month ~day with Ok d -> d | Error e -> failwith e);
diff --git a/test/test_colitur.ml b/test/test_colitur.ml
index c873945..9eefecd 100644
--- a/test/test_colitur.ml
+++ b/test/test_colitur.ml
@@ -1,7 +1,8 @@
(* Aggregating test runner. Per-module suites live in test_<module>.ml. *)
let () =
Alcotest.run "colitur"
- [ Test_date.suite; Test_computus.suite; Test_colour.suite; Test_slug.suite; Test_names.suite;
+ [ Test_date.suite; Test_computus.suite; Test_colour.suite; Test_slug.suite; Test_mass_formulary.suite;
+ Test_names.suite;
Test_lang.suite;
Test_lang_coverage.suite;
Test_citation_coverage.suite;
@@ -12,7 +13,13 @@ let () =
Test_config.suite;
Test_overlay.suite; Test_overlay_ini.suite; Test_temporal_ef.suite; Test_validate.suite; Test_precedence.suite;
Test_calendar.suite; Test_precedence_ef.suite; Test_sanctoral_ef.suite; Test_rite_ef.suite;
- Test_differential.suite; Test_oracle.suite; Test_oracle.suite_2038; Test_oracle.suite_2035; Test_golden.suite;
+ Test_rubrics_ef.suite;
+ Test_differential.suite; Test_oracle.suite; Test_oracle.suite_2038; Test_oracle.suite_2035;
+ Test_lms_ordo.suite_2023_2024; Test_lms_ordo.suite_2024_2025; Test_lms_ordo.suite_2025_2026;
+ Test_lms_ordo.suite_allow_list; Test_fiuv_ordo.suite;
+ Test_efdotorg_ordo.suite_2024_2025; Test_efdotorg_ordo.suite_2025_2026; Test_efdotorg_ordo.suite_2026_2027;
+ Test_efdotorg_ordo.suite_allow_list;
+ Test_golden.suite;
("lectionary", Test_lectionary.suite);
("lectionary-ef", Test_lectionary_ef.suite);
Test_escape.suite;
diff --git a/test/test_differential.ml b/test/test_differential.ml
index 8c1dd8d..222328b 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -550,6 +550,17 @@ let jan_6_13_slug slug =
let nativity_octave_day_slugs =
[ "ef-nativity-octave-day-5"; "ef-nativity-octave-day-6"; "ef-nativity-octave-day-7" ]
+(* C41 (celebrant-rubrics-phase1, Bug 2, 2026-08-22): the six ferias
+ between the Ascension and the Friday before the Vigil of Pentecost that
+ repeat the Ascension's own Mass (data/ef/lectionary.sexp's own
+ [ascension_week_entries], bootstrap_lectionary.ml). The window's two
+ Saturdays are excluded here too, for the identical reason they carry no
+ lectionary entry: RG 78's votive Office of Our Lady wins first. *)
+let ascension_week_slugs =
+ [ "ef-easter-6-friday"; "ef-easter-7-monday"; "ef-easter-7-tuesday"; "ef-easter-7-wednesday";
+ "ef-easter-7-thursday"; "ef-easter-7-friday"
+ ]
+
(* C18 (ef-sanctoral-audit, 2026-08-14): the closed set of colitur
[status = Feast] sanctoral slugs whose bootstrapped [colour] was
corrected against RG 124 (data/ef/adjustments.sexp's own audit-block
@@ -1096,6 +1107,36 @@ let rg33_vigil_slugs =
[ "vigil-of-st-lawrence"; "vigil-of-the-nativity-of-st-john-the-baptist";
"vigil-of-sts-peter-paul" ]
+(* C40 -- the calendarium's own bissextile (leap-year) footnote (February,
+ docs/research/LT.txt:5011-5014; see rite_ef/temporal_ef.ml's
+ [bissextile_fixed_key] for the full citation and mechanism), implemented
+ 2026-08-22. lectio builds no such shift at all (confirmed directly
+ against the fixture: Matthias sits at 24 February and Gabriel of Our Lady
+ of Sorrows at 27 February in EVERY leap year the 2005-2050 fixture
+ covers, 11 of them), so every leap year now diverges on the two shifted
+ civil days: colitur vacates 24/27 February (Matthias/Gabriel move away)
+ and occupies 25/28 February instead, while lectio keeps the pre-shift
+ assignment on both.
+
+ Four shapes, one mechanism -- OLD position vacated (colitur no longer
+ matches lectio's still-there Matthias/Gabriel) and NEW position occupied
+ (colitur now shows a saint lectio's own unmoved date does not) -- each
+ checked by NAME on both sides, the same identity discipline C39 and
+ C6/C14 already apply, not merely a diff-set shape: a coincidental
+ same-shape diff on an unrelated 24/25/27/28 February slug would not match
+ any of the four literal-slug conjuncts below. *)
+let is_bissextile_shift_row (l : row) (c : row) ~month ~day =
+ month = 2
+ && Date.is_leap (year_of_date c.date)
+ && ((day = 24 && String.equal l.slug "matthias" && not (String.equal c.slug "matthias"))
+ || (day = 25 && String.equal c.slug "matthias" && not (String.equal l.slug "matthias"))
+ || (day = 27
+ && String.equal l.slug "gabriel-of-our-lady-of-sorrows"
+ && not (String.equal c.slug "gabriel-of-our-lady-of-sorrows"))
+ || (day = 28
+ && String.equal c.slug "gabriel-of-our-lady-of-sorrows"
+ && not (String.equal l.slug "gabriel-of-our-lady-of-sorrows")))
+
let layer_c_reason (l : row) (c : row) diffs =
let m = month_of_date l.date and d = day_of_date l.date in
if diffs = [] then None
@@ -1158,6 +1199,15 @@ let layer_c_reason (l : row) (c : row) diffs =
&& (not (List.mem c.slug rg33_vigil_slugs))
&& subset diffs [ Slug_f; Rank; Colour_f; First_f; Gospel_f ]
then Some "C39"
+ else if is_bissextile_shift_row l c ~month:m ~day:d && subset diffs [ Slug_f; Rank; Colour_f; First_f; Gospel_f ]
+ then Some "C40"
+ (* C41 -- the Ascension-repeat rubric (see [ascension_week_slugs]'s own
+ citation above). SAME slug both sides ([Slug_f] never diffs here: the
+ six slugs already exist in lectio's own EF walkback, only their
+ resolved TEXT differs), rank/season/colour agree (both an ordinary
+ Class4 Paschaltide feria), and only the citation itself changes. *)
+ else if List.mem c.slug ascension_week_slugs && subset diffs [ First_f; Gospel_f ]
+ then Some "C41"
(* C25 -- CLOSED, BVM Saturday Mass (2026-08-17), predicate removed: 0 rows.
Its days are unoccupied IV-class Saturdays, so they carry RG 78's office
and now RG 309(a)'s Mass for it, which answers before step 3's walkback
diff --git a/test/test_efdotorg_ordo.ml b/test/test_efdotorg_ordo.ml
new file mode 100644
index 0000000..6200cd9
--- /dev/null
+++ b/test/test_efdotorg_ordo.ml
@@ -0,0 +1,403 @@
+(* efdotorg-preface task (2026-08-24-colitur-celebrant-rubrics-phase1): the
+ THIRD independent preface witness, extraordinaryform.org's own three
+ annual Ordo editions (2024-2025, 2025-2026, 2026-2027). A prior task
+ (2026-08-21-colitur-celebrant-rubrics-phase1, see
+ .superpowers/sdd/2026-08-21-colitur-celebrant-rubrics-phase1/preface-
+ witnesses-report.md) DECLINED to wire this source in, for two reasons:
+ an unexplained "Advent" label in the preface column, and this corpus's
+ own known Vigil-of-St-Lawrence gap. Both are now characterisation work,
+ not blockers -- see tools/extract_efdotorg_ordo.py's own header for the
+ full account this file's own comparator relies on.
+
+ WHY THIS LAYER IS DIFFERENT FROM test_fiuv_ordo.ml/test_lms_ordo.ml:
+ this source prints ONE preface value per day (unlike the LMS Ordo's own
+ option lists), already reduced to the day's own real OFFICE by the
+ menu-trap filter baked into the generator (see that script's own
+ header, finding 1) -- so the comparison here is a single equality
+ check per day, not a membership check. It is also the only one of the
+ three witnesses whose own JSON, not a fresh pdftotext dump, is the
+ input -- the JSON is already fidelity-audited
+ (.superpowers/ordo-fidelity-report.md, 1091/1091 against an
+ independently-written parser) and is treated as the source; this file
+ does not re-parse the PDFs.
+
+ SCOPE: preface only (RG 482-499, {!Rite_ef.Rubrics_ef.preface}) -- this
+ source carries no Creed/Gloria/Te Deum data at all
+ (docs/research/ordo/PROVENANCE-ordo-corpus.md: "The extraordinaryform.org
+ editions carry NO Gloria or Creed"), so there is nothing else to
+ compare it against. *)
+
+module Cal = Colitur_kernel.Calendar
+module Layer = Colitur_kernel.Layer
+module Overlay = Colitur_kernel.Overlay
+module LD = Colitur_kernel.Liturgical_day
+module Date = Colitur_kernel.Date
+module V = Rite_ef.Vocab_ef
+module Preface = Colitur_kernel.Preface
+
+let sanctoral_path = "../data/ef/sanctoral.sexp"
+let adjustments_path = "../data/ef/adjustments.sexp"
+
+(* Duplicated, not shared -- test_fiuv_ordo.ml/test_lms_ordo.ml's own
+ identical function carries the same "no shared .mli" reasoning. *)
+let sha256_of_file path =
+ let tmp = Filename.temp_file "colitur_efdotorg_ordo_sha256" ".txt" in
+ Fun.protect
+ ~finally:(fun () -> try Sys.remove tmp with Sys_error _ -> ())
+ (fun () ->
+ let cmd = Printf.sprintf "sha256sum %s > %s" (Filename.quote path) (Filename.quote tmp) in
+ let rc = Sys.command cmd in
+ if rc <> 0 then Alcotest.failf "sha256sum exited %d for %s (is it on PATH?)" rc path;
+ let ic = open_in tmp in
+ let line =
+ try input_line ic
+ with End_of_file ->
+ close_in ic;
+ Alcotest.failf "sha256sum produced no output for %s" path
+ in
+ close_in ic;
+ match String.index_opt line ' ' with
+ | Some i -> String.sub line 0 i
+ | None -> Alcotest.failf "unexpected sha256sum output for %s: %S" path line)
+
+let real_layer () =
+ let layer =
+ match Layer.load V.rank_of_sexp sanctoral_path with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "%s: failed to load: %s" sanctoral_path e
+ in
+ let overlay =
+ match Overlay.load V.rank_of_sexp adjustments_path with
+ | Ok o -> o
+ | Error e -> Alcotest.failf "%s: failed to load: %s" adjustments_path e
+ in
+ let layer, diagnostics = Overlay.apply layer overlay in
+ Alcotest.(check (list string)) "the committed overlay applies cleanly, no diagnostics" []
+ (List.map Overlay.diagnostic_to_string diagnostics);
+ layer
+
+let real_lectionary () =
+ match Colitur_kernel.Lectionary.load "../data/ef/lectionary.sexp" with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "../data/ef/lectionary.sexp: failed to load: %s" e
+
+let real_commons () =
+ match Rite_ef.Lectionary_ef.Commons.load "../data/ef/commons.sexp" with
+ | Ok c -> c
+ | Error e -> Alcotest.failf "../data/ef/commons.sexp: failed to load: %s" e
+
+(* ---------------------------------------------------------------------- *)
+(* The Ordo side: the sexp row, mirrored from tools/extract_efdotorg_ordo.py's *)
+(* own row shape. *)
+(* ---------------------------------------------------------------------- *)
+
+open Sexplib0.Sexp_conv
+
+type ordo_row = { date : string; mass : string option; cls : int option; colour : string option; praef : string option }
+[@@deriving sexp]
+
+let ordo_rows fixture_path =
+ let sexp =
+ try Sexplib.Sexp.load_sexp fixture_path
+ with e -> Alcotest.failf "%s: failed to load: %s" fixture_path (Printexc.to_string e)
+ in
+ list_of_sexp ordo_row_of_sexp sexp
+
+(* ---------------------------------------------------------------------- *)
+(* The colitur side, over the same window -- mirrors test_fiuv_ordo.ml's *)
+(* own [colitur_rows]. *)
+(* ---------------------------------------------------------------------- *)
+
+type colitur_row = { c_date : string; c_weekday : Date.weekday; c_preface : Preface.t option }
+
+let colitur_rows ~year_lo ~year_hi ~window_first ~window_last =
+ let layer = real_layer () in
+ let rite = Rite_ef.context ~lectionary:(real_lectionary ()) ~commons:(real_commons ()) in
+ let by_rata : (int, (V.season, V.rank) LD.t) Hashtbl.t = Hashtbl.create 800 in
+ for y = year_lo to year_hi do
+ let days = Cal.year rite layer y in
+ Array.iter (fun (d : (V.season, V.rank) LD.t) -> Hashtbl.replace by_rata (Date.to_rata d.LD.date) d) days
+ done;
+ let mk s = match Date.of_iso8601 s with Ok d -> d | Error e -> Alcotest.failf "%s: %s" s e in
+ let rows = ref [] in
+ let d = ref (mk window_first) in
+ let stop = mk window_last in
+ while Date.compare !d stop <= 0 do
+ (match Hashtbl.find_opt by_rata (Date.to_rata !d) with
+ | Some day ->
+ rows :=
+ { c_date = Date.to_iso8601 day.LD.date; c_weekday = Date.weekday day.LD.date; c_preface = day.LD.preface }
+ :: !rows
+ | None -> Alcotest.failf "no colitur day resolved for %s" (Date.to_iso8601 !d));
+ d := Date.add_days !d 1
+ done;
+ List.rev !rows
+
+(* ---------------------------------------------------------------------- *)
+(* Classification -- see tools/extract_efdotorg_ordo.py's own header, *)
+(* finding 3, for why "Advent" needs the day's own weekday rather than a *)
+(* static table entry: RG 494(b) grants the TRINITY preface on every *)
+(* Advent SUNDAY, RG 498 the residual COMMON on every Advent FERIA, and *)
+(* this source's own "Advent" label does not distinguish the two. Every *)
+(* other raw value maps 1:1 onto exactly one {!Preface.t} constructor -- *)
+(* verified exhaustive over the whole 1091-day office-selected population *)
+(* while building this comparison (16 distinct raw values: these 14 fixed *)
+(* mappings, "Advent" itself, and [None]) -- unlike the FIUV/LMS sources, *)
+(* nothing here is genuinely unclassifiable. *)
+(* ---------------------------------------------------------------------- *)
+
+let classify_praef ~(weekday : Date.weekday) (raw : string) : Preface.t option =
+ match raw with
+ | "Common" -> Some Preface.Common
+ | "For the Dead" -> Some Preface.Requiem
+ | "Easter" -> Some Preface.Easter
+ | "Lent" -> Some Preface.Lent
+ | "BVM" -> Some Preface.Bvm
+ | "Holy Trinity" -> Some Preface.Trinity
+ | "Holy Cross" -> Some Preface.Holy_cross
+ | "Nativity" -> Some Preface.Nativity
+ | "Apostles" -> Some Preface.Apostles
+ | "Ascension" -> Some Preface.Ascension
+ | "Holy Spirit" -> Some Preface.Holy_spirit
+ | "Epiphany" -> Some Preface.Epiphany
+ | "St. Joseph" -> Some Preface.St_joseph
+ | "Sacred Heart" -> Some Preface.Sacred_heart
+ | "Christ the King" -> Some Preface.Christ_the_king
+ | "Advent" -> Some (if weekday = Date.Sun then Preface.Trinity else Preface.Common)
+ | _ -> None
+
+(* ---------------------------------------------------------------------- *)
+(* data/ef/expected-divergences-efdotorg.sexp -- same shape as the other *)
+(* Ordo allow-lists' own [allow_entry]. A SEPARATE file: this Ordo is a *)
+(* FIFTH lineage (lectio/missalemeum, LMS, FIUV, and now this one), a *)
+(* different publisher and a different compiler from all three others. *)
+(* ---------------------------------------------------------------------- *)
+
+type allow_entry = { id : string; citation : string; verdict : string; note : string; expected_rows : int }
+[@@deriving sexp]
+
+let load_allow_list allow_list_path =
+ let sexps =
+ try Sexplib.Sexp.load_sexps allow_list_path
+ with e -> Alcotest.failf "%s: failed to load: %s" allow_list_path (Printexc.to_string e)
+ in
+ List.map allow_entry_of_sexp sexps
+
+let allow_list_path = "../data/ef/expected-divergences-efdotorg.sexp"
+
+(* ---------------------------------------------------------------------- *)
+(* [make_suite]: one edition's worth of tests, parameterised -- mirrors *)
+(* test_lms_ordo.ml's own shape. *)
+(* ---------------------------------------------------------------------- *)
+
+let make_suite ~label ~fixture_path ~fixture_sha256 ~window_first ~window_last ~year_lo ~year_hi ~expected_rows
+ ~expected_no_data ~allow_list_id_for_date =
+ let test_fixture_checksum () =
+ Alcotest.(check string) "fixture SHA-256 matches its provenance note" fixture_sha256
+ (sha256_of_file fixture_path)
+ in
+ let test_dates_align () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ Alcotest.(check int) (Printf.sprintf "the Ordo fixture has %d rows (%s..%s)" expected_rows window_first window_last)
+ expected_rows (List.length ordo);
+ Alcotest.(check int) "colitur resolved the same number of days" (List.length ordo) (List.length colitur);
+ (match ordo with o :: _ -> Alcotest.(check string) "first date" window_first o.date | [] -> Alcotest.fail "empty");
+ (match List.rev ordo with
+ | o :: _ -> Alcotest.(check string) "last date" window_last o.date
+ | [] -> Alcotest.fail "empty");
+ let mismatched =
+ List.filter_map
+ (fun (o, c) -> if String.equal o.date c.c_date then None else Some (o.date, c.c_date))
+ (List.combine ordo colitur)
+ in
+ Alcotest.(check (list (pair string string))) "no misaligned dates" [] mismatched
+ in
+ (* This window's own Good Friday(s), RE-DERIVED from
+ {!Colitur_kernel.Computus.gregorian_easter} for every civil year the
+ window touches (never hardcoded), plus this edition's own share of
+ the single known SOURCE GAP (2027-03-03) -- the only two shapes a row
+ can have no [praef] at all for (see tools/extract_efdotorg_ordo.py's
+ own header, findings 2 and 5). *)
+ let window_no_praef () =
+ let first_year = int_of_string (String.sub window_first 0 4) in
+ let last_year = int_of_string (String.sub window_last 0 4) in
+ let good_fridays =
+ List.map
+ (fun y -> Date.to_iso8601 (Date.add_days (Colitur_kernel.Computus.gregorian_easter y) (-2)))
+ (List.init (last_year - first_year + 1) (fun i -> first_year + i))
+ in
+ let candidates = good_fridays @ [ "2027-03-03" ] in
+ List.filter (fun d -> String.compare d window_first >= 0 && String.compare d window_last <= 0) candidates
+ |> List.sort_uniq String.compare
+ in
+ let test_praef_coverage () =
+ let ordo = ordo_rows fixture_path in
+ let no_praef = List.filter (fun o -> o.praef = None) ordo in
+ let expected = window_no_praef () in
+ Alcotest.(check int) "the no-praef population matches this window's own Good-Friday-plus-source-gap count"
+ expected_no_data (List.length no_praef);
+ Alcotest.(check (list string)) "every no-praef row is either this window's own Good Friday or the known source gap"
+ expected (List.map (fun o -> o.date) no_praef)
+ in
+ let describe_praef_mismatch (o : ordo_row) (c : colitur_row) (expected : Preface.t) =
+ Printf.sprintf "%s %S: colitur preface=%s, %s praef=%S (classified %s, weekday %s)" o.date
+ (Option.value o.mass ~default:"?")
+ (match c.c_preface with Some p -> Preface.to_string p | None -> "NONE")
+ label (Option.get o.praef) (Preface.to_string expected) (Date.weekday_to_string c.c_weekday)
+ in
+ let test_praef_matches_or_is_explained () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let allow_list = load_allow_list allow_list_path in
+ let by_id = List.map (fun e -> (e.id, e)) allow_list in
+ let unexplained = ref [] in
+ let unclassifiable = ref [] in
+ let explained_counts = Hashtbl.create 8 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.praef with
+ | None -> ()
+ | Some raw -> (
+ match classify_praef ~weekday:c.c_weekday raw with
+ | None -> unclassifiable := o.date :: !unclassifiable
+ | Some expected ->
+ if c.c_preface = Some expected then ()
+ else
+ match allow_list_id_for_date o.date with
+ | Some id ->
+ Hashtbl.replace explained_counts id (1 + try Hashtbl.find explained_counts id with Not_found -> 0)
+ | None -> unexplained := describe_praef_mismatch o c expected :: !unexplained))
+ ordo colitur;
+ Alcotest.(check (list string))
+ (Printf.sprintf "[%s] every preface mismatch is named in the allow-list -- none unexplained" label)
+ [] (List.rev !unexplained);
+ Alcotest.(check (list string))
+ (Printf.sprintf "[%s] every raw praef value classifies -- none dropped" label)
+ [] (List.rev !unclassifiable);
+ Hashtbl.iter
+ (fun id n ->
+ match List.assoc_opt id by_id with
+ | None -> Alcotest.failf "allow-list entry %s used by the comparator but not declared in %s" id allow_list_path
+ | Some e -> Alcotest.(check int) (Printf.sprintf "%s: expected_rows matches the actual count" id) e.expected_rows n)
+ explained_counts
+ in
+ (* The known Vigil-of-St-Lawrence corpus gap (tools/extract_efdotorg_ordo.py's
+ own header, finding 4; docs/research/ordo/PROVENANCE-ordo-corpus.md;
+ .superpowers/ordo-class-report.md) is RECONFIRMED present, but its
+ effect on THIS axis now differs by year -- checked per date, not
+ assumed uniform, because colitur's own CURRENT behaviour (RG 33's
+ third trigger, which landed after the reports above were written --
+ CLAUDE.md's own warning that `day`/`readings` output is not stable
+ across commits is exactly this) already omits the vigil in SOME of
+ these years for its own, entirely independent reason:
+ - 2025-08-09 (Saturday): colitur's own RG33-third-trigger ALSO
+ omits the vigil this year (RG 78's BVM Saturday Office wins
+ outright), and Rule A (this generator's own finding 6) picks the
+ SAME office from the corpus's own listing -- a full, direct
+ match (office identity AND preface), not a lucky coincidence
+ limited to preface alone.
+ - 2027-08-09 (Monday): colitur's own vigil IS genuinely observed
+ this year (RG33's trigger does not fire); the corpus still shows
+ no trace of it at all -- STILL the known gap, reconfirmed, naming
+ St Romanus instead -- but both the true Vigil (Class3, no
+ title-preface trigger) and the corpus's own substitute fall
+ through RG 482's chain to the identical Common preface, so the
+ identity error stays invisible to this one axis. Asserted
+ POSITIVELY (not merely "no failure occurred") so a future change
+ giving either office a real trigger would surface here.
+ - 2026-08-09 (Sunday): the vigil is impeded on every source (a
+ Sunday outranks a Class3 vigil outright); no special case is
+ needed and none is asserted here. *)
+ let test_known_vigil_of_st_lawrence_shape () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let by_date = List.combine ordo colitur in
+ let find d = List.find_opt (fun ((o : ordo_row), _) -> String.equal o.date d) by_date in
+ let in_window d = String.compare d window_first >= 0 && String.compare d window_last <= 0 in
+ (match find "2025-08-09" with
+ | Some (o, c) when in_window "2025-08-09" ->
+ Alcotest.(check (option string)) "2025-08-09: Rule A selects the BVM Saturday Office directly" (Some "BVM")
+ o.praef;
+ Alcotest.(check (option string))
+ "2025-08-09: colitur's own answer is the same office (RG33 3rd trigger + RG78)" (Some "bvm")
+ (Option.map Preface.to_string c.c_preface)
+ | _ -> ());
+ match find "2027-08-09" with
+ | Some (o, c) when in_window "2027-08-09" ->
+ Alcotest.(check (option string))
+ "2027-08-09: the known gap is reconfirmed -- the corpus still shows no Vigil of St Lawrence"
+ (Some "Common") o.praef;
+ Alcotest.(check (option string))
+ "2027-08-09: colitur's own real Vigil office also reads Common -- the identity error stays invisible here"
+ (Some "common") (Option.map Preface.to_string c.c_preface)
+ | _ -> ()
+ in
+ ( label,
+ [ Alcotest.test_case "fixture SHA-256 matches its provenance note" `Quick test_fixture_checksum;
+ Alcotest.test_case "streams are N rows each, dates aligned 1:1" `Quick test_dates_align;
+ Alcotest.test_case "no-praef population matches Good Friday plus the known source gap" `Quick
+ test_praef_coverage;
+ Alcotest.test_case "every preface mismatch is named in the allow-list -- none unexplained" `Quick
+ test_praef_matches_or_is_explained;
+ Alcotest.test_case "the known Vigil-of-St-Lawrence gap: reconfirmed in 2027, resolved by Rule A in 2025" `Quick
+ test_known_vigil_of_st_lawrence_shape
+ ] )
+
+(* The seven adjudicated root causes behind this comparison's own 11 row-
+ level divergences (three editions combined) -- see
+ data/ef/expected-divergences-efdotorg.sexp for the full citation of
+ each. Date-keyed, the same discipline test_lms_ordo.ml's own
+ [allow_list_id_for_date] and test_fiuv_ordo.ml's own
+ [fiuv_allow_list_id_for_date] use, and for the identical reason: an
+ entry that starts firing on an unexpected new date must be visible as
+ a real change, not silently absorbed. Shared across all three editions
+ (unlike the LMS file's per-window function) because every id here is
+ adjudicated against colitur's own DATA or RULES, not against a single
+ edition's own printing quirk -- E1/E3/E4 each recur, unchanged, in
+ more than one edition. *)
+let allow_list_id_for_date = function
+ | "2025-07-16" | "2026-07-16" | "2027-07-16" -> Some "E1"
+ | "2026-09-24" -> Some "E2"
+ | "2025-11-27" | "2026-11-27" -> Some "E3"
+ | "2025-05-06" | "2026-05-06" -> Some "E4"
+ | "2025-09-29" -> Some "E5"
+ | "2026-11-01" -> Some "E6"
+ | "2025-11-29" -> Some "E7"
+ | _ -> None
+
+let suite_2024_2025 =
+ make_suite ~label:"efdotorg-ordo-2024-2025" ~fixture_path:"fixtures/efdotorg-ordo-2024-2025.sexp"
+ ~fixture_sha256:"7de633e292fdb85415dd3ad87fcf9414fbb8f34c42772663b78e107e68c6e571" ~window_first:"2024-12-01"
+ ~window_last:"2025-11-29" ~year_lo:2023 ~year_hi:2026 ~expected_rows:364 ~expected_no_data:1
+ ~allow_list_id_for_date
+
+let suite_2025_2026 =
+ make_suite ~label:"efdotorg-ordo-2025-2026" ~fixture_path:"fixtures/efdotorg-ordo-2025-2026.sexp"
+ ~fixture_sha256:"c810ec437cae9fde785f6b3453f77e667644fb82f465b3652040bb2a3b888b9b" ~window_first:"2025-11-30"
+ ~window_last:"2026-11-28" ~year_lo:2024 ~year_hi:2027 ~expected_rows:364 ~expected_no_data:1
+ ~allow_list_id_for_date
+
+let suite_2026_2027 =
+ make_suite ~label:"efdotorg-ordo-2026-2027" ~fixture_path:"fixtures/efdotorg-ordo-2026-2027.sexp"
+ ~fixture_sha256:"19c35b45d7964dd357f92a871e81423af8217dff6c40178f3a95d3ec9c4091ea" ~window_first:"2026-11-29"
+ ~window_last:"2027-11-27" ~year_lo:2025 ~year_hi:2028 ~expected_rows:364 ~expected_no_data:2
+ ~allow_list_id_for_date
+
+(* Guards against a stale allow-list entry, the same discipline
+ test_lms_ordo.ml's own [test_allow_list_ids_are_exactly_l4] uses: a
+ STATIC check that the sexp file's own declared ids are exactly this
+ set -- not a cross-edition "did every id actually fire" proof (neither
+ test_lms_ordo.ml nor test_fiuv_ordo.ml's own analogous guard attempts
+ that either; each edition's own [test_praef_matches_or_is_explained]
+ already fails loudly if an id fires the WRONG number of times, or if a
+ real divergence names an id that does not exist at all). *)
+let test_allow_list_ids_are_exactly_e1_to_e7 () =
+ let ids = List.sort String.compare (List.map (fun e -> e.id) (load_allow_list allow_list_path)) in
+ Alcotest.(check (list string)) "the efdotorg allow-list declares exactly E1..E7"
+ [ "E1"; "E2"; "E3"; "E4"; "E5"; "E6"; "E7" ] ids
+
+let suite_allow_list =
+ ( "efdotorg-ordo-allow-list",
+ [ Alcotest.test_case "declares exactly E1..E7" `Quick test_allow_list_ids_are_exactly_e1_to_e7 ] )
diff --git a/test/test_fiuv_ordo.ml b/test/test_fiuv_ordo.ml
new file mode 100644
index 0000000..3bfed68
--- /dev/null
+++ b/test/test_fiuv_ordo.ml
@@ -0,0 +1,595 @@
+(* Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1): the
+ SEVENTH validation layer, and the first UNIVERSAL, SECOND-COMPILER
+ witness -- the FIUV (Foederatio Internationalis Una Voce) Ordo for
+ 2025-2026, compiled by Joseph Shaw, independent of the Latin Mass
+ Society's own three editions (test_lms_ordo.ml) except for sharing a
+ publisher/host (see test/fixtures/fiuv-ordo-2025-2026.sexp's own
+ provenance header, and docs/research/ordo/PROVENANCE-ordo-corpus.md,
+ for the full account of what independence this source does and does
+ not buy).
+
+ WHY THIS LAYER IS MORE VALUABLE THAN THE LMS ONE, per the task brief's
+ own four reasons: (1) UNIVERSAL -- no diocesan variants to exclude at
+ all, so this fixture's own [row] carries no [has_diocesan_variant]
+ field, unlike the LMS one; (2) IN LATIN, the rubrics' own vocabulary;
+ (3) BOTH DIRECTIONS EXPLICIT ("Gloria"/"sine Gloria", "Credo"/"sine
+ Credo") -- used here exactly as with the LMS source; (4) RECORDS THE
+ TE DEUM, the hinge of RG 431(a)'s own Mass-Gloria rule (deferred to
+ Phase 2, Breviary nn. 237-238) -- captured into the fixture, NOT
+ compared here (no colitur-side Te Deum predicate exists yet).
+
+ SCOPE: the CREED (RG 475-476, {!Rite_ef.Rubrics_ef.creed}) is the ONE
+ axis compared against colitur, per the task brief. [praef] and
+ [te_deum] are captured into the fixture (a genuinely useful data set
+ for Phase 2/3's still-unbuilt Gloria and preface rules) but
+ deliberately NOT validated here -- there is nothing on colitur's own
+ side yet to compare either against. [class_] (raw, including the FIUV
+ ordo's own explicit "III cl." vs "III cl. (Priv.)" Cum Sanctissima
+ convention, stated on its own title page) is likewise captured but not
+ compared: colitur's core is strictly the 1962 Missal with Cum
+ Sanctissima/Quo Magis modelled only as an OVERLAY, never core
+ (CLAUDE.md's own binding decision #2), so colitur's UNOVERLAID output
+ has no Cum-Sanctissima-aware notion of "III cl." vs "(Priv.)" to
+ compare this field against in the first place -- comparing it would be
+ comparing the Ordo against a question colitur's default configuration
+ was never asked. *)
+
+module Cal = Colitur_kernel.Calendar
+module Layer = Colitur_kernel.Layer
+module Overlay = Colitur_kernel.Overlay
+module LD = Colitur_kernel.Liturgical_day
+module Date = Colitur_kernel.Date
+module V = Rite_ef.Vocab_ef
+module Preface = Colitur_kernel.Preface
+
+let sanctoral_path = "../data/ef/sanctoral.sexp"
+let adjustments_path = "../data/ef/adjustments.sexp"
+let fixture_path = "fixtures/fiuv-ordo-2025-2026.sexp"
+let allow_list_path = "../data/ef/expected-divergences-fiuv.sexp"
+
+(* Duplicated, not shared -- test_lms_ordo.ml's own identical function
+ carries the same "no shared .mli" reasoning. *)
+let sha256_of_file path =
+ let tmp = Filename.temp_file "colitur_fiuv_ordo_sha256" ".txt" in
+ Fun.protect
+ ~finally:(fun () -> try Sys.remove tmp with Sys_error _ -> ())
+ (fun () ->
+ let cmd = Printf.sprintf "sha256sum %s > %s" (Filename.quote path) (Filename.quote tmp) in
+ let rc = Sys.command cmd in
+ if rc <> 0 then Alcotest.failf "sha256sum exited %d for %s (is it on PATH?)" rc path;
+ let ic = open_in tmp in
+ let line =
+ try input_line ic
+ with End_of_file ->
+ close_in ic;
+ Alcotest.failf "sha256sum produced no output for %s" path
+ in
+ close_in ic;
+ match String.index_opt line ' ' with
+ | Some i -> String.sub line 0 i
+ | None -> Alcotest.failf "unexpected sha256sum output for %s: %S" path line)
+
+let fixture_sha256 = "a744a2dbc7c8cf09590005e956c973f316209f3cf102b8035edadebf764110de"
+
+let real_layer () =
+ let layer =
+ match Layer.load V.rank_of_sexp sanctoral_path with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "%s: failed to load: %s" sanctoral_path e
+ in
+ let overlay =
+ match Overlay.load V.rank_of_sexp adjustments_path with
+ | Ok o -> o
+ | Error e -> Alcotest.failf "%s: failed to load: %s" adjustments_path e
+ in
+ let layer, diagnostics = Overlay.apply layer overlay in
+ Alcotest.(check (list string)) "the committed overlay applies cleanly, no diagnostics" []
+ (List.map Overlay.diagnostic_to_string diagnostics);
+ layer
+
+let real_lectionary () =
+ match Colitur_kernel.Lectionary.load "../data/ef/lectionary.sexp" with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "../data/ef/lectionary.sexp: failed to load: %s" e
+
+let real_commons () =
+ match Rite_ef.Lectionary_ef.Commons.load "../data/ef/commons.sexp" with
+ | Ok c -> c
+ | Error e -> Alcotest.failf "../data/ef/commons.sexp: failed to load: %s" e
+
+(* ---------------------------------------------------------------------- *)
+(* The Ordo side: the sexp row, mirrored from tools/extract_fiuv_ordo.ml's *)
+(* own [row] -- see this file's own header on why there is no *)
+(* [has_diocesan_variant] field here, unlike the LMS mirror. *)
+(* ---------------------------------------------------------------------- *)
+
+open Sexplib0.Sexp_conv
+
+type ordo_row = {
+ date : string;
+ class_ : string option;
+ title : string;
+ te_deum : bool option;
+ gloria : bool option;
+ credo : bool option;
+ praef : string option;
+ alt_te_deum : bool option;
+ (** the "-VEL-" Cum-Sanctissima-alternative office's own Te Deum,
+ when this day prints one -- see tools/extract_fiuv_ordo.ml's own
+ [row.alt_te_deum] citation. Captured, not compared here: closing
+ F3 needed [te_deum] itself to stop reading it, not a new
+ colitur-side axis to check it against. *)
+}
+[@@deriving sexp]
+
+let ordo_rows () =
+ let sexp =
+ try Sexplib.Sexp.load_sexp fixture_path
+ with e -> Alcotest.failf "%s: failed to load: %s" fixture_path (Printexc.to_string e)
+ in
+ list_of_sexp ordo_row_of_sexp sexp
+
+let window_first = "2025-11-27"
+let window_last = "2026-12-31"
+
+(* ---------------------------------------------------------------------- *)
+(* The colitur side, over the same window -- mirrors test_lms_ordo.ml's *)
+(* own [colitur_rows] exactly (a liturgical year straddles two civil *)
+(* years, so the resolution walk starts a civil year early and ends one *)
+(* late). *)
+(* ---------------------------------------------------------------------- *)
+
+type colitur_row = { c_date : string; c_creed : bool; c_gloria : bool; c_preface : Preface.t option }
+
+let colitur_rows () =
+ let layer = real_layer () in
+ let rite = Rite_ef.context ~lectionary:(real_lectionary ()) ~commons:(real_commons ()) in
+ let by_rata : (int, (V.season, V.rank) LD.t) Hashtbl.t = Hashtbl.create 800 in
+ for y = 2024 to 2027 do
+ let days = Cal.year rite layer y in
+ Array.iter (fun (d : (V.season, V.rank) LD.t) -> Hashtbl.replace by_rata (Date.to_rata d.LD.date) d) days
+ done;
+ let mk s = match Date.of_iso8601 s with Ok d -> d | Error e -> Alcotest.failf "%s: %s" s e in
+ let rows = ref [] in
+ let d = ref (mk window_first) in
+ let stop = mk window_last in
+ while Date.compare !d stop <= 0 do
+ (match Hashtbl.find_opt by_rata (Date.to_rata !d) with
+ | Some day ->
+ rows :=
+ { c_date = Date.to_iso8601 day.LD.date; c_creed = day.LD.creed; c_gloria = day.LD.gloria;
+ c_preface = day.LD.preface }
+ :: !rows
+ | None -> Alcotest.failf "no colitur day resolved for %s" (Date.to_iso8601 !d));
+ d := Date.add_days !d 1
+ done;
+ List.rev !rows
+
+(* Te Deum has no colitur-side [Liturgical_day.t] field of its own -- it is
+ a Breviary fact {!Rite_ef.Rubrics_ef.gloria} reads internally, not a Mass
+ part {!Colitur_kernel.Rite.t} exposes. Resolved separately, straight from
+ {!Rite_ef.Rubrics_ef.te_deum}, over the identical window/day set. *)
+type colitur_te_deum_row = {
+ t_date : string;
+ t_te_deum : bool;
+ t_rank : V.rank;
+ t_slug : string;
+ t_has_commemoration : bool;
+}
+
+let colitur_te_deum_rows () =
+ let layer = real_layer () in
+ let rite = Rite_ef.context ~lectionary:(real_lectionary ()) ~commons:(real_commons ()) in
+ let by_rata : (int, (V.season, V.rank) LD.t) Hashtbl.t = Hashtbl.create 800 in
+ for y = 2024 to 2027 do
+ let days = Cal.year rite layer y in
+ Array.iter (fun (d : (V.season, V.rank) LD.t) -> Hashtbl.replace by_rata (Date.to_rata d.LD.date) d) days
+ done;
+ let mk s = match Date.of_iso8601 s with Ok d -> d | Error e -> Alcotest.failf "%s: %s" s e in
+ let rows = ref [] in
+ let d = ref (mk window_first) in
+ let stop = mk window_last in
+ while Date.compare !d stop <= 0 do
+ (match Hashtbl.find_opt by_rata (Date.to_rata !d) with
+ | Some day ->
+ let te_deum =
+ Rite_ef.Rubrics_ef.te_deum ~temporal:day.LD.temporal ~observed:day.LD.observed ~date:day.LD.date
+ in
+ rows :=
+ { t_date = Date.to_iso8601 day.LD.date; t_te_deum = te_deum;
+ t_rank = day.LD.observed.Colitur_kernel.Celebration.rank;
+ t_slug = Colitur_kernel.Slug.to_string day.LD.observed.Colitur_kernel.Celebration.slug;
+ t_has_commemoration = day.LD.commemorations <> [] }
+ :: !rows
+ | None -> Alcotest.failf "no colitur day resolved for %s" (Date.to_iso8601 !d));
+ d := Date.add_days !d 1
+ done;
+ List.rev !rows
+
+(* ---------------------------------------------------------------------- *)
+(* data/ef/expected-divergences-fiuv.sexp -- same shape as the LMS/ *)
+(* missalemeum allow-lists' own [allow_entry]. A SEPARATE file: this Ordo *)
+(* is a fourth, independent lineage from all three others already in this *)
+(* project. *)
+(* ---------------------------------------------------------------------- *)
+
+type allow_entry = { id : string; citation : string; verdict : string; note : string; expected_rows : int }
+[@@deriving sexp]
+
+let load_allow_list () =
+ let sexps =
+ try Sexplib.Sexp.load_sexps allow_list_path
+ with e -> Alcotest.failf "%s: failed to load: %s" allow_list_path (Printexc.to_string e)
+ in
+ List.map allow_entry_of_sexp sexps
+
+(* ---------------------------------------------------------------------- *)
+(* Tests *)
+(* ---------------------------------------------------------------------- *)
+
+let test_fixture_checksum () =
+ Alcotest.(check string) "fixture SHA-256 matches its provenance note" fixture_sha256 (sha256_of_file fixture_path)
+
+let test_dates_align () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_rows () in
+ Alcotest.(check int) "the Ordo fixture has 400 rows (2025-11-27..2026-12-31)" 400 (List.length ordo);
+ Alcotest.(check int) "colitur resolved the same number of days" (List.length ordo) (List.length colitur);
+ (match ordo with o :: _ -> Alcotest.(check string) "first date" window_first o.date | [] -> Alcotest.fail "empty");
+ (match List.rev ordo with
+ | o :: _ -> Alcotest.(check string) "last date" window_last o.date
+ | [] -> Alcotest.fail "empty");
+ let mismatched =
+ List.filter_map
+ (fun (o, c) -> if String.equal o.date c.c_date then None else Some (o.date, c.c_date))
+ (List.combine ordo colitur)
+ in
+ Alcotest.(check (list (pair string string))) "no misaligned dates" [] mismatched
+
+(* Holy Saturday (2026-04-04) is the ONLY day this fixture shows no Credo
+ marker for -- confirmed directly against the raw source: unlike the
+ LMS Ordo (whose "no Mass" day is Good Friday, the 1955-restored Holy
+ Week having no Mass that day at all), THIS Ordo's Good Friday DOES
+ carry a Mass rubric ("Missa pr., ... Gloria, sine Credo, praef.
+ comm."), leaving Holy Saturday as the sole day with no Mass mentioned
+ at all (its own Vigil Mass is conventionally counted under Easter
+ Sunday's own date in this source, matching a real, if narrower,
+ instance of the same "a vigil Mass is dated to the day it anticipates"
+ convention the LMS characterisation already established). Asserted as
+ the ONLY such day, not merely observed once: a parsing regression that
+ swallowed a real row would otherwise silently join this bucket instead
+ of failing loudly as an unexplained mismatch. *)
+let test_creed_coverage () =
+ let ordo = ordo_rows () in
+ let no_creed = List.filter (fun o -> o.credo = None) ordo in
+ Alcotest.(check (list string)) "only Holy Saturday has no Ordo Creed marker" [ "2026-04-04" ]
+ (List.map (fun o -> o.date) no_creed)
+
+let describe_creed_mismatch (o : ordo_row) (c : colitur_row) =
+ Printf.sprintf "%s %S: colitur creed=%b, Ordo creed=%b" o.date o.title c.c_creed (Option.get o.credo)
+
+(* Which allow-list id, if any, explains a Creed mismatch on this date --
+ date-keyed, not "any declared entry excuses any mismatch", the same
+ discipline test_lms_ordo.ml's own [allow_list_id_for_date] uses and
+ for the identical reason: an entry that starts firing on an
+ UNEXPECTED new date must be visible as a real change, not silently
+ absorbed. Empty until characterisation found a real divergence to
+ name. *)
+let fiuv_allow_list_id_for_date = ([] : (string * string) list)
+
+let test_creed_matches_or_is_explained () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_rows () in
+ let allow_list = load_allow_list () in
+ let by_id = List.map (fun e -> (e.id, e)) allow_list in
+ let unexplained = ref [] in
+ let explained_counts = Hashtbl.create 8 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.credo with
+ | None -> ()
+ | Some ocreed ->
+ if Bool.equal ocreed c.c_creed then ()
+ else
+ match List.assoc_opt o.date fiuv_allow_list_id_for_date with
+ | Some id -> Hashtbl.replace explained_counts id (1 + try Hashtbl.find explained_counts id with Not_found -> 0)
+ | None -> unexplained := describe_creed_mismatch o c :: !unexplained)
+ ordo colitur;
+ Alcotest.(check (list string)) "every Creed mismatch is named in the allow-list -- none unexplained" []
+ (List.rev !unexplained);
+ Hashtbl.iter
+ (fun id n ->
+ match List.assoc_opt id by_id with
+ | None -> Alcotest.failf "allow-list entry %s used by the comparator but not declared in %s" id allow_list_path
+ | Some e -> Alcotest.(check int) (Printf.sprintf "%s: expected_rows matches the actual count" id) e.expected_rows n)
+ explained_counts;
+ List.iter
+ (fun e ->
+ if not (Hashtbl.mem explained_counts e.id) then
+ Alcotest.failf "allow-list entry %s is declared but never matched a real divergence" e.id)
+ allow_list
+
+(* ---------------------------------------------------------------------- *)
+(* Gloria (RG 431-432, {!Rite_ef.Rubrics_ef.gloria}) -- Phase 2. Same shape *)
+(* as the Creed comparison above, over the identical 400-row window. *)
+(* ---------------------------------------------------------------------- *)
+
+let test_gloria_coverage () =
+ let ordo = ordo_rows () in
+ let no_gloria = List.filter (fun o -> o.gloria = None) ordo in
+ Alcotest.(check int) "exactly one day has no Ordo Gloria marker" 1 (List.length no_gloria)
+
+let describe_gloria_mismatch (o : ordo_row) (c : colitur_row) =
+ Printf.sprintf "%s %S: colitur gloria=%b, Ordo gloria=%b" o.date o.title c.c_gloria (Option.get o.gloria)
+
+(* F1 -- OPEN, adjudicated FOR colitur. The single Gloria mismatch found:
+ Good Friday (2026-04-03). See data/ef/expected-divergences-fiuv.sexp's
+ own F1 for the full citation and the raw source text this was checked
+ against directly (docs/research/ordo/fiuv-ordo-2025-2026.pdf, page 46). *)
+let is_f1_good_friday (o : ordo_row) = String.equal o.date "2026-04-03"
+
+let test_gloria_matches_or_is_explained () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_rows () in
+ let unexplained = ref [] in
+ let f1_count = ref 0 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.gloria with
+ | None -> ()
+ | Some ogloria ->
+ if Bool.equal ogloria c.c_gloria then ()
+ else if is_f1_good_friday o then incr f1_count
+ else unexplained := describe_gloria_mismatch o c :: !unexplained)
+ ordo colitur;
+ Alcotest.(check (list string)) "every Gloria mismatch is named in the allow-list -- none unexplained" []
+ (List.rev !unexplained);
+ Alcotest.(check int) "F1 (Good Friday) count" 1 !f1_count
+
+(* ---------------------------------------------------------------------- *)
+(* Preface (RG 482-499, {!Rite_ef.Rubrics_ef.preface}) -- Phase 3. Same *)
+(* shape as Creed/Gloria above, over the identical 400-row window, using *)
+(* the [praef] column already captured into the fixture (CAPTURED, NOT *)
+(* VALIDATED at the time -- tools/extract_fiuv_ordo.ml's own [row.praef] *)
+(* citation) but never compared until now. *)
+(* *)
+(* CHARACTERISATION FIRST, per the task's own standing instruction (this
+ project has been misled by trusting an Ordo field's surface shape
+ before, four times this session alone): [praef] is RAW TRAILING TEXT
+ after the literal token "praef." to the end of the primary Mass
+ clause -- it is not a clean enum, it can carry an arbitrary tail of
+ unrelated rubrical prose glued on by the same token-flattening that
+ produces it (Good Friday's own [gloria]/F1 finding above is the
+ worked example of exactly this shape). CLASSIFIED here by PREFIX
+ match against the FIRST WORD(S) only -- every prefix below was found
+ by direct inspection of the fixture's own distinct [praef] values
+ (test/fixtures/fiuv-ordo-2025-2026.sexp, 400 rows, all read by hand
+ while building this comparison) and cross-checked against the primary
+ rubric text, not guessed. Two genuine EXCEPTION SHAPES, THREE rows,
+ found the same way:
+
+ - Christmas Day (both of them -- the fixture's own window, 27
+ November 2025-31 December 2026, spans thirteen months and TWO 25
+ Decembers, confirmed by running the coverage test below before
+ pinning it at "two", not three, the first time) and Epiphany Day
+ (2026-01-06, the window's only one) print "praef. et Communic..."
+ -- an ELLIPSIS: the compiler treats "this feast's own [i.e.
+ obviously implied] preface" as not needing its own name restated
+ on the ONE day that IS that feast, unlike every octave/de-Tempore
+ day governed by the SAME feast (which always restates the name
+ explicitly, e.g. 26 December's own "de Nativ."). Confirmed by
+ direct inspection: no OTHER day in the fixture omits the name this
+ way. [classify_praef] returns [None] (unrecognised) for all three
+ rather than special-casing them by date -- both feasts are
+ independently, directly citable from RG 484(a)/485(a)'s own text
+ (the Nativity/Epiphany feast itself is the paradigm case each
+ clause names first), so the oracle's corroboration is not needed
+ to trust colitur's own answer on these dates, and forcing a match
+ here would mean trusting an inference about the source's own
+ ellipsis rather than reading it.
+ - Good Friday (2026-04-03) prints "comm. Feria VI prima in mense." --
+ classifies cleanly as [Common] by the same prefix rule as any
+ other day, but this file's own F1 (Gloria, above) already
+ adjudicated this EXACT date's raw text as unreliable (a copied,
+ not a considered, line -- confirmed against the PDF's own page
+ image, not merely the extracted fixture). The same defect
+ extends to whatever trails "praef." on the identical corrupted
+ line: excluded from this comparison by reusing [is_f1_good_friday]
+ directly, not re-argued. *)
+
+let has_prefix ~prefix s =
+ String.length s >= String.length prefix && String.sub s 0 (String.length prefix) = prefix
+
+(* Every prefix below maps 1:1 onto exactly one branch of
+ {!Rite_ef.Rubrics_ef.preface}'s own priority order -- see that
+ function's own header for the full citation of each. Order does not
+ matter here (unlike in [preface] itself): the Ordo's own printed text
+ never carries two of these prefixes on the same row, so this is a
+ partition, not a priority list. *)
+let praef_prefixes =
+ [ ("comm.", Preface.Common);
+ ("Trinit.", Preface.Trinity);
+ ("Quadr.", Preface.Lent);
+ ("de Sancta Cruce", Preface.Holy_cross);
+ ("Pasch.", Preface.Easter);
+ ("etc. ut in festo", Preface.Easter);
+ (* Easter-octave ferias, "as on the feast [of Easter]" -- e.g. 6
+ April 2026, "etc. ut in festo., ad Ite, missa est additur duplex
+ Alleluia." *)
+ ("Ascensionis", Preface.Ascension);
+ ("de Spirito Sancto", Preface.Holy_spirit);
+ ("BMV", Preface.Bvm);
+ ("App.", Preface.Apostles);
+ ("de Nativ.", Preface.Nativity);
+ ("de Epiphania", Preface.Epiphany);
+ ("de Ss.mi Corde", Preface.Sacred_heart);
+ ("de Ss.mo Corde", Preface.Sacred_heart);
+ ("de Domino Nostro Jesu Rege", Preface.Christ_the_king);
+ ("de S Iosepho", Preface.St_joseph);
+ ("de S Ioseph", Preface.St_joseph);
+ ("defunctorum", Preface.Requiem) ]
+
+let classify_praef (s : string) : Preface.t option =
+ let rec go = function
+ | [] -> None
+ | (prefix, p) :: rest -> if has_prefix ~prefix s then Some p else go rest
+ in
+ go praef_prefixes
+
+(* Measured directly, not assumed: every one of the 400 rows' own [praef]
+ text, classified, tallied by outcome. Two rows are genuinely
+ unclassifiable by this prefix table (the ellipsis dates above); every
+ other non-[None] [praef] value classifies. Pinned so a change to
+ either the fixture or [classify_praef] that silently drops coverage
+ fails loudly here rather than merely narrowing the comparison below. *)
+let test_praef_classification_coverage () =
+ let ordo = ordo_rows () in
+ let with_praef = List.filter_map (fun o -> o.praef) ordo in
+ Alcotest.(check int) "399 of 400 rows carry a [praef] value (Holy Saturday is the one exception)" 399
+ (List.length with_praef);
+ let unclassified = List.filter (fun s -> classify_praef s = None) with_praef in
+ (* THREE rows, not two: the fixture's own window (27 November 2025-31
+ December 2026, 13 months) spans TWO Christmas Days, both printing the
+ identical ellipsis text -- found running this exact assertion, not
+ assumed from the date count alone. *)
+ Alcotest.(check int) "the three ellipsis rows (two Christmas Days, one Epiphany) are unclassified" 3
+ (List.length unclassified);
+ Alcotest.(check bool) "every unclassified row starts with the ellipsis's own \"et Communic\"" true
+ (List.for_all (has_prefix ~prefix:"et Communic") unclassified)
+
+let describe_preface_mismatch (o : ordo_row) (c : colitur_row) (expected : Preface.t) =
+ Printf.sprintf "%s %S: colitur preface=%s, Ordo praef=%S (classified %s)" o.date o.title
+ (match c.c_preface with Some p -> Preface.to_string p | None -> "-")
+ (Option.get o.praef) (Preface.to_string expected)
+
+let test_preface_matches_or_is_explained () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_rows () in
+ let unexplained = ref [] in
+ let unclassified_count = ref 0 in
+ let f1_count = ref 0 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ if is_f1_good_friday o then incr f1_count
+ else
+ match o.praef with
+ | None -> ()
+ | Some raw -> (
+ match classify_praef raw with
+ | None -> incr unclassified_count
+ | Some expected ->
+ if c.c_preface = Some expected then ()
+ else unexplained := describe_preface_mismatch o c expected :: !unexplained))
+ ordo colitur;
+ Alcotest.(check (list string)) "every classified preface difference is explained -- none unexplained" []
+ (List.rev !unexplained);
+ Alcotest.(check int) "the three ellipsis rows are skipped, not silently counted as agreement" 3
+ !unclassified_count;
+ Alcotest.(check int) "F1 (Good Friday) is skipped here too, the same root cause as the Gloria axis" 1 !f1_count
+
+(* ---------------------------------------------------------------------- *)
+(* Te Deum (Breviary 237-238, {!Rite_ef.Rubrics_ef.te_deum}) -- Phase 2, *)
+(* the mitigation the task brief names for this source's own stated *)
+(* weakness (a single, not yet scan-verified, web transcription). A *)
+(* SEPARATE colitur-side resolution ({!colitur_te_deum_rows}), since Te *)
+(* Deum has no {!Colitur_kernel.Liturgical_day.t} field of its own. *)
+(* *)
+(* The SUNDAY shape this same comparison originally found (237(b)'s own *)
+(* literal Septuagesima/Sexagesima/Quinquagesima exception, contradicted *)
+(* 15/15) is FIXED at the source ({!Rite_ef.Rubrics_ef.te_deum}'s own *)
+(* header has the correction and its full citation) -- not allow-listed, *)
+(* because it no longer diverges. Three OTHER shapes remain OPEN, *)
+(* single-witnessed (never captured by the LMS fixtures, which do not *)
+(* record Te Deum at all) -- see data/ef/expected-divergences-fiuv.sexp's *)
+(* own F2/F3/F4 for the full citations. Matched by PREDICATE, the same *)
+(* "varies by shape, not by a fixed date list" reasoning L5/L6 already *)
+(* establish for the LMS suite. *)
+(* ---------------------------------------------------------------------- *)
+
+let test_te_deum_coverage () =
+ let ordo = ordo_rows () in
+ let no_te_deum = List.filter (fun o -> o.te_deum = None) ordo in
+ Alcotest.(check int) "the unresolved-Te-Deum population matches this fixture's own measured figure" 133
+ (List.length no_te_deum)
+
+let describe_te_deum_mismatch (o : ordo_row) (t : colitur_te_deum_row) =
+ Printf.sprintf "%s %S: colitur te_deum=%b, Ordo te_deum=%b (rank=%s commemoration=%b)" o.date o.title t.t_te_deum
+ (Option.get o.te_deum) (V.rank_to_string t.t_rank) t.t_has_commemoration
+
+(* F2 (every I-class and omissible vigil), F4 (the three September Ember
+ days) and NOW F3 (the privileged-Lenten/Passiontide-feria-plus-
+ commemoration shape) were ALL THREE found against a buggy extraction
+ (see the fixture's own provenance header, "FIX HISTORY" section, and
+ {!Rite_ef.Rubrics_ef.te_deum}'s own 237(a) comment for F2/F4's own
+ account) -- re-run against the corrected data, NONE of the three fires
+ any more.
+
+ F3 specifically was NEVER a Te Deum defect on either side: the six
+ dates print a complete SECOND office after a literal "-VEL-" ("or")
+ separator -- the same saint kept outright under the 2020 decree Cum
+ Sanctissima, with its OWN "Ad Mat. ... Te Deum" lessons -- and
+ tools/extract_fiuv_ordo.ml's own [extract_te_deum] used to scan the
+ WHOLE block unbounded, so on these six days (whose PRIMARY, strict-
+ 1962 office states no "Ad Mat." of its own at all) it silently read
+ the SECOND office's Te Deum instead. Fixed at the source
+ (tools/extract_fiuv_ordo.ml's own [split_at_alt_office]); the fixture
+ re-extracted from the SAME pdftotext dump. colitur's own answer
+ ([false], the primary office's own ferial Matins) was never wrong --
+ the OTHER side of the comparison was reading the wrong printed office.
+ [te_deum] now reads [None] (unresolved, not [false]) on these six
+ dates, because the PRIMARY office's own text states no "Ad Mat." at
+ all, so there is nothing to positively confirm either direction from
+ -- consistent with [te_deum]'s own documented meaning elsewhere in
+ this fixture.
+
+ NOTE, so a reader arriving here from data/ef/expected-divergences-lms.sexp's
+ own L5 does not draw the wrong conclusion: F3 never "contradicted" L5
+ in the first place, and its removal does not corroborate L5 either.
+ Both were the SAME underlying fact read two different ways -- L5's own
+ 16 LMS dates and these 6 FIUV dates are exactly the shape the 2020
+ decree Cum Sanctissima changes, and colitur, by CLAUDE.md's own binding
+ decision 2, models the 1962 core without it. See L5's own rewritten
+ entry for the full account, including the FIUV "-VEL-" dual printing
+ as the decisive evidence for BOTH files.
+
+ Removed rather than kept as dead code with an [expected 0] pin, 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 already establish -- see that file's own history for the
+ precedent this follows. *)
+
+let test_te_deum_matches_or_is_explained () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_te_deum_rows () in
+ let unexplained = ref [] in
+ List.iter2
+ (fun (o : ordo_row) (t : colitur_te_deum_row) ->
+ if not (String.equal o.date t.t_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date t.t_date;
+ match o.te_deum with
+ | None -> ()
+ | Some otd -> if Bool.equal otd t.t_te_deum then () else unexplained := describe_te_deum_mismatch o t :: !unexplained)
+ ordo colitur;
+ Alcotest.(check (list string)) "every Te Deum mismatch is named in the allow-list -- none unexplained" []
+ (List.rev !unexplained)
+
+let suite =
+ ( "fiuv-ordo",
+ [ Alcotest.test_case "fixture SHA-256 matches its provenance note" `Quick test_fixture_checksum;
+ Alcotest.test_case "streams are 400 rows each, dates aligned 1:1" `Quick test_dates_align;
+ Alcotest.test_case "only Holy Saturday has no Ordo Creed marker" `Quick test_creed_coverage;
+ Alcotest.test_case "every Creed difference is named in the cited allow-list -- none unexplained" `Quick
+ test_creed_matches_or_is_explained;
+ Alcotest.test_case "Ordo Gloria coverage matches the measured figure" `Quick test_gloria_coverage;
+ Alcotest.test_case "every Gloria difference is named in the cited allow-list -- none unexplained" `Quick
+ test_gloria_matches_or_is_explained;
+ Alcotest.test_case "praef classification coverage matches the measured figure" `Quick
+ test_praef_classification_coverage;
+ Alcotest.test_case "every classified preface difference is explained -- none unexplained" `Quick
+ test_preface_matches_or_is_explained;
+ Alcotest.test_case "Ordo Te Deum coverage matches the measured figure" `Quick test_te_deum_coverage;
+ Alcotest.test_case "every Te Deum difference is named in the cited allow-list -- none unexplained" `Quick
+ test_te_deum_matches_or_is_explained
+ ] )
diff --git a/test/test_golden.ml b/test/test_golden.ml
index ba25d8a..c916a54 100644
--- a/test/test_golden.ml
+++ b/test/test_golden.ml
@@ -1281,6 +1281,33 @@ let test_readings_displaced_sunday_feria_known_divergent () =
2026 10 26
"2026-10-26 slug=ef-time-after-pentecost-22-monday first=Col 1:12-20. gospel=John 18:33-37"
+(* ---- The Ascension-repeat rubric (celebrant-rubrics-phase1 Bug 2 fix,
+ 2026-08-22) ----
+
+ The Missale Romanum's own Proprium de Tempore carries an explicit
+ marginal rubric immediately after the Ascension's own Mass propers
+ (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" -- every feria without its own
+ proper, from the Friday after the Ascension through the Friday before
+ the Vigil of Pentecost, repeats the Ascension's own Mass (Acts 1:1-11 /
+ Mark 16:14-20), not the preceding Sunday's. Witnessed directly: the LMS
+ Ordo prints "Mass of the Ascension" literally on every affected day of
+ this shape across all three of its own fixture windows
+ (data/ef/expected-divergences-lms.sexp's own now-closed L2).
+
+ 2031-05-23 is the exact day the bug report this task fixed was filed
+ against: the day after Ascension Thursday (2031-05-22, Easter+39), an
+ unoccupied Friday that step 3 used to walk back to
+ "ef-easter-sunday-6" -- the 5th Sunday after Easter, the wrong answer
+ -- instead of resolving at step 2 through the new
+ data/ef/lectionary.sexp entry. WHEN THIS PIN'S OWN VALUE WOULD REVERT TO
+ "Iac 1:22-27"/"Ioann 16:23-30" the fix has regressed; update it
+ deliberately then, never to make the suite pass again without checking
+ why. *)
+let test_readings_ascension_week_repeat () =
+ check_readings ~msg:"the day after Ascension repeats the Ascension's own Mass, not the 5th Sunday after Easter's"
+ 2031 5 23 "2031-05-23 slug=ef-easter-6-friday first=Acts 1:1-11 gospel=Mark 16:14-20"
(* ---- Rogation Wednesday (RG 87/88/89), movable-date-specs task ----
@@ -1315,6 +1342,95 @@ let test_rogation_wednesday_yields_to_a_feast_2026 () =
"2026-05-13 wednesday season=paschaltide week=6 slug=ef-ascension-vigil rank=class-2 colour=white \
subject=temporal name_la=- comms=[robert-bellarmine:ordinary] in=- out=[]"
+(* ---- Rogation Monday/Tuesday colour, RG 119/128/88 (celebrant-rubrics-
+ phase1 Bug 1 fix, 2026-08-22; data/ef/expected-divergences-lms.sexp's
+ now-closed L6, data/ef/expected-divergences.sexp's reopened C8) ----
+
+ {!Rite_ef.Temporal_ef.temporal}'s Rogation Monday/Tuesday branch used to
+ hardcode [Colour.Violet] with no citation. RG 119 assigns white to the
+ de-Tempore Office and Mass from the Paschal Vigil to the Pentecost Vigil
+ exclusive -- Easter+36/+37 sit inside that window -- and RG 128's own
+ exhaustive four-case violet list never names Rogation days; RG 88 ("de
+ Litaniis minoribus nihil fit in Officio") is why -- the violet belongs
+ to the Rogation MASS/procession alone, not the day's own Office. Fixed
+ to [season_colour s], the same call every other Paschaltide feria makes.
+
+ 2028 pins BOTH days at once (unlike the LMS witness, which only reaches
+ one day per fixture window): neither is impeded by a competing
+ sanctoral feast that year, so both are observed outright, both white.
+ Verified directly against `date -d`: Easter 2028-04-16, so 22/23 May are
+ Easter+36/+37. *)
+let test_rogation_monday_white_2028 () =
+ check ~msg:"2028: Rogation Monday is white (RG 119), not violet" 2028 5 22
+ "2028-05-22 monday season=paschaltide week=6 slug=ef-rogation-monday rank=class-4 colour=white \
+ subject=temporal name_la=- comms=[] in=- out=[]"
+
+let test_rogation_tuesday_white_2028 () =
+ check ~msg:"2028: Rogation Tuesday is white (RG 119), not violet" 2028 5 23
+ "2028-05-23 tuesday season=paschaltide week=6 slug=ef-rogation-tuesday rank=class-4 colour=white \
+ subject=temporal name_la=- comms=[] in=- out=[]"
+
+(* ---- The bissextile (leap-year) calendarium footnote, bissextile-shift
+ task, 2026-08-22 ----
+
+ 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 the sixth kalends
+ of March (24 February) is doubled rather than a 29th day appended, so
+ St Matthias (ordinarily 24 February) is kept on 25 February and St
+ Gabriel of Our Lady of Sorrows (ordinarily 27 February) on 28 February;
+ 24 February itself carries no fixed office that year.
+ {!Rite_ef.Temporal_ef.bissextile_fixed_key} implements this as the
+ rubric's own general MECHANISM, so a leap year moves the VACATED date's
+ slug/rank/colour away and the OCCUPIED date's toward it -- both sides
+ pinned for each saint, plus one common-year control apiece proving the
+ identity default is unchanged where the footnote does not apply. *)
+
+(* Matthias, 2044 (leap): 24 February carries no fixed office at all
+ (Class4 temporal only, zero commemorations); Matthias (Class2, an
+ Apostle) wins 25 February outright against that day's own Class4
+ feria. *)
+let test_bissextile_matthias_leap_2044 () =
+ check ~msg:"leap year: 24 February carries no fixed office, Matthias has moved away" 2044 2 24
+ "2044-02-24 wednesday season=septuagesima week=2 slug=ef-septuagesima-2-wednesday rank=class-4 colour=violet \
+ subject=temporal name_la=- comms=[] in=- out=[]";
+ check ~msg:"leap year: Matthias observed outright on 25 February, not 24" 2044 2 25
+ "2044-02-25 thursday season=septuagesima week=2 slug=matthias rank=class-2 colour=red subject=saint name_la=- \
+ comms=[] in=- out=[]"
+
+(* Matthias, 2025 (common): unaffected control -- the identity default
+ applies, Matthias stays at his ordinary 24 February. *)
+let test_bissextile_matthias_common_2025 () =
+ check ~msg:"common year: Matthias unaffected, still 24 February" 2025 2 24
+ "2025-02-24 monday season=septuagesima week=2 slug=matthias rank=class-2 colour=red subject=saint name_la=- \
+ comms=[] in=- out=[]"
+
+(* Gabriel of Our Lady of Sorrows, 2008 (leap): 27 February carries no
+ trace of him at all (not even a commemoration -- fixed_key removes him
+ from the candidate set entirely, RG 111's admission machinery never
+ sees him); on 28 February he is admitted as an ORDINARY commemoration
+ (Class3 ties the day's own privileged Lenten feria, which keeps
+ observed). A different shape from Matthias's outright win above,
+ deliberately pinned: the mechanism moves WHERE the saint is tried, not
+ whether he wins once he gets there. *)
+let test_bissextile_gabriel_leap_2008 () =
+ check ~msg:"leap year: 27 February carries no trace of Gabriel, he has moved away" 2008 2 27
+ "2008-02-27 wednesday season=lent week=3 slug=ef-lent-3-wednesday rank=class-3 colour=violet subject=temporal \
+ name_la=- comms=[] in=- out=[]";
+ check ~msg:"leap year: Gabriel admitted as an ordinary commemoration on 28 February, not 27" 2008 2 28
+ "2008-02-28 thursday season=lent week=3 slug=ef-lent-3-thursday rank=class-3 colour=violet subject=temporal \
+ name_la=- comms=[gabriel-of-our-lady-of-sorrows:ordinary] in=- out=[]"
+
+(* Gabriel of Our Lady of Sorrows, 2025 (common): unaffected control --
+ observed outright at his ordinary 27 February. *)
+let test_bissextile_gabriel_common_2025 () =
+ check ~msg:"common year: Gabriel unaffected, still observed on 27 February" 2025 2 27
+ "2025-02-27 thursday season=septuagesima week=2 slug=gabriel-of-our-lady-of-sorrows rank=class-3 colour=white \
+ subject=saint name_la=- comms=[] in=- out=[]"
+
(* RG 128, transcribed in docs/research/rules-register.md §3b: violet is used
for "II/III-class vigils outside Paschaltide". Two of colitur's five vigils
disagreed with that rule until the ef-oconnell-rubrics branch -- the
@@ -1507,8 +1623,22 @@ let suite =
Alcotest.test_case
"readings: displaced-Sunday feria pins M26 shape 2(b)'s KNOWN-WRONG walkback (2026-10-26)" `Quick
test_readings_displaced_sunday_feria_known_divergent;
+ Alcotest.test_case "readings: the Ascension-repeat rubric, the reported bug's own date (2031-05-23)" `Quick
+ test_readings_ascension_week_repeat;
Alcotest.test_case "RG87: Rogation Wednesday admitted (2024)" `Quick
test_rogation_wednesday_admitted_2024;
Alcotest.test_case "RG87/113: Rogation Wednesday yields to an impeded feast (2026)" `Quick
- test_rogation_wednesday_yields_to_a_feast_2026
+ test_rogation_wednesday_yields_to_a_feast_2026;
+ Alcotest.test_case "RG119/128: Rogation Monday is white, not violet (2028)" `Quick
+ test_rogation_monday_white_2028;
+ Alcotest.test_case "RG119/128: Rogation Tuesday is white, not violet (2028)" `Quick
+ test_rogation_tuesday_white_2028;
+ Alcotest.test_case "bissextile footnote: Matthias moves 24->25 February (leap, 2044)" `Quick
+ test_bissextile_matthias_leap_2044;
+ Alcotest.test_case "bissextile footnote: Matthias unaffected (common, 2025)" `Quick
+ test_bissextile_matthias_common_2025;
+ Alcotest.test_case "bissextile footnote: Gabriel of Our Lady of Sorrows moves 27->28 February (leap, 2008)"
+ `Quick test_bissextile_gabriel_leap_2008;
+ Alcotest.test_case "bissextile footnote: Gabriel of Our Lady of Sorrows unaffected (common, 2025)" `Quick
+ test_bissextile_gabriel_common_2025
] )
diff --git a/test/test_lectionary.ml b/test/test_lectionary.ml
index 7dbb253..59c739d 100644
--- a/test/test_lectionary.ml
+++ b/test/test_lectionary.ml
@@ -115,8 +115,14 @@ let test_ef_data_file_loads () =
([epiphanytide_opening_entries], +15); TWO hand-authored
directly from the Missal, two major movable feasts with
previously no entry at all ([movable_feast_entries], +2).
- 116 + 1 + 6 + 1 + 2 + 3 + 2 + 15 + 2 = 148. *)
- Alcotest.(check int) "entry count" 153
+ 116 + 1 + 6 + 1 + 2 + 3 + 2 + 15 + 2 = 148.
+ celebrant-rubrics-phase1, Bug 2 (2026-08-22): SIX hand-authored
+ directly from the Missal's own marginal Ascension-repeat rubric
+ ([ascension_week_entries], +6, 153 -> 159) -- see that
+ function's own comment in bootstrap_lectionary.ml for the
+ citation and why the window's two Saturdays are deliberately
+ excluded. *)
+ Alcotest.(check int) "entry count" 159
(List.length (Lectionary.entries l));
(match Lectionary.find l (slug "ef-lent-1-monday") with
| Some [ a; b ] ->
@@ -179,6 +185,34 @@ let test_ef_data_file_loads () =
scans). *)
check_entry "ef-corpus-christi" "1 Cor 11:23-29" "John 6:56-59";
check_entry "ef-sacred-heart" "Eph 3:8-12, 14-19" "John 19:31-37";
+ (* celebrant-rubrics-phase1, Bug 2: the Missal's own marginal rubric
+ after the Ascension's own Mass propers ("Diebus a feria VI post
+ Ascensionem usque ad feriam VI ante vigiliam Pentecostes
+ inclusive, dicitur Missa de festo Ascensionis") repeats the
+ Ascension's own citation on the ferias that would otherwise walk
+ back to the wrong Sunday. Two families pinned (the tail of
+ Ascension's own week; the following week), not merely one, the
+ same "more than one weekday" discipline this file already uses
+ for the Lent Ember pins above. *)
+ check_entry "ef-easter-6-friday" "Acts 1:1-11" "Mark 16:14-20";
+ check_entry "ef-easter-7-monday" "Acts 1:1-11" "Mark 16:14-20";
+ check_entry "ef-easter-7-friday" "Acts 1:1-11" "Mark 16:14-20";
+ (* [ef-easter-6-saturday] keeps its own PRE-EXISTING entry, unchanged
+ by this task -- RG 78's votive Office of Our Lady always wins an
+ otherwise-unoccupied Class4 Saturday first ([readings]' own step
+ ordering runs that branch before step 2 is ever reached), so this
+ table's own value for that slug is dead data on shipped data, but
+ it was already there before this task and touching it is out of
+ scope. [ef-easter-7-saturday] must stay ABSENT instead: that civil
+ day is the Vigil of Pentecost, a NAMED day with its own slug and
+ Mass (temporal_ef.ml's own [named]), so the generic
+ [ef-<season>-<week>-<weekday>] ferial slug this table's new
+ entries key off never gets produced there at all -- an entry
+ would be unreachable data [assert_reachable] would have refused
+ to emit, checked here too as a direct regression net. *)
+ (match Lectionary.find l (slug "ef-easter-7-saturday") with
+ | None -> ()
+ | Some _ -> Alcotest.fail "ef-easter-7-saturday: must stay absent -- the Vigil of Pentecost, named, never a ferial slug");
check_entry "ef-nativity-vigil" "Rom 1:1-6" "Matt 1:18-21";
check_entry "ef-pentecost-ember-wed" "Acts 5:12-16" "John 6:44-52.";
check_entry "ef-pentecost-ember-fri" "Joel 2:23-24; 26-27" "Luke 5:17-26";
diff --git a/test/test_lectionary_ef.ml b/test/test_lectionary_ef.ml
index d56d187..3e0880e 100644
--- a/test/test_lectionary_ef.ml
+++ b/test/test_lectionary_ef.ml
@@ -467,7 +467,7 @@ let test_step4_unreachable_commons_still_resolve () =
let for_saint s = Lectionary_ef.commons_for ~commons (Slug.of_string_exn s) in
let refs_of = function
| None -> [ "<no common>" ]
- | Some cs -> List.map (fun c -> c.Citation.reference) cs
+ | Some (_id, cs) -> List.map (fun c -> c.Citation.reference) cs
in
Alcotest.(check (list string))
"St Benedict (21 March), Common of Abbots"
@@ -580,6 +580,89 @@ let test_commons_load_rejects_bad_data () =
(Slug.of_string_exn "benedict")
= None)
+(* ---------------------------------------------------------------------- *)
+(* The formulary itself (Task 2): each step of the chain now reports HOW *)
+(* it resolved, not only what it resolved. One day per step, plus the RG *)
+(* 309(a) votive branch (fix round 1) -- the same dates this file already *)
+(* uses (and hand-verifies) elsewhere for the citations those days carry, *)
+(* so no new date needs independent checking. *)
+(* ---------------------------------------------------------------------- *)
+
+let formulary_cases =
+ [ (* step 1: a saint with his own proper -- same date as
+ [test_step1_proper_beats_any_common_john_of_god]. *)
+ (2038, 3, 8, Some "john-of-god", Colitur_kernel.Mass_formulary.Proper);
+ (* step 2: the day's own temporal slug -- same date as
+ [test_step2_lenten_feria_has_its_own], Monday of Lent I. *)
+ (2026, 2, 23, Some "ef-lent-1-monday", Colitur_kernel.Mass_formulary.Own_slug);
+ (* step 3: a feria resuming the preceding Sunday. The task brief's own
+ snippet pinned this date against week 9 ("ef-time-after-pentecost-
+ sunday-9"); running the real resolver against 2026 shows 3 August
+ 2026 is Monday of week 10, resuming 2 August's "...sunday-10" --
+ corrected per the brief's own "find the dates by running the current
+ binary if they drift" instruction. *)
+ (2026, 8, 3, Some "ef-time-after-pentecost-sunday-10",
+ Colitur_kernel.Mass_formulary.Preceding_sunday);
+ (* step 4: a saint sent to a Common -- same date as
+ [test_step4_commons_perpetua_and_felicity]; [said] is the Common's
+ OWN id (data/ef/commons.sexp), not the saint's slug. *)
+ (2038, 3, 6, Some "common-of-non-virgins-1", Colitur_kernel.Mass_formulary.Common);
+ (* Fix round 1 (coordinator review): the RG 309(a)/RG 78 Saturday votive
+ Mass of Our Lady, structurally reached between steps 4 and 2 (see
+ [readings]' own implementation comment) but tagged [Votive], not
+ [Own_slug] -- RG 431(e) ("in Missis votivis IV classis ... de B.
+ Maria Virg. quae in sabbato celebrantur") classifies this Mass, in
+ the Missal's own words, as a "Missa votiva", said in place of the
+ day's own office's Mass while the office (RG 78) itself is kept.
+ (CORRECTED, fix round 2: this previously also claimed the Latin Mass
+ Society Ordo witnesses the tag by printing "V" as an abbreviation for
+ "votive" on this day -- that was the coordinator's own misreading;
+ the Ordo's "I"-"V" are roman numerals naming which of the Missal's
+ five SEASONAL Masses is said, not the Mass's kind -- see
+ [readings]' own implementation comment for the full account.) 1 August
+ 2026 verified directly against the real resolver (`colitur day
+ 2026`), not trusted from a supplied date, given this session's own
+ drifted-pin history: a IV-class Saturday, "Officium sanctae Mariae in
+ sabbato", temporal slug [ef-time-after-pentecost-9-saturday].
+ (CORRECTED, whole-branch review fix round: [said] used to be
+ claimed "unaffected by the retag" and pinned to that same reused
+ ferial slug -- that was the defect this round fixed. [said] is
+ [None] here: the shipped data names no slug for the votive Mass
+ actually said, only for the office it replaces. The office slug
+ itself is checked separately, below, via [observed.slug], not
+ through [said] -- see {!Colitur_kernel.Mass_formulary.t}'s own
+ citation for why the two are no longer conflated.) *)
+ (2026, 8, 1, None, Colitur_kernel.Mass_formulary.Votive) ]
+
+let test_formulary_reports_its_source () =
+ List.iter
+ (fun (y, m, d, expected_slug, expected_via) ->
+ let day = day y m d in
+ match day.Colitur_kernel.Liturgical_day.formulary with
+ | None -> Alcotest.failf "%04d-%02d-%02d: no formulary" y m d
+ | Some f ->
+ Alcotest.(check (option string))
+ (Printf.sprintf "%04d-%02d-%02d slug" y m d)
+ expected_slug
+ (Option.map Colitur_kernel.Slug.to_string f.Colitur_kernel.Mass_formulary.said);
+ Alcotest.(check string)
+ (Printf.sprintf "%04d-%02d-%02d source" y m d)
+ (Colitur_kernel.Mass_formulary.source_to_string expected_via)
+ (Colitur_kernel.Mass_formulary.source_to_string
+ f.Colitur_kernel.Mass_formulary.via))
+ formulary_cases
+
+(* [said = None] on the Votive day above does not mean the office is lost --
+ {!Colitur_kernel.Mass_formulary.t}'s own citation says a caller reads it
+ off [observed.slug] instead, on the very same {!Colitur_kernel.
+ Liturgical_day.t}. Checked directly, not merely asserted: the same
+ 1 August 2026 date, same expected slug the old (pre-fix) [said] field
+ used to carry. *)
+let test_votive_office_slug_still_available_via_observed () =
+ let d = day 2026 8 1 in
+ Alcotest.(check string) "2026-08-01 observed slug" "ef-time-after-pentecost-9-saturday"
+ (Colitur_kernel.Slug.to_string d.Colitur_kernel.Liturgical_day.observed.Colitur_kernel.Celebration.slug)
+
let suite =
[ ("step 1: sanctoral proper", `Quick, test_step1_sanctoral_proper);
("step 2: own temporal proper", `Quick, test_step2_lenten_feria_has_its_own);
@@ -618,4 +701,8 @@ let suite =
("the five propers no real year reaches are present", `Quick,
test_step4_unreachable_propers_are_present);
("Commons.load rejects the four silent-degradation defects", `Quick,
- test_commons_load_rejects_bad_data) ]
+ test_commons_load_rejects_bad_data);
+ ("the formulary reports its own source, one day per step", `Quick,
+ test_formulary_reports_its_source);
+ ("the Votive office slug is still available via observed, not said", `Quick,
+ test_votive_office_slug_still_available_via_observed) ]
diff --git a/test/test_lms_ordo.ml b/test/test_lms_ordo.ml
new file mode 100644
index 0000000..0ac314e
--- /dev/null
+++ b/test/test_lms_ordo.ml
@@ -0,0 +1,1020 @@
+(* Task 6 (2026-08-21-colitur-celebrant-rubrics-phase1) built this layer
+ against ONE LMS Ordo edition (2024-2025). The Witnesses task
+ (2026-08-22, same phase) extends it to THREE editions -- 2023-2024,
+ 2024-2025, 2025-2026 -- each compared in its OWN window, counted and
+ reported SEPARATELY, never merged: a divergence appearing in one year
+ and not another is informative on its own, and merging would hide it.
+ [make_suite] below is the shared machinery Task 6 built as a single
+ flat file; every per-year fact that Task 6 hardcoded (window dates,
+ fixture SHA-256, the "only Good Friday has no Creed marker" pin, the
+ formulary-bucket totals, the BVM-Saturday population) is now a
+ parameter or a value RE-DERIVED from the rubric independently per
+ window, not copied forward -- see each call site below for the
+ per-edition numbers, which do differ (397/399/400 rows; not every
+ edition even has the same II-class "sharp pairing" saint available,
+ see [fixture_probes] in tools/extract_lms_ordo.ml's own header for
+ 2025-2026's own Joachim-is-impeded finding).
+
+ WHY THIS LAYER EXISTS, AND WHAT IT IS INDEPENDENT OF: layers 3-4
+ (test_differential.ml, test_oracle.ml) are ONE LINEAGE running Divinum
+ Officium -> missalemeum -> lectio -> colitur (CLAUDE.md's "know what
+ each layer cannot see" section); layer 5 (test_golden.ml) pins colitur's
+ own output against itself. This Ordo is compiled independently by the
+ Latin Mass Society (a printed book, England & Wales diocesan propers)
+ from the 1962 Missal/1960 rubrics directly -- it never passed through
+ Divinum Officium, missalemeum or lectio at any point, so an error
+ inherited by that whole lineage (colitur's own bootstrap included) is
+ visible here for the first time. Three editions of the SAME publisher's
+ book are still only ONE compiler's judgement (see docs/research/ordo/
+ PROVENANCE-ordo-corpus.md's own "what this corpus still cannot show" --
+ genuine cross-compiler independence needs the FIUV layer, test_fiuv_
+ ordo.ml, built separately in this same task).
+
+ SCOPE, decided after running the comparison against real data (not
+ guessed in advance -- see each fixture's own CHARACTERISATION section):
+
+ - The CREED (RG 475-476, {!Rite_ef.Rubrics_ef.creed}): compared on
+ every day, full 1:1, in every edition's own window. Exactly one day
+ per window is EXCLUDED, not silently skipped: that window's own
+ Good Friday (RE-DERIVED per window from {!Colitur_kernel.Computus.
+ gregorian_easter}, never hardcoded to a specific date) has no Mass
+ in the 1955-restored Holy Week, so the Ordo prints no Gl/Cr line at
+ all there -- [test_creed_coverage] asserts this is the ONLY such
+ day per window.
+
+ - The BVM-SATURDAY SEASONAL SELECTION (RG 309(a), "iuxta temporum
+ diversitatem", {!Rite_ef.Lectionary_ef.bvm_saturday_citations}):
+ the Ordo's own roman numeral (I-V) names WHICH of the five seasonal
+ "Missae de sancta Maria in sabbato" is said, so it validates
+ colitur's SEASONAL SELECTION, not merely that some BVM Mass was
+ chosen. Checked against every {!Colitur_kernel.Mass_formulary.
+ Votive} day inside each edition's own window.
+
+ - The FORMULARY OVERRIDE (does the day say its own Mass, or a
+ borrowed one) -- compared for THREE of {!Colitur_kernel.
+ Mass_formulary.source}'s five constructors ([Proper]/
+ [Preceding_sunday]/[Common]), on the same [Own_slug]-excluded,
+ [Votive]-covered-separately basis Task 6 established (see that
+ task's own report for the full reasoning: 11 of [Own_slug]'s
+ real days show an Ordo override anyway, a data-representation
+ ambiguity in colitur's own lectionary, not a rubric question the
+ Ordo could adjudicate).
+
+ GLORIA is extracted into every fixture (a genuine, independently useful
+ field for the still-unbuilt Phase 2 Gloria rule) but NOT compared here:
+ colitur has no {!Rite_ef.Rubrics_ef}-level Gloria predicate yet.
+
+ DIOCESAN SCOPE: colitur computes the UNIVERSAL General Roman Calendar
+ only (no diocesan overlay loaded by the differential/oracle harnesses
+ anywhere in this suite) -- every LMS edition is an England & Wales
+ diocesan Ordo, and each fixture's own provenance header quantifies how
+ many of its days carry at least one diocesan variant. Every comparison
+ in this file reads ONLY each fixture's own universal-block fields. *)
+
+module Cal = Colitur_kernel.Calendar
+module Layer = Colitur_kernel.Layer
+module Overlay = Colitur_kernel.Overlay
+module LD = Colitur_kernel.Liturgical_day
+module Date = Colitur_kernel.Date
+module Computus = Colitur_kernel.Computus
+module MF = Colitur_kernel.Mass_formulary
+module V = Rite_ef.Vocab_ef
+module TE = Rite_ef.Temporal_ef
+module Preface = Colitur_kernel.Preface
+
+let sanctoral_path = "../data/ef/sanctoral.sexp"
+let adjustments_path = "../data/ef/adjustments.sexp"
+
+(* Duplicated, not shared, from test_oracle.ml/test_differential.ml's own
+ identical function -- neither file exposes an .mli the other could
+ depend on, and this is three lines (test_oracle.ml's own comment). *)
+let sha256_of_file path =
+ let tmp = Filename.temp_file "colitur_lms_ordo_sha256" ".txt" in
+ Fun.protect
+ ~finally:(fun () -> try Sys.remove tmp with Sys_error _ -> ())
+ (fun () ->
+ let cmd = Printf.sprintf "sha256sum %s > %s" (Filename.quote path) (Filename.quote tmp) in
+ let rc = Sys.command cmd in
+ if rc <> 0 then Alcotest.failf "sha256sum exited %d for %s (is it on PATH?)" rc path;
+ let ic = open_in tmp in
+ let line =
+ try input_line ic
+ with End_of_file ->
+ close_in ic;
+ Alcotest.failf "sha256sum produced no output for %s" path
+ in
+ close_in ic;
+ match String.index_opt line ' ' with
+ | Some i -> String.sub line 0 i
+ | None -> Alcotest.failf "unexpected sha256sum output for %s: %S" path line)
+
+let real_layer () =
+ let layer =
+ match Layer.load V.rank_of_sexp sanctoral_path with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "%s: failed to load: %s" sanctoral_path e
+ in
+ let overlay =
+ match Overlay.load V.rank_of_sexp adjustments_path with
+ | Ok o -> o
+ | Error e -> Alcotest.failf "%s: failed to load: %s" adjustments_path e
+ in
+ let layer, diagnostics = Overlay.apply layer overlay in
+ Alcotest.(check (list string)) "the committed overlay applies cleanly, no diagnostics" []
+ (List.map Overlay.diagnostic_to_string diagnostics);
+ layer
+
+let real_lectionary () =
+ match Colitur_kernel.Lectionary.load "../data/ef/lectionary.sexp" with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "../data/ef/lectionary.sexp: failed to load: %s" e
+
+let real_commons () =
+ match Rite_ef.Lectionary_ef.Commons.load "../data/ef/commons.sexp" with
+ | Ok c -> c
+ | Error e -> Alcotest.failf "../data/ef/commons.sexp: failed to load: %s" e
+
+(* ---------------------------------------------------------------------- *)
+(* The Ordo side: the sexp row, mirrored (not shared -- see this file's *)
+(* own header) from tools/extract_lms_ordo.ml's own [row]. *)
+(* ---------------------------------------------------------------------- *)
+
+open Sexplib0.Sexp_conv
+
+type ordo_row = {
+ date : string;
+ weekday : string;
+ title : string;
+ formulary_override : string option;
+ bvm_numeral : string option;
+ gloria : bool option;
+ creed : bool option;
+ praef : string option;
+ has_diocesan_variant : bool;
+}
+[@@deriving sexp]
+
+let ordo_rows fixture_path =
+ let sexp =
+ try Sexplib.Sexp.load_sexp fixture_path
+ with e -> Alcotest.failf "%s: failed to load: %s" fixture_path (Printexc.to_string e)
+ in
+ list_of_sexp ordo_row_of_sexp sexp
+
+(* ---------------------------------------------------------------------- *)
+(* The colitur side, over the SAME window a given fixture covers. Mirrors *)
+(* test_oracle.ml's own [colitur_rows]: the resolution walk starts a civil *)
+(* year EARLY (and ends one late) because a liturgical year is *)
+(* Advent-anchored and straddles two civil years -- generalised from Task *)
+(* 6's single hardcoded [2023..2025] to a [~year_lo]/[~year_hi] parameter *)
+(* per window, since the three editions' own civil-year spans differ. *)
+(* ---------------------------------------------------------------------- *)
+
+type colitur_row = {
+ c_date : string;
+ c_season : V.season;
+ c_formulary : MF.t option;
+ c_creed : bool;
+ c_gloria : bool;
+ c_preface : Preface.t option;
+ c_rank : V.rank;
+ c_slug : string;
+ c_has_commemoration : bool;
+ (** whether {!Colitur_kernel.Liturgical_day.t.commemorations} is
+ non-empty -- needed by the Gloria comparison's own L5 shape
+ (RG 431(b)/n.302(b)), not by anything Task 6 built. *)
+}
+
+let colitur_rows ~year_lo ~year_hi ~window_first ~window_last =
+ let layer = real_layer () in
+ let rite = Rite_ef.context ~lectionary:(real_lectionary ()) ~commons:(real_commons ()) in
+ let by_rata : (int, (V.season, V.rank) LD.t) Hashtbl.t = Hashtbl.create 800 in
+ for y = year_lo to year_hi do
+ let days = Cal.year rite layer y in
+ Array.iter (fun (d : (V.season, V.rank) LD.t) -> Hashtbl.replace by_rata (Date.to_rata d.LD.date) d) days
+ done;
+ let mk s =
+ match Date.of_iso8601 s with Ok d -> d | Error e -> Alcotest.failf "%s: not a valid ISO-8601 date: %s" s e
+ in
+ let rows = ref [] in
+ let d = ref (mk window_first) in
+ let stop = mk window_last in
+ while Date.compare !d stop <= 0 do
+ (match Hashtbl.find_opt by_rata (Date.to_rata !d) with
+ | Some day ->
+ rows :=
+ { c_date = Date.to_iso8601 day.LD.date; c_season = day.LD.temporal.Colitur_kernel.Temporal.season;
+ c_formulary = day.LD.formulary; c_creed = day.LD.creed; c_gloria = day.LD.gloria;
+ c_preface = day.LD.preface;
+ c_rank = day.LD.observed.Colitur_kernel.Celebration.rank;
+ c_slug = Colitur_kernel.Slug.to_string day.LD.observed.Colitur_kernel.Celebration.slug;
+ c_has_commemoration = day.LD.commemorations <> [] }
+ :: !rows
+ | None -> Alcotest.failf "no colitur day resolved for %s" (Date.to_iso8601 !d));
+ d := Date.add_days !d 1
+ done;
+ List.rev !rows
+
+(* ---------------------------------------------------------------------- *)
+(* RG 309(a), "iuxta temporum diversitatem" -- INDEPENDENTLY re-derived *)
+(* from the rubric, not called from Lectionary_ef.bvm_saturday_citations. *)
+(* ---------------------------------------------------------------------- *)
+
+let expected_bvm_numeral season ~month ~day =
+ match (season : V.season) with
+ | V.Advent -> "I"
+ | V.Christmastide -> "II"
+ | V.Time_after_epiphany when month = 1 || (month = 2 && day <= 2) -> "II"
+ | V.Time_after_epiphany | V.Septuagesima | V.Lent | V.Passiontide -> "III"
+ | V.Paschaltide -> "IV"
+ | V.Time_after_pentecost -> "V"
+
+(* ---------------------------------------------------------------------- *)
+(* data/ef/expected-divergences-lms.sexp -- same shape as *)
+(* test_oracle.ml's own [allow_entry]/[load_allow_list]. ONE allow-list *)
+(* file for all three editions (they are one lineage, the same publisher *)
+(* and compiler) -- an entry's own [note] names which edition(s) it fired *)
+(* on when that matters. *)
+(* ---------------------------------------------------------------------- *)
+
+type allow_entry = { id : string; citation : string; verdict : string; note : string; expected_rows : int }
+[@@deriving sexp]
+
+let load_allow_list allow_list_path =
+ let sexps =
+ try Sexplib.Sexp.load_sexps allow_list_path
+ with e -> Alcotest.failf "%s: failed to load: %s" allow_list_path (Printexc.to_string e)
+ in
+ List.map allow_entry_of_sexp sexps
+
+(* ---------------------------------------------------------------------- *)
+(* Formulary override, restricted to Proper/Common/Preceding_sunday -- *)
+(* see this file's own header for why Own_slug is excluded, and Votive is *)
+(* covered by the BVM checks instead. Unchanged from Task 6 except for *)
+(* being read per-window rather than off a single hardcoded fixture. *)
+(* ---------------------------------------------------------------------- *)
+
+let ordinal n =
+ let suffix =
+ if n mod 100 >= 11 && n mod 100 <= 13 then "th"
+ else match n mod 10 with 1 -> "st" | 2 -> "nd" | 3 -> "rd" | _ -> "th"
+ in
+ Printf.sprintf "%d%s" n suffix
+
+let parse_sunday_slug slug =
+ let prefix = "ef-" in
+ let plen = String.length prefix in
+ if String.length slug <= plen || String.sub slug 0 plen <> prefix then None
+ else
+ let body = String.sub slug plen (String.length slug - plen) in
+ let marker = "-sunday-" in
+ let mlen = String.length marker and blen = String.length body in
+ let rec find_last i best = if i + mlen > blen then best
+ else find_last (i + 1) (if String.sub body i mlen = marker then Some i else best)
+ in
+ match find_last 0 None with
+ | None -> None
+ | Some i -> (
+ let word = String.sub body 0 i in
+ let num_str = String.sub body (i + mlen) (blen - i - mlen) in
+ match int_of_string_opt num_str with Some n -> Some (word, n) | None -> None)
+
+(* [~season] disambiguates ONE genuinely ambiguous case, found extending
+ this suite to the 2023-2024 window (2024-11-05..08): colitur's own
+ "resumed-Sunday tail" (CLAUDE.md's own term) REUSES an Epiphany Sunday's
+ own slug ([ef-time-after-epiphany-sunday-4]) for a feria whose REAL
+ calendar date falls in November, inside Time after Pentecost -- Easter
+ was late enough in 2024 that not every Epiphany Sunday got "used" before
+ Septuagesima cut the season short, so the leftover ones resume near the
+ END of the year instead. The Ordo's own prose distinguishes the two
+ occurrences of the SAME slug by wording alone: "4th Sunday after the
+ Epiphany" in January, "4th Sunday REMAINING after the Epiphany" in
+ November (verified directly against the raw dump). [c_season] is the
+ feria's own actual calendar season -- [Time_after_epiphany] for the
+ January occurrence, [Time_after_pentecost] for the November one -- so
+ comparing it against the WORD parsed out of the resumed slug ("time-
+ after-epiphany" either way) is exactly the signal needed, with no new
+ colitur-side field required. *)
+let expected_preceding_sunday_override ~(season : V.season) (word : string) (n : int) =
+ match (word, n) with
+ | "advent", 1 -> Some "Advent Sunday"
+ | "advent", 2 -> Some "2nd Sunday of Advent"
+ | "advent", 3 -> Some "3rd Sunday of Advent (Gaudete Sunday)"
+ | "advent", 4 -> Some "4th Sunday of Advent"
+ | "septuagesima", 1 -> Some "Septuagesima Sunday"
+ | "septuagesima", 2 -> Some "Sexagesima Sunday"
+ | "septuagesima", 3 -> Some "Quinquagesima Sunday"
+ | "time-after-epiphany", n when season = V.Time_after_epiphany ->
+ Some (Printf.sprintf "%s Sunday after the Epiphany" (ordinal n))
+ | "time-after-epiphany", n -> Some (Printf.sprintf "%s Sunday remaining after the Epiphany" (ordinal n))
+ | "time-after-pentecost", 24 -> Some "24th & Last Sunday After Pentecost"
+ | "time-after-pentecost", n -> Some (Printf.sprintf "%s Sunday after Pentecost" (ordinal n))
+ (* [n >= 3], no upper bound: Task 6's original [n <= 5] excluded n=6/7 on
+ the (overfit, 2024-2025-window-only) assumption that EVERY such day is
+ Ascension-adjacent. Extending to 2023-2024/2025-2026 found a REAL
+ counter-example -- Rogation Monday (RG 87-89), which also resumes
+ week 6's own Sunday but falls BEFORE Ascension, not after, and the
+ Ordo prints the ordinary "5th Sunday after Easter" there, not "Mass
+ of the Ascension". The caller now decides Ascension-adjacency by the
+ day's own DATE against {!Computus.ascension}, not by [n] -- so this
+ mapping can be trusted for n=6/7 whenever the caller does not first
+ divert to [ascension_week_override]. *)
+ | "easter", n when n >= 3 -> Some (Printf.sprintf "%s Sunday after Easter" (ordinal (n - 1)))
+ | _ -> None
+
+let expected_named_sunday_override slug ~year =
+ if String.equal slug "ef-christ-the-king" then
+ match TE.week (TE.christ_the_king year) with
+ | Some n -> Some (Printf.sprintf "%s Sunday after Pentecost" (ordinal n))
+ | None -> None
+ (* [ef-low-sunday]: a SECOND named-Sunday population reaching
+ [Preceding_sunday], found the same way [ef-christ-the-king] was --
+ absent from the 2024-2025 window Task 6 built this mapping against
+ (every Low-Sunday-week feria that year had its own proper), present
+ in both 2023-2024 (9-12 April 2024) and 2025-2026. The Ordo's own
+ text is the plain, unnumbered "Mass of Low Sunday". *)
+ else if String.equal slug "ef-low-sunday" then Some "Low Sunday"
+ else None
+
+(* See Task 6's own [ascension_week_override] citation (test_lms_ordo.ml
+ history, data/ef/expected-divergences-lms.sexp's own now-CLOSED L2,
+ celebrant-rubrics-phase1 Bug 2, 2026-08-22): STRUCTURAL, not a fixture
+ artefact -- the Ascension is a fixed Easter+39, so every feria whose own
+ [Preceding_sunday] fallback would otherwise resolve to a week-6/7 Sunday
+ falls, in SOME years, between Ascension Thursday and the following
+ Sunday. Extending this suite past the single 2024-2025 window sharpened
+ the finding: it is specifically the days AFTER Ascension (not merely
+ "any week-6/7 Preceding_sunday day") that get this treatment -- see
+ [expected_preceding_sunday_override]'s own citation for the Rogation
+ Monday counter-example that exposed the difference. [is_after_ascension]
+ below is the corrected predicate: the day's own DATE compared against
+ {!Computus.ascension} for its own year, not [n].
+
+ FIXED (celebrant-rubrics-phase1, Bug 2): data/ef/lectionary.sexp's new
+ [ascension_week_entries] now answers these six ferial slugs directly at
+ step 2 (Own_slug), so [check_formulary_overrides]'s own [Preceding_sunday]
+ branch below never reaches them any more -- moved to a dedicated
+ [Own_slug] branch in that same function, which still asserts the Ordo's
+ override reads exactly [ascension_week_override], now as a genuine
+ confirmation that colitur's OWN citation matches (previously this
+ predicate only served to EXCLUDE the population from the general
+ Preceding_sunday mapping, because colitur had no correct answer to
+ compare). This constant and [is_after_ascension] itself are still load-
+ bearing for that confirmation -- kept, not deleted, the same "the
+ regression net survives its own fix" discipline
+ data/ef/expected-divergences-lms.sexp's own L6 note states for
+ [is_l6_rogation_colour]. *)
+let ascension_week_override = "Mass of the Ascension"
+
+(* The exact six slugs data/ef/lectionary.sexp's own [ascension_week_entries]
+ (tools/bootstrap_lectionary.ml) now answers at step 2 -- gated on SLUG
+ IDENTITY, not merely [is_after_ascension date], because that date range
+ also covers "Dominica post Ascensionem" and the Vigil of Pentecost, both
+ genuinely [Own_slug] and both carrying their OWN, different citation, not
+ the Ascension's (caught live: an earlier, date-only version of this gate
+ wrongly flagged both as missing an Ordo override before this list was
+ added). *)
+let ascension_week_slugs =
+ [ "ef-easter-6-friday"; "ef-easter-7-monday"; "ef-easter-7-tuesday"; "ef-easter-7-wednesday";
+ "ef-easter-7-thursday"; "ef-easter-7-friday"
+ ]
+
+(* Bounded ABOVE by Pentecost, not merely "later than Ascension" -- a bare
+ lower bound is wrong for any date past Ascension in the SAME civil year
+ (every date from June to December satisfies "> Ascension", which a
+ first version of this predicate did and it manufactured 8 false
+ failures across the 2024-2025/2025-2026 windows, in July/November/
+ December, caught immediately by re-running against those two
+ previously-clean windows). Task 6's own original population (Friday
+ after Ascension, then the following Monday/Tuesday) already showed the
+ window extends PAST the immediately-following Sunday, not merely up to
+ it, so Pentecost -- the next fixed liturgical anchor, Easter+49 -- is
+ the natural, provable upper bound: nothing in this stretch has its own
+ proper once Ascension's octave-like privilege takes over, and Pentecost
+ itself always does (RG 91 entry 3). *)
+let is_after_ascension date =
+ let year = Date.year date in
+ Date.compare date (Computus.ascension year) > 0 && Date.compare date (Computus.pentecost year) < 0
+
+type formulary_counts = {
+ fc_bad : string list;
+ fc_proper : int;
+ fc_common : int;
+ fc_preceding_sunday : int;
+ fc_ascension_week : int;
+}
+
+let check_formulary_overrides ordo colitur =
+ let pairs = List.combine ordo colitur in
+ let proper = ref 0 and common = ref 0 and preceding_sunday = ref 0 and ascension_week = ref 0 in
+ let bad = ref [] in
+ List.iter
+ (fun ((o : ordo_row), (c : colitur_row)) ->
+ match c.c_formulary with
+ | Some { MF.via = MF.Proper; _ } ->
+ incr proper;
+ if o.formulary_override <> None then
+ bad := Printf.sprintf "%s: Proper day but Ordo shows override %s" o.date (Option.get o.formulary_override)
+ :: !bad
+ | Some { MF.via = MF.Common; _ } ->
+ incr common;
+ if o.formulary_override <> None then
+ bad := Printf.sprintf "%s: Common day but Ordo shows override %s" o.date (Option.get o.formulary_override)
+ :: !bad
+ | Some { MF.via = MF.Preceding_sunday; said } -> (
+ incr preceding_sunday;
+ let slug =
+ match said with
+ | Some s -> Colitur_kernel.Slug.to_string s
+ | None -> Alcotest.failf "%s: Preceding_sunday day with said = None (should be impossible)" o.date
+ in
+ let ordo_says = Printf.sprintf "Mass of %s" in
+ let year = int_of_string (String.sub o.date 0 4) in
+ let date = match Date.of_iso8601 o.date with Ok d -> d | Error e -> Alcotest.failf "%s: %s" o.date e in
+ if is_after_ascension date then (
+ match o.formulary_override with
+ | Some got when String.equal got ascension_week_override -> incr ascension_week
+ | Some got ->
+ bad :=
+ Printf.sprintf "%s: colitur resumed %S (after Ascension), Ordo shows %S, not the adjudicated %S"
+ o.date slug got ascension_week_override
+ :: !bad
+ | None ->
+ bad := Printf.sprintf "%s: colitur resumed %S (after Ascension), Ordo shows no override" o.date slug :: !bad)
+ else
+ let expected =
+ match parse_sunday_slug slug with
+ | Some (word, n) -> expected_preceding_sunday_override ~season:c.c_season word n
+ | None -> expected_named_sunday_override slug ~year
+ in
+ match expected with
+ | Some expected -> (
+ let expected_line = ordo_says expected in
+ match o.formulary_override with
+ | Some got when String.equal got expected_line -> ()
+ | Some got -> bad := Printf.sprintf "%s: colitur resumed %S, Ordo says %S" o.date expected_line got :: !bad
+ | None -> bad := Printf.sprintf "%s: colitur resumed %S, Ordo shows no override" o.date expected_line :: !bad)
+ | None -> (
+ match o.formulary_override with
+ | Some got when String.equal got ascension_week_override -> incr ascension_week
+ | Some got ->
+ bad :=
+ Printf.sprintf "%s: unmapped (colitur resumed %S) and Ordo shows %S, not the adjudicated %S" o.date
+ slug got ascension_week_override
+ :: !bad
+ | None ->
+ bad := Printf.sprintf "%s: unmapped (colitur resumed %S) and Ordo shows no override" o.date slug :: !bad))
+ | Some { MF.via = MF.Own_slug; said } -> (
+ (* celebrant-rubrics-phase1, Bug 2 fix: the six Ascension-week
+ ferias moved from [Preceding_sunday] (the branch above, which
+ used to special-case them via [is_after_ascension]) to
+ [Own_slug] -- data/ef/lectionary.sexp's own
+ [ascension_week_entries] now answers at step 2, before step 3
+ is ever reached. Checked HERE, not merely left to fall through
+ silently the way every OTHER [Own_slug] day already does
+ (RG 299's ordinary case, a real proper Mass, needs no Ordo
+ cross-check because nothing about it is adjudicated): this is
+ the one [Own_slug] population this suite has an OUTSIDE
+ witness for, and losing that check when the fix landed would
+ have been a silent regression net, not merely dead code -- the
+ Ordo's own override text must still read "Mass of the
+ Ascension" on exactly these days. *)
+ let slug = match said with Some s -> Colitur_kernel.Slug.to_string s | None -> "" in
+ if List.mem slug ascension_week_slugs then
+ match o.formulary_override with
+ | Some got when String.equal got ascension_week_override -> incr ascension_week
+ | Some got ->
+ bad :=
+ Printf.sprintf "%s: colitur resolved %S via Own_slug (after Ascension), Ordo shows %S, not %S"
+ o.date slug got ascension_week_override
+ :: !bad
+ | None ->
+ bad := Printf.sprintf "%s: colitur resolved %S via Own_slug (after Ascension), Ordo shows no override"
+ o.date slug :: !bad)
+ | Some { MF.via = MF.Votive; _ } | None -> ())
+ pairs;
+ { fc_bad = List.rev !bad; fc_proper = !proper; fc_common = !common; fc_preceding_sunday = !preceding_sunday;
+ fc_ascension_week = !ascension_week }
+
+(* ---------------------------------------------------------------------- *)
+(* Preface (RG 482-499, {!Rite_ef.Rubrics_ef.preface}) -- Preface-witnesses *)
+(* task (2026-08-23), extending tools/extract_lms_ordo.ml's new [praef] *)
+(* column into a real comparison, the same shape as test_fiuv_ordo.ml's *)
+(* own preface axis but with a genuinely DIFFERENT classification rule -- *)
+(* see the fixture's own provenance header, finding 5, for the full *)
+(* CHARACTERISATION FIRST account this discipline requires. *)
+(* *)
+(* THE KEY DIFFERENCE FROM FIUV: this Ordo prints OPTION LISTS ("Pr of X *)
+(* or Pr of Y or Common Pr"), not a single value per day, and several of *)
+(* the named options are NOT among the fourteen RG 484-497 enumerate *)
+(* ("Martyrs", "All Saints and Patron Saints", "the Dedication of a *)
+(* Church", "the Most Holy Sacrament", "St John the Baptist", "the *)
+(* Angels" -- checked directly against docs/research/LT.txt lines *)
+(* 3936-4020: no such clause exists there). Every raw value in this *)
+(* corpus's own universal block that carries one of these extras also *)
+(* carries a genuine RG-482 alternative alongside it (never as the row's *)
+(* own and only option) -- so [classify_praef_options] parses the FULL *)
+(* option set (splitting on the standalone token "or", never a substring *)
+(* search: checked directly that no trailing descriptive prose in this *)
+(* corpus's universal block ever uses "or" as an ordinary English *)
+(* conjunction), drops any segment that does not name one of *)
+(* {!Preface.t}'s fifteen values, and the comparison below checks colitur's *)
+(* single computed answer is a MEMBER of what survives, not string *)
+(* equality against whichever option prints first. *)
+let has_prefix ~prefix s =
+ String.length s >= String.length prefix && String.sub s 0 (String.length prefix) = prefix
+
+(* Every prefix here was read directly off the three fixtures' own 47
+ distinct universal-block [praef] values (measured, not guessed) --
+ mirrors test_fiuv_ordo.ml's own [praef_prefixes] table in spirit, but
+ this publisher's own English vocabulary, not the FIUV Ordo's Latin.
+ None of these prefixes is a prefix of another (checked): "Pr of St
+ Joseph" and "Pr of St John the Baptist" are the one pair that shares an
+ opening ("Pr of St "), disambiguated by their very next word. *)
+let praef_prefixes =
+ [ ("Common Pr", Preface.Common);
+ ("Pr of the Nativity", Preface.Nativity);
+ ("Pr of the Epiphany", Preface.Epiphany);
+ ("Pr of Lent", Preface.Lent);
+ ("Pr of the Holy Cross", Preface.Holy_cross);
+ ("Pr of Easter", Preface.Easter);
+ ("Pr of the Ascension", Preface.Ascension);
+ ("Pr of the Sacred Heart", Preface.Sacred_heart);
+ ("Pr of Our Lord Jesus Christ the King", Preface.Christ_the_king);
+ ("Pr of the Holy Spirit", Preface.Holy_spirit);
+ ("Pr of the Trinity", Preface.Trinity);
+ ("Pr of the BVM", Preface.Bvm);
+ ("Pr of St Joseph", Preface.St_joseph);
+ ("Pr of the Apostles", Preface.Apostles);
+ ("Pr of the Dead", Preface.Requiem)
+ (* Deliberately UNMAPPED, found live in this corpus's own universal
+ block (not merely in the excluded diocesan variants): "Pr of
+ Martyrs", "Pr of All Saints and Patron Saints", "Pr of the
+ Dedication of a Church", "Pr of the Most Holy Sacrament", "Pr of
+ St John the Baptist", "Pr of the Angels" -- see this section's own
+ header. A segment matching none of the fifteen prefixes above is
+ simply dropped from the parsed option set, never forced into a
+ guess. *)
+ ]
+
+let classify_praef_segment (s : string) : Preface.t option =
+ let rec go = function [] -> None | (prefix, p) :: rest -> if has_prefix ~prefix s then Some p else go rest in
+ go praef_prefixes
+
+(* Splits on the standalone token "or" (never a substring search -- see
+ this section's own header on why that is safe in this corpus), then
+ classifies each segment independently and keeps only the recognised
+ ones. *)
+let classify_praef_options (raw : string) : Preface.t list =
+ let toks = String.split_on_char ' ' raw |> List.filter (fun t -> t <> "") in
+ let rec split_on_or acc cur = function
+ | [] -> List.rev (List.rev cur :: acc)
+ | "or" :: rest -> split_on_or (List.rev cur :: acc) [] rest
+ | t :: rest -> split_on_or acc (t :: cur) rest
+ in
+ let segments = split_on_or [] [] toks in
+ List.filter_map (fun seg -> classify_praef_segment (String.concat " " seg)) segments
+
+(* ---------------------------------------------------------------------- *)
+(* [make_suite]: one edition's worth of tests, parameterised. Every count *)
+(* below is a genuine per-edition PIN (measured once against real data, *)
+(* not guessed), the same discipline every other golden/oracle fixture in *)
+(* this suite already uses -- a change to any of them is a real finding, *)
+(* not noise to silence. *)
+(* ---------------------------------------------------------------------- *)
+
+(* No Str/regex (frozen deps) -- the same hand-rolled substring test every
+ other file in this codebase reaches for (rubrics_ef.ml's own
+ [contains_substring], precedence_ef.ml's [contains_substring]). Local to
+ this file, not shared, on the same "no common .mli to hang it from"
+ footing those other copies already document. *)
+let contains_substring s ~needle =
+ let ls = String.length s and ln = String.length needle in
+ let rec at i = i + ln <= ls && (String.sub s i ln = needle || at (i + 1)) in
+ ln = 0 || at 0
+
+let make_suite ~label ~fixture_path ~fixture_sha256 ~window_first ~window_last ~year_lo ~year_hi ~allow_list_path
+ ~expected_rows ~expected_bvm_votive ~expected_proper ~expected_common ~expected_preceding_sunday
+ ~expected_ascension_week ~expected_gloria_l5 ~expected_gloria_l6 =
+ let test_fixture_checksum () =
+ Alcotest.(check string) "fixture SHA-256 matches its provenance note" fixture_sha256
+ (sha256_of_file fixture_path)
+ in
+ let test_dates_align () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ Alcotest.(check int) (Printf.sprintf "the Ordo fixture has %d rows (%s..%s)" expected_rows window_first window_last)
+ expected_rows (List.length ordo);
+ Alcotest.(check int) "colitur resolved the same number of days" (List.length ordo) (List.length colitur);
+ (match ordo with o :: _ -> Alcotest.(check string) "first date" window_first o.date | [] -> Alcotest.fail "empty");
+ (match List.rev ordo with
+ | o :: _ -> Alcotest.(check string) "last date" window_last o.date
+ | [] -> Alcotest.fail "empty");
+ let mismatched =
+ List.filter_map
+ (fun (o, c) -> if String.equal o.date c.c_date then None else Some (o.date, c.c_date))
+ (List.combine ordo colitur)
+ in
+ Alcotest.(check (list (pair string string))) "no misaligned dates" [] mismatched
+ in
+ (* This window's own Good Friday(s) (Easter-2, RE-DERIVED here from
+ {!Computus.gregorian_easter} for every civil year the window touches,
+ never hardcoded) is the only day expected to carry no Ordo Creed
+ marker at all -- Good Friday has no Mass in the 1955-restored Holy
+ Week. Exactly one such date falls inside any one edition's ~13-month
+ window (its OTHER Easter, a year apart, falls outside it), but this
+ is computed, not assumed: a window that unexpectedly contained zero or
+ two would be a real finding this test would catch. *)
+ let window_good_fridays () =
+ let first_year = int_of_string (String.sub window_first 0 4) in
+ let last_year = int_of_string (String.sub window_last 0 4) in
+ let candidates =
+ List.concat_map
+ (fun y ->
+ let gf = Date.add_days (Computus.gregorian_easter y) (-2) in
+ [ Date.to_iso8601 gf ])
+ (List.init (last_year - first_year + 1) (fun i -> first_year + i))
+ in
+ List.filter (fun d -> String.compare d window_first >= 0 && String.compare d window_last <= 0) candidates
+ in
+ let test_creed_coverage () =
+ let ordo = ordo_rows fixture_path in
+ let no_creed = List.filter (fun o -> o.creed = None) ordo in
+ let expected = window_good_fridays () in
+ Alcotest.(check (list string)) "only this window's own Good Friday has no Ordo Creed marker" expected
+ (List.map (fun o -> o.date) no_creed)
+ in
+ let describe_creed_mismatch (o : ordo_row) (c : colitur_row) =
+ Printf.sprintf "%s %S: colitur creed=%b, Ordo creed=%b (formulary=%s)" o.date o.title c.c_creed
+ (Option.get o.creed)
+ (match c.c_formulary with
+ | Some { MF.said = Some s; _ } -> Colitur_kernel.Slug.to_string s
+ | Some { MF.said = None; via = MF.Votive } -> "votive (said unnamed in the data)"
+ | Some { MF.said = None; _ } -> "NONE (said, unexpectedly outside Votive)"
+ | None -> "NONE")
+ in
+ (* Which allow-list id, if any, explains a Creed mismatch on this date.
+ Date-keyed (not merely "any mismatch is fine") deliberately: an id
+ that stops firing, or fires on a NEW date it was never adjudicated
+ for, must be visible as a real change, not silently absorbed by a
+ loose "some entry explains something" check. Task 6's own version of
+ this function declared [by_id]/[explained_counts] but never actually
+ populated the latter (the mechanism this comment sits in) -- L1 was
+ already CLOSED by the time that task shipped, so it had nothing real
+ to explain and the gap went unexercised. L4 (Witnesses task,
+ 2026-08-22, 2023-2024-only) is the first live test of it. L3's own
+ "2024-02-24" branch (bissextile-shift task, 2026-08-22) is REMOVED,
+ not left dead: the fix makes that date's Creed match outright, so the
+ branch would never fire again, and a stale date->id mapping for a
+ now-closed entry is exactly the kind of thing this file's own
+ "must be visible as a real change" discipline (this comment's own
+ opening sentence) argues against leaving in place. *)
+ let allow_list_id_for_date d = if String.equal d "2023-12-24" then Some "L4" else None in
+ let test_creed_matches_or_is_explained () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let allow_list = load_allow_list allow_list_path in
+ let by_id = List.map (fun e -> (e.id, e)) allow_list in
+ let unexplained = ref [] in
+ let explained_counts = Hashtbl.create 8 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.creed with
+ | None -> ()
+ | Some ocreed ->
+ if Bool.equal ocreed c.c_creed then ()
+ else (
+ match allow_list_id_for_date o.date with
+ | Some id -> Hashtbl.replace explained_counts id (1 + try Hashtbl.find explained_counts id with Not_found -> 0)
+ | None -> unexplained := describe_creed_mismatch o c :: !unexplained))
+ ordo colitur;
+ Alcotest.(check (list string)) (Printf.sprintf "[%s] every Creed mismatch is named in the allow-list -- none unexplained" label)
+ [] (List.rev !unexplained);
+ Hashtbl.iter
+ (fun id n ->
+ match List.assoc_opt id by_id with
+ | None -> Alcotest.failf "allow-list entry %s used by the comparator but not declared in %s" id allow_list_path
+ | Some e ->
+ Alcotest.(check int) (Printf.sprintf "%s: expected_rows matches the actual count" id) e.expected_rows n)
+ explained_counts
+ in
+ (* ---- Gloria (RG 431-432, {!Rite_ef.Rubrics_ef.gloria}) -- Phase 2 of
+ this task. Same shape as the Creed comparison immediately above:
+ coverage (which dates carry no Ordo "Gl"/"No Gl" marker at all) is
+ checked separately from the value comparison, and both are
+ date-keyed against their own allow-list ids, never a loose "some
+ divergence is fine" check. *)
+ let test_gloria_coverage () =
+ let ordo = ordo_rows fixture_path in
+ let no_gloria = List.filter (fun o -> o.gloria = None) ordo in
+ let expected = window_good_fridays () in
+ Alcotest.(check (list string)) "only this window's own Good Friday has no Ordo Gloria marker" expected
+ (List.map (fun o -> o.date) no_gloria)
+ in
+ let describe_gloria_mismatch (o : ordo_row) (c : colitur_row) =
+ Printf.sprintf "%s %S: colitur gloria=%b, Ordo gloria=%b (rank=%s commemoration=%b formulary=%s)" o.date o.title
+ c.c_gloria (Option.get o.gloria) (V.rank_to_string c.c_rank) c.c_has_commemoration
+ (match c.c_formulary with
+ | Some { MF.said = Some s; _ } -> Colitur_kernel.Slug.to_string s
+ | Some { MF.said = None; via = MF.Votive } -> "votive (said unnamed in the data)"
+ | Some { MF.said = None; _ } -> "NONE (said, unexpectedly outside Votive)"
+ | None -> "NONE")
+ in
+ (* L5 is the one REAL, STRUCTURAL shape still open (see
+ data/ef/expected-divergences-lms.sexp's own L5 for the full
+ citation) -- not a fixed date list, a property of the day itself,
+ because it recurs every year the underlying condition holds, not on a
+ fixed calendar date the way L4 above does. Matched by PREDICATE, not
+ by date, for the same reason L2's own note gives for why it is
+ prose-only rather than wired through the shared [expected_rows]
+ mechanism: the count varies window to window (L5: 6/5/6), so a single
+ static count cannot check it, and [make_suite] threads the per-window
+ expected total directly (~expected_gloria_l5 below) instead.
+
+ L6 is CLOSED (celebrant-rubrics-phase1, Bug 1 fix, this task):
+ {!Rite_ef.Temporal_ef.temporal}'s Rogation Monday/Tuesday branch no
+ longer hardcodes [Colour.Violet] -- see temporal_ef.ml's own citation
+ on that branch and data/ef/expected-divergences-lms.sexp's L6 entry
+ for the fix and its measured blast radius. [is_l6_rogation_colour] and
+ ~expected_gloria_l6 are kept, at 0 in every window, as the regression
+ net the same way L3's own bissextile fix keeps a predicate whose count
+ is now provably zero rather than deleting it. *)
+ let is_l5_lenten_commemoration (o : ordo_row) (c : colitur_row) =
+ (* NOT a Gloria defect (CORRECTED, l5-f3-readjudication task,
+ 2026-08-22 -- data/ef/expected-divergences-lms.sexp's own L5 has
+ the full account, including the RG 431(b)/n.302(b) hypothesis this
+ comment used to state as settled and RG 303(b)'s own "dici potest
+ tantum si occurrit dies liturgicus IV classis", which prohibits
+ 302(b) on exactly these THIRD-class privileged ferias). Every
+ instance is a privileged Lenten/Passiontide feria (Class3, violet
+ -- {!TE}'s own [ferial_rank], RG25) carrying exactly one
+ commemoration of an impeded Class3 saint, colitur reading
+ [gloria]=false (the ferial Mass, correctly, per the 1962 core)
+ where the Ordo reads [true] (the LMS Ordo follows the 2020 decree
+ Cum Sanctissima, colitur excludes it by binding design, CLAUDE.md
+ decision 2) -- an OCCURRENCE difference between two different,
+ both genuine, calendars, not a rule dispute. Predicate kept AS A
+ MATCHER (the 16-date population is unchanged); only the citation
+ explaining WHY it is allow-listed was wrong. *)
+ (not c.c_gloria) && Option.value o.gloria ~default:false && c.c_has_commemoration && c.c_rank = V.Class3
+ in
+ let is_l6_rogation_colour (o : ordo_row) (c : colitur_row) =
+ (* CLOSED (celebrant-rubrics-phase1, Bug 1 fix). Was root-caused to a
+ DIFFERENT, pre-existing bug this comparison merely surfaced --
+ {!Rite_ef.Temporal_ef.temporal}'s own Rogation Monday/Tuesday branch
+ used to hardcode [Colour.Violet] with no RG citation at all, where
+ the Ordo shows this exact date "FERIA IV Cl W" (white, matching
+ Paschaltide's own [season_colour] and RG88's "nihil fit in Officio"
+ -- the Office, hence its colour, is unchanged by the Rogation, only
+ the Mass TEXT is proper) -- so [gloria]'s own 432(b) violet guard
+ wrongly fired. Now fixed at the source (temporal_ef.ml); this
+ predicate and its own ~expected_gloria_l6 count (0 in every window)
+ are kept as the regression net, not deleted. *)
+ (not c.c_gloria) && Option.value o.gloria ~default:false
+ && (contains_substring c.c_slug ~needle:"rogation-monday" || contains_substring c.c_slug ~needle:"rogation-tuesday")
+ in
+ let test_gloria_matches_or_is_explained ~expected_gloria_l5 ~expected_gloria_l6 () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let unexplained = ref [] in
+ let l5_count = ref 0 and l6_count = ref 0 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.gloria with
+ | None -> ()
+ | Some ogloria ->
+ if Bool.equal ogloria c.c_gloria then ()
+ else if is_l5_lenten_commemoration o c then incr l5_count
+ else if is_l6_rogation_colour o c then incr l6_count
+ else unexplained := describe_gloria_mismatch o c :: !unexplained)
+ ordo colitur;
+ Alcotest.(check (list string)) (Printf.sprintf "[%s] every Gloria mismatch is named in the allow-list -- none unexplained" label)
+ [] (List.rev !unexplained);
+ Alcotest.(check int) (Printf.sprintf "[%s] L5 (Lenten privileged feria + commemoration) count" label)
+ expected_gloria_l5 !l5_count;
+ Alcotest.(check int) (Printf.sprintf "[%s] L6 (Rogation Monday/Tuesday colour bug) count" label) expected_gloria_l6
+ !l6_count
+ in
+ let test_bvm_seasonal_selection () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let votive_pairs =
+ List.filter_map
+ (fun (o, c) -> match c.c_formulary with Some { MF.via = MF.Votive; _ } -> Some (o, c) | _ -> None)
+ (List.combine ordo colitur)
+ in
+ Alcotest.(check int) (Printf.sprintf "%d BVM-Saturday (Votive) days fall inside this window" expected_bvm_votive)
+ expected_bvm_votive (List.length votive_pairs);
+ let mismatches =
+ List.filter_map
+ (fun (o, c) ->
+ let expected = expected_bvm_numeral c.c_season ~month:(int_of_string (String.sub c.c_date 5 2))
+ ~day:(int_of_string (String.sub c.c_date 8 2)) in
+ match o.bvm_numeral with
+ | Some got when String.equal got expected -> None
+ | Some got -> Some (Printf.sprintf "%s: Ordo says %s, expected %s (season-derived)" o.date got expected)
+ | None ->
+ (* One SOURCE-TEXT anomaly, found extending this suite to
+ 2023-2024: 2024-02-03 is the ONLY BVM-Saturday day in the
+ 2023-2024 fixture (of 12) whose Ordo entry carries no
+ roman-numeral "<N> Mass of BVM" line at all. Verified
+ directly against the raw pdftotext dump (not inferred):
+ every OTHER BVM-Saturday day in this edition prints "Sat
+ <n> CELEBRATION of the BVM IV Cl W" immediately followed
+ by its own "<N> Mass of BVM" line; this one date's block
+ goes straight from the title line to "(Blessing of
+ throats in honour of St Blaise may be given on this
+ day)" -- the numeral line the Ordo's own layout convention
+ would otherwise print is simply MISSING from the printed
+ text, a publisher-side omission this session cannot
+ correct, not a colitur defect (colitur's own side is
+ independently right here: St Blaise is scan-verified
+ "Com." -- a bare commemoration, not a feast -- in the
+ calendarium itself, docs/research/LT.txt:4978, so RG 91's
+ table has no row for him and the BVM-Saturday office
+ correctly wins the day outright, exactly as colitur
+ computes). Excluded by name, not silently: a future
+ change to this population (a different date, or a SECOND
+ gap) would still be caught below. *)
+ if String.equal fixture_path "fixtures/lms-ordo-2023-2024.sexp" && String.equal o.date "2024-02-03" then
+ None
+ else Some (Printf.sprintf "%s: colitur says Votive but the Ordo shows no BVM numeral" o.date))
+ votive_pairs
+ in
+ Alcotest.(check (list string)) "every BVM-Saturday numeral matches its season -- none unexplained" [] mismatches
+ in
+ let test_bvm_numeral_implies_votive () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let mismatches =
+ List.filter_map
+ (fun (o, c) ->
+ match (o.bvm_numeral, c.c_formulary) with
+ | Some n, Some { MF.via = MF.Votive; _ } -> ignore n; None
+ | Some n, other ->
+ Some
+ (Printf.sprintf "%s: Ordo shows %S Mass of BVM but colitur's via is %s" o.date n
+ (match other with Some f -> MF.source_to_string f.MF.via | None -> "NONE"))
+ | None, _ -> None)
+ (List.combine ordo colitur)
+ in
+ Alcotest.(check (list string)) "every Ordo BVM numeral day is a colitur Votive day" [] mismatches
+ in
+ let test_formulary_override_matches () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let r = check_formulary_overrides ordo colitur in
+ Alcotest.(check (list string)) "every formulary-override mismatch is explained -- none unexplained" [] r.fc_bad;
+ Alcotest.(check int) (Printf.sprintf "%d Proper days in the window" expected_proper) expected_proper r.fc_proper;
+ Alcotest.(check int) (Printf.sprintf "%d Common days in the window" expected_common) expected_common r.fc_common;
+ Alcotest.(check int) (Printf.sprintf "%d Preceding_sunday days in the window" expected_preceding_sunday)
+ expected_preceding_sunday r.fc_preceding_sunday;
+ Alcotest.(check int)
+ (Printf.sprintf "%d Ascension-week days resolve via Own_slug and match the Ordo's own override, no more, no fewer"
+ expected_ascension_week)
+ expected_ascension_week r.fc_ascension_week
+ in
+ let test_praef_coverage () =
+ let ordo = ordo_rows fixture_path in
+ let no_praef = List.filter (fun o -> o.praef = None) ordo in
+ let expected = window_good_fridays () in
+ Alcotest.(check (list string)) "only this window's own Good Friday has no Ordo Pr-of/Common-Pr marker" expected
+ (List.map (fun o -> o.date) no_praef)
+ in
+ let describe_praef_mismatch (o : ordo_row) (c : colitur_row) (options : Preface.t list) =
+ Printf.sprintf "%s %S: colitur preface=%s, Ordo praef=%S (parsed options: %s)" o.date o.title
+ (match c.c_preface with Some p -> Preface.to_string p | None -> "NONE")
+ (Option.get o.praef)
+ (String.concat ", " (List.map Preface.to_string options))
+ in
+ let test_praef_matches_or_is_explained () =
+ let ordo = ordo_rows fixture_path in
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let unexplained = ref [] in
+ let unclassifiable = ref [] in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.praef with
+ | None -> ()
+ | Some raw -> (
+ let options = classify_praef_options raw in
+ match options with
+ | [] -> unclassifiable := o.date :: !unclassifiable
+ | opts -> (
+ match c.c_preface with
+ | None ->
+ unexplained :=
+ Printf.sprintf "%s %S: colitur preface=NONE (unexpected outside Good Friday), Ordo praef=%S"
+ o.date o.title raw
+ :: !unexplained
+ | Some p -> if List.mem p opts then () else unexplained := describe_praef_mismatch o c opts :: !unexplained)))
+ ordo colitur;
+ Alcotest.(check (list string))
+ (Printf.sprintf "[%s] every Pr-of/Common-Pr mismatch is named in the allow-list -- none unexplained" label)
+ [] (List.rev !unexplained);
+ Alcotest.(check (list string))
+ (Printf.sprintf "[%s] every option list has at least one recognised alternative -- none dropped entirely" label)
+ [] (List.rev !unclassifiable)
+ in
+ let test_via_distribution_totals () =
+ let colitur = colitur_rows ~year_lo ~year_hi ~window_first ~window_last in
+ let via_name c = match c.c_formulary with None -> "none" | Some f -> MF.source_to_string f.MF.via in
+ let counts = Hashtbl.create 8 in
+ List.iter
+ (fun c -> Hashtbl.replace counts (via_name c) (1 + try Hashtbl.find counts (via_name c) with Not_found -> 0))
+ colitur;
+ let total = Hashtbl.fold (fun _ n acc -> acc + n) counts 0 in
+ Alcotest.(check int) "every via bucket sums to the full window" expected_rows total
+ in
+ ( label,
+ [ Alcotest.test_case "fixture SHA-256 matches its provenance note" `Quick test_fixture_checksum;
+ Alcotest.test_case "streams are N rows each, dates aligned 1:1" `Quick test_dates_align;
+ Alcotest.test_case "only this window's own Good Friday has no Ordo Creed marker" `Quick test_creed_coverage;
+ Alcotest.test_case "every Creed difference is named in the cited allow-list -- none unexplained" `Quick
+ test_creed_matches_or_is_explained;
+ Alcotest.test_case "only this window's own Good Friday has no Ordo Gloria marker" `Quick
+ test_gloria_coverage;
+ Alcotest.test_case "every Gloria difference is named in the cited allow-list -- none unexplained" `Quick
+ (test_gloria_matches_or_is_explained ~expected_gloria_l5 ~expected_gloria_l6);
+ Alcotest.test_case "every BVM-Saturday numeral matches its season" `Quick test_bvm_seasonal_selection;
+ Alcotest.test_case "every Ordo BVM numeral day is a colitur Votive day" `Quick
+ test_bvm_numeral_implies_votive;
+ Alcotest.test_case "formulary override STRING matches on Proper/Common/Preceding_sunday days" `Quick
+ test_formulary_override_matches;
+ Alcotest.test_case "the via distribution sums to the full window" `Quick test_via_distribution_totals;
+ Alcotest.test_case "only this window's own Good Friday has no Ordo Pr-of/Common-Pr marker" `Quick
+ test_praef_coverage;
+ Alcotest.test_case "every Pr-of/Common-Pr mismatch is named in the allow-list -- none unexplained" `Quick
+ test_praef_matches_or_is_explained
+ ] )
+
+let allow_list_path = "../data/ef/expected-divergences-lms.sexp"
+
+(* Guards against a stale allow-list entry (declared in the sexp file, but
+ the OCaml-side [allow_list_id_for_date] predicate above no longer maps
+ any date to it, or never did) -- the per-window suites above only prove
+ an id that DOES fire has the right count; nothing in them can notice an
+ id that never fires in ANY of the three windows, since each suite only
+ ever looks at its own explained_counts. Fixed to the two ids this task
+ added (L3, L4) -- L1 is CLOSED/removed and L2 is deliberately prose-only
+ (see the sexp file's own header on why), so neither is expected here. *)
+(* L3 CLOSED (bissextile-shift task, 2026-08-22): removed from the active
+ sexp record set -- see its own now-prose closure note in
+ data/ef/expected-divergences-lms.sexp for the fix and the measured
+ blast radius. Only L4 remains active. *)
+let test_allow_list_ids_are_exactly_l4 () =
+ let ids = List.sort String.compare (List.map (fun e -> e.id) (load_allow_list allow_list_path)) in
+ Alcotest.(check (list string)) "the LMS allow-list declares exactly L4" [ "L4" ] ids
+
+let suite_allow_list = ("lms-ordo-allow-list", [ Alcotest.test_case "declares exactly L4" `Quick test_allow_list_ids_are_exactly_l4 ])
+
+let suite_2023_2024 =
+ make_suite ~label:"lms-ordo-2023-2024" ~fixture_path:"fixtures/lms-ordo-2023-2024.sexp"
+ ~fixture_sha256:"631aedad5a749c814efcffbf1dfd0970181552a7b8985f6f74c5cfa4bf83baf5" ~window_first:"2023-12-01"
+ ~window_last:"2024-12-31" ~year_lo:2022 ~year_hi:2025 ~allow_list_path ~expected_rows:397
+ (* expected_proper 182 -> 181 (bissextile-shift task, 2026-08-22): 24
+ February 2024, previously Matthias's own Proper Mass, is now the
+ Ember Saturday of Lent's own temporal proper -- Own_slug-sourced, not
+ Proper, so it leaves this bucket's population rather than merely
+ changing which slug's proper it is (see this file's own header on why
+ Own_slug is excluded). Matthias himself moves to 25 February, an
+ I-class Sunday that admits him not even as a commemoration (RG16(a)),
+ so his own Mass is not said anywhere in this window any more. *)
+ (* expected_preceding_sunday 61 -> 60 (celebrant-rubrics-phase1, Bug 2
+ fix, 2026-08-22): the window's own single Ascension-week day
+ (2024-05-06 was BEFORE Ascension that year and never counted here in
+ the first place -- see [ascension_week_override]'s own citation; the
+ real Ascension-week day this window carries is elsewhere in May)
+ now resolves via Own_slug (step 2, data/ef/lectionary.sexp's new
+ [ascension_week_entries]), not Preceding_sunday -- it leaves this
+ bucket's population the same way a Proper day already does, while
+ expected_ascension_week itself is UNCHANGED (1): the same day is
+ still counted, just via check_formulary_overrides' own new
+ Own_slug branch instead of its Preceding_sunday one. *)
+ ~expected_bvm_votive:12 ~expected_proper:181 ~expected_common:2 ~expected_preceding_sunday:60
+ ~expected_ascension_week:1 ~expected_gloria_l5:5 ~expected_gloria_l6:0
+
+let suite_2024_2025 =
+ make_suite ~label:"lms-ordo-2024-2025" ~fixture_path:"fixtures/lms-ordo-2024-2025.sexp"
+ ~fixture_sha256:"a2b549f10dfbebfa5f7df7dea74b0e5352f5abbf5e2ce33ef681a9eb8eb116e6" ~window_first:"2024-11-27"
+ ~window_last:"2025-12-31" ~year_lo:2023 ~year_hi:2026 ~allow_list_path ~expected_rows:400
+ (* expected_preceding_sunday 66 -> 63 (celebrant-rubrics-phase1, Bug 2
+ fix): this window's own three Ascension-week days move from
+ Preceding_sunday to Own_slug, the same reasoning as the 2023-2024
+ window's own note above; expected_ascension_week stays 3. *)
+ ~expected_bvm_votive:14 ~expected_proper:179 ~expected_common:2 ~expected_preceding_sunday:63
+ ~expected_ascension_week:3 ~expected_gloria_l5:5 ~expected_gloria_l6:0
+
+let suite_2025_2026 =
+ make_suite ~label:"lms-ordo-2025-2026" ~fixture_path:"fixtures/lms-ordo-2025-2026.sexp"
+ ~fixture_sha256:"8595ffebfc50b7a165643c172f9ba542871dd1d1e45f8c85a21b104da689535f" ~window_first:"2025-11-28"
+ ~window_last:"2026-12-31" ~year_lo:2024 ~year_hi:2027 ~allow_list_path ~expected_rows:399
+ (* expected_preceding_sunday 68 -> 66 (celebrant-rubrics-phase1, Bug 2
+ fix): this window's own two Ascension-week days move from
+ Preceding_sunday to Own_slug, the same reasoning as the 2023-2024
+ window's own note above; expected_ascension_week stays 2. *)
+ ~expected_bvm_votive:13 ~expected_proper:174 ~expected_common:2 ~expected_preceding_sunday:66
+ ~expected_ascension_week:2 ~expected_gloria_l5:6 ~expected_gloria_l6:0
diff --git a/test/test_mass_formulary.ml b/test/test_mass_formulary.ml
new file mode 100644
index 0000000..1316e47
--- /dev/null
+++ b/test/test_mass_formulary.ml
@@ -0,0 +1,41 @@
+module MF = Colitur_kernel.Mass_formulary
+module Slug = Colitur_kernel.Slug
+
+let slug s = Slug.of_string_exn s
+
+let test_round_trips_through_sexp () =
+ let f = { MF.said = Some (slug "ef-time-after-pentecost-sunday-9"); via = MF.Preceding_sunday } in
+ let f' = MF.t_of_sexp (MF.sexp_of_t f) in
+ Alcotest.(check (option string)) "slug survives"
+ (Option.map Slug.to_string f.MF.said) (Option.map Slug.to_string f'.MF.said);
+ Alcotest.(check bool) "source survives" true (f.MF.via = f'.MF.via)
+
+(* [said] is [None] exactly for {!MF.Votive} -- see the .mli's own citation.
+ Round-tripped separately so the [None] case has its own witness, not only
+ inferred from the [Some] case above. *)
+let test_none_said_round_trips_through_sexp () =
+ let f = { MF.said = None; via = MF.Votive } in
+ let f' = MF.t_of_sexp (MF.sexp_of_t f) in
+ Alcotest.(check bool) "said stays None" true (f'.MF.said = None);
+ Alcotest.(check bool) "source survives" true (f.MF.via = f'.MF.via)
+
+(* [to_string] is what an ordo line shows. It names the SOURCE, not the slug,
+ because the slug is a key and the reader wants "of the preceding Sunday". *)
+let test_to_string_names_the_source () =
+ let cases =
+ [ (MF.Proper, "proper"); (MF.Own_slug, "own"); (MF.Preceding_sunday, "preceding-sunday");
+ (MF.Common, "common"); (MF.Votive, "votive") ]
+ in
+ List.iter
+ (fun (via, expected) ->
+ Alcotest.(check string) expected expected
+ (MF.source_to_string via))
+ cases
+
+let suite =
+ ( "Mass_formulary",
+ [ Alcotest.test_case "sexp round-trips" `Quick test_round_trips_through_sexp;
+ Alcotest.test_case "sexp round-trips, said = None (Votive)" `Quick
+ test_none_said_round_trips_through_sexp;
+ Alcotest.test_case "source_to_string names each source" `Quick
+ test_to_string_names_the_source ] )
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index f1d1a89..01938e1 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -1381,6 +1381,33 @@ let m26_dates =
citation fields are not, discovered by this task). *)
let m27_dates = [ "2026-12-25"; "2027-12-25" ]
+(* M31 (celebrant-rubrics-phase1, Bug 2, 2026-08-22) -- the six ferias
+ between the Ascension and the Friday before the Vigil of Pentecost that
+ repeat the Ascension's own Mass by an explicit marginal rubric in the
+ Proprium de Tempore (data/ef/lectionary.sexp's own [ascension_week_
+ entries], full citation there and in this file's sibling
+ data/ef/expected-divergences.sexp's own C41). Only three of the six
+ civil dates this window's own [c_date] range can reach are actually
+ unoccupied in 2026-2027: 2026-05-21, 2026-05-22 and 2027-05-14 (the
+ other three fall to a real sanctoral feast both engines already agree
+ on). missalemeum -- Divinum Officium's own lineage, the SAME lineage
+ lectio inherited this defect from before colitur's own bootstrap --
+ still walks these ferias back to the preceding Sunday's Mass, the
+ pre-fix answer colitur itself used to give; [Observed_identity_
+ unresolved] fires alongside because none of the three is a SANCTORAL-
+ origin day (the mapping this whole file's own header describes cannot
+ name a TEMPORAL office's title either way, unrelated to this cause). *)
+let m31_dates = [ "2026-05-21"; "2026-05-22"; "2027-05-14" ]
+
+(* The exact six slugs data/ef/lectionary.sexp's own [ascension_week_entries]
+ answers -- reused by [classify_2038]/[classify_2035] below, which key on
+ slug identity rather than a date list (those two live windows are not
+ scoped the way the 2026-2027 fixture is). *)
+let ascension_week_slugs =
+ [ "ef-easter-6-friday"; "ef-easter-7-monday"; "ef-easter-7-tuesday"; "ef-easter-7-wednesday";
+ "ef-easter-7-thursday"; "ef-easter-7-friday"
+ ]
+
(* The oracle's own row went unused when M2 -- its one reader, via
[o.o_title] -- was closed/removed (see the comment above [m1_dates]), and
was kept as a named, typed parameter rather than dropped from the
@@ -1512,6 +1539,8 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
[ Rank; Colour_f; Comm_presence; Comm_count; Observed_identity_mismatch;
Comm_identity_unresolved; First_mismatch; Gospel_mismatch ]
then Some "M30"
+ else if List.mem c.c_date m31_dates && subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ]
+ then Some "M31"
else None
(* ---------------------------------------------------------------------- *)
@@ -1992,6 +2021,16 @@ let classify_2038 (c : colitur_row) (o : oracle_row) diffs =
List.mem c.c_date [ "2035-08-09"; "2035-08-14"; "2038-08-09"; "2038-08-14" ]
&& diffs = [ Colour_f ]
then Some "VIGIL-COLOUR-RG128 (M29, colitur; see C37)"
+ (* The Ascension-repeat rubric (celebrant-rubrics-phase1, Bug 2; see M31
+ in this file's own 2026-2027 [layer_m_reason] and C41 in
+ data/ef/expected-divergences.sexp for the full citation). 2038 carries
+ three unoccupied instances the 2026-2027 window did not (2038-06-07/
+ 08/09, all week-7 weekdays); 2035 carries one (2035-05-08). Gated on
+ colitur's own slug rather than on the date list this window's sibling
+ windows use, the same style [m21_2038_slugs] already establishes for
+ a live-window slug-keyed class. *)
+ else if List.mem c.c_observed_slug ascension_week_slugs && diffs = [ First_mismatch; Gospel_mismatch ] then
+ Some "ASCENSION-WEEK-REPEAT (M31, colitur; register, Bug 2)"
else None
(* COMMEMORATIONS join the live-window comparison (2026-08-18).
@@ -2129,7 +2168,13 @@ let test_2038_class_counts () =
("MISSAL-TWO-PART-CITATION (register 6.9)", 1);
("COMM-IDENTITY-UNRESOLVED (temporal-origin, no English name -- M15's limit)", 2);
("PERPETUA-COMMON (register 6.8)", 1);
- ("PETER-COMPANION-ABSENT-UPSTREAM (M19)", 1)
+ ("PETER-COMPANION-ABSENT-UPSTREAM (M19)", 1);
+ (* celebrant-rubrics-phase1, Bug 2: 2038-06-07/08/09 (the Monday,
+ Tuesday and Wednesday of the week after the Sunday after the
+ Ascension) are unoccupied that year, all three landing on the
+ Ascension-repeat rubric -- see M31 (2026-2027 window) and C41
+ (data/ef/expected-divergences.sexp) for the full citation. *)
+ ("ASCENSION-WEEK-REPEAT (M31, colitur; register, Bug 2)", 3)
]
|> List.sort compare
in
diff --git a/test/test_precedence.ml b/test/test_precedence.ml
index acc89fc..54ab3f9 100644
--- a/test/test_precedence.ml
+++ b/test/test_precedence.ml
@@ -98,6 +98,49 @@ let test_temporal_only_day () =
Alcotest.(check int) "nothing deferred" 0 (List.length r.P.deferred);
Alcotest.(check int) "nothing omitted" 0 (List.length r.P.omitted)
+(* RG 111(a): sung_mass_commemorations -- see precedence.mli's own citation.
+ Pure function, no {!resolve} needed: exercised directly against
+ hand-built Low-Mass admitted lists, the same shape {!P.resolve} would
+ produce, rather than through a full resolution. *)
+let sung_test_cand rank slug = cand ~rank slug
+
+let test_sung_mass_no_privileged () =
+ let low_mass = [ (sung_test_cand Lo "a", P.Ordinary); (sung_test_cand Lo "b", P.Ordinary) ] in
+ Alcotest.(check (list string)) "no privileged commemoration -> sung Mass keeps none" []
+ (List.map (fun (c, _) -> slug_of c) (P.sung_mass_commemorations low_mass))
+
+let test_sung_mass_one_privileged () =
+ let low_mass =
+ [ (sung_test_cand Lo "ordinary-one", P.Ordinary); (sung_test_cand Hi "privileged-one", P.Privileged) ]
+ in
+ Alcotest.(check (list string)) "the ordinary commemoration is dropped, the privileged one kept"
+ [ "privileged-one" ]
+ (List.map (fun (c, _) -> slug_of c) (P.sung_mass_commemorations low_mass))
+
+let test_sung_mass_privileged_first_already () =
+ let low_mass =
+ [ (sung_test_cand Hi "privileged-one", P.Privileged); (sung_test_cand Lo "ordinary-one", P.Ordinary) ]
+ in
+ Alcotest.(check (list string)) "a privileged commemoration already first is kept alone" [ "privileged-one" ]
+ (List.map (fun (c, _) -> slug_of c) (P.sung_mass_commemorations low_mass))
+
+let test_sung_mass_empty_low_mass_set () =
+ Alcotest.(check (list string)) "an empty Low-Mass set stays empty at Sung Mass" []
+ (List.map (fun (c, _) -> slug_of c) (P.sung_mass_commemorations []))
+
+(* If two privileged commemorations were ever admitted together (not known
+ to occur on any shipped rite's data -- precedence.mli's own citation),
+ [sung_mass_commemorations] keeps only the FIRST -- input order is
+ already RG 113 precedence order, so this is "the highest-precedence
+ privileged entry survives", not an arbitrary truncation. *)
+let test_sung_mass_two_privileged_keeps_first () =
+ let low_mass =
+ [ (sung_test_cand Hi "first-privileged", P.Privileged); (sung_test_cand Hi "second-privileged", P.Privileged) ]
+ in
+ Alcotest.(check (list string)) "only the first (higher-precedence) privileged commemoration survives"
+ [ "first-privileged" ]
+ (List.map (fun (c, _) -> slug_of c) (P.sung_mass_commemorations low_mass))
+
let suite =
( "Precedence",
[ Alcotest.test_case "highest band wins" `Quick test_highest_band_wins;
@@ -107,4 +150,14 @@ let suite =
test_commemoration_only_never_observed;
Alcotest.test_case "nothing silently lost" `Quick test_nothing_silently_lost;
Alcotest.test_case "order independent" `Quick test_order_independent;
- Alcotest.test_case "temporal-only day" `Quick test_temporal_only_day ] )
+ Alcotest.test_case "temporal-only day" `Quick test_temporal_only_day;
+ Alcotest.test_case "RG 111(a): sung Mass, no privileged commemoration" `Quick
+ test_sung_mass_no_privileged;
+ Alcotest.test_case "RG 111(a): sung Mass keeps the one privileged commemoration" `Quick
+ test_sung_mass_one_privileged;
+ Alcotest.test_case "RG 111(a): sung Mass, privileged already first" `Quick
+ test_sung_mass_privileged_first_already;
+ Alcotest.test_case "RG 111(a): sung Mass, empty Low-Mass set" `Quick
+ test_sung_mass_empty_low_mass_set;
+ Alcotest.test_case "RG 111(a): sung Mass keeps only the first of two privileged" `Quick
+ test_sung_mass_two_privileged_keeps_first ] )
diff --git a/test/test_rubrics_ef.ml b/test/test_rubrics_ef.ml
new file mode 100644
index 0000000..77654c0
--- /dev/null
+++ b/test/test_rubrics_ef.ml
@@ -0,0 +1,1312 @@
+(* RG 475-476, the Creed -- see lib/rites/rite_ef/rubrics_ef.ml for the
+ rubric quoted in full and every branch's own citation.
+
+ One end-to-end test per clause of 475, plus a 476 negative, resolved
+ against REAL calendar dates through the shipped sanctoral data (the same
+ pipeline `colitur day`/`colitur rubrics` use) -- every expected value
+ below was derived from the rubric's own text and checked against
+ `colitur day <year>`'s real output (slug/rank/subject/weekday) BEFORE
+ this module existed, never read off [Rubrics_ef.creed]'s own answer.
+ Two synthetic unit tests isolate Trap One (RG 475(a) reads [temporal],
+ never [observed]) directly, without depending on finding a real-calendar
+ coincidence.
+
+ One further test (celebrant-rubrics-phase1 review, finding 1) is
+ different in kind from the rest: not an end-to-end [creed] check
+ against a single real date, but a direct sweep of {!Rite_ef.Temporal_ef}
+ output across a century, asserting the unstated invariant [creed]'s own
+ RG 24/25 ferial branches rely on rather than leaving it asserted only
+ in prose -- see its own header comment for the full account. *)
+
+module Cal = Colitur_kernel.Calendar
+module LD = Colitur_kernel.Liturgical_day
+module Date = Colitur_kernel.Date
+module Cel = Colitur_kernel.Celebration
+module Colour = Colitur_kernel.Colour
+module Subject = Colitur_kernel.Subject
+module Slug = Colitur_kernel.Slug
+module Temporal = Colitur_kernel.Temporal
+module Computus = Colitur_kernel.Computus
+module V = Rite_ef.Vocab_ef
+module RE = Rite_ef.Rubrics_ef
+module TE = Rite_ef.Temporal_ef
+
+let mk y m d = match Date.make ~year:y ~month:m ~day:d with Ok t -> t | Error e -> failwith e
+
+(* Loaded once, module-level: every test below is a lookup against the same
+ shipped calendar, and {!Cal.day} recomputes its whole liturgical year on
+ every call (calendar.mli's own documented cost), so at minimum the layer
+ itself should not be reloaded and re-merged per test case. *)
+let layer =
+ match Test_support.load_ef_layer () with Ok l -> l | Error e -> Alcotest.failf "%s" e
+
+let ctx = Test_support.ef_context ()
+
+let creed_on y m d = (Cal.day ctx layer (mk y m d)).LD.creed
+
+let check name y m d expected = Alcotest.(check bool) name expected (creed_on y m d)
+
+(* ------------------------------------------------------------------------ *)
+(* Breviary 237-238 (Te Deum) and RG 431-432 (Gloria) -- Phase 2 of the *)
+(* celebrant-rubrics-phase1 design. See lib/rites/rite_ef/rubrics_ef.ml for *)
+(* both rubrics quoted in full and every branch's own citation. One *)
+(* end-to-end test per clause, resolved against REAL calendar dates through *)
+(* the shipped data -- every expected value below was read off *)
+(* `colitur rubrics <year>`'s real output BEFORE being pinned here, the *)
+(* same discipline the Creed tests above already establish. *)
+
+let day_on y m d = Cal.day ctx layer (mk y m d)
+let gloria_on y m d = (day_on y m d).LD.gloria
+let te_deum_on y m d = RE.te_deum ~temporal:(day_on y m d).LD.temporal ~observed:(day_on y m d).LD.observed
+ ~date:(mk y m d)
+
+let check_gloria name y m d expected = Alcotest.(check bool) name expected (gloria_on y m d)
+let check_te_deum name y m d expected = Alcotest.(check bool) name expected (te_deum_on y m d)
+
+(* ---- RG 475(a): "in qualibet dominica, etsi eius Officium alicui festo
+ locum cedat" ---- *)
+
+let test_475a_ordinary_sunday () =
+ (* 2026-01-25: an ordinary Time-after-Epiphany Sunday, Class2, green,
+ "Dominica III post Epiphaniam" -- confirmed via `colitur day 2026`,
+ no other clause of 475 could apply (Class2, subject Temporal, no
+ octave, no apostle/vigil slug), so [true] here can only come from
+ 475(a) itself. *)
+ check "475(a): an ordinary Sunday" 2026 1 25 true
+
+(* Trap One, isolated directly: RG 475(a)'s own "ETSI EIUS OFFICIUM ALICUI
+ FESTO LOCUM CEDAT" -- even when a feast has displaced the Sunday's own
+ office, the Creed is still said. [observed] below is deliberately shaped
+ so that NONE of 475(b)/(c)/(e) can produce [true] on their own (Class3,
+ subject Saint, a slug on no list this module knows); the only way
+ [creed] can return [true] is by reading [temporal]'s own [weekday],
+ never [observed]. The synthetic [date] (an ordinary July day, itself a
+ Wednesday in 2026) is chosen so nothing about the DATE itself suggests
+ a Sunday either -- proving the function reads [temporal.weekday], not
+ [Date.weekday date]. *)
+let impeded_observed =
+ Cel.make ~slug:(Slug.of_string_exn "some-impeding-feast-of-the-lord") ~rank:V.Class3
+ ~status:Cel.Feast ~colour:Colour.Red ~subject:Subject.Saint ~layer:"synthetic" ()
+
+let synthetic_temporal ~weekday : (V.season, V.rank) Temporal.t =
+ { Temporal.season = V.Time_after_pentecost; week = Some 1; weekday; office = impeded_observed }
+
+let test_475a_reads_temporal_not_observed () =
+ Alcotest.(check bool) "Sunday-shaped [temporal] overrides a non-Sunday-shaped [observed]" true
+ (RE.creed ~temporal:(synthetic_temporal ~weekday:Date.Sun) ~observed:impeded_observed
+ ~date:(mk 2026 7 1));
+ Alcotest.(check bool) "same [observed], non-Sunday [temporal]: false" false
+ (RE.creed ~temporal:(synthetic_temporal ~weekday:Date.Wed) ~observed:impeded_observed
+ ~date:(mk 2026 7 1))
+
+(* ---- RG 475(b): "in festis I classis" ---- *)
+
+let test_475b_class1_feast () =
+ (* 2026-08-15: the Assumption, Class1. *)
+ check "475(b): a I-class feast" 2026 8 15 true
+
+(* ---- RG 475(c): "in festis II classis Domini et B. Mariae Virg." ---- *)
+
+let test_475c_lord () =
+ (* 2026-09-14: Exaltation of the Holy Cross, Class2, subject Lord. *)
+ check "475(c): a II-class feast of the Lord" 2026 9 14 true
+
+let test_475c_bvm_via_marian_slugs () =
+ (* 2026-08-22: Immaculate Heart of Mary, Class2 -- ships [subject =
+ Saint] in data/ef/sanctoral.sexp (confirmed by grep), so this can only
+ come out [true] via {!Rite_ef.Precedence_ef.marian_slugs}, not via
+ [subject = Bvm]. Also carries a real commemoration
+ (+sts-timothy-hippolytus-and-symphorianus-martyrs), a live instance of
+ 476(e): the commemoration plays no part in this answer. *)
+ check "475(c): a II-class BVM feast (via marian_slugs, subject=Saint in the data)" 2026 8 22 true
+
+(* ---- RG 475(d): "per octavas Nativitatis Domini, Paschatis et
+ Pentecostes, etiam in festis occurrentibus et in Missis votivis" ---- *)
+
+let test_475d_octave_even_occurring_feast () =
+ (* 2026-12-26: St Stephen, Class2, "S. Stephani Protomartyris" -- a real
+ saint's feast OCCURRING within the Octave of the Nativity (RG 67's own
+ "Com. octavae Nativitatis", carried as +ef-nativity-octave-day-2 in
+ colitur's own commemoration). RG 475(d)'s own "etiam in festis
+ occurrentibus" is written for exactly this shape: the Creed is said
+ regardless. (This is the one place this suite deliberately diverges
+ from the task brief's own worked example, which expected [false] here
+ -- the brief mis-cited 26 December as 476(b)'s "plain II-class feast"
+ case, missing that RG 475(d) explicitly overrides 476(b) inside the
+ Nativity octave; see the task report.) *)
+ check "475(d): a saint's feast occurring within the Nativity octave" 2026 12 26 true
+
+let test_475d_octave_day_boundary () =
+ (* 2026-01-01: the Octave Day of the Nativity itself (Circumcision),
+ Class1 -- also [true] via 475(b) alone, kept as a boundary check that
+ 1 January is correctly included in the 8-day window. *)
+ check "475(d): 1 January, the Octave Day of the Nativity" 2026 1 1 true
+
+(* ---- RG 475(e): "in festis nataliciis Apostolorum et Evangelistarum,
+ necnon in festis Cathedrae S. Petri et S. Barnabae Ap." ---- *)
+
+let test_475e_apostle_natalicium () =
+ (* 2026-11-30: St Andrew, Class2, subject Saint -- not covered by 475(c)
+ (not Domini/BVM), so [true] here can only come from 475(e)'s own
+ natalicia list. Also carries a real commemoration
+ (+ef-advent-1-monday), another live 476(e) instance. *)
+ check "475(e): an Apostle's own natalicium (Andrew)" 2026 11 30 true
+
+let test_475e_barnabas_named_explicitly () =
+ (* 2026-06-11: St Barnabas, Class3 -- named explicitly by the clause
+ ("S. Barnabae Ap."); at Class3 it could not reach [true] via 475(b) or
+ (c) regardless. *)
+ check "475(e): St Barnabas, named explicitly" 2026 6 11 true
+
+let test_475e_chair_of_peter_named_explicitly () =
+ (* 2027-02-22 (NOT 2026: Feb 22 2026 is impeded by Lent I Sunday, so the
+ Chair is not observed that year -- checked via `colitur day 2026`
+ before picking 2027 instead): the Chair of St Peter, Class2, subject
+ Saint -- NOT a natalicium (Peter's own is 29 June, shared with Paul),
+ so [true] here can only come from the clause's own explicit "Cathedrae
+ S. Petri" naming, not from the natalicium reading in general. *)
+ check "475(e): the Chair of St Peter, named explicitly (not a natalicium)" 2027 2 22 true
+
+let test_475e_excludes_conversion_of_paul () =
+ (* Trap Two, directly: 2027-01-25, the Conversion of St Paul, Class3 --
+ names an Apostle but is NOT his natalicium (his own is 29 June, with
+ Peter); Class3 rules out 475(b)/(c), and this slug is deliberately
+ absent from [creed_apostle_slugs]. Picked 2027 for the same impeded-
+ Sunday reason as the Chair of Peter above (25 January 2026 is itself a
+ Sunday). *)
+ check "475(e) does NOT cover the Conversion of St Paul (not a natalicium)" 2027 1 25 false
+
+(* ---- RG 23 (feriae) / RG 476(a): Ash Wednesday, Holy Week's own feriae,
+ the Chrism/Lord's Supper Mass, the Easter Vigil Mass ---- *)
+
+let test_ash_wednesday_no_creed () =
+ check "RG 23(a)/476: Ash Wednesday, a I-class FERIA, not a festum" 2026 2 18 false
+
+let test_holy_thursday_no_creed () =
+ (* 2026-04-02: "Feria V in Cena Domini" -- RG 23(b)'s own "omnes feriae
+ Hebdomadae sanctae"; also explicitly named by 476(a) ("sive... in
+ Cena Domini"). *)
+ check "RG 23(b)/476(a): Holy Thursday (Mass of the Lord's Supper)" 2026 4 2 false
+
+let test_holy_saturday_easter_vigil_no_creed () =
+ (* 2026-04-04: "Sabbato sanctum" -- RG 23(b) again; also explicitly named
+ by 476(a) ("in Missa Vigiliae paschalis"). *)
+ check "RG 23(b)/476(a): Holy Saturday (the Easter Vigil Mass)" 2026 4 4 false
+
+(* ---- RG 476(f): "in Missis defunctorum" -- the Creed is never said at a
+ Requiem Mass. Whole-branch review finding 1: colitur used to say [true]
+ here on rank alone (475(b), Class1) -- the LMS Ordo layer's own former
+ allow-list entry L1, now closed, was this exact day. See rubrics_ef.ml's
+ own header for why {!Colour.Black} is a sound RG 117 proxy for "this Mass
+ is a Requiem" on the shipped data. ---- *)
+
+let test_476f_all_souls_no_creed () =
+ (* 2025-11-03: All Souls' Day (2 November, a Sunday that year, transferred
+ to the next open day, RG's own Class1/black office unchanged by the
+ transfer) -- `colitur day 2025` confirms class-1/black/
+ commemoration-of-all-souls on this date. Before this fix [creed] here
+ was [true] via 475(b); the Ordo's own text ("No Cr") says otherwise. *)
+ check "RG 476(f): All Souls' Day (transferred), a Requiem, says no Creed" 2025 11 3 false
+
+let test_476f_good_friday_no_creed () =
+ (* 2026-04-03: Good Friday, [colour = Black] (temporal_ef.ml's own
+ [days_between easter d = -2] branch) -- already [false] via the RG
+ 23(b) feria-I-classis exclusion checked earlier in [creed], so this is
+ a belt-and-braces witness that the 476(f) guard, were it ever reached
+ first, would agree rather than a case that depends on it: Good Friday
+ has no Mass in the 1955-restored Holy Week to begin with. *)
+ check "RG 476(f)/RG 23(b): Good Friday, black, says no Creed" 2026 4 3 false
+
+(* Whole-branch review finding 1's own instruction: a test that FAILS if a
+ third {!Colour.Black} celebration is ever introduced, so the RG 476(f)
+ guard's colour proxy cannot silently rot into covering the wrong
+ population. Two independent checks, matching the two places a black
+ celebration could be added:
+
+ DATA: every entry the shipped sanctoral layer (sanctoral.sexp, with
+ adjustments.sexp merged on top -- the same [layer] every other test in
+ this file resolves against) carries directly, fixed AND movable alike
+ ({!Colitur_kernel.Layer.entries} holds the raw [Date_spec.t], not a
+ resolved index, so this needs no date walk at all to cover every civil
+ year).
+
+ CODE: {!Rite_ef.Temporal_ef.temporal}'s own colour logic, which
+ sanctoral.sexp cannot see (Good Friday's black is computed, not data) --
+ swept across a century the same span and for the same coverage reason
+ {!test_ferial_origin_never_carries_lord_bvm_or_apostle_slug} above
+ already uses, since a Colour.Black bug introduced into a rare branch
+ (an Ember day, Rogation Wednesday...) would not show up in one year. *)
+let test_colour_black_population_is_exactly_two () =
+ let black_data_entries =
+ List.filter
+ (fun (e : V.rank Colitur_kernel.Layer.entry) -> e.Colitur_kernel.Layer.cel.Cel.colour = Colour.Black)
+ layer.Colitur_kernel.Layer.entries
+ in
+ Alcotest.(check int) "exactly one Colour.Black entry in the shipped data" 1
+ (List.length black_data_entries);
+ (match black_data_entries with
+ | [ e ] ->
+ Alcotest.(check string) "the one Colour.Black data entry is All Souls" "commemoration-of-all-souls"
+ (Slug.to_string e.Colitur_kernel.Layer.cel.Cel.slug)
+ | _ -> ());
+ let code_black = ref [] in
+ for y = 1583 to 1682 do
+ let dec31 = mk y 12 31 in
+ let d = ref (mk y 1 1) in
+ while Date.compare !d dec31 <= 0 do
+ let t = TE.temporal !d in
+ if t.Temporal.office.Cel.colour = Colour.Black then code_black := (y, !d, t) :: !code_black;
+ d := Date.add_days !d 1
+ done
+ done;
+ Alcotest.(check bool) "the century sweep found at least 100 Colour.Black temporal days" true
+ (List.length !code_black >= 100);
+ List.iter
+ (fun (_, d, (t : (V.season, V.rank) Temporal.t)) ->
+ let easter = Computus.gregorian_easter (Date.year d) in
+ Alcotest.(check int)
+ (Printf.sprintf "%s: the only code-side Colour.Black day is Good Friday (Easter-2)"
+ (Date.to_iso8601 d))
+ (-2) (Date.to_rata d - Date.to_rata easter);
+ Alcotest.(check string)
+ (Printf.sprintf "%s: Good Friday's own slug" (Date.to_iso8601 d))
+ "ef-passiontide-2-friday"
+ (Slug.to_string t.Temporal.office.Cel.slug))
+ !code_black
+
+(* ---- RG 476(b) negative: a plain II-class saint, not Domini/BVM, not an
+ Apostle/Evangelist ---- *)
+
+let test_476b_plain_class2_saint () =
+ (* 2026-08-10: St Lawrence, Class2, subject Saint -- a deacon and martyr,
+ no Apostle/Evangelist connection, not on any list this module reads. *)
+ check "476(b): a plain II-class saint (Lawrence) does not say the Creed" 2026 8 10 false
+
+(* ---- RG 28-34 (vigils): checked ahead of 475(c) so a Class2 vigil that
+ is ALSO on marian_slugs is still excluded ---- *)
+
+let test_vigil_excluded_even_when_class2_and_marian () =
+ (* 2026-08-14: Vigil of the Assumption, Class2 -- IS on
+ {!Rite_ef.Precedence_ef.marian_slugs} (a real Marian entry), so without
+ the vigil check ahead of 475(c) this would wrongly come out [true].
+ Also carries a real commemoration (+eusebius-confessor), a second live
+ 476(e) instance. *)
+ check "vigils are excluded even when Class2 and Marian (Vigil of the Assumption)" 2026 8 14 false
+
+(* ---- RG 476(d): a IV-class office (also exercises RG 78/309(a)'s votive
+ Office of the BVM on Saturday, itself IV class) ---- *)
+
+let test_476d_bvm_saturday_office () =
+ (* 2026-07-11: the unoccupied Saturday's Office of Our Lady, Class4 --
+ already a pinned example in test/cli.t (Task 4). *)
+ check "476(d): the BVM Saturday Office, IV class" 2026 7 11 false
+
+(* One full civil year, walked day by day: RG 475(a)'s own invariant, "every
+ Sunday says the Creed, no exceptions" -- the same sanity check the task
+ asks for at the domain-measurement step, pinned here as a real assertion
+ rather than left to a one-off shell scan. *)
+let test_every_sunday_in_2026_says_the_creed () =
+ let days = Cal.year ctx layer 2026 in
+ Array.iter
+ (fun (d : (V.season, V.rank) LD.t) ->
+ if d.LD.temporal.Temporal.weekday = Date.Sun then
+ Alcotest.(check bool)
+ (Printf.sprintf "%s is a Sunday: creed must be true" (Date.to_iso8601 d.LD.date))
+ true d.LD.creed)
+ days
+
+(* ---- Review finding 1 (celebrant-rubrics-phase1 fix task): RG 24/25's
+ feriae II and III classis (the Advent ferias 17-23 December, the
+ Advent/Lent/September Ember sets, and the numbered Lenten/Passiontide
+ ferias) are excluded from the Creed by NO check in rubrics_ef.ml -- see
+ that file's own RG 23 comment (the [n = -46 ...] branch) for the full
+ account. [creed]'s correct [false] answer for them rests entirely on an
+ unstated property of {!Rite_ef.Temporal_ef}: no ferial-origin office it
+ ever builds carries [subject = Lord] or [subject = Bvm] at [Class2]
+ (RG 475(c)'s own rank guard), and none carries a slug on
+ [RE.creed_apostle_slugs] (RG 475(e), which has no rank guard at all).
+ This test asserts that property directly against real Temporal_ef
+ output, rather than leaving it asserted only in prose, so a future
+ Temporal_ef change that breaks it fails HERE loudly instead of silently
+ changing the Creed.
+
+ Two real, harmless, already-documented exceptions are excluded from the
+ [subject] checks rather than papered over: the Sacred Triduum
+ ([subject = Lord], [Class1] -- verified in temporal_ef.ml's own
+ [triduum_names] branch) and the votive Office of the BVM on Saturday,
+ RG 91 entry 27 ([subject = Bvm], [Class4] -- {!TE}'s own [is_bvm_saturday]
+ citation). Neither can ever reach [creed]'s 475(c) branch: the Triduum
+ is caught earlier by the explicit feria-I-classis check (its own
+ [Class1] is not [Class2]), and the BVM Saturday Office is [Class4], not
+ [Class2], so 475(c)'s own rank guard excludes it regardless of subject.
+ Excluding them here is not a loophole in the test -- it is the precise
+ boundary of what RG 475(c) actually reads, confirmed rather than
+ assumed by restricting the [Lord]/[Bvm] checks to exactly [Class2] (RG
+ 24's own II-class population) and [Class3] (RG 25's III-class
+ population), the two ranks a real feria can carry that are NOT already
+ handled by an explicit branch or a rank mismatch. The apostle-slug
+ check has no such carve-out: it is asserted for every ferial-origin day
+ of every rank, matching 475(e)'s own unguarded text.
+
+ A THIRD exception -- not anticipated when this test was first written,
+ found by actually running it, not by inspection -- had to be excluded
+ from the POPULATION itself, not from the subject checks: RG 17(a)'s own
+ "secus die 2 ianuarii" fallback (2 January, only in a civil year with
+ no 2-5 January Sunday) is a genuine FEAST, [subject = Lord], [Class2],
+ sitting outside {!TE.named}'s table for a purely architectural reason
+ (temporal_ef.ml's own citation: that table's shape cannot express a
+ fallback conditional on a per-year fact) and not always a Sunday
+ either, so neither of [is_ferial_origin]'s two filters caught it on the
+ first run -- it failed on 1584-01-02 before {!is_holy_name_fallback}
+ below was added. Left in as evidence the sweep has real teeth rather
+ than trimmed from the span: excluding a genuine mistaken positive by
+ name, once found, is the correct fix; narrowing the span to dodge it
+ would not have been.
+
+ A day is "ferial-origin" here iff {!TE.named} returns [None] for it
+ (nothing in the fixed/movable table of named feasts, vigils and octave
+ days claims it), it is not a Sunday (RG 21's own definition: "Nomine
+ feriae intelleguntur singuli dies hebdomadae, praeter dominicam" --
+ every day of the week EXCEPT Sunday), and it is not the RG 17(a)
+ fallback date just above. *)
+let contains_substring ~needle haystack =
+ let nl = String.length needle and hl = String.length haystack in
+ let rec loop i = (i + nl <= hl) && (String.sub haystack i nl = needle || loop (i + 1)) in
+ nl = 0 || loop 0
+
+(* RG 17(a)'s own "secus die 2 ianuarii" fallback (temporal_ef.ml's own
+ citation on [holy_name_fallback_date]): a genuine FEAST, [subject =
+ Lord], [Class2] -- legitimately outside {!TE.named}'s table only for an
+ architectural reason (that table's bare [Date.t -> ... option] shape
+ cannot express a fallback conditional on a per-year fact,
+ [holy_name_sunday y = None]), never a ferial one, and it is not always
+ a Sunday, so the weekday filter below does not catch it either. Found
+ by running this test before this exclusion existed: it failed on
+ 1584-01-02, a real year with no 2-5 January Sunday. *)
+let is_holy_name_fallback (d : Date.t) =
+ let y = Date.year d in
+ Date.compare d (TE.holy_name_fallback_date y) = 0 && TE.holy_name_sunday y = None
+
+let is_ferial_origin (d : Date.t) =
+ TE.named d = None && Date.weekday d <> Date.Sun && not (is_holy_name_fallback d)
+
+(* Span: civil years 1583-1682, the domain's own opening century -- every
+ RG 24/25 population recurs every civil year (Advent 17-23, all three
+ non-Whitsun Ember sets, and Lenten/Passiontide ferias are none of them
+ rare or conditional), so one year already gives full COVERAGE; a
+ century instead of one is for confidence the invariant is not an
+ accident of a single Easter date, at a cost (day-by-day calls to the
+ pure {!TE.temporal}, no Calendar/Precedence resolution) cheap enough to
+ stay in the default, unsampled suite. 1583 is also the domain's own
+ lower bound, and this span contains 1598, the earliest possible Easter
+ (22 March) in [1583, 2500] per {!test_easter_extremes} above -- a real,
+ not merely nominal, edge case. Coverage is VERIFIED below via counters,
+ not assumed: a test that never actually walks an Ember day would prove
+ nothing about Ember days. *)
+let test_ferial_origin_never_carries_lord_bvm_or_apostle_slug () =
+ let total = ref 0
+ and advent_ember = ref 0
+ and lent_ember = ref 0
+ and september_ember = ref 0
+ and advent_17_23 = ref 0
+ and lenten_passiontide_class3 = ref 0 in
+ for y = 1583 to 1682 do
+ let dec31 = mk y 12 31 in
+ let d = ref (mk y 1 1) in
+ while Date.compare !d dec31 <= 0 do
+ (if is_ferial_origin !d then begin
+ let t = TE.temporal !d in
+ incr total;
+ let office = t.Temporal.office in
+ let slug = Slug.to_string office.Cel.slug in
+ let label = Printf.sprintf "%s (%s, rank=%s)" (Date.to_iso8601 !d) slug
+ (match office.Cel.rank with
+ | V.Class1 -> "1"
+ | V.Class2 -> "2"
+ | V.Class3 -> "3"
+ | V.Class4 -> "4")
+ in
+ (* Coverage tallies -- checked against zero below. *)
+ if contains_substring ~needle:"advent-ember" slug then incr advent_ember;
+ if contains_substring ~needle:"lent-ember" slug then incr lent_ember;
+ if contains_substring ~needle:"september-ember" slug then incr september_ember;
+ if Date.month !d = 12 && Date.day !d >= 17 && Date.day !d <= 23 then incr advent_17_23;
+ if
+ office.Cel.rank = V.Class3
+ && (t.Temporal.season = V.Lent || t.Temporal.season = V.Passiontide)
+ then incr lenten_passiontide_class3;
+ (* The invariant itself. Apostle slugs: every rank, no carve-out. *)
+ Alcotest.(check bool) (label ^ ": not on the apostle-natalicium slug list") false
+ (List.mem slug RE.creed_apostle_slugs);
+ (* Lord/Bvm subject: only at the two ranks a real RG 24/25 feria
+ can carry -- see this test's own header for why Class1
+ (Triduum) and Class4 (BVM Saturday) are deliberately excluded. *)
+ if office.Cel.rank = V.Class2 || office.Cel.rank = V.Class3 then begin
+ Alcotest.(check bool) (label ^ ": not subject Lord") false (office.Cel.subject = Subject.Lord);
+ Alcotest.(check bool) (label ^ ": not subject Bvm") false (office.Cel.subject = Subject.Bvm)
+ end
+ end);
+ d := Date.add_days !d 1
+ done
+ done;
+ Alcotest.(check bool) "span examined a real number of ferial-origin days" true (!total > 10_000);
+ Alcotest.(check bool) "span reached Advent Ember days" true (!advent_ember > 0);
+ Alcotest.(check bool) "span reached Lent Ember days" true (!lent_ember > 0);
+ Alcotest.(check bool) "span reached September Ember days" true (!september_ember > 0);
+ Alcotest.(check bool) "span reached Advent 17-23 ferias" true (!advent_17_23 > 0);
+ Alcotest.(check bool) "span reached Lenten/Passiontide III-class ferias" true
+ (!lenten_passiontide_class3 > 0)
+
+(* ---- 237(a): the three named Paschaltide days ---- *)
+
+let test_237a_easter_sunday () = check_te_deum "237(a): Easter Sunday" 2026 4 5 true
+let test_237a_low_sunday () = check_te_deum "237(a): Low Sunday" 2026 4 12 true
+let test_237a_pentecost () = check_te_deum "237(a): Pentecost Sunday" 2026 5 24 true
+
+(* ---- 237(f): the vigils of Ascension and Pentecost, both otherwise
+ reachable by 238(b) (the Ascension vigil is Class2) or moot to it
+ (the Pentecost vigil is Class1) ---- *)
+
+let test_237f_ascension_vigil () = check_te_deum "237(f): Vigil of the Ascension" 2026 5 13 true
+let test_237f_pentecost_vigil () = check_te_deum "237(f): Vigil of Pentecost" 2026 5 23 true
+
+(* ---- 237(d): the three privileged octaves, reusing [creed]'s own windows
+ -- a day within the Nativity octave whose OWN office is a real saint
+ (RG 67's "Com. octavae Nativitatis"), and an Easter-week feria outside
+ the narrower 237(a) list ---- *)
+
+let test_237d_nativity_octave_saint () =
+ check_te_deum "237(d): St John within the Nativity octave" 2026 12 27 true
+
+let test_237d_easter_week_feria () = check_te_deum "237(d): Easter Tuesday" 2026 4 7 true
+
+(* ---- 238(b): the omissible (Class2/Class3) vigils -- St Lawrence's own,
+ picked in a year where nothing displaces it, confirmed via
+ `colitur day 2026` first the same way the Creed tests were derived ---- *)
+
+let test_238b_omissible_vigil () =
+ (* 9 August 2026 is itself a Sunday (the vigil impeded, see 237(b)'s own
+ test below, which reuses that exact date) -- 2027 is picked instead,
+ confirmed via `colitur day 2027` first, the same discipline every
+ other date in this file follows. *)
+ check_te_deum "238(b): Vigil of St Lawrence" 2027 8 9 false
+
+(* ---- The Nativity Vigil (I class): NOT literally named by 238(b)'s own
+ "II et III classis" text -- excluded here on the structural RG 21/35
+ taxonomy inference [te_deum]'s own comment states explicitly as an
+ inference, not a citation. Flagged the same way in the task report;
+ checked against the FIUV Ordo's own Te Deum marker for 24 December in
+ test_fiuv_ordo.ml, which is this inference's real corroboration. ---- *)
+
+let test_nativity_vigil_excluded_by_inference () =
+ check_te_deum "Nativity Vigil (I class): excluded, inference not literal 238(b)" 2026 12 24 false
+
+(* ---- 238(c)/RG23: Ash Wednesday and Good Friday (moot -- no Mass, but the
+ RG23 feria-I-classis exclusion still answers [false] regardless of
+ colour) ---- *)
+
+let test_238c_ash_wednesday () = check_te_deum "238(c)/RG23: Ash Wednesday" 2026 2 18 false
+let test_238c_good_friday () = check_te_deum "238(c)/RG23: Good Friday" 2026 4 3 false
+
+(* ---- 237(g): the votive Office of the BVM on Saturday -- reused directly
+ from test/cli.t's own pinned example ---- *)
+
+let test_237g_bvm_saturday () = check_te_deum "237(g): BVM Saturday Office" 2026 7 11 true
+
+(* ---- 237(e): a plain, non-octave, non-Sunday feria of Christmastide (2-5
+ January) ---- *)
+
+let test_237e_christmastide_feria () =
+ check_te_deum "237(e): 2 January, a Christmastide feria" 2026 1 2 true
+
+(* ---- 237(b): an ordinary II-class Sunday outside Septuagesima, and its
+ own explicit exception (a Septuagesima/Sexagesima Sunday, [Class2],
+ excepted by name) ---- *)
+
+let test_237b_ordinary_class2_sunday () =
+ check_te_deum "237(b): an ordinary Time-after-Pentecost Sunday" 2026 8 9 true
+
+(* RE-VERIFIED against the CORRECTED FIUV extraction ([te_deum]'s own
+ 237(a) comment has the full account of the extractor bug an earlier
+ pass of this task found and fixed): 237(b)'s own literal "exceptis
+ dominicis in Septuagesima, in Sexagesima et in Quinquagesima" holds
+ after all -- these two Sundays do NOT say the Te Deum, confirmed
+ against the corrected data, not merely the original transcription
+ alone. *)
+let test_237b_septuagesima_exception () =
+ check_te_deum "237(b)'s own exception: Septuagesima Sunday" 2027 1 24 false
+
+let test_237b_sexagesima_exception () =
+ check_te_deum "237(b)'s own exception: Sexagesima Sunday" 2027 1 31 false
+
+(* ---- 237(c): a genuine sanctoral feast kept during a penitential season
+ (St Paul of the Cross, Class3, outside any privileged window) and one in
+ Ordinary Time (Lawrence, Class2) ---- *)
+
+let test_237c_sanctoral_feast () = check_te_deum "237(c): a sanctoral feast (Lawrence)" 2026 8 10 true
+
+(* Found alongside the FIUV extractor-bug fix ([te_deum]'s own 237(c)
+ comment has the full account): Passion Sunday and Palm Sunday are BOTH
+ entries in {!Temporal_ef.named} (named individually for RG 91 entry 6),
+ which without the [temporal.weekday <> Sun] guard on 237(c)'s own
+ [named<>None] disjunct would wrongly grant them [true] by ACCIDENT of
+ table membership -- neither is a genuine "festum" (RG 35's own "dies
+ dominica" is its own category), and both are [Class1] Sundays 237(b)'s
+ own [Class2] guard already excludes. Confirmed [false] directly against
+ the corrected FIUV extraction. *)
+let test_passion_sunday_not_a_festum () = check_te_deum "Passion Sunday is not a festum for 237(c)" 2026 3 22 false
+let test_palm_sunday_not_a_festum () = check_te_deum "Palm Sunday is not a festum for 237(c)" 2026 3 29 false
+
+(* ---- 238(d): the Requiem proxy, shared with [creed]'s own 476(f) and the
+ SAME two-member {!Colour.Black} population
+ {!test_colour_black_population_is_exactly_two} already asserts ---- *)
+
+let test_238d_all_souls () = check_te_deum "238(d): All Souls' Day (transferred)" 2025 11 3 false
+
+(* ---- RG 431(c): Holy Thursday and the Easter Vigil Mass say the Gloria
+ even though neither day's own Matins says the Te Deum (both are
+ feria-I-classis, [te_deum]'s own 238(c) branch) -- the one place [gloria]
+ and [te_deum] genuinely disagree on real data. Holy Saturday also proves
+ 431(c) outranks 432(b): its own colour is [Violet]
+ (Passiontide's [season_colour]), yet the Gloria is still said. ---- *)
+
+let test_431c_holy_thursday () = check_gloria "431(c): Holy Thursday" 2026 4 2 true
+let test_431c_easter_vigil () = check_gloria "431(c): the Easter Vigil Mass (Holy Saturday)" 2026 4 4 true
+
+(* ---- RG 432(b): violet vestments -- independent of [te_deum], checked
+ against an Advent Sunday (I class, so [te_deum] would ALSO answer
+ [false] here via its own 237(b) rank guard: this is a same-answer
+ witness, not proof of independent teeth -- see the task report for why
+ no fully independent (te_deum=true, violet) witness exists anywhere in
+ the shipped 1583-9999 domain: every real [Colour.Violet] [Feast] entry
+ is one of the five sanctoral vigils, already excluded by [te_deum]'s
+ own [is_vigil] branch either way). ---- *)
+
+let test_432b_violet_sunday () = check_gloria "432(b): Advent I Sunday, violet" 2026 11 29 false
+
+(* ---- RG 432(d): the Requiem proxy, same population as 238(d) above ---- *)
+
+let test_432d_all_souls () = check_gloria "432(d): All Souls' Day (transferred)" 2025 11 3 false
+
+(* ---- RG 431(a)/432(a): mirrors [te_deum] for everything not already
+ decided above -- one true, one false, neither reachable via 431(c)/432(b)/
+ 432(d) ---- *)
+
+let test_431a_mirrors_te_deum_true () =
+ check_gloria "431(a): mirrors [te_deum]=true (a sanctoral feast, Lawrence)" 2026 8 10 true
+
+let test_432a_mirrors_te_deum_false () =
+ check_gloria "432(a): mirrors [te_deum]=false (an ordinary Advent feria)" 2025 12 1 false
+
+(* ---- The Rogation Monday/Tuesday cascade (celebrant-rubrics-phase1 Bug 1
+ fix, 2026-08-22): {!Rite_ef.Temporal_ef.temporal} used to hardcode
+ [Colour.Violet] on these two days with no citation, which silenced
+ [gloria] via 432(b) even though 237(e)'s own Paschaltide-feria branch
+ already said [te_deum]=true underneath. Fixed to [season_colour] (RG
+ 119: white from the Paschal Vigil to the Pentecost Vigil exclusive; RG
+ 128's own violet list never names Rogation days; RG 88 -- the violet
+ belongs to the Rogation MASS, not the Office this field describes).
+ 2028-05-22/23: neither day is impeded that year (test_golden.ml's own
+ [test_rogation_{monday,tuesday}_white_2028] pins the colour side of the
+ same fix), so both resolve to white and both now say the Gloria, MIRROR
+ OF [te_deum] via 431(a) once 432(b)'s violet guard no longer fires --
+ MATCHING the LMS Ordo witness (2023-2024, 2024-05-06, "FERIA IV Cl W
+ ... Gl"). Reverting temporal_ef.ml's fix alone (mutation-checked while
+ building this task) turns both [false], the pre-fix answer. *)
+let test_rogation_monday_gloria_2028 () = check_gloria "Rogation Monday: white -> Gloria said (2028)" 2028 5 22 true
+let test_rogation_tuesday_gloria_2028 () = check_gloria "Rogation Tuesday: white -> Gloria said (2028)" 2028 5 23 true
+
+(* ---- Domain-wide sanity, task requirement 5: "every violet day must be
+ false (RG 432 b), and every Requiem must be false (432 d)". Two
+ invariants, checked over every day {!Cal.year} resolves -- [Cal.year],
+ not [Cal.day] in a loop, for the same cost reason
+ {!test_every_sunday_in_2026_says_the_creed} above already gives.
+
+ FAST (default suite): a fixed 200-year span, 1583-1782 -- large enough
+ to cross multiple Easter cycles and every season repeatedly, cheap
+ enough to stay in `dune test`'s own budget. EXHAUSTIVE (gated the same
+ way {!test_validate.test_exhaustive_domain_sweep} already is, via
+ COLITUR_EXHAUSTIVE_SWEEP): the full 1583-9999 domain, also tallying and
+ printing the true/false distribution so the measurement this task asks
+ for is not merely "did the invariant hold" but has a number attached --
+ see the task report for the printed figures. *)
+(* NOT a blanket "every violet day is [gloria]=false" (the task brief's own
+ phrasing, taken literally, is one exception too strong): RG 431(c) is a
+ NAMED, lex-specialis override for the Easter Vigil Mass, and colitur's
+ own per-day colour model gives Holy Saturday [Colour.Violet]
+ ([gloria]'s own header has the full argument for why -- the historical
+ violet-to-white vestment change happens AT the Gloria itself, a
+ per-action nuance this whole day/colour model already cannot express).
+ So the real invariant, checked here, is "every violet day is
+ [gloria]=false EXCEPT the Easter Vigil (Easter offset -1), which is
+ [gloria]=true BY DESIGN" -- and the exception is asserted to be EXACTLY
+ that one shape, every year, nothing else: [n = -1] is checked directly
+ rather than merely excluded, so a second, unexpected (violet,
+ gloria=true) day anywhere in the domain still fails loudly. Pushed back
+ on the task brief's own simplified phrasing rather than silently
+ special-cased -- see the task report. *)
+let check_gloria_invariants_for_year y (counts : (int * int * int * int) ref) =
+ let days = Cal.year ctx layer y in
+ (* Per-date, NOT once per loop iteration off [y]: a liturgical year
+ "opening in civil year y" ({!Rite.t.year_start}'s own doc comment)
+ runs from that year's Advent into MOST of civil year y+1 -- so
+ [Cal.year ctx layer y]'s own array holds dates whose civil year is
+ y+1 for the whole Christmas-to-Pentecost span, governed by EASTER OF
+ y+1, not y. A single [Computus.gregorian_easter y] computed once here
+ wrongly used year y's own Easter for those dates -- found live: it
+ misidentified 1584-03-31 (Holy Saturday, governed by 1584's Easter,
+ surfaced while processing loop iteration y=1583) as an ordinary
+ violet day instead of the Vigil's own 431(c) exception, because
+ Easter 1583 (not 1584) was subtracted. Fixed by keying off
+ [Date.year d.LD.date] instead, which is always safe here: Holy
+ Saturday and Easter Sunday are never more than a few days apart and
+ never cross a civil-year boundary. *)
+ let violet, black, gloria_true, gloria_false = !counts in
+ let violet = ref violet
+ and black = ref black
+ and gloria_true = ref gloria_true
+ and gloria_false = ref gloria_false in
+ Array.iter
+ (fun (d : (V.season, V.rank) LD.t) ->
+ (if d.LD.gloria then incr gloria_true else incr gloria_false);
+ if d.LD.observed.Cel.colour = Colour.Violet then begin
+ incr violet;
+ let easter = Computus.gregorian_easter (Date.year d.LD.date) in
+ let n = Date.to_rata d.LD.date - Date.to_rata easter in
+ if n = -1 then
+ Alcotest.(check bool)
+ (Printf.sprintf "%s: the Easter Vigil's own 431(c) override, [gloria]=true despite violet"
+ (Date.to_iso8601 d.LD.date))
+ true d.LD.gloria
+ else
+ Alcotest.(check bool)
+ (Printf.sprintf "%s: violet -> [gloria]=false (RG 432(b))" (Date.to_iso8601 d.LD.date))
+ false d.LD.gloria
+ end;
+ if d.LD.observed.Cel.colour = Colour.Rose then
+ (* Gaudete/Laetare -- [gloria] reads [false] here via [te_deum]'s
+ own [Class2] guard on 237(b) (both Rose Sundays are [Class1] BY
+ CONSTRUCTION -- {!Rite_ef.Rubrics_ef.gloria}'s own 432(b)
+ citation has the full "checked, then found redundant, then
+ removed" account of why 432(b) itself does NOT need its own
+ Rose branch). Not folded into the [violet] counter above:
+ keeping the two colours separately tallied is what let this
+ invariant catch the Gaudete/Laetare gap live in the first place
+ (found via the LMS Ordo, 2023-12-17 and 2024-03-10) rather than
+ silently averaging it away inside one shared bucket. *)
+ Alcotest.(check bool)
+ (Printf.sprintf "%s: Rose (Gaudete/Laetare) -> [gloria]=false" (Date.to_iso8601 d.LD.date))
+ false d.LD.gloria;
+ if d.LD.observed.Cel.colour = Colour.Black then begin
+ incr black;
+ Alcotest.(check bool)
+ (Printf.sprintf "%s: Requiem (black) -> [gloria]=false (RG 432(d))" (Date.to_iso8601 d.LD.date))
+ false d.LD.gloria
+ end)
+ days;
+ counts := (!violet, !black, !gloria_true, !gloria_false)
+
+let test_domain_violet_implies_no_gloria_sample () =
+ let counts = ref (0, 0, 0, 0) in
+ for y = 1583 to 1782 do
+ check_gloria_invariants_for_year y counts
+ done;
+ let violet, _, _, _ = !counts in
+ Alcotest.(check bool) "the 200-year sample reached a real number of violet days" true (violet > 1000)
+
+let test_domain_requiem_implies_no_gloria_sample () =
+ (* Separate test name, same underlying sweep as the one immediately above
+ -- {!Cal.year} is only computed once per year regardless (module-level
+ [ctx]/[layer], no per-test reload), so this is not a second pass over
+ the domain, only a second, independently-named assertion on the same
+ tally, matching how {!test_colour_black_population_is_exactly_two}
+ above separates its own DATA and CODE checks into one function while
+ this pair keeps violet and black as two named outcomes. *)
+ let counts = ref (0, 0, 0, 0) in
+ for y = 1583 to 1782 do
+ check_gloria_invariants_for_year y counts
+ done;
+ let _, black, _, _ = !counts in
+ Alcotest.(check bool) "the 200-year sample reached at least one Requiem day" true (black > 0)
+
+let colitur_exhaustive_sweep_env = "COLITUR_EXHAUSTIVE_SWEEP"
+
+let test_exhaustive_gloria_domain_sweep () =
+ if Sys.getenv_opt colitur_exhaustive_sweep_env = None then Alcotest.skip ()
+ else begin
+ let counts = ref (0, 0, 0, 0) in
+ for y = 1583 to 9999 do
+ check_gloria_invariants_for_year y counts
+ done;
+ let violet, black, gloria_true, gloria_false = !counts in
+ Printf.printf
+ "gloria domain sweep 1583..9999: violet=%d black=%d gloria_true=%d gloria_false=%d total=%d\n%!"
+ violet black gloria_true gloria_false (gloria_true + gloria_false);
+ Alcotest.(check bool) "the full domain reached a real number of violet days" true (violet > 100_000);
+ Alcotest.(check bool) "the full domain reached a real number of Requiem days" true (black > 1_000)
+ end
+
+(* ---- RG 482-499, the preface -- see lib/rites/rite_ef/rubrics_ef.ml for
+ the rubric quoted in full and every branch's own citation. One
+ end-to-end test per branch, resolved against REAL calendar dates
+ through the shipped data, the same discipline every other section of
+ this file already follows -- most of these dates were cross-checked
+ directly against the FIUV Ordo's own [praef] column
+ (test/fixtures/fiuv-ordo-2025-2026.sexp) before being pinned here, not
+ merely derived from the Latin text in isolation; see [preface]'s own
+ header for the full account of what that cross-check settled. ---- *)
+
+module Pref = Colitur_kernel.Preface
+
+let preface_on y m d = (day_on y m d).LD.preface
+
+let preface_string_on y m d =
+ match preface_on y m d with Some p -> Pref.to_string p | None -> "-"
+
+let check_preface name expected y m d =
+ Alcotest.(check string) name (Pref.to_string expected) (preface_string_on y m d)
+
+let check_no_preface name y m d = Alcotest.(check string) name "-" (preface_string_on y m d)
+
+(* ---- Good Friday: no Mass at all, [None] -- checked ahead of the
+ Requiem/Black-colour branch (this file's own [preface] header explains
+ why the two need different answers, unlike creed/gloria/te_deum). ---- *)
+let test_preface_good_friday_no_mass () = check_no_preface "Good Friday: no Mass, no preface" 2026 4 3
+
+(* ---- RG 499: the Requiem proxy, the SAME two-member {!Colour.Black}
+ population {!test_colour_black_population_is_exactly_two} already
+ asserts, with Good Friday split out above. ---- *)
+let test_preface_499_all_souls () =
+ check_preface "RG 499: All Souls' Day (transferred)" Pref.Requiem 2025 11 3
+
+(* ---- RG 487(a): the two fixed Holy Cross feast triggers. ---- *)
+let test_preface_487a_exaltation () =
+ check_preface "RG 487(a): the Exaltation of the Holy Cross" Pref.Holy_cross 2026 9 14
+
+let test_preface_487a_precious_blood () =
+ check_preface "RG 487(a): the Most Precious Blood" Pref.Holy_cross 2026 7 1
+
+(* ---- RG 491/492: Sacred Heart, Christ the King -- single named days. ---- *)
+let test_preface_491_sacred_heart () = check_preface "RG 491: the Sacred Heart" Pref.Sacred_heart 2026 6 12
+let test_preface_492_christ_the_king () =
+ check_preface "RG 492: Christ the King" Pref.Christ_the_king 2026 10 25
+
+(* ---- RG 490(a): Ascension Day itself. ---- *)
+let test_preface_490a_ascension_day () = check_preface "RG 490(a): Ascension Day" Pref.Ascension 2026 5 14
+
+(* ---- RG 494(a): Trinity Sunday itself. ---- *)
+let test_preface_494a_trinity_sunday () = check_preface "RG 494(a): Trinity Sunday" Pref.Trinity 2026 5 31
+
+(* ---- RG 496: St Joseph's two feasts. ---- *)
+let test_preface_496_joseph_spouse () = check_preface "RG 496: St Joseph, Spouse of the BVM" Pref.St_joseph 2026 3 19
+let test_preface_496_joseph_workman () = check_preface "RG 496: St Joseph the Workman" Pref.St_joseph 2027 5 1
+
+(* ---- RG 495: a genuine Marian FEAST via [marian_slugs] (the Assumption),
+ and the VOTIVE-shaped BVM Saturday Office via [subject = Bvm] -- the
+ latter is the live witness for RG 495's own "et votivis" half on this
+ engine's data (this file's own [preface] header has the full account,
+ corroborated against the Ordo on 3/10 January 2026). ---- *)
+let test_preface_495_assumption () = check_preface "RG 495: the Assumption (marian_slugs)" Pref.Bvm 2026 8 15
+let test_preface_495_bvm_saturday_office () =
+ check_preface "RG 495: the BVM Saturday Office (subject=Bvm, votive-shaped)" Pref.Bvm 2026 7 11
+
+(* ---- RG 484(a)'s own explicit Purification clause: 2 February, checked
+ as a standalone slug trigger regardless of season -- see [preface]'s
+ own header for why this needed to be independent of the Nativity
+ WINDOW below (2 February is nowhere near it). ---- *)
+let test_preface_484a_purification () = check_preface "RG 484(a): the Purification" Pref.Nativity 2026 2 2
+
+(* ---- RG 484(a)/(b) merged: the Nativity octave window, 25 December-1
+ January, PLUS RG 484(b)'s own extra "2 ad 5 ianuarii" days -- one
+ contiguous window. St Stephen (26 December) is the live witness that
+ this OUTRANKS an ordinary saint's own otherwise-Common preface;
+ {!creed}'s own 475(d) test picks the identical date for the identical
+ "occurring inside a privileged window" shape. ---- *)
+let test_preface_484_nativity_day () = check_preface "RG 484(a): Christmas Day itself" Pref.Nativity 2026 12 25
+let test_preface_484_stephen_in_octave () =
+ check_preface "RG 484(b): St Stephen, occurring within the Nativity octave" Pref.Nativity 2026 12 26
+
+let test_preface_484_jan1_octave_day () =
+ check_preface "RG 484(a): 1 January, the Octave Day" Pref.Nativity 2026 1 1
+
+let test_preface_484b_jan2to5 () =
+ (* 2 January 2026 (a plain Christmastide feria, "ef-christmas-1-friday",
+ confirmed via `colitur day 2026`) -- 3 January that year is the BVM
+ Saturday Office instead (RG 495's own "et votivis" outranking this
+ window, this file's own [test_preface_495_bvm_saturday_office] and
+ [preface]'s own header have the full account), so this date is picked
+ specifically to witness the PLAIN de-Tempore grant, uncomplicated by
+ that override. *)
+ check_preface "RG 484(b): 2 January, the extra de-Tempore days" Pref.Nativity 2026 1 2
+
+(* ---- RG 484(b)'s own NARROWER exception: an Apostle/Evangelist inside
+ the Nativity octave is STILL overridden to [Nativity] (unlike every
+ other window, which an Apostle's own preface outranks -- the next test
+ below). John the Evangelist, 27 December, is the live witness this
+ file's own [preface] header cites. ---- *)
+let test_preface_484b_overrides_apostle_in_octave () =
+ check_preface "RG 484(b): St John the Evangelist, inside the Nativity octave, still [Nativity]"
+ Pref.Nativity 2026 12 27
+
+(* ---- RG 497: the Apostle/Evangelist natalicia list, reused from
+ {!creed_apostle_slugs} -- OUTSIDE the Nativity octave, an Apostle keeps
+ his own preface even inside another window (Sts Philip & James, 11 May,
+ inside the Paschaltide/Easter window -- the FIUV Ordo's own witness
+ this file's own [preface] header cites for RG 484(b)'s narrower
+ carve-out, checked from the other direction). ---- *)
+let test_preface_497_barnabas () = check_preface "RG 497: St Barnabas" Pref.Apostles 2026 6 11
+let test_preface_497_peter_paul () = check_preface "RG 497: Sts Peter & Paul" Pref.Apostles 2026 6 29
+let test_preface_497_philip_james_inside_easter_window () =
+ check_preface "RG 497: Sts Philip & James, inside the Easter window, still [Apostles]" Pref.Apostles 2026 5 11
+
+(* ---- RG 497 also covers "conversion-of-st-paul" (25 January, Class3,
+ NOT his own natalicium -- {!creed_apostle_slugs} deliberately excludes
+ it from the CREED for exactly that reason, RG 475(e)'s own natalicium
+ restriction). RG 497 carries no such restriction, and unlike
+ {!test_fiuv_ordo.ml}'s own single window (where 25 January falls on a
+ Sunday, hence impeded), the Latin Mass Society Ordo's three editions
+ (test/test_lms_ordo.ml, Preface-witnesses task, 2026-08-23) each carry
+ an unimpeded 25 January in two of their three civil years, 2024 and
+ 2025, and BOTH independently read "Pr of the Apostles" -- 2024-01-25 is
+ the date pinned here, matching the FIRST of those two witnessed
+ years directly (day names elsewhere in this file default to 2026 for
+ uniformity with the FIUV Ordo's own window, but 2026-01-25 is itself
+ impeded by a Sunday, so it cannot witness this branch at all). ---- *)
+let test_preface_497_conversion_of_st_paul () =
+ check_preface "RG 497: the Conversion of St Paul, not his own natalicium, still [Apostles]" Pref.Apostles 2024 1 25
+
+(* ---- RG 485(a)/(b): Epiphany itself and its own Baptism commemoration
+ (a), the wider 7-13 January window (b) -- Holy Family Sunday (11
+ January 2026) is the live witness that a temporal-origin Sunday inside
+ this window gets [Epiphany], not some Holy-Family-specific preface this
+ engine has none of. ---- *)
+let test_preface_485a_epiphany_day () = check_preface "RG 485(a): Epiphany Day" Pref.Epiphany 2026 1 6
+let test_preface_485a_baptism_commemoration () =
+ check_preface "RG 485(a): the Commemoration of the Baptism of the Lord" Pref.Epiphany 2026 1 13
+
+let test_preface_485b_holy_family_sunday () =
+ check_preface "RG 485(b): Holy Family Sunday, inside the 7-13 January window" Pref.Epiphany 2026 1 11
+
+(* ---- RG 486(a)/(b): the Lenten window, Ash Wednesday through the
+ Saturday before Passion Sunday I. ---- *)
+let test_preface_486_ash_wednesday () = check_preface "RG 486(a): Ash Wednesday" Pref.Lent 2026 2 18
+let test_preface_486_lent_saturday_boundary () =
+ check_preface "RG 486: the Saturday immediately before Passion Sunday I" Pref.Lent 2026 3 21
+
+(* ---- RG 487(a)/(b): the Passiontide window, Passion Sunday I through
+ Holy Thursday inclusive. ---- *)
+let test_preface_487_passion_sunday () = check_preface "RG 487: Passion Sunday I" Pref.Holy_cross 2026 3 22
+let test_preface_487_palm_sunday () = check_preface "RG 487: Palm Sunday" Pref.Holy_cross 2026 3 29
+let test_preface_487_holy_thursday () = check_preface "RG 487: Holy Thursday" Pref.Holy_cross 2026 4 2
+
+(* ---- RG 489(a)/(b): the Easter window, the Vigil Mass through the vigil
+ of the Ascension. ---- *)
+let test_preface_489_easter_vigil_mass () = check_preface "RG 489(a): the Easter Vigil Mass" Pref.Easter 2026 4 4
+let test_preface_489_easter_sunday () = check_preface "RG 489(a): Easter Sunday" Pref.Easter 2026 4 5
+let test_preface_489_ascension_vigil () = check_preface "RG 489(b): the vigil of the Ascension" Pref.Easter 2026 5 13
+
+(* ---- RG 490(b): the post-Ascension window. ---- *)
+let test_preface_490b_post_ascension_feria () =
+ check_preface "RG 490(b): the Friday after Ascension" Pref.Ascension 2026 5 15
+
+let test_preface_490b_sunday_after_ascension () =
+ check_preface "RG 490(b): the Sunday after Ascension" Pref.Ascension 2026 5 17
+
+(* ---- RG 493(a)/(b): the Pentecost-octave window, the vigil through the
+ following Saturday (the Ember Saturday). ---- *)
+let test_preface_493_pentecost_vigil () = check_preface "RG 493(a): the vigil of Pentecost" Pref.Holy_spirit 2026 5 23
+let test_preface_493_pentecost_sunday () = check_preface "RG 493(a): Pentecost Sunday" Pref.Holy_spirit 2026 5 24
+let test_preface_493_ember_saturday () =
+ check_preface "RG 493(a): the Ember Saturday within the Pentecost octave" Pref.Holy_spirit 2026 5 30
+
+(* ---- RG 494(b): the Trinity de-Tempore Sundays -- an Advent Sunday
+ ([temporal.season = Advent], [Class1] by construction) and an ordinary
+ Time-after-Pentecost Sunday. Both now read off [temporal]'s own season,
+ not [observed]'s rank -- see the next test for why the distinction is
+ live, not merely stylistic. ---- *)
+let test_preface_494b_advent_sunday () = check_preface "RG 494(b): Advent I Sunday" Pref.Trinity 2026 11 29
+let test_preface_494b_ordinary_class2_sunday () =
+ check_preface "RG 494(b): an ordinary Time-after-Pentecost Sunday" Pref.Trinity 2026 8 9
+
+(* ---- RG 494(b), the RG 16(a)-shaped fix round: All Saints' Day (1
+ November), [Class1], observed OUTRIGHT over the ordinary Sunday it
+ commemorates -- found via the FIUV Ordo (its own entry reads "Trinit.
+ vel de Omnibus Sanctis et Patronis", the "vel..." half an alternate
+ ORATIO reference, the SAME pattern every other "X vel Y" [praef] value
+ in that fixture already follows, never a second genuine preface). No
+ dedicated preface exists for All Saints among RG 484-497's own
+ fourteen, so RG 482's chain falls to the SUNDAY's own de-Tempore grant
+ regardless of which rank actually won the day -- exactly why this
+ branch must read [temporal]'s season, not [observed]'s [Class1] rank,
+ which an EARLIER version of [preface] wrongly required to equal
+ [Class2] and so answered [Common] here instead.
+
+ 1 November 2026 is itself a Sunday (confirmed via `colitur day 2026`:
+ "all-saints class-1 white +ef-time-after-pentecost-sunday-23"), the
+ exact shape this fix concerns -- picked for that reason, not merely
+ because it is All Saints' Day. *)
+let test_preface_494b_all_saints_class1_sunday () =
+ check_preface "RG 494(b): All Saints' Day, Class1, still Trinity (no dedicated preface exists)" Pref.Trinity
+ 2026 11 1
+
+(* ---- RG 498: the Common residual -- Corpus Christi is the deliberately
+ chosen witness (NOT simply "any ordinary weekday"): the 1962 Missal
+ gives it no preface of its own at all, only an OPTIONAL alternative
+ (Sacred Heart's), so it takes the plain Common, confirmed against the
+ Ordo directly (4 June 2026: "comm. vel de Cor Sacratissimo") -- a real
+ trap this engine's own tier1 list does NOT fall into (no
+ "ef-corpus-christi" entry anywhere in it). ---- *)
+let test_preface_498_corpus_christi () = check_preface "RG 498: Corpus Christi (no proper of its own)" Pref.Common 2026 6 4
+
+let test_preface_498_plain_saint () = check_preface "RG 498: a plain sanctoral saint (Lawrence)" Pref.Common 2026 8 10
+
+(* ---- Corroborating real-data invariants, task requirement 5: "every day
+ in Paschaltide should take the Easter preface unless it has a proper
+ one; every Lenten feria the Lent preface". Checked as a SWEEP, not a
+ single date, over a fixed sample span (1583-2200, matching the century+
+ spans other domain checks in this file already use) -- FAST in the
+ default suite, EXHAUSTIVE (1583-9999) gated behind
+ COLITUR_EXHAUSTIVE_SWEEP the same way {!test_exhaustive_gloria_domain_sweep}
+ above already is.
+
+ The invariant actually checked is NOT the brief's own literal phrasing
+ (which is one exception too strong, the identical "pushed back, not
+ silently special-cased" stance {!check_gloria_invariants_for_year}'s own
+ header already takes for [gloria]/432(b)): every Paschaltide-season day
+ takes [Easter], [Ascension] or [Holy_spirit] (its own three seasonal
+ windows), OR one of the season-independent title triggers this engine
+ can construct inside Paschaltide's real date range ([Bvm]/[St_joseph]/
+ [Apostles]/[Requiem]) -- but NEVER [Nativity]/[Epiphany]/[Lent]/[Trinity]/
+ [Sacred_heart]/[Christ_the_king]/[Common], none of which any real date
+ inside Paschaltide can trigger. Symmetrically for Lent: [Lent] or one of
+ [Bvm]/[St_joseph]/[Apostles]/[Requiem], never a preface belonging to a
+ date-disjoint window. Two further invariants the sweep found and kept,
+ not originally asked for but load-bearing: EVERY Christmastide-season
+ day resolves [Nativity], [Epiphany] or [Bvm] (RG 484/485 between them
+ leave no gap at all in that season on their own -- confirmed
+ exhaustively -- but RG 495's own votive-Mass half, live for the BVM
+ Saturday Office, can and does fall on a Christmastide Saturday too;
+ found live at 1584-01-07 while first running this exact sweep, kept as
+ a real witness rather than narrowed away); and Passiontide, uniquely,
+ legitimately
+ ALSO produces [Easter] exactly once a year (Holy Saturday's own Vigil
+ Mass, [n = -1] -- {!Rite_ef.Rubrics_ef.preface}'s own RG 489(a) comment;
+ this engine's day/colour model keeps that date [Passiontide] by season
+ even though the Vigil Mass's own preface has already moved to Easter's,
+ the same acknowledged per-action nuance [gloria]'s own RG 431(c) comment
+ already documents) -- asserted to be EXACTLY once per year, not merely
+ allowed, so a second, unexplained (Passiontide, Easter) day anywhere in
+ the domain still fails loudly. *)
+let check_preface_season_invariants_for_year y (counts : (int * int * int * int) ref) =
+ let days = Cal.year ctx layer y in
+ let christmastide_gaps = ref 0
+ and paschaltide_gaps = ref 0
+ and lent_gaps = ref 0
+ and passiontide_easter = ref 0 in
+ let christmastide_gaps0, paschaltide_gaps0, lent_gaps0, passiontide_easter0 = !counts in
+ christmastide_gaps := christmastide_gaps0;
+ paschaltide_gaps := paschaltide_gaps0;
+ lent_gaps := lent_gaps0;
+ passiontide_easter := passiontide_easter0;
+ Array.iter
+ (fun (d : (V.season, V.rank) LD.t) ->
+ let label = Printf.sprintf "%s (preface=%s)" (Date.to_iso8601 d.LD.date)
+ (match d.LD.preface with Some p -> Pref.to_string p | None -> "NONE")
+ in
+ (match d.LD.temporal.Temporal.season with
+ | V.Christmastide -> (
+ match d.LD.preface with
+ | Some (Pref.Nativity | Pref.Epiphany | Pref.Bvm) -> ()
+ | _ ->
+ incr christmastide_gaps;
+ Alcotest.failf "%s: Christmastide day with neither Nativity, Epiphany nor Bvm" label)
+ | V.Paschaltide -> (
+ match d.LD.preface with
+ | Some (Pref.Easter | Pref.Ascension | Pref.Holy_spirit | Pref.Bvm | Pref.St_joseph
+ | Pref.Apostles | Pref.Requiem) ->
+ ()
+ | _ ->
+ incr paschaltide_gaps;
+ Alcotest.failf "%s: Paschaltide day with an out-of-window preface" label)
+ | V.Lent -> (
+ match d.LD.preface with
+ | Some (Pref.Lent | Pref.Bvm | Pref.St_joseph | Pref.Apostles | Pref.Requiem) -> ()
+ | _ ->
+ incr lent_gaps;
+ Alcotest.failf "%s: Lent day with an out-of-window preface" label)
+ | V.Passiontide ->
+ if d.LD.preface = Some Pref.Easter then begin
+ incr passiontide_easter;
+ let easter = Computus.gregorian_easter (Date.year d.LD.date) in
+ Alcotest.(check int)
+ (Printf.sprintf "%s: the ONLY Passiontide/Easter day is the Vigil Mass (Easter-1)" label)
+ (-1) (Date.to_rata d.LD.date - Date.to_rata easter)
+ end
+ | _ -> ()))
+ days;
+ counts := (!christmastide_gaps, !paschaltide_gaps, !lent_gaps, !passiontide_easter)
+
+let test_preface_season_invariants_sample () =
+ let counts = ref (0, 0, 0, 0) in
+ for y = 1583 to 1782 do
+ check_preface_season_invariants_for_year y counts
+ done;
+ let _, _, _, passiontide_easter = !counts in
+ Alcotest.(check bool) "the 200-year sample found the once-a-year Passiontide/Easter exception" true
+ (passiontide_easter >= 200)
+
+let test_exhaustive_preface_season_domain_sweep () =
+ if Sys.getenv_opt colitur_exhaustive_sweep_env = None then Alcotest.skip ()
+ else begin
+ let counts = ref (0, 0, 0, 0) in
+ for y = 1583 to 9999 do
+ check_preface_season_invariants_for_year y counts
+ done;
+ let christmastide_gaps, paschaltide_gaps, lent_gaps, passiontide_easter = !counts in
+ Printf.printf
+ "preface season sweep 1583..9999: christmastide_gaps=%d paschaltide_gaps=%d lent_gaps=%d \
+ passiontide_easter=%d\n%!"
+ christmastide_gaps paschaltide_gaps lent_gaps passiontide_easter;
+ Alcotest.(check int) "zero Christmastide gaps anywhere in the domain" 0 christmastide_gaps;
+ Alcotest.(check int) "zero Paschaltide out-of-window prefaces anywhere in the domain" 0 paschaltide_gaps;
+ Alcotest.(check int) "zero Lent out-of-window prefaces anywhere in the domain" 0 lent_gaps;
+ (* 8416, not 8417 (the domain's own year count): a genuine, pre-existing
+ DOMAIN-BOUNDARY edge, not a preface defect -- {!Cal.year}'s own
+ liturgical year "opening in civil year 9999" cannot construct any
+ date past 1583-9999 ({!Date.make}'s own validated range), so it
+ returns only 34 days (28 November-31 December), never reaching its
+ own Easter/Holy Saturday (which would fall in year 10000). Found by
+ running this exact sweep: it returned 8416 first, not asserted
+ blindly at 8417 -- checked directly ([Cal.year ctx layer 9999]
+ alone, printed length 34) before writing this comment, the same
+ "measure before adjudicating" discipline every allow-list in this
+ project follows. The identical edge is why
+ docs/research/rules-register.md's own Layer.index citation already
+ reads "both edges, 1582 and 10000, bit during development" --
+ this sweep is a second witness to the same known boundary, not a
+ new one. *)
+ Alcotest.(check int) "one Passiontide/Easter day per year, every year but the domain's own last" 8416
+ passiontide_easter
+ end
+
+(* ---- BLAST RADIUS, Preface-witnesses task (2026-08-23): adding
+ "conversion-of-st-paul" to {!Rite_ef.Rubrics_ef.preface_apostle_slugs}
+ changes exactly one thing -- the preface on every year's own 25 January
+ WHEN [conversion-of-st-paul] is the day actually observed (impeded, most
+ often by a Sunday, in every other year). Measured directly rather than
+ estimated: every observed occurrence must now read [Apostles], never
+ anything else, and the domain total is printed so the SIZE of this
+ change is on the record, not only its correctness. *)
+let check_conversion_of_st_paul_for_year y (counts : (int * int) ref) =
+ let days = Cal.year ctx layer y in
+ let observed0, wrong0 = !counts in
+ let observed = ref observed0 and wrong = ref wrong0 in
+ Array.iter
+ (fun (d : (V.season, V.rank) LD.t) ->
+ if String.equal (Slug.to_string d.LD.observed.Cel.slug) "conversion-of-st-paul" then begin
+ incr observed;
+ if d.LD.preface <> Some Pref.Apostles then begin
+ incr wrong;
+ Alcotest.failf "%s: conversion-of-st-paul is observed but preface=%s, not Apostles"
+ (Date.to_iso8601 d.LD.date)
+ (match d.LD.preface with Some p -> Pref.to_string p | None -> "NONE")
+ end
+ end)
+ days;
+ counts := (!observed, !wrong)
+
+let test_conversion_of_st_paul_preface_sample () =
+ let counts = ref (0, 0) in
+ for y = 1583 to 1782 do
+ check_conversion_of_st_paul_for_year y counts
+ done;
+ let observed, wrong = !counts in
+ Alcotest.(check int) "zero wrong-preface days in the 200-year sample" 0 wrong;
+ Alcotest.(check bool) "the 200-year sample found real conversion-of-st-paul occurrences" true (observed > 100)
+
+let test_exhaustive_conversion_of_st_paul_preface_sweep () =
+ if Sys.getenv_opt colitur_exhaustive_sweep_env = None then Alcotest.skip ()
+ else begin
+ let counts = ref (0, 0) in
+ for y = 1583 to 9999 do
+ check_conversion_of_st_paul_for_year y counts
+ done;
+ let observed, wrong = !counts in
+ Printf.printf "conversion-of-st-paul preface blast radius 1583..9999: observed=%d wrong=%d\n%!" observed wrong;
+ Alcotest.(check int) "zero wrong-preface days anywhere in the domain" 0 wrong
+ end
+
+(* ---- ITEM 1: RG 111(a), the sung-Mass commemoration cap
+ ({!Colitur_kernel.Precedence.sung_mass_commemorations}) -- two real
+ calendar days, one of each shape, resolved through the identical
+ [Cal.day] pipeline every other test in this file uses. See
+ precedence.mli's own citation for the rubric and the reasoning for why
+ this is a derivation over [LD.commemorations] (the Low-Mass admitted
+ set), not a second stored field. ---- *)
+
+module Prec = Colitur_kernel.Precedence
+
+let sung_slugs y m d =
+ List.map
+ (fun (c, _) -> Slug.to_string c.Cel.slug)
+ (Prec.sung_mass_commemorations (day_on y m d).LD.commemorations)
+
+let test_rg111a_ordinary_only_dropped () =
+ (* 2026-08-14: Vigil of the Assumption, commemorating [eusebius-confessor]
+ ORDINARILY (no privileged category applies) -- confirmed via `colitur
+ day 2026`. At Low Mass this is admitted (RG 111(c)); at a
+ non-conventual Sung Mass RG 111(a) admits it not at all. *)
+ Alcotest.(check (list string)) "RG 111(a): an ordinary-only Low-Mass set is empty at Sung Mass" []
+ (sung_slugs 2026 8 14)
+
+let test_rg111a_privileged_kept () =
+ (* 2026-04-25: St Mark, commemorating the Major Litanies -- RG 80/109(f),
+ a PRIVILEGED commemoration (data/ef/adjustments.sexp's own [Add
+ major-litanies]) -- confirmed via `colitur day 2026`. Kept at BOTH Low
+ Mass (RG 111(c), one privileged) and Sung Mass (RG 111(a), the same
+ single privileged commemoration). *)
+ Alcotest.(check (list string)) "RG 111(a): the one privileged commemoration survives at Sung Mass"
+ [ "major-litanies" ] (sung_slugs 2026 4 25)
+
+let suite =
+ ( "Rubrics_ef",
+ [ Alcotest.test_case "475(a): ordinary Sunday" `Quick test_475a_ordinary_sunday;
+ Alcotest.test_case "475(a): reads [temporal], not [observed] (Trap One)" `Quick
+ test_475a_reads_temporal_not_observed;
+ Alcotest.test_case "475(b): I-class feast" `Quick test_475b_class1_feast;
+ Alcotest.test_case "475(c): II-class feast of the Lord" `Quick test_475c_lord;
+ Alcotest.test_case "475(c): II-class BVM feast via marian_slugs" `Quick
+ test_475c_bvm_via_marian_slugs;
+ Alcotest.test_case "475(d): octave overrides an occurring feast" `Quick
+ test_475d_octave_even_occurring_feast;
+ Alcotest.test_case "475(d): 1 January octave-day boundary" `Quick test_475d_octave_day_boundary;
+ Alcotest.test_case "475(e): an Apostle's own natalicium" `Quick test_475e_apostle_natalicium;
+ Alcotest.test_case "475(e): Barnabas, named explicitly" `Quick
+ test_475e_barnabas_named_explicitly;
+ Alcotest.test_case "475(e): Chair of Peter, named explicitly" `Quick
+ test_475e_chair_of_peter_named_explicitly;
+ Alcotest.test_case "475(e) excludes the Conversion of St Paul (Trap Two)" `Quick
+ test_475e_excludes_conversion_of_paul;
+ Alcotest.test_case "RG 23/476: Ash Wednesday" `Quick test_ash_wednesday_no_creed;
+ Alcotest.test_case "RG 23/476(a): Holy Thursday" `Quick test_holy_thursday_no_creed;
+ Alcotest.test_case "RG 23/476(a): Holy Saturday / Easter Vigil" `Quick
+ test_holy_saturday_easter_vigil_no_creed;
+ Alcotest.test_case "476(f): All Souls' Day (transferred), a Requiem, no Creed" `Quick
+ test_476f_all_souls_no_creed;
+ Alcotest.test_case "476(f)/RG 23(b): Good Friday, black, no Creed" `Quick
+ test_476f_good_friday_no_creed;
+ Alcotest.test_case "Colour.Black population is exactly two (data + code)" `Quick
+ test_colour_black_population_is_exactly_two;
+ Alcotest.test_case "476(b): plain II-class saint (negative)" `Quick
+ test_476b_plain_class2_saint;
+ Alcotest.test_case "vigils excluded even when Class2 and Marian" `Quick
+ test_vigil_excluded_even_when_class2_and_marian;
+ Alcotest.test_case "476(d): BVM Saturday Office, IV class" `Quick test_476d_bvm_saturday_office;
+ Alcotest.test_case "every Sunday in 2026 says the Creed" `Quick
+ test_every_sunday_in_2026_says_the_creed;
+ Alcotest.test_case "RG 24/25: no ferial-origin office carries Lord/Bvm or an apostle slug" `Quick
+ test_ferial_origin_never_carries_lord_bvm_or_apostle_slug;
+ Alcotest.test_case "237(a): Easter Sunday" `Quick test_237a_easter_sunday;
+ Alcotest.test_case "237(a): Low Sunday" `Quick test_237a_low_sunday;
+ Alcotest.test_case "237(a): Pentecost Sunday" `Quick test_237a_pentecost;
+ Alcotest.test_case "237(f): Vigil of the Ascension" `Quick test_237f_ascension_vigil;
+ Alcotest.test_case "237(f): Vigil of Pentecost" `Quick test_237f_pentecost_vigil;
+ Alcotest.test_case "237(d): St John within the Nativity octave" `Quick
+ test_237d_nativity_octave_saint;
+ Alcotest.test_case "237(d): Easter Tuesday" `Quick test_237d_easter_week_feria;
+ Alcotest.test_case "238(b): Vigil of St Lawrence" `Quick test_238b_omissible_vigil;
+ Alcotest.test_case "Nativity Vigil excluded by structural inference, not literal 238(b)" `Quick
+ test_nativity_vigil_excluded_by_inference;
+ Alcotest.test_case "238(c)/RG23: Ash Wednesday" `Quick test_238c_ash_wednesday;
+ Alcotest.test_case "238(c)/RG23: Good Friday" `Quick test_238c_good_friday;
+ Alcotest.test_case "237(g): BVM Saturday Office" `Quick test_237g_bvm_saturday;
+ Alcotest.test_case "237(e): 2 January, a Christmastide feria" `Quick test_237e_christmastide_feria;
+ Alcotest.test_case "237(b): an ordinary Class2 Sunday" `Quick test_237b_ordinary_class2_sunday;
+ Alcotest.test_case "237(b)'s own exception: Septuagesima Sunday" `Quick test_237b_septuagesima_exception;
+ Alcotest.test_case "237(b)'s own exception: Sexagesima Sunday" `Quick test_237b_sexagesima_exception;
+ Alcotest.test_case "237(c): a sanctoral feast (Lawrence)" `Quick test_237c_sanctoral_feast;
+ Alcotest.test_case "Passion Sunday is not a festum for 237(c)" `Quick test_passion_sunday_not_a_festum;
+ Alcotest.test_case "Palm Sunday is not a festum for 237(c)" `Quick test_palm_sunday_not_a_festum;
+ Alcotest.test_case "238(d): All Souls' Day (transferred)" `Quick test_238d_all_souls;
+ Alcotest.test_case "431(c): Holy Thursday" `Quick test_431c_holy_thursday;
+ Alcotest.test_case "431(c): the Easter Vigil Mass" `Quick test_431c_easter_vigil;
+ Alcotest.test_case "432(b): Advent I Sunday, violet" `Quick test_432b_violet_sunday;
+ Alcotest.test_case "432(d): All Souls' Day (transferred)" `Quick test_432d_all_souls;
+ Alcotest.test_case "431(a): mirrors [te_deum]=true" `Quick test_431a_mirrors_te_deum_true;
+ Alcotest.test_case "432(a): mirrors [te_deum]=false" `Quick test_432a_mirrors_te_deum_false;
+ Alcotest.test_case "Rogation Monday: white -> Gloria said (2028)" `Quick test_rogation_monday_gloria_2028;
+ Alcotest.test_case "Rogation Tuesday: white -> Gloria said (2028)" `Quick test_rogation_tuesday_gloria_2028;
+ Alcotest.test_case "domain sanity: every violet day has [gloria]=false (sample)" `Quick
+ test_domain_violet_implies_no_gloria_sample;
+ Alcotest.test_case "domain sanity: every Requiem day has [gloria]=false (sample)" `Quick
+ test_domain_requiem_implies_no_gloria_sample;
+ Alcotest.test_case "domain sweep 1583..9999: violet/Requiem invariants, committed not sampled"
+ `Slow test_exhaustive_gloria_domain_sweep;
+ Alcotest.test_case "RG 111(a): an ordinary-only Low-Mass set is empty at Sung Mass" `Quick
+ test_rg111a_ordinary_only_dropped;
+ Alcotest.test_case "RG 111(a): a privileged commemoration survives at Sung Mass" `Quick
+ test_rg111a_privileged_kept;
+ Alcotest.test_case "preface: Good Friday, no Mass" `Quick test_preface_good_friday_no_mass;
+ Alcotest.test_case "RG 499: All Souls' Day (transferred)" `Quick test_preface_499_all_souls;
+ Alcotest.test_case "RG 487(a): the Exaltation of the Holy Cross" `Quick test_preface_487a_exaltation;
+ Alcotest.test_case "RG 487(a): the Most Precious Blood" `Quick test_preface_487a_precious_blood;
+ Alcotest.test_case "RG 491: the Sacred Heart" `Quick test_preface_491_sacred_heart;
+ Alcotest.test_case "RG 492: Christ the King" `Quick test_preface_492_christ_the_king;
+ Alcotest.test_case "RG 490(a): Ascension Day" `Quick test_preface_490a_ascension_day;
+ Alcotest.test_case "RG 494(a): Trinity Sunday" `Quick test_preface_494a_trinity_sunday;
+ Alcotest.test_case "RG 496: St Joseph, Spouse of the BVM" `Quick test_preface_496_joseph_spouse;
+ Alcotest.test_case "RG 496: St Joseph the Workman" `Quick test_preface_496_joseph_workman;
+ Alcotest.test_case "RG 495: the Assumption (marian_slugs)" `Quick test_preface_495_assumption;
+ Alcotest.test_case "RG 495: the BVM Saturday Office (subject=Bvm)" `Quick
+ test_preface_495_bvm_saturday_office;
+ Alcotest.test_case "RG 484(a): the Purification" `Quick test_preface_484a_purification;
+ Alcotest.test_case "RG 484(a): Christmas Day itself" `Quick test_preface_484_nativity_day;
+ Alcotest.test_case "RG 484(b): St Stephen, inside the Nativity octave" `Quick
+ test_preface_484_stephen_in_octave;
+ Alcotest.test_case "RG 484(a): 1 January, the Octave Day" `Quick test_preface_484_jan1_octave_day;
+ Alcotest.test_case "RG 484(b): 3 January, the extra de-Tempore days" `Quick test_preface_484b_jan2to5;
+ Alcotest.test_case "RG 484(b): St John the Evangelist, inside the Nativity octave" `Quick
+ test_preface_484b_overrides_apostle_in_octave;
+ Alcotest.test_case "RG 497: St Barnabas" `Quick test_preface_497_barnabas;
+ Alcotest.test_case "RG 497: Sts Peter & Paul" `Quick test_preface_497_peter_paul;
+ Alcotest.test_case "RG 497: Sts Philip & James, inside the Easter window" `Quick
+ test_preface_497_philip_james_inside_easter_window;
+ Alcotest.test_case "RG 497: the Conversion of St Paul, not his own natalicium" `Quick
+ test_preface_497_conversion_of_st_paul;
+ Alcotest.test_case "RG 485(a): Epiphany Day" `Quick test_preface_485a_epiphany_day;
+ Alcotest.test_case "RG 485(a): the Commemoration of the Baptism of the Lord" `Quick
+ test_preface_485a_baptism_commemoration;
+ Alcotest.test_case "RG 485(b): Holy Family Sunday, inside the 7-13 January window" `Quick
+ test_preface_485b_holy_family_sunday;
+ Alcotest.test_case "RG 486(a): Ash Wednesday" `Quick test_preface_486_ash_wednesday;
+ Alcotest.test_case "RG 486: the Saturday before Passion Sunday I" `Quick
+ test_preface_486_lent_saturday_boundary;
+ Alcotest.test_case "RG 487: Passion Sunday I" `Quick test_preface_487_passion_sunday;
+ Alcotest.test_case "RG 487: Palm Sunday" `Quick test_preface_487_palm_sunday;
+ Alcotest.test_case "RG 487: Holy Thursday" `Quick test_preface_487_holy_thursday;
+ Alcotest.test_case "RG 489(a): the Easter Vigil Mass" `Quick test_preface_489_easter_vigil_mass;
+ Alcotest.test_case "RG 489(a): Easter Sunday" `Quick test_preface_489_easter_sunday;
+ Alcotest.test_case "RG 489(b): the vigil of the Ascension" `Quick test_preface_489_ascension_vigil;
+ Alcotest.test_case "RG 490(b): the Friday after Ascension" `Quick test_preface_490b_post_ascension_feria;
+ Alcotest.test_case "RG 490(b): the Sunday after Ascension" `Quick
+ test_preface_490b_sunday_after_ascension;
+ Alcotest.test_case "RG 493(a): the vigil of Pentecost" `Quick test_preface_493_pentecost_vigil;
+ Alcotest.test_case "RG 493(a): Pentecost Sunday" `Quick test_preface_493_pentecost_sunday;
+ Alcotest.test_case "RG 493(a): the Ember Saturday within the Pentecost octave" `Quick
+ test_preface_493_ember_saturday;
+ Alcotest.test_case "RG 494(b): Advent I Sunday" `Quick test_preface_494b_advent_sunday;
+ Alcotest.test_case "RG 494(b): an ordinary Time-after-Pentecost Sunday" `Quick
+ test_preface_494b_ordinary_class2_sunday;
+ Alcotest.test_case "RG 494(b): All Saints' Day, Class1, still Trinity" `Quick
+ test_preface_494b_all_saints_class1_sunday;
+ Alcotest.test_case "RG 498: Corpus Christi (no proper of its own)" `Quick test_preface_498_corpus_christi;
+ Alcotest.test_case "RG 498: a plain sanctoral saint (Lawrence)" `Quick test_preface_498_plain_saint;
+ Alcotest.test_case "preface domain sanity: Christmastide/Paschaltide/Lent window invariants (sample)"
+ `Quick test_preface_season_invariants_sample;
+ Alcotest.test_case
+ "preface domain sweep 1583..9999: window invariants, committed not sampled" `Slow
+ test_exhaustive_preface_season_domain_sweep;
+ Alcotest.test_case "conversion-of-st-paul preface blast radius (sample)" `Quick
+ test_conversion_of_st_paul_preface_sample;
+ Alcotest.test_case "conversion-of-st-paul preface blast radius 1583..9999, committed not sampled" `Slow
+ test_exhaustive_conversion_of_st_paul_preface_sweep ] )
diff --git a/test/test_validate.ml b/test/test_validate.ml
index 8b3014a..3da8fbb 100644
--- a/test/test_validate.ml
+++ b/test/test_validate.ml
@@ -300,15 +300,16 @@ module Synthetic = struct
defaults against the default empty [layer], since nothing ever contests
the temporal office there) so the resolution fixtures further down can
override them without duplicating every other field. *)
- (* Most fixtures here exercise no citations -- [readings] is a harmless
- constant [], the same role the other placeholder defaults above play,
- and {!Validate}'s own citation checks are gated on a rite producing SOME
- citation somewhere, so a constant [] leaves them entirely dormant. Task
+ (* Most fixtures here exercise no citations and no formulary -- [readings]
+ is a harmless constant [(None, [])], the same role the other
+ placeholder defaults above play, and {!Validate}'s own citation and
+ formulary checks are gated on a rite producing SOME citation/formulary
+ somewhere, so a constant [(None, [])] leaves them entirely dormant. Task
10 makes it overridable ([?readings] below) so the citation fixtures at
the end of this file can drive those checks directly, exactly as every
- other check here is driven -- rather than leaving two kernel checks with
- no committed proof that they can fire at all. *)
- let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = []
+ other check here is driven -- rather than leaving kernel checks with no
+ committed proof that they can fire at all. *)
+ let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = (None, [])
(* The shape {!Validate} accepts: exactly one First and one Gospel. The
references are deliberately nonsense -- these fixtures assert SHAPE,
@@ -317,16 +318,35 @@ module Synthetic = struct
[ { Citation.part = Citation.First; reference = "Synth 1:1" };
{ Citation.part = Citation.Gospel; reference = "Synth 2:2" } ]
+ (* The formulary equivalent of [well_formed_citations] above -- shape only,
+ never rubrically meaningful content. *)
+ let well_formed_formulary =
+ { Colitur_kernel.Mass_formulary.said = Some (Slug.of_string_exn "syn-formulary");
+ via = Colitur_kernel.Mass_formulary.Own_slug }
+
+ (* No fixture here exercises the Creed, Gloria or preface rubrics -- a
+ rite that has not implemented them returns [false]/[None] explicitly,
+ {!Rite.t.creed}/{!Rite.t.gloria}/{!Rite.t.preface}'s own documented
+ default. Made overridable ([?creed]/[?gloria]/[?preface] below) on
+ the same footing as [?readings] just above, for Task 6's own
+ fixtures. *)
+ let creed ~temporal:_ ~observed:_ ~date:_ = false
+ let gloria ~temporal:_ ~observed:_ ~date:_ = false
+ let preface ~temporal:_ ~observed:_ ~date:_ = None
+
let rite ?(vocab = vocab) ?(anchors = fun _ -> []) ?(season_runs = [ A; B ]) ?(rules = rules)
- ?(transfer_target = fun _ origin _ -> origin) ?(readings = readings) temporal :
- (season, rank) Rite.t =
+ ?(transfer_target = fun _ origin _ -> origin) ?(readings = readings) ?(creed = creed)
+ ?(gloria = gloria) ?(preface = preface) temporal : (season, rank) Rite.t =
{ Rite.id = "synthetic"; vocab; year_start; temporal; anchors; rules; season_runs;
(* Not a Roman rite, but a Rite.t must supply SOME Easter now that
movable Date_spec variants exist. The Gregorian one is as good as
any for a fixture; nothing here is Easter-relative, so the value
is never actually read. *)
easter = Colitur_kernel.Computus.gregorian_easter;
- transfer_target; readings }
+ (* Not a Roman rite either, so no bissextile-doubling convention:
+ identity, {!Rite.t.fixed_key}'s own documented default. *)
+ fixed_key = (fun d -> Some (D.month d, D.day d));
+ transfer_target; readings; creed; gloria; preface }
(* Empty by default: every check built before Task 12 exercises the
TEMPORAL-only pass, where an empty layer is exactly the fixture that
@@ -759,7 +779,7 @@ let test_citations_silent_without_a_lectionary () =
(* The positive: well-formed citations on every day report nothing. *)
let test_citations_clean_when_well_formed () =
- let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = well_formed_citations in
+ let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ = (None, well_formed_citations) in
let fs = run ~readings good in
Alcotest.(check bool) "neither citation check fires when every day carries First + Gospel" false
(has_check "citations" fs || has_check "citations-unresolved" fs)
@@ -769,7 +789,7 @@ let test_citations_clean_when_well_formed () =
plausibly produce -- half a lookup succeeding. *)
let test_citations_fires_on_a_lone_epistle () =
let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ =
- [ { Citation.part = Citation.First; reference = "Synth 1:1" } ]
+ (None, [ { Citation.part = Citation.First; reference = "Synth 1:1" } ])
in
Alcotest.(check bool) "citations check fires when a day carries an Epistle but no Gospel" true
(has_check "citations" (run ~readings good))
@@ -780,7 +800,7 @@ let test_citations_fires_on_a_lone_epistle () =
even though the day is otherwise a well-formed pair. *)
let test_citations_fires_on_an_out_of_scope_part () =
let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ =
- { Citation.part = Citation.Tract; reference = "Synth 3:3" } :: well_formed_citations
+ (None, { Citation.part = Citation.Tract; reference = "Synth 3:3" } :: well_formed_citations)
in
Alcotest.(check bool) "citations check fires when a part outside First/Gospel appears" true
(has_check "citations" (run ~readings good))
@@ -792,7 +812,7 @@ let test_citations_fires_on_an_out_of_scope_part () =
this file singles out. *)
let test_citations_unresolved_fires_on_a_gap () =
let readings ~observed:_ ~temporal:_ ~date ~temporal_at:_ =
- if D.compare date target = 0 then [] else well_formed_citations
+ if D.compare date target = 0 then (None, []) else (None, well_formed_citations)
in
Alcotest.(check bool) "citations-unresolved fires when one day of the year resolves nothing" true
(has_check "citations-unresolved" (run ~readings good));
@@ -801,6 +821,79 @@ let test_citations_unresolved_fires_on_a_gap () =
Alcotest.(check bool) "the well-formedness check stays silent on a pure coverage gap" false
(has_check "citations" (run ~readings good))
+(* ---------------------------------------------------------------------- *)
+(* The formulary invariant (Task 3, celebrant-rubrics-phase1): the same *)
+(* negative-path discipline the citation checks above already hold *)
+(* themselves to, driven through the same synthetic fixture. Model on the *)
+(* citations trio above -- "same shape, its own name" is what {!Validate} *)
+(* itself now does, so the tests proving it can fire follow the same *)
+(* pattern. *)
+(* ---------------------------------------------------------------------- *)
+
+(* The gate: a rite that resolves no formulary at all (the default constant
+ [(None, [])]) must report nothing -- not "usually", not "on this year". *)
+let test_formulary_silent_without_a_lectionary () =
+ let fs = run good in
+ Alcotest.(check bool) "no formulary check fires for a rite with no readings at all" false
+ (has_check "formulary" fs)
+
+(* The positive: a formulary on every day reports nothing. *)
+let test_formulary_clean_when_well_formed () =
+ let readings ~observed:_ ~temporal:_ ~date:_ ~temporal_at:_ =
+ (Some well_formed_formulary, well_formed_citations)
+ in
+ Alcotest.(check bool) "formulary check stays silent when every day resolves one" false
+ (has_check "formulary" (run ~readings good))
+
+(* The coverage gap: a rite that resolves a formulary on most days but falls
+ through on one. On real EF data this has no witness at all (Task 3's own
+ [test_every_day_has_a_formulary] below confirms it directly), so this
+ fixture is the only thing that holds it honest. *)
+let test_formulary_fires_on_a_gap () =
+ let readings ~observed:_ ~temporal:_ ~date ~temporal_at:_ =
+ if D.compare date target = 0 then (None, [])
+ else (Some well_formed_formulary, well_formed_citations)
+ in
+ Alcotest.(check bool) "formulary check fires when one day of the year resolves none" true
+ (has_check "formulary" (run ~readings good))
+
+(* ---------------------------------------------------------------------- *)
+(* Direct real-EF-data coverage (Task 3 brief): every day of every year in *)
+(* the sample resolves a formulary, the same discipline the "citations" *)
+(* checks already hold EF to -- asserted directly against *)
+(* [Liturgical_day.t] rather than through [Validate.run]'s failure list, *)
+(* so a bug in [Validate]'s own gating could not hide this gap. *)
+(* ---------------------------------------------------------------------- *)
+
+(* 2005-2050: the same 46-year sample test_rite_ef.ml's own [sample_years]
+ uses, for the same reason -- non-trivial, deterministic, and already the
+ project's differential-testing window (CLAUDE.md). Defined locally
+ rather than shared: test executables in this project cross-reference
+ only [.suite] values (test_colitur.ml), never each other's internal
+ helpers. *)
+let sample_years =
+ let rec range a b = if a > b then [] else a :: range (a + 1) b in
+ range 2005 2050
+
+let year_of y = Colitur_kernel.Calendar.year real_ef_rite real_ef_layer y
+
+(* Every day of every year resolves a formulary, for the same reason
+ [Validate] already asserts exactly one First and one Gospel: a day that
+ says no Mass at all is a defect, not a gap. Mirrors the "citations"
+ check. *)
+let test_every_day_has_a_formulary () =
+ let missing = ref [] in
+ List.iter
+ (fun y ->
+ Array.iter
+ (fun (d : (_, _) Colitur_kernel.Liturgical_day.t) ->
+ if d.Colitur_kernel.Liturgical_day.formulary = None then
+ missing :=
+ Colitur_kernel.Date.to_iso8601 d.Colitur_kernel.Liturgical_day.date :: !missing)
+ (year_of y))
+ sample_years;
+ Alcotest.(check (list string)) "every day resolves a formulary" [] !missing
+
let suite =
( "Validate",
[ Alcotest.test_case "landmark years" `Quick test_landmark_years;
@@ -830,6 +923,13 @@ let suite =
test_citations_fires_on_an_out_of_scope_part;
Alcotest.test_case "citations-unresolved fires on a gap" `Quick
test_citations_unresolved_fires_on_a_gap;
+ Alcotest.test_case "formulary silent without a lectionary" `Quick
+ test_formulary_silent_without_a_lectionary;
+ Alcotest.test_case "formulary clean when well formed" `Quick
+ test_formulary_clean_when_well_formed;
+ Alcotest.test_case "formulary fires on a gap" `Quick test_formulary_fires_on_a_gap;
+ Alcotest.test_case "every day (2005-2050) resolves a formulary" `Quick
+ test_every_day_has_a_formulary;
Alcotest.test_case "lost fires on resolution exception" `Quick test_lost_fires_on_resolution_exception;
Alcotest.test_case "duplicated fires" `Quick test_duplicated_fires;
Alcotest.test_case "unconverged fires" `Quick test_unconverged_fires;