From 8d1eb25a311e16ddb7bf89d2b21fb1ca0aa058a7 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Mon, 17 Aug 2026 12:28:03 +0200 Subject: test(oracle): compare reading citations against missalemeum Layer 4 (test_oracle.ml) now extracts and compares the Epistle/Gospel citation for every one of the 730 days in the 2026-2027 fixture, the same axis Task 8 already added to layer 3. tools/ extract_missalemeum_oracle.py gained a structural citation-span detector (the first "*...*"-wrapped span under 40 chars containing a chapter:verse-shaped digit pair), verified exhaustively over all 1 458 Lectio/Evangelium sections. 728 of 730 days are comparable; the 2 that are not (Good Friday, both years) have no such section in missalemeum's own JSON at all -- a structural limit on the oracle's own side (M23), not a colitur gap. 451 of 730 days differ and are all explained across 19 cited entries; 0 unexplained. Chain step 4 (the Commons) has no layer-4 witness: confirmed empirically (a scratch sweep, not merely re-asserted from Task 6's own report) that none of the 15 Commons/proper saints is ever the observed office in this window. The comparison surfaced three genuine colitur bugs in data/ef/lectionary.sexp, all fixed at the source in tools/bootstrap_lectionary.ml: 1. Holy Name of Jesus (ef-holy-name-sunday/ef-holy-name) carried a mis-derived citation, borrowed by analogy from an unrelated ini section ("ef-christmas-sunday-0", the Sunday-within-the-Octave's own Mass) on the wrong assumption the two share a Mass. Disproved by missalemeum's own extraction for both real Holy Name Sundays in its window, confirmed against the Missal itself, twice, both scans (Acts 4:8-12/Luke 2:21, not Gal 4:1-7/Luke 2:33-40). 2. RG 17(a)'s own "diebus ferialibus" rubric (immediately following the Holy Name heading, both scans) was never implemented: 2-5 January ferias repeat 1 January's Mass, 7-12 January ferias before Holy Family Sunday repeat Epiphany's, and Holy Family's own week has a named formula ("Missa Dominicae Primae post Epiphaniam"). All three fell to step 3's undifferentiated Sunday walkback instead. Fixed for three 5-weekday families, deliberately excluding Saturday from all three -- RG 78's BVM Saturday Office wins there unconditionally, confirmed against missalemeum's own title on this window's own such Saturdays. 3. Corpus Christi and Sacred Heart (both real, never-impeded I-class movable feasts) had no lectionary entry at all. Both engines independently fell back to Trinity Sunday's own citation and silently agreed on the wrong answer -- the "Holy Thursday violet in both" shape CLAUDE.md names for exactly this reason. Because lectionary.sexp is shared with layer 3 (the lectio differential, 2005-2050), these fixes changed colitur's output for the whole domain, not only 2026-2027. data/ef/expected-divergences.sexp and test_differential.ml needed matching updates: C1 narrowed 361->173 and C25 narrowed 57->13 (rows that now resolve correctly moved to new entries), C16's note corrected (count unchanged), and six new entries added (C29-C34, 397 rows total, all verdict colitur). test_lectionary.ml and test_lectionary_ef.ml's own pins were updated to match (entry count 131->148; one step-3 regression test re-pointed to a date that still genuinely exercises that step). One entry, M26 (30 rows, verdict open), is a genuine unfixed gap: colitur's step-3 "resume the preceding Sunday" fallback is its only ferial-Mass mechanism, and missalemeum's own selection is more granular in three confirmed ways (a rotating votive Mass of the BVM, a named weekly formula for at least one week, and later Time-after-Pentecost weeks this task's own investigation did not narrow to a single rule) -- the same "needs a season-keyed selection mechanism, new behaviour not new data" shape data/ef/expected-divergences.sexp's own C6/C25 and Task 6's own residual concern already name, out of this task's own scope to build. dune test: 358 tests green. COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force: 359 tests green, 89.5s. --- data/ef/expected-divergences-missalemeum.sexp | 39 +- data/ef/expected-divergences.sexp | 46 +- data/ef/lectionary.sexp | 71 +- test/fixtures/missalemeum-ef-2026-2027.provenance | 45 +- test/fixtures/missalemeum-ef-2026-2027.txt | 1460 ++++++++++----------- test/test_differential.ml | 158 ++- test/test_lectionary.ml | 93 +- test/test_lectionary_ef.ml | 31 +- test/test_oracle.ml | 332 ++++- tools/bootstrap_lectionary.ml | 248 +++- tools/extract_missalemeum_oracle.py | 58 +- 11 files changed, 1714 insertions(+), 867 deletions(-) diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp index ff3d776..30187de 100644 --- a/data/ef/expected-divergences-missalemeum.sexp +++ b/data/ef/expected-divergences-missalemeum.sexp @@ -160,7 +160,9 @@ ((id M1) (citation "RG 33, corrected (precedence_ef.ml's own [is_omissible_vigil], primary-source-verified 2026-08-12): \"Vigilia II aut III classis penitus omittitur, si occurrat in dominica quavis...\" -- a II or III class vigil is entirely omitted if it occurs on ANY Sunday") (verdict colitur) - (note "missalemeum does not implement RG 33's Sunday-omission for II/III-class vigils. 28 June 2026 (Vigil of Sts Peter & Paul, II class): still shown as a commemoration on the V Sunday after Pentecost. 9 August 2026 (Vigil of St Lawrence, III class): shown as the day's FULL OBSERVED OFFICE, displacing the XI Sunday after Pentecost entirely, not merely surviving as a commemoration.") + (note "missalemeum does not implement RG 33's Sunday-omission for II/III-class vigils. 28 June 2026 (Vigil of Sts Peter & Paul, II class): still shown as a commemoration on the V Sunday after Pentecost. 9 August 2026 (Vigil of St Lawrence, III class): shown as the day's FULL OBSERVED OFFICE, displacing the XI Sunday after Pentecost entirely, not merely surviving as a commemoration. + +WIDENED, Task 9 (branch ef-lectionary, layer-4 oracle): [First_mismatch]/[Gospel_mismatch] joined the accepted diff set on 9 August 2026 (test_oracle.ml's own [m1_dates] predicate) -- now that reading citations are compared at all, the day's own OBSERVED-identity divergence this entry already explains naturally carries a citation divergence too (colitur's own XI-Sunday-after-Pentecost reading vs missalemeum's own Vigil-of-St-Lawrence reading), the SAME \"identity already differs, so citation differs too\" consequence data/ef/expected-divergences.sexp's own C14/C15/C16/C29 already establish for the sibling lectio differential. Count unchanged: 2.") (expected_rows 2)) ((id M3) (citation "RG 87 (Minor Litanies/Rogations, Mon/Tue before Ascension) -- the SAME citation as the lectio allow-list's own C8 (data/ef/expected-divergences.sexp)") @@ -190,7 +192,9 @@ ((id M13) (citation "OPEN -- not adjudicated. 1962 calendarium's March table: \"Feria VI post dominicam I Passionis: Commemoratio septem Dolorum B. Mariæ Virg.\" (confirmed real, every year) -- but RG 91's plain table (entry 11-13, Joseph, I class, vs entry 22, an ordinary III-class Passiontide feria) gives Joseph the day outright, with no RG 96 collision requiring a transfer, so the primary text found here does not by itself explain missalemeum's result") (verdict open) - (note "19 March 2027: St Joseph (I class) falls on the Friday of Passion Week. missalemeum shows Joseph entirely displaced, with the Friday's own III-class violet office observed and the Seven Sorrows commemorated instead. Three possibilities, none confirmed: (a) colitur's plain RG 91 reading is right and missalemeum is wrong; (b) a more specific rubric attached to St Joseph's own Proprium Sanctorum entry (the same shape as the Annunciation's own Attamen clause) overrides the general table for this exact collision, and this task did not find its text; (c) the Seven Sorrows commemoration itself outranks an ordinary I-class feast on this one Friday, unsupported by anything found here either. Extensive but non-exhaustive primary-source search did not settle it -- register §6 open item, explicitly unresolved rather than defaulted to either side. Separately, but confirmed regardless: colitur does not implement the Seven-Sorrows-of-Passion-Friday commemoration at all, in any year -- a real, primary-attested gap on its own. CORRECTED 2026-08-12 (Task B, branch ef-rg16a, commemoration-identity comparison): this date now ALSO trips [Comm_identity_unresolved] (colitur's own commemorated candidate there, [ef-passiontide-1-friday], is temporal-origin and carries no English name) -- the SAME root cause as M15 below, folded into this entry's own subset check rather than a separate id, since it is the identical Seven-Sorrows gap this note already names, not a new finding.") + (note "19 March 2027: St Joseph (I class) falls on the Friday of Passion Week. missalemeum shows Joseph entirely displaced, with the Friday's own III-class violet office observed and the Seven Sorrows commemorated instead. Three possibilities, none confirmed: (a) colitur's plain RG 91 reading is right and missalemeum is wrong; (b) a more specific rubric attached to St Joseph's own Proprium Sanctorum entry (the same shape as the Annunciation's own Attamen clause) overrides the general table for this exact collision, and this task did not find its text; (c) the Seven Sorrows commemoration itself outranks an ordinary I-class feast on this one Friday, unsupported by anything found here either. Extensive but non-exhaustive primary-source search did not settle it -- register §6 open item, explicitly unresolved rather than defaulted to either side. Separately, but confirmed regardless: colitur does not implement the Seven-Sorrows-of-Passion-Friday commemoration at all, in any year -- a real, primary-attested gap on its own. CORRECTED 2026-08-12 (Task B, branch ef-rg16a, commemoration-identity comparison): this date now ALSO trips [Comm_identity_unresolved] (colitur's own commemorated candidate there, [ef-passiontide-1-friday], is temporal-origin and carries no English name) -- the SAME root cause as M15 below, folded into this entry's own subset check rather than a separate id, since it is the identical Seven-Sorrows gap this note already names, not a new finding. + +WIDENED, Task 9 (branch ef-lectionary, layer-4 oracle): [First_mismatch]/[Gospel_mismatch] joined the accepted diff set (test_oracle.ml's own [m13_dates] predicate) -- colitur's own OBSERVED day here is Joseph, whose real proper (Ecclus 45:1-6/Matt 1:18-21) naturally diverges from missalemeum's own Seven-Sorrows-of-Passion-Friday reading (Jer 17:13-18/John 11:47-54) for the SAME already-named cause (the Seven Sorrows office is unimplemented, so colitur observes Joseph outright instead), not a fourth, independent divergence. Count unchanged: 1.") (expected_rows 1)) ((id M15) (citation "docs/research/rules-register.md §4's own \"THE MAPPING, AND EXACTLY WHAT IT CANNOT RESOLVE\" note (test_oracle.ml's own header) -- not an RG citation, a comparator LIMIT: Rite_ef.Temporal_ef never sets an English [names] field on any candidate it builds (temporal_ef.ml has no \"en ...\" string anywhere in it)") @@ -217,8 +221,10 @@ (verdict unresolvable) (note "REVISED AGAIN, ef-major-litanies task: 394, down by exactly 1 from the ef-bvm-saturday task's own 395 (breakdown below unchanged in kind, only this one row moved). 25 April 2027 used to carry [Observed_identity_unresolved] ALONE (the Sunday itself is temporal-origin, unresolved; commemoration identity agreed by coincidence -- Mark on both sides, pre-Litanies) and so fell into this entry's own bucket; now that the Major Litanies are built, that same date ALSO carries [Comm_identity_mismatch] (colitur admits the Litanies, missalemeum still admits Mark -- see [M20]'s own new entry), so it moves OUT of this bucket and into M20's own single-row citation instead. Verified directly from the comparator's own failure output, not merely arithmetic (395-1=394 is necessary but not sufficient: the mechanism above is why it left, not merely that some count decreased). -REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry this shape alone (M1/M3/M16 absorb a further 4 where it fires ALONGSIDE their own pre-existing citation -- see each entry's own widened note; 395+4=399 is the axis's own full unresolved population, UNCHANGED from before that task -- only the SPLIT moved, since M2 (closed above) used to separately absorb 22 of the 26 that used to be \"elsewhere\"). Before that revision the split was 373 alone / 26 elsewhere (373+26=399) -- CORRECTED, fix round 1 (coordinator finding 8) -- the full breakdown, precisely: of 730 days, 331 are RESOLVED (colitur's own observed celebration carries a name) -- 330 resolved-and-MATCHING, 1 resolved-and-MISMATCHED (M13, Joseph vs the Seven Sorrows, already its own entry above) -- and 399 are UNRESOLVED (colitur's own name is [None]), split between this entry's own (then 395, now 394) and the 4 absorbed elsewhere. The BLIND SPOT this axis exists to close, stated precisely: a TEMPORAL-origin observed day silently replaced by a DIFFERENT temporal-origin observed day of the SAME RANK AND COLOUR -- exactly the shape that hid Holy Family from every layer before the ef-rg112-rg110 task (rank 2/white on both sides, purely coincidental). This count PIN is what stands guard against that population growing silently in either direction: an implementation change that made MORE days temporal-origin-and-unresolvable, or fewer, changes this number and fails the pin, even though the axis itself cannot say WHICH specific day moved or why -- exactly the guard that caught this task's own -1 shift, which HAD to be traced to a specific date and mechanism (above) rather than merely re-baselined. The overwhelming majority of days whose observed celebration is TEMPORAL-origin (an ordinary Sunday, a feria, a movable named feast including Holy Family itself) never carry an English name on colitur's side -- not a rubric dispute and not a data gap either engine is wrong about, a LIMIT of this comparator, honestly counted rather than silently passed, per the brief's own explicit instruction (\"a day whose observed identity cannot be resolved must be a counted, allow-listed outcome, never a silent skip\"). Gated on the diff SHAPE alone (exactly, and only, observed-identity-unresolved), not a literal date list the way every other entry in this file is -- at this population size a date list would itself be the \"pattern that could silently widen\" this file's own header warns against, for the opposite reason a date RANGE is normally risky: the predicate (colitur's own resolved name is [None]) is the precise, falsifiable evidence, the same shape M2's own title-substring predicate already uses instead of enumerating dates, just keyed on presence-of-a-name rather than a title string. Building an English name onto every temporal-cycle candidate (a data/lectionary-bootstrap task, Plan 4, out of this task's scope -- register §6, the same open item M15's own note already tracks) would resolve this entry to Matched for every one of these days it does not instead expose as a REAL divergence (Holy Family's own two dates in this window, 2026-01-11 and 2027-01-10, are counted here, not separately -- the name comparison genuinely cannot distinguish \"Holy Family\" from any other unnamed Sunday, so proving Holy Family's own correctness rests on the golden pins and the differential's own C15, not this axis).") - (expected_rows 394)) +REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry this shape alone (M1/M3/M16 absorb a further 4 where it fires ALONGSIDE their own pre-existing citation -- see each entry's own widened note; 395+4=399 is the axis's own full unresolved population, UNCHANGED from before that task -- only the SPLIT moved, since M2 (closed above) used to separately absorb 22 of the 26 that used to be \"elsewhere\"). Before that revision the split was 373 alone / 26 elsewhere (373+26=399) -- CORRECTED, fix round 1 (coordinator finding 8) -- the full breakdown, precisely: of 730 days, 331 are RESOLVED (colitur's own observed celebration carries a name) -- 330 resolved-and-MATCHING, 1 resolved-and-MISMATCHED (M13, Joseph vs the Seven Sorrows, already its own entry above) -- and 399 are UNRESOLVED (colitur's own name is [None]), split between this entry's own (then 395, now 394) and the 4 absorbed elsewhere. The BLIND SPOT this axis exists to close, stated precisely: a TEMPORAL-origin observed day silently replaced by a DIFFERENT temporal-origin observed day of the SAME RANK AND COLOUR -- exactly the shape that hid Holy Family from every layer before the ef-rg112-rg110 task (rank 2/white on both sides, purely coincidental). This count PIN is what stands guard against that population growing silently in either direction: an implementation change that made MORE days temporal-origin-and-unresolvable, or fewer, changes this number and fails the pin, even though the axis itself cannot say WHICH specific day moved or why -- exactly the guard that caught this task's own -1 shift, which HAD to be traced to a specific date and mechanism (above) rather than merely re-baselined. The overwhelming majority of days whose observed celebration is TEMPORAL-origin (an ordinary Sunday, a feria, a movable named feast including Holy Family itself) never carry an English name on colitur's side -- not a rubric dispute and not a data gap either engine is wrong about, a LIMIT of this comparator, honestly counted rather than silently passed, per the brief's own explicit instruction (\"a day whose observed identity cannot be resolved must be a counted, allow-listed outcome, never a silent skip\"). Gated on the diff SHAPE alone (exactly, and only, observed-identity-unresolved), not a literal date list the way every other entry in this file is -- at this population size a date list would itself be the \"pattern that could silently widen\" this file's own header warns against, for the opposite reason a date RANGE is normally risky: the predicate (colitur's own resolved name is [None]) is the precise, falsifiable evidence, the same shape M2's own title-substring predicate already uses instead of enumerating dates, just keyed on presence-of-a-name rather than a title string. Building an English name onto every temporal-cycle candidate (a data/lectionary-bootstrap task, Plan 4, out of this task's scope -- register §6, the same open item M15's own note already tracks) would resolve this entry to Matched for every one of these days it does not instead expose as a REAL divergence (Holy Family's own two dates in this window, 2026-01-11 and 2027-01-10, are counted here, not separately -- the name comparison genuinely cannot distinguish \"Holy Family\" from any other unnamed Sunday, so proving Holy Family's own correctness rests on the golden pins and the differential's own C15, not this axis). + +REVISED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): 352, down by 42 from 394. NOT a change to this entry's own guard (still, and only, [diffs = [ Observed_identity_unresolved ]] exactly) -- this task compared reading citations for the first time, and 42 of the former 394 rows now ALSO carry a real [First_mismatch]/[Gospel_mismatch] alongside the pre-existing observed-identity gap, so they escape this entry's own EXACT-match guard and move to the six new entries below (M23 2, M24 4, M25 4, M26 30, M27 2 -- 2+4+4+30+2=42, exactly accounting for the drop, verified against the comparator's own failure output, not assumed from the arithmetic alone). The remaining 352 are every temporal-origin observed day whose reading citation ALREADY agreed with missalemeum before this task and still does -- unaffected by this task's own fixes, since those fixes only ever touched a citation, never an identity.") + (expected_rows 352)) ((id M19) (citation "RG 110's OTHER direction: \"In Officio et Missa S. Petri semper fit commemoratio S. Pauli, ET VICISSIM\" -- the SAME rule M12 used to cite, applied here to Paul's own office commemorating Peter, not Peter's own office commemorating Paul; confirmed a third time by the calendarium's own June table, both photographic scans, word for word: \"In Commemoratione S. Pauli Ap., III classis. / Commemoratio S. Petri Ap.\"") (verdict colitur) @@ -233,3 +239,28 @@ REVISED, ef-bvm-saturday task: 395 of the 730 days in this window used to carry HONESTLY FLAGGED, now closer to certain than first written: this is the first real (non-synthetic) data point this codebase has for \"an ordinary Class2 feast and a privileged non-feast commemoration both losing to the identical Sunday\" -- every other witness for this admit branch in test_precedence_ef.ml is hand-built. First written \"moderate-high, not certain\"; RG 434(b)'s own independent, Mass-specific repetition of RG 111(b)'s exact rule (fix round 1 finding, above) closes the main remaining doubt (that RG 111 might be Office-shaped) and moves this near-certain -- but NOT to certain, and the revisit trigger stands: no primary text anywhere names the Major Litanies in a Mass-orations-count worked example, only the general II-class-Sunday rule, twice over. RG 434(b) closes the Office-shaped doubt and nothing further. If a future primary-source pass finds textual grounds narrowing RG 109(f)'s privilege specifically, THIS is the entry to revisit first. (That sentence was dropped in the same edit that raised the label to near-certain, and is restored here: upgrading a confidence while deleting its revisit trigger is the one move this record must not make.) missalemeum's divergence remains consistent with this project's already-documented pattern of RG 108-111 gaps in that oracle (M1, M8, M10 above each already \"missalemeum does not implement X\") -- plausibly one more instance of the same generator not modelling RG 109(f)'s privilege for this rare, single-date observance. Identity-gated (test_oracle.ml's own [m20_commemoration_matches]): pins that colitur's own sole admitted commemoration really is [major-litanies].") (expected_rows 1)) + ((id M23) + (citation "tools/extract_missalemeum_oracle.py's own header (the extraction script, not an RG citation): missalemeum's JSON has no \"Lectio\"/\"Evangelium\" section at all for Good Friday, a multi-lesson \"Missa Praesanctificatorum\" structure instead (\"Lectiones\"/\"Passio\") -- a comparator/fixture-structural limit, not a rubric dispute") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): Good Friday, both years (2026-04-03, 2027-03-26). colitur's own citation (Ex 12:1-11/John 18:1-40; 19:1-42) is Missal-verified twice, both scans, already established (tools/bootstrap_lectionary.ml's own [holy_week_entries], Task 8) -- it is missalemeum's OWN JSON, not colitur, that has nothing in the shape this schema's First/Gospel pair assumes for this one day: Good Friday's own liturgy is multiple readings without a single labelled \"Epistle\", the SAME shape colitur's own bootstrap hit and solved with a stated convention (the second of two peer lessons) rather than leaving absent. [First_unresolved]/[Gospel_unresolved] fire on the ORACLE side here (the mirror image of [Comm_identity_unresolved]'s own colitur-side absence) -- counted and cited, never silently skipped, the same discipline this file's own M15/M18 already establish for the opposite direction. Derived directly from the OCaml comparator's own failure output (test_layer_m_counts_match_citations), not hand-counted first and cross-checked after: 2.") + (expected_rows 2)) + ((id M24) + (citation "Not an RG citation -- a source-presentation quirk in missalemeum's own JSON, checked directly against the raw data (tools/extract_missalemeum_oracle.py's own extraction, verified by hand for these four rows): the Gospel citation embeds a LATIN book abbreviation (\"Luc\"/\"Joann\") instead of missalemeum's own usual English one (\"Luke\"/\"John\") on exactly these four Holy Week rows, nowhere else in the whole 730-day fixture") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): Holy Wednesday and Holy Thursday, both years (2026-04-01/04-02, 2027-03-24/03-25). Same underlying verse range on both sides, confirmed directly: colitur \"Luke 22:39-71; 23:1-53\" vs missalemeum \"Luc 22:39-71; 23:1-53\" (Holy Wednesday); colitur \"John 13:1-15\" vs missalemeum \"Joann 13:1-15\" (Holy Thursday, where the Epistle side already matches after this file's own [normalize_citation] strips the trailing full stop missalemeum's own sentence happens to end with, \"1 Cor 11:20-32.\"). Not folded into [normalize_citation] itself -- a Latin/English book-name equivalence table would be the first step of a general translation layer this project's own citation discipline deliberately does not build, the SAME comparator limit M5 already names for a different vocabulary gap (\"The Major Litanies\" vs \"Pro rogationibus\"). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 4.") + (expected_rows 4)) + ((id M25) + (citation "Not an RG citation -- a punctuation-only difference in how the SAME verse range is written, checked directly: \"4 Kings 5:1-15\" (colitur) vs \"4 Kings, 5:1-15\" (missalemeum, a spurious comma with no citation content of its own); \"Dan 14:27, 28-42\" (colitur, verse 27 named separately then 28-42) vs \"Dan 14:27-42\" (missalemeum, the identical span written as one contiguous range)") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): four Lenten rows (2026-03-09/03-24, 2027-03-01/03-16 -- Frances of Rome and Gabriel the Archangel's own commemorated Lenten ferias, both years). Neither pair is a book/chapter/verse-NUMBER difference [normalize_citation] could safely absorb without also risking equating two GENUINELY different verse lists elsewhere in the fixture that happen to share this exact shape (a real \"12, 15-20\" vs \"12-20\" would look identical to this rule but mean different things) -- named individually instead, the same discipline M5's own identity-gated predicate already applies to a citation-vocabulary gap it also declines to generalise. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 4.") + (expected_rows 4)) + ((id M26) + (citation "{!Rite_ef.Lectionary_ef.readings}'s own header comment (not an RG citation, a comparator/architecture LIMIT): step 3's own WARRANT is \"lectio's own observed behaviour... not a confirmed Missal citation\" -- register's own standing note; RG 309(a) (\"iuxta temporum diversitatem\", the season-keyed votive-Mass selection this task's own investigation confirmed missalemeum implements and colitur does not, corroborating Task 6's own already-recorded open item)") + (verdict open) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): 30 rows, ONE root cause, THREE confirmed shapes, none built here. (1) RG 78's own rotating votive Mass of the BVM (\"Missae de sanctae Mariae in sabbato\" and its Time-after-Pentecost siblings, missalemeum's own \"II/III/V Mass of the B. V. M.\" titles) on an otherwise-unoccupied feria -- Task 6's own already-named open item (\"the BVM Saturday Office still emits its feria's Mass... needs... a season-keyed selection among five formularies\"), confirmed live on four Saturdays here (2026-01-03/01-10, 2027-01-02/01-09 -- `ef-christmas-1-saturday`/`ef-christmas-2-saturday`, this task's own deliberately-unentered slugs, C25's unchanged population in the sibling lectio differential) and on every ordinary Time-after-Pentecost weekday feria in this entry's own remaining population (2026-02-14/06-20/06-27/07-04/07-11/08-01/10-31/11-07/11-28, 2027-07-17/07-24/09-04/09-11/10-30/11-06/11-13/11-27). (2) A named weekly formula distinct from the plain Sunday-repeat rule, found by accident while researching Corpus Christi's own Mass (docs/research/scan1.txt, \"Missa dominicae I post Pentecosten\", 1 Ioann. 4:8-21/Luc. 6:36-42, printed immediately before Corpus Christi's own heading) but NOT independently verified as a general \"every week has its own named formula\" rule the way the January window (this task's own [epiphanytide_opening_entries]) was -- 2026-06-02/06-03 and 2027-05-24 show it. (3) Later Time-after-Pentecost weeks (2026-10-26 through 2026-10-30, 2027-11-03/11-05) whose own votive/ferial answer this task's own investigation did not narrow to a single citable rule at all. None is safe to fix piecemeal inside this task's own scope (extending layer 4 + triage) without the same real, dedicated, TDD/mutation-tested unit of work data/ef/expected-divergences.sexp's own C6/C25 and Task 6's own open item already call for -- a season-keyed ferial/votive-Mass-selection mechanism, new behaviour, not new data. Verdict open, the SAME fourth verdict M15/M18 already establish for a genuine comparator/architecture LIMIT, honestly counted rather than silently absorbed or left failing without explanation. A literal date list, not a shape predicate: no single structural signal (unlike C17's own [subject = bvm]) distinguishes this population from a genuinely new, unrelated citation bug on some other Time-after-Pentecost feria. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 30.") + (expected_rows 30)) + ((id M27) + (citation "tools/extract_missalemeum_oracle.py's own header (the extraction script, not an RG citation): Christmas Day has THREE Masses in the 1962 Missal (Midnight/Dawn/Day), each with its own distinct Epistle+Gospel; this fixture's own entry[0] convention (verified, and documented, for every OTHER field it reads) takes the Midnight Mass, while colitur's own citation (bootstrapped from lectio) reflects the Day Mass -- two DIFFERENT, both genuine, Masses of the identical civil day") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): 25 December, both years. colitur: Heb 1:1-12/John 1:1-14 (\"Missa in die\"); missalemeum's own entry[0]: Titus 2:11-15/Luke 2:1-14 (\"Missa in nocte\"). Both are real, correct, Missal-verifiable citations for 25 December -- this is not a rubric dispute or a data gap either engine is wrong about, a comparator/fixture-extraction artefact (which of several equally-real Masses a multi-Mass day's own JSON array entry[0] happens to be). NOT fixed by changing the extractor's own array-index convention: that convention is deliberate and already verified, in the extraction script's own header, for every OTHER field this fixture reads on a multi-Mass day (rank/colours/tempora/commemorations/displaced, confirmed IDENTICAL across a day's own multiple Masses on all 4 such days, Christmas and All Souls, both years) -- only the CITATION fields are not identical across a day's own Masses, discovered by this task, and changing the index for citations alone while keeping it for everything else would be a second, undeclared convention, not a fix. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 2.") + (expected_rows 2)) diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index da80dbe..8522da5 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -70,8 +70,10 @@ ((id C1) (citation "RG 72-73 (Nativity/Epiphany season boundary, Jan 1-13) + RG 119a (white through \"expletum tempus Epiphaniae\"); register §3c item 1") (verdict colitur) - (note "6-13 January is Christmastide in colitur, matching RG 72-73's explicit boundary at 13 January (corroborated independently by RG 119a's colour rule, §3b). lectio's efSeason switches to time-after-epiphany on 6 January. The season disagreement cascades into colour (green vs white) and, on 7-8 January specifically, into the ferial slug family name (colitur's ef-christmas-2- vs lectio's ef-time-after-epiphany-1- for the same two days). REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows moved 361 -> 368. NOT a new divergence -- the closed C13's own 7 rows (13 January in the 7 years it falls on a Sunday) fold back in here: lectio's fix wave independently fixed its own equivalent of the RG16(a) defect C13 used to allow-list, so on all 7 of those Sunday years lectio's slug now matches colitur's `commemoration-of-the-baptism-of-the-lord` too (not just rank/colour), leaving season as the ONLY residual difference on those rows -- squarely inside C1's own existing shape (diffs subset of [Season;Colour;Slug] with the Slug-diff escape clause unused). REFRESHED AGAIN (ef-rg112-rg110 task, branch ef-rg112-rg110): expected_rows moved 368 -> 361, back to its PRE-ef-rebootstrap value, but for a THIRD, different reason -- SPLIT OUT to its own new entry, C15, not silently re-absorbed: colitur now BUILDS Holy Family (RG 17(b)) and, on these same 7 dates, correctly observes it in the fixed Baptism's place (RG 91 entry 14, RG 112(a)), so colitur's own slug there changes from `commemoration-of-the-baptism-of-the-lord` (which happened to already match lectio's own slug) to `ef-time-after-epiphany-sunday-1` (Holy Family's own, lectio has no equivalent) -- a genuine SLUG divergence now, no longer inside C1's own [Season]-only shape. See C15's own entry for the full account. PROVENANCE, fix round 1 (coordinator finding 6, restoring the discipline this entry's own prior refresh recorded and this round's rewrite had dropped): 361 read directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's `Received` array, run against the widened C15 predicate/allow-list together, not before it existed) -- not hand-counted first and cross-checked after, and not 368 minus 7 taken on faith: the arithmetic matches C15's own independently-derived 7, which is corroboration, not the derivation itself.") - (expected_rows 361)) + (note "6-13 January is Christmastide in colitur, matching RG 72-73's explicit boundary at 13 January (corroborated independently by RG 119a's colour rule, §3b). lectio's efSeason switches to time-after-epiphany on 6 January. The season disagreement cascades into colour (green vs white) and, on 7-12 January specifically, into the ferial slug family name (colitur's ef-christmas-2- vs lectio's ef-time-after-epiphany-1- for those days). REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows moved 361 -> 368. NOT a new divergence -- the closed C13's own 7 rows (13 January in the 7 years it falls on a Sunday) fold back in here: lectio's fix wave independently fixed its own equivalent of the RG16(a) defect C13 used to allow-list, so on all 7 of those Sunday years lectio's slug now matches colitur's `commemoration-of-the-baptism-of-the-lord` too (not just rank/colour), leaving season as the ONLY residual difference on those rows -- squarely inside C1's own existing shape (diffs subset of [Season;Colour;Slug] with the Slug-diff escape clause unused). REFRESHED AGAIN (ef-rg112-rg110 task, branch ef-rg112-rg110): expected_rows moved 368 -> 361, back to its PRE-ef-rebootstrap value, but for a THIRD, different reason -- SPLIT OUT to its own new entry, C15, not silently re-absorbed: colitur now BUILDS Holy Family (RG 17(b)) and, on these same 7 dates, correctly observes it in the fixed Baptism's place (RG 91 entry 14, RG 112(a)), so colitur's own slug there changes from `commemoration-of-the-baptism-of-the-lord` (which happened to already match lectio's own slug) to `ef-time-after-epiphany-sunday-1` (Holy Family's own, lectio has no equivalent) -- a genuine SLUG divergence now, no longer inside C1's own [Season]-only shape. See C15's own entry for the full account. PROVENANCE, fix round 1 (coordinator finding 6, restoring the discipline this entry's own prior refresh recorded and this round's rewrite had dropped): 361 read directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's `Received` array, run against the widened C15 predicate/allow-list together, not before it existed) -- not hand-counted first and cross-checked after, and not 368 minus 7 taken on faith: the arithmetic matches C15's own independently-derived 7, which is corroboration, not the derivation itself. + +REFRESHED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): expected_rows moved 361 -> 173. NOT a data change -- this entry's OWN diff-set guard (`subset diffs [Season;Colour_f;Slug_f]`) never accepted a citation diff, and this task gave the `ef-christmas-2-` and `ef-time-after-epiphany-1-` families their OWN direct citations for the first time (RG 17(a)'s own \"diebus ferialibus\" rubric, tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) -- every row in this window that ALSO now carries a real First_f/Gospel_f divergence escapes this entry's own subset guard and moves to the new C31/C32 instead (not silently re-absorbed: C31/C32's own [subset diffs [Season;Slug_f;Colour_f;First_f;Gospel_f]] guard is what actually catches them, checked BEFORE this entry no longer applies, not assumed). What remains here is every 6-13 January row this task's own fix did NOT touch: Epiphany itself, the fixed Baptism commemoration, and any day a competing saint or the BVM Saturday Office already wins outright (unaffected by a lectionary citation either way). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 173.") + (expected_rows 173)) ((id C6) (citation "RG 91 entry 17 (\"days within the Octave of the Nativity\") for the slug/rank divergence; RG 69, scan1.txt:625-631 word for word, for the QUESTIONED citation component (Important 3(b), coordinator review, task 8 fix round 1): \"De dominica infra octavam Nativitatis Domini, quae scilicet a die 26 ad 31 decembris occurrit, semper fit Officium cum commemoratione festi forte occurrentis, iuxta rubricas, nisi dominica incidat in festum I classis: quo in casu, fit de festo cum commemoratione dominicae\" -- the Sunday's OWN Office (not the fixed weekday placeholder) is kept, WITH a commemoration of whatever feast falls that day, whenever a Sunday lands anywhere 26-31 December (unless that feast is itself I class, in which case the feast wins with the Sunday commemorated instead)") (verdict open) @@ -103,7 +105,9 @@ Gated on the literal date window (month=12, day in {29,30,31}) AND colitur's own ((id C16) (citation "RG 17(a) (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii, SECUS DIE 2 IANUARII\") + the calendarium's own January table, both photographic scans, word for word: \"Dominica inter octavam Nativitatis Domini et Epiphaniam, vel, EA DEFICIENTE, die 2 ianuarii: Sanctissimi Nominis Iesu, II classis\"") (verdict colitur) - (note "ef-holyname-rg110 task: RG 17(a)'s own fallback, previously unbuilt (register §6.2's own open item -- colitur emitted no Holy Name office at all in a year with no Sunday 2-5 January, not merely an unnamed generic Sunday the way Holy Family's own pre-fix gap was). 2 January in a year with no Sunday in that window now carries the feast (`ef-holy-name`, class-2, subject Lord) instead of the ordinary Christmastide ferial fallback (`ef-christmas-1-`/`ef-christmas-0-` in lectio's own naming, class-4) -- a genuine SLUG AND RANK divergence against lectio, which has no fallback for this window at all (`~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` carries no 01-02 entry; checked directly, not assumed) and shows the plain ferial slug on every one of these dates regardless. Gated on the literal date list AND colitur's own slug (the same identity guard C1/C6/C8/C14/C15 already apply, fix round 1's own finding 1). 20 of the 46 years in the fixture's own 2005-2050 span have no Sunday 2-5 January -- independently re-derived against `date -d -01-0{2,3,4,5} +%u` for every year in range (not the register's domain-wide 3,619-of-8,417 figure divided down; a fresh count over this file's own narrower window), then cross-checked against the OCaml comparator's own failure output before being set here: 20. WIDENED, task 8: [First_f]/[Gospel_f] joined the accepted diff set. `ef-holy-name` now carries RG 17(a)'s own citation (Gal 4:1-7/Luke 2:33-40, tools/bootstrap_lectionary.ml's [derived_entries] -- the same Mass heading covers both the Sunday and 2-January shapes, so it is copied from `ef-holy-name-sunday`'s own translated entry, not re-typed). On 13 of these 20 years lectio's OWN plain-ferial fallback happens to land on the identical citation by coincidence (its generic 2-January slug's own preceding-Sunday walk finds a December Sunday whose reading-key collapses to the same `ef-christmas-sunday-0` entry this generator translates), so those 13 rows now match on [First_f]/[Gospel_f] too and drop out of the diff entirely -- harmless to this entry's count, since [layer_c_reason]'s `subset` check accepts EITHER an empty citation diff or the wider one. On the remaining 7 years (2006, 2012, 2017, 2023, 2034, 2040, 2045 -- exactly the years, among these 20, where 1 January itself falls on a Sunday, confirmed against `date -d -01-01 +%u`) lectio's fallback instead finds the CIRCUMCISION's own real Mass (Titus 2:11-15/Luke 2:21, `ef-circumcision`), a genuine divergence from RG 17(a)'s office, which reads the identical Holy Name Mass on 2 January regardless of what happened the day before -- the same underlying cause (colitur builds a real RG 17(a) office; lectio has none), not a second one. Count unchanged: 20.") + (note "ef-holyname-rg110 task: RG 17(a)'s own fallback, previously unbuilt (register §6.2's own open item -- colitur emitted no Holy Name office at all in a year with no Sunday 2-5 January, not merely an unnamed generic Sunday the way Holy Family's own pre-fix gap was). 2 January in a year with no Sunday in that window now carries the feast (`ef-holy-name`, class-2, subject Lord) instead of the ordinary Christmastide ferial fallback (`ef-christmas-1-`/`ef-christmas-0-` in lectio's own naming, class-4) -- a genuine SLUG AND RANK divergence against lectio, which has no fallback for this window at all (`~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` carries no 01-02 entry; checked directly, not assumed) and shows the plain ferial slug on every one of these dates regardless. Gated on the literal date list AND colitur's own slug (the same identity guard C1/C6/C8/C14/C15 already apply, fix round 1's own finding 1). 20 of the 46 years in the fixture's own 2005-2050 span have no Sunday 2-5 January -- independently re-derived against `date -d -01-0{2,3,4,5} +%u` for every year in range (not the register's domain-wide 3,619-of-8,417 figure divided down; a fresh count over this file's own narrower window), then cross-checked against the OCaml comparator's own failure output before being set here: 20. WIDENED, task 8: [First_f]/[Gospel_f] joined the accepted diff set. `ef-holy-name` used to carry a MIS-DERIVED citation (Gal 4:1-7/Luke 2:33-40, borrowed by analogy from `ef-christmas-sunday-0`'s own ini section) -- on 13 of these 20 years lectio's own plain-ferial fallback happened to land on that SAME wrong value by coincidence, so those 13 rows matched outright and dropped out of the diff entirely, and only the remaining 7 (where 1 January itself is a Sunday, so lectio's fallback finds the Circumcision's own Titus 2:11-15/Luke 2:21 instead) carried a real citation diff -- both sub-populations still summed to the SAME 20-row count either way, since [layer_c_reason]'s own `subset` guard accepts an empty citation diff too. + +CORRECTED, Task 9 (branch ef-lectionary, layer-4 oracle): the 13-vs-7 coincidental-match split above is now STALE, not merely superseded -- `ef-holy-name` carries its own genuinely correct citation as of this task (Acts 4:8-12/Luke 2:21, Missal-verified twice, both scans, `colitur_keys`'s own CORRECTED note in bootstrap_lectionary.ml has the full account of the analogy error this replaces), which cannot coincide with EITHER of lectio's own two possible fallback answers (Gal 4:1-7 nor Titus 2:11-15 -- neither equals Acts 4:8-12) -- so ALL 20 of this entry's rows now carry a real [First_f]/[Gospel_f] diff, not merely 7 of them, a direct logical consequence of the three citations' own values, not re-derived by a fresh sweep. Row count itself is UNCHANGED at 20 (confirmed against the OCaml comparator's own failure output, still 20) -- only which rows carry a citation diff moved, and this entry's own `subset` guard already tolerated both shapes throughout, so nothing about the ALLOW-LIST predicate itself needed to change, only this note's own account of the values involved.") (expected_rows 20)) ((id C17) (citation "RG 91 entry 27 (\"Officium sanctae Mariae in sabbato\") + RG 78 (Caput IX, \"De sancta Maria in sabbato\", both photographic scans and the electronic transcription word for word): \"In sabbatis, in quibus occurrit Officium de feria IV classis, fit de sancta Maria in sabbato\" -- on Saturdays on which the Office of a IV-class feria occurs, [the Office] is made of Holy Mary on Saturday instead + RG 120(b) (\"Adhibetur color albus in Officio et Missa de festis: ... b) B. Mariae Virg.\") for the white colour, unconditional regardless of season") @@ -162,8 +166,10 @@ lectio, still conflating Holy Week with Passion week on all six days, keeps show CORRECTED, fix round 2 (coordinator review, Minor): this entry's own reason for the literal 4-slug list (Wednesday/Thursday/Friday/Saturday, never Monday/Tuesday) previously claimed Monday and Tuesday \"are always claimed first by the Circumcision's or Holy Name's own direct entries\" -- FALSIFIED by 2028-01-03/04, real dates that genuinely exist as their own `ef-christmas-1-{monday,tuesday}` slugs and genuinely resume via step 3 (they are not \"claimed away\" from existing at all). Replaced with the directly OBSERVED fact, from an exhaustive sweep of every such occurrence 2004-2051 against the real resolver (not merely the slug, the resolved citation): `ef-christmas-1-monday` occurs 21 times and resolves to Holy Name Sunday's own citation (Gal 4:1-7/Luke 2:33-40) every time; `ef-christmas-1-tuesday` occurs 22 times and resolves to EITHER Holy Name Sunday's citation OR the Circumcision's (Titus 2:11-15/Luke 2:21) -- both real, correct, directly-cited entries, confirmed never the wrong Nativity-Octave-Sunday value. Both weekdays fall close enough to 1-2 January that their own preceding-Sunday walk stays within January; Wednesday/Thursday/Friday/Saturday are far enough that the same walk can reach past 2 January into December when Holy Name Sunday does not exist that year, landing on this entry's own wrong Sunday instead -- the general shape, not re-asserted as a proven arithmetic rule (a first attempted derivation was itself found wrong on a second reading and is not repeated). Gated on the literal 4-slug family and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- this is a pure content consequence one hop removed). -CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly from the OCaml comparator's own failure output (its own `expected_rows` pin, cross-checked against a real test run) -- that part was accurate. The PER-WEEKDAY split is NOT: the comparator reports per-id totals only, never a per-weekday breakdown, so that finer split came from a separate pass over the raw per-slug failure list, and a prior version of this note wrongly implied it came from the comparator directly. That prior version also rotated the labels: it read \"19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday respectively\" -- the right four numbers, each attached to the wrong weekday. Re-measured directly against the real resolver: Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 = 57, no residue).") - (expected_rows 57)) +CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly from the OCaml comparator's own failure output (its own `expected_rows` pin, cross-checked against a real test run) -- that part was accurate. The PER-WEEKDAY split is NOT: the comparator reports per-id totals only, never a per-weekday breakdown, so that finer split came from a separate pass over the raw per-slug failure list, and a prior version of this note wrongly implied it came from the comparator directly. That prior version also rotated the labels: it read \"19 + 19 + 13 + 6, Wednesday/Thursday/Friday/Saturday respectively\" -- the right four numbers, each attached to the wrong weekday. Re-measured directly against the real resolver: Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 = 57, no residue). + +NARROWED, Task 9 (branch ef-lectionary, layer-4 oracle): expected_rows moved 57 -> 13, and the slug list narrowed to `ef-christmas-1-saturday` ALONE. Wednesday/Thursday/Friday (6+19+19=44 of the former 57 rows) each now have their OWN direct lectionary entry (RG 17(a)'s own \"diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 ianuarii\", tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) and no longer reach step 3's walkback at all -- colitur is now RIGHT there, not merely differently wrong, so those 44 rows are a SEPARATE new id (C30 below, verdict colitur), not a re-adjudication of this one. `ef-christmas-1-saturday` is the ONE weekday deliberately left WITHOUT a direct entry (RG 78's BVM Saturday Office wins that day unconditionally whenever nothing else does, {!Rite_ef.Temporal_ef.bvm_saturday_names} -- giving it the \"repeat 1 January\" citation would be wrong on exactly the days this same rubric is correct for the other four weekdays), so its own step-3 walkback -- and this entry's own root cause and citation, \"Titus 3, 4-7\" -- are genuinely UNCHANGED by this task, confirmed directly: the pinned regression test (test_lectionary_ef.ml's own `test_step3_christmas_feria_resumes_sunday`, now re-pointed at 2026-01-03) still returns exactly \"Gal 4:1-7\"/\"Luke 2:33-40\", the Nativity-Octave Sunday's own value C6 above still questions. 13 matches the ORIGINAL per-weekday breakdown's own Saturday figure exactly (6+19+19+13=57 from fix round 3 above), corroborating rather than merely asserting the narrowed count; re-derived directly from the OCaml comparator's own failure output after narrowing the predicate, not assumed from the old breakdown alone.") + (expected_rows 13)) ((id C26) (citation "Passion Tuesday's real Mass (\"Feria tertia, III classis, Statio ad S. Cyriacum\"): Dan 14:27, 28-42 / John 7:1-13 -- docs/research/scan1.txt:11085-11121, corroborated scan2.txt:12063-12120 (CORRECTED, fix round 3, coordinator review: the scan2 endpoint previously read 12104, which stops after the Epistle -- \"Lectio Danielis Prophetae, Dan. 14,27 et 28-42\" -- and never reaches the Gospel heading/citation at all; \"Sequentia sancti Evangelii secundum Ioannem, Ioann. 7,1-13\" is at scan2.txt:12117-12120, so the range now extends to 12120, mirroring scan1's own convention of ending right at the Gospel's citation line rather than the full pericope text), word for word both scans") (verdict colitur) @@ -179,3 +185,33 @@ CORRECTED, fix round 3 (coordinator review): the TOTAL, 57, is derived directly (verdict colitur) (note "task 8 fix round 3 (coordinator review, Important): lectio's own ini value for `ef-september-ember-sat` is not the September Ember Saturday's Mass at all -- it is St Matthew's (Ezek 1:10-14 / Matt 9:9-13, the calling of Matthew, 21 September), the identical shape C26/C27 document. Both the real Epistle and the real Gospel are explicitly labelled in the Missal (\"Lectio Epistolae\" precedes Heb 9:2-12), so this entry, like C27, needed no \"last lesson before the Gospel\" convention judgement call. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this ini section from translation rather than using its wrong value, and [ember_saturday_corrections] hand-authors the real Missal citation instead. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 40, not 46 -- the IDENTICAL 6 civil years C27 above names (2013, 2019, 2024, 2030, 2041, 2047), where 21 September (St Matthew) falls on a Saturday and coincides with the September Ember Saturday itself, so the SAINT wins outright and these six rows never reach this entry -- the same 91-day/13-week weekday coincidence between 21 September and 21 December that explains C27's own gap, confirmed against `date -d` for all six years, not merely by arithmetic. The other four Ember entries (Advent Wednesday/Friday, September Wednesday/Friday) were checked against both scans and are correct as lectio already had them -- these two Saturdays are the only Ember exceptions. 40 + 6 = 46, the full domain, no residue.") (expected_rows 40)) + ((id C29) + (citation "RG 17(a) (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii\") for the PRIVILEGE; the Missal's own Sanctissimi Nominis Iesu Mass propers, both scans, word for word: \"Lectio Actuum Apostolorum. Act. 4, 8-12\" / \"Sequentia sancti Evangelii secundum Lucam. Luc. 2, 21\" (docs/research/scan1.txt:6579-6608, scan2.txt:7225-7297) -- the Sunday shape's own citation, distinct from C16's fallback shape immediately above") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-holy-name-sunday`, the primary RG 17(a) shape (a genuine Sunday 2-5 January), had NO lectionary entry of its own before this task -- Rite_ef.Temporal_ef already computed the right slug/rank/colour (RG 91 entry 14, {!Rite_ef.Precedence_ef.entry_14_movable_band}), but tools/bootstrap_lectionary.ml's own [colitur_keys] used to WIDEN lectio's \"ef-christmas-sunday-0\" ini section onto this slug too, by analogy, on the (WRONG) assumption that Holy Name Sunday shares the Sunday-within-the-Octave's own Mass -- DISPROVED by missalemeum's own independent extraction for the two real Holy Name Sundays in its 2026-2027 window (test/fixtures/missalemeum-ef-2026-2027.txt, 2026-01-04/2027-01-03: \"Acts 4:8-12\"/\"Luke 2:21\", title \"Holy Name of Jesus\"), then confirmed against the Missal itself, twice, both scans (above) -- see [colitur_keys]'s own CORRECTED note in bootstrap_lectionary.ml for the full account of the analogy error this replaces. Season and Slug_f already agree on every occurrence (Layer A's own alias for \"ef-christmas-sunday-0\"/\"ef-holy-name-sunday\" -- the SAME underlying fact the generator's old, wrong widen also used, only one of the two uses was ever mistaken), so this entry's own guard is an EXACT match, `diffs = [ First_f; Gospel_f ]`, not a subset. 26 of the 46 years in the fixture's own 2005-2050 span DO have a Sunday 2-5 January -- the complement of C16's own 20 fallback years (26 + 20 = 46, no residue) -- derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 26.") + (expected_rows 26)) + ((id C30) + (citation "RG 17(a)'s own rubric, immediately following the Holy-Name-Sunday heading, both scans, word for word: \"Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 ianuarii\" (docs/research/scan1.txt:6522-6526) / \"Diebus ferialibus a 2 ad 6 ianuarii Missa dicitur ut die 1 ianuarii\" (scan2.txt, the \"6\" a one-digit OCR variant of scan1's \"5\" -- immaterial, 6 January is always Epiphany, a fixed I-class feast outranking any ferial rubric outright) -- ON FERIAL DAYS from 2 to 5 January, THE SAME MASS AS 1 JANUARY (the Circumcision, Titus 2:11-15/Luke 2:21) IS SAID") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-christmas-1-{monday,tuesday,wednesday,thursday,friday}` (2-5 January, EXCLUDING Saturday) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback (C25's OWN former population, before this task narrowed it -- see C25's own note for the full split). Given a direct entry now (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]), Season/Slug_f already agree with lectio on every occurrence (this window is entirely BEFORE C1's own 6-13 January boundary, and lectio's own naming for 2-5 January is already the SAME \"ef-christmas-0\"/\"ef-christmas-sunday-0\" family Layer A already aliases), so this entry's own guard is an EXACT match, `diffs = [ First_f; Gospel_f ]`. `ef-christmas-1-saturday` is DELIBERATELY excluded, both from the direct entry and from this predicate's own slug list -- RG 78's BVM Saturday Office wins that day unconditionally whenever nothing else does (Rite_ef.Temporal_ef's own [bvm_saturday_names], already built, ef-bvm-saturday task), confirmed directly against missalemeum's own title on this window's own two such Saturdays (\"II Mass of the B. V. M. -- Vultum Tuum\", never \"Feria\") -- giving it this entry's own citation would be wrong exactly there; it remains C25's own narrower population, unaffected by this task (see C25's own note). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 91.") + (expected_rows 91)) + ((id C31) + (citation "RG 17(a)'s own rubric's own next sentence, both scans, word for word: \"Diebus ferialibus a 7 ad 12 ianuarii ante dominicam I post Epiphaniam occurrentibus, dicitur Missa de festo Epiphaniae\" (docs/research/scan1.txt:6753-6757) -- ON FERIAL DAYS from 7 to 12 January occurring BEFORE the first Sunday after Epiphany (Holy Family), THE MASS OF THE FEAST OF EPIPHANY (Isa 60:1-6/Matt 2:1-12) IS SAID") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-christmas-2-{monday,tuesday,wednesday,thursday,friday}` (7 January through the day before Holy Family Sunday, EXCLUDING Saturday -- the same RG 78 exclusion C30 above explains, confirmed again on this window's own remaining such Saturdays) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback. This slug family's own civil dates ALREADY carried a Season/Slug_f/Colour_f divergence against lectio BEFORE this task (lectio's own season boundary starts Time-after-Epiphany at Epiphany itself, RG 72-73's own later boundary colitur keeps; lectio's own week numbering has no Holy Family to wait for, so its own slug for these dates is already \"ef-time-after-epiphany-1-\", not \"ef-christmas-2-...\"), previously absorbed by C1's own [jan_6_13_slug] allow-list (which already names this family, unchanged) -- this task's own fix (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) adds a First_f/Gospel_f divergence on top of that EXISTING one, so this entry's own guard is a SUBSET, `subset diffs [Season;Slug_f;Colour_f;First_f;Gospel_f]` with at least one of First_f/Gospel_f present (a feria's Epistle and Gospel are independent lookups and can each happen to already coincide). `ef-christmas-2-saturday`, though deliberately given no DIRECT entry (the same RG 78 reasoning as C30), is included in THIS entry's own slug list for a different, genuinely observed reason: its own step-3 walkback CAN land on `ef-holy-name-sunday` in years where that Sunday immediately precedes it, inheriting that slug's newly-corrected citation (C29 above) as a side effect, with no direct entry of its own involved at all -- confirmed directly against the real resolver, not theorised (`ef-christmas-1-saturday`'s own walkback structurally cannot reach that far forward, since its own window, 2-5 January, is entirely before Holy Name Sunday can exist; C25's own unchanged population is the proof this genuinely does not happen there). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 89.") + (expected_rows 89)) + ((id C32) + (citation "RG 17(a)'s own rubric's own third sentence, a named formula, both scans: \"post eandem dominicam vero Missa de eadem dominica In excelso throno, ut infra... Haec Missa dicenda est diebus ferialibus huius hebdomadae\" (docs/research/scan1.txt:6758-6851) -- \"MISSA DOMINICAE PRIMAE post Epiphaniam\", Epistle \"Lectio Epistolae beati Pauli Apostoli ad Romanos. Rom. 12, 1-5\" (scan1.txt:6875-6877), Gospel the SAME pericope as Holy Family's own Sunday Mass, Luke 2:42-52 (scan1.txt:6885-6905) -- said on the FERIAL DAYS of Holy Family Sunday's OWN week") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-time-after-epiphany-1-{monday,tuesday,wednesday,thursday,friday}` (Holy Family Sunday's own week, EXCLUDING Saturday -- the same RG 78 reasoning as C30/C31) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback (which happened to land on Holy Family Sunday's OWN citation, Col 3:12-17/Luke 2:42-52 -- a DIFFERENT Epistle from this entry's own Rom 12:1-5, the same Mass propers' own distinction between the Sunday and its week's ferias, both scans). This slug family's own civil dates ALREADY carried a bare Season/Colour_f divergence against lectio BEFORE this task (SAME slug on both sides here, unlike C31 -- lectio's own season boundary alone, RG 72-73 vs Epiphany), previously absorbed by C1's own generic 6-13 January window (no [Slug_f] involved, so C1's own [jan_6_13_slug] gate was never even reached) -- this task's own fix (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) adds a First_f/Gospel_f divergence on top, so this entry's own guard is a SUBSET, `subset diffs [Season;Colour_f;First_f;Gospel_f]` with at least one of First_f/Gospel_f present, the same \"not necessarily both\" reasoning C31 explains. Checked AFTER C19 deliberately in test_differential.ml's own [layer_c_reason]: C19's own 7 \"week shift\" years (2008/2013/2019/2030/2036/2041/2047) already explain this SAME slug family's own citation divergence there, for a DIFFERENT root cause (the week-numbering offset, not this task's own fix) -- this entry must not re-claim those rows under a citation-content reason C19 already owns, so its own population is exactly the OTHER (non-shift-year) civil dates; C19's own count is independently confirmed UNCHANGED at 45 by this same test run. `ef-time-after-epiphany-1-saturday`, though deliberately given no direct entry, is included in this entry's own slug list for the SAME step-3-ripple reason C31's own note explains for `ef-christmas-2-saturday` -- confirmed directly against the real resolver, not theorised. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 99.") + (expected_rows 99)) + ((id C33) + (citation "\"IN FESTO SSMI CORPORIS CHRISTI, I classis\": \"Lectio Epistolae beati Pauli Apostoli ad Corinthios. 1 Cor. 11, 23-29\" / \"Sequentia sancti Evangelii secundum Ioannem. Io. 6, 56-59\" -- docs/research/scan1.txt:21867-21917, corroborated scan2.txt:24084-24172, word for word both scans") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): Corpus Christi (`ef-corpus-christi`, a real, directly-computed Rite_ef.Temporal_ef office, I class, movable, Thursday after Trinity Sunday) had NO lectionary entry at all before this task -- not a renamed/mis-widened value the way C29/C30/C31/C32 above are, a genuine ABSENCE: lectio's own EF ini has no equivalent section either. Both engines independently fell back to Trinity Sunday's own preceding-Sunday citation (\"Rom 11:33-36\") and silently AGREED on the wrong answer -- the \"Holy Thursday was violet in both\" shape this project's own CLAUDE.md names for exactly this reason (layer 3 shares colitur's own bootstrap lineage in general, and here shares an architectural gap specifically, not lineage) -- so this divergence is newly VISIBLE only because colitur is now correct (tools/bootstrap_lectionary.ml's own [movable_feast_entries]), not because either engine changed what it already agreed on. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- Corpus Christi is never impeded by anything else in the 1962 calendar, so it is the observed office on all 46 years). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 46, the full domain, no residue.") + (expected_rows 46)) + ((id C34) + (citation "\"IN FESTO SACRATISSIMI CORDIS IESU, I classis\": \"Lectio Epistolae beati Pauli Apostoli ad Ephesios. Ephes. 3, 8-12 et 14-19\" / \"Sequentia sancti Evangelii secundum Ioannem. Io. 19, 31-37\" -- docs/research/scan1.txt:22030-22095, corroborated scan2.txt:24284-24336 (the Epistle's own \"et 14-19\" clause is OCR-truncated to \"3, 8-19\" on this second scan alone; its printed body text otherwise matches word for word, and scan1's own transcription is unambiguous, so this is a scan-quality gap, not a genuine disagreement between the two printings), word for word both scans") + (verdict colitur) + (note "Task 9 (branch ef-lectionary, layer-4 oracle): the SAME shape as C33 immediately above, for the Sacred Heart of Jesus (`ef-sacred-heart`, I class, movable, Friday after the Octave of Corpus Christi). No lectionary entry at all before this task; both engines independently fell back to Trinity Sunday's own preceding-Sunday citation (\"1 John 3:13-18\") and silently agreed on the wrong answer, the identical \"both wrong, both silent\" shape C33 explains. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- never impeded, observed on all 46 years). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 46, the full domain, no residue.") + (expected_rows 46)) diff --git a/data/ef/lectionary.sexp b/data/ef/lectionary.sexp index 3ec61bd..ccb2214 100644 --- a/data/ef/lectionary.sexp +++ b/data/ef/lectionary.sexp @@ -9,17 +9,19 @@ ; says why this check cannot be widened to catch that). ; ; Source: ../lectio/internal/caldata/tridentine-lectionary.ini -; SHA-256: fde533289fb620fea33386b0a3e733ada3c1d01f10a36d8a7f5a2b500c92740e -; 131 entries (119 ini sections translated/widened into colitur's own +; SHA-256: ccd6640e8c2ae4d260e62c55cfe2b3ea14ab996e8e5a82cc1b9a37bc65ac8591 +; 148 entries (119 ini sections translated/widened into colitur's own ; Temporal_ef vocabulary via [colitur_keys]; 1 hand-authored from a ; second source file [vigil_entries]; 6 hand-authored directly from ; the Missal [holy_week_entries]; 1 hand-authored directly from the ; Missal, one entry [passion_tuesday_entry]; 2 hand-authored directly ; from the Missal, two entries [ember_saturday_corrections]; 3 ; hand-authored directly from the Missal [nativity_octave_entries]; -; 1 derived from an already-translated entry above rather than -; re-typed [derived_entries] -- see this generator's own comments on -; all seven). Regenerate with: +; 2 hand-authored directly from the Missal, two entries +; [holy_name_entries]; 15 hand-authored directly from the Missal +; [epiphanytide_opening_entries]; 2 hand-authored directly from the +; Missal, two entries [movable_feast_entries] -- see this generator's +; own comments on all nine). Regenerate with: ; eval $(opam env) && dune exec tools/bootstrap_lectionary.exe -- ../lectio/internal/caldata/tridentine-lectionary.ini data/ef/lectionary.sexp ((ef-advent-2-monday (((part First) (reference "Rom 15:4-13")) @@ -66,12 +68,45 @@ (ef-christ-the-king (((part First) (reference "Col 1:12-20.")) ((part Gospel) (reference "John 18:33-37")))) + (ef-christmas-1-friday + (((part First) (reference "Titus 2:11-15")) + ((part Gospel) (reference "Luke 2:21")))) + (ef-christmas-1-monday + (((part First) (reference "Titus 2:11-15")) + ((part Gospel) (reference "Luke 2:21")))) + (ef-christmas-1-thursday + (((part First) (reference "Titus 2:11-15")) + ((part Gospel) (reference "Luke 2:21")))) + (ef-christmas-1-tuesday + (((part First) (reference "Titus 2:11-15")) + ((part Gospel) (reference "Luke 2:21")))) + (ef-christmas-1-wednesday + (((part First) (reference "Titus 2:11-15")) + ((part Gospel) (reference "Luke 2:21")))) + (ef-christmas-2-friday + (((part First) (reference "Isa 60:1-6")) + ((part Gospel) (reference "Matt 2:1-12")))) + (ef-christmas-2-monday + (((part First) (reference "Isa 60:1-6")) + ((part Gospel) (reference "Matt 2:1-12")))) + (ef-christmas-2-thursday + (((part First) (reference "Isa 60:1-6")) + ((part Gospel) (reference "Matt 2:1-12")))) + (ef-christmas-2-tuesday + (((part First) (reference "Isa 60:1-6")) + ((part Gospel) (reference "Matt 2:1-12")))) + (ef-christmas-2-wednesday + (((part First) (reference "Isa 60:1-6")) + ((part Gospel) (reference "Matt 2:1-12")))) (ef-christmas-sunday-0 (((part First) (reference "Gal 4:1-7")) ((part Gospel) (reference "Luke 2:33-40")))) (ef-circumcision (((part First) (reference "Titus 2:11-15")) ((part Gospel) (reference "Luke 2:21")))) + (ef-corpus-christi + (((part First) (reference "1 Cor 11:23-29")) + ((part Gospel) (reference "John 6:56-59")))) (ef-easter-1-friday (((part First) (reference "1 Pet 3:18-22")) ((part Gospel) (reference "Matt 28:16-20")))) @@ -133,11 +168,11 @@ (((part First) (reference "Isa 60:1-6")) ((part Gospel) (reference "Matt 2:1-12")))) (ef-holy-name - (((part First) (reference "Gal 4:1-7")) - ((part Gospel) (reference "Luke 2:33-40")))) + (((part First) (reference "Acts 4:8-12")) + ((part Gospel) (reference "Luke 2:21")))) (ef-holy-name-sunday - (((part First) (reference "Gal 4:1-7")) - ((part Gospel) (reference "Luke 2:33-40")))) + (((part First) (reference "Acts 4:8-12")) + ((part Gospel) (reference "Luke 2:21")))) (ef-lent-1-monday (((part First) (reference "Ezech 34:11-16")) ((part Gospel) (reference "Matt 25:31-46")))) @@ -306,6 +341,9 @@ (ef-pentecost-vigil (((part First) (reference "Acts 19:1-8.")) ((part Gospel) (reference "John 14:15-21.")))) + (ef-sacred-heart + (((part First) (reference "Eph 3:8-12, 14-19")) + ((part Gospel) (reference "John 19:31-37")))) (ef-september-ember-fri (((part First) (reference "Osee 14:2-10")) ((part Gospel) (reference "Luke 7:36-50")))) @@ -324,6 +362,21 @@ (ef-septuagesima-sunday-3 (((part First) (reference "1 Cor. 13:1-13")) ((part Gospel) (reference "Luke 18:31-43")))) + (ef-time-after-epiphany-1-friday + (((part First) (reference "Rom 12:1-5")) + ((part Gospel) (reference "Luke 2:42-52")))) + (ef-time-after-epiphany-1-monday + (((part First) (reference "Rom 12:1-5")) + ((part Gospel) (reference "Luke 2:42-52")))) + (ef-time-after-epiphany-1-thursday + (((part First) (reference "Rom 12:1-5")) + ((part Gospel) (reference "Luke 2:42-52")))) + (ef-time-after-epiphany-1-tuesday + (((part First) (reference "Rom 12:1-5")) + ((part Gospel) (reference "Luke 2:42-52")))) + (ef-time-after-epiphany-1-wednesday + (((part First) (reference "Rom 12:1-5")) + ((part Gospel) (reference "Luke 2:42-52")))) (ef-time-after-epiphany-sunday-1 (((part First) (reference "Col 3:12-17")) ((part Gospel) (reference "Luke 2:42-52")))) diff --git a/test/fixtures/missalemeum-ef-2026-2027.provenance b/test/fixtures/missalemeum-ef-2026-2027.provenance index adae533..d760c9f 100644 --- a/test/fixtures/missalemeum-ef-2026-2027.provenance +++ b/test/fixtures/missalemeum-ef-2026-2027.provenance @@ -1,7 +1,9 @@ Fixture: missalemeum-ef-2026-2027.txt Task: 2026-08-11-colitur-plan3-resolution-engine, Task 16 (oracle harness + data audit); field 9 (commemoration_ids) added 2026-08-12, Task B -(branch ef-rg16a, commemoration-identity comparison). +(branch ef-rg16a, commemoration-identity comparison); fields 10-11 +(first/gospel citations) added 2026-08-17, Task 9 (branch ef-lectionary, +reading-citation comparison). Source: missalemeum.com (Divinum Officium data), archived by the sibling project ~/git/projects/lectio at: @@ -16,15 +18,16 @@ working commands and was not modified -- another agent was working there concurrently), and confirmed the first 8 fields are byte-identical to the fixture's own prior content before field 9 was appended. -SHA-256 of the extracted fixture: 4162e79d7a0bc03b81a34ce6cd3b074e2d32570217759bc3b4058ada75ea8781 -(previously 718eff1a03fa09c3927ef18d19fe7921c2d4d7611890c22566058b81fd7cc5ea, -before field 9 was appended -- same digest as [fixture_sha256] in -test/test_oracle.ml, ASSERTED by that suite's own "fixture SHA-256 matches -its provenance note" test -- this line documents the pin for a reader who -never runs the suite; that test is what actually enforces it. Regenerate -both together, deliberately, after re-running the exact command below -- -never by copying a mismatch's actual value back in, which would defeat the -pin's purpose.) +SHA-256 of the extracted fixture: 350199498ce197c93dfee23bea62a47811995c3c70eec66707c123dd9e9c37fb +(previously 4162e79d7a0bc03b81a34ce6cd3b074e2d32570217759bc3b4058ada75ea8781, +before fields 10-11 were appended, and 718eff1a03fa09c3927ef18d19fe7921c2d4d7611890c22566058b81fd7cc5ea +before that, before field 9 was appended -- same digest as [fixture_sha256] +in test/test_oracle.ml, ASSERTED by that suite's own "fixture SHA-256 +matches its provenance note" test -- this line documents the pin for a +reader who never runs the suite; that test is what actually enforces it. +Regenerate both together, deliberately, after re-running the exact command +below -- never by copying a mismatch's actual value back in, which would +defeat the pin's purpose.) Exact commands: cd ~/git/projects/lectio && sh scripts/snapshot-sources.sh unpack @@ -34,17 +37,23 @@ Exact commands: Output: one line per civil day, 2026-01-01 through 2027-12-31 inclusive (730 lines = 365 + 365, both non-leap years), pipe-separated: - date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids + date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids|first|gospel See tools/extract_missalemeum_oracle.py's own header for the exact field semantics (info.rank/colors/title/tempora/commemorations/displaced, verbatim English strings, not translated or slugified; commemoration_ids is -info.commemorations[*].id, ";"-joined, index-aligned with commemorations) -and the two things verified during extraction, not merely assumed: no -field collides with the "|"/";" delimiters, and all 4 multi-Mass days (info -is an array on 2026-11-02, 2026-12-25, 2027-11-02, 2027-12-25) carry an -IDENTICAL info block (rank/colors/tempora/commemorations/displaced) across -every Mass of the day, so taking entry[0] throughout (this fixture's own -convention) loses nothing the comparator or a human auditor needs. +info.commemorations[*].id, ";"-joined, index-aligned with commemorations; +first/gospel, Task 9, are the day's Epistle and Gospel citations extracted +from entry[0]["sections"]'s own "Lectio"/"Evangelium" bodies, verbatim, +"-" for the 2 Good Friday rows which have no such section at all) and the +things verified during extraction, not merely assumed: no field collides +with the "|"/";" delimiters, all 4 multi-Mass days (info is an array on +2026-11-02, 2026-12-25, 2027-11-02, 2027-12-25) carry an IDENTICAL info +block (rank/colors/tempora/commemorations/displaced) across every Mass of +the day, so taking entry[0] throughout (this fixture's own convention) +loses nothing the comparator or a human auditor needs, and the citation +extraction itself (all 1 458 Lectio/Evangelium sections across the 728 +days that carry one) yields exactly one unambiguous citation-shaped +candidate per section -- checked exhaustively, not sampled. Regenerate with the same commands if the missalemeum snapshot is refreshed and the fixture needs updating; do not hand-edit this file or the fixture. diff --git a/test/fixtures/missalemeum-ef-2026-2027.txt b/test/fixtures/missalemeum-ef-2026-2027.txt index 50057a6..c66cd54 100644 --- a/test/fixtures/missalemeum-ef-2026-2027.txt +++ b/test/fixtures/missalemeum-ef-2026-2027.txt @@ -1,730 +1,730 @@ -2026-01-01|1|w|Octave Day of Christmas|-|-|-|1|- -2026-01-02|4|w|Feria|-|-|-|1|- -2026-01-03|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|- -2026-01-04|2|w|Holy Name of Jesus|-|-|-|1|- -2026-01-05|4|w|Feria|-|St. Telesphorus Pope and Martyr|-|1|sancti:01-05:4:r -2026-01-06|1|w|Epiphany of the Lord|-|-|-|1|- -2026-01-07|4|w|Feria|-|-|-|1|- -2026-01-08|4|w|Feria|-|-|-|1|- -2026-01-09|4|w|Feria|-|-|-|1|- -2026-01-10|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|- -2026-01-11|2|w|The Holy Family: Jesus, Mary & Joseph|-|-|St. Hyginus Pope and Martyr|1|- -2026-01-12|4|w|Feria|Feria_II_after_Epiphany|-|-|1|- -2026-01-13|2|w|Commemoration of the Baptism of the Lord|Feria_III_after_Epiphany|-|-|1|- -2026-01-14|3|w|St. Hilary|Feria_IV_after_Epiphany|S. Felicis|-|1|sancti:01-14cc:4:r -2026-01-15|3|w|St. Paul, the First Hermit|Feria_V_after_Epiphany|St. Maur, Abbot|-|1|sancti:01-15cc:4:w -2026-01-16|3|r|St. Marcellus I|Feria_VI_after_Epiphany|-|-|1|- -2026-01-17|3|w|St. Anthony|Saturday_after_Epiphany|-|-|1|- -2026-01-18|2|g|II Sunday after Epiphany|-|-|St. Prisca|1|- -2026-01-19|4|g|Feria|Feria_II_after_II_Sunday_after_Epiphany|Sts. Marius, Martha, Audifax & Abachum;St. Canute, Martyr|-|1|sancti:01-19:4:r;sancti:01-19o:4:r -2026-01-20|3|r|Sts. Fabian & Sebastian|Feria_III_after_II_Sunday_after_Epiphany|-|-|1|- -2026-01-21|3|r|St. Agnes|Feria_IV_after_II_Sunday_after_Epiphany|-|-|1|- -2026-01-22|3|r|Sts. Vincent & Anastasius|Feria_V_after_II_Sunday_after_Epiphany|-|-|1|- -2026-01-23|3|w|St. Raymond of Peñafort|Feria_VI_after_II_Sunday_after_Epiphany|St. Emerentiana|-|1|sancti:01-23o:4:r -2026-01-24|3|r|St. Timothy|Saturday_after_II_Sunday_after_Epiphany|-|-|1|- -2026-01-25|2|g|III Sunday after Epiphany|-|-|Conversion of St. Paul;St. Peter|1|- -2026-01-26|3|r|St. Polycarp|Feria_II_after_III_Sunday_after_Epiphany|-|-|1|- -2026-01-27|3|w|St. John Chrysostom|Feria_III_after_III_Sunday_after_Epiphany|-|-|1|- -2026-01-28|3|w|St. Peter Nolasco|Feria_IV_after_III_Sunday_after_Epiphany|St. Agnes|-|1|sancti:01-28t:4:r -2026-01-29|3|w|St. Francis de Sales|Feria_V_after_III_Sunday_after_Epiphany|-|-|1|- -2026-01-30|3|r|St. Martina|Feria_VI_after_III_Sunday_after_Epiphany|-|-|1|- -2026-01-31|3|w|St. John Bosco|Saturday_after_III_Sunday_after_Epiphany|-|-|1|- -2026-02-01|2|v|Septuagesima Sunday|-|-|St. Ignatius of Antioch|1|- -2026-02-02|2|w|Purification of the Blessed Virgin Mary|Feria_II_after_Septuagesima|-|-|1|- -2026-02-03|4|v|Feria|Feria_III_after_Septuagesima|St. Blaise|-|1|sancti:02-03:4:r -2026-02-04|3|w|St. Andrew Corsini|Feria_IV_after_Septuagesima|-|-|1|- -2026-02-05|3|r|St. Agatha|Feria_V_after_Septuagesima|-|-|1|- -2026-02-06|3|w|St. Titus|Feria_VI_after_Septuagesima|St. Dorothy|-|1|sancti:02-06o:4:r -2026-02-07|3|w|St. Romuald|Saturday_after_Septuagesima|-|-|1|- -2026-02-08|2|v|Sexagesima Sunday|-|-|St. John of Matha|1|- -2026-02-09|3|w|St. Cyril of Alexandria|Feria_II_after_Sexagesima|St. Appollonia|-|1|sancti:02-09o:4:r -2026-02-10|3|w|St. Scholastica|Feria_III_after_Sexagesimæ|-|-|1|- -2026-02-11|3|w|Our Lady of Lourdes|Feria_IV_after_Sexagesimæ|-|-|1|- -2026-02-12|3|w|Seven Holy Servite Founders|Feria_V_after_Sexagesimæ|-|-|1|- -2026-02-13|4|v|Feria|Feria_VI_after_Sexagesimæ|-|-|1|- -2026-02-14|4|w|III Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_Sexagesimæ|St. Valentine|-|1|sancti:02-14:4:r -2026-02-15|2|v|Quinquagesima Sunday|-|-|Sts. Faustinus & Jovita|1|- -2026-02-16|4|v|Feria|Feria_II_after_Quinquagesima|-|-|1|- -2026-02-17|4|v|Feria|Feria_III_after_Quinquagesima|-|-|1|- -2026-02-18|1|v|Ash Wednesday|-|-|St. Simeon|1|- -2026-02-19|3|v|Feria V after Ash Wednesday|-|-|-|1|- -2026-02-20|3|v|Feria VI after Ash Wednesday|-|-|-|1|- -2026-02-21|3|v|Saturday after Ash Wednesday|-|-|-|1|- -2026-02-22|1|v|I Sunday of Lent|-|-|Chair of St. Peter;St. Paul|1|- -2026-02-23|3|v|Feria II after the I Sunday of Lent|-|St. Peter Damien|-|1|sancti:02-23r:3:w -2026-02-24|2|r|St. Matthias|Feria_III_after_the_I_Sunday_of_Lent|Feria III after the I Sunday of Lent|-|1|tempora:Quad1-2:3:v -2026-02-25|2|v|Ember Wednesday of Lent|-|-|-|1|- -2026-02-26|3|v|Feria V after the I Sunday of Lent|-|-|-|1|- -2026-02-27|2|v|Ember Friday of Lent|-|St. Gabriel of Our Lady of Sorrows|-|1|sancti:02-27:3:w -2026-02-28|2|v|Ember Saturday of Lent|-|-|-|1|- -2026-03-01|1|v|II Sunday of Lent|-|-|-|1|- -2026-03-02|3|v|Feria II after the II Sunday of Lent|-|-|-|1|- -2026-03-03|3|v|Feria III after the II Sunday of Lent|-|-|-|1|- -2026-03-04|3|v|Feria IV after the II Sunday of Lent|-|St. Casimir;St. Lucius|-|1|sancti:03-04:3:w;sancti:03-04cc:4:r -2026-03-05|3|v|Feria V after the II Sunday of Lent|-|-|-|1|- -2026-03-06|3|v|Feria VI after the II Sunday of Lent|-|Sts. Felicitas & Perpetua|-|1|sancti:03-06:3:r -2026-03-07|3|v|Saturday after the II Sunday of Lent|-|St. Thomas Aquinas|-|1|sancti:03-07:3:w -2026-03-08|1|v|III Sunday of Lent|-|-|St. John of God|1|- -2026-03-09|3|v|Feria II after the III Sunday of Lent|-|St. Frances Rome|-|1|sancti:03-09:3:w -2026-03-10|3|v|Feria III after the III Sunday of Lent|-|Forty Holy Martyrs of Sebaste|-|1|sancti:03-10:3:r -2026-03-11|3|v|Feria IV after the III Sunday of Lent|-|-|-|1|- -2026-03-12|3|v|Feria V after the III Sunday of Lent|-|St. Gregory the Great|-|1|sancti:03-12:3:w -2026-03-13|3|v|Feria VI after the III Sunday of Lent|-|-|-|1|- -2026-03-14|3|v|Saturday after the III Sunday of Lent|-|-|-|1|- -2026-03-15|1|pv|IV Sunday of Lent|-|-|-|1|- -2026-03-16|3|v|Feria II after the IV Sunday of Lent|-|-|-|1|- -2026-03-17|3|v|Feria III after the IV Sunday of Lent|-|St. Patrick|-|1|sancti:03-17:3:w -2026-03-18|3|v|Feria IV after the IV Sunday of Lent|-|St. Cyril of Jerusalem|-|1|sancti:03-18:3:w -2026-03-19|1|w|St. Joseph, Spouse of the Bl. Virgin Mary|Feria_V_after_the_IV_Sunday_of_Lent|Feria V after the IV Sunday of Lent|-|1|tempora:Quad4-4:3:v -2026-03-20|3|v|Feria VI after the IV Sunday of Lent|-|-|-|1|- -2026-03-21|3|v|Saturday after the IV Sunday of Lent|-|St. Benedict|-|1|sancti:03-21:3:w -2026-03-22|1|v|Passion Sunday|-|-|-|1|- -2026-03-23|3|v|Feria II of Passion Week|-|-|-|1|- -2026-03-24|3|v|Feria III of Passion Week|-|St. Gabriel the Archangel|-|1|sancti:03-24:3:w -2026-03-25|1|w|Annunciation of the Blessed Virgin Mary|Feria_IV_of_Passion_Week|Feria IV of Passion Week|-|1|tempora:Quad5-3:3:v -2026-03-26|3|v|Feria V of Passion Week|-|-|-|1|- -2026-03-27|3|v|Feria VI of Passion Week|-|For Our Lady of the Seven Sorrows|St. John Damascene|1|tempora:Quad5-5Feriac:4:w -2026-03-28|3|v|Saturday of Passion Week|-|St. John of Capistrano|-|1|sancti:03-28:3:w -2026-03-29|1|rv|Palm Sunday|-|-|-|1|- -2026-03-30|1|v|Feria II of Holy Week|-|-|-|1|- -2026-03-31|1|v|Feria III of Holy Week|-|-|-|1|- -2026-04-01|1|v|Feria IV of Holy Week|-|-|-|1|- -2026-04-02|1|w|Holy Thursday|-|-|St. Francis of Paola|1|- -2026-04-03|1|bv|Good Friday|-|-|-|1|- -2026-04-04|1|vw|Holy Saturday|-|-|St. Isidore of Seville|1|- -2026-04-05|1|w|Easter Sunday|-|-|St. Vincent Ferrer|1|- -2026-04-06|1|w|Monday in the Octave of Easter|-|-|-|1|- -2026-04-07|1|w|Tuesday in the Octave of Easter|-|-|-|1|- -2026-04-08|1|w|Wednesday in the Octave of Easter|-|-|-|1|- -2026-04-09|1|w|Thursday in the Octave of Easter|-|-|-|1|- -2026-04-10|1|w|Friday in the Octave of Easter|-|-|-|1|- -2026-04-11|1|w|Saturday in the Octave of Easter|-|-|St. Leo the Great|1|- -2026-04-12|1|w|Low Sunday|-|-|-|1|- -2026-04-13|3|r|St. Hermenegild|Monday_after_I_Sunday_after_Easter|-|-|1|- -2026-04-14|3|r|St. Justin|Tuesday_after_I_Sunday_after_Easter|Sts. Tiburtius, Valerian et Maximus, Martyrs|-|1|sancti:04-14t:4:r -2026-04-15|4|w|Feria|Wednesday_after_I_Sunday_after_Easter|-|-|1|- -2026-04-16|4|w|Feria|Thursday_after_I_Sunday_after_Easter|-|-|1|- -2026-04-17|4|w|Feria|Friday_after_I_Sunday_after_Easter|St. Anicetus|-|1|sancti:04-17:4:r -2026-04-18|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_I_Sunday_after_Easter|-|-|1|- -2026-04-19|2|w|II Sunday after Easter|-|-|-|1|- -2026-04-20|4|w|Feria|Monday_after_II_Sunday_after_Easter|-|-|1|- -2026-04-21|3|w|St. Anselm|Tuesday_after_II_Sunday_after_Easter|-|-|1|- -2026-04-22|3|r|Sts. Soter & Caius|Wednesday_after_II_Sunday_after_Easter|-|-|1|- -2026-04-23|4|w|Feria|Thursday_after_II_Sunday_after_Easter|St. George|-|1|sancti:04-23:4:r -2026-04-24|3|r|St. Fidelis of Sigmaringen|Friday_after_II_Sunday_after_Easter|-|-|1|- -2026-04-25|2|r|St. Mark|Saturday_after_II_Sunday_after_Easter|Pro rogationibus|-|1|sancti:04-25c:4:r -2026-04-26|2|w|III Sunday after Easter|-|-|Sts. Cletus & Marcellinus|1|- -2026-04-27|3|w|St. Peter Canisius|Monday_after_III_Sunday_after_Easter|-|-|1|- -2026-04-28|3|w|St. Paul of the Cross|Tuesday_after_III_Sunday_after_Easter|-|-|1|- -2026-04-29|3|r|St. Peter of Verona|Wednesday_after_III_Sunday_after_Easter|-|-|1|- -2026-04-30|3|w|St. Catherine of Siena|Thursday_after_III_Sunday_after_Easter|-|-|1|- -2026-05-01|1|w|St. Joseph the Workman|Friday_after_III_Sunday_after_Easter|-|-|1|- -2026-05-02|3|w|St. Athanasius|Saturday_after_III_Sunday_after_Easter|-|-|1|- -2026-05-03|2|w|IV Sunday after Easter|-|-|Sts. Alexander & Companions|1|- -2026-05-04|3|w|St. Monica|Monday_after_IV_Sunday_after_Easter|-|-|1|- -2026-05-05|3|w|St. Pius V|Tuesday_after_IV_Sunday_after_Easter|-|-|1|- -2026-05-06|4|w|Feria|Wednesday_after_IV_Sunday_after_Easter|-|-|1|- -2026-05-07|3|r|St. Stanislaus|Thursday_after_IV_Sunday_after_Easter|-|-|1|- -2026-05-08|4|w|Feria|Friday_after_IV_Sunday_after_Easter|-|-|1|- -2026-05-09|3|w|St. Gregory of Nazianzen|Saturday_after_IV_Sunday_after_Easter|-|-|1|- -2026-05-10|2|w|V Sunday after Easter|-|-|St. Antoninus;St. Gordiano and Epimacho|1|- -2026-05-11|2|r|Sts. Philip & James|The_Minor_Litanies_–_Rogations|-|-|1|- -2026-05-12|3|r|Sts. Nereus, Achilleus, Domitilla, & Pancras|The_Minor_Litanies_–_Rogations|-|-|1|- -2026-05-13|2|w|Vigil of the Ascension|-|St. Robert Bellarmine|-|1|sancti:05-13:3:w -2026-05-14|1|w|Ascension of the Lord|-|-|St. Boniface|1|- -2026-05-15|3|w|St. John Baptist de la Salle|Feria_VI_after_the_Ascension|-|-|1|- -2026-05-16|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_the_Ascension|St. Ubaldus|-|1|sancti:05-16:4:w -2026-05-17|2|w|Sunday after the Ascension|-|-|St. Paschal Baylon|1|- -2026-05-18|3|r|St. Venantius|Feria_II_after_the_Ascension|-|-|1|- -2026-05-19|3|w|St. Peter Celestine|Feria_III_after_the_Ascension|St. Pudentiana Virginis|-|1|sancti:05-19o:4:w -2026-05-20|3|w|St. Bernardine of Siena|Feria_IV_after_the_Ascension|-|-|1|- -2026-05-21|4|w|Feria|Feria_V_after_the_Ascension|-|-|1|- -2026-05-22|4|w|Feria|Feria_VI_after_the_Ascension|-|-|1|- -2026-05-23|1|r|Saturday after the Ascension|-|-|-|1|- -2026-05-24|1|r|Pentecost Sunday|-|-|-|1|- -2026-05-25|1|r|Monday after Pentecost|-|-|St. Gregory VII;St. Urban, Pope and Martyr|1|- -2026-05-26|1|r|Tuesday after Pentecost|-|-|St. Philip Neri;S. Eleutherius|1|- -2026-05-27|1|r|Ember Wednesday of Pentecost|-|-|St. Bede the Venerable;St. John I|1|- -2026-05-28|1|r|Thursday after Pentecost|-|-|St. Augustine of Canterbury|1|- -2026-05-29|1|r|Ember Friday of Pentecost|-|-|St. Mary Magdalene de Pazzi|1|- -2026-05-30|1|r|Ember Saturday of Pentecost|-|-|St. Felix I|1|- -2026-05-31|1|w|Trinity Sunday|-|-|Queenship of the Blessed Virgin Mary;St. Petronilla|1|- -2026-06-01|3|w|St. Angela Merici|Feria_II_after_I_Sunday_after_Pentecost|-|-|1|- -2026-06-02|4|g|Feria|Feria_III_after_I_Sunday_after_Pentecost|Sts. Marcellinus, Peter, & Erasmus|-|1|sancti:06-02:4:r -2026-06-03|4|g|Feria|Feria_IV_after_I_Sunday_after_Pentecost|-|-|1|- -2026-06-04|1|w|Corpus Christi|-|-|St. Francis Caracciolo|1|- -2026-06-05|3|r|St. Boniface|Feria_V_after_I_Sunday_after_Pentecost|-|-|1|- -2026-06-06|3|w|St. Norbert|Saturday_after_I_Sunday_after_Pentecost|-|-|1|- -2026-06-07|2|g|II Sunday after Pentecost|-|-|-|1|- -2026-06-08|4|g|Feria|Feria_II_after_II_Sunday_after_Pentecost|-|-|1|- -2026-06-09|4|g|Feria|Feria_III_after_II_Sunday_after_Pentecost|Sts. Primus & Felicianus|-|1|sancti:06-09:4:r -2026-06-10|3|w|St. Margaret of Scotland|Feria_IV_after_II_Sunday_after_Pentecost|-|-|1|- -2026-06-11|3|r|St. Barnabas|Feria_V_after_II_Sunday_after_Pentecost|-|-|1|- -2026-06-12|1|w|Sacred Heart of Jesus|-|-|St. John of San Fecundo;St. Basilidus|1|- -2026-06-13|3|w|St. Anthony of Padua|Saturday_after_II_Sunday_after_Pentecost|-|-|1|- -2026-06-14|2|g|III Sunday after Pentecost|-|-|St. Basil the Great|1|- -2026-06-15|4|g|Feria|Feria_II_after_III_Sunday_after_Pentecost|St. Vitus|-|1|sancti:06-15:4:w -2026-06-16|4|g|Feria|Feria_III_after_III_Sunday_after_Pentecost|-|-|1|- -2026-06-17|3|w|St. Gregory Barbarigo|Feria_IV_after_III_Sunday_after_Pentecost|-|-|1|- -2026-06-18|3|r|St. Ephrem of Syria|Feria_V_after_III_Sunday_after_Pentecost|Ss. Marcus and Marcellianus|-|1|sancti:06-18t:4:r -2026-06-19|3|r|St. Julia of Falconieri|Feria_VI_after_III_Sunday_after_Pentecost|Sts. Gervasius and Protasius|-|1|sancti:06-19o:4:r -2026-06-20|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_III_Sunday_after_Pentecost|St. Silverius|-|1|sancti:06-20:4:r -2026-06-21|2|g|IV Sunday after Pentecost|-|-|St. Aloysius Gongzaga|1|- -2026-06-22|3|w|St. Paulinus of Nola|Feria_II_after_IV_Sunday_after_Pentecost|-|-|1|- -2026-06-23|2|v|Vigil of the Nativity of St. John the Baptist|Feria_III_after_IV_Sunday_after_Pentecost|-|-|1|- -2026-06-24|1|w|Nativity of St. John the Baptist|Feria_IV_after_IV_Sunday_after_Pentecost|-|-|1|- -2026-06-25|3|w|St. William|Feria_V_after_IV_Sunday_after_Pentecost|-|-|1|- -2026-06-26|3|r|Sts. John & Paul|Feria_VI_after_IV_Sunday_after_Pentecost|-|-|1|- -2026-06-27|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IV_Sunday_after_Pentecost|-|-|1|- -2026-06-28|2|g|V Sunday after Pentecost|-|Vigil of Sts. Peter & Paul|-|1|sancti:06-28r:2:v -2026-06-29|1|r|Sts. Peter & Paul|Feria_II_after_V_Sunday_after_Pentecost|-|-|1|- -2026-06-30|3|r|In Commemoratione Sancti Pauli Apostoli|Feria_III_after_V_Sunday_after_Pentecost|-|-|1|- -2026-07-01|1|r|The Precious Blood of Our Lord Jesus Christ|Feria_IV_after_V_Sunday_after_Pentecost|-|-|1|- -2026-07-02|2|w|Visitation of the Blessed Virgin Mary|Feria_V_after_V_Sunday_after_Pentecost|SS. Processus and Martinian|-|1|sancti:07-02cc:4:r -2026-07-03|3|r|St. Irenaeus|Feria_VI_after_V_Sunday_after_Pentecost|-|-|1|- -2026-07-04|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_V_Sunday_after_Pentecost|-|-|1|- -2026-07-05|2|g|VI Sunday after Pentecost|-|-|St. Anthony Mary Zaccariah|1|- -2026-07-06|4|g|Feria|Feria_II_after_VI_Sunday_after_Pentecost|-|-|1|- -2026-07-07|3|w|Sts. Cyril & Methodius|Feria_III_after_VI_Sunday_after_Pentecost|-|-|1|- -2026-07-08|3|w|St. Elizabeth of Portugal|Feria_IV_after_VI_Sunday_after_Pentecost|-|-|1|- -2026-07-09|4|g|Feria|Feria_V_after_VI_Sunday_after_Pentecost|-|-|1|- -2026-07-10|3|r|Seven Holy Brothers and Sts. Rufina & Secunda|Feria_VI_after_VI_Sunday_after_Pentecost|-|-|1|- -2026-07-11|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_VI_Sunday_after_Pentecost|St. Pius I|-|1|sancti:07-11:4:r -2026-07-12|2|g|VII Sunday after Pentecost|-|-|St. John Gualbert;Ss. Naboris et Felicis|1|- -2026-07-13|4|g|Feria|Feria_II_after_VII_Sunday_after_Pentecost|-|-|1|- -2026-07-14|3|w|St. Bonaventure|Feria_III_after_VII_Sunday_after_Pentecost|-|-|1|- -2026-07-15|3|w|St. Henry the Emperor|Feria_IV_after_VII_Sunday_after_Pentecost|-|-|1|- -2026-07-16|4|g|Feria|Feria_V_after_VII_Sunday_after_Pentecost|Our Lady of Mt. Carmel|-|1|sancti:07-16:4:w -2026-07-17|4|g|Feria|Feria_VI_after_VII_Sunday_after_Pentecost|St. Alexis|-|1|sancti:07-17:4:w -2026-07-18|3|r|Camillus de Lellis|Saturday_after_VII_Sunday_after_Pentecost|Ss. Symphorosa and sons|-|1|sancti:07-18cc:4:r -2026-07-19|2|g|VIII Sunday after Pentecost|-|-|St. Vincent de Paul|1|- -2026-07-20|3|r|St. Jerome Emiliani|Feria_II_after_VIII_Sunday_after_Pentecost|St. Margaret|-|1|sancti:07-20o:4:w -2026-07-21|3|w|St. Laurence of Brindisi|Feria_III_after_VIII_Sunday_after_Pentecost|St. Praxedis Virginis|-|1|sancti:07-21:4:w -2026-07-22|3|w|St. Mary Magdalene|Feria_IV_after_VIII_Sunday_after_Pentecost|-|-|1|- -2026-07-23|3|w|St. Apollinaris|Feria_V_after_VIII_Sunday_after_Pentecost|S. Liborii|-|1|sancti:07-23cc:4:r -2026-07-24|4|g|Feria|Feria_VI_after_VIII_Sunday_after_Pentecost|St. Christina|-|1|sancti:07-24r:4:r -2026-07-25|2|r|St. James the Greater|Saturday_after_VIII_Sunday_after_Pentecost|St. Christopher|-|1|sancti:07-25cc:4:r -2026-07-26|2|g|IX Sunday after Pentecost|-|St. Anne, Mother of the Blessed Virgin|-|1|sancti:07-26:2:w -2026-07-27|4|g|Feria|Feria_II_after_IX_Sunday_after_Pentecost|St. Pantaleon|-|1|sancti:07-27:4:r -2026-07-28|3|r|Sts. Nazarius & Celsus, St. Victor I & St. Innocent I|Feria_III_after_IX_Sunday_after_Pentecost|-|-|1|- -2026-07-29|3|r|St. Martha|Feria_IV_after_IX_Sunday_after_Pentecost|Ss. Felicis, Simplicii, Faustini et Beatricis|-|1|sancti:07-29cc:4:r -2026-07-30|4|g|Feria|Feria_V_after_IX_Sunday_after_Pentecost|Sts. Abdon & Sennen|-|1|sancti:07-30:4:r -2026-07-31|3|w|St. Ignatius Loyola|Feria_VI_after_IX_Sunday_after_Pentecost|-|-|1|- -2026-08-01|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IX_Sunday_after_Pentecost|Holy Machabees|-|1|sancti:08-01r:4:r -2026-08-02|2|g|X Sunday after Pentecost|-|-|St. Alphonsus Liguori;St. Stephen I, Pope and Martyr|1|- -2026-08-03|4|g|Feria|Feria_II_after_X_Sunday_after_Pentecost|-|-|1|- -2026-08-04|3|w|St. Dominic|Feria_III_after_X_Sunday_after_Pentecost|-|-|1|- -2026-08-05|3|w|Dedication of the Basilica of St. Mary Major|Feria_IV_after_X_Sunday_after_Pentecost|-|-|1|- -2026-08-06|2|w|Transfiguration of Our Lord|Feria_V_after_X_Sunday_after_Pentecost|Pope Sixtus II, Felicissimus and Agapitus, Martyrs|-|1|sancti:08-06cc:4:r -2026-08-07|3|w|St. Cajetan|Feria_VI_after_X_Sunday_after_Pentecost|St. Donatus|-|1|sancti:08-07o:4:r -2026-08-08|3|w|St. John Mary Vianney|Saturday_after_X_Sunday_after_Pentecost|Ss. Cyriacus, Largus and Smaragdus, Martyrs|-|1|sancti:08-08c:4:r -2026-08-09|3|r|Vigil of St. Lawrence|XI_Sunday_after_Pentecost|St. Romanus|-|1|sancti:08-09cc:4:r -2026-08-10|2|r|St. Lawrence|Feria_II_after_XI_Sunday_after_Pentecost|-|-|1|- -2026-08-11|4|g|Feria|Feria_III_after_XI_Sunday_after_Pentecost|Sts. Tiburtius & Susanna|-|1|sancti:08-11:4:r -2026-08-12|3|w|St. Clare|Feria_IV_after_XI_Sunday_after_Pentecost|-|-|1|- -2026-08-13|4|g|Feria|Feria_V_after_XI_Sunday_after_Pentecost|Sts. Hippolytus & Cassian|-|1|sancti:08-13:4:r -2026-08-14|2|w|Vigil of the Assumption|Feria_VI_after_XI_Sunday_after_Pentecost|St. Eusebius|-|1|sancti:08-14cc:4:r -2026-08-15|1|w|Assumption of the Blessed Virgin Mary|Saturday_after_XI_Sunday_after_Pentecost|-|-|1|- -2026-08-16|2|g|XII Sunday after Pentecost|-|St. Joachim, Father of the Blessed Virgin|-|1|sancti:08-16:2:w -2026-08-17|3|w|St. Hyacinth|Feria_II_after_XII_Sunday_after_Pentecost|-|-|1|- -2026-08-18|4|g|Feria|Feria_III_after_XII_Sunday_after_Pentecost|St. Agapitus|-|1|sancti:08-18r:4:w -2026-08-19|3|w|St. John Eudes|Feria_IV_after_XII_Sunday_after_Pentecost|-|-|1|- -2026-08-20|3|w|St. Bernard of Clairvaux|Feria_V_after_XII_Sunday_after_Pentecost|-|-|1|- -2026-08-21|3|w|St. Jane Frances de Chantal|Feria_VI_after_XII_Sunday_after_Pentecost|-|-|1|- -2026-08-22|2|w|Immaculate Heart of Mary|Saturday_after_XII_Sunday_after_Pentecost|Sts. Timothy, Hippolytus and Symphorianus, Martyrs|-|1|sancti:08-22cc:4:r -2026-08-23|2|g|XIII Sunday after Pentecost|-|-|St. Philip Benizi|1|- -2026-08-24|2|r|St. Bartholomew|Feria_II_after_XIII_Sunday_after_Pentecost|-|-|1|- -2026-08-25|3|w|St. Louis IX|Feria_III_after_XIII_Sunday_after_Pentecost|-|-|1|- -2026-08-26|4|g|Feria|Feria_IV_after_XIII_Sunday_after_Pentecost|St. Zephyrinus|-|1|sancti:08-26:4:r -2026-08-27|3|w|St. Joseph Calasance|Feria_V_after_XIII_Sunday_after_Pentecost|-|-|1|- -2026-08-28|3|r|St. Augustine|Feria_VI_after_XIII_Sunday_after_Pentecost|St. Hermes|-|1|sancti:08-28cc:4:r -2026-08-29|3|r|Beheading of St. John the Baptist|Saturday_after_XIII_Sunday_after_Pentecost|St. Sabina|-|1|sancti:08-29cc:4:r -2026-08-30|2|g|XIV Sunday after Pentecost|-|-|St. Rose of Lima;Sts. Felix and Adauctus|1|- -2026-08-31|3|w|St. Raymond Nonnatus|Feria_II_after_XIV_Sunday_after_Pentecost|-|-|1|- -2026-09-01|4|g|Feria|Feria_III_after_XIV_Sunday_after_Pentecost|St. Giles;Twelve Holy Brothers, Martyrs|-|1|sancti:09-01:4:w;sancti:09-01cc:4:r -2026-09-02|3|w|St. Stephen of Hungary|Feria_IV_after_XIV_Sunday_after_Pentecost|-|-|1|- -2026-09-03|3|w|St. Pius X|Feria_V_after_XIV_Sunday_after_Pentecost|-|-|1|- -2026-09-04|4|g|Feria|Feria_VI_after_XIV_Sunday_after_Pentecost|-|-|1|- -2026-09-05|3|w|St. Lawrence Justinian|Saturday_after_XIV_Sunday_after_Pentecost|-|-|1|- -2026-09-06|2|g|XV Sunday after Pentecost|-|-|-|1|- -2026-09-07|4|g|Feria|Feria_II_after_XV_Sunday_after_Pentecost|-|-|1|- -2026-09-08|2|w|Nativity of the Blessed Virgin Mary|Feria_III_after_XV_Sunday_after_Pentecost|S. Hadriani|-|1|sancti:09-08cc:4:r -2026-09-09|4|g|Feria|Feria_IV_after_XV_Sunday_after_Pentecost|St. Gorgonius|-|1|sancti:09-09:4:r -2026-09-10|3|w|St. Nicholas of Tolentino|Feria_V_after_XV_Sunday_after_Pentecost|-|-|1|- -2026-09-11|4|g|Feria|Feria_VI_after_XV_Sunday_after_Pentecost|Sts. Protus & Hyacinth|-|1|sancti:09-11:4:r -2026-09-12|3|w|Most Holy Name of Mary|Saturday_after_XV_Sunday_after_Pentecost|-|-|1|- -2026-09-13|2|g|XVI Sunday after Pentecost|-|-|-|1|- -2026-09-14|2|r|Exaltation of the Holy Cross|Feria_II_after_XVI_Sunday_after_Pentecost|-|-|1|- -2026-09-15|2|w|Seven Sorrows of the Blessed Virgin Mary|Feria_III_after_XVI_Sunday_after_Pentecost|S. Nicomedes|-|1|sancti:09-15cc:4:r -2026-09-16|3|r|Sts. Cornelius & Cyprian|Feria_IV_after_XVI_Sunday_after_Pentecost|Sts. Euphemia, Lucy and Geminianus|-|1|sancti:09-16cc:4:r -2026-09-17|4|g|Feria|Feria_V_after_XVI_Sunday_after_Pentecost|Stigmata of St. Francis|-|1|sancti:09-17:4:w -2026-09-18|3|w|St. Joseph of Cupertino|Feria_VI_after_XVI_Sunday_after_Pentecost|-|-|1|- -2026-09-19|3|r|St. Januarius & Companions|Saturday_after_XVI_Sunday_after_Pentecost|-|-|1|- -2026-09-20|2|g|XVII Sunday after Pentecost|-|-|Sts. Eustace & Companions|1|- -2026-09-21|2|r|St. Matthew|Feria_II_after_XVII_Sunday_after_Pentecost|-|-|1|- -2026-09-22|3|w|St. Thomas of Villanova|Feria_III_after_XVII_Sunday_after_Pentecost|St. Maurice and Companions, Martyrs|-|1|sancti:09-22o:4:r -2026-09-23|2|v|Ember Wednesday of September|-|St. Linus|St. Thecla|1|sancti:09-23:3:r -2026-09-24|4|g|Feria|Feria_V_after_XVII_Sunday_after_Pentecost|Our Lady of Ransom|-|1|sancti:09-24:4:w -2026-09-25|2|v|Ember Friday of September|-|-|-|1|- -2026-09-26|2|v|Ember Saturday of September|-|Sts. Cyprian & Justina|-|1|sancti:09-26:4:r -2026-09-27|2|g|XVIII Sunday after Pentecost|-|-|Sts. Cosmas & Damian|1|- -2026-09-28|3|r|St. Wenceslaus|Feria_II_after_XVIII_Sunday_after_Pentecost|-|-|1|- -2026-09-29|1|w|Dedication of St. Michael the Archangel|Feria_III_after_XVIII_Sunday_after_Pentecost|-|-|1|- -2026-09-30|3|w|St. Jerome|Feria_IV_after_XVIII_Sunday_after_Pentecost|-|-|1|- -2026-10-01|4|g|Feria|Feria_V_after_XVIII_Sunday_after_Pentecost|St. Remigius|-|1|sancti:10-01:4:w -2026-10-02|3|w|Holy Guardian Angels|Feria_VI_after_XVIII_Sunday_after_Pentecost|-|-|1|- -2026-10-03|3|w|St. Theresa of the Infant Jesus|Saturday_after_XVIII_Sunday_after_Pentecost|-|-|1|- -2026-10-04|2|g|XIX Sunday after Pentecost|-|-|St. Francis of Assisi|1|- -2026-10-05|4|g|Feria|Feria_II_after_XIX_Sunday_after_Pentecost|St. Placid & Companions|-|1|sancti:10-05:4:r -2026-10-06|3|w|St. Bruno|Feria_III_after_XIX_Sunday_after_Pentecost|-|-|1|- -2026-10-07|2|w|Our Lady of the Rosary|Feria_IV_after_XIX_Sunday_after_Pentecost|St. Mark I|-|1|sancti:10-07t:4:r -2026-10-08|3|w|St. Bridget of Sweden|Feria_V_after_XIX_Sunday_after_Pentecost|Ss. Sergio, Baccho, Marcello and Apulejo Martyrs|-|1|sancti:10-08c:4:r -2026-10-09|3|w|St. John Leonardi|Feria_VI_after_XIX_Sunday_after_Pentecost|St. Dionysius and companions|-|1|sancti:10-09t:4:r -2026-10-10|3|w|St. Francis Borgia|Saturday_after_XIX_Sunday_after_Pentecost|-|-|1|- -2026-10-11|2|g|XX Sunday after Pentecost|-|Maternity of the Blessed Virgin Mary|-|1|sancti:10-11:2:w -2026-10-12|4|g|Feria|Feria_II_after_XX_Sunday_after_Pentecost|-|-|1|- -2026-10-13|3|w|St. Edward|Feria_III_after_XX_Sunday_after_Pentecost|-|-|1|- -2026-10-14|3|r|St. Callistus I|Feria_IV_after_XX_Sunday_after_Pentecost|-|-|1|- -2026-10-15|3|w|St. Teresa of Avila|Feria_V_after_XX_Sunday_after_Pentecost|-|-|1|- -2026-10-16|3|w|St. Hedwig|Feria_VI_after_XX_Sunday_after_Pentecost|-|-|1|- -2026-10-17|3|w|St. Margaret Mary Alacoque|Saturday_after_XX_Sunday_after_Pentecost|-|-|1|- -2026-10-18|2|g|XXI Sunday after Pentecost|-|St. Luke the Evangelist|-|1|sancti:10-18:2:r -2026-10-19|3|w|St. Peter of Alcantara|Feria_II_after_XXI_Sunday_after_Pentecost|-|-|1|- -2026-10-20|3|w|St. John Cantius|Feria_III_after_XXI_Sunday_after_Pentecost|-|-|1|- -2026-10-21|4|g|Feria|Feria_IV_after_XXI_Sunday_after_Pentecost|St. Hilarion;St. Ursula and Companions|-|1|sancti:10-21:4:w;sancti:10-21cc:4:r -2026-10-22|4|g|Feria|Feria_V_after_XXI_Sunday_after_Pentecost|-|-|1|- -2026-10-23|3|w|St. Anthony Mary Claret|Feria_VI_after_XXI_Sunday_after_Pentecost|-|-|1|- -2026-10-24|3|w|St. Raphael the Archangel|Saturday_after_XXI_Sunday_after_Pentecost|-|-|1|- -2026-10-25|1|w|Christ the King|XXII_Sunday_after_Pentecost|-|Sts. Chrysanthus & Daria|1|- -2026-10-26|4|g|Feria|Feria_II_after_XXII_Sunday_after_Pentecost|St. Evaristus|-|1|sancti:10-26:4:r -2026-10-27|4|g|Feria|Feria_III_after_XXII_Sunday_after_Pentecost|-|-|1|- -2026-10-28|2|r|Sts. Simon & Jude|Feria_IV_after_XXII_Sunday_after_Pentecost|-|-|1|- -2026-10-29|4|g|Feria|Feria_V_after_XXII_Sunday_after_Pentecost|-|-|1|- -2026-10-30|4|g|Feria|Feria_VI_after_XXII_Sunday_after_Pentecost|-|-|1|- -2026-10-31|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXII_Sunday_after_Pentecost|-|-|1|- -2026-11-01|1|w|All Saints|XXIII_Sunday_after_Pentecost|-|-|1|- -2026-11-02|1|b|Commemoration of All Souls|Feria_II_after_XXIII_Sunday_after_Pentecost|-|-|3|- -2026-11-03|4|g|Feria|Feria_III_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2026-11-04|3|w|St. Charles Borromeo|Feria_IV_after_XXIII_Sunday_after_Pentecost|Sts. Vitalis and Agricola, Martyrs|-|1|sancti:11-04cc:4:r -2026-11-05|4|g|Feria|Feria_V_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2026-11-06|4|g|Feria|Feria_VI_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2026-11-07|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2026-11-08|2|g|V Sunday after Epiphany|-|-|Four Holy Crowned Martyrs|1|- -2026-11-09|2|w|Dedication of the Archbasilica of Our Holy Savior|Feria_II_after_V_Sunday_after_Epiphany|St. Theodore|-|1|sancti:11-09cc:4:r -2026-11-10|3|w|St. Andrew Avellino|Feria_III_after_V_Sunday_after_Epiphany|Sts. Tryphonis, Respicii, et Nymphae|-|1|sancti:11-10o:4:r -2026-11-11|3|w|St. Martin of Tours|Feria_IV_after_V_Sunday_after_Epiphany|St. Menna|-|1|sancti:11-11cc:4:r -2026-11-12|3|r|St. Martin I|Feria_V_after_V_Sunday_after_Epiphany|-|-|1|- -2026-11-13|4|g|Feria|Feria_VI_after_V_Sunday_after_Epiphany|St. Didacus|-|1|sancti:11-13:4:w -2026-11-14|3|w|St. Josaphat|Saturday_after_V_Sunday_after_Epiphany|-|-|1|- -2026-11-15|2|g|VI Sunday after Epiphany|-|-|St. Albert the Great|1|- -2026-11-16|3|w|St. Gertrude the Great|Feria_II_after_VI_Sunday_after_Epiphany|-|-|1|- -2026-11-17|3|w|St. Gregory the Wonderworker|Feria_III_after_VI_Sunday_after_Epiphany|-|-|1|- -2026-11-18|3|w|Dedication of the Basilicas of Sts. Peter & Paul|Feria_IV_after_VI_Sunday_after_Epiphany|-|-|1|- -2026-11-19|3|w|St. Elizabeth of Hungary|Feria_V_after_VI_Sunday_after_Epiphany|St. Pontian|-|1|sancti:11-19o:4:r -2026-11-20|3|w|St. Felix of Valois|Feria_VI_after_VI_Sunday_after_Epiphany|-|-|1|- -2026-11-21|3|w|Presentation of the Blessed Virgin Mary|Saturday_after_VI_Sunday_after_Epiphany|-|-|1|- -2026-11-22|2|g|XXIV Sunday after Pentecost|-|-|St. Cecilia|1|- -2026-11-23|3|r|St. Clement I|Feria_II_after_XXIV_Sunday_after_Pentecost|St. Felicity|-|1|sancti:11-23cc:4:r -2026-11-24|3|w|St. John of the Cross|Feria_III_after_XXIV_Sunday_after_Pentecost|St. Chrysogonus|-|1|sancti:11-24o:4:r -2026-11-25|3|r|St. Catherine of Alexandria|Feria_IV_after_XXIV_Sunday_after_Pentecost|-|-|1|- -2026-11-26|3|w|St. Sylvester|Feria_V_after_XXIV_Sunday_after_Pentecost|St. Peter of Alexandria|-|1|sancti:11-26t:4:r -2026-11-27|4|g|Feria|Feria_VI_after_XXIV_Sunday_after_Pentecost|-|-|1|- -2026-11-28|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIV_Sunday_after_Pentecost|-|-|1|- -2026-11-29|1|v|I Sunday of Advent|-|-|St. Saturninus|1|- -2026-11-30|2|r|St. Andrew|Feria_II_after_I_Sunday_of_Advent|-|-|1|- -2026-12-01|3|v|Feria III after I Sunday of Advent|-|-|-|1|- -2026-12-02|3|r|St. Vivian|Feria_IV_after_I_Sunday_of_Advent|Feria IV after I Sunday of Advent|-|1|tempora:Adv1-3:3:v -2026-12-03|3|w|St. Francis Xavier|Feria_V_after_I_Sunday_of_Advent|Feria V after I Sunday of Advent|-|1|tempora:Adv1-4:3:v -2026-12-04|3|w|St. Peter Chrysologus|Feria_VI_after_I_Sunday_of_Advent|Feria VI after I Sunday of Advent|-|1|tempora:Adv1-5:3:v -2026-12-05|3|v|Sabbato after I Sunday of Advent|-|St. Sabbas|-|1|sancti:12-05:4:w -2026-12-06|1|v|II Sunday of Advent|-|-|St. Nicholas|1|- -2026-12-07|3|w|St. Ambrose|Feria_II_after_II_Sunday_of_Advent|Feria II after II Sunday of Advent|-|1|tempora:Adv2-1:3:v -2026-12-08|1|w|Immaculate Conception of the Blessed Virgin Mary|Feria_III_after_II_Sunday_of_Advent|-|-|1|- -2026-12-09|3|v|Feria IV after II Sunday of Advent|-|-|-|1|- -2026-12-10|3|v|Feria V after II Sunday of Advent|-|St. Melchiades|-|1|sancti:12-10o:4:r -2026-12-11|3|w|St. Damasus I|Feria_VI_after_II_Sunday_of_Advent|Feria VI after II Sunday of Advent|-|1|tempora:Adv2-5:3:v -2026-12-12|3|v|Sabbato after II Sunday of Advent|-|-|-|1|- -2026-12-13|1|pv|III Sunday of Advent|-|-|St. Lucy|1|- -2026-12-14|3|pv|Feria II after III Sunday of Advent|-|-|-|1|- -2026-12-15|3|pv|Feria III after III Sunday of Advent|-|-|-|1|- -2026-12-16|2|v|Ember Wednesday of Advent|-|St. Eusebius|-|1|sancti:12-16:3:r -2026-12-17|2|pv|Feria V after III Sunday of Advent|-|-|-|1|- -2026-12-18|2|v|Ember Friday of Advent|-|-|-|1|- -2026-12-19|2|v|Ember Saturday of Advent|-|-|-|1|- -2026-12-20|1|v|IV Sunday of Advent|-|-|-|1|- -2026-12-21|2|r|St. Thomas|Feria_II_after_IV_Sunday_of_Advent|Feria II after IV Sunday of Advent|-|1|tempora:Adv4-1:2:v -2026-12-22|2|v|Feria III after IV Sunday of Advent|-|-|-|1|- -2026-12-23|2|v|Feria IV after IV Sunday of Advent|-|-|-|1|- -2026-12-24|1|v|Vigil of Christmas|-|-|-|1|- -2026-12-25|1|w|The Nativity of Our Lord|-|-|-|3|- -2026-12-26|2|r|St. Stephen|-|For Octave of the Nativity|-|1|sancti:12-26c:4:w -2026-12-27|2|w|Sunday in the Octave of Christmas|-|St. John the Evangelist|For Octave of the Nativity|1|sancti:12-27:2:w -2026-12-28|2|r|Holy Innocents|-|For Octave of the Nativity|-|1|sancti:12-28c:4:w -2026-12-29|2|w|Feria in the Octave of Christmas|-|St. Thomas Becket|-|1|sancti:12-29:4:r -2026-12-30|2|w|Feria in the Octave of Christmas|-|-|-|1|- -2026-12-31|2|w|Feria in the Octave of Christmas|-|St. Silvester|-|1|sancti:12-31:4:w -2027-01-01|1|w|Octave Day of Christmas|-|-|-|1|- -2027-01-02|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|- -2027-01-03|2|w|Holy Name of Jesus|-|-|-|1|- -2027-01-04|4|w|Feria|-|-|-|1|- -2027-01-05|4|w|Feria|-|St. Telesphorus Pope and Martyr|-|1|sancti:01-05:4:r -2027-01-06|1|w|Epiphany of the Lord|-|-|-|1|- -2027-01-07|4|w|Feria|-|-|-|1|- -2027-01-08|4|w|Feria|-|-|-|1|- -2027-01-09|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|- -2027-01-10|2|w|The Holy Family: Jesus, Mary & Joseph|-|-|-|1|- -2027-01-11|4|w|Feria|Feria_II_after_Epiphany|St. Hyginus Pope and Martyr|-|1|sancti:01-11cc:4:r -2027-01-12|4|w|Feria|Feria_III_after_Epiphany|-|-|1|- -2027-01-13|2|w|Commemoration of the Baptism of the Lord|Feria_IV_after_Epiphany|-|-|1|- -2027-01-14|3|w|St. Hilary|Feria_V_after_Epiphany|S. Felicis|-|1|sancti:01-14cc:4:r -2027-01-15|3|w|St. Paul, the First Hermit|Feria_VI_after_Epiphany|St. Maur, Abbot|-|1|sancti:01-15cc:4:w -2027-01-16|3|r|St. Marcellus I|Saturday_after_Epiphany|-|-|1|- -2027-01-17|2|g|II Sunday after Epiphany|-|-|St. Anthony|1|- -2027-01-18|4|g|Feria|Feria_II_after_II_Sunday_after_Epiphany|St. Prisca|-|1|sancti:01-18r:4:w -2027-01-19|4|g|Feria|Feria_III_after_II_Sunday_after_Epiphany|Sts. Marius, Martha, Audifax & Abachum;St. Canute, Martyr|-|1|sancti:01-19:4:r;sancti:01-19o:4:r -2027-01-20|3|r|Sts. Fabian & Sebastian|Feria_IV_after_II_Sunday_after_Epiphany|-|-|1|- -2027-01-21|3|r|St. Agnes|Feria_V_after_II_Sunday_after_Epiphany|-|-|1|- -2027-01-22|3|r|Sts. Vincent & Anastasius|Feria_VI_after_II_Sunday_after_Epiphany|-|-|1|- -2027-01-23|3|w|St. Raymond of Peñafort|Saturday_after_II_Sunday_after_Epiphany|St. Emerentiana|-|1|sancti:01-23o:4:r -2027-01-24|2|v|Septuagesima Sunday|-|-|St. Timothy|1|- -2027-01-25|3|w|Conversion of St. Paul|Feria_II_after_Septuagesima|St. Peter|-|1|sancti:01-25c:4:w -2027-01-26|3|r|St. Polycarp|Feria_III_after_Septuagesima|-|-|1|- -2027-01-27|3|w|St. John Chrysostom|Feria_IV_after_Septuagesima|-|-|1|- -2027-01-28|3|w|St. Peter Nolasco|Feria_V_after_Septuagesima|St. Agnes|-|1|sancti:01-28t:4:r -2027-01-29|3|w|St. Francis de Sales|Feria_VI_after_Septuagesima|-|-|1|- -2027-01-30|3|r|St. Martina|Saturday_after_Septuagesima|-|-|1|- -2027-01-31|2|v|Sexagesima Sunday|-|-|St. John Bosco|1|- -2027-02-01|3|r|St. Ignatius of Antioch|Feria_II_after_Sexagesima|-|-|1|- -2027-02-02|2|w|Purification of the Blessed Virgin Mary|Feria_III_after_Sexagesimæ|-|-|1|- -2027-02-03|4|v|Feria|Feria_IV_after_Sexagesimæ|St. Blaise|-|1|sancti:02-03:4:r -2027-02-04|3|w|St. Andrew Corsini|Feria_V_after_Sexagesimæ|-|-|1|- -2027-02-05|3|r|St. Agatha|Feria_VI_after_Sexagesimæ|-|-|1|- -2027-02-06|3|w|St. Titus|Saturday_after_Sexagesimæ|St. Dorothy|-|1|sancti:02-06o:4:r -2027-02-07|2|v|Quinquagesima Sunday|-|-|St. Romuald|1|- -2027-02-08|3|w|St. John of Matha|Feria_II_after_Quinquagesima|-|-|1|- -2027-02-09|3|w|St. Cyril of Alexandria|Feria_III_after_Quinquagesima|St. Appollonia|-|1|sancti:02-09o:4:r -2027-02-10|1|v|Ash Wednesday|-|-|St. Scholastica|1|- -2027-02-11|3|v|Feria V after Ash Wednesday|-|Our Lady of Lourdes|-|1|sancti:02-11:3:w -2027-02-12|3|v|Feria VI after Ash Wednesday|-|Seven Holy Servite Founders|-|1|sancti:02-12:3:w -2027-02-13|3|v|Saturday after Ash Wednesday|-|-|-|1|- -2027-02-14|1|v|I Sunday of Lent|-|-|St. Valentine|1|- -2027-02-15|3|v|Feria II after the I Sunday of Lent|-|Sts. Faustinus & Jovita|-|1|sancti:02-15:4:r -2027-02-16|3|v|Feria III after the I Sunday of Lent|-|-|-|1|- -2027-02-17|2|v|Ember Wednesday of Lent|-|-|-|1|- -2027-02-18|3|v|Feria V after the I Sunday of Lent|-|St. Simeon|-|1|sancti:02-18:4:r -2027-02-19|2|v|Ember Friday of Lent|-|-|-|1|- -2027-02-20|2|v|Ember Saturday of Lent|-|-|-|1|- -2027-02-21|1|v|II Sunday of Lent|-|-|-|1|- -2027-02-22|2|w|Chair of St. Peter|Feria_II_after_the_II_Sunday_of_Lent|St. Paul;Feria II after the II Sunday of Lent|-|1|sancti:02-22c:4:r;tempora:Quad2-1:3:v -2027-02-23|3|v|Feria III after the II Sunday of Lent|-|St. Peter Damien|-|1|sancti:02-23r:3:w -2027-02-24|2|r|St. Matthias|Feria_IV_after_the_II_Sunday_of_Lent|Feria IV after the II Sunday of Lent|-|1|tempora:Quad2-3:3:v -2027-02-25|3|v|Feria V after the II Sunday of Lent|-|-|-|1|- -2027-02-26|3|v|Feria VI after the II Sunday of Lent|-|-|-|1|- -2027-02-27|3|v|Saturday after the II Sunday of Lent|-|St. Gabriel of Our Lady of Sorrows|-|1|sancti:02-27:3:w -2027-02-28|1|v|III Sunday of Lent|-|-|-|1|- -2027-03-01|3|v|Feria II after the III Sunday of Lent|-|-|-|1|- -2027-03-02|3|v|Feria III after the III Sunday of Lent|-|-|-|1|- -2027-03-03|3|v|Feria IV after the III Sunday of Lent|-|-|-|1|- -2027-03-04|3|v|Feria V after the III Sunday of Lent|-|St. Casimir;St. Lucius|-|1|sancti:03-04:3:w;sancti:03-04cc:4:r -2027-03-05|3|v|Feria VI after the III Sunday of Lent|-|-|-|1|- -2027-03-06|3|v|Saturday after the III Sunday of Lent|-|Sts. Felicitas & Perpetua|-|1|sancti:03-06:3:r -2027-03-07|1|pv|IV Sunday of Lent|-|-|St. Thomas Aquinas|1|- -2027-03-08|3|v|Feria II after the IV Sunday of Lent|-|St. John of God|-|1|sancti:03-08:3:w -2027-03-09|3|v|Feria III after the IV Sunday of Lent|-|St. Frances Rome|-|1|sancti:03-09:3:w -2027-03-10|3|v|Feria IV after the IV Sunday of Lent|-|Forty Holy Martyrs of Sebaste|-|1|sancti:03-10:3:r -2027-03-11|3|v|Feria V after the IV Sunday of Lent|-|-|-|1|- -2027-03-12|3|v|Feria VI after the IV Sunday of Lent|-|St. Gregory the Great|-|1|sancti:03-12:3:w -2027-03-13|3|v|Saturday after the IV Sunday of Lent|-|-|-|1|- -2027-03-14|1|v|Passion Sunday|-|-|-|1|- -2027-03-15|3|v|Feria II of Passion Week|-|-|-|1|- -2027-03-16|3|v|Feria III of Passion Week|-|-|-|1|- -2027-03-17|3|v|Feria IV of Passion Week|-|St. Patrick|-|1|sancti:03-17:3:w -2027-03-18|3|v|Feria V of Passion Week|-|St. Cyril of Jerusalem|-|1|sancti:03-18:3:w -2027-03-19|3|v|Feria VI of Passion Week|-|For Our Lady of the Seven Sorrows|St. Joseph, Spouse of the Bl. Virgin Mary|1|tempora:Quad5-5Feriac:4:w -2027-03-20|3|v|Saturday of Passion Week|-|-|-|1|- -2027-03-21|1|rv|Palm Sunday|-|-|St. Benedict|1|- -2027-03-22|1|v|Feria II of Holy Week|-|-|-|1|- -2027-03-23|1|v|Feria III of Holy Week|-|-|-|1|- -2027-03-24|1|v|Feria IV of Holy Week|-|-|St. Gabriel the Archangel|1|- -2027-03-25|1|w|Holy Thursday|-|-|Annunciation of the Blessed Virgin Mary|1|- -2027-03-26|1|bv|Good Friday|-|-|-|1|- -2027-03-27|1|vw|Holy Saturday|-|-|St. John Damascene|1|- -2027-03-28|1|w|Easter Sunday|-|-|St. John of Capistrano|1|- -2027-03-29|1|w|Monday in the Octave of Easter|-|-|-|1|- -2027-03-30|1|w|Tuesday in the Octave of Easter|-|-|-|1|- -2027-03-31|1|w|Wednesday in the Octave of Easter|-|-|-|1|- -2027-04-01|1|w|Thursday in the Octave of Easter|-|-|-|1|- -2027-04-02|1|w|Friday in the Octave of Easter|-|-|St. Francis of Paola|1|- -2027-04-03|1|w|Saturday in the Octave of Easter|-|-|-|1|- -2027-04-04|1|w|Low Sunday|-|-|St. Isidore of Seville|1|- -2027-04-05|1|w|Annunciation of the Blessed Virgin Mary|Monday_after_I_Sunday_after_Easter|-|St. Vincent Ferrer|1|- -2027-04-06|4|w|Feria|Tuesday_after_I_Sunday_after_Easter|-|-|1|- -2027-04-07|4|w|Feria|Wednesday_after_I_Sunday_after_Easter|-|-|1|- -2027-04-08|4|w|Feria|Thursday_after_I_Sunday_after_Easter|-|-|1|- -2027-04-09|4|w|Feria|Friday_after_I_Sunday_after_Easter|-|-|1|- -2027-04-10|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_I_Sunday_after_Easter|-|-|1|- -2027-04-11|2|w|II Sunday after Easter|-|-|St. Leo the Great|1|- -2027-04-12|4|w|Feria|Monday_after_II_Sunday_after_Easter|-|-|1|- -2027-04-13|3|r|St. Hermenegild|Tuesday_after_II_Sunday_after_Easter|-|-|1|- -2027-04-14|3|r|St. Justin|Wednesday_after_II_Sunday_after_Easter|Sts. Tiburtius, Valerian et Maximus, Martyrs|-|1|sancti:04-14t:4:r -2027-04-15|4|w|Feria|Thursday_after_II_Sunday_after_Easter|-|-|1|- -2027-04-16|4|w|Feria|Friday_after_II_Sunday_after_Easter|-|-|1|- -2027-04-17|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_II_Sunday_after_Easter|St. Anicetus|-|1|sancti:04-17:4:r -2027-04-18|2|w|III Sunday after Easter|-|-|-|1|- -2027-04-19|4|w|Feria|Monday_after_III_Sunday_after_Easter|-|-|1|- -2027-04-20|4|w|Feria|Tuesday_after_III_Sunday_after_Easter|-|-|1|- -2027-04-21|3|w|St. Anselm|Wednesday_after_III_Sunday_after_Easter|-|-|1|- -2027-04-22|3|r|Sts. Soter & Caius|Thursday_after_III_Sunday_after_Easter|-|-|1|- -2027-04-23|4|w|Feria|Friday_after_III_Sunday_after_Easter|St. George|-|1|sancti:04-23:4:r -2027-04-24|3|r|St. Fidelis of Sigmaringen|Saturday_after_III_Sunday_after_Easter|-|-|1|- -2027-04-25|2|w|IV Sunday after Easter|-|St. Mark|Pro rogationibus|1|sancti:04-25:2:r -2027-04-26|3|r|Sts. Cletus & Marcellinus|Monday_after_IV_Sunday_after_Easter|-|-|1|- -2027-04-27|3|w|St. Peter Canisius|Tuesday_after_IV_Sunday_after_Easter|-|-|1|- -2027-04-28|3|w|St. Paul of the Cross|Wednesday_after_IV_Sunday_after_Easter|-|-|1|- -2027-04-29|3|r|St. Peter of Verona|Thursday_after_IV_Sunday_after_Easter|-|-|1|- -2027-04-30|3|w|St. Catherine of Siena|Friday_after_IV_Sunday_after_Easter|-|-|1|- -2027-05-01|1|w|St. Joseph the Workman|Saturday_after_IV_Sunday_after_Easter|-|-|1|- -2027-05-02|2|w|V Sunday after Easter|-|-|St. Athanasius|1|- -2027-05-03|4|w|Feria|The_Minor_Litanies_–_Rogations|Sts. Alexander & Companions|-|1|sancti:05-03r:4:r -2027-05-04|3|w|St. Monica|The_Minor_Litanies_–_Rogations|-|-|1|- -2027-05-05|2|w|Vigil of the Ascension|-|St. Pius V|-|1|sancti:05-05:3:w -2027-05-06|1|w|Ascension of the Lord|-|-|-|1|- -2027-05-07|3|r|St. Stanislaus|Feria_VI_after_the_Ascension|-|-|1|- -2027-05-08|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_the_Ascension|-|-|1|- -2027-05-09|2|w|Sunday after the Ascension|-|-|St. Gregory of Nazianzen|1|- -2027-05-10|3|w|St. Antoninus|Feria_II_after_the_Ascension|St. Gordiano and Epimacho|-|1|sancti:05-10o:4:r -2027-05-11|2|r|Sts. Philip & James|Feria_III_after_the_Ascension|-|-|1|- -2027-05-12|3|r|Sts. Nereus, Achilleus, Domitilla, & Pancras|Feria_IV_after_the_Ascension|-|-|1|- -2027-05-13|3|w|St. Robert Bellarmine|Feria_V_after_the_Ascension|-|-|1|- -2027-05-14|4|w|Feria|Feria_VI_after_the_Ascension|St. Boniface|-|1|sancti:05-14:4:r -2027-05-15|1|r|Saturday after the Ascension|-|-|St. John Baptist de la Salle|1|- -2027-05-16|1|r|Pentecost Sunday|-|-|St. Ubaldus|1|- -2027-05-17|1|r|Monday after Pentecost|-|-|St. Paschal Baylon|1|- -2027-05-18|1|r|Tuesday after Pentecost|-|-|St. Venantius|1|- -2027-05-19|1|r|Ember Wednesday of Pentecost|-|-|St. Peter Celestine;St. Pudentiana Virginis|1|- -2027-05-20|1|r|Thursday after Pentecost|-|-|St. Bernardine of Siena|1|- -2027-05-21|1|r|Ember Friday of Pentecost|-|-|-|1|- -2027-05-22|1|r|Ember Saturday of Pentecost|-|-|-|1|- -2027-05-23|1|w|Trinity Sunday|-|-|-|1|- -2027-05-24|4|g|Feria|Feria_II_after_I_Sunday_after_Pentecost|-|-|1|- -2027-05-25|3|w|St. Gregory VII|Feria_III_after_I_Sunday_after_Pentecost|St. Urban, Pope and Martyr|-|1|sancti:05-25o:4:r -2027-05-26|3|w|St. Philip Neri|Feria_IV_after_I_Sunday_after_Pentecost|S. Eleutherius|-|1|sancti:05-26o:4:r -2027-05-27|1|w|Corpus Christi|-|-|St. Bede the Venerable;St. John I|1|- -2027-05-28|3|w|St. Augustine of Canterbury|Feria_V_after_I_Sunday_after_Pentecost|-|-|1|- -2027-05-29|3|w|St. Mary Magdalene de Pazzi|Saturday_after_I_Sunday_after_Pentecost|-|-|1|- -2027-05-30|2|g|II Sunday after Pentecost|-|-|St. Felix I|1|- -2027-05-31|2|w|Queenship of the Blessed Virgin Mary|Feria_II_after_II_Sunday_after_Pentecost|St. Petronilla|-|1|sancti:05-31c:4:w -2027-06-01|3|w|St. Angela Merici|Feria_III_after_II_Sunday_after_Pentecost|-|-|1|- -2027-06-02|4|g|Feria|Feria_IV_after_II_Sunday_after_Pentecost|Sts. Marcellinus, Peter, & Erasmus|-|1|sancti:06-02:4:r -2027-06-03|4|g|Feria|Feria_V_after_II_Sunday_after_Pentecost|-|-|1|- -2027-06-04|1|w|Sacred Heart of Jesus|-|-|St. Francis Caracciolo|1|- -2027-06-05|3|r|St. Boniface|Saturday_after_II_Sunday_after_Pentecost|-|-|1|- -2027-06-06|2|g|III Sunday after Pentecost|-|-|St. Norbert|1|- -2027-06-07|4|g|Feria|Feria_II_after_III_Sunday_after_Pentecost|-|-|1|- -2027-06-08|4|g|Feria|Feria_III_after_III_Sunday_after_Pentecost|-|-|1|- -2027-06-09|4|g|Feria|Feria_IV_after_III_Sunday_after_Pentecost|Sts. Primus & Felicianus|-|1|sancti:06-09:4:r -2027-06-10|3|w|St. Margaret of Scotland|Feria_V_after_III_Sunday_after_Pentecost|-|-|1|- -2027-06-11|3|r|St. Barnabas|Feria_VI_after_III_Sunday_after_Pentecost|-|-|1|- -2027-06-12|3|r|St. John of San Fecundo|Saturday_after_III_Sunday_after_Pentecost|St. Basilidus|-|1|sancti:06-12o:4:r -2027-06-13|2|g|IV Sunday after Pentecost|-|-|St. Anthony of Padua|1|- -2027-06-14|3|w|St. Basil the Great|Feria_II_after_IV_Sunday_after_Pentecost|-|-|1|- -2027-06-15|4|g|Feria|Feria_III_after_IV_Sunday_after_Pentecost|St. Vitus|-|1|sancti:06-15:4:w -2027-06-16|4|g|Feria|Feria_IV_after_IV_Sunday_after_Pentecost|-|-|1|- -2027-06-17|3|w|St. Gregory Barbarigo|Feria_V_after_IV_Sunday_after_Pentecost|-|-|1|- -2027-06-18|3|r|St. Ephrem of Syria|Feria_VI_after_IV_Sunday_after_Pentecost|Ss. Marcus and Marcellianus|-|1|sancti:06-18t:4:r -2027-06-19|3|r|St. Julia of Falconieri|Saturday_after_IV_Sunday_after_Pentecost|Sts. Gervasius and Protasius|-|1|sancti:06-19o:4:r -2027-06-20|2|g|V Sunday after Pentecost|-|-|St. Silverius|1|- -2027-06-21|3|w|St. Aloysius Gongzaga|Feria_II_after_V_Sunday_after_Pentecost|-|-|1|- -2027-06-22|3|w|St. Paulinus of Nola|Feria_III_after_V_Sunday_after_Pentecost|-|-|1|- -2027-06-23|2|v|Vigil of the Nativity of St. John the Baptist|Feria_IV_after_V_Sunday_after_Pentecost|-|-|1|- -2027-06-24|1|w|Nativity of St. John the Baptist|Feria_V_after_V_Sunday_after_Pentecost|-|-|1|- -2027-06-25|3|w|St. William|Feria_VI_after_V_Sunday_after_Pentecost|-|-|1|- -2027-06-26|3|r|Sts. John & Paul|Saturday_after_V_Sunday_after_Pentecost|-|-|1|- -2027-06-27|2|g|VI Sunday after Pentecost|-|-|-|1|- -2027-06-28|2|v|Vigil of Sts. Peter & Paul|Feria_II_after_VI_Sunday_after_Pentecost|-|-|1|- -2027-06-29|1|r|Sts. Peter & Paul|Feria_III_after_VI_Sunday_after_Pentecost|-|-|1|- -2027-06-30|3|r|In Commemoratione Sancti Pauli Apostoli|Feria_IV_after_VI_Sunday_after_Pentecost|-|-|1|- -2027-07-01|1|r|The Precious Blood of Our Lord Jesus Christ|Feria_V_after_VI_Sunday_after_Pentecost|-|-|1|- -2027-07-02|2|w|Visitation of the Blessed Virgin Mary|Feria_VI_after_VI_Sunday_after_Pentecost|SS. Processus and Martinian|-|1|sancti:07-02cc:4:r -2027-07-03|3|r|St. Irenaeus|Saturday_after_VI_Sunday_after_Pentecost|-|-|1|- -2027-07-04|2|g|VII Sunday after Pentecost|-|-|-|1|- -2027-07-05|3|w|St. Anthony Mary Zaccariah|Feria_II_after_VII_Sunday_after_Pentecost|-|-|1|- -2027-07-06|4|g|Feria|Feria_III_after_VII_Sunday_after_Pentecost|-|-|1|- -2027-07-07|3|w|Sts. Cyril & Methodius|Feria_IV_after_VII_Sunday_after_Pentecost|-|-|1|- -2027-07-08|3|w|St. Elizabeth of Portugal|Feria_V_after_VII_Sunday_after_Pentecost|-|-|1|- -2027-07-09|4|g|Feria|Feria_VI_after_VII_Sunday_after_Pentecost|-|-|1|- -2027-07-10|3|r|Seven Holy Brothers and Sts. Rufina & Secunda|Saturday_after_VII_Sunday_after_Pentecost|-|-|1|- -2027-07-11|2|g|VIII Sunday after Pentecost|-|-|St. Pius I|1|- -2027-07-12|3|r|St. John Gualbert|Feria_II_after_VIII_Sunday_after_Pentecost|Ss. Naboris et Felicis|-|1|sancti:07-12o:4:r -2027-07-13|4|g|Feria|Feria_III_after_VIII_Sunday_after_Pentecost|-|-|1|- -2027-07-14|3|w|St. Bonaventure|Feria_IV_after_VIII_Sunday_after_Pentecost|-|-|1|- -2027-07-15|3|w|St. Henry the Emperor|Feria_V_after_VIII_Sunday_after_Pentecost|-|-|1|- -2027-07-16|4|g|Feria|Feria_VI_after_VIII_Sunday_after_Pentecost|Our Lady of Mt. Carmel|-|1|sancti:07-16:4:w -2027-07-17|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_VIII_Sunday_after_Pentecost|St. Alexis|-|1|sancti:07-17:4:w -2027-07-18|2|g|IX Sunday after Pentecost|-|-|Camillus de Lellis;Ss. Symphorosa and sons|1|- -2027-07-19|3|w|St. Vincent de Paul|Feria_II_after_IX_Sunday_after_Pentecost|-|-|1|- -2027-07-20|3|r|St. Jerome Emiliani|Feria_III_after_IX_Sunday_after_Pentecost|St. Margaret|-|1|sancti:07-20o:4:w -2027-07-21|3|w|St. Laurence of Brindisi|Feria_IV_after_IX_Sunday_after_Pentecost|St. Praxedis Virginis|-|1|sancti:07-21:4:w -2027-07-22|3|w|St. Mary Magdalene|Feria_V_after_IX_Sunday_after_Pentecost|-|-|1|- -2027-07-23|3|w|St. Apollinaris|Feria_VI_after_IX_Sunday_after_Pentecost|S. Liborii|-|1|sancti:07-23cc:4:r -2027-07-24|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IX_Sunday_after_Pentecost|St. Christina|-|1|sancti:07-24r:4:r -2027-07-25|2|g|X Sunday after Pentecost|-|St. James the Greater|St. Christopher|1|sancti:07-25:2:r -2027-07-26|2|w|St. Anne, Mother of the Blessed Virgin|Feria_II_after_X_Sunday_after_Pentecost|-|-|1|- -2027-07-27|4|g|Feria|Feria_III_after_X_Sunday_after_Pentecost|St. Pantaleon|-|1|sancti:07-27:4:r -2027-07-28|3|r|Sts. Nazarius & Celsus, St. Victor I & St. Innocent I|Feria_IV_after_X_Sunday_after_Pentecost|-|-|1|- -2027-07-29|3|r|St. Martha|Feria_V_after_X_Sunday_after_Pentecost|Ss. Felicis, Simplicii, Faustini et Beatricis|-|1|sancti:07-29cc:4:r -2027-07-30|4|g|Feria|Feria_VI_after_X_Sunday_after_Pentecost|Sts. Abdon & Sennen|-|1|sancti:07-30:4:r -2027-07-31|3|w|St. Ignatius Loyola|Saturday_after_X_Sunday_after_Pentecost|-|-|1|- -2027-08-01|2|g|XI Sunday after Pentecost|-|-|Holy Machabees|1|- -2027-08-02|3|r|St. Alphonsus Liguori|Feria_II_after_XI_Sunday_after_Pentecost|St. Stephen I, Pope and Martyr|-|1|sancti:08-02o:4:r -2027-08-03|4|g|Feria|Feria_III_after_XI_Sunday_after_Pentecost|-|-|1|- -2027-08-04|3|w|St. Dominic|Feria_IV_after_XI_Sunday_after_Pentecost|-|-|1|- -2027-08-05|3|w|Dedication of the Basilica of St. Mary Major|Feria_V_after_XI_Sunday_after_Pentecost|-|-|1|- -2027-08-06|2|w|Transfiguration of Our Lord|Feria_VI_after_XI_Sunday_after_Pentecost|Pope Sixtus II, Felicissimus and Agapitus, Martyrs|-|1|sancti:08-06cc:4:r -2027-08-07|3|w|St. Cajetan|Saturday_after_XI_Sunday_after_Pentecost|St. Donatus|-|1|sancti:08-07o:4:r -2027-08-08|2|g|XII Sunday after Pentecost|-|-|St. John Mary Vianney;Ss. Cyriacus, Largus and Smaragdus, Martyrs|1|- -2027-08-09|3|r|Vigil of St. Lawrence|Feria_II_after_XII_Sunday_after_Pentecost|St. Romanus|-|1|sancti:08-09cc:4:r -2027-08-10|2|r|St. Lawrence|Feria_III_after_XII_Sunday_after_Pentecost|-|-|1|- -2027-08-11|4|g|Feria|Feria_IV_after_XII_Sunday_after_Pentecost|Sts. Tiburtius & Susanna|-|1|sancti:08-11:4:r -2027-08-12|3|w|St. Clare|Feria_V_after_XII_Sunday_after_Pentecost|-|-|1|- -2027-08-13|4|g|Feria|Feria_VI_after_XII_Sunday_after_Pentecost|Sts. Hippolytus & Cassian|-|1|sancti:08-13:4:r -2027-08-14|2|w|Vigil of the Assumption|Saturday_after_XII_Sunday_after_Pentecost|St. Eusebius|-|1|sancti:08-14cc:4:r -2027-08-15|1|w|Assumption of the Blessed Virgin Mary|XIII_Sunday_after_Pentecost|-|-|1|- -2027-08-16|2|w|St. Joachim, Father of the Blessed Virgin|Feria_II_after_XIII_Sunday_after_Pentecost|-|-|1|- -2027-08-17|3|w|St. Hyacinth|Feria_III_after_XIII_Sunday_after_Pentecost|-|-|1|- -2027-08-18|4|g|Feria|Feria_IV_after_XIII_Sunday_after_Pentecost|St. Agapitus|-|1|sancti:08-18r:4:w -2027-08-19|3|w|St. John Eudes|Feria_V_after_XIII_Sunday_after_Pentecost|-|-|1|- -2027-08-20|3|w|St. Bernard of Clairvaux|Feria_VI_after_XIII_Sunday_after_Pentecost|-|-|1|- -2027-08-21|3|w|St. Jane Frances de Chantal|Saturday_after_XIII_Sunday_after_Pentecost|-|-|1|- -2027-08-22|2|g|XIV Sunday after Pentecost|-|Immaculate Heart of Mary|Sts. Timothy, Hippolytus and Symphorianus, Martyrs|1|sancti:08-22:2:w -2027-08-23|3|w|St. Philip Benizi|Feria_II_after_XIV_Sunday_after_Pentecost|-|-|1|- -2027-08-24|2|r|St. Bartholomew|Feria_III_after_XIV_Sunday_after_Pentecost|-|-|1|- -2027-08-25|3|w|St. Louis IX|Feria_IV_after_XIV_Sunday_after_Pentecost|-|-|1|- -2027-08-26|4|g|Feria|Feria_V_after_XIV_Sunday_after_Pentecost|St. Zephyrinus|-|1|sancti:08-26:4:r -2027-08-27|3|w|St. Joseph Calasance|Feria_VI_after_XIV_Sunday_after_Pentecost|-|-|1|- -2027-08-28|3|r|St. Augustine|Saturday_after_XIV_Sunday_after_Pentecost|St. Hermes|-|1|sancti:08-28cc:4:r -2027-08-29|2|g|XV Sunday after Pentecost|-|-|Beheading of St. John the Baptist;St. Sabina|1|- -2027-08-30|3|r|St. Rose of Lima|Feria_II_after_XV_Sunday_after_Pentecost|Sts. Felix and Adauctus|-|1|sancti:08-30o:4:r -2027-08-31|3|w|St. Raymond Nonnatus|Feria_III_after_XV_Sunday_after_Pentecost|-|-|1|- -2027-09-01|4|g|Feria|Feria_IV_after_XV_Sunday_after_Pentecost|St. Giles;Twelve Holy Brothers, Martyrs|-|1|sancti:09-01:4:w;sancti:09-01cc:4:r -2027-09-02|3|w|St. Stephen of Hungary|Feria_V_after_XV_Sunday_after_Pentecost|-|-|1|- -2027-09-03|3|w|St. Pius X|Feria_VI_after_XV_Sunday_after_Pentecost|-|-|1|- -2027-09-04|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XV_Sunday_after_Pentecost|-|-|1|- -2027-09-05|2|g|XVI Sunday after Pentecost|-|-|St. Lawrence Justinian|1|- -2027-09-06|4|g|Feria|Feria_II_after_XVI_Sunday_after_Pentecost|-|-|1|- -2027-09-07|4|g|Feria|Feria_III_after_XVI_Sunday_after_Pentecost|-|-|1|- -2027-09-08|2|w|Nativity of the Blessed Virgin Mary|Feria_IV_after_XVI_Sunday_after_Pentecost|S. Hadriani|-|1|sancti:09-08cc:4:r -2027-09-09|4|g|Feria|Feria_V_after_XVI_Sunday_after_Pentecost|St. Gorgonius|-|1|sancti:09-09:4:r -2027-09-10|3|w|St. Nicholas of Tolentino|Feria_VI_after_XVI_Sunday_after_Pentecost|-|-|1|- -2027-09-11|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XVI_Sunday_after_Pentecost|Sts. Protus & Hyacinth|-|1|sancti:09-11:4:r -2027-09-12|2|g|XVII Sunday after Pentecost|-|-|Most Holy Name of Mary|1|- -2027-09-13|4|g|Feria|Feria_II_after_XVII_Sunday_after_Pentecost|-|-|1|- -2027-09-14|2|r|Exaltation of the Holy Cross|Feria_III_after_XVII_Sunday_after_Pentecost|-|-|1|- -2027-09-15|2|w|Seven Sorrows of the Blessed Virgin Mary|Feria_IV_after_XVII_Sunday_after_Pentecost|S. Nicomedes|-|1|sancti:09-15cc:4:r -2027-09-16|3|r|Sts. Cornelius & Cyprian|Feria_V_after_XVII_Sunday_after_Pentecost|Sts. Euphemia, Lucy and Geminianus|-|1|sancti:09-16cc:4:r -2027-09-17|4|g|Feria|Feria_VI_after_XVII_Sunday_after_Pentecost|Stigmata of St. Francis|-|1|sancti:09-17:4:w -2027-09-18|3|w|St. Joseph of Cupertino|Saturday_after_XVII_Sunday_after_Pentecost|-|-|1|- -2027-09-19|2|g|XVIII Sunday after Pentecost|-|-|St. Januarius & Companions|1|- -2027-09-20|4|g|Feria|Feria_II_after_XVIII_Sunday_after_Pentecost|Sts. Eustace & Companions|-|1|sancti:09-20:4:r -2027-09-21|2|r|St. Matthew|Feria_III_after_XVIII_Sunday_after_Pentecost|-|-|1|- -2027-09-22|2|v|Ember Wednesday of September|-|St. Thomas of Villanova|St. Maurice and Companions, Martyrs|1|sancti:09-22:3:w -2027-09-23|3|r|St. Linus|Feria_V_after_XVIII_Sunday_after_Pentecost|St. Thecla|-|1|sancti:09-23cc:4:r -2027-09-24|2|v|Ember Friday of September|-|Our Lady of Ransom|-|1|sancti:09-24:4:w -2027-09-25|2|v|Ember Saturday of September|-|-|-|1|- -2027-09-26|2|g|XIX Sunday after Pentecost|-|-|Sts. Cyprian & Justina|1|- -2027-09-27|3|r|Sts. Cosmas & Damian|Feria_II_after_XIX_Sunday_after_Pentecost|-|-|1|- -2027-09-28|3|r|St. Wenceslaus|Feria_III_after_XIX_Sunday_after_Pentecost|-|-|1|- -2027-09-29|1|w|Dedication of St. Michael the Archangel|Feria_IV_after_XIX_Sunday_after_Pentecost|-|-|1|- -2027-09-30|3|w|St. Jerome|Feria_V_after_XIX_Sunday_after_Pentecost|-|-|1|- -2027-10-01|4|g|Feria|Feria_VI_after_XIX_Sunday_after_Pentecost|St. Remigius|-|1|sancti:10-01:4:w -2027-10-02|3|w|Holy Guardian Angels|Saturday_after_XIX_Sunday_after_Pentecost|-|-|1|- -2027-10-03|2|g|XX Sunday after Pentecost|-|-|St. Theresa of the Infant Jesus|1|- -2027-10-04|3|w|St. Francis of Assisi|Feria_II_after_XX_Sunday_after_Pentecost|-|-|1|- -2027-10-05|4|g|Feria|Feria_III_after_XX_Sunday_after_Pentecost|St. Placid & Companions|-|1|sancti:10-05:4:r -2027-10-06|3|w|St. Bruno|Feria_IV_after_XX_Sunday_after_Pentecost|-|-|1|- -2027-10-07|2|w|Our Lady of the Rosary|Feria_V_after_XX_Sunday_after_Pentecost|St. Mark I|-|1|sancti:10-07t:4:r -2027-10-08|3|w|St. Bridget of Sweden|Feria_VI_after_XX_Sunday_after_Pentecost|Ss. Sergio, Baccho, Marcello and Apulejo Martyrs|-|1|sancti:10-08c:4:r -2027-10-09|3|w|St. John Leonardi|Saturday_after_XX_Sunday_after_Pentecost|St. Dionysius and companions|-|1|sancti:10-09t:4:r -2027-10-10|2|g|XXI Sunday after Pentecost|-|-|St. Francis Borgia|1|- -2027-10-11|2|w|Maternity of the Blessed Virgin Mary|Feria_II_after_XXI_Sunday_after_Pentecost|-|-|1|- -2027-10-12|4|g|Feria|Feria_III_after_XXI_Sunday_after_Pentecost|-|-|1|- -2027-10-13|3|w|St. Edward|Feria_IV_after_XXI_Sunday_after_Pentecost|-|-|1|- -2027-10-14|3|r|St. Callistus I|Feria_V_after_XXI_Sunday_after_Pentecost|-|-|1|- -2027-10-15|3|w|St. Teresa of Avila|Feria_VI_after_XXI_Sunday_after_Pentecost|-|-|1|- -2027-10-16|3|w|St. Hedwig|Saturday_after_XXI_Sunday_after_Pentecost|-|-|1|- -2027-10-17|2|g|XXII Sunday after Pentecost|-|-|St. Margaret Mary Alacoque|1|- -2027-10-18|2|r|St. Luke the Evangelist|Feria_II_after_XXII_Sunday_after_Pentecost|-|-|1|- -2027-10-19|3|w|St. Peter of Alcantara|Feria_III_after_XXII_Sunday_after_Pentecost|-|-|1|- -2027-10-20|3|w|St. John Cantius|Feria_IV_after_XXII_Sunday_after_Pentecost|-|-|1|- -2027-10-21|4|g|Feria|Feria_V_after_XXII_Sunday_after_Pentecost|St. Hilarion;St. Ursula and Companions|-|1|sancti:10-21:4:w;sancti:10-21cc:4:r -2027-10-22|4|g|Feria|Feria_VI_after_XXII_Sunday_after_Pentecost|-|-|1|- -2027-10-23|3|w|St. Anthony Mary Claret|Saturday_after_XXII_Sunday_after_Pentecost|-|-|1|- -2027-10-24|2|g|XXIII Sunday after Pentecost|-|-|St. Raphael the Archangel|1|- -2027-10-25|4|g|Feria|Feria_II_after_XXIII_Sunday_after_Pentecost|Sts. Chrysanthus & Daria|-|1|sancti:10-25:4:r -2027-10-26|4|g|Feria|Feria_III_after_XXIII_Sunday_after_Pentecost|St. Evaristus|-|1|sancti:10-26:4:r -2027-10-27|4|g|Feria|Feria_IV_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2027-10-28|2|r|Sts. Simon & Jude|Feria_V_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2027-10-29|4|g|Feria|Feria_VI_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2027-10-30|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIII_Sunday_after_Pentecost|-|-|1|- -2027-10-31|1|w|Christ the King|IV_Sunday_after_Epiphany|-|-|1|- -2027-11-01|1|w|All Saints|Feria_II_after_IV_Sunday_after_Epiphany|-|-|1|- -2027-11-02|1|b|Commemoration of All Souls|Feria_III_after_IV_Sunday_after_Epiphany|-|-|3|- -2027-11-03|4|g|Feria|Feria_IV_after_IV_Sunday_after_Epiphany|-|-|1|- -2027-11-04|3|w|St. Charles Borromeo|Feria_V_after_IV_Sunday_after_Epiphany|Sts. Vitalis and Agricola, Martyrs|-|1|sancti:11-04cc:4:r -2027-11-05|4|g|Feria|Feria_VI_after_IV_Sunday_after_Epiphany|-|-|1|- -2027-11-06|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IV_Sunday_after_Epiphany|-|-|1|- -2027-11-07|2|g|V Sunday after Epiphany|-|-|-|1|- -2027-11-08|4|g|Feria|Feria_II_after_V_Sunday_after_Epiphany|Four Holy Crowned Martyrs|-|1|sancti:11-08r:4:r -2027-11-09|2|w|Dedication of the Archbasilica of Our Holy Savior|Feria_III_after_V_Sunday_after_Epiphany|St. Theodore|-|1|sancti:11-09cc:4:r -2027-11-10|3|w|St. Andrew Avellino|Feria_IV_after_V_Sunday_after_Epiphany|Sts. Tryphonis, Respicii, et Nymphae|-|1|sancti:11-10o:4:r -2027-11-11|3|w|St. Martin of Tours|Feria_V_after_V_Sunday_after_Epiphany|St. Menna|-|1|sancti:11-11cc:4:r -2027-11-12|3|r|St. Martin I|Feria_VI_after_V_Sunday_after_Epiphany|-|-|1|- -2027-11-13|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_V_Sunday_after_Epiphany|St. Didacus|-|1|sancti:11-13:4:w -2027-11-14|2|g|VI Sunday after Epiphany|-|-|St. Josaphat|1|- -2027-11-15|3|w|St. Albert the Great|Feria_II_after_VI_Sunday_after_Epiphany|-|-|1|- -2027-11-16|3|w|St. Gertrude the Great|Feria_III_after_VI_Sunday_after_Epiphany|-|-|1|- -2027-11-17|3|w|St. Gregory the Wonderworker|Feria_IV_after_VI_Sunday_after_Epiphany|-|-|1|- -2027-11-18|3|w|Dedication of the Basilicas of Sts. Peter & Paul|Feria_V_after_VI_Sunday_after_Epiphany|-|-|1|- -2027-11-19|3|w|St. Elizabeth of Hungary|Feria_VI_after_VI_Sunday_after_Epiphany|St. Pontian|-|1|sancti:11-19o:4:r -2027-11-20|3|w|St. Felix of Valois|Saturday_after_VI_Sunday_after_Epiphany|-|-|1|- -2027-11-21|2|g|XXIV Sunday after Pentecost|-|-|Presentation of the Blessed Virgin Mary|1|- -2027-11-22|3|r|St. Cecilia|Feria_II_after_XXIV_Sunday_after_Pentecost|-|-|1|- -2027-11-23|3|r|St. Clement I|Feria_III_after_XXIV_Sunday_after_Pentecost|St. Felicity|-|1|sancti:11-23cc:4:r -2027-11-24|3|w|St. John of the Cross|Feria_IV_after_XXIV_Sunday_after_Pentecost|St. Chrysogonus|-|1|sancti:11-24o:4:r -2027-11-25|3|r|St. Catherine of Alexandria|Feria_V_after_XXIV_Sunday_after_Pentecost|-|-|1|- -2027-11-26|3|w|St. Sylvester|Feria_VI_after_XXIV_Sunday_after_Pentecost|St. Peter of Alexandria|-|1|sancti:11-26t:4:r -2027-11-27|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIV_Sunday_after_Pentecost|-|-|1|- -2027-11-28|1|v|I Sunday of Advent|-|-|-|1|- -2027-11-29|3|v|Feria II after I Sunday of Advent|-|St. Saturninus|-|1|sancti:11-29r:4:r -2027-11-30|2|r|St. Andrew|Feria_III_after_I_Sunday_of_Advent|-|-|1|- -2027-12-01|3|v|Feria IV after I Sunday of Advent|-|-|-|1|- -2027-12-02|3|r|St. Vivian|Feria_V_after_I_Sunday_of_Advent|Feria V after I Sunday of Advent|-|1|tempora:Adv1-4:3:v -2027-12-03|3|w|St. Francis Xavier|Feria_VI_after_I_Sunday_of_Advent|Feria VI after I Sunday of Advent|-|1|tempora:Adv1-5:3:v -2027-12-04|3|w|St. Peter Chrysologus|Sabbato_after_I_Sunday_of_Advent|Sabbato after I Sunday of Advent|-|1|tempora:Adv1-6:3:v -2027-12-05|1|v|II Sunday of Advent|-|-|St. Sabbas|1|- -2027-12-06|3|w|St. Nicholas|Feria_II_after_II_Sunday_of_Advent|Feria II after II Sunday of Advent|-|1|tempora:Adv2-1:3:v -2027-12-07|3|w|St. Ambrose|Feria_III_after_II_Sunday_of_Advent|Feria III after II Sunday of Advent|-|1|tempora:Adv2-2:3:v -2027-12-08|1|w|Immaculate Conception of the Blessed Virgin Mary|Feria_IV_after_II_Sunday_of_Advent|-|-|1|- -2027-12-09|3|v|Feria V after II Sunday of Advent|-|-|-|1|- -2027-12-10|3|v|Feria VI after II Sunday of Advent|-|St. Melchiades|-|1|sancti:12-10o:4:r -2027-12-11|3|w|St. Damasus I|Sabbato_after_II_Sunday_of_Advent|Sabbato after II Sunday of Advent|-|1|tempora:Adv2-6:3:v -2027-12-12|1|pv|III Sunday of Advent|-|-|-|1|- -2027-12-13|3|r|St. Lucy|Feria_II_after_III_Sunday_of_Advent|Feria II after III Sunday of Advent|-|1|tempora:Adv3-1:3:v -2027-12-14|3|pv|Feria III after III Sunday of Advent|-|-|-|1|- -2027-12-15|2|v|Ember Wednesday of Advent|-|-|-|1|- -2027-12-16|3|r|St. Eusebius|Feria_V_after_III_Sunday_of_Advent|Feria V after III Sunday of Advent|-|1|tempora:Adv3-4:3:v -2027-12-17|2|v|Ember Friday of Advent|-|-|-|1|- -2027-12-18|2|v|Ember Saturday of Advent|-|-|-|1|- -2027-12-19|1|v|IV Sunday of Advent|-|-|-|1|- -2027-12-20|2|v|Feria II after IV Sunday of Advent|-|-|-|1|- -2027-12-21|2|r|St. Thomas|Feria_III_after_IV_Sunday_of_Advent|Feria III after IV Sunday of Advent|-|1|tempora:Adv4-2:2:v -2027-12-22|2|v|Feria IV after IV Sunday of Advent|-|-|-|1|- -2027-12-23|2|v|Feria V after IV Sunday of Advent|-|-|-|1|- -2027-12-24|1|v|Vigil of Christmas|-|-|-|1|- -2027-12-25|1|w|The Nativity of Our Lord|-|-|-|3|- -2027-12-26|2|w|Sunday in the Octave of Christmas|-|St. Stephen|For Octave of the Nativity|1|sancti:12-26:2:r -2027-12-27|2|w|St. John the Evangelist|-|For Octave of the Nativity|-|1|sancti:12-27c:4:w -2027-12-28|2|r|Holy Innocents|-|For Octave of the Nativity|-|1|sancti:12-28c:4:w -2027-12-29|2|w|Feria in the Octave of Christmas|-|St. Thomas Becket|-|1|sancti:12-29:4:r -2027-12-30|2|w|Feria in the Octave of Christmas|-|-|-|1|- -2027-12-31|2|w|Feria in the Octave of Christmas|-|St. Silvester|-|1|sancti:12-31:4:w +2026-01-01|1|w|Octave Day of Christmas|-|-|-|1|-|Titus 2:11-15|Luke 2:21 +2026-01-02|4|w|Feria|-|-|-|1|-|Titus 2:11-15|Luke 2:21 +2026-01-03|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|-|Titus 3:4-7|Luke 2:15-20 +2026-01-04|2|w|Holy Name of Jesus|-|-|-|1|-|Acts 4:8-12|Luke 2:21 +2026-01-05|4|w|Feria|-|St. Telesphorus Pope and Martyr|-|1|sancti:01-05:4:r|Titus 2:11-15|Luke 2:21 +2026-01-06|1|w|Epiphany of the Lord|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2026-01-07|4|w|Feria|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2026-01-08|4|w|Feria|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2026-01-09|4|w|Feria|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2026-01-10|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|-|Titus 3:4-7|Luke 2:15-20 +2026-01-11|2|w|The Holy Family: Jesus, Mary & Joseph|-|-|St. Hyginus Pope and Martyr|1|-|Col 3:12-17|Luke 2:42-52 +2026-01-12|4|w|Feria|Feria_II_after_Epiphany|-|-|1|-|Rom 12:1-5|Luke 2:42-52 +2026-01-13|2|w|Commemoration of the Baptism of the Lord|Feria_III_after_Epiphany|-|-|1|-|Isa 60:1-6|John 1:29-34 +2026-01-14|3|w|St. Hilary|Feria_IV_after_Epiphany|S. Felicis|-|1|sancti:01-14cc:4:r|2 Tim 4:1-8|Matt 5:13-19 +2026-01-15|3|w|St. Paul, the First Hermit|Feria_V_after_Epiphany|St. Maur, Abbot|-|1|sancti:01-15cc:4:w|Phil 3:7-12|Matt 11:25-30 +2026-01-16|3|r|St. Marcellus I|Feria_VI_after_Epiphany|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-01-17|3|w|St. Anthony|Saturday_after_Epiphany|-|-|1|-|Ecclus 45:1-6|Luke 12:35-40 +2026-01-18|2|g|II Sunday after Epiphany|-|-|St. Prisca|1|-|Rom 12:6-16|John 2:1-11 +2026-01-19|4|g|Feria|Feria_II_after_II_Sunday_after_Epiphany|Sts. Marius, Martha, Audifax & Abachum;St. Canute, Martyr|-|1|sancti:01-19:4:r;sancti:01-19o:4:r|Rom 12:6-16|John 2:1-11 +2026-01-20|3|r|Sts. Fabian & Sebastian|Feria_III_after_II_Sunday_after_Epiphany|-|-|1|-|Heb 11:33-39|Luke 6:17-23 +2026-01-21|3|r|St. Agnes|Feria_IV_after_II_Sunday_after_Epiphany|-|-|1|-|Sir 51:1-8; 51:12|Matt 25:1-13. +2026-01-22|3|r|Sts. Vincent & Anastasius|Feria_V_after_II_Sunday_after_Epiphany|-|-|1|-|Wis 3:1-8|Luke 21:9-19 +2026-01-23|3|w|St. Raymond of Peñafort|Feria_VI_after_II_Sunday_after_Epiphany|St. Emerentiana|-|1|sancti:01-23o:4:r|Sir 31:8-11|Luke 12:35-40 +2026-01-24|3|r|St. Timothy|Saturday_after_II_Sunday_after_Epiphany|-|-|1|-|1 Tim. 6:11-16|Luke 14:26-33. +2026-01-25|2|g|III Sunday after Epiphany|-|-|Conversion of St. Paul;St. Peter|1|-|Rom 12:16-21|Matt 8:1-13 +2026-01-26|3|r|St. Polycarp|Feria_II_after_III_Sunday_after_Epiphany|-|-|1|-|1 John 3:10-16|Matt 10:26-32. +2026-01-27|3|w|St. John Chrysostom|Feria_III_after_III_Sunday_after_Epiphany|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-01-28|3|w|St. Peter Nolasco|Feria_IV_after_III_Sunday_after_Epiphany|St. Agnes|-|1|sancti:01-28t:4:r|1 Cor. 4:9-14|Luke 12:32-34 +2026-01-29|3|w|St. Francis de Sales|Feria_V_after_III_Sunday_after_Epiphany|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-01-30|3|r|St. Martina|Feria_VI_after_III_Sunday_after_Epiphany|-|-|1|-|Sir 51:1-8; 51:12|Matt 25:1-13. +2026-01-31|3|w|St. John Bosco|Saturday_after_III_Sunday_after_Epiphany|-|-|1|-|Phil 4:4-9|Matt 18:1-5 +2026-02-01|2|v|Septuagesima Sunday|-|-|St. Ignatius of Antioch|1|-|1 Cor. 9:24-27; 10:1-5|Matt 20:1-16 +2026-02-02|2|w|Purification of the Blessed Virgin Mary|Feria_II_after_Septuagesima|-|-|1|-|Mal 3:1-4|Luke 2:22-32 +2026-02-03|4|v|Feria|Feria_III_after_Septuagesima|St. Blaise|-|1|sancti:02-03:4:r|1 Cor. 9:24-27; 10:1-5|Matt 20:1-16 +2026-02-04|3|w|St. Andrew Corsini|Feria_IV_after_Septuagesima|-|-|1|-|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2026-02-05|3|r|St. Agatha|Feria_V_after_Septuagesima|-|-|1|-|1 Cor. 1:26-31|Matt 19:3-12. +2026-02-06|3|w|St. Titus|Feria_VI_after_Septuagesima|St. Dorothy|-|1|sancti:02-06o:4:r|Sir 44:16-27; 45:3-20|Luke 10:1-9 +2026-02-07|3|w|St. Romuald|Saturday_after_Septuagesima|-|-|1|-|Ecclus 45:1-6|Matt 19:27-29. +2026-02-08|2|v|Sexagesima Sunday|-|-|St. John of Matha|1|-|2 Cor. 11:19-33; 12:1-9|Luke 8:4-15 +2026-02-09|3|w|St. Cyril of Alexandria|Feria_II_after_Sexagesima|St. Appollonia|-|1|sancti:02-09o:4:r|2 Tim 4:1-8|Matt 5:13-19 +2026-02-10|3|w|St. Scholastica|Feria_III_after_Sexagesimæ|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-02-11|3|w|Our Lady of Lourdes|Feria_IV_after_Sexagesimæ|-|-|1|-|Apoc 11:19; 12:1, 10|Luke 1:26-31. +2026-02-12|3|w|Seven Holy Servite Founders|Feria_V_after_Sexagesimæ|-|-|1|-|Ecclus 44:1-15|Matt 19:27-29. +2026-02-13|4|v|Feria|Feria_VI_after_Sexagesimæ|-|-|1|-|2 Cor. 11:19-33; 12:1-9|Luke 8:4-15 +2026-02-14|4|w|III Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_Sexagesimæ|St. Valentine|-|1|sancti:02-14:4:r|Ecclus 24:14-16|Luke 11:27-28 +2026-02-15|2|v|Quinquagesima Sunday|-|-|Sts. Faustinus & Jovita|1|-|1 Cor. 13:1-13|Luke 18:31-43 +2026-02-16|4|v|Feria|Feria_II_after_Quinquagesima|-|-|1|-|1 Cor. 13:1-13|Luke 18:31-43 +2026-02-17|4|v|Feria|Feria_III_after_Quinquagesima|-|-|1|-|1 Cor. 13:1-13|Luke 18:31-43 +2026-02-18|1|v|Ash Wednesday|-|-|St. Simeon|1|-|Joel 2:12-19|Matt 6:16-21 +2026-02-19|3|v|Feria V after Ash Wednesday|-|-|-|1|-|Isa 38:1-6|Matt 8:5-13 +2026-02-20|3|v|Feria VI after Ash Wednesday|-|-|-|1|-|Isa 58:1-9|Matt 5:43-48; 6:1-4 +2026-02-21|3|v|Saturday after Ash Wednesday|-|-|-|1|-|Isa 58:9-14|Mark 6:47-56 +2026-02-22|1|v|I Sunday of Lent|-|-|Chair of St. Peter;St. Paul|1|-|2 Cor. 6:1-10|Matt 4:1-11 +2026-02-23|3|v|Feria II after the I Sunday of Lent|-|St. Peter Damien|-|1|sancti:02-23r:3:w|Ezech 34:11-16|Matt 25:31-46 +2026-02-24|2|r|St. Matthias|Feria_III_after_the_I_Sunday_of_Lent|Feria III after the I Sunday of Lent|-|1|tempora:Quad1-2:3:v|Acts 1:15-26|Matt 11:25-30 +2026-02-25|2|v|Ember Wednesday of Lent|-|-|-|1|-|3 Kgs. 19:3-8|Matt 12:38-50 +2026-02-26|3|v|Feria V after the I Sunday of Lent|-|-|-|1|-|Ezech 18:1-9|Matt 15:21-28 +2026-02-27|2|v|Ember Friday of Lent|-|St. Gabriel of Our Lady of Sorrows|-|1|sancti:02-27:3:w|Ezech 18:20-28|John 5:1-15 +2026-02-28|2|v|Ember Saturday of Lent|-|-|-|1|-|1 Thess. 5:14-23|Matt 17:1-9 +2026-03-01|1|v|II Sunday of Lent|-|-|-|1|-|1 Thess. 4:1-7|Matt 17:1-9 +2026-03-02|3|v|Feria II after the II Sunday of Lent|-|-|-|1|-|Dan 9:15-19|John 8:21-29 +2026-03-03|3|v|Feria III after the II Sunday of Lent|-|-|-|1|-|3 Kings 17:8-16|Matt 23:1-12 +2026-03-04|3|v|Feria IV after the II Sunday of Lent|-|St. Casimir;St. Lucius|-|1|sancti:03-04:3:w;sancti:03-04cc:4:r|Esther 13:8-11; 15-17.|Matt 20:17-28 +2026-03-05|3|v|Feria V after the II Sunday of Lent|-|-|-|1|-|Jer 17:5-10|Luke 16:19-31 +2026-03-06|3|v|Feria VI after the II Sunday of Lent|-|Sts. Felicitas & Perpetua|-|1|sancti:03-06:3:r|Gen 37:6-22|Matt 21:33-46 +2026-03-07|3|v|Saturday after the II Sunday of Lent|-|St. Thomas Aquinas|-|1|sancti:03-07:3:w|Gen 27:6-40|Luke 15:11-32 +2026-03-08|1|v|III Sunday of Lent|-|-|St. John of God|1|-|Eph 5:1-9|Luke 11:14-28 +2026-03-09|3|v|Feria II after the III Sunday of Lent|-|St. Frances Rome|-|1|sancti:03-09:3:w|4 Kings, 5:1-15|Luke 4:23-30 +2026-03-10|3|v|Feria III after the III Sunday of Lent|-|Forty Holy Martyrs of Sebaste|-|1|sancti:03-10:3:r|4 Kings 4:1-7|Matt 18:15-22 +2026-03-11|3|v|Feria IV after the III Sunday of Lent|-|-|-|1|-|Ex 20:12-24|Matt 15:1-20 +2026-03-12|3|v|Feria V after the III Sunday of Lent|-|St. Gregory the Great|-|1|sancti:03-12:3:w|Jer 7:1-7|Luke 4:38-44. +2026-03-13|3|v|Feria VI after the III Sunday of Lent|-|-|-|1|-|Num 20:1, 3; 6-13.|John 4:5-42 +2026-03-14|3|v|Saturday after the III Sunday of Lent|-|-|-|1|-|Dan 13:1-9, 15-17, 19-30, 33-62.|John 8:1-11 +2026-03-15|1|pv|IV Sunday of Lent|-|-|-|1|-|Gal 4:22-31|John 6:1-15 +2026-03-16|3|v|Feria II after the IV Sunday of Lent|-|-|-|1|-|3 Kings 3:16-28|John 2:13-25 +2026-03-17|3|v|Feria III after the IV Sunday of Lent|-|St. Patrick|-|1|sancti:03-17:3:w|Ex 32:7-14|John 7:14-31 +2026-03-18|3|v|Feria IV after the IV Sunday of Lent|-|St. Cyril of Jerusalem|-|1|sancti:03-18:3:w|Isa. 1:16-19|John 9:1-38 +2026-03-19|1|w|St. Joseph, Spouse of the Bl. Virgin Mary|Feria_V_after_the_IV_Sunday_of_Lent|Feria V after the IV Sunday of Lent|-|1|tempora:Quad4-4:3:v|Ecclus 45:1-6|Matt 1:18-21 +2026-03-20|3|v|Feria VI after the IV Sunday of Lent|-|-|-|1|-|3 Kings 17:17-24|John 11:1-45 +2026-03-21|3|v|Saturday after the IV Sunday of Lent|-|St. Benedict|-|1|sancti:03-21:3:w|Isa 49:8-15|John 8:12-20 +2026-03-22|1|v|Passion Sunday|-|-|-|1|-|Heb 9:11-15.|John 8:46-59. +2026-03-23|3|v|Feria II of Passion Week|-|-|-|1|-|Jonas 3:1-10|John 7:32-39 +2026-03-24|3|v|Feria III of Passion Week|-|St. Gabriel the Archangel|-|1|sancti:03-24:3:w|Dan 14:27-42|John 7:1-13 +2026-03-25|1|w|Annunciation of the Blessed Virgin Mary|Feria_IV_of_Passion_Week|Feria IV of Passion Week|-|1|tempora:Quad5-3:3:v|Isa 7:10-15|Luke 1:26-38 +2026-03-26|3|v|Feria V of Passion Week|-|-|-|1|-|Dan 3:25, 34-45.|Luke 7:36-50 +2026-03-27|3|v|Feria VI of Passion Week|-|For Our Lady of the Seven Sorrows|St. John Damascene|1|tempora:Quad5-5Feriac:4:w|Jer 17:13-18|John 11:47-54 +2026-03-28|3|v|Saturday of Passion Week|-|St. John of Capistrano|-|1|sancti:03-28:3:w|Jer 18:18-23|John 12:10-36 +2026-03-29|1|rv|Palm Sunday|-|-|-|1|-|Phil 2:5-11|Matt. 26:36-75; 27:1-60. +2026-03-30|1|v|Feria II of Holy Week|-|-|-|1|-|Isa 50:5-10|John 12:1-9 +2026-03-31|1|v|Feria III of Holy Week|-|-|-|1|-|Jer 11:18-20|Mark 14:32-72; 15, 1-46 +2026-04-01|1|v|Feria IV of Holy Week|-|-|-|1|-|Isa 53:1-12|Luc 22:39-71; 23:1-53 +2026-04-02|1|w|Holy Thursday|-|-|St. Francis of Paola|1|-|1 Cor 11:20-32.|Joann 13:1-15 +2026-04-03|1|bv|Good Friday|-|-|-|1|-|-|- +2026-04-04|1|vw|Holy Saturday|-|-|St. Isidore of Seville|1|-|Col 3:1-4|Matt 28:1-7 +2026-04-05|1|w|Easter Sunday|-|-|St. Vincent Ferrer|1|-|1 Cor 5:7-8|Mark 16:1-7 +2026-04-06|1|w|Monday in the Octave of Easter|-|-|-|1|-|Acts 10:37-43.|Luke 24:13-35 +2026-04-07|1|w|Tuesday in the Octave of Easter|-|-|-|1|-|Acts 13:16; 13:26-33|Luke 24:36-47 +2026-04-08|1|w|Wednesday in the Octave of Easter|-|-|-|1|-|Acts 3:13-15; 3:17-19|John 21:1-14 +2026-04-09|1|w|Thursday in the Octave of Easter|-|-|-|1|-|Acts 8:26-40|John 20:11-18 +2026-04-10|1|w|Friday in the Octave of Easter|-|-|-|1|-|1 Pet 3:18-22|Matt 28:16-20 +2026-04-11|1|w|Saturday in the Octave of Easter|-|-|St. Leo the Great|1|-|1 Pet 2:1-10|John 20:1-9 +2026-04-12|1|w|Low Sunday|-|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2026-04-13|3|r|St. Hermenegild|Monday_after_I_Sunday_after_Easter|-|-|1|-|Wis 10:10-14|Luke 14:26-33. +2026-04-14|3|r|St. Justin|Tuesday_after_I_Sunday_after_Easter|Sts. Tiburtius, Valerian et Maximus, Martyrs|-|1|sancti:04-14t:4:r|1 Cor 1:18-25; 1:30;|Luke 12:2-8 +2026-04-15|4|w|Feria|Wednesday_after_I_Sunday_after_Easter|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2026-04-16|4|w|Feria|Thursday_after_I_Sunday_after_Easter|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2026-04-17|4|w|Feria|Friday_after_I_Sunday_after_Easter|St. Anicetus|-|1|sancti:04-17:4:r|1 John 5:4-10|John 20. 19-31 +2026-04-18|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_I_Sunday_after_Easter|-|-|1|-|Ecclus 24:14-16|John 19:25-27 +2026-04-19|2|w|II Sunday after Easter|-|-|-|1|-|1 Pet 2:21-25|John 10:11-16 +2026-04-20|4|w|Feria|Monday_after_II_Sunday_after_Easter|-|-|1|-|1 Pet 2:21-25|John 10:11-16 +2026-04-21|3|w|St. Anselm|Tuesday_after_II_Sunday_after_Easter|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-04-22|3|r|Sts. Soter & Caius|Wednesday_after_II_Sunday_after_Easter|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-04-23|4|w|Feria|Thursday_after_II_Sunday_after_Easter|St. George|-|1|sancti:04-23:4:r|1 Pet 2:21-25|John 10:11-16 +2026-04-24|3|r|St. Fidelis of Sigmaringen|Friday_after_II_Sunday_after_Easter|-|-|1|-|Wis 5:1-5|John 15:1-7 +2026-04-25|2|r|St. Mark|Saturday_after_II_Sunday_after_Easter|Pro rogationibus|-|1|sancti:04-25c:4:r|Ezek 1:10-14|Luke 10:1-9 +2026-04-26|2|w|III Sunday after Easter|-|-|Sts. Cletus & Marcellinus|1|-|1 Pet 2:11-19|John 16:16-22 +2026-04-27|3|w|St. Peter Canisius|Monday_after_III_Sunday_after_Easter|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-04-28|3|w|St. Paul of the Cross|Tuesday_after_III_Sunday_after_Easter|-|-|1|-|1 Cor 1:17-25.|Luke 10:1-9 +2026-04-29|3|r|St. Peter of Verona|Wednesday_after_III_Sunday_after_Easter|-|-|1|-|2 Tim. 2:8-10; 3:10-12.|Matt 10:34-42 +2026-04-30|3|w|St. Catherine of Siena|Thursday_after_III_Sunday_after_Easter|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-05-01|1|w|St. Joseph the Workman|Friday_after_III_Sunday_after_Easter|-|-|1|-|Col. 3:14-15, 17, 23-24|Matt 13:54-58 +2026-05-02|3|w|St. Athanasius|Saturday_after_III_Sunday_after_Easter|-|-|1|-|2 Cor. 4:5-14|Matt 10:23-28 +2026-05-03|2|w|IV Sunday after Easter|-|-|Sts. Alexander & Companions|1|-|Jas 1:17-21|John 16:5-14 +2026-05-04|3|w|St. Monica|Monday_after_IV_Sunday_after_Easter|-|-|1|-|1 Tim. 5:3-10.|Luke 7:11-16 +2026-05-05|3|w|St. Pius V|Tuesday_after_IV_Sunday_after_Easter|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-05-06|4|w|Feria|Wednesday_after_IV_Sunday_after_Easter|-|-|1|-|Jas 1:17-21|John 16:5-14 +2026-05-07|3|r|St. Stanislaus|Thursday_after_IV_Sunday_after_Easter|-|-|1|-|Wis 5:1-5|John 15:1-7 +2026-05-08|4|w|Feria|Friday_after_IV_Sunday_after_Easter|-|-|1|-|Jas 1:17-21|John 16:5-14 +2026-05-09|3|w|St. Gregory of Nazianzen|Saturday_after_IV_Sunday_after_Easter|-|-|1|-|Ecclus 39:6-14|Matt 5:13-19 +2026-05-10|2|w|V Sunday after Easter|-|-|St. Antoninus;St. Gordiano and Epimacho|1|-|Jas 1:22-27|John 16:23-30 +2026-05-11|2|r|Sts. Philip & James|The_Minor_Litanies_–_Rogations|-|-|1|-|Wis. 5:1-5|John 14:1-13 +2026-05-12|3|r|Sts. Nereus, Achilleus, Domitilla, & Pancras|The_Minor_Litanies_–_Rogations|-|-|1|-|Wis. 5:1-5|John 4:46-53 +2026-05-13|2|w|Vigil of the Ascension|-|St. Robert Bellarmine|-|1|sancti:05-13:3:w|Eph. 4:7-13.|John 17:1-11. +2026-05-14|1|w|Ascension of the Lord|-|-|St. Boniface|1|-|Acts 1:1-11|Mark 16:14-20 +2026-05-15|3|w|St. John Baptist de la Salle|Feria_VI_after_the_Ascension|-|-|1|-|Sir 31:8-11|Matt 18:1-5 +2026-05-16|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_the_Ascension|St. Ubaldus|-|1|sancti:05-16:4:w|Ecclus 24:14-16|John 19:25-27 +2026-05-17|2|w|Sunday after the Ascension|-|-|St. Paschal Baylon|1|-|1 Pet 4:7-11.|John 15:26-27; 16:1-4. +2026-05-18|3|r|St. Venantius|Feria_II_after_the_Ascension|-|-|1|-|Wis 5:1-5|John 15:1-7 +2026-05-19|3|w|St. Peter Celestine|Feria_III_after_the_Ascension|St. Pudentiana Virginis|-|1|sancti:05-19o:4:w|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-05-20|3|w|St. Bernardine of Siena|Feria_IV_after_the_Ascension|-|-|1|-|Sir 31:8-11|Matt 19:27-29. +2026-05-21|4|w|Feria|Feria_V_after_the_Ascension|-|-|1|-|1 Pet 4:7-11.|John 15:26-27; 16:1-4. +2026-05-22|4|w|Feria|Feria_VI_after_the_Ascension|-|-|1|-|1 Pet 4:7-11.|John 15:26-27; 16:1-4. +2026-05-23|1|r|Saturday after the Ascension|-|-|-|1|-|Acts 19:1-8.|John 14:15-21. +2026-05-24|1|r|Pentecost Sunday|-|-|-|1|-|Acts 2:1-11.|John 14:23-31. +2026-05-25|1|r|Monday after Pentecost|-|-|St. Gregory VII;St. Urban, Pope and Martyr|1|-|Acts 10:34, 42-48|John 3:16-21 +2026-05-26|1|r|Tuesday after Pentecost|-|-|St. Philip Neri;S. Eleutherius|1|-|Acts 8:14-17.|John 10:1-10. +2026-05-27|1|r|Ember Wednesday of Pentecost|-|-|St. Bede the Venerable;St. John I|1|-|Acts 5:12-16|John 6:44-52. +2026-05-28|1|r|Thursday after Pentecost|-|-|St. Augustine of Canterbury|1|-|Acts 8:5-8|Luke 9:1-6 +2026-05-29|1|r|Ember Friday of Pentecost|-|-|St. Mary Magdalene de Pazzi|1|-|Joel 2:23-24; 26-27|Luke 5:17-26 +2026-05-30|1|r|Ember Saturday of Pentecost|-|-|St. Felix I|1|-|Rom 5:1-5.|Luke 4:38-44. +2026-05-31|1|w|Trinity Sunday|-|-|Queenship of the Blessed Virgin Mary;St. Petronilla|1|-|Rom 11:33-36.|Matt 28:18-20 +2026-06-01|3|w|St. Angela Merici|Feria_II_after_I_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-06-02|4|g|Feria|Feria_III_after_I_Sunday_after_Pentecost|Sts. Marcellinus, Peter, & Erasmus|-|1|sancti:06-02:4:r|1 John 4:8-21|Luke 6:36-42 +2026-06-03|4|g|Feria|Feria_IV_after_I_Sunday_after_Pentecost|-|-|1|-|1 John 4:8-21|Luke 6:36-42 +2026-06-04|1|w|Corpus Christi|-|-|St. Francis Caracciolo|1|-|1 Cor. 11:23-29.|John 6:56-59. +2026-06-05|3|r|St. Boniface|Feria_V_after_I_Sunday_after_Pentecost|-|-|1|-|Ecclus 44:1-15|Matt 5:1-12 +2026-06-06|3|w|St. Norbert|Saturday_after_I_Sunday_after_Pentecost|-|-|1|-|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2026-06-07|2|g|II Sunday after Pentecost|-|-|-|1|-|1 John 3:13-18.|Luke 14:16-24. +2026-06-08|4|g|Feria|Feria_II_after_II_Sunday_after_Pentecost|-|-|1|-|1 John 3:13-18.|Luke 14:16-24. +2026-06-09|4|g|Feria|Feria_III_after_II_Sunday_after_Pentecost|Sts. Primus & Felicianus|-|1|sancti:06-09:4:r|1 John 3:13-18.|Luke 14:16-24. +2026-06-10|3|w|St. Margaret of Scotland|Feria_IV_after_II_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2026-06-11|3|r|St. Barnabas|Feria_V_after_II_Sunday_after_Pentecost|-|-|1|-|Acts 11:21-26; 13:1-3|Matt 10:16-22 +2026-06-12|1|w|Sacred Heart of Jesus|-|-|St. John of San Fecundo;St. Basilidus|1|-|Eph. 3:8-12, 14-19|John 19:31-37 +2026-06-13|3|w|St. Anthony of Padua|Saturday_after_II_Sunday_after_Pentecost|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-06-14|2|g|III Sunday after Pentecost|-|-|St. Basil the Great|1|-|1 Pet. 5:6-11|Luke 15:1-10 +2026-06-15|4|g|Feria|Feria_II_after_III_Sunday_after_Pentecost|St. Vitus|-|1|sancti:06-15:4:w|1 Pet. 5:6-11|Luke 15:1-10 +2026-06-16|4|g|Feria|Feria_III_after_III_Sunday_after_Pentecost|-|-|1|-|1 Pet. 5:6-11|Luke 15:1-10 +2026-06-17|3|w|St. Gregory Barbarigo|Feria_IV_after_III_Sunday_after_Pentecost|-|-|1|-|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2026-06-18|3|r|St. Ephrem of Syria|Feria_V_after_III_Sunday_after_Pentecost|Ss. Marcus and Marcellianus|-|1|sancti:06-18t:4:r|2 Tim 4:1-8|Matt 5:13-19 +2026-06-19|3|r|St. Julia of Falconieri|Feria_VI_after_III_Sunday_after_Pentecost|Sts. Gervasius and Protasius|-|1|sancti:06-19o:4:r|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-06-20|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_III_Sunday_after_Pentecost|St. Silverius|-|1|sancti:06-20:4:r|Ecclus 24:14-16|Luke 11:27-28 +2026-06-21|2|g|IV Sunday after Pentecost|-|-|St. Aloysius Gongzaga|1|-|Rom 8:18-23|Luke 5:1-11 +2026-06-22|3|w|St. Paulinus of Nola|Feria_II_after_IV_Sunday_after_Pentecost|-|-|1|-|2 Cor. 8:9-15|Luke 12:32-34 +2026-06-23|2|v|Vigil of the Nativity of St. John the Baptist|Feria_III_after_IV_Sunday_after_Pentecost|-|-|1|-|Jer 1:4-10|Luke 1:5-17 +2026-06-24|1|w|Nativity of St. John the Baptist|Feria_IV_after_IV_Sunday_after_Pentecost|-|-|1|-|Isa 49:1-3, 5-7.|Luke 1:57-68 +2026-06-25|3|w|St. William|Feria_V_after_IV_Sunday_after_Pentecost|-|-|1|-|Ecclus 45:1-6|Matt 19:27-29. +2026-06-26|3|r|Sts. John & Paul|Feria_VI_after_IV_Sunday_after_Pentecost|-|-|1|-|Eccli 44:10-15|Luke 12:1-8 +2026-06-27|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IV_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-06-28|2|g|V Sunday after Pentecost|-|Vigil of Sts. Peter & Paul|-|1|sancti:06-28r:2:v|1 Pet 3:8-15.|Matt 5:20-24. +2026-06-29|1|r|Sts. Peter & Paul|Feria_II_after_V_Sunday_after_Pentecost|-|-|1|-|Acts 12:1-11|Matt 16:13-19 +2026-06-30|3|r|In Commemoratione Sancti Pauli Apostoli|Feria_III_after_V_Sunday_after_Pentecost|-|-|1|-|Gal 1:11-20|Matt 10:16-22 +2026-07-01|1|r|The Precious Blood of Our Lord Jesus Christ|Feria_IV_after_V_Sunday_after_Pentecost|-|-|1|-|Heb 9:11-15.|John 19:30-35 +2026-07-02|2|w|Visitation of the Blessed Virgin Mary|Feria_V_after_V_Sunday_after_Pentecost|SS. Processus and Martinian|-|1|sancti:07-02cc:4:r|Song 2:8-14|Luke 1:39-47 +2026-07-03|3|r|St. Irenaeus|Feria_VI_after_V_Sunday_after_Pentecost|-|-|1|-|2 Tim. 3:14-17; 4:1-5|Matt 10:28-33 +2026-07-04|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_V_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-07-05|2|g|VI Sunday after Pentecost|-|-|St. Anthony Mary Zaccariah|1|-|Rom 6:3-11.|Mark 8:1-9 +2026-07-06|4|g|Feria|Feria_II_after_VI_Sunday_after_Pentecost|-|-|1|-|Rom 6:3-11.|Mark 8:1-9 +2026-07-07|3|w|Sts. Cyril & Methodius|Feria_III_after_VI_Sunday_after_Pentecost|-|-|1|-|Heb 7:23-27|Luke 10:1-9 +2026-07-08|3|w|St. Elizabeth of Portugal|Feria_IV_after_VI_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2026-07-09|4|g|Feria|Feria_V_after_VI_Sunday_after_Pentecost|-|-|1|-|Rom 6:3-11.|Mark 8:1-9 +2026-07-10|3|r|Seven Holy Brothers and Sts. Rufina & Secunda|Feria_VI_after_VI_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 12:46-50 +2026-07-11|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_VI_Sunday_after_Pentecost|St. Pius I|-|1|sancti:07-11:4:r|Ecclus 24:14-16|Luke 11:27-28 +2026-07-12|2|g|VII Sunday after Pentecost|-|-|St. John Gualbert;Ss. Naboris et Felicis|1|-|Rom 6:19-23|Matt 7:15-21 +2026-07-13|4|g|Feria|Feria_II_after_VII_Sunday_after_Pentecost|-|-|1|-|Rom 6:19-23|Matt 7:15-21 +2026-07-14|3|w|St. Bonaventure|Feria_III_after_VII_Sunday_after_Pentecost|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-07-15|3|w|St. Henry the Emperor|Feria_IV_after_VII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2026-07-16|4|g|Feria|Feria_V_after_VII_Sunday_after_Pentecost|Our Lady of Mt. Carmel|-|1|sancti:07-16:4:w|Rom 6:19-23|Matt 7:15-21 +2026-07-17|4|g|Feria|Feria_VI_after_VII_Sunday_after_Pentecost|St. Alexis|-|1|sancti:07-17:4:w|Rom 6:19-23|Matt 7:15-21 +2026-07-18|3|r|Camillus de Lellis|Saturday_after_VII_Sunday_after_Pentecost|Ss. Symphorosa and sons|-|1|sancti:07-18cc:4:r|1 John 3:13-18.|John 15:12-16 +2026-07-19|2|g|VIII Sunday after Pentecost|-|-|St. Vincent de Paul|1|-|Rom 8:12-17|Luke 16:1-9 +2026-07-20|3|r|St. Jerome Emiliani|Feria_II_after_VIII_Sunday_after_Pentecost|St. Margaret|-|1|sancti:07-20o:4:w|Isa 58:7-11|Matt 19:13-21 +2026-07-21|3|w|St. Laurence of Brindisi|Feria_III_after_VIII_Sunday_after_Pentecost|St. Praxedis Virginis|-|1|sancti:07-21:4:w|2 Tim 4:1-8|Matt 5:13-19 +2026-07-22|3|w|St. Mary Magdalene|Feria_IV_after_VIII_Sunday_after_Pentecost|-|-|1|-|Song 3:2-5; 8:6-7|Luke 7:36-50 +2026-07-23|3|w|St. Apollinaris|Feria_V_after_VIII_Sunday_after_Pentecost|S. Liborii|-|1|sancti:07-23cc:4:r|1 Pet. 5:1-11|Luke 22:24-30 +2026-07-24|4|g|Feria|Feria_VI_after_VIII_Sunday_after_Pentecost|St. Christina|-|1|sancti:07-24r:4:r|Rom 8:12-17|Luke 16:1-9 +2026-07-25|2|r|St. James the Greater|Saturday_after_VIII_Sunday_after_Pentecost|St. Christopher|-|1|sancti:07-25cc:4:r|1 Cor. 4:9-15|Matt 20:20-23 +2026-07-26|2|g|IX Sunday after Pentecost|-|St. Anne, Mother of the Blessed Virgin|-|1|sancti:07-26:2:w|1 Cor. 10:6-13|Luke 19:41-47 +2026-07-27|4|g|Feria|Feria_II_after_IX_Sunday_after_Pentecost|St. Pantaleon|-|1|sancti:07-27:4:r|1 Cor. 10:6-13|Luke 19:41-47 +2026-07-28|3|r|Sts. Nazarius & Celsus, St. Victor I & St. Innocent I|Feria_III_after_IX_Sunday_after_Pentecost|-|-|1|-|Wis 10:17-20|Luke 21:9-19 +2026-07-29|3|r|St. Martha|Feria_IV_after_IX_Sunday_after_Pentecost|Ss. Felicis, Simplicii, Faustini et Beatricis|-|1|sancti:07-29cc:4:r|2 Cor 10:17-18; 11:1-2|Luke 10:38-42 +2026-07-30|4|g|Feria|Feria_V_after_IX_Sunday_after_Pentecost|Sts. Abdon & Sennen|-|1|sancti:07-30:4:r|1 Cor. 10:6-13|Luke 19:41-47 +2026-07-31|3|w|St. Ignatius Loyola|Feria_VI_after_IX_Sunday_after_Pentecost|-|-|1|-|2 Tim. 2:8-10; 3:10-12.|Luke 10:1-9 +2026-08-01|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IX_Sunday_after_Pentecost|Holy Machabees|-|1|sancti:08-01r:4:r|Ecclus 24:14-16|Luke 11:27-28 +2026-08-02|2|g|X Sunday after Pentecost|-|-|St. Alphonsus Liguori;St. Stephen I, Pope and Martyr|1|-|1 Cor. 12:2-11|Luke 18:9-14 +2026-08-03|4|g|Feria|Feria_II_after_X_Sunday_after_Pentecost|-|-|1|-|1 Cor. 12:2-11|Luke 18:9-14 +2026-08-04|3|w|St. Dominic|Feria_III_after_X_Sunday_after_Pentecost|-|-|1|-|2 Tim. 4:1-8|Luke 12:35-40 +2026-08-05|3|w|Dedication of the Basilica of St. Mary Major|Feria_IV_after_X_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-08-06|2|w|Transfiguration of Our Lord|Feria_V_after_X_Sunday_after_Pentecost|Pope Sixtus II, Felicissimus and Agapitus, Martyrs|-|1|sancti:08-06cc:4:r|2 Pet. 1:16-19|Matt 17:1-9 +2026-08-07|3|w|St. Cajetan|Feria_VI_after_X_Sunday_after_Pentecost|St. Donatus|-|1|sancti:08-07o:4:r|Sir 31:8-11|Matt 6:24-33 +2026-08-08|3|w|St. John Mary Vianney|Saturday_after_X_Sunday_after_Pentecost|Ss. Cyriacus, Largus and Smaragdus, Martyrs|-|1|sancti:08-08c:4:r|Sir 31:8-11|Luke 12:35-40 +2026-08-09|3|r|Vigil of St. Lawrence|XI_Sunday_after_Pentecost|St. Romanus|-|1|sancti:08-09cc:4:r|Ecclus 51:1-8, 12|Matt 16:24-27 +2026-08-10|2|r|St. Lawrence|Feria_II_after_XI_Sunday_after_Pentecost|-|-|1|-|2 Cor. 9:6-10|John 12:24-26 +2026-08-11|4|g|Feria|Feria_III_after_XI_Sunday_after_Pentecost|Sts. Tiburtius & Susanna|-|1|sancti:08-11:4:r|1 Cor. 15:1-10|Mark 7:31-37 +2026-08-12|3|w|St. Clare|Feria_IV_after_XI_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-08-13|4|g|Feria|Feria_V_after_XI_Sunday_after_Pentecost|Sts. Hippolytus & Cassian|-|1|sancti:08-13:4:r|1 Cor. 15:1-10|Mark 7:31-37 +2026-08-14|2|w|Vigil of the Assumption|Feria_VI_after_XI_Sunday_after_Pentecost|St. Eusebius|-|1|sancti:08-14cc:4:r|Sir 24:23-31|Luke 11:27-28 +2026-08-15|1|w|Assumption of the Blessed Virgin Mary|Saturday_after_XI_Sunday_after_Pentecost|-|-|1|-|Judith 13:22-25; 13:15; 13:10|Luke 1:41-50 +2026-08-16|2|g|XII Sunday after Pentecost|-|St. Joachim, Father of the Blessed Virgin|-|1|sancti:08-16:2:w|2 Cor. 3:4-9|Luke 10:23-37 +2026-08-17|3|w|St. Hyacinth|Feria_II_after_XII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2026-08-18|4|g|Feria|Feria_III_after_XII_Sunday_after_Pentecost|St. Agapitus|-|1|sancti:08-18r:4:w|2 Cor. 3:4-9|Luke 10:23-37 +2026-08-19|3|w|St. John Eudes|Feria_IV_after_XII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2026-08-20|3|w|St. Bernard of Clairvaux|Feria_V_after_XII_Sunday_after_Pentecost|-|-|1|-|Ecclus 39:6-14|Matt 5:13-19 +2026-08-21|3|w|St. Jane Frances de Chantal|Feria_VI_after_XII_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2026-08-22|2|w|Immaculate Heart of Mary|Saturday_after_XII_Sunday_after_Pentecost|Sts. Timothy, Hippolytus and Symphorianus, Martyrs|-|1|sancti:08-22cc:4:r|Sir 24:23-31|John 19:25-27 +2026-08-23|2|g|XIII Sunday after Pentecost|-|-|St. Philip Benizi|1|-|Gal 3:16-22|Luke 17:11-19 +2026-08-24|2|r|St. Bartholomew|Feria_II_after_XIII_Sunday_after_Pentecost|-|-|1|-|1 Cor. 12:27-31|Luke 6:12-19 +2026-08-25|3|w|St. Louis IX|Feria_III_after_XIII_Sunday_after_Pentecost|-|-|1|-|Wis 10:10-14|Luke 19:12-26 +2026-08-26|4|g|Feria|Feria_IV_after_XIII_Sunday_after_Pentecost|St. Zephyrinus|-|1|sancti:08-26:4:r|Gal 3:16-22|Luke 17:11-19 +2026-08-27|3|w|St. Joseph Calasance|Feria_V_after_XIII_Sunday_after_Pentecost|-|-|1|-|Wis 10:10-14|Matt 18:1-5 +2026-08-28|3|r|St. Augustine|Feria_VI_after_XIII_Sunday_after_Pentecost|St. Hermes|-|1|sancti:08-28cc:4:r|2 Tim 4:1-8|Matt 5:13-19 +2026-08-29|3|r|Beheading of St. John the Baptist|Saturday_after_XIII_Sunday_after_Pentecost|St. Sabina|-|1|sancti:08-29cc:4:r|Jer 1:17-19|Mark 6:17-29 +2026-08-30|2|g|XIV Sunday after Pentecost|-|-|St. Rose of Lima;Sts. Felix and Adauctus|1|-|Gal 5:16-24|Matt 6:24-33 +2026-08-31|3|w|St. Raymond Nonnatus|Feria_II_after_XIV_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2026-09-01|4|g|Feria|Feria_III_after_XIV_Sunday_after_Pentecost|St. Giles;Twelve Holy Brothers, Martyrs|-|1|sancti:09-01:4:w;sancti:09-01cc:4:r|Gal 5:16-24|Matt 6:24-33 +2026-09-02|3|w|St. Stephen of Hungary|Feria_IV_after_XIV_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 19:12-26 +2026-09-03|3|w|St. Pius X|Feria_V_after_XIV_Sunday_after_Pentecost|-|-|1|-|1 Thess. 2:2-8|John 21:15-17 +2026-09-04|4|g|Feria|Feria_VI_after_XIV_Sunday_after_Pentecost|-|-|1|-|Gal 5:16-24|Matt 6:24-33 +2026-09-05|3|w|St. Lawrence Justinian|Saturday_after_XIV_Sunday_after_Pentecost|-|-|1|-|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2026-09-06|2|g|XV Sunday after Pentecost|-|-|-|1|-|Gal 5:25-26; 6:1-10|Luke 7:11-16 +2026-09-07|4|g|Feria|Feria_II_after_XV_Sunday_after_Pentecost|-|-|1|-|Gal 5:25-26; 6:1-10|Luke 7:11-16 +2026-09-08|2|w|Nativity of the Blessed Virgin Mary|Feria_III_after_XV_Sunday_after_Pentecost|S. Hadriani|-|1|sancti:09-08cc:4:r|Prov 8:22-35|Matt 1:1-16 +2026-09-09|4|g|Feria|Feria_IV_after_XV_Sunday_after_Pentecost|St. Gorgonius|-|1|sancti:09-09:4:r|Gal 5:25-26; 6:1-10|Luke 7:11-16 +2026-09-10|3|w|St. Nicholas of Tolentino|Feria_V_after_XV_Sunday_after_Pentecost|-|-|1|-|1 Cor. 4:9-14|Luke 12:32-34 +2026-09-11|4|g|Feria|Feria_VI_after_XV_Sunday_after_Pentecost|Sts. Protus & Hyacinth|-|1|sancti:09-11:4:r|Gal 5:25-26; 6:1-10|Luke 7:11-16 +2026-09-12|3|w|Most Holy Name of Mary|Saturday_after_XV_Sunday_after_Pentecost|-|-|1|-|Sir 24:23-31|Luke 1:26-38 +2026-09-13|2|g|XVI Sunday after Pentecost|-|-|-|1|-|Eph 3:13-21|Luke 14:1-11 +2026-09-14|2|r|Exaltation of the Holy Cross|Feria_II_after_XVI_Sunday_after_Pentecost|-|-|1|-|Phil 2:5-11|John 12:31-36 +2026-09-15|2|w|Seven Sorrows of the Blessed Virgin Mary|Feria_III_after_XVI_Sunday_after_Pentecost|S. Nicomedes|-|1|sancti:09-15cc:4:r|Judith 13:22; 13:25|John 19:25-27 +2026-09-16|3|r|Sts. Cornelius & Cyprian|Feria_IV_after_XVI_Sunday_after_Pentecost|Sts. Euphemia, Lucy and Geminianus|-|1|sancti:09-16cc:4:r|Wis 3:1-8|Luke 21:9-19 +2026-09-17|4|g|Feria|Feria_V_after_XVI_Sunday_after_Pentecost|Stigmata of St. Francis|-|1|sancti:09-17:4:w|Eph 3:13-21|Luke 14:1-11 +2026-09-18|3|w|St. Joseph of Cupertino|Feria_VI_after_XVI_Sunday_after_Pentecost|-|-|1|-|1 Cor 13:1-8|Matt 22:1-14 +2026-09-19|3|r|St. Januarius & Companions|Saturday_after_XVI_Sunday_after_Pentecost|-|-|1|-|Heb 10:32-38|Matt 24:3-13 +2026-09-20|2|g|XVII Sunday after Pentecost|-|-|Sts. Eustace & Companions|1|-|Eph 4:1-6|Matt 22:34-46 +2026-09-21|2|r|St. Matthew|Feria_II_after_XVII_Sunday_after_Pentecost|-|-|1|-|Ezek 1:10-14|Matt 9:9-13 +2026-09-22|3|w|St. Thomas of Villanova|Feria_III_after_XVII_Sunday_after_Pentecost|St. Maurice and Companions, Martyrs|-|1|sancti:09-22o:4:r|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2026-09-23|2|v|Ember Wednesday of September|-|St. Linus|St. Thecla|1|sancti:09-23:3:r|2 Esd. 8:1-10|Mark 9:16-28 +2026-09-24|4|g|Feria|Feria_V_after_XVII_Sunday_after_Pentecost|Our Lady of Ransom|-|1|sancti:09-24:4:w|Eph 4:1-6|Matt 22:34-46 +2026-09-25|2|v|Ember Friday of September|-|-|-|1|-|Osee 14:2-10|Luke 7:36-50 +2026-09-26|2|v|Ember Saturday of September|-|Sts. Cyprian & Justina|-|1|sancti:09-26:4:r|Heb 9:2-12|Luke 13:6-17 +2026-09-27|2|g|XVIII Sunday after Pentecost|-|-|Sts. Cosmas & Damian|1|-|1 Cor. 1:4-8|Matt 9:1-8 +2026-09-28|3|r|St. Wenceslaus|Feria_II_after_XVIII_Sunday_after_Pentecost|-|-|1|-|Wis 10:10-14|Matt 10:34-42 +2026-09-29|1|w|Dedication of St. Michael the Archangel|Feria_III_after_XVIII_Sunday_after_Pentecost|-|-|1|-|Rev 1:1-5|Matt 18:1-10 +2026-09-30|3|w|St. Jerome|Feria_IV_after_XVIII_Sunday_after_Pentecost|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2026-10-01|4|g|Feria|Feria_V_after_XVIII_Sunday_after_Pentecost|St. Remigius|-|1|sancti:10-01:4:w|1 Cor. 1:4-8|Matt 9:1-8 +2026-10-02|3|w|Holy Guardian Angels|Feria_VI_after_XVIII_Sunday_after_Pentecost|-|-|1|-|Exod 23:20-23|Matt 18:1-10 +2026-10-03|3|w|St. Theresa of the Infant Jesus|Saturday_after_XVIII_Sunday_after_Pentecost|-|-|1|-|Isa 66:12-14|Matt 18:1-4 +2026-10-04|2|g|XIX Sunday after Pentecost|-|-|St. Francis of Assisi|1|-|Eph 4:23-28|Matt 22:1-14 +2026-10-05|4|g|Feria|Feria_II_after_XIX_Sunday_after_Pentecost|St. Placid & Companions|-|1|sancti:10-05:4:r|Eph 4:23-28|Matt 22:1-14 +2026-10-06|3|w|St. Bruno|Feria_III_after_XIX_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2026-10-07|2|w|Our Lady of the Rosary|Feria_IV_after_XIX_Sunday_after_Pentecost|St. Mark I|-|1|sancti:10-07t:4:r|Prov 8:22-24, 32-35.|Luke 1:26-38 +2026-10-08|3|w|St. Bridget of Sweden|Feria_V_after_XIX_Sunday_after_Pentecost|Ss. Sergio, Baccho, Marcello and Apulejo Martyrs|-|1|sancti:10-08c:4:r|1 Tim. 5:3-10.|Matt 13:44-52. +2026-10-09|3|w|St. John Leonardi|Feria_VI_after_XIX_Sunday_after_Pentecost|St. Dionysius and companions|-|1|sancti:10-09t:4:r|2 Cor 4:1-6; 4:15-18|Luke 10:1-9 +2026-10-10|3|w|St. Francis Borgia|Saturday_after_XIX_Sunday_after_Pentecost|-|-|1|-|Ecclus 45:1-6|Matt 19:27-29. +2026-10-11|2|g|XX Sunday after Pentecost|-|Maternity of the Blessed Virgin Mary|-|1|sancti:10-11:2:w|Eph 5:15-21|John 4:46-53 +2026-10-12|4|g|Feria|Feria_II_after_XX_Sunday_after_Pentecost|-|-|1|-|Eph 5:15-21|John 4:46-53 +2026-10-13|3|w|St. Edward|Feria_III_after_XX_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2026-10-14|3|r|St. Callistus I|Feria_IV_after_XX_Sunday_after_Pentecost|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-10-15|3|w|St. Teresa of Avila|Feria_V_after_XX_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-10-16|3|w|St. Hedwig|Feria_VI_after_XX_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2026-10-17|3|w|St. Margaret Mary Alacoque|Saturday_after_XX_Sunday_after_Pentecost|-|-|1|-|Eph 3:8-9, 14-19|Matt 11:25-30 +2026-10-18|2|g|XXI Sunday after Pentecost|-|St. Luke the Evangelist|-|1|sancti:10-18:2:r|Eph 6:10-17|Matt 18:23-35 +2026-10-19|3|w|St. Peter of Alcantara|Feria_II_after_XXI_Sunday_after_Pentecost|-|-|1|-|Phil 3:7-12|Luke 12:32-34 +2026-10-20|3|w|St. John Cantius|Feria_III_after_XXI_Sunday_after_Pentecost|-|-|1|-|James 2:12-17|Luke 12:35-40 +2026-10-21|4|g|Feria|Feria_IV_after_XXI_Sunday_after_Pentecost|St. Hilarion;St. Ursula and Companions|-|1|sancti:10-21:4:w;sancti:10-21cc:4:r|Eph 6:10-17|Matt 18:23-35 +2026-10-22|4|g|Feria|Feria_V_after_XXI_Sunday_after_Pentecost|-|-|1|-|Eph 6:10-17|Matt 18:23-35 +2026-10-23|3|w|St. Anthony Mary Claret|Feria_VI_after_XXI_Sunday_after_Pentecost|-|-|1|-|Heb 7:23-27|Matt 24:42-47 +2026-10-24|3|w|St. Raphael the Archangel|Saturday_after_XXI_Sunday_after_Pentecost|-|-|1|-|Tob 12:7-15|John 5:1-4 +2026-10-25|1|w|Christ the King|XXII_Sunday_after_Pentecost|-|Sts. Chrysanthus & Daria|1|-|Col 1:12-20.|John 18:33-37 +2026-10-26|4|g|Feria|Feria_II_after_XXII_Sunday_after_Pentecost|St. Evaristus|-|1|sancti:10-26:4:r|Phil 1:6-11|Matt 22:15-21 +2026-10-27|4|g|Feria|Feria_III_after_XXII_Sunday_after_Pentecost|-|-|1|-|Phil 1:6-11|Matt 22:15-21 +2026-10-28|2|r|Sts. Simon & Jude|Feria_IV_after_XXII_Sunday_after_Pentecost|-|-|1|-|Eph. 4:7-13.|John 15:17-25 +2026-10-29|4|g|Feria|Feria_V_after_XXII_Sunday_after_Pentecost|-|-|1|-|Phil 1:6-11|Matt 22:15-21 +2026-10-30|4|g|Feria|Feria_VI_after_XXII_Sunday_after_Pentecost|-|-|1|-|Phil 1:6-11|Matt 22:15-21 +2026-10-31|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXII_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-11-01|1|w|All Saints|XXIII_Sunday_after_Pentecost|-|-|1|-|Apoc 7:2-12|Matt 5:1-12 +2026-11-02|1|b|Commemoration of All Souls|Feria_II_after_XXIII_Sunday_after_Pentecost|-|-|3|-|1 Cor. 15:51-57|John 5:25-29 +2026-11-03|4|g|Feria|Feria_III_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2026-11-04|3|w|St. Charles Borromeo|Feria_IV_after_XXIII_Sunday_after_Pentecost|Sts. Vitalis and Agricola, Martyrs|-|1|sancti:11-04cc:4:r|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2026-11-05|4|g|Feria|Feria_V_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2026-11-06|4|g|Feria|Feria_VI_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2026-11-07|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-11-08|2|g|V Sunday after Epiphany|-|-|Four Holy Crowned Martyrs|1|-|Col 3:12-17|Matt 13:24-30 +2026-11-09|2|w|Dedication of the Archbasilica of Our Holy Savior|Feria_II_after_V_Sunday_after_Epiphany|St. Theodore|-|1|sancti:11-09cc:4:r|Rev 21:2-5|Luke 19:1-10 +2026-11-10|3|w|St. Andrew Avellino|Feria_III_after_V_Sunday_after_Epiphany|Sts. Tryphonis, Respicii, et Nymphae|-|1|sancti:11-10o:4:r|Sir 31:8-11|Luke 12:35-40 +2026-11-11|3|w|St. Martin of Tours|Feria_IV_after_V_Sunday_after_Epiphany|St. Menna|-|1|sancti:11-11cc:4:r|Sir 44:16-27; 45:3-20|Luke 11:33-36 +2026-11-12|3|r|St. Martin I|Feria_V_after_V_Sunday_after_Epiphany|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-11-13|4|g|Feria|Feria_VI_after_V_Sunday_after_Epiphany|St. Didacus|-|1|sancti:11-13:4:w|Col 3:12-17|Matt 13:24-30 +2026-11-14|3|w|St. Josaphat|Saturday_after_V_Sunday_after_Epiphany|-|-|1|-|Heb 5:1-6|John 10:11-16 +2026-11-15|2|g|VI Sunday after Epiphany|-|-|St. Albert the Great|1|-|1 Thess. 1:2-10|Matt 13:31-35 +2026-11-16|3|w|St. Gertrude the Great|Feria_II_after_VI_Sunday_after_Epiphany|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2026-11-17|3|w|St. Gregory the Wonderworker|Feria_III_after_VI_Sunday_after_Epiphany|-|-|1|-|Sir 44:16-27; 45:3-20|Mark 11:22-24 +2026-11-18|3|w|Dedication of the Basilicas of Sts. Peter & Paul|Feria_IV_after_VI_Sunday_after_Epiphany|-|-|1|-|Rev 21:2-5|Luke 19:1-10 +2026-11-19|3|w|St. Elizabeth of Hungary|Feria_V_after_VI_Sunday_after_Epiphany|St. Pontian|-|1|sancti:11-19o:4:r|Prov 31:10-31|Matt 13:44-52. +2026-11-20|3|w|St. Felix of Valois|Feria_VI_after_VI_Sunday_after_Epiphany|-|-|1|-|1 Cor. 4:9-14|Luke 12:32-34 +2026-11-21|3|w|Presentation of the Blessed Virgin Mary|Saturday_after_VI_Sunday_after_Epiphany|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-11-22|2|g|XXIV Sunday after Pentecost|-|-|St. Cecilia|1|-|Col 1:9-14|Matt 24:15-35 +2026-11-23|3|r|St. Clement I|Feria_II_after_XXIV_Sunday_after_Pentecost|St. Felicity|-|1|sancti:11-23cc:4:r|Phil 3:17-21; 4:1-3|Matt 16:13-19 +2026-11-24|3|w|St. John of the Cross|Feria_III_after_XXIV_Sunday_after_Pentecost|St. Chrysogonus|-|1|sancti:11-24o:4:r|2 Tim 4:1-8|Matt 5:13-19 +2026-11-25|3|r|St. Catherine of Alexandria|Feria_IV_after_XXIV_Sunday_after_Pentecost|-|-|1|-|Sir 51:1-8; 51:12|Matt 25:1-13. +2026-11-26|3|w|St. Sylvester|Feria_V_after_XXIV_Sunday_after_Pentecost|St. Peter of Alexandria|-|1|sancti:11-26t:4:r|Ecclus 45:1-6|Matt 19:27-29. +2026-11-27|4|g|Feria|Feria_VI_after_XXIV_Sunday_after_Pentecost|-|-|1|-|Col 1:9-14|Matt 24:15-35 +2026-11-28|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIV_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2026-11-29|1|v|I Sunday of Advent|-|-|St. Saturninus|1|-|Rom 13:11-14|Luke 21:25-33 +2026-11-30|2|r|St. Andrew|Feria_II_after_I_Sunday_of_Advent|-|-|1|-|Rom 10:10-18|Matt 4:18-22 +2026-12-01|3|v|Feria III after I Sunday of Advent|-|-|-|1|-|Rom 13:11-14|Luke 21:25-33 +2026-12-02|3|r|St. Vivian|Feria_IV_after_I_Sunday_of_Advent|Feria IV after I Sunday of Advent|-|1|tempora:Adv1-3:3:v|Sir 51:13-17.|Matt 13:44-52. +2026-12-03|3|w|St. Francis Xavier|Feria_V_after_I_Sunday_of_Advent|Feria V after I Sunday of Advent|-|1|tempora:Adv1-4:3:v|Rom 10:10-18|Mark 16:15-18 +2026-12-04|3|w|St. Peter Chrysologus|Feria_VI_after_I_Sunday_of_Advent|Feria VI after I Sunday of Advent|-|1|tempora:Adv1-5:3:v|2 Tim 4:1-8|Matt 5:13-19 +2026-12-05|3|v|Sabbato after I Sunday of Advent|-|St. Sabbas|-|1|sancti:12-05:4:w|Rom 13:11-14|Luke 21:25-33 +2026-12-06|1|v|II Sunday of Advent|-|-|St. Nicholas|1|-|Rom 15:4-13|Matt 11:2-10 +2026-12-07|3|w|St. Ambrose|Feria_II_after_II_Sunday_of_Advent|Feria II after II Sunday of Advent|-|1|tempora:Adv2-1:3:v|2 Tim 4:1-8|Matt 5:13-19 +2026-12-08|1|w|Immaculate Conception of the Blessed Virgin Mary|Feria_III_after_II_Sunday_of_Advent|-|-|1|-|Prov 8:22-35|Luke 1:26-28 +2026-12-09|3|v|Feria IV after II Sunday of Advent|-|-|-|1|-|Rom 15:4-13|Matt 11:2-10 +2026-12-10|3|v|Feria V after II Sunday of Advent|-|St. Melchiades|-|1|sancti:12-10o:4:r|Rom 15:4-13|Matt 11:2-10 +2026-12-11|3|w|St. Damasus I|Feria_VI_after_II_Sunday_of_Advent|Feria VI after II Sunday of Advent|-|1|tempora:Adv2-5:3:v|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2026-12-12|3|v|Sabbato after II Sunday of Advent|-|-|-|1|-|Rom 15:4-13|Matt 11:2-10 +2026-12-13|1|pv|III Sunday of Advent|-|-|St. Lucy|1|-|Phil 4:4-7|John 1:19-28 +2026-12-14|3|pv|Feria II after III Sunday of Advent|-|-|-|1|-|Phil 4:4-7|John 1:19-28 +2026-12-15|3|pv|Feria III after III Sunday of Advent|-|-|-|1|-|Phil 4:4-7|John 1:19-28 +2026-12-16|2|v|Ember Wednesday of Advent|-|St. Eusebius|-|1|sancti:12-16:3:r|Isa 7:10-15|Luke 1:26-38 +2026-12-17|2|pv|Feria V after III Sunday of Advent|-|-|-|1|-|Phil 4:4-7|John 1:19-28 +2026-12-18|2|v|Ember Friday of Advent|-|-|-|1|-|Isa 11:1-5|Luke 1:39-47 +2026-12-19|2|v|Ember Saturday of Advent|-|-|-|1|-|2 Thess. 2:1-8|Luke 3:1-6 +2026-12-20|1|v|IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2026-12-21|2|r|St. Thomas|Feria_II_after_IV_Sunday_of_Advent|Feria II after IV Sunday of Advent|-|1|tempora:Adv4-1:2:v|Eph 2:19-22|John 20:24-29 +2026-12-22|2|v|Feria III after IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2026-12-23|2|v|Feria IV after IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2026-12-24|1|v|Vigil of Christmas|-|-|-|1|-|Rom 1:1-6|Matt 1:18-21 +2026-12-25|1|w|The Nativity of Our Lord|-|-|-|3|-|Titus 2:11-15|Luke 2:1-14 +2026-12-26|2|r|St. Stephen|-|For Octave of the Nativity|-|1|sancti:12-26c:4:w|Acts 6:8-10; 7:54-59|Matt 23:34-39 +2026-12-27|2|w|Sunday in the Octave of Christmas|-|St. John the Evangelist|For Octave of the Nativity|1|sancti:12-27:2:w|Gal 4:1-7|Luke 2:33-40 +2026-12-28|2|r|Holy Innocents|-|For Octave of the Nativity|-|1|sancti:12-28c:4:w|Apoc 14:1-5|Matt 2:13-18 +2026-12-29|2|w|Feria in the Octave of Christmas|-|St. Thomas Becket|-|1|sancti:12-29:4:r|Titus 3:4-7|Luke 2:15-20 +2026-12-30|2|w|Feria in the Octave of Christmas|-|-|-|1|-|Titus 3:4-7|Luke 2:15-20 +2026-12-31|2|w|Feria in the Octave of Christmas|-|St. Silvester|-|1|sancti:12-31:4:w|Titus 3:4-7|Luke 2:15-20 +2027-01-01|1|w|Octave Day of Christmas|-|-|-|1|-|Titus 2:11-15|Luke 2:21 +2027-01-02|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|-|Titus 3:4-7|Luke 2:15-20 +2027-01-03|2|w|Holy Name of Jesus|-|-|-|1|-|Acts 4:8-12|Luke 2:21 +2027-01-04|4|w|Feria|-|-|-|1|-|Titus 2:11-15|Luke 2:21 +2027-01-05|4|w|Feria|-|St. Telesphorus Pope and Martyr|-|1|sancti:01-05:4:r|Titus 2:11-15|Luke 2:21 +2027-01-06|1|w|Epiphany of the Lord|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2027-01-07|4|w|Feria|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2027-01-08|4|w|Feria|-|-|-|1|-|Isa 60:1-6|Matt 2:1-12 +2027-01-09|4|w|II Mass of the B. V. M. – Vultum Tuum|-|-|-|1|-|Titus 3:4-7|Luke 2:15-20 +2027-01-10|2|w|The Holy Family: Jesus, Mary & Joseph|-|-|-|1|-|Col 3:12-17|Luke 2:42-52 +2027-01-11|4|w|Feria|Feria_II_after_Epiphany|St. Hyginus Pope and Martyr|-|1|sancti:01-11cc:4:r|Rom 12:1-5|Luke 2:42-52 +2027-01-12|4|w|Feria|Feria_III_after_Epiphany|-|-|1|-|Rom 12:1-5|Luke 2:42-52 +2027-01-13|2|w|Commemoration of the Baptism of the Lord|Feria_IV_after_Epiphany|-|-|1|-|Isa 60:1-6|John 1:29-34 +2027-01-14|3|w|St. Hilary|Feria_V_after_Epiphany|S. Felicis|-|1|sancti:01-14cc:4:r|2 Tim 4:1-8|Matt 5:13-19 +2027-01-15|3|w|St. Paul, the First Hermit|Feria_VI_after_Epiphany|St. Maur, Abbot|-|1|sancti:01-15cc:4:w|Phil 3:7-12|Matt 11:25-30 +2027-01-16|3|r|St. Marcellus I|Saturday_after_Epiphany|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-01-17|2|g|II Sunday after Epiphany|-|-|St. Anthony|1|-|Rom 12:6-16|John 2:1-11 +2027-01-18|4|g|Feria|Feria_II_after_II_Sunday_after_Epiphany|St. Prisca|-|1|sancti:01-18r:4:w|Rom 12:6-16|John 2:1-11 +2027-01-19|4|g|Feria|Feria_III_after_II_Sunday_after_Epiphany|Sts. Marius, Martha, Audifax & Abachum;St. Canute, Martyr|-|1|sancti:01-19:4:r;sancti:01-19o:4:r|Rom 12:6-16|John 2:1-11 +2027-01-20|3|r|Sts. Fabian & Sebastian|Feria_IV_after_II_Sunday_after_Epiphany|-|-|1|-|Heb 11:33-39|Luke 6:17-23 +2027-01-21|3|r|St. Agnes|Feria_V_after_II_Sunday_after_Epiphany|-|-|1|-|Sir 51:1-8; 51:12|Matt 25:1-13. +2027-01-22|3|r|Sts. Vincent & Anastasius|Feria_VI_after_II_Sunday_after_Epiphany|-|-|1|-|Wis 3:1-8|Luke 21:9-19 +2027-01-23|3|w|St. Raymond of Peñafort|Saturday_after_II_Sunday_after_Epiphany|St. Emerentiana|-|1|sancti:01-23o:4:r|Sir 31:8-11|Luke 12:35-40 +2027-01-24|2|v|Septuagesima Sunday|-|-|St. Timothy|1|-|1 Cor. 9:24-27; 10:1-5|Matt 20:1-16 +2027-01-25|3|w|Conversion of St. Paul|Feria_II_after_Septuagesima|St. Peter|-|1|sancti:01-25c:4:w|Acts 9:1-22|Matt 19:27-29. +2027-01-26|3|r|St. Polycarp|Feria_III_after_Septuagesima|-|-|1|-|1 John 3:10-16|Matt 10:26-32. +2027-01-27|3|w|St. John Chrysostom|Feria_IV_after_Septuagesima|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-01-28|3|w|St. Peter Nolasco|Feria_V_after_Septuagesima|St. Agnes|-|1|sancti:01-28t:4:r|1 Cor. 4:9-14|Luke 12:32-34 +2027-01-29|3|w|St. Francis de Sales|Feria_VI_after_Septuagesima|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-01-30|3|r|St. Martina|Saturday_after_Septuagesima|-|-|1|-|Sir 51:1-8; 51:12|Matt 25:1-13. +2027-01-31|2|v|Sexagesima Sunday|-|-|St. John Bosco|1|-|2 Cor. 11:19-33; 12:1-9|Luke 8:4-15 +2027-02-01|3|r|St. Ignatius of Antioch|Feria_II_after_Sexagesima|-|-|1|-|Rom 8:35-39|John 12:24-26 +2027-02-02|2|w|Purification of the Blessed Virgin Mary|Feria_III_after_Sexagesimæ|-|-|1|-|Mal 3:1-4|Luke 2:22-32 +2027-02-03|4|v|Feria|Feria_IV_after_Sexagesimæ|St. Blaise|-|1|sancti:02-03:4:r|2 Cor. 11:19-33; 12:1-9|Luke 8:4-15 +2027-02-04|3|w|St. Andrew Corsini|Feria_V_after_Sexagesimæ|-|-|1|-|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2027-02-05|3|r|St. Agatha|Feria_VI_after_Sexagesimæ|-|-|1|-|1 Cor. 1:26-31|Matt 19:3-12. +2027-02-06|3|w|St. Titus|Saturday_after_Sexagesimæ|St. Dorothy|-|1|sancti:02-06o:4:r|Sir 44:16-27; 45:3-20|Luke 10:1-9 +2027-02-07|2|v|Quinquagesima Sunday|-|-|St. Romuald|1|-|1 Cor. 13:1-13|Luke 18:31-43 +2027-02-08|3|w|St. John of Matha|Feria_II_after_Quinquagesima|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-02-09|3|w|St. Cyril of Alexandria|Feria_III_after_Quinquagesima|St. Appollonia|-|1|sancti:02-09o:4:r|2 Tim 4:1-8|Matt 5:13-19 +2027-02-10|1|v|Ash Wednesday|-|-|St. Scholastica|1|-|Joel 2:12-19|Matt 6:16-21 +2027-02-11|3|v|Feria V after Ash Wednesday|-|Our Lady of Lourdes|-|1|sancti:02-11:3:w|Isa 38:1-6|Matt 8:5-13 +2027-02-12|3|v|Feria VI after Ash Wednesday|-|Seven Holy Servite Founders|-|1|sancti:02-12:3:w|Isa 58:1-9|Matt 5:43-48; 6:1-4 +2027-02-13|3|v|Saturday after Ash Wednesday|-|-|-|1|-|Isa 58:9-14|Mark 6:47-56 +2027-02-14|1|v|I Sunday of Lent|-|-|St. Valentine|1|-|2 Cor. 6:1-10|Matt 4:1-11 +2027-02-15|3|v|Feria II after the I Sunday of Lent|-|Sts. Faustinus & Jovita|-|1|sancti:02-15:4:r|Ezech 34:11-16|Matt 25:31-46 +2027-02-16|3|v|Feria III after the I Sunday of Lent|-|-|-|1|-|Isa 55:6-11|Matt 21:10-17 +2027-02-17|2|v|Ember Wednesday of Lent|-|-|-|1|-|3 Kgs. 19:3-8|Matt 12:38-50 +2027-02-18|3|v|Feria V after the I Sunday of Lent|-|St. Simeon|-|1|sancti:02-18:4:r|Ezech 18:1-9|Matt 15:21-28 +2027-02-19|2|v|Ember Friday of Lent|-|-|-|1|-|Ezech 18:20-28|John 5:1-15 +2027-02-20|2|v|Ember Saturday of Lent|-|-|-|1|-|1 Thess. 5:14-23|Matt 17:1-9 +2027-02-21|1|v|II Sunday of Lent|-|-|-|1|-|1 Thess. 4:1-7|Matt 17:1-9 +2027-02-22|2|w|Chair of St. Peter|Feria_II_after_the_II_Sunday_of_Lent|St. Paul;Feria II after the II Sunday of Lent|-|1|sancti:02-22c:4:r;tempora:Quad2-1:3:v|1 Pet 1:1-7|Matt 16:13-19 +2027-02-23|3|v|Feria III after the II Sunday of Lent|-|St. Peter Damien|-|1|sancti:02-23r:3:w|3 Kings 17:8-16|Matt 23:1-12 +2027-02-24|2|r|St. Matthias|Feria_IV_after_the_II_Sunday_of_Lent|Feria IV after the II Sunday of Lent|-|1|tempora:Quad2-3:3:v|Acts 1:15-26|Matt 11:25-30 +2027-02-25|3|v|Feria V after the II Sunday of Lent|-|-|-|1|-|Jer 17:5-10|Luke 16:19-31 +2027-02-26|3|v|Feria VI after the II Sunday of Lent|-|-|-|1|-|Gen 37:6-22|Matt 21:33-46 +2027-02-27|3|v|Saturday after the II Sunday of Lent|-|St. Gabriel of Our Lady of Sorrows|-|1|sancti:02-27:3:w|Gen 27:6-40|Luke 15:11-32 +2027-02-28|1|v|III Sunday of Lent|-|-|-|1|-|Eph 5:1-9|Luke 11:14-28 +2027-03-01|3|v|Feria II after the III Sunday of Lent|-|-|-|1|-|4 Kings, 5:1-15|Luke 4:23-30 +2027-03-02|3|v|Feria III after the III Sunday of Lent|-|-|-|1|-|4 Kings 4:1-7|Matt 18:15-22 +2027-03-03|3|v|Feria IV after the III Sunday of Lent|-|-|-|1|-|Ex 20:12-24|Matt 15:1-20 +2027-03-04|3|v|Feria V after the III Sunday of Lent|-|St. Casimir;St. Lucius|-|1|sancti:03-04:3:w;sancti:03-04cc:4:r|Jer 7:1-7|Luke 4:38-44. +2027-03-05|3|v|Feria VI after the III Sunday of Lent|-|-|-|1|-|Num 20:1, 3; 6-13.|John 4:5-42 +2027-03-06|3|v|Saturday after the III Sunday of Lent|-|Sts. Felicitas & Perpetua|-|1|sancti:03-06:3:r|Dan 13:1-9, 15-17, 19-30, 33-62.|John 8:1-11 +2027-03-07|1|pv|IV Sunday of Lent|-|-|St. Thomas Aquinas|1|-|Gal 4:22-31|John 6:1-15 +2027-03-08|3|v|Feria II after the IV Sunday of Lent|-|St. John of God|-|1|sancti:03-08:3:w|3 Kings 3:16-28|John 2:13-25 +2027-03-09|3|v|Feria III after the IV Sunday of Lent|-|St. Frances Rome|-|1|sancti:03-09:3:w|Ex 32:7-14|John 7:14-31 +2027-03-10|3|v|Feria IV after the IV Sunday of Lent|-|Forty Holy Martyrs of Sebaste|-|1|sancti:03-10:3:r|Isa. 1:16-19|John 9:1-38 +2027-03-11|3|v|Feria V after the IV Sunday of Lent|-|-|-|1|-|4 Kings 4:25-38|Luke 7:11-16 +2027-03-12|3|v|Feria VI after the IV Sunday of Lent|-|St. Gregory the Great|-|1|sancti:03-12:3:w|3 Kings 17:17-24|John 11:1-45 +2027-03-13|3|v|Saturday after the IV Sunday of Lent|-|-|-|1|-|Isa 49:8-15|John 8:12-20 +2027-03-14|1|v|Passion Sunday|-|-|-|1|-|Heb 9:11-15.|John 8:46-59. +2027-03-15|3|v|Feria II of Passion Week|-|-|-|1|-|Jonas 3:1-10|John 7:32-39 +2027-03-16|3|v|Feria III of Passion Week|-|-|-|1|-|Dan 14:27-42|John 7:1-13 +2027-03-17|3|v|Feria IV of Passion Week|-|St. Patrick|-|1|sancti:03-17:3:w|Lev 19:1-2, 11-19, 25|John 10:22-38 +2027-03-18|3|v|Feria V of Passion Week|-|St. Cyril of Jerusalem|-|1|sancti:03-18:3:w|Dan 3:25, 34-45.|Luke 7:36-50 +2027-03-19|3|v|Feria VI of Passion Week|-|For Our Lady of the Seven Sorrows|St. Joseph, Spouse of the Bl. Virgin Mary|1|tempora:Quad5-5Feriac:4:w|Jer 17:13-18|John 11:47-54 +2027-03-20|3|v|Saturday of Passion Week|-|-|-|1|-|Jer 18:18-23|John 12:10-36 +2027-03-21|1|rv|Palm Sunday|-|-|St. Benedict|1|-|Phil 2:5-11|Matt. 26:36-75; 27:1-60. +2027-03-22|1|v|Feria II of Holy Week|-|-|-|1|-|Isa 50:5-10|John 12:1-9 +2027-03-23|1|v|Feria III of Holy Week|-|-|-|1|-|Jer 11:18-20|Mark 14:32-72; 15, 1-46 +2027-03-24|1|v|Feria IV of Holy Week|-|-|St. Gabriel the Archangel|1|-|Isa 53:1-12|Luc 22:39-71; 23:1-53 +2027-03-25|1|w|Holy Thursday|-|-|Annunciation of the Blessed Virgin Mary|1|-|1 Cor 11:20-32.|Joann 13:1-15 +2027-03-26|1|bv|Good Friday|-|-|-|1|-|-|- +2027-03-27|1|vw|Holy Saturday|-|-|St. John Damascene|1|-|Col 3:1-4|Matt 28:1-7 +2027-03-28|1|w|Easter Sunday|-|-|St. John of Capistrano|1|-|1 Cor 5:7-8|Mark 16:1-7 +2027-03-29|1|w|Monday in the Octave of Easter|-|-|-|1|-|Acts 10:37-43.|Luke 24:13-35 +2027-03-30|1|w|Tuesday in the Octave of Easter|-|-|-|1|-|Acts 13:16; 13:26-33|Luke 24:36-47 +2027-03-31|1|w|Wednesday in the Octave of Easter|-|-|-|1|-|Acts 3:13-15; 3:17-19|John 21:1-14 +2027-04-01|1|w|Thursday in the Octave of Easter|-|-|-|1|-|Acts 8:26-40|John 20:11-18 +2027-04-02|1|w|Friday in the Octave of Easter|-|-|St. Francis of Paola|1|-|1 Pet 3:18-22|Matt 28:16-20 +2027-04-03|1|w|Saturday in the Octave of Easter|-|-|-|1|-|1 Pet 2:1-10|John 20:1-9 +2027-04-04|1|w|Low Sunday|-|-|St. Isidore of Seville|1|-|1 John 5:4-10|John 20. 19-31 +2027-04-05|1|w|Annunciation of the Blessed Virgin Mary|Monday_after_I_Sunday_after_Easter|-|St. Vincent Ferrer|1|-|Isa 7:10-15|Luke 1:26-38 +2027-04-06|4|w|Feria|Tuesday_after_I_Sunday_after_Easter|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2027-04-07|4|w|Feria|Wednesday_after_I_Sunday_after_Easter|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2027-04-08|4|w|Feria|Thursday_after_I_Sunday_after_Easter|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2027-04-09|4|w|Feria|Friday_after_I_Sunday_after_Easter|-|-|1|-|1 John 5:4-10|John 20. 19-31 +2027-04-10|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_I_Sunday_after_Easter|-|-|1|-|Ecclus 24:14-16|John 19:25-27 +2027-04-11|2|w|II Sunday after Easter|-|-|St. Leo the Great|1|-|1 Pet 2:21-25|John 10:11-16 +2027-04-12|4|w|Feria|Monday_after_II_Sunday_after_Easter|-|-|1|-|1 Pet 2:21-25|John 10:11-16 +2027-04-13|3|r|St. Hermenegild|Tuesday_after_II_Sunday_after_Easter|-|-|1|-|Wis 10:10-14|Luke 14:26-33. +2027-04-14|3|r|St. Justin|Wednesday_after_II_Sunday_after_Easter|Sts. Tiburtius, Valerian et Maximus, Martyrs|-|1|sancti:04-14t:4:r|1 Cor 1:18-25; 1:30;|Luke 12:2-8 +2027-04-15|4|w|Feria|Thursday_after_II_Sunday_after_Easter|-|-|1|-|1 Pet 2:21-25|John 10:11-16 +2027-04-16|4|w|Feria|Friday_after_II_Sunday_after_Easter|-|-|1|-|1 Pet 2:21-25|John 10:11-16 +2027-04-17|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_II_Sunday_after_Easter|St. Anicetus|-|1|sancti:04-17:4:r|Ecclus 24:14-16|John 19:25-27 +2027-04-18|2|w|III Sunday after Easter|-|-|-|1|-|1 Pet 2:11-19|John 16:16-22 +2027-04-19|4|w|Feria|Monday_after_III_Sunday_after_Easter|-|-|1|-|1 Pet 2:11-19|John 16:16-22 +2027-04-20|4|w|Feria|Tuesday_after_III_Sunday_after_Easter|-|-|1|-|1 Pet 2:11-19|John 16:16-22 +2027-04-21|3|w|St. Anselm|Wednesday_after_III_Sunday_after_Easter|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-04-22|3|r|Sts. Soter & Caius|Thursday_after_III_Sunday_after_Easter|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-04-23|4|w|Feria|Friday_after_III_Sunday_after_Easter|St. George|-|1|sancti:04-23:4:r|1 Pet 2:11-19|John 16:16-22 +2027-04-24|3|r|St. Fidelis of Sigmaringen|Saturday_after_III_Sunday_after_Easter|-|-|1|-|Wis 5:1-5|John 15:1-7 +2027-04-25|2|w|IV Sunday after Easter|-|St. Mark|Pro rogationibus|1|sancti:04-25:2:r|Jas 1:17-21|John 16:5-14 +2027-04-26|3|r|Sts. Cletus & Marcellinus|Monday_after_IV_Sunday_after_Easter|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-04-27|3|w|St. Peter Canisius|Tuesday_after_IV_Sunday_after_Easter|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-04-28|3|w|St. Paul of the Cross|Wednesday_after_IV_Sunday_after_Easter|-|-|1|-|1 Cor 1:17-25.|Luke 10:1-9 +2027-04-29|3|r|St. Peter of Verona|Thursday_after_IV_Sunday_after_Easter|-|-|1|-|2 Tim. 2:8-10; 3:10-12.|Matt 10:34-42 +2027-04-30|3|w|St. Catherine of Siena|Friday_after_IV_Sunday_after_Easter|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-05-01|1|w|St. Joseph the Workman|Saturday_after_IV_Sunday_after_Easter|-|-|1|-|Col. 3:14-15, 17, 23-24|Matt 13:54-58 +2027-05-02|2|w|V Sunday after Easter|-|-|St. Athanasius|1|-|Jas 1:22-27|John 16:23-30 +2027-05-03|4|w|Feria|The_Minor_Litanies_–_Rogations|Sts. Alexander & Companions|-|1|sancti:05-03r:4:r|Jas 1:22-27|John 16:23-30 +2027-05-04|3|w|St. Monica|The_Minor_Litanies_–_Rogations|-|-|1|-|1 Tim. 5:3-10.|Luke 7:11-16 +2027-05-05|2|w|Vigil of the Ascension|-|St. Pius V|-|1|sancti:05-05:3:w|Eph. 4:7-13.|John 17:1-11. +2027-05-06|1|w|Ascension of the Lord|-|-|-|1|-|Acts 1:1-11|Mark 16:14-20 +2027-05-07|3|r|St. Stanislaus|Feria_VI_after_the_Ascension|-|-|1|-|Wis 5:1-5|John 15:1-7 +2027-05-08|4|w|IV Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_the_Ascension|-|-|1|-|Ecclus 24:14-16|John 19:25-27 +2027-05-09|2|w|Sunday after the Ascension|-|-|St. Gregory of Nazianzen|1|-|1 Pet 4:7-11.|John 15:26-27; 16:1-4. +2027-05-10|3|w|St. Antoninus|Feria_II_after_the_Ascension|St. Gordiano and Epimacho|-|1|sancti:05-10o:4:r|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2027-05-11|2|r|Sts. Philip & James|Feria_III_after_the_Ascension|-|-|1|-|Wis. 5:1-5|John 14:1-13 +2027-05-12|3|r|Sts. Nereus, Achilleus, Domitilla, & Pancras|Feria_IV_after_the_Ascension|-|-|1|-|Wis. 5:1-5|John 4:46-53 +2027-05-13|3|w|St. Robert Bellarmine|Feria_V_after_the_Ascension|-|-|1|-|Wis 7:7-14.|Matt 5:13-19 +2027-05-14|4|w|Feria|Feria_VI_after_the_Ascension|St. Boniface|-|1|sancti:05-14:4:r|1 Pet 4:7-11.|John 15:26-27; 16:1-4. +2027-05-15|1|r|Saturday after the Ascension|-|-|St. John Baptist de la Salle|1|-|Acts 19:1-8.|John 14:15-21. +2027-05-16|1|r|Pentecost Sunday|-|-|St. Ubaldus|1|-|Acts 2:1-11.|John 14:23-31. +2027-05-17|1|r|Monday after Pentecost|-|-|St. Paschal Baylon|1|-|Acts 10:34, 42-48|John 3:16-21 +2027-05-18|1|r|Tuesday after Pentecost|-|-|St. Venantius|1|-|Acts 8:14-17.|John 10:1-10. +2027-05-19|1|r|Ember Wednesday of Pentecost|-|-|St. Peter Celestine;St. Pudentiana Virginis|1|-|Acts 5:12-16|John 6:44-52. +2027-05-20|1|r|Thursday after Pentecost|-|-|St. Bernardine of Siena|1|-|Acts 8:5-8|Luke 9:1-6 +2027-05-21|1|r|Ember Friday of Pentecost|-|-|-|1|-|Joel 2:23-24; 26-27|Luke 5:17-26 +2027-05-22|1|r|Ember Saturday of Pentecost|-|-|-|1|-|Rom 5:1-5.|Luke 4:38-44. +2027-05-23|1|w|Trinity Sunday|-|-|-|1|-|Rom 11:33-36.|Matt 28:18-20 +2027-05-24|4|g|Feria|Feria_II_after_I_Sunday_after_Pentecost|-|-|1|-|1 John 4:8-21|Luke 6:36-42 +2027-05-25|3|w|St. Gregory VII|Feria_III_after_I_Sunday_after_Pentecost|St. Urban, Pope and Martyr|-|1|sancti:05-25o:4:r|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-05-26|3|w|St. Philip Neri|Feria_IV_after_I_Sunday_after_Pentecost|S. Eleutherius|-|1|sancti:05-26o:4:r|Wis 7:7-14.|Luke 12:35-40 +2027-05-27|1|w|Corpus Christi|-|-|St. Bede the Venerable;St. John I|1|-|1 Cor. 11:23-29.|John 6:56-59. +2027-05-28|3|w|St. Augustine of Canterbury|Feria_V_after_I_Sunday_after_Pentecost|-|-|1|-|1 Thess 2:2-9|Luke 10:1-9 +2027-05-29|3|w|St. Mary Magdalene de Pazzi|Saturday_after_I_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-05-30|2|g|II Sunday after Pentecost|-|-|St. Felix I|1|-|1 John 3:13-18.|Luke 14:16-24. +2027-05-31|2|w|Queenship of the Blessed Virgin Mary|Feria_II_after_II_Sunday_after_Pentecost|St. Petronilla|-|1|sancti:05-31c:4:w|Eccli 24:5; 14:7; 14:9-11; 24:30-31|Luke 1:26-33 +2027-06-01|3|w|St. Angela Merici|Feria_III_after_II_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-06-02|4|g|Feria|Feria_IV_after_II_Sunday_after_Pentecost|Sts. Marcellinus, Peter, & Erasmus|-|1|sancti:06-02:4:r|1 John 3:13-18.|Luke 14:16-24. +2027-06-03|4|g|Feria|Feria_V_after_II_Sunday_after_Pentecost|-|-|1|-|1 John 3:13-18.|Luke 14:16-24. +2027-06-04|1|w|Sacred Heart of Jesus|-|-|St. Francis Caracciolo|1|-|Eph. 3:8-12, 14-19|John 19:31-37 +2027-06-05|3|r|St. Boniface|Saturday_after_II_Sunday_after_Pentecost|-|-|1|-|Ecclus 44:1-15|Matt 5:1-12 +2027-06-06|2|g|III Sunday after Pentecost|-|-|St. Norbert|1|-|1 Pet. 5:6-11|Luke 15:1-10 +2027-06-07|4|g|Feria|Feria_II_after_III_Sunday_after_Pentecost|-|-|1|-|1 Pet. 5:6-11|Luke 15:1-10 +2027-06-08|4|g|Feria|Feria_III_after_III_Sunday_after_Pentecost|-|-|1|-|1 Pet. 5:6-11|Luke 15:1-10 +2027-06-09|4|g|Feria|Feria_IV_after_III_Sunday_after_Pentecost|Sts. Primus & Felicianus|-|1|sancti:06-09:4:r|1 Pet. 5:6-11|Luke 15:1-10 +2027-06-10|3|w|St. Margaret of Scotland|Feria_V_after_III_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2027-06-11|3|r|St. Barnabas|Feria_VI_after_III_Sunday_after_Pentecost|-|-|1|-|Acts 11:21-26; 13:1-3|Matt 10:16-22 +2027-06-12|3|r|St. John of San Fecundo|Saturday_after_III_Sunday_after_Pentecost|St. Basilidus|-|1|sancti:06-12o:4:r|Sir 31:8-11|Luke 12:35-40 +2027-06-13|2|g|IV Sunday after Pentecost|-|-|St. Anthony of Padua|1|-|Rom 8:18-23|Luke 5:1-11 +2027-06-14|3|w|St. Basil the Great|Feria_II_after_IV_Sunday_after_Pentecost|-|-|1|-|2 Tim 4:1-8|Luke 14:26-35 +2027-06-15|4|g|Feria|Feria_III_after_IV_Sunday_after_Pentecost|St. Vitus|-|1|sancti:06-15:4:w|Rom 8:18-23|Luke 5:1-11 +2027-06-16|4|g|Feria|Feria_IV_after_IV_Sunday_after_Pentecost|-|-|1|-|Rom 8:18-23|Luke 5:1-11 +2027-06-17|3|w|St. Gregory Barbarigo|Feria_V_after_IV_Sunday_after_Pentecost|-|-|1|-|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2027-06-18|3|r|St. Ephrem of Syria|Feria_VI_after_IV_Sunday_after_Pentecost|Ss. Marcus and Marcellianus|-|1|sancti:06-18t:4:r|2 Tim 4:1-8|Matt 5:13-19 +2027-06-19|3|r|St. Julia of Falconieri|Saturday_after_IV_Sunday_after_Pentecost|Sts. Gervasius and Protasius|-|1|sancti:06-19o:4:r|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-06-20|2|g|V Sunday after Pentecost|-|-|St. Silverius|1|-|1 Pet 3:8-15.|Matt 5:20-24. +2027-06-21|3|w|St. Aloysius Gongzaga|Feria_II_after_V_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Matt 22:29-40 +2027-06-22|3|w|St. Paulinus of Nola|Feria_III_after_V_Sunday_after_Pentecost|-|-|1|-|2 Cor. 8:9-15|Luke 12:32-34 +2027-06-23|2|v|Vigil of the Nativity of St. John the Baptist|Feria_IV_after_V_Sunday_after_Pentecost|-|-|1|-|Jer 1:4-10|Luke 1:5-17 +2027-06-24|1|w|Nativity of St. John the Baptist|Feria_V_after_V_Sunday_after_Pentecost|-|-|1|-|Isa 49:1-3, 5-7.|Luke 1:57-68 +2027-06-25|3|w|St. William|Feria_VI_after_V_Sunday_after_Pentecost|-|-|1|-|Ecclus 45:1-6|Matt 19:27-29. +2027-06-26|3|r|Sts. John & Paul|Saturday_after_V_Sunday_after_Pentecost|-|-|1|-|Eccli 44:10-15|Luke 12:1-8 +2027-06-27|2|g|VI Sunday after Pentecost|-|-|-|1|-|Rom 6:3-11.|Mark 8:1-9 +2027-06-28|2|v|Vigil of Sts. Peter & Paul|Feria_II_after_VI_Sunday_after_Pentecost|-|-|1|-|Acts 3:1-10|John 21:15-19 +2027-06-29|1|r|Sts. Peter & Paul|Feria_III_after_VI_Sunday_after_Pentecost|-|-|1|-|Acts 12:1-11|Matt 16:13-19 +2027-06-30|3|r|In Commemoratione Sancti Pauli Apostoli|Feria_IV_after_VI_Sunday_after_Pentecost|-|-|1|-|Gal 1:11-20|Matt 10:16-22 +2027-07-01|1|r|The Precious Blood of Our Lord Jesus Christ|Feria_V_after_VI_Sunday_after_Pentecost|-|-|1|-|Heb 9:11-15.|John 19:30-35 +2027-07-02|2|w|Visitation of the Blessed Virgin Mary|Feria_VI_after_VI_Sunday_after_Pentecost|SS. Processus and Martinian|-|1|sancti:07-02cc:4:r|Song 2:8-14|Luke 1:39-47 +2027-07-03|3|r|St. Irenaeus|Saturday_after_VI_Sunday_after_Pentecost|-|-|1|-|2 Tim. 3:14-17; 4:1-5|Matt 10:28-33 +2027-07-04|2|g|VII Sunday after Pentecost|-|-|-|1|-|Rom 6:19-23|Matt 7:15-21 +2027-07-05|3|w|St. Anthony Mary Zaccariah|Feria_II_after_VII_Sunday_after_Pentecost|-|-|1|-|1 Tim. 4:8-16|Mark 10:15-21 +2027-07-06|4|g|Feria|Feria_III_after_VII_Sunday_after_Pentecost|-|-|1|-|Rom 6:19-23|Matt 7:15-21 +2027-07-07|3|w|Sts. Cyril & Methodius|Feria_IV_after_VII_Sunday_after_Pentecost|-|-|1|-|Heb 7:23-27|Luke 10:1-9 +2027-07-08|3|w|St. Elizabeth of Portugal|Feria_V_after_VII_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2027-07-09|4|g|Feria|Feria_VI_after_VII_Sunday_after_Pentecost|-|-|1|-|Rom 6:19-23|Matt 7:15-21 +2027-07-10|3|r|Seven Holy Brothers and Sts. Rufina & Secunda|Saturday_after_VII_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 12:46-50 +2027-07-11|2|g|VIII Sunday after Pentecost|-|-|St. Pius I|1|-|Rom 8:12-17|Luke 16:1-9 +2027-07-12|3|r|St. John Gualbert|Feria_II_after_VIII_Sunday_after_Pentecost|Ss. Naboris et Felicis|-|1|sancti:07-12o:4:r|Ecclus 45:1-6|Matt 5:43-48 +2027-07-13|4|g|Feria|Feria_III_after_VIII_Sunday_after_Pentecost|-|-|1|-|Rom 8:12-17|Luke 16:1-9 +2027-07-14|3|w|St. Bonaventure|Feria_IV_after_VIII_Sunday_after_Pentecost|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-07-15|3|w|St. Henry the Emperor|Feria_V_after_VIII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-07-16|4|g|Feria|Feria_VI_after_VIII_Sunday_after_Pentecost|Our Lady of Mt. Carmel|-|1|sancti:07-16:4:w|Rom 8:12-17|Luke 16:1-9 +2027-07-17|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_VIII_Sunday_after_Pentecost|St. Alexis|-|1|sancti:07-17:4:w|Ecclus 24:14-16|Luke 11:27-28 +2027-07-18|2|g|IX Sunday after Pentecost|-|-|Camillus de Lellis;Ss. Symphorosa and sons|1|-|1 Cor. 10:6-13|Luke 19:41-47 +2027-07-19|3|w|St. Vincent de Paul|Feria_II_after_IX_Sunday_after_Pentecost|-|-|1|-|1 Cor. 4:9-14|Luke 10:1-9 +2027-07-20|3|r|St. Jerome Emiliani|Feria_III_after_IX_Sunday_after_Pentecost|St. Margaret|-|1|sancti:07-20o:4:w|Isa 58:7-11|Matt 19:13-21 +2027-07-21|3|w|St. Laurence of Brindisi|Feria_IV_after_IX_Sunday_after_Pentecost|St. Praxedis Virginis|-|1|sancti:07-21:4:w|2 Tim 4:1-8|Matt 5:13-19 +2027-07-22|3|w|St. Mary Magdalene|Feria_V_after_IX_Sunday_after_Pentecost|-|-|1|-|Song 3:2-5; 8:6-7|Luke 7:36-50 +2027-07-23|3|w|St. Apollinaris|Feria_VI_after_IX_Sunday_after_Pentecost|S. Liborii|-|1|sancti:07-23cc:4:r|1 Pet. 5:1-11|Luke 22:24-30 +2027-07-24|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IX_Sunday_after_Pentecost|St. Christina|-|1|sancti:07-24r:4:r|Ecclus 24:14-16|Luke 11:27-28 +2027-07-25|2|g|X Sunday after Pentecost|-|St. James the Greater|St. Christopher|1|sancti:07-25:2:r|1 Cor. 12:2-11|Luke 18:9-14 +2027-07-26|2|w|St. Anne, Mother of the Blessed Virgin|Feria_II_after_X_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2027-07-27|4|g|Feria|Feria_III_after_X_Sunday_after_Pentecost|St. Pantaleon|-|1|sancti:07-27:4:r|1 Cor. 12:2-11|Luke 18:9-14 +2027-07-28|3|r|Sts. Nazarius & Celsus, St. Victor I & St. Innocent I|Feria_IV_after_X_Sunday_after_Pentecost|-|-|1|-|Wis 10:17-20|Luke 21:9-19 +2027-07-29|3|r|St. Martha|Feria_V_after_X_Sunday_after_Pentecost|Ss. Felicis, Simplicii, Faustini et Beatricis|-|1|sancti:07-29cc:4:r|2 Cor 10:17-18; 11:1-2|Luke 10:38-42 +2027-07-30|4|g|Feria|Feria_VI_after_X_Sunday_after_Pentecost|Sts. Abdon & Sennen|-|1|sancti:07-30:4:r|1 Cor. 12:2-11|Luke 18:9-14 +2027-07-31|3|w|St. Ignatius Loyola|Saturday_after_X_Sunday_after_Pentecost|-|-|1|-|2 Tim. 2:8-10; 3:10-12.|Luke 10:1-9 +2027-08-01|2|g|XI Sunday after Pentecost|-|-|Holy Machabees|1|-|1 Cor. 15:1-10|Mark 7:31-37 +2027-08-02|3|r|St. Alphonsus Liguori|Feria_II_after_XI_Sunday_after_Pentecost|St. Stephen I, Pope and Martyr|-|1|sancti:08-02o:4:r|2 Tim. 2:1-7|Luke 10:1-9 +2027-08-03|4|g|Feria|Feria_III_after_XI_Sunday_after_Pentecost|-|-|1|-|1 Cor. 15:1-10|Mark 7:31-37 +2027-08-04|3|w|St. Dominic|Feria_IV_after_XI_Sunday_after_Pentecost|-|-|1|-|2 Tim. 4:1-8|Luke 12:35-40 +2027-08-05|3|w|Dedication of the Basilica of St. Mary Major|Feria_V_after_XI_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2027-08-06|2|w|Transfiguration of Our Lord|Feria_VI_after_XI_Sunday_after_Pentecost|Pope Sixtus II, Felicissimus and Agapitus, Martyrs|-|1|sancti:08-06cc:4:r|2 Pet. 1:16-19|Matt 17:1-9 +2027-08-07|3|w|St. Cajetan|Saturday_after_XI_Sunday_after_Pentecost|St. Donatus|-|1|sancti:08-07o:4:r|Sir 31:8-11|Matt 6:24-33 +2027-08-08|2|g|XII Sunday after Pentecost|-|-|St. John Mary Vianney;Ss. Cyriacus, Largus and Smaragdus, Martyrs|1|-|2 Cor. 3:4-9|Luke 10:23-37 +2027-08-09|3|r|Vigil of St. Lawrence|Feria_II_after_XII_Sunday_after_Pentecost|St. Romanus|-|1|sancti:08-09cc:4:r|Ecclus 51:1-8, 12|Matt 16:24-27 +2027-08-10|2|r|St. Lawrence|Feria_III_after_XII_Sunday_after_Pentecost|-|-|1|-|2 Cor. 9:6-10|John 12:24-26 +2027-08-11|4|g|Feria|Feria_IV_after_XII_Sunday_after_Pentecost|Sts. Tiburtius & Susanna|-|1|sancti:08-11:4:r|2 Cor. 3:4-9|Luke 10:23-37 +2027-08-12|3|w|St. Clare|Feria_V_after_XII_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-08-13|4|g|Feria|Feria_VI_after_XII_Sunday_after_Pentecost|Sts. Hippolytus & Cassian|-|1|sancti:08-13:4:r|2 Cor. 3:4-9|Luke 10:23-37 +2027-08-14|2|w|Vigil of the Assumption|Saturday_after_XII_Sunday_after_Pentecost|St. Eusebius|-|1|sancti:08-14cc:4:r|Sir 24:23-31|Luke 11:27-28 +2027-08-15|1|w|Assumption of the Blessed Virgin Mary|XIII_Sunday_after_Pentecost|-|-|1|-|Judith 13:22-25; 13:15; 13:10|Luke 1:41-50 +2027-08-16|2|w|St. Joachim, Father of the Blessed Virgin|Feria_II_after_XIII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Matt 1:1-16 +2027-08-17|3|w|St. Hyacinth|Feria_III_after_XIII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-08-18|4|g|Feria|Feria_IV_after_XIII_Sunday_after_Pentecost|St. Agapitus|-|1|sancti:08-18r:4:w|Gal 3:16-22|Luke 17:11-19 +2027-08-19|3|w|St. John Eudes|Feria_V_after_XIII_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-08-20|3|w|St. Bernard of Clairvaux|Feria_VI_after_XIII_Sunday_after_Pentecost|-|-|1|-|Ecclus 39:6-14|Matt 5:13-19 +2027-08-21|3|w|St. Jane Frances de Chantal|Saturday_after_XIII_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2027-08-22|2|g|XIV Sunday after Pentecost|-|Immaculate Heart of Mary|Sts. Timothy, Hippolytus and Symphorianus, Martyrs|1|sancti:08-22:2:w|Gal 5:16-24|Matt 6:24-33 +2027-08-23|3|w|St. Philip Benizi|Feria_II_after_XIV_Sunday_after_Pentecost|-|-|1|-|1 Cor. 4:9-14|Luke 12:32-34 +2027-08-24|2|r|St. Bartholomew|Feria_III_after_XIV_Sunday_after_Pentecost|-|-|1|-|1 Cor. 12:27-31|Luke 6:12-19 +2027-08-25|3|w|St. Louis IX|Feria_IV_after_XIV_Sunday_after_Pentecost|-|-|1|-|Wis 10:10-14|Luke 19:12-26 +2027-08-26|4|g|Feria|Feria_V_after_XIV_Sunday_after_Pentecost|St. Zephyrinus|-|1|sancti:08-26:4:r|Gal 5:16-24|Matt 6:24-33 +2027-08-27|3|w|St. Joseph Calasance|Feria_VI_after_XIV_Sunday_after_Pentecost|-|-|1|-|Wis 10:10-14|Matt 18:1-5 +2027-08-28|3|r|St. Augustine|Saturday_after_XIV_Sunday_after_Pentecost|St. Hermes|-|1|sancti:08-28cc:4:r|2 Tim 4:1-8|Matt 5:13-19 +2027-08-29|2|g|XV Sunday after Pentecost|-|-|Beheading of St. John the Baptist;St. Sabina|1|-|Gal 5:25-26; 6:1-10|Luke 7:11-16 +2027-08-30|3|r|St. Rose of Lima|Feria_II_after_XV_Sunday_after_Pentecost|Sts. Felix and Adauctus|-|1|sancti:08-30o:4:r|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-08-31|3|w|St. Raymond Nonnatus|Feria_III_after_XV_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-09-01|4|g|Feria|Feria_IV_after_XV_Sunday_after_Pentecost|St. Giles;Twelve Holy Brothers, Martyrs|-|1|sancti:09-01:4:w;sancti:09-01cc:4:r|Gal 5:25-26; 6:1-10|Luke 7:11-16 +2027-09-02|3|w|St. Stephen of Hungary|Feria_V_after_XV_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 19:12-26 +2027-09-03|3|w|St. Pius X|Feria_VI_after_XV_Sunday_after_Pentecost|-|-|1|-|1 Thess. 2:2-8|John 21:15-17 +2027-09-04|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XV_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2027-09-05|2|g|XVI Sunday after Pentecost|-|-|St. Lawrence Justinian|1|-|Eph 3:13-21|Luke 14:1-11 +2027-09-06|4|g|Feria|Feria_II_after_XVI_Sunday_after_Pentecost|-|-|1|-|Eph 3:13-21|Luke 14:1-11 +2027-09-07|4|g|Feria|Feria_III_after_XVI_Sunday_after_Pentecost|-|-|1|-|Eph 3:13-21|Luke 14:1-11 +2027-09-08|2|w|Nativity of the Blessed Virgin Mary|Feria_IV_after_XVI_Sunday_after_Pentecost|S. Hadriani|-|1|sancti:09-08cc:4:r|Prov 8:22-35|Matt 1:1-16 +2027-09-09|4|g|Feria|Feria_V_after_XVI_Sunday_after_Pentecost|St. Gorgonius|-|1|sancti:09-09:4:r|Eph 3:13-21|Luke 14:1-11 +2027-09-10|3|w|St. Nicholas of Tolentino|Feria_VI_after_XVI_Sunday_after_Pentecost|-|-|1|-|1 Cor. 4:9-14|Luke 12:32-34 +2027-09-11|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XVI_Sunday_after_Pentecost|Sts. Protus & Hyacinth|-|1|sancti:09-11:4:r|Ecclus 24:14-16|Luke 11:27-28 +2027-09-12|2|g|XVII Sunday after Pentecost|-|-|Most Holy Name of Mary|1|-|Eph 4:1-6|Matt 22:34-46 +2027-09-13|4|g|Feria|Feria_II_after_XVII_Sunday_after_Pentecost|-|-|1|-|Eph 4:1-6|Matt 22:34-46 +2027-09-14|2|r|Exaltation of the Holy Cross|Feria_III_after_XVII_Sunday_after_Pentecost|-|-|1|-|Phil 2:5-11|John 12:31-36 +2027-09-15|2|w|Seven Sorrows of the Blessed Virgin Mary|Feria_IV_after_XVII_Sunday_after_Pentecost|S. Nicomedes|-|1|sancti:09-15cc:4:r|Judith 13:22; 13:25|John 19:25-27 +2027-09-16|3|r|Sts. Cornelius & Cyprian|Feria_V_after_XVII_Sunday_after_Pentecost|Sts. Euphemia, Lucy and Geminianus|-|1|sancti:09-16cc:4:r|Wis 3:1-8|Luke 21:9-19 +2027-09-17|4|g|Feria|Feria_VI_after_XVII_Sunday_after_Pentecost|Stigmata of St. Francis|-|1|sancti:09-17:4:w|Eph 4:1-6|Matt 22:34-46 +2027-09-18|3|w|St. Joseph of Cupertino|Saturday_after_XVII_Sunday_after_Pentecost|-|-|1|-|1 Cor 13:1-8|Matt 22:1-14 +2027-09-19|2|g|XVIII Sunday after Pentecost|-|-|St. Januarius & Companions|1|-|1 Cor. 1:4-8|Matt 9:1-8 +2027-09-20|4|g|Feria|Feria_II_after_XVIII_Sunday_after_Pentecost|Sts. Eustace & Companions|-|1|sancti:09-20:4:r|1 Cor. 1:4-8|Matt 9:1-8 +2027-09-21|2|r|St. Matthew|Feria_III_after_XVIII_Sunday_after_Pentecost|-|-|1|-|Ezek 1:10-14|Matt 9:9-13 +2027-09-22|2|v|Ember Wednesday of September|-|St. Thomas of Villanova|St. Maurice and Companions, Martyrs|1|sancti:09-22:3:w|2 Esd. 8:1-10|Mark 9:16-28 +2027-09-23|3|r|St. Linus|Feria_V_after_XVIII_Sunday_after_Pentecost|St. Thecla|-|1|sancti:09-23cc:4:r|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-09-24|2|v|Ember Friday of September|-|Our Lady of Ransom|-|1|sancti:09-24:4:w|Osee 14:2-10|Luke 7:36-50 +2027-09-25|2|v|Ember Saturday of September|-|-|-|1|-|Heb 9:2-12|Luke 13:6-17 +2027-09-26|2|g|XIX Sunday after Pentecost|-|-|Sts. Cyprian & Justina|1|-|Eph 4:23-28|Matt 22:1-14 +2027-09-27|3|r|Sts. Cosmas & Damian|Feria_II_after_XIX_Sunday_after_Pentecost|-|-|1|-|Wis 5:16-20|Luke 6:17-23 +2027-09-28|3|r|St. Wenceslaus|Feria_III_after_XIX_Sunday_after_Pentecost|-|-|1|-|Wis 10:10-14|Matt 10:34-42 +2027-09-29|1|w|Dedication of St. Michael the Archangel|Feria_IV_after_XIX_Sunday_after_Pentecost|-|-|1|-|Rev 1:1-5|Matt 18:1-10 +2027-09-30|3|w|St. Jerome|Feria_V_after_XIX_Sunday_after_Pentecost|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-10-01|4|g|Feria|Feria_VI_after_XIX_Sunday_after_Pentecost|St. Remigius|-|1|sancti:10-01:4:w|Eph 4:23-28|Matt 22:1-14 +2027-10-02|3|w|Holy Guardian Angels|Saturday_after_XIX_Sunday_after_Pentecost|-|-|1|-|Exod 23:20-23|Matt 18:1-10 +2027-10-03|2|g|XX Sunday after Pentecost|-|-|St. Theresa of the Infant Jesus|1|-|Eph 5:15-21|John 4:46-53 +2027-10-04|3|w|St. Francis of Assisi|Feria_II_after_XX_Sunday_after_Pentecost|-|-|1|-|Gal 6:14-18|Matt 11:25-30 +2027-10-05|4|g|Feria|Feria_III_after_XX_Sunday_after_Pentecost|St. Placid & Companions|-|1|sancti:10-05:4:r|Eph 5:15-21|John 4:46-53 +2027-10-06|3|w|St. Bruno|Feria_IV_after_XX_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-10-07|2|w|Our Lady of the Rosary|Feria_V_after_XX_Sunday_after_Pentecost|St. Mark I|-|1|sancti:10-07t:4:r|Prov 8:22-24, 32-35.|Luke 1:26-38 +2027-10-08|3|w|St. Bridget of Sweden|Feria_VI_after_XX_Sunday_after_Pentecost|Ss. Sergio, Baccho, Marcello and Apulejo Martyrs|-|1|sancti:10-08c:4:r|1 Tim. 5:3-10.|Matt 13:44-52. +2027-10-09|3|w|St. John Leonardi|Saturday_after_XX_Sunday_after_Pentecost|St. Dionysius and companions|-|1|sancti:10-09t:4:r|2 Cor 4:1-6; 4:15-18|Luke 10:1-9 +2027-10-10|2|g|XXI Sunday after Pentecost|-|-|St. Francis Borgia|1|-|Eph 6:10-17|Matt 18:23-35 +2027-10-11|2|w|Maternity of the Blessed Virgin Mary|Feria_II_after_XXI_Sunday_after_Pentecost|-|-|1|-|Sir 24:23-31|Luke 2:43-51 +2027-10-12|4|g|Feria|Feria_III_after_XXI_Sunday_after_Pentecost|-|-|1|-|Eph 6:10-17|Matt 18:23-35 +2027-10-13|3|w|St. Edward|Feria_IV_after_XXI_Sunday_after_Pentecost|-|-|1|-|Sir 31:8-11|Luke 12:35-40 +2027-10-14|3|r|St. Callistus I|Feria_V_after_XXI_Sunday_after_Pentecost|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-10-15|3|w|St. Teresa of Avila|Feria_VI_after_XXI_Sunday_after_Pentecost|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-10-16|3|w|St. Hedwig|Saturday_after_XXI_Sunday_after_Pentecost|-|-|1|-|Prov 31:10-31|Matt 13:44-52. +2027-10-17|2|g|XXII Sunday after Pentecost|-|-|St. Margaret Mary Alacoque|1|-|Phil 1:6-11|Matt 22:15-21 +2027-10-18|2|r|St. Luke the Evangelist|Feria_II_after_XXII_Sunday_after_Pentecost|-|-|1|-|2 Cor. 8:16-24|Luke 10:1-9 +2027-10-19|3|w|St. Peter of Alcantara|Feria_III_after_XXII_Sunday_after_Pentecost|-|-|1|-|Phil 3:7-12|Luke 12:32-34 +2027-10-20|3|w|St. John Cantius|Feria_IV_after_XXII_Sunday_after_Pentecost|-|-|1|-|James 2:12-17|Luke 12:35-40 +2027-10-21|4|g|Feria|Feria_V_after_XXII_Sunday_after_Pentecost|St. Hilarion;St. Ursula and Companions|-|1|sancti:10-21:4:w;sancti:10-21cc:4:r|Phil 1:6-11|Matt 22:15-21 +2027-10-22|4|g|Feria|Feria_VI_after_XXII_Sunday_after_Pentecost|-|-|1|-|Phil 1:6-11|Matt 22:15-21 +2027-10-23|3|w|St. Anthony Mary Claret|Saturday_after_XXII_Sunday_after_Pentecost|-|-|1|-|Heb 7:23-27|Matt 24:42-47 +2027-10-24|2|g|XXIII Sunday after Pentecost|-|-|St. Raphael the Archangel|1|-|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2027-10-25|4|g|Feria|Feria_II_after_XXIII_Sunday_after_Pentecost|Sts. Chrysanthus & Daria|-|1|sancti:10-25:4:r|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2027-10-26|4|g|Feria|Feria_III_after_XXIII_Sunday_after_Pentecost|St. Evaristus|-|1|sancti:10-26:4:r|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2027-10-27|4|g|Feria|Feria_IV_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2027-10-28|2|r|Sts. Simon & Jude|Feria_V_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Eph. 4:7-13.|John 15:17-25 +2027-10-29|4|g|Feria|Feria_VI_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Phil 3:17-21; 4:1-3|Matt 9:18-26 +2027-10-30|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIII_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2027-10-31|1|w|Christ the King|IV_Sunday_after_Epiphany|-|-|1|-|Col 1:12-20.|John 18:33-37 +2027-11-01|1|w|All Saints|Feria_II_after_IV_Sunday_after_Epiphany|-|-|1|-|Apoc 7:2-12|Matt 5:1-12 +2027-11-02|1|b|Commemoration of All Souls|Feria_III_after_IV_Sunday_after_Epiphany|-|-|3|-|1 Cor. 15:51-57|John 5:25-29 +2027-11-03|4|g|Feria|Feria_IV_after_IV_Sunday_after_Epiphany|-|-|1|-|Rom 13:8-10|Matt 8:23-27 +2027-11-04|3|w|St. Charles Borromeo|Feria_V_after_IV_Sunday_after_Epiphany|Sts. Vitalis and Agricola, Martyrs|-|1|sancti:11-04cc:4:r|Sir 44:16-27; 45:3-20|Matt 25:14-23 +2027-11-05|4|g|Feria|Feria_VI_after_IV_Sunday_after_Epiphany|-|-|1|-|Rom 13:8-10|Matt 8:23-27 +2027-11-06|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_IV_Sunday_after_Epiphany|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2027-11-07|2|g|V Sunday after Epiphany|-|-|-|1|-|Col 3:12-17|Matt 13:24-30 +2027-11-08|4|g|Feria|Feria_II_after_V_Sunday_after_Epiphany|Four Holy Crowned Martyrs|-|1|sancti:11-08r:4:r|Col 3:12-17|Matt 13:24-30 +2027-11-09|2|w|Dedication of the Archbasilica of Our Holy Savior|Feria_III_after_V_Sunday_after_Epiphany|St. Theodore|-|1|sancti:11-09cc:4:r|Rev 21:2-5|Luke 19:1-10 +2027-11-10|3|w|St. Andrew Avellino|Feria_IV_after_V_Sunday_after_Epiphany|Sts. Tryphonis, Respicii, et Nymphae|-|1|sancti:11-10o:4:r|Sir 31:8-11|Luke 12:35-40 +2027-11-11|3|w|St. Martin of Tours|Feria_V_after_V_Sunday_after_Epiphany|St. Menna|-|1|sancti:11-11cc:4:r|Sir 44:16-27; 45:3-20|Luke 11:33-36 +2027-11-12|3|r|St. Martin I|Feria_VI_after_V_Sunday_after_Epiphany|-|-|1|-|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-11-13|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_V_Sunday_after_Epiphany|St. Didacus|-|1|sancti:11-13:4:w|Ecclus 24:14-16|Luke 11:27-28 +2027-11-14|2|g|VI Sunday after Epiphany|-|-|St. Josaphat|1|-|1 Thess. 1:2-10|Matt 13:31-35 +2027-11-15|3|w|St. Albert the Great|Feria_II_after_VI_Sunday_after_Epiphany|-|-|1|-|2 Tim 4:1-8|Matt 5:13-19 +2027-11-16|3|w|St. Gertrude the Great|Feria_III_after_VI_Sunday_after_Epiphany|-|-|1|-|2 Cor 10:17-18; 11:1-2|Matt 25:1-13. +2027-11-17|3|w|St. Gregory the Wonderworker|Feria_IV_after_VI_Sunday_after_Epiphany|-|-|1|-|Sir 44:16-27; 45:3-20|Mark 11:22-24 +2027-11-18|3|w|Dedication of the Basilicas of Sts. Peter & Paul|Feria_V_after_VI_Sunday_after_Epiphany|-|-|1|-|Rev 21:2-5|Luke 19:1-10 +2027-11-19|3|w|St. Elizabeth of Hungary|Feria_VI_after_VI_Sunday_after_Epiphany|St. Pontian|-|1|sancti:11-19o:4:r|Prov 31:10-31|Matt 13:44-52. +2027-11-20|3|w|St. Felix of Valois|Saturday_after_VI_Sunday_after_Epiphany|-|-|1|-|1 Cor. 4:9-14|Luke 12:32-34 +2027-11-21|2|g|XXIV Sunday after Pentecost|-|-|Presentation of the Blessed Virgin Mary|1|-|Col 1:9-14|Matt 24:15-35 +2027-11-22|3|r|St. Cecilia|Feria_II_after_XXIV_Sunday_after_Pentecost|-|-|1|-|Sir 51:13-17.|Matt 25:1-13. +2027-11-23|3|r|St. Clement I|Feria_III_after_XXIV_Sunday_after_Pentecost|St. Felicity|-|1|sancti:11-23cc:4:r|Phil 3:17-21; 4:1-3|Matt 16:13-19 +2027-11-24|3|w|St. John of the Cross|Feria_IV_after_XXIV_Sunday_after_Pentecost|St. Chrysogonus|-|1|sancti:11-24o:4:r|2 Tim 4:1-8|Matt 5:13-19 +2027-11-25|3|r|St. Catherine of Alexandria|Feria_V_after_XXIV_Sunday_after_Pentecost|-|-|1|-|Sir 51:1-8; 51:12|Matt 25:1-13. +2027-11-26|3|w|St. Sylvester|Feria_VI_after_XXIV_Sunday_after_Pentecost|St. Peter of Alexandria|-|1|sancti:11-26t:4:r|Ecclus 45:1-6|Matt 19:27-29. +2027-11-27|4|w|V Mass of the B. V. M. – Salve, Sancta Parens|Saturday_after_XXIV_Sunday_after_Pentecost|-|-|1|-|Ecclus 24:14-16|Luke 11:27-28 +2027-11-28|1|v|I Sunday of Advent|-|-|-|1|-|Rom 13:11-14|Luke 21:25-33 +2027-11-29|3|v|Feria II after I Sunday of Advent|-|St. Saturninus|-|1|sancti:11-29r:4:r|Rom 13:11-14|Luke 21:25-33 +2027-11-30|2|r|St. Andrew|Feria_III_after_I_Sunday_of_Advent|-|-|1|-|Rom 10:10-18|Matt 4:18-22 +2027-12-01|3|v|Feria IV after I Sunday of Advent|-|-|-|1|-|Rom 13:11-14|Luke 21:25-33 +2027-12-02|3|r|St. Vivian|Feria_V_after_I_Sunday_of_Advent|Feria V after I Sunday of Advent|-|1|tempora:Adv1-4:3:v|Sir 51:13-17.|Matt 13:44-52. +2027-12-03|3|w|St. Francis Xavier|Feria_VI_after_I_Sunday_of_Advent|Feria VI after I Sunday of Advent|-|1|tempora:Adv1-5:3:v|Rom 10:10-18|Mark 16:15-18 +2027-12-04|3|w|St. Peter Chrysologus|Sabbato_after_I_Sunday_of_Advent|Sabbato after I Sunday of Advent|-|1|tempora:Adv1-6:3:v|2 Tim 4:1-8|Matt 5:13-19 +2027-12-05|1|v|II Sunday of Advent|-|-|St. Sabbas|1|-|Rom 15:4-13|Matt 11:2-10 +2027-12-06|3|w|St. Nicholas|Feria_II_after_II_Sunday_of_Advent|Feria II after II Sunday of Advent|-|1|tempora:Adv2-1:3:v|Heb 13:7-17|Matt 25:14-23 +2027-12-07|3|w|St. Ambrose|Feria_III_after_II_Sunday_of_Advent|Feria III after II Sunday of Advent|-|1|tempora:Adv2-2:3:v|2 Tim 4:1-8|Matt 5:13-19 +2027-12-08|1|w|Immaculate Conception of the Blessed Virgin Mary|Feria_IV_after_II_Sunday_of_Advent|-|-|1|-|Prov 8:22-35|Luke 1:26-28 +2027-12-09|3|v|Feria V after II Sunday of Advent|-|-|-|1|-|Rom 15:4-13|Matt 11:2-10 +2027-12-10|3|v|Feria VI after II Sunday of Advent|-|St. Melchiades|-|1|sancti:12-10o:4:r|Rom 15:4-13|Matt 11:2-10 +2027-12-11|3|w|St. Damasus I|Sabbato_after_II_Sunday_of_Advent|Sabbato after II Sunday of Advent|-|1|tempora:Adv2-6:3:v|1 Pet 5:1-4; 5:10-11.|Matt 16:13-19 +2027-12-12|1|pv|III Sunday of Advent|-|-|-|1|-|Phil 4:4-7|John 1:19-28 +2027-12-13|3|r|St. Lucy|Feria_II_after_III_Sunday_of_Advent|Feria II after III Sunday of Advent|-|1|tempora:Adv3-1:3:v|2 Cor 10:17-18; 11:1-2|Matt 13:44-52. +2027-12-14|3|pv|Feria III after III Sunday of Advent|-|-|-|1|-|Phil 4:4-7|John 1:19-28 +2027-12-15|2|v|Ember Wednesday of Advent|-|-|-|1|-|Isa 7:10-15|Luke 1:26-38 +2027-12-16|3|r|St. Eusebius|Feria_V_after_III_Sunday_of_Advent|Feria V after III Sunday of Advent|-|1|tempora:Adv3-4:3:v|2 Cor. 1:3-7|Matt 16:24-27. +2027-12-17|2|v|Ember Friday of Advent|-|-|-|1|-|Isa 11:1-5|Luke 1:39-47 +2027-12-18|2|v|Ember Saturday of Advent|-|-|-|1|-|2 Thess. 2:1-8|Luke 3:1-6 +2027-12-19|1|v|IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2027-12-20|2|v|Feria II after IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2027-12-21|2|r|St. Thomas|Feria_III_after_IV_Sunday_of_Advent|Feria III after IV Sunday of Advent|-|1|tempora:Adv4-2:2:v|Eph 2:19-22|John 20:24-29 +2027-12-22|2|v|Feria IV after IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2027-12-23|2|v|Feria V after IV Sunday of Advent|-|-|-|1|-|1 Cor. 4:1-5|Luke 3:1-6 +2027-12-24|1|v|Vigil of Christmas|-|-|-|1|-|Rom 1:1-6|Matt 1:18-21 +2027-12-25|1|w|The Nativity of Our Lord|-|-|-|3|-|Titus 2:11-15|Luke 2:1-14 +2027-12-26|2|w|Sunday in the Octave of Christmas|-|St. Stephen|For Octave of the Nativity|1|sancti:12-26:2:r|Gal 4:1-7|Luke 2:33-40 +2027-12-27|2|w|St. John the Evangelist|-|For Octave of the Nativity|-|1|sancti:12-27c:4:w|Ecclus 15:1-6|John 21:19-24 +2027-12-28|2|r|Holy Innocents|-|For Octave of the Nativity|-|1|sancti:12-28c:4:w|Apoc 14:1-5|Matt 2:13-18 +2027-12-29|2|w|Feria in the Octave of Christmas|-|St. Thomas Becket|-|1|sancti:12-29:4:r|Titus 3:4-7|Luke 2:15-20 +2027-12-30|2|w|Feria in the Octave of Christmas|-|-|-|1|-|Titus 3:4-7|Luke 2:15-20 +2027-12-31|2|w|Feria in the Octave of Christmas|-|St. Silvester|-|1|sancti:12-31:4:w|Titus 3:4-7|Luke 2:15-20 diff --git a/test/test_differential.ml b/test/test_differential.ml index 655a054..a89b17b 100644 --- a/test/test_differential.ml +++ b/test/test_differential.ml @@ -699,6 +699,57 @@ let epiphany_week_shift_years_2005_2050 = [ 2008; 2013; 2019; 2030; 2036; 2041; let year_of_date date = int_of_string (String.sub date 0 4) +(* C29-C34 -- Task 9 (branch ef-lectionary, layer-4 oracle): six colitur-side + citation fixes, all found via the SAME mechanism -- missalemeum (test/ + test_oracle.ml, 2026-2027) disagreeing with colitur's OLD step-3 + fallback/absent-entry answer, traced to an explicit primary-source + citation each time (tools/bootstrap_lectionary.ml's own + [holy_name_entries]/[epiphanytide_opening_entries]/ + [movable_feast_entries] carry the full scan citations, not repeated + here). lectio has no equivalent data for any of the six (its own ini + either has no entry, matching colitur's OWN prior gap for + [ef-corpus-christi]/[ef-sacred-heart], or the SAME mis-borrowed value + colitur used to carry for the January families before this task's own + fix, see [colitur_keys]'s own CORRECTED note in that generator) -- so + every occurrence across the WHOLE 2005-2050 differential window newly + diverges, not only the 2026-2027 oracle window that found it. Each is + its own id, not folded into a neighbour, per this file's own standing + discipline (C14/C15/C16 above): a slug family's own citation fix is a + distinct fact from another family's, even where the underlying task + and citation shape are similar. *) +let holy_name_sunday_slug = "ef-holy-name-sunday" + +let christmas_1_weekday_slugs = + List.map (fun wd -> "ef-christmas-1-" ^ wd) [ "monday"; "tuesday"; "wednesday"; "thursday"; "friday" ] + +let christmas_2_weekday_slugs = + List.map (fun wd -> "ef-christmas-2-" ^ wd) [ "monday"; "tuesday"; "wednesday"; "thursday"; "friday" ] + +let time_after_epiphany_1_weekday_slugs = + List.map + (fun wd -> "ef-time-after-epiphany-1-" ^ wd) + [ "monday"; "tuesday"; "wednesday"; "thursday"; "friday" ] + +(* C31/C32's OWN Saturday ripple, checked for and confirmed real, not + theorised: [ef-christmas-1-saturday] and [ef-time-after-epiphany-1- + saturday]/[ef-christmas-2-saturday] deliberately have NO direct entry + (RG 78's BVM Saturday Office, above) -- but a Saturday still falls + through to step 3's OWN preceding-Sunday walkback, and on the (large + minority of) years where that walk lands on [ef-holy-name-sunday] + specifically, it now inherits THAT slug's newly-corrected citation as + a side effect, with no direct entry of its own involved at all. + [ef-christmas-1-saturday]'s own walkback structurally can never reach + that far forward (it only ever lands in December, C25's own unchanged + population, confirmed by the pinned test_lectionary_ef.ml case) -- + only the OTHER two families' Saturdays are affected, so only they need + the wider slug list; a Saturday whose value is genuinely unaffected + this year simply produces no row needing an id at all ([diffs = []]), + not a false positive. *) +let christmas_2_weekday_slugs_with_saturday = christmas_2_weekday_slugs @ [ "ef-christmas-2-saturday" ] + +let time_after_epiphany_1_weekday_slugs_with_saturday = + time_after_epiphany_1_weekday_slugs @ [ "ef-time-after-epiphany-1-saturday" ] + (* C20 (task 8): lectio genuinely computes NO reading at all -- "-"/"-" on both parts -- for 14 civil days across 2005-2050, all seven of the readingless class-3 saints Task 6 gave a proper or a Common @@ -950,10 +1001,28 @@ let september_ember_sat_slug = "ef-september-ember-sat" respectively" (the right four numbers, the wrong weekday each was attached to). Re-measured directly against the real resolver: Wednesday 6, Thursday 19, Friday 19, Saturday 13 (6 + 19 + 19 + 13 = - 57, no residue). *) -let rg69_one_hop_slugs = - [ "ef-christmas-1-wednesday"; "ef-christmas-1-thursday"; "ef-christmas-1-friday"; - "ef-christmas-1-saturday" ] + 57, no residue). + + NARROWED, Task 9 (branch ef-lectionary, layer-4 oracle): three of the + four weekdays (Wednesday/Thursday/Friday) now have their OWN direct + lectionary entry (tools/bootstrap_lectionary.ml's own + [epiphanytide_opening_entries], RG 17(a)'s "diebus ferialibus a 2 ad 5 + ianuarii Missa dicitur ut die 1 ianuarii", both scans) -- they no + longer reach step 3's one-hop walkback THIS entry's own citation + describes at all, so keeping them here would misdescribe what + actually happens on those three weekdays now. See [C30] below for + their own (DIFFERENT, larger) new population -- colitur is RIGHT + there, not merely differently wrong, so it is a separate id with its + own [verdict colitur], not a re-adjudication of this one. Only + [ef-christmas-1-saturday] remains here: deliberately NOT given a + direct entry (RG 78's BVM Saturday Office wins that day + unconditionally whenever nothing else does, {!Rite_ef.Temporal_ef}'s + own [bvm_saturday_names] -- giving it the "repeat 1 January" citation + would be wrong on exactly the days this entry's own citation already + describes as correct for the OTHER four weekdays), so this ONE + weekday's own step-3 walkback -- and this entry's own citation, + "Tit. 3, 4-7" -- is genuinely unchanged by this task. *) +let rg69_one_hop_slugs = [ "ef-christmas-1-saturday" ] (* [layer_c_reason l c diffs] returns the [data/ef/expected-divergences.sexp] [id] this row-pair's remaining (post Layer A/B) diff set belongs to, or @@ -1046,6 +1115,48 @@ let layer_c_reason (l : row) (c : row) diffs = && subset diffs [ Slug_f; Rank; First_f; Gospel_f ] && String.equal c.slug "ef-holy-name" then Some "C16" + else if + (* C29 -- Task 9: the Holy-Name-SUNDAY shape (RG 17(a)'s own primary + Sunday case, distinct from C16's fallback above) -- Season/Slug_f + already agree (Layer A already normalises lectio's own + "ef-christmas-sunday-0" for this civil date onto colitur's + "ef-holy-name-sunday", the SAME alias this generator's OWN + [colitur_keys] used to (wrongly) borrow a citation through -- + Layer A's alias and the generator's OLD citation-sourcing bug were + two separate uses of the same underlying fact, only one of which + was ever wrong), so only the citation itself is new. *) + diffs = [ First_f; Gospel_f ] && String.equal c.slug holy_name_sunday_slug + then Some "C29" + else if + (* C30 -- Task 9: RG 17(a)'s own "diebus ferialibus a 2 ad 5 ianuarii" + rubric, the five non-Saturday weekdays (Saturday stays C25's own, + narrowed note above explains why). *) + diffs = [ First_f; Gospel_f ] && List.mem c.slug christmas_1_weekday_slugs + then Some "C30" + else if + (* C31 -- Task 9: the SAME rubric's own next sentence, "diebus + ferialibus a 7 ad 12 ianuarii ante dominicam I post Epiphaniam... + Missa de festo Epiphaniae". A SUBSET guard, not an exact match, + unlike C29/C30 -- this slug family's own civil dates ALREADY + carried a Season/Slug_f/Colour_f divergence before this task + (lectio's own season boundary starts Time-after-Epiphany at + Epiphany itself, RG 72-73's own later boundary colitur keeps; + lectio's own week numbering has no Holy Family to wait for, so its + own slug for these dates is already "ef-time-after-epiphany-1- + ", not "ef-christmas-2-..."), previously absorbed by C1's + own [jan_6_13_slug] allow-list (which already names this family). + First_f/Gospel_f now join an EXISTING divergence, they do not + create a new, cleaner one -- ONE of the two, not necessarily both: + a feria's Epistle and Gospel are independent lookups, and can each + happen to already coincide (e.g. the Gospel pericope shared with a + neighbouring office while the Epistle differs). [_with_saturday] + -- see that list's own comment for why Saturday belongs here for + THIS family (a step-3 ripple through the now-corrected + [ef-holy-name-sunday], not a direct entry of its own). *) + subset diffs [ Season; Slug_f; Colour_f; First_f; Gospel_f ] + && (List.mem First_f diffs || List.mem Gospel_f diffs) + && List.mem c.slug christmas_2_weekday_slugs_with_saturday + then Some "C31" else if is_bvm_saturday_row c diffs then Some "C17" else if diffs = [ Colour_f ] && List.mem c.slug audit_colour_corrected_slugs then Some "C18" else if @@ -1053,6 +1164,45 @@ let layer_c_reason (l : row) (c : row) diffs = && starts_with ~prefix:"ef-time-after-epiphany-" c.slug && subset diffs [ Colour_f; First_f; Gospel_f ] then Some "C19" + else if + (* C32 -- Task 9: "Missa Dominicae Primae post Epiphaniam", Holy + Family's own week, the five non-Saturday weekdays. Checked AFTER + C19 deliberately: C19's own 7 "week shift" years already explain + this same slug family's own citation divergence there (a + DIFFERENT root cause, the week-numbering offset, not this task's + own fix) -- this entry must not re-claim those rows under a + citation-content reason C19 already owns, so its own population is + exactly the OTHER (non-shift-year) civil dates. A SUBSET guard, + the same reason as C31 immediately above: unlike C29/C30, THIS + slug family's own civil dates already carried a bare + Season/Colour_f divergence before this task (SAME slug on both + sides here, unlike C31 -- lectio's own season boundary alone, + RG 72-73 vs Epiphany), previously absorbed by C1's own generic + 6-13 January window (no [Slug_f] involved, so C1's own + [jan_6_13_slug] gate was never even reached). First_f/Gospel_f now + join that existing divergence -- ONE of the two, the same reason + as C31's own note. [_with_saturday]: this family's own Saturday IS + reachable by a step-3 walk landing on [ef-holy-name-sunday] + (unlike [ef-christmas-1-saturday]'s own walk, which structurally + cannot reach that far forward -- confirmed, not assumed, by the + pinned test_lectionary_ef.ml case for that one slug). *) + subset diffs [ Season; Colour_f; First_f; Gospel_f ] + && (List.mem First_f diffs || List.mem Gospel_f diffs) + && List.mem c.slug time_after_epiphany_1_weekday_slugs_with_saturday + then Some "C32" + else if + (* C33/C34 -- Task 9: two major movable feasts of the Lord that had NO + lectionary entry at all before this task (tools/ + bootstrap_lectionary.ml's own [movable_feast_entries]) -- lectio has + none either, so colitur and lectio used to independently fall back + to the SAME preceding-Sunday (Trinity's own) citation and silently + agree on the wrong answer, the "Holy Thursday violet in both" shape + CLAUDE.md's own validation-layers section names. Two ids, not one: + distinct feasts, distinct citations, the same discipline C33/C34's + neighbours already apply. *) + diffs = [ First_f; Gospel_f ] && String.equal c.slug "ef-corpus-christi" + then Some "C33" + else if diffs = [ First_f; Gospel_f ] && String.equal c.slug "ef-sacred-heart" then Some "C34" else if diffs = [ First_f; Gospel_f ] && String.equal l.first "-" && String.equal l.gospel "-" && List.mem c.slug lectio_no_reading_slugs diff --git a/test/test_lectionary.ml b/test/test_lectionary.ml index 3fbf8c5..a6ca334 100644 --- a/test/test_lectionary.ml +++ b/test/test_lectionary.ml @@ -85,30 +85,38 @@ let test_ef_data_file_loads () = own Temporal_ef vocabulary, PLUS hand-authored/derived entries (tools/bootstrap_lectionary.ml's own [colitur_keys]/ [vigil_entries]/[holy_week_entries]/[passion_tuesday_entry]/ - [nativity_octave_entries]/[derived_entries] comments have the full - account, task 8, branch ef-lectionary, fix rounds 1-2): - "ef-christmas-sunday-0" widens into itself PLUS "ef-holy-name- - sunday" (+1); the three Lent Ember sections rename 1:1 (no count - change); "ef-passiontide-0-tuesday" is EXCLUDED (fix round 2, + [nativity_octave_entries]/[holy_name_entries]/ + [epiphanytide_opening_entries]/[movable_feast_entries] comments + have the full account, task 8 (branch ef-lectionary, fix rounds + 1-2) then Task 9 (same branch, layer-4 oracle) below): + "ef-passiontide-0-tuesday" is EXCLUDED (task 8 fix round 2, Important -- it is Holy Tuesday's data, not Passion Tuesday's, -1); the other five Passiontide sections rename 1:1 (no count - change); one hand-authored entry sourced from lectio's SANCTORAL - calendar, not this lectionary ini ([ef-nativity-vigil], +1); SIX - hand-authored directly from the Missal, all of Holy Week (+6, - fix round 2 -- Wednesday and Friday added, the first pass's - Critical bug); ONE hand-authored directly from the Missal, - Passion Tuesday's own real citation (+1, fix round 2); three - hand-authored directly from the Missal, the fixed Nativity-Octave - days (+3); one entry derived from an already-translated one - rather than re-typed ([ef-holy-name], +1); two ini sections - EXCLUDED, fix round 3 -- "ef-advent-ember-sat"/ - "ef-september-ember-sat" carried a saint's Mass verbatim (Thomas - the Apostle's/Matthew's, the C26 shape), not the real Ember - Saturday (-2); two hand-authored directly from the Missal - replacing them, [ember_saturday_corrections] (+2, net 0 against - the -2 immediately above). - 119 + 1 - 1 + 1 + 6 + 1 + 3 + 1 - 2 + 2 = 131. *) - Alcotest.(check int) "entry count" 131 + change); the three Lent Ember sections rename 1:1 (no count + change); "ef-advent-ember-sat"/"ef-september-ember-sat" are + EXCLUDED, task 8 fix round 3 (Important -- Thomas the Apostle's/ + Matthew's Mass verbatim, not the real Ember Saturday, -2); + 119 - 1 - 2 = 116 real ini-translated entries. PLUS: one + hand-authored entry sourced from lectio's SANCTORAL calendar, not + this lectionary ini ([ef-nativity-vigil], +1); SIX hand-authored + directly from the Missal, all of Holy Week ([holy_week_entries], + +6); ONE hand-authored directly from the Missal, Passion + Tuesday's own real citation ([passion_tuesday_entry], +1); TWO + hand-authored directly from the Missal, replacing the two + excluded Ember Saturdays above ([ember_saturday_corrections], + +2); three hand-authored directly from the Missal, the fixed + Nativity-Octave days ([nativity_octave_entries], +3). + Task 9 (branch ef-lectionary, layer-4 oracle -- CORRECTED, + [ef-holy-name-sunday]/[ef-holy-name] no longer widened/derived + from "ef-christmas-sunday-0", see [colitur_keys]'s own + CORRECTED note): TWO hand-authored directly from the Missal + ([holy_name_entries], +2); FIFTEEN hand-authored directly from + the Missal, three 5-weekday families + ([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" 148 (List.length (Lectionary.entries l)); (match Lectionary.find l (slug "ef-lent-1-monday") with | Some [ a; b ] -> @@ -128,9 +136,46 @@ let test_ef_data_file_loads () = | Some _ -> Alcotest.fail (name ^ ": expected exactly two citations") | None -> Alcotest.fail (name ^ ": missing") in - check_entry "ef-holy-name-sunday" "Gal 4:1-7" "Luke 2:33-40"; + (* Task 9 (branch ef-lectionary, layer-4 oracle): CORRECTED -- + [ef-holy-name-sunday]/[ef-holy-name] used to be pinned here at + "Gal 4:1-7"/"Luke 2:33-40", the Sunday-within-the-Octave's own + citation this generator used to (wrongly) borrow by analogy. + missalemeum's own independent extraction (2026-01-04/2027-01-03, + real Holy Name Sundays) disproved it; the Missal itself confirms + the real value, both scans (scan1.txt:6579-6608, + scan2.txt:7225-7297, "SANCTISSIMI NOMINIS IESU... Act. 4, 8-12... + Luc. 2, 21") -- see [colitur_keys]'s own CORRECTED note in + bootstrap_lectionary.ml for the full account. *) + check_entry "ef-holy-name-sunday" "Acts 4:8-12" "Luke 2:21"; check_entry "ef-christmas-sunday-0" "Gal 4:1-7" "Luke 2:33-40"; - check_entry "ef-holy-name" "Gal 4:1-7" "Luke 2:33-40"; + check_entry "ef-holy-name" "Acts 4:8-12" "Luke 2:21"; + (* Task 9: RG 17(a)'s own "diebus ferialibus" rubric (2-13 January, + three 5-weekday families -- bootstrap_lectionary.ml's own + [epiphanytide_opening_entries] comment has the full citations and + the RG 78/BVM-Saturday reasoning for why Saturday is excluded from + all three). One weekday pinned per family (a regression net, not + an exhaustive per-weekday audit -- the generator's own + [assert_reachable] already guards every emitted key is a real + Temporal_ef slug). *) + check_entry "ef-christmas-1-monday" "Titus 2:11-15" "Luke 2:21"; + check_entry "ef-christmas-1-friday" "Titus 2:11-15" "Luke 2:21"; + check_entry "ef-christmas-2-tuesday" "Isa 60:1-6" "Matt 2:1-12"; + check_entry "ef-christmas-2-monday" "Isa 60:1-6" "Matt 2:1-12"; + check_entry "ef-time-after-epiphany-1-wednesday" "Rom 12:1-5" "Luke 2:42-52"; + let must_stay_absent name = + match Lectionary.find l (slug name) with + | None -> () + | Some _ -> Alcotest.fail (name ^ ": must stay absent -- RG 78's BVM Saturday Office") + in + must_stay_absent "ef-christmas-1-saturday"; + must_stay_absent "ef-christmas-2-saturday"; + must_stay_absent "ef-time-after-epiphany-1-saturday"; + (* Task 9: two major, permanently-named I-class movable feasts with + no entry at all before this task (bootstrap_lectionary.ml's own + [movable_feast_entries] comment has the full citations, both + 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"; 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 51c3233..39e3cb8 100644 --- a/test/test_lectionary_ef.ml +++ b/test/test_lectionary_ef.ml @@ -157,19 +157,30 @@ let test_step3_advent_feria_resumes_sunday () = December now resolves the same way -- there is no date left in that specific window this test could use to exercise step 3. - Replaced with 2028-01-05 (a Wednesday in Holy Name week, "ef-christmas- - 1-wednesday"), which still has no citation of its own and genuinely - resumes ITS preceding Sunday, 2028-01-02 -- confirmed a real Sunday - that year, and confirmed to be Holy Name Sunday specifically (its own - [ef-holy-name-sunday] slug, RG 17(a)), not a coincidence: the whole - POINT of this test is a Christmas-season feria genuinely falling - through to step 3, and this is the closest remaining civil-calendar - case to the original 29-31 December window that still does. *) + REPLACED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): 2028-01-05 + ("ef-christmas-1-wednesday") stopped exercising step 3 too, the SAME + fate as the 2025-12-29 case this comment already documents -- RG 17(a)'s + own "diebus ferialibus a 2 ad 5 ianuarii" rubric now gives it a direct + entry (tools/bootstrap_lectionary.ml's own + [epiphanytide_opening_entries]), so it resolves at step 2. The three + families this task's own fix closed (2-5 January, 7-12 January, Holy + Family's own week) cover every NON-SATURDAY Christmastide feria in + January now; the SATURDAYS of those same three families are + DELIBERATELY left without a direct entry (RG 78's BVM Saturday Office + wins there instead, {!Rite_ef.Temporal_ef.bvm_saturday_names} -- which + itself carries no citations of its own, see task-6-report.md's own + residual concern 4), so they are the closest remaining case: 2026-01-03 + ("ef-christmas-1-saturday") still has no citation of its own and + genuinely resumes ITS preceding Sunday, 2025-12-28 -- confirmed a real + Sunday that year, unaffected by any of this task's own fixes (still the + historical "Sunday within the Octave of the Nativity", RG 69, + unchanged by this task, see [colitur_keys]'s own CORRECTED note for why + only the Holy-Name-Sunday alias was wrong, not this citation itself). *) let test_step3_christmas_feria_resumes_sunday () = Alcotest.(check (list string)) - "Wednesday of Holy Name week resumes Holy Name Sunday's Mass" + "Saturday of Holy Name week resumes the Nativity-Octave Sunday's Mass" [ "Gal 4:1-7"; "Luke 2:33-40" ] - (refs (day 2028 1 5)) + (refs (day 2026 1 3)) (* Fix round 1 (coordinator review, Important finding 1): the original test here (2028-12-26) did not exercise step 3 at all -- 26 December is always diff --git a/test/test_oracle.ml b/test/test_oracle.ml index f1ab9f1..41d8a2e 100644 --- a/test/test_oracle.ml +++ b/test/test_oracle.ml @@ -153,6 +153,7 @@ module Cel = Colitur_kernel.Celebration module Colour = Colitur_kernel.Colour module Names = Colitur_kernel.Names module Lang = Colitur_kernel.Lang +module Citation = Colitur_kernel.Citation module V = Rite_ef.Vocab_ef (* Same relative paths test_differential.ml uses: dune test runs from @@ -175,8 +176,12 @@ let allow_list_path = "../data/ef/expected-divergences-missalemeum.sexp" snapshot (fixtures/missalemeum-ef-2026-2027.provenance: still lectio commit d7da4b0, re-verified, first 8 fields byte-identical) -- only field 9 is new content, so this digest changes but the fixture's own data does - not. *) -let fixture_sha256 = "4162e79d7a0bc03b81a34ce6cd3b074e2d32570217759bc3b4058ada75ea8781" + not. + + UPDATED 2026-08-17, Task 9 (branch ef-lectionary): fields 10-11 + (first/gospel citations) appended, same snapshot, same provenance -- + first 9 fields re-verified byte-identical. *) +let fixture_sha256 = "350199498ce197c93dfee23bea62a47811995c3c70eec66707c123dd9e9c37fb" (* Identical technique to test_differential.ml's own [sha256_of_file] (that file's own comment explains why: shelling out to [sha256sum] @@ -252,6 +257,16 @@ type oracle_row = { o_commemorations : string list; o_commemoration_ids : string list; (** parallel to [o_commemorations], see field 9's own doc above *) o_displaced : string list; + o_first : string option; + (** Task 9, fields 10-11: the day's Epistle and Gospel citations, extracted + verbatim from missalemeum's own "Lectio"/"Evangelium" sections + (tools/extract_missalemeum_oracle.py's own header has the extraction + method and its exhaustive verification). [None] for the fixture's own + "-" sentinel -- the 2 Good Friday rows, which have no such section at + all (a multi-lesson "Missa Praesanctificatorum" structure instead), + the SAME shape colitur's own test_lectionary.ml already records for + its own hand-authored Holy Week data. *) + o_gospel : string option; } let explode s = List.init (String.length s) (String.get s) @@ -268,17 +283,29 @@ let id_rank id = let is_sancti_id id = String.length id >= 7 && String.sub id 0 7 = "sancti:" +(* Task 9: "-" -> [None], anything else -> [Some _] verbatim -- the same + sentinel convention test_differential.ml's own first/gospel columns + already use (that file's [decode_field]/[row] comment), here kept as an + [option] rather than a bare "-" string so a comparator bug cannot + accidentally compare two absent readings as if they were the SAME + present reading "-". *) +let opt_field f = if f = "-" then None else Some f + let oracle_row_of_line line = match String.split_on_char '|' line with - | [ date; rank; colours; title; _tempora; commemorations; displaced; _n_masses; commemoration_ids ] -> + | [ date; rank; colours; title; _tempora; commemorations; displaced; _n_masses; commemoration_ids; first; + gospel ] -> { o_date = date; o_rank = int_of_string rank; o_colours = explode colours; o_title = title; o_commemorations = split_list_field commemorations; o_commemoration_ids = split_list_field commemoration_ids; - o_displaced = split_list_field displaced } - | _ -> Alcotest.failf "malformed fixture line (expected 9 '|'-separated fields): %S" line + o_displaced = split_list_field displaced; + o_first = opt_field first; + o_gospel = opt_field gospel + } + | _ -> Alcotest.failf "malformed fixture line (expected 11 '|'-separated fields): %S" line let read_lines path = let ic = open_in path in @@ -324,6 +351,14 @@ type colitur_row = { applied to [LD.observed] instead of a commemoration candidate. *) c_commemorations : (string * int * Cel.status * string option) list; (** slug, rank, status, English name *) + c_first : string option; + (** Task 9: colitur's own resolved Epistle citation ({!Citation.First}), + the same [None]-for-absent convention as {!oracle_row}'s own + [o_first] -- read off [LD.citations] exactly the way + test_differential.ml's own [colitur_rows_2005_2050] already does + (that file's own [citation_ref], duplicated here rather than + shared, same reasoning as [real_layer]/[sha256_of_file] above). *) + c_gospel : string option; } let rank_to_int = function V.Class1 -> 1 | V.Class2 -> 2 | V.Class3 -> 3 | V.Class4 -> 4 @@ -360,13 +395,20 @@ let colitur_rows_2026_2027 () = (Slug.to_string c.Cel.slug, rank_to_int c.Cel.rank, c.Cel.status, Names.find c.Cel.names en)) day.LD.commemorations in + let citation_ref part = + match List.find_opt (fun (c : Citation.t) -> c.Citation.part = part) day.LD.citations with + | Some c -> Some c.Citation.reference + | None -> None + in rows := { c_date = Date.to_iso8601 day.LD.date; c_rank = rank_to_int cel.Cel.rank; c_colour = colour_to_char cel.Cel.colour; c_observed_slug = Slug.to_string cel.Cel.slug; c_observed_name = Names.find cel.Cel.names en; - c_commemorations = commemorations + c_commemorations = commemorations; + c_first = citation_ref Citation.First; + c_gospel = citation_ref Citation.Gospel } :: !rows | None -> Alcotest.failf "internal error: no resolved day for %s" (Date.to_iso8601 !d)); @@ -389,6 +431,10 @@ type field = | Comm_identity_unresolved | Observed_identity_mismatch | Observed_identity_unresolved + | First_mismatch + | First_unresolved + | Gospel_mismatch + | Gospel_unresolved let field_name = function | Rank -> "rank" @@ -399,6 +445,10 @@ let field_name = function | Comm_identity_unresolved -> "commemoration-identity-unresolved" | Observed_identity_mismatch -> "observed-identity-mismatch" | Observed_identity_unresolved -> "observed-identity-unresolved" + | First_mismatch -> "first-mismatch" + | First_unresolved -> "first-unresolved" + | Gospel_mismatch -> "gospel-mismatch" + | Gospel_unresolved -> "gospel-unresolved" (* CORRECTING the gap this file's own header names (added under this task, branch ef-rg112-rg110): the axes above all compare the day's OBSERVED @@ -451,6 +501,92 @@ let identity_diff (c : colitur_row) (o : oracle_row) = let o_titles = List.sort compare o.o_commemorations in if c_titles = o_titles then None else Some Comm_identity_mismatch +(* Task 9: reading-citation comparison. colitur and missalemeum are both, + independently, English-abbreviated "Book chapter:verse-verse" citations + (unlike the commemoration/observed TITLE axes above, there is no + vocabulary gap to bridge here -- see tools/extract_missalemeum_oracle.py's + own header for the extraction, and data/ef/commons.sexp's own header for + colitur's side of the same convention) -- but the two sources punctuate + the identical reference differently often enough that a bare + [String.equal] would drown every genuine divergence in typographic noise: + a trailing full stop missalemeum's own source sentence happens to end + with ("1 Cor 1:17-25." vs colitur's "1 Cor. 1:17-25"), an abbreviation dot + after the book name (present on one side, absent on the other, with no + consistent rule EITHER side follows -- missalemeum alone has both "1 Cor" + and "1 Cor." in its own fixture), and a chapter/verse separator that is + sometimes "." instead of ":" ("John 20. 19-31"). [normalize_citation] + collapses exactly these three -- PURE typography, never the substantive + book/chapter/verse content -- so the identity axis below compares what + the reference actually IS, not how either source happened to punctuate + it that day. Order matters: the digit-period-digit rewrite (chapter.verse + -> chapter:verse) runs BEFORE the letter-period strip, so "20. 19-31" + becomes "20:19-31" before the (now absent) letter-period pass would have + nothing left to touch it. *) +let normalize_citation s = + let s = String.trim s in + let buf = Buffer.create (String.length s) in + String.iter (fun c -> if c = '\t' || c = '\n' then Buffer.add_char buf ' ' else Buffer.add_char buf c) s; + let s = Buffer.contents buf in + (* Collapse runs of whitespace to one space. *) + let s = + let b = Buffer.create (String.length s) in + let prev_space = ref false in + String.iter + (fun c -> + if c = ' ' then ( + if not !prev_space then Buffer.add_char b ' '; + prev_space := true) + else ( + Buffer.add_char b c; + prev_space := false)) + s + |> fun () -> Buffer.contents b + in + (* digit "." (optional space) digit -> digit ":" digit (the chapter/verse + separator seen as "." on missalemeum's side, e.g. "John 20. 19-31"). *) + let is_digit c = c >= '0' && c <= '9' in + let n = String.length s in + let b = Buffer.create n in + let i = ref 0 in + while !i < n do + let c = s.[!i] in + if c = '.' && !i > 0 && is_digit s.[!i - 1] then ( + let j = ref (!i + 1) in + if !j < n && s.[!j] = ' ' then incr j; + if !j < n && is_digit s.[!j] then ( + Buffer.add_char b ':'; + i := !j) + else ( + Buffer.add_char b c; + incr i)) + else ( + Buffer.add_char b c; + incr i) + done; + let s = Buffer.contents b in + (* Any remaining "." is either an abbreviation dot (letter, e.g. "Cor.") + or a bare trailing full stop -- neither carries reference content, so + both are simply dropped. *) + let b = Buffer.create (String.length s) in + String.iter (fun c -> if c <> '.' then Buffer.add_char b c) s; + String.trim (Buffer.contents b) + +(* [None] (unresolved) is reported separately from a genuine mismatch + between two present values -- the same [Comm_identity_unresolved] / + [Comm_identity_mismatch] split above, applied to a single reference + string instead of a multiset of titles. The ONLY unresolved case either + side of this whole fixture ever produces is missalemeum's own 2 Good + Friday rows (extract_missalemeum_oracle.py's own header); colitur itself + never emits [None] for First/Gospel anywhere in this window (Task 8: + "domain-wide there are now ZERO days with empty citations"), so this is + the FIRST time a [_unresolved] outcome in this file can fire on the + colitur side too, in principle, and both are covered. *) +let citation_diff ~mismatch ~unresolved (c : string option) (o : string option) = + match (c, o) with + | None, None -> None + | (None, Some _ | Some _, None) -> Some unresolved + | Some cs, Some os -> if String.equal (normalize_citation cs) (normalize_citation os) then None else Some mismatch + let diff_fields (c : colitur_row) (o : oracle_row) = let c_has = c.c_commemorations <> [] and o_has = o.o_commemorations <> [] in List.filter_map @@ -466,7 +602,9 @@ let diff_fields (c : colitur_row) (o : oracle_row) = Some Comm_count else None); identity_diff c o; - observed_identity_diff c o + observed_identity_diff c o; + citation_diff ~mismatch:First_mismatch ~unresolved:First_unresolved c.c_first o.o_first; + citation_diff ~mismatch:Gospel_mismatch ~unresolved:Gospel_unresolved c.c_gospel o.o_gospel ] (* ---------------------------------------------------------------------- *) @@ -976,6 +1114,137 @@ let m22_commemoration_matches (c : colitur_row) = | [ a; b ] -> (String.equal a "barbara") <> (String.equal b "barbara") | _ -> false +(* M23 -- Task 9 (branch ef-lectionary, layer-4 oracle): Good Friday, both + years. missalemeum's own JSON has no "Lectio"/"Evangelium" section at + all for this one day (a multi-lesson "Missa Praesanctificatorum" + structure instead, "Lectiones"/"Passio", the SAME shape colitur's own + Holy Week data hit at bootstrap time -- tools/ + extract_missalemeum_oracle.py's own header has the extraction detail) + -- a comparator-structural absence on the ORACLE side, the mirror image + of [Comm_identity_unresolved]'s own colitur-side absence, not a rubric + dispute: colitur's own citation (Ex 12:1-11/John 18:1-40; 19:1-42, + tools/bootstrap_lectionary.ml's own [holy_week_entries], Missal-verified + twice) is correct and complete, missalemeum's fixture simply has nothing + comparable to check it against. *) +let m23_dates = [ "2026-04-03"; "2027-03-26" ] + +(* M24 -- Task 9: four Holy Week rows where missalemeum's own Gospel + citation embeds a LATIN book abbreviation ("Luc"/"Joann") instead of its + own usual English one ("Luke"/"John") -- checked directly against the + raw JSON, not assumed: every OTHER citation in the fixture, including + these same four rows' own Epistle, uses English throughout. A source + presentation quirk on missalemeum's own side (its English-translation + layer appears to have a template gap for these four Gospel citations + specifically), not a different Scripture reference -- the same + underlying verses, same chapter/verse numbers, confirmed identical + after every OTHER normalisation this file's own [normalize_citation] + already applies. Not folded into that function (a two-entry Latin/ + English book-name table would be the first step of a general + translation layer this project's own citation discipline deliberately + does not build -- the SAME limit M5 already names for a different + vocabulary gap) -- named here instead, narrowly, as what it is. *) +let m24_dates = [ "2026-04-01"; "2026-04-02"; "2027-03-24"; "2027-03-25" ] + +(* M25 -- Task 9: four Lenten rows where the underlying verse range is + IDENTICAL but the two sources punctuate its own internal boundary + differently -- "4 Kings 5:1-15" (colitur) vs "4 Kings, 5:1-15" + (missalemeum, a spurious comma after the book name with no citation + content of its own) on 2026-03-09/2027-03-01; "Dan 14:27, 28-42" + (colitur, verse 27 named separately then 28-42) vs "Dan 14:27-42" + (missalemeum, the identical span as one contiguous range) on + 2026-03-24/2027-03-16. Neither is a book/chapter/verse-NUMBER + difference [normalize_citation] could safely absorb without also + risking silently equating two GENUINELY different verse lists + elsewhere in the fixture (e.g. a real "12, 15-20" vs "12-20" would + look identical to this rule but mean different things) -- named + individually instead, the same discipline M5's own identity-gated + predicate already applies to a citation-vocabulary gap. *) +let m25_dates = [ "2026-03-09"; "2026-03-24"; "2027-03-01"; "2027-03-16" ] + +(* M26 -- Task 9: the large remaining population, one single root cause. + {!Rite_ef.Lectionary_ef.readings}'s own header comment already names + this LIMIT, not a rubric dispute this task settled: step 3 ("a feria + with no proper says the preceding SUNDAY's Mass") is colitur's only + fallback mechanism, and its own WARRANT is "lectio's own observed + behaviour... not a confirmed Missal citation" -- register's own + standing note. missalemeum's own ferial-Mass selection is more + granular than that single rule in (at least) three distinct ways this + task's own investigation found and confirmed against the primary + source, but did NOT build (a genuine, understood, ALREADY-DOCUMENTED + architecture gap, the SAME shape data/ef/expected-divergences.sexp's + own C6/C25 entries already carry for the sibling lectio differential, + and Task 6's own residual concern 4/5, "the BVM Saturday Office still + emits its feria's Mass... needs... a season-keyed selection among five + formularies" -- RG 309(a), "iuxta temporum diversitatem"): + (1) a rotating VOTIVE MASS OF THE BVM ("Missae de sanctae Mariae in + sabbato" I-V and their Time-after-Pentecost siblings, missalemeum's own + "II/III/V Mass of the B. V. M." titles) on an otherwise-unoccupied + feria, not only a Saturday -- 2026-01-03/2026-01-10/2027-01-02/ + 2027-01-09 are RG 78's own BVM SATURDAY Office specifically (Task 6's + own named open item; colitur's own step-3 fallback, not the votive + Mass, is what these four rows actually show -- 2026-01-03/2027-01-09 + are `ef-christmas-1-saturday`, C25's own unchanged population in the + sibling lectio differential; 2026-01-10/2027-01-02 are + `ef-christmas-2-saturday`); the rest of this entry's own population + are ordinary weekday ferias in Time after Pentecost showing the SAME + votive-Mass title; + (2) a NAMED weekly formula distinct from the plain Sunday-repeat rule + for at least one week this task's own primary-source reading found by + accident while fixing a DIFFERENT gap (Holy Family's own week, + "Missa Dominicae Primae post Epiphaniam" -- built, tools/ + bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) -- + 2026-06-02/03 and 2027-05-24 are the SAME shape for a different week + (the ferias between Trinity Sunday and Corpus Christi, "Missa + Dominicae I post Pentecosten", 1 John 4:8-21/Luke 6:36-42, visible in + the raw scan while researching Corpus Christi's own Mass -- see + docs/research/scan1.txt around line 21800 -- but NOT independently + verified as a general "every week has its own named formula" rule the + way the January window was, and NOT built here); + (3) later Time-after-Pentecost weeks whose own votive/ferial answer + this task's investigation did not narrow to a single citable rule at + all (2026-10-26 through 2026-11-28, 2027-11-03 through 2027-11-27). + ALL THREE are variations on the identical root limitation, not three + separate bugs, and none is safe to fix piecemeal inside this task's own + scope (extending layer 4 + triage) without the same real, dedicated, + TDD/mutation-tested unit of work C6/C25 and Task 6's own open item + already call for -- a season-keyed ferial/votive-Mass-selection + mechanism, new behaviour, not new data. Verdict open, the SAME fourth + verdict M15/M18 already establish for a genuine comparator/architecture + LIMIT, honestly counted rather than silently absorbed or left failing + without explanation. A literal date list, not a shape predicate (no + single structural signal -- unlike C17's own [subject = bvm] -- exists + to distinguish this population from a genuinely new, unrelated + citation bug on some other Time-after-Pentecost feria): the SAME + discipline this file's own header names for every other entry here. *) +let m26_dates = + [ "2026-01-03"; "2026-01-10"; "2026-02-14"; "2026-06-02"; "2026-06-03"; "2026-06-20"; "2026-06-27"; + "2026-07-04"; + "2026-07-11"; "2026-08-01"; "2026-10-26"; "2026-10-27"; "2026-10-29"; "2026-10-30"; "2026-10-31"; + "2026-11-07"; "2026-11-28"; "2027-01-02"; "2027-01-09"; "2027-05-24"; "2027-07-17"; "2027-07-24"; + "2027-09-04"; "2027-09-11"; "2027-10-30"; "2027-11-03"; "2027-11-05"; "2027-11-06"; "2027-11-13"; + "2027-11-27" ] + +(* M27 -- Task 9: Christmas Day, both years. Christmas has THREE Masses in + the 1962 Missal (Midnight/"in nocte", Dawn/"in aurora", Day/"in die"), + each with its own distinct Epistle+Gospel -- missalemeum's own JSON + array has all three, but tools/extract_missalemeum_oracle.py's own + convention (documented in its header, verified for every OTHER field + this fixture reads) takes entry[0] uniformly, which for THIS one day is + the Midnight Mass (Titus 2:11-15/Luke 2:1-14) -- colitur's own citation + (Heb 1:1-12/John 1:1-14, bootstrapped from lectio, matching the + Day Mass, the conventional "default" answer to "what does 25 December + read") is a DIFFERENT, also-genuine Mass of the identical day, not a + wrong one. A comparator/fixture-extraction artefact (which of several + equally-real Masses a multi-Mass day's own entry[0] happens to be), the + SAME limit family as M23's own oracle-side absence -- not a rubric + dispute, and not fixed by changing the extractor's own array-index + convention, which the extraction script's own header already + documents as deliberate and verified for every OTHER field this + fixture reads (rank/colours/tempora/commemorations/displaced, all + confirmed IDENTICAL across a day's own multiple Masses -- only the + citation fields are not, discovered by this task). *) +let m27_dates = [ "2026-12-25"; "2027-12-25" ] + (* [_o] (the oracle's own row) is unused now that M2 -- its one reader, via [o.o_title] -- is closed/removed (see the comment above [m1_dates]): every remaining predicate below reads only [c]/[diffs]. Kept as a named, @@ -987,9 +1256,17 @@ let layer_m_reason (c : colitur_row) (_o : oracle_row) diffs = dates is TEMPORAL-origin (the Sunday itself, RG33's own point -- the vigil should never have displaced it), so it now ALSO carries [Observed_identity_unresolved] -- the same root cause the file's other - widened entries below share, restated for this one's own shape. *) + widened entries below share, restated for this one's own shape. + WIDENED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): + [First_mismatch]/[Gospel_mismatch] join the accepted set -- once the + OBSERVED day itself differs (the vigil vs the Sunday RG 33 requires), + its own reading citation is a natural CONSEQUENCE of that same + identity divergence, not a second, independent cause (the same + "identity already differs, so citation differs too" reasoning + test_differential.ml's own C14/C15/C16/C29 already establish). *) else if List.mem c.c_date m1_dates - && subset diffs [ Rank; Colour_f; Comm_presence; Observed_identity_unresolved ] + && subset diffs + [ Rank; Colour_f; Comm_presence; Observed_identity_unresolved; First_mismatch; Gospel_mismatch ] then Some "M1" (* M2 -- CLOSED, REMOVED (ef-bvm-saturday task): see this file's own M2 note above (near [m1_dates]) for the full account -- the RG 91 entry 27 @@ -1014,8 +1291,18 @@ let layer_m_reason (c : colitur_row) (_o : oracle_row) diffs = gap (the Seven Sorrows commemoration is never constructed, so colitur has no candidate to observe OR commemorate in its place) now visible on a THIRD axis. *) + (* WIDENED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): + [First_mismatch]/[Gospel_mismatch] join the accepted set -- colitur's + OBSERVED day here is Joseph, whose own citations differ from + missalemeum's own Seven-Sorrows-of-Passion-Friday citation for the + identical, already-named reason (the Seven Sorrows commemoration is + never constructed, so colitur observes Joseph outright instead), not + a fourth, independent cause. *) else if List.mem c.c_date m13_dates - && subset diffs [ Rank; Colour_f; Comm_identity_unresolved; Observed_identity_mismatch ] + && subset diffs + [ Rank; Colour_f; Comm_identity_unresolved; Observed_identity_mismatch; First_mismatch; + Gospel_mismatch + ] then Some "M13" else if List.mem c.c_date m15_dates && diffs = [ Comm_identity_unresolved ] then Some "M15" (* M16's own subset widened (this task): colitur's observed celebration @@ -1040,6 +1327,22 @@ let layer_m_reason (c : colitur_row) (_o : oracle_row) diffs = && subset diffs [ Comm_identity_mismatch; Observed_identity_unresolved ] && m20_commemoration_matches c then Some "M20" + else if + List.mem c.c_date m23_dates + && subset diffs [ Observed_identity_unresolved; First_unresolved; Gospel_unresolved ] + then Some "M23" + else if List.mem c.c_date m24_dates && subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ] + then Some "M24" + else if List.mem c.c_date m25_dates && subset diffs [ Observed_identity_unresolved; First_mismatch ] then + Some "M25" + else if + List.mem c.c_date m26_dates + && subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ] + then Some "M26" + else if + List.mem c.c_date m27_dates + && subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ] + then Some "M27" else None (* ---------------------------------------------------------------------- *) @@ -1089,19 +1392,24 @@ let describe_comm (slug, rank, status, name) = Printf.sprintf "%s(rank=%d,status=%s,name=%s)" slug rank (status_to_string status) (match name with Some n -> Printf.sprintf "%S" n | None -> "NONE") +let describe_opt = function Some s -> Printf.sprintf "%S" s | None -> "NONE" + let describe_unexplained (c : colitur_row) (o : oracle_row) diffs = - Printf.sprintf "%s: %s differ -- colitur=(rank=%d colour=%c comms=[%s]) oracle=(rank=%d colours=[%s] \ - title=%S comms=[%s] comm_ids=[%s] displaced=[%s])" + Printf.sprintf "%s: %s differ -- colitur=(rank=%d colour=%c comms=[%s] first=%s gospel=%s) \ + oracle=(rank=%d colours=[%s] title=%S comms=[%s] comm_ids=[%s] displaced=[%s] first=%s \ + gospel=%s)" c.c_date (String.concat "," (List.map field_name diffs)) c.c_rank c.c_colour (String.concat ";" (List.map describe_comm c.c_commemorations)) + (describe_opt c.c_first) (describe_opt c.c_gospel) o.o_rank (String.concat "" (List.map (String.make 1) o.o_colours)) o.o_title (String.concat ";" o.o_commemorations) (String.concat ";" o.o_commemoration_ids) (String.concat ";" o.o_displaced) + (describe_opt o.o_first) (describe_opt o.o_gospel) let test_fixture_checksum () = Alcotest.(check string) "fixture SHA-256 matches its provenance note" fixture_sha256 diff --git a/tools/bootstrap_lectionary.ml b/tools/bootstrap_lectionary.ml index 670130d..357cb81 100644 --- a/tools/bootstrap_lectionary.ml +++ b/tools/bootstrap_lectionary.ml @@ -91,25 +91,27 @@ let weekdays = [ "monday"; "tuesday"; "wednesday"; "thursday"; "friday"; "saturd let colitur_keys name = if String.equal name "ef-christmas-sunday-0" then - (* WIDEN, not rename -- fix round (found by test_lectionary_ef.ml's own - pre-existing test_step3_christmas_feria_resumes_sunday going from - PASS to FAIL): "ef-christmas-sunday-0" is not only lectio's own - calendar-level slug for RG 17(a)'s Holy Name Sunday - (test_differential.ml's own [norm_slug] comment) -- it is ALSO - colitur's own GENUINE, DIRECTLY-COMPUTED temporal slug (Rite_ef. - Temporal_ef.temporal, "if m = 12 && dd >= 26 then Some - \"ef-christmas-sunday-0\"") for an ordinary Sunday landing on 26-28 - December, the historical "Sunday within the Octave of the Nativity" - -- a DIFFERENT civil window than Holy Name Sunday (2-5 January), and - Missal-confirmed (docs/research/scan1.txt, "Dominica infra octavam - Nativitatis Domini, II classis") to be the IDENTICAL Mass (Gal. - 4,1-7 / Luc. 2,33-40), not a coincidence. The first version of this - translation REPLACED the key outright and broke that pre-existing, - working case -- caught by the existing test suite, not by this - generator's own reasoning; keeping the original key alongside the - Holy-Name-Sunday alias fixes it, following the same "widen, never - narrow" rule this table's own general design already intends. *) - [ "ef-christmas-sunday-0"; "ef-holy-name-sunday" ] + (* Task 9 (branch ef-lectionary, layer-4 oracle): CORRECTED -- this + branch used to ALSO widen into "ef-holy-name-sunday" (see git + history for the removed paragraph's own reasoning), on the claim + that RG 17(a)'s Holy Name Sunday shares the IDENTICAL Mass with the + historical "Sunday within the Octave of the Nativity" this ini + section actually carries (Gal. 4,1-7 / Luc. 2,33-40). WRONG, + DISPROVED by an INDEPENDENT primary source once this task built a + real oracle comparison against it: missalemeum's own extraction for + 2026-01-04/2027-01-03 (both real Holy Name Sundays) shows Acts + 4:8-12 / Luke 2:21 instead, and docs/research/scan1.txt AND scan2.txt + both confirm it, twice over, word for word ("SANCTISSIMI NOMINIS + IESU, II classis... Lectio Actuum Apostolorum. Act. 4, 8-12... + Sequentia sancti Evangelii secundum Lucam. Luc. 2, 21", + scan1.txt:6579-6608, scan2.txt:7225-7297) -- a DIFFERENT, DISTINCT + Mass from the Sunday-within-the-Octave's own (still correctly + carried by THIS key, "ef-christmas-sunday-0", unaffected by this + correction). The widen is removed; Holy Name Sunday's own citation + is now hand-authored directly, [holy_name_entries] below, sourced + from the Missal rather than mis-derived from an unrelated ini + section by analogy. *) + [ "ef-christmas-sunday-0" ] else if String.equal name "ef-easter-8-wednesday" then [ "ef-pentecost-ember-wed" ] else if String.equal name "ef-easter-8-friday" then [ "ef-pentecost-ember-fri" ] else if String.equal name "ef-easter-8-saturday" then [ "ef-pentecost-ember-sat" ] @@ -440,36 +442,180 @@ let nativity_octave_entries = let cs = pair ~first:"Titus 3:4-7" ~gospel:"Luke 2:15-20" in List.map (fun n -> (slug_or_die (Printf.sprintf "ef-nativity-octave-day-%d" n), cs)) [ 5; 6; 7 ] -(* One more colitur-only slug, DERIVED from [ef-holy-name-sunday]'s own - citations (just translated above) rather than a second hand-typed copy - of the same text: [ef-holy-name] is RG 17(a)'s own fallback ("secus die - 2 ianuarii", 2 January in a year with no Sunday 2-5 January). The - calendarium's own table (data/ef/expected-divergences.sexp's own C16 - note quotes it) gives ONE heading for both the Sunday and the fallback - shape -- the identical Mass, not two -- so this is the same citation - pair, not an independent lookup. Safe to hard-wire (unlike a step-3 - fallback, which would walk back into a DIFFERENT, unrelated Sunday of - the OLD liturgical year): RG 17(a)'s whole point is that this Mass is - said in place of, not alongside, whatever ferial reading a bare - fallback would otherwise find. +(* Task 9 (branch ef-lectionary, layer-4 oracle): [ef-holy-name-sunday] and + [ef-holy-name] (RG 17(a)'s own 2-January fallback, "secus die 2 + ianuarii") HAND-AUTHORED directly from the Missal, replacing the + PREVIOUS mechanism -- deriving [ef-holy-name] from + [ef-holy-name-sunday]'s own (then wrongly-widened) ini-translated + citation, itself borrowed from an unrelated ini section by analogy (see + [colitur_keys]'s own "ef-christmas-sunday-0" branch, CORRECTED note, + for the full account of the error this replaces). Both slugs get the + SAME citation pair -- the calendarium's own table (scan1.txt/scan2.txt, + same headings cited above) gives ONE Mass heading covering both the + Sunday and the 2-January fallback shape, not two -- so this is still + one hand-typed value, not a second independent lookup, the same + discipline the removed [derived_entries] intended, just sourced + correctly this time. [ef-nativity-octave-day-{5,6,7}] does NOT reuse this value -- a first attempt tried exactly that and was measured wrong and reverted; see [nativity_octave_entries] above for the correct, DIFFERENT, directly Missal-sourced formulary and the full account of why the two headings differ. *) -let derived_entries entries = - let holy_name_sunday_citations = - match - List.find_opt (fun (s, _) -> String.equal (Slug.to_string s) "ef-holy-name-sunday") entries - with - | Some (_, cs) -> cs - | None -> - die "internal: ef-holy-name-sunday missing after translation -- cannot derive its dependants" - in - match Slug.of_string "ef-holy-name" with - | Ok s -> [ (s, holy_name_sunday_citations) ] - | Error e -> die "%s" e +let holy_name_citations = pair ~first:"Acts 4:8-12" ~gospel:"Luke 2:21" + +let holy_name_entries = + [ (slug_or_die "ef-holy-name-sunday", holy_name_citations); (slug_or_die "ef-holy-name", holy_name_citations) ] + +(* Task 9 (branch ef-lectionary, layer-4 oracle): three more colitur-only + slug families, all in the same 2-13 January stretch as + [holy_name_entries] just above and found the same way -- missalemeum's + own oracle disagreeing with colitur's step-3 fallback answer on every + civil day these slugs cover, traced back to an EXPLICIT primary-source + rubric each time, not a guess. All three ranges and their own slug + families are documented, independently, in + {!Rite_ef.Temporal_ef.christmastide_feria_slug}'s own comment (that + function's docstring gives the exact civil-date boundaries this + generator relies on here; not re-derived, read directly from the code + that computes them). + + - [ef-christmas-1-{monday,tuesday,wednesday,thursday,friday}] (2-5 + January, EXCLUDING Saturday -- see below): RG 17(a)'s OWN rubric, + immediately following the Holy-Name-Sunday heading, both scans, word + for word: "Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 + ianuarii" (scan1.txt:6522-6526) / "Diebus ferialibus a 2 ad 6 + ianuarii Missa dicitur ut die 1 ianuarii" (scan2.txt, the "6" a + one-digit OCR variant of scan1's "5" -- immaterial either way, since + 6 January is always Epiphany, a fixed I-class feast outranking any + ferial rubric outright) -- ON FERIAL DAYS from 2 to 5 January, THE + SAME MASS AS 1 JANUARY (the Circumcision) IS SAID. + - [ef-christmas-2-{monday,tuesday,wednesday,thursday,friday}] (7 + January through the day before Holy Family Sunday's own civil date, + EXCLUDING Saturday -- see below): the SAME rubric's own next + sentence, both scans, word for word: "Diebus ferialibus a 7 ad 12 + ianuarii ANTE dominicam I post Epiphaniam occurrentibus, dicitur + Missa de festo Epiphaniae" (scan1.txt:6753-6757, scan2.txt + corroborates) -- ON FERIAL DAYS from 7 to 12 January occurring BEFORE + the first Sunday after Epiphany (Holy Family), THE MASS OF THE FEAST + OF EPIPHANY IS SAID. + - [ef-time-after-epiphany-1-{monday,tuesday,wednesday,thursday,friday}] + (Holy Family Sunday's own week, EXCLUDING Saturday -- see below, + straddling the Christmastide/Time-after-Epiphany season boundary on + 14 January without changing slug -- {!christmastide_feria_slug}'s + own comment: "it is the SAME COMPUTATION the ordinary + Time-after-Epiphany ferial fallback... will give the rest of that + same Sunday-to-Saturday week", so one hand-authored value covers the + whole week regardless of which code path computed the slug for a + given civil day): the rubric's own THIRD sentence, same citation, a + named formula rather than a second "repeat the Sunday" instruction: + "post eandem dominicam vero Missa de eadem dominica In excelso + throno, ut infra... Haec Missa dicenda est diebus ferialibus huius + hebdomadae" (scan1.txt:6758-6851, the formula's own heading "MISSA + DOMINICAE PRIMAE post Epiphaniam" immediately below) -- Epistle + "Lectio Epistolae beati Pauli Apostoli ad Romanos. Rom. 12, 1-5" + (scan1.txt:6875-6877), Gospel the SAME pericope as Holy Family's own + Sunday Mass, Luke 2:42-52 (printed out in full immediately below the + Epistle, scan1.txt:6885-6905) -- a DIFFERENT Epistle from Holy Family + Sunday's own (Col 3:12-17), but the SAME Gospel, exactly as + missalemeum's own fixture rows show (2026-01-12/2027-01-11/ + 2027-01-12: Gospel already agreed before this fix, only the Epistle + diverged). + - 13 January's OWN separate case, checked and found to need NO entry + here: when Holy Family does not fall there, 13 January carries a + II-class sanctoral commemoration of its own ("Commemoration of the + Baptism of the Lord", data/ef/sanctoral.sexp's own + [commemoration-of-the-baptism-of-the-lord], already carrying its own + citations, Isa 60:1-6 / John 1:29-34, matching missalemeum exactly) + -- {!Rite_ef.Lectionary_ef.readings}'s own step 1 (the OBSERVED + celebration's own proper) resolves it before step 2 (this + generator's own data) is ever consulted, verified directly against + the real resolver (tools/dump_dates.ml, a scratch diagnostic, not + committed): 2026-01-13/2027-01-13 both already show the correct + citation with none of the entries below in play. + + SATURDAY IS EXCLUDED FROM ALL THREE FAMILIES, deliberately, not an + oversight, and NOT (as an earlier draft of this comment argued for the + latter two) safe to include: RG 78 ("In sabbatis, in quibus occurrit + Officium de feria IV classis, fit de sancta Maria in sabbato", already + built, Rite_ef.Temporal_ef's own [bvm_saturday_names]) makes ANY + otherwise-unoccupied IV-class Saturday the Saturday Office of the BVM + instead of a plain feria -- UNCONDITIONALLY, not merely when nothing + else happens to compete that day (Precedence_ef's own [band] gives it + this ranking whenever the day's own office would otherwise be a plain + Class4 feria, checked in {!Rite_ef.Temporal_ef}'s own [bvm_saturday_names] + comment and confirmed against the real resolver here, not assumed). + This window's own five otherwise-unoccupied Saturdays inside these + three families (2026-01-03, 2026-01-10, 2027-01-09; 2026-01-17 and + 2027-01-16 are won outright by a saint instead, Anthony and Marcellus I + respectively, whose own citations are unaffected either way) genuinely + ARE the BVM Office, missalemeum's own title confirming it on every one + that reaches the office at all ("II Mass of the B. V. M. -- Vultum + Tuum", never "Feria") -- so none of the three "repeat X" rubrics above + ever actually apply on a Saturday. The three [-saturday] slugs are + DELIBERATELY left unentered, all three: the BVM Saturday Office's own + citation is a genuine, ALREADY-DOCUMENTED open item (register, Task 6's + own residual concern 4, "the BVM Saturday Office still emits its + feria's Mass") this task does not build, out of scope here the same + way it was there. (CORRECTED from this comment's own first draft, + which excluded only [ef-christmas-1-saturday] and reasoned -- without + checking -- that the other two families' own Saturdays were safe to + include: measured directly against the real resolver and missalemeum's + own fixture, they were not; the same RG 78 mechanism governs all + three windows identically.) *) +let non_saturday_weekdays = [ "monday"; "tuesday"; "wednesday"; "thursday"; "friday" ] + +let epiphanytide_weekday_citations = + [ (`Christmas1, non_saturday_weekdays, pair ~first:"Titus 2:11-15" ~gospel:"Luke 2:21"); + (`Christmas2, non_saturday_weekdays, pair ~first:"Isa 60:1-6" ~gospel:"Matt 2:1-12"); + (`TimeAfterEpiphany1, non_saturday_weekdays, pair ~first:"Rom 12:1-5" ~gospel:"Luke 2:42-52") + ] + +let epiphanytide_opening_entries = + List.concat_map + (fun (family, wds, cs) -> + let prefix = + match family with + | `Christmas1 -> "ef-christmas-1-" + | `Christmas2 -> "ef-christmas-2-" + | `TimeAfterEpiphany1 -> "ef-time-after-epiphany-1-" + in + List.map (fun wd -> (slug_or_die (prefix ^ wd), cs)) wds) + epiphanytide_weekday_citations + +(* Task 9 (branch ef-lectionary, layer-4 oracle): two major, permanently- + named I-class movable feasts of the Lord that had NO lectionary entry + at all until now -- not a renamed/mis-widened value like + [holy_name_entries] above, a genuine ABSENCE. Both slugs are real, + directly-computed [Temporal_ef] offices (temporal_ef.ml's own [named] + function, "ef-corpus-christi"/"ef-sacred-heart"), so every occurrence + fell through to step 3's ferial resumption (Trinity Sunday's own + citation, repeated) instead of the feast's own Mass -- invisible before + this task made citation CONTENT comparable at all, the identical shape + Task 8's own [colitur_keys] fixes already found for renamed slug + families, here for a slug that was never translated from anywhere + because lectio's own EF ini has no equivalent section for either feast. + Both citations verified against BOTH scans, word for word: + + - [ef-corpus-christi] ("IN FESTO SSMI CORPORIS CHRISTI, I classis"): + 1 Cor 11:23-29 / John 6:56-59 -- scan1.txt:21867-21917 ("Lectio + Epistolae beati Pauli Apostoli ad Corinthios. 1 Cor. 11, 23-29" / + "...secundum Ioannem. Io. 6, 56-59"), scan2.txt:24084-24172 + corroborates both citations. + - [ef-sacred-heart] ("IN FESTO SACRATISSIMI CORDIS IESU, I classis"): + Eph 3:8-12, 14-19 / John 19:31-37 -- scan1.txt:22030-22095 ("...ad + Ephesios. Ephes. 3, 8-12 et 14-19" / "...secundum Ioannem. Io. 19, + 31-37"), scan2.txt:24284-24336 corroborates the heading and both + citations (the Epistle's own "et 14-19" clause is OCR-truncated to + "3, 8-19" on this second scan alone, its printed body text otherwise + matching word for word; scan1's own clean transcription is + unambiguous, so this is a scan-quality gap, not a genuine + disagreement between the two printings). Both citations independently + corroborated by missalemeum's own extraction too (test/fixtures/ + missalemeum-ef-2026-2027.txt, 2026-06-04 and 2026-06-12/2027-06-04). *) +let movable_feast_entries = + [ (slug_or_die "ef-corpus-christi", pair ~first:"1 Cor 11:23-29" ~gospel:"John 6:56-59"); + (slug_or_die "ef-sacred-heart", pair ~first:"Eph 3:8-12, 14-19" ~gospel:"John 19:31-37") + ] let sha256 path = let ic = Unix.open_process_in (Printf.sprintf "sha256sum %s" (Filename.quote path)) in @@ -574,7 +720,8 @@ let () = let translated = List.concat_map convert secs in let entries = translated @ vigil_entries @ holy_week_entries @ passion_tuesday_entry - @ ember_saturday_corrections @ nativity_octave_entries @ derived_entries translated + @ ember_saturday_corrections @ nativity_octave_entries @ holy_name_entries + @ epiphanytide_opening_entries @ movable_feast_entries in assert_reachable entries; let lect = @@ -603,16 +750,17 @@ let () = ; Missal, one entry [passion_tuesday_entry]; %d hand-authored directly\n\ ; from the Missal, two entries [ember_saturday_corrections]; %d\n\ ; hand-authored directly from the Missal [nativity_octave_entries];\n\ - ; %d derived from an already-translated entry above rather than\n\ - ; re-typed [derived_entries] -- see this generator's own comments on\n\ - ; all seven). Regenerate with:\n\ + ; %d hand-authored directly from the Missal, two entries\n\ + ; [holy_name_entries]; %d hand-authored directly from the Missal\n\ + ; [epiphanytide_opening_entries]; %d hand-authored directly from the\n\ + ; Missal, two entries [movable_feast_entries] -- see this generator's\n\ + ; own comments on all nine). Regenerate with:\n\ ; eval $(opam env) && dune exec tools/bootstrap_lectionary.exe -- %s %s\n" src (sha256 src) (List.length entries) (List.length secs) (List.length vigil_entries) (List.length holy_week_entries) (List.length passion_tuesday_entry) (List.length ember_saturday_corrections) (List.length nativity_octave_entries) - (List.length entries - List.length translated - List.length vigil_entries - - List.length holy_week_entries - List.length passion_tuesday_entry - - List.length ember_saturday_corrections - List.length nativity_octave_entries) + (List.length holy_name_entries) (List.length epiphanytide_opening_entries) + (List.length movable_feast_entries) src dst; Sexplib.Sexp.output_hum oc (Lectionary.sexp_of_t lect); output_char oc '\n'; diff --git a/tools/extract_missalemeum_oracle.py b/tools/extract_missalemeum_oracle.py index a010b52..4b010e2 100644 --- a/tools/extract_missalemeum_oracle.py +++ b/tools/extract_missalemeum_oracle.py @@ -18,7 +18,7 @@ # exists for every day. # # One line per day, pipe-separated: -# date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids +# date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids|first|gospel # # - rank/colors/title/tempora/commemorations/displaced are info.rank, # info.colors (sorted, concatenated, e.g. "pv"), info.title, info.tempora @@ -42,6 +42,35 @@ # is ever commemorated there). Never parsed for its date component by this # fixture or the comparator (info.rank/colors already give the day's own # values); kept opaque and compared as a plain string. +# - first/gospel (Task 9) are the day's own Epistle/Lesson and Gospel +# citations, extracted from entry[0]["sections"] -- the section with +# id "Lectio" ("Epistle") and "Evangelium" ("Gospel") respectively. Each +# section's own body is a [[english, latin]] pair; the ENGLISH text +# (body[0][0]) embeds the citation as one of possibly several +# "*...*"-wrapped (markdown-italic) spans -- e.g. "Lesson from the letter +# of St. Paul... \n*Titus 2:11-15*\nBeloved: ...". It is NOT always the +# FIRST such span: Holy Saturday's own Gospel section opens with a rubric +# note, itself "*"-wrapped ("*While singing the Gospel candles are not +# being hold.*"), before the real citation "*Matt 28:1-7*" -- checked +# directly against the raw JSON, not assumed. The citation span is +# identified structurally instead of positionally: the first "*...*" span +# under 40 characters that contains a chapter:verse-shaped digit pair +# (`\d+\s*[:,.]\s*\d+`, matching all three separators actually used in +# this source -- "Titus 2:11-15", "4 Kings, 5:1-15", "John 20. 19-31"). +# Verified exhaustively over the whole fixture (all 1 458 Lectio/ +# Evangelium sections across the 728 days that carry one): exactly one +# candidate per section, zero ambiguous, zero false positives from a +# longer rubric sentence. TWO days (Good Friday, both years -- the "Missa +# Praesanctificatorum" liturgy) have no "Lectio"/"Evangelium" section at +# all (a multi-lesson structure instead, "Lectiones"/"Passio", with no +# single reading occupying the Epistle/Gospel slot this schema assumes, +# the SAME shape colitur's own test_lectionary.ml records for its own +# hand-authored Holy Week data) -- "-" for both fields on those two rows, +# a WARNING on stderr naming the date, never a silent guess. Extracted +# VERBATIM (only .strip()ped of surrounding whitespace) -- not normalized, +# not re-punctuated: the comparator's job, not this extractor's, matching +# the same "verbatim, not translated or slugified" discipline the fields +# above already state. # - Spaces in tempora are turned to "_" (matching the "no field has an # internal space" convention test/fixtures/lectio-ef-2005-2050.txt already # uses, so this fixture can be read the same simple way -- split on '|', @@ -50,8 +79,27 @@ # pass-through display, is space-collapsed for a cheap column-count check). import json import os +import re import sys +STAR_RE = re.compile(r"\*([^*]+)\*") +VERSE_RE = re.compile(r"\d+\s*[:,.]\s*\d+") + + +def extract_citation(sections, section_id, date, label): + for sec in sections: + if sec["id"] != section_id: + continue + text = sec["body"][0][0] + candidates = [s.strip() for s in STAR_RE.findall(text) if VERSE_RE.search(s) and len(s) < 40] + if candidates: + return candidates[0] + print(f"WARNING: {date}: {section_id!r} section found but no citation-shaped span in it ({label})", + file=sys.stderr) + return "-" + print(f"WARNING: {date}: no {section_id!r} section ({label})", file=sys.stderr) + return "-" + def main(): if len(sys.argv) != 3: @@ -84,8 +132,16 @@ def main(): comms = ";".join(comm_titles) or "-" disp = ";".join(disp_titles) or "-" ids = ";".join(comm_ids) or "-" + sections = data[0]["sections"] + cit_first = extract_citation(sections, "Lectio", date, "Epistle") + cit_gospel = extract_citation(sections, "Evangelium", date, "Gospel") + for t in (cit_first, cit_gospel): + if "|" in t: + print(f"ERROR: {date}: citation {t!r} contains a delimiter this fixture uses", file=sys.stderr) + return 1 rows.append( f"{date}|{first['rank']}|{colors}|{first['title']}|{tempora}|{comms}|{disp}|{len(data)}|{ids}" + f"|{cit_first}|{cit_gospel}" ) if len(rows) != 730: -- cgit v1.3