aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/golden/grid-2027.html2
-rw-r--r--test/golden/grid-2027.ms2
-rw-r--r--test/golden/grid-2027.tex2
-rw-r--r--test/golden/grid-2027.typ2
-rw-r--r--test/golden/ordo-2027.adoc2
-rw-r--r--test/golden/ordo-2027.html2
-rw-r--r--test/golden/ordo-2027.md2
-rw-r--r--test/golden/ordo-2027.ms4
-rw-r--r--test/golden/ordo-2027.tex2
-rw-r--r--test/golden/ordo-2027.txt4
-rw-r--r--test/golden/ordo-2027.typ2
-rw-r--r--test/test_differential.ml18
-rw-r--r--test/test_golden.ml29
-rw-r--r--test/test_lectionary.ml38
-rw-r--r--test/test_lms_ordo.ml91
-rw-r--r--test/test_oracle.ml47
16 files changed, 225 insertions, 24 deletions
diff --git a/test/golden/grid-2027.html b/test/golden/grid-2027.html
index 6741ad7..92a73ec 100644
--- a/test/golden/grid-2027.html
+++ b/test/golden/grid-2027.html
@@ -134,7 +134,7 @@
<td class="white"><span class="dom">2</span>5th Sunday after Easter<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">3</span>Rogation Monday<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">4</span>St. Monica<span class="sigla">1 Tim 5:3-10 &middot; Luke 7:11-16</span></td><td class="white"><span class="dom">5</span>Vigil of the Ascension<span class="sigla">Eph 4:7-13 &middot; John 17:1-11</span></td><td class="white"><span class="dom">6</span>The Ascension of Our Lord<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">7</span>St. Stanislaus<span class="sigla">Wis 5:1-5 &middot; John 15:1-7</span></td><td class="white"><span class="dom">8</span>Our Lady&#39;s Saturday Office<span class="sigla">Ecclus 24:14-16 &middot; John 19:25-27</span></td>
</tr>
<tr>
- <td class="white"><span class="dom">9</span>Sunday after the Ascension<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="white"><span class="dom">10</span>St. Antoninus<span class="sigla">Ecclus 44:16-27; 45:3-20 &middot; Matt 25:14-23</span></td><td class="red"><span class="dom">11</span>Sts. Philip &amp; James<span class="sigla">Wis 5:1-5 &middot; John 14:1-13</span></td><td class="red"><span class="dom">12</span>Sts. Nereus, Achilleus, Domitilla, &amp; Pancras<span class="sigla">Wis 5:1-5 &middot; John 4:46-53</span></td><td class="white"><span class="dom">13</span>St. Robert Bellarmine<span class="sigla">Wis 7:7-14 &middot; Matt 5:13-19</span></td><td class="white"><span class="dom">14</span>Friday of the 7th Week of Eastertide<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="red"><span class="dom">15</span>Vigil of Pentecost<span class="sigla">Acts 19:1-8 &middot; John 14:15-21</span></td>
+ <td class="white"><span class="dom">9</span>Sunday after the Ascension<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="white"><span class="dom">10</span>St. Antoninus<span class="sigla">Ecclus 44:16-27; 45:3-20 &middot; Matt 25:14-23</span></td><td class="red"><span class="dom">11</span>Sts. Philip &amp; James<span class="sigla">Wis 5:1-5 &middot; John 14:1-13</span></td><td class="red"><span class="dom">12</span>Sts. Nereus, Achilleus, Domitilla, &amp; Pancras<span class="sigla">Wis 5:1-5 &middot; John 4:46-53</span></td><td class="white"><span class="dom">13</span>St. Robert Bellarmine<span class="sigla">Wis 7:7-14 &middot; Matt 5:13-19</span></td><td class="white"><span class="dom">14</span>Friday of the 7th Week of Eastertide<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">15</span>Vigil of Pentecost<span class="sigla">Acts 19:1-8 &middot; John 14:15-21</span></td>
</tr>
<tr>
<td class="red"><span class="dom">16</span>Pentecost Sunday (Whitsunday)<span class="sigla">Acts 2:1-11 &middot; John 14:23-31</span></td><td class="red"><span class="dom">17</span>Monday of Pentecost Week<span class="sigla">Acts 10:34, 42-48 &middot; John 3:16-21</span></td><td class="red"><span class="dom">18</span>Tuesday of Pentecost Week<span class="sigla">Acts 8:14-17 &middot; John 10:1-10</span></td><td class="red"><span class="dom">19</span>Pentecost Ember Wednesday<span class="sigla">Acts 5:12-16 &middot; John 6:44-52</span></td><td class="red"><span class="dom">20</span>Thursday of Pentecost Week<span class="sigla">Acts 8:5-8 &middot; Luke 9:1-6</span></td><td class="red"><span class="dom">21</span>Pentecost Ember Friday<span class="sigla">Joel 2:23-24; 2:26-27 &middot; Luke 5:17-26</span></td><td class="red"><span class="dom">22</span>Pentecost Ember Saturday<span class="sigla">Rom 5:1-5 &middot; Luke 4:38-44</span></td>
diff --git a/test/golden/grid-2027.ms b/test/golden/grid-2027.ms
index 4f71416..3432d8f 100644
--- a/test/golden/grid-2027.ms
+++ b/test/golden/grid-2027.ms
@@ -767,7 +767,7 @@ T} T{
T} T{
\fB14\fP \s-2Friday of the 7th Week of Eastertide\s+2
.br
-\s-21 Pet 4:7-11 \(bu John 15:26-27; 16:1-4\s+2
+\s-2Acts 1:1-11 \(bu Mark 16:14-20\s+2
T} T{
\fB15\fP \s-2Vigil of Pentecost\s+2
.br
diff --git a/test/golden/grid-2027.tex b/test/golden/grid-2027.tex
index d81bdb4..1585bda 100644
--- a/test/golden/grid-2027.tex
+++ b/test/golden/grid-2027.tex
@@ -152,7 +152,7 @@
\textbf{ Sunday } & \textbf{ Monday } & \textbf{ Tuesday } & \textbf{ Wednesday } & \textbf{ Thursday } & \textbf{ Friday } & \textbf{ Saturday } \\ \hline
& & & & & & \cellcolor{cwhite}\daycell{ 1 }{ St. Joseph the Workman }{ 1st Class }{ Col 3:14-15, 17, 23-24\ \textperiodcentered\ Matt 13:54-58 } \\ \hline
\cellcolor{cwhite}\daycell{ 2 }{ 5th Sunday after Easter }{ 2nd Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cwhite}\daycell{ 3 }{ Rogation Monday }{ 4th Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cwhite}\daycell{ 4 }{ St. Monica }{ 3rd Class }{ 1 Tim 5:3-10\ \textperiodcentered\ Luke 7:11-16 } & \cellcolor{cwhite}\daycell{ 5 }{ Vigil of the Ascension }{ 2nd Class }{ Eph 4:7-13\ \textperiodcentered\ John 17:1-11 } & \cellcolor{cwhite}\daycell{ 6 }{ The Ascension of Our Lord }{ 1st Class }{ Acts 1:1-11\ \textperiodcentered\ Mark 16:14-20 } & \cellcolor{cred}\daycell{ 7 }{ St. Stanislaus }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 15:1-7 } & \cellcolor{cwhite}\daycell{ 8 }{ Our Lady's Saturday Office }{ 4th Class }{ Ecclus 24:14-16\ \textperiodcentered\ John 19:25-27 } \\ \hline
-\cellcolor{cwhite}\daycell{ 9 }{ Sunday after the Ascension }{ 2nd Class }{ 1 Pet 4:7-11\ \textperiodcentered\ John 15:26-27; 16:1-4 } & \cellcolor{cwhite}\daycell{ 10 }{ St. Antoninus }{ 3rd Class }{ Ecclus 44:16-27; 45:3-20\ \textperiodcentered\ Matt 25:14-23 } & \cellcolor{cred}\daycell{ 11 }{ Sts. Philip \& James }{ 2nd Class }{ Wis 5:1-5\ \textperiodcentered\ John 14:1-13 } & \cellcolor{cred}\daycell{ 12 }{ Sts. Nereus, Achilleus, Domitilla, \& Pancras }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 4:46-53 } & \cellcolor{cwhite}\daycell{ 13 }{ St. Robert Bellarmine }{ 3rd Class }{ Wis 7:7-14\ \textperiodcentered\ Matt 5:13-19 } & \cellcolor{cwhite}\daycell{ 14 }{ Friday of the 7th Week of Eastertide }{ 4th Class }{ 1 Pet 4:7-11\ \textperiodcentered\ John 15:26-27; 16:1-4 } & \cellcolor{cred}\daycell{ 15 }{ Vigil of Pentecost }{ 1st Class }{ Acts 19:1-8\ \textperiodcentered\ John 14:15-21 } \\ \hline
+\cellcolor{cwhite}\daycell{ 9 }{ Sunday after the Ascension }{ 2nd Class }{ 1 Pet 4:7-11\ \textperiodcentered\ John 15:26-27; 16:1-4 } & \cellcolor{cwhite}\daycell{ 10 }{ St. Antoninus }{ 3rd Class }{ Ecclus 44:16-27; 45:3-20\ \textperiodcentered\ Matt 25:14-23 } & \cellcolor{cred}\daycell{ 11 }{ Sts. Philip \& James }{ 2nd Class }{ Wis 5:1-5\ \textperiodcentered\ John 14:1-13 } & \cellcolor{cred}\daycell{ 12 }{ Sts. Nereus, Achilleus, Domitilla, \& Pancras }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 4:46-53 } & \cellcolor{cwhite}\daycell{ 13 }{ St. Robert Bellarmine }{ 3rd Class }{ Wis 7:7-14\ \textperiodcentered\ Matt 5:13-19 } & \cellcolor{cwhite}\daycell{ 14 }{ Friday of the 7th Week of Eastertide }{ 4th Class }{ Acts 1:1-11\ \textperiodcentered\ Mark 16:14-20 } & \cellcolor{cred}\daycell{ 15 }{ Vigil of Pentecost }{ 1st Class }{ Acts 19:1-8\ \textperiodcentered\ John 14:15-21 } \\ \hline
\cellcolor{cred}\daycell{ 16 }{ Pentecost Sunday (Whitsunday) }{ 1st Class }{ Acts 2:1-11\ \textperiodcentered\ John 14:23-31 } & \cellcolor{cred}\daycell{ 17 }{ Monday of Pentecost Week }{ 1st Class }{ Acts 10:34, 42-48\ \textperiodcentered\ John 3:16-21 } & \cellcolor{cred}\daycell{ 18 }{ Tuesday of Pentecost Week }{ 1st Class }{ Acts 8:14-17\ \textperiodcentered\ John 10:1-10 } & \cellcolor{cred}\daycell{ 19 }{ Pentecost Ember Wednesday }{ 1st Class }{ Acts 5:12-16\ \textperiodcentered\ John 6:44-52 } & \cellcolor{cred}\daycell{ 20 }{ Thursday of Pentecost Week }{ 1st Class }{ Acts 8:5-8\ \textperiodcentered\ Luke 9:1-6 } & \cellcolor{cred}\daycell{ 21 }{ Pentecost Ember Friday }{ 1st Class }{ Joel 2:23-24; 2:26-27\ \textperiodcentered\ Luke 5:17-26 } & \cellcolor{cred}\daycell{ 22 }{ Pentecost Ember Saturday }{ 1st Class }{ Rom 5:1-5\ \textperiodcentered\ Luke 4:38-44 } \\ \hline
\cellcolor{cwhite}\daycell{ 23 }{ Trinity Sunday }{ 1st Class }{ Rom 11:33-36\ \textperiodcentered\ Matt 28:18-20 } & \cellcolor{cgreen}\daycell{ 24 }{ Monday of the 1st Week of the Time after Pentecost }{ 4th Class }{ 1 John 4:8-21\ \textperiodcentered\ Luke 6:36-42 } & \cellcolor{cwhite}\daycell{ 25 }{ St. Gregory VII }{ 3rd Class }{ 1 Pet 5:1-4; 5:10-11\ \textperiodcentered\ Matt 16:13-19 } & \cellcolor{cwhite}\daycell{ 26 }{ St. Philip Neri }{ 3rd Class }{ Wis 7:7-14\ \textperiodcentered\ Luke 12:35-40 } & \cellcolor{cwhite}\daycell{ 27 }{ Corpus Christi }{ 1st Class }{ 1 Cor 11:23-29\ \textperiodcentered\ John 6:56-59 } & \cellcolor{cwhite}\daycell{ 28 }{ St. Augustine of Canterbury }{ 3rd Class }{ 1 Thess 2:2-9\ \textperiodcentered\ Luke 10:1-9 } & \cellcolor{cwhite}\daycell{ 29 }{ St. Mary Magdalene de Pazzi }{ 3rd Class }{ 2 Cor 10:17-18; 11:1-2\ \textperiodcentered\ Matt 25:1-13 } \\ \hline
\cellcolor{cgreen}\daycell{ 30 }{ 2nd Sunday after Pentecost }{ 2nd Class }{ 1 John 3:13-18\ \textperiodcentered\ Luke 14:16-24 } & \cellcolor{cwhite}\daycell{ 31 }{ Queenship of the Blessed Virgin Mary }{ 2nd Class }{ Ecclus 24:5; 14:7; 14:9-11; 24:30-31\ \textperiodcentered\ Luke 1:26-33 } & & & & & \\ \hline
diff --git a/test/golden/grid-2027.typ b/test/golden/grid-2027.typ
index b9e1d0e..cc4d440 100644
--- a/test/golden/grid-2027.typ
+++ b/test/golden/grid-2027.typ
@@ -2207,7 +2207,7 @@
#text(weight: "bold")[14] #text(size: 6.5pt)[Friday of the 7th Week of Eastertide]
#v(1fr)
#text(size: 6pt)[4th Class] \
- #text(size: 6pt)[1 Pet 4:7\-11 #sym.dot.c John 15:26\-27; 16:1\-4]
+ #text(size: 6pt)[Acts 1:1\-11 #sym.dot.c Mark 16:14\-20]
]
],
diff --git a/test/golden/ordo-2027.adoc b/test/golden/ordo-2027.adoc
index d5660a0..93a233d 100644
--- a/test/golden/ordo-2027.adoc
+++ b/test/golden/ordo-2027.adoc
@@ -952,7 +952,7 @@ Epistle Wis 7:7-14 Gospel Matt 5:13-19
*14* Friday of the 7th Week of Eastertide +
class-4 · white +
-Epistle 1 Pet 4:7-11 Gospel John 15:26-27; 16:1-4
+Epistle Acts 1:1-11 Gospel Mark 16:14-20
+
Commemoration St. Boniface
diff --git a/test/golden/ordo-2027.html b/test/golden/ordo-2027.html
index 1b621e4..2a3f5e1 100644
--- a/test/golden/ordo-2027.html
+++ b/test/golden/ordo-2027.html
@@ -730,7 +730,7 @@
</div>
<div class="day white">
<span class="dom">14</span>Friday of the 7th Week of Eastertide
- <div class="meta">class-4 &middot; white &middot; Epistle 1 Pet 4:7-11 &middot; Gospel John 15:26-27; 16:1-4</div>
+ <div class="meta">class-4 &middot; white &middot; Epistle Acts 1:1-11 &middot; Gospel Mark 16:14-20</div>
<div class="meta">Commemoration St. Boniface</div>
</div>
<div class="day red">
diff --git a/test/golden/ordo-2027.md b/test/golden/ordo-2027.md
index d4acf1d..c90b65e 100644
--- a/test/golden/ordo-2027.md
+++ b/test/golden/ordo-2027.md
@@ -853,7 +853,7 @@
**14** Friday of the 7th Week of Eastertide
-`class-4` · white · Epistle 1 Pet 4:7-11 · Gospel John 15:26-27; 16:1-4
+`class-4` · white · Epistle Acts 1:1-11 · Gospel Mark 16:14-20
- Commemoration St. Boniface
diff --git a/test/golden/ordo-2027.ms b/test/golden/ordo-2027.ms
index 7bc8c89..c9e6f5e 100644
--- a/test/golden/ordo-2027.ms
+++ b/test/golden/ordo-2027.ms
@@ -1464,9 +1464,9 @@ May
.br
\s74th Class \(bu White\s9
.br
-\s7Epistle 1 Pet 4:7-11\s9
+\s7Epistle Acts 1:1-11\s9
.br
-\s7Gospel John 15:26-27; 16:1-4\s9
+\s7Gospel Mark 16:14-20\s9
.br
\s7Commemoration St. Boniface\s9
.sp 0.25v
diff --git a/test/golden/ordo-2027.tex b/test/golden/ordo-2027.tex
index e8ec59f..0debd17 100644
--- a/test/golden/ordo-2027.tex
+++ b/test/golden/ordo-2027.tex
@@ -1648,7 +1648,7 @@
\begin{tcolorbox}[colback=white,colframe=black!35,boxrule=0.3pt,sharp corners,boxsep=0mm,left=1.6mm,right=1.6mm,top=0.4mm,bottom=0.4mm,before skip=0.3mm,after skip=0mm]
\fontsize{9}{9}\selectfont\bfseries 14 \fontsize{7}{9}\selectfont\mdseries\;Friday\hfill\swatch{licolwhite}\\
\fontsize{9}{9.7}\selectfont\bfseries Friday of the 7th Week of Eastertide\\
-\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ White \quad Epistle\ 1 Pet 4:7-11 \quad Gospel\ John 15:26-27; 16:1-4 \\
+\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ White \quad Epistle\ Acts 1:1-11 \quad Gospel\ Mark 16:14-20 \\
\fontsize{6.5}{7.4}\selectfont\mdseries Commemoration\ St. Boniface
\end{tcolorbox}
diff --git a/test/golden/ordo-2027.txt b/test/golden/ordo-2027.txt
index e0073ec..b2c68a3 100644
--- a/test/golden/ordo-2027.txt
+++ b/test/golden/ordo-2027.txt
@@ -790,8 +790,8 @@ May 2027
14 Friday of the 7th Week of Eastertide
class-4 · white
- Epistle 1 Pet 4:7-11
- Gospel John 15:26-27; 16:1-4
+ Epistle Acts 1:1-11
+ Gospel Mark 16:14-20
Commemoration St. Boniface
15 Vigil of Pentecost
diff --git a/test/golden/ordo-2027.typ b/test/golden/ordo-2027.typ
index ce5e0ca..23afb88 100644
--- a/test/golden/ordo-2027.typ
+++ b/test/golden/ordo-2027.typ
@@ -1589,7 +1589,7 @@
#set par(leading: 0.36em)
#text(weight: "bold")[14] #h(2mm) #text(size: 7pt)[Friday] #h(1fr) #swatch("white") \
#text(weight: "bold")[Friday of the 7th Week of Eastertide] \
- #text(size: 6.5pt)[4th Class #sym.dot.c White #h(2mm) Epistle 1 Pet 4:7\-11 #h(2mm) Gospel John 15:26\-27; 16:1\-4] \
+ #text(size: 6.5pt)[4th Class #sym.dot.c White #h(2mm) Epistle Acts 1:1\-11 #h(2mm) Gospel Mark 16:14\-20] \
#text(size: 6.5pt)[Commemoration St. Boniface]
]
diff --git a/test/test_differential.ml b/test/test_differential.ml
index 2f63df6..222328b 100644
--- a/test/test_differential.ml
+++ b/test/test_differential.ml
@@ -550,6 +550,17 @@ let jan_6_13_slug slug =
let nativity_octave_day_slugs =
[ "ef-nativity-octave-day-5"; "ef-nativity-octave-day-6"; "ef-nativity-octave-day-7" ]
+(* C41 (celebrant-rubrics-phase1, Bug 2, 2026-08-22): the six ferias
+ between the Ascension and the Friday before the Vigil of Pentecost that
+ repeat the Ascension's own Mass (data/ef/lectionary.sexp's own
+ [ascension_week_entries], bootstrap_lectionary.ml). The window's two
+ Saturdays are excluded here too, for the identical reason they carry no
+ lectionary entry: RG 78's votive Office of Our Lady wins first. *)
+let ascension_week_slugs =
+ [ "ef-easter-6-friday"; "ef-easter-7-monday"; "ef-easter-7-tuesday"; "ef-easter-7-wednesday";
+ "ef-easter-7-thursday"; "ef-easter-7-friday"
+ ]
+
(* C18 (ef-sanctoral-audit, 2026-08-14): the closed set of colitur
[status = Feast] sanctoral slugs whose bootstrapped [colour] was
corrected against RG 124 (data/ef/adjustments.sexp's own audit-block
@@ -1190,6 +1201,13 @@ let layer_c_reason (l : row) (c : row) diffs =
then Some "C39"
else if is_bissextile_shift_row l c ~month:m ~day:d && subset diffs [ Slug_f; Rank; Colour_f; First_f; Gospel_f ]
then Some "C40"
+ (* C41 -- the Ascension-repeat rubric (see [ascension_week_slugs]'s own
+ citation above). SAME slug both sides ([Slug_f] never diffs here: the
+ six slugs already exist in lectio's own EF walkback, only their
+ resolved TEXT differs), rank/season/colour agree (both an ordinary
+ Class4 Paschaltide feria), and only the citation itself changes. *)
+ else if List.mem c.slug ascension_week_slugs && subset diffs [ First_f; Gospel_f ]
+ then Some "C41"
(* C25 -- CLOSED, BVM Saturday Mass (2026-08-17), predicate removed: 0 rows.
Its days are unoccupied IV-class Saturdays, so they carry RG 78's office
and now RG 309(a)'s Mass for it, which answers before step 3's walkback
diff --git a/test/test_golden.ml b/test/test_golden.ml
index 3a6f3f5..c916a54 100644
--- a/test/test_golden.ml
+++ b/test/test_golden.ml
@@ -1281,6 +1281,33 @@ let test_readings_displaced_sunday_feria_known_divergent () =
2026 10 26
"2026-10-26 slug=ef-time-after-pentecost-22-monday first=Col 1:12-20. gospel=John 18:33-37"
+(* ---- The Ascension-repeat rubric (celebrant-rubrics-phase1 Bug 2 fix,
+ 2026-08-22) ----
+
+ The Missale Romanum's own Proprium de Tempore carries an explicit
+ marginal rubric immediately after the Ascension's own Mass propers
+ (scan1.txt:20749-20754, both scans corroborate): "Diebus a feria VI post
+ Ascensionem usque ad feriam VI ante vigiliam Pentecostes inclusive,
+ dicitur Missa de festo Ascensionis" -- every feria without its own
+ proper, from the Friday after the Ascension through the Friday before
+ the Vigil of Pentecost, repeats the Ascension's own Mass (Acts 1:1-11 /
+ Mark 16:14-20), not the preceding Sunday's. Witnessed directly: the LMS
+ Ordo prints "Mass of the Ascension" literally on every affected day of
+ this shape across all three of its own fixture windows
+ (data/ef/expected-divergences-lms.sexp's own now-closed L2).
+
+ 2031-05-23 is the exact day the bug report this task fixed was filed
+ against: the day after Ascension Thursday (2031-05-22, Easter+39), an
+ unoccupied Friday that step 3 used to walk back to
+ "ef-easter-sunday-6" -- the 5th Sunday after Easter, the wrong answer
+ -- instead of resolving at step 2 through the new
+ data/ef/lectionary.sexp entry. WHEN THIS PIN'S OWN VALUE WOULD REVERT TO
+ "Iac 1:22-27"/"Ioann 16:23-30" the fix has regressed; update it
+ deliberately then, never to make the suite pass again without checking
+ why. *)
+let test_readings_ascension_week_repeat () =
+ check_readings ~msg:"the day after Ascension repeats the Ascension's own Mass, not the 5th Sunday after Easter's"
+ 2031 5 23 "2031-05-23 slug=ef-easter-6-friday first=Acts 1:1-11 gospel=Mark 16:14-20"
(* ---- Rogation Wednesday (RG 87/88/89), movable-date-specs task ----
@@ -1596,6 +1623,8 @@ let suite =
Alcotest.test_case
"readings: displaced-Sunday feria pins M26 shape 2(b)'s KNOWN-WRONG walkback (2026-10-26)" `Quick
test_readings_displaced_sunday_feria_known_divergent;
+ Alcotest.test_case "readings: the Ascension-repeat rubric, the reported bug's own date (2031-05-23)" `Quick
+ test_readings_ascension_week_repeat;
Alcotest.test_case "RG87: Rogation Wednesday admitted (2024)" `Quick
test_rogation_wednesday_admitted_2024;
Alcotest.test_case "RG87/113: Rogation Wednesday yields to an impeded feast (2026)" `Quick
diff --git a/test/test_lectionary.ml b/test/test_lectionary.ml
index 7dbb253..59c739d 100644
--- a/test/test_lectionary.ml
+++ b/test/test_lectionary.ml
@@ -115,8 +115,14 @@ let test_ef_data_file_loads () =
([epiphanytide_opening_entries], +15); TWO hand-authored
directly from the Missal, two major movable feasts with
previously no entry at all ([movable_feast_entries], +2).
- 116 + 1 + 6 + 1 + 2 + 3 + 2 + 15 + 2 = 148. *)
- Alcotest.(check int) "entry count" 153
+ 116 + 1 + 6 + 1 + 2 + 3 + 2 + 15 + 2 = 148.
+ celebrant-rubrics-phase1, Bug 2 (2026-08-22): SIX hand-authored
+ directly from the Missal's own marginal Ascension-repeat rubric
+ ([ascension_week_entries], +6, 153 -> 159) -- see that
+ function's own comment in bootstrap_lectionary.ml for the
+ citation and why the window's two Saturdays are deliberately
+ excluded. *)
+ Alcotest.(check int) "entry count" 159
(List.length (Lectionary.entries l));
(match Lectionary.find l (slug "ef-lent-1-monday") with
| Some [ a; b ] ->
@@ -179,6 +185,34 @@ let test_ef_data_file_loads () =
scans). *)
check_entry "ef-corpus-christi" "1 Cor 11:23-29" "John 6:56-59";
check_entry "ef-sacred-heart" "Eph 3:8-12, 14-19" "John 19:31-37";
+ (* celebrant-rubrics-phase1, Bug 2: the Missal's own marginal rubric
+ after the Ascension's own Mass propers ("Diebus a feria VI post
+ Ascensionem usque ad feriam VI ante vigiliam Pentecostes
+ inclusive, dicitur Missa de festo Ascensionis") repeats the
+ Ascension's own citation on the ferias that would otherwise walk
+ back to the wrong Sunday. Two families pinned (the tail of
+ Ascension's own week; the following week), not merely one, the
+ same "more than one weekday" discipline this file already uses
+ for the Lent Ember pins above. *)
+ check_entry "ef-easter-6-friday" "Acts 1:1-11" "Mark 16:14-20";
+ check_entry "ef-easter-7-monday" "Acts 1:1-11" "Mark 16:14-20";
+ check_entry "ef-easter-7-friday" "Acts 1:1-11" "Mark 16:14-20";
+ (* [ef-easter-6-saturday] keeps its own PRE-EXISTING entry, unchanged
+ by this task -- RG 78's votive Office of Our Lady always wins an
+ otherwise-unoccupied Class4 Saturday first ([readings]' own step
+ ordering runs that branch before step 2 is ever reached), so this
+ table's own value for that slug is dead data on shipped data, but
+ it was already there before this task and touching it is out of
+ scope. [ef-easter-7-saturday] must stay ABSENT instead: that civil
+ day is the Vigil of Pentecost, a NAMED day with its own slug and
+ Mass (temporal_ef.ml's own [named]), so the generic
+ [ef-<season>-<week>-<weekday>] ferial slug this table's new
+ entries key off never gets produced there at all -- an entry
+ would be unreachable data [assert_reachable] would have refused
+ to emit, checked here too as a direct regression net. *)
+ (match Lectionary.find l (slug "ef-easter-7-saturday") with
+ | None -> ()
+ | Some _ -> Alcotest.fail "ef-easter-7-saturday: must stay absent -- the Vigil of Pentecost, named, never a ferial slug");
check_entry "ef-nativity-vigil" "Rom 1:1-6" "Matt 1:18-21";
check_entry "ef-pentecost-ember-wed" "Acts 5:12-16" "John 6:44-52.";
check_entry "ef-pentecost-ember-fri" "Joel 2:23-24; 26-27" "Luke 5:17-26";
diff --git a/test/test_lms_ordo.ml b/test/test_lms_ordo.ml
index ed1c871..32ecfbc 100644
--- a/test/test_lms_ordo.ml
+++ b/test/test_lms_ordo.ml
@@ -333,7 +333,8 @@ let expected_named_sunday_override slug ~year =
else None
(* See Task 6's own [ascension_week_override] citation (test_lms_ordo.ml
- history, expected-divergences-lms.sexp L2): STRUCTURAL, not a fixture
+ history, data/ef/expected-divergences-lms.sexp's own now-CLOSED L2,
+ celebrant-rubrics-phase1 Bug 2, 2026-08-22): STRUCTURAL, not a fixture
artefact -- the Ascension is a fixed Easter+39, so every feria whose own
[Preceding_sunday] fallback would otherwise resolve to a week-6/7 Sunday
falls, in SOME years, between Ascension Thursday and the following
@@ -341,11 +342,39 @@ let expected_named_sunday_override slug ~year =
the finding: it is specifically the days AFTER Ascension (not merely
"any week-6/7 Preceding_sunday day") that get this treatment -- see
[expected_preceding_sunday_override]'s own citation for the Rogation
- Monday counter-example that exposed the difference. [is_ascension_week]
+ Monday counter-example that exposed the difference. [is_after_ascension]
below is the corrected predicate: the day's own DATE compared against
- {!Computus.ascension} for its own year, not [n]. *)
+ {!Computus.ascension} for its own year, not [n].
+
+ FIXED (celebrant-rubrics-phase1, Bug 2): data/ef/lectionary.sexp's new
+ [ascension_week_entries] now answers these six ferial slugs directly at
+ step 2 (Own_slug), so [check_formulary_overrides]'s own [Preceding_sunday]
+ branch below never reaches them any more -- moved to a dedicated
+ [Own_slug] branch in that same function, which still asserts the Ordo's
+ override reads exactly [ascension_week_override], now as a genuine
+ confirmation that colitur's OWN citation matches (previously this
+ predicate only served to EXCLUDE the population from the general
+ Preceding_sunday mapping, because colitur had no correct answer to
+ compare). This constant and [is_after_ascension] itself are still load-
+ bearing for that confirmation -- kept, not deleted, the same "the
+ regression net survives its own fix" discipline
+ data/ef/expected-divergences-lms.sexp's own L6 note states for
+ [is_l6_rogation_colour]. *)
let ascension_week_override = "Mass of the Ascension"
+(* The exact six slugs data/ef/lectionary.sexp's own [ascension_week_entries]
+ (tools/bootstrap_lectionary.ml) now answers at step 2 -- gated on SLUG
+ IDENTITY, not merely [is_after_ascension date], because that date range
+ also covers "Dominica post Ascensionem" and the Vigil of Pentecost, both
+ genuinely [Own_slug] and both carrying their OWN, different citation, not
+ the Ascension's (caught live: an earlier, date-only version of this gate
+ wrongly flagged both as missing an Ordo override before this list was
+ added). *)
+let ascension_week_slugs =
+ [ "ef-easter-6-friday"; "ef-easter-7-monday"; "ef-easter-7-tuesday"; "ef-easter-7-wednesday";
+ "ef-easter-7-thursday"; "ef-easter-7-friday"
+ ]
+
(* Bounded ABOVE by Pentecost, not merely "later than Ascension" -- a bare
lower bound is wrong for any date past Ascension in the SAME civil year
(every date from June to December satisfies "> Ascension", which a
@@ -431,7 +460,34 @@ let check_formulary_overrides ordo colitur =
:: !bad
| None ->
bad := Printf.sprintf "%s: unmapped (colitur resumed %S) and Ordo shows no override" o.date slug :: !bad))
- | Some { MF.via = MF.Votive; _ } | Some { MF.via = MF.Own_slug; _ } | None -> ())
+ | Some { MF.via = MF.Own_slug; said } -> (
+ (* celebrant-rubrics-phase1, Bug 2 fix: the six Ascension-week
+ ferias moved from [Preceding_sunday] (the branch above, which
+ used to special-case them via [is_after_ascension]) to
+ [Own_slug] -- data/ef/lectionary.sexp's own
+ [ascension_week_entries] now answers at step 2, before step 3
+ is ever reached. Checked HERE, not merely left to fall through
+ silently the way every OTHER [Own_slug] day already does
+ (RG 299's ordinary case, a real proper Mass, needs no Ordo
+ cross-check because nothing about it is adjudicated): this is
+ the one [Own_slug] population this suite has an OUTSIDE
+ witness for, and losing that check when the fix landed would
+ have been a silent regression net, not merely dead code -- the
+ Ordo's own override text must still read "Mass of the
+ Ascension" on exactly these days. *)
+ let slug = match said with Some s -> Colitur_kernel.Slug.to_string s | None -> "" in
+ if List.mem slug ascension_week_slugs then
+ match o.formulary_override with
+ | Some got when String.equal got ascension_week_override -> incr ascension_week
+ | Some got ->
+ bad :=
+ Printf.sprintf "%s: colitur resolved %S via Own_slug (after Ascension), Ordo shows %S, not %S"
+ o.date slug got ascension_week_override
+ :: !bad
+ | None ->
+ bad := Printf.sprintf "%s: colitur resolved %S via Own_slug (after Ascension), Ordo shows no override"
+ o.date slug :: !bad)
+ | Some { MF.via = MF.Votive; _ } | None -> ())
pairs;
{ fc_bad = List.rev !bad; fc_proper = !proper; fc_common = !common; fc_preceding_sunday = !preceding_sunday;
fc_ascension_week = !ascension_week }
@@ -733,7 +789,7 @@ let make_suite ~label ~fixture_path ~fixture_sha256 ~window_first ~window_last ~
Alcotest.(check int) (Printf.sprintf "%d Preceding_sunday days in the window" expected_preceding_sunday)
expected_preceding_sunday r.fc_preceding_sunday;
Alcotest.(check int)
- (Printf.sprintf "%d Preceding_sunday days fall in the Ascension-week exclusion, no more, no fewer"
+ (Printf.sprintf "%d Ascension-week days resolve via Own_slug and match the Ordo's own override, no more, no fewer"
expected_ascension_week)
expected_ascension_week r.fc_ascension_week
in
@@ -797,19 +853,38 @@ let suite_2023_2024 =
Own_slug is excluded). Matthias himself moves to 25 February, an
I-class Sunday that admits him not even as a commemoration (RG16(a)),
so his own Mass is not said anywhere in this window any more. *)
- ~expected_bvm_votive:12 ~expected_proper:181 ~expected_common:2 ~expected_preceding_sunday:61
+ (* expected_preceding_sunday 61 -> 60 (celebrant-rubrics-phase1, Bug 2
+ fix, 2026-08-22): the window's own single Ascension-week day
+ (2024-05-06 was BEFORE Ascension that year and never counted here in
+ the first place -- see [ascension_week_override]'s own citation; the
+ real Ascension-week day this window carries is elsewhere in May)
+ now resolves via Own_slug (step 2, data/ef/lectionary.sexp's new
+ [ascension_week_entries]), not Preceding_sunday -- it leaves this
+ bucket's population the same way a Proper day already does, while
+ expected_ascension_week itself is UNCHANGED (1): the same day is
+ still counted, just via check_formulary_overrides' own new
+ Own_slug branch instead of its Preceding_sunday one. *)
+ ~expected_bvm_votive:12 ~expected_proper:181 ~expected_common:2 ~expected_preceding_sunday:60
~expected_ascension_week:1 ~expected_gloria_l5:5 ~expected_gloria_l6:0
let suite_2024_2025 =
make_suite ~label:"lms-ordo-2024-2025" ~fixture_path:"fixtures/lms-ordo-2024-2025.sexp"
~fixture_sha256:"da817b75c5bf40ed3be1d5f6890b199705e02ce4d42111253ab8547bccabc3f7" ~window_first:"2024-11-27"
~window_last:"2025-12-31" ~year_lo:2023 ~year_hi:2026 ~allow_list_path ~expected_rows:400
- ~expected_bvm_votive:14 ~expected_proper:179 ~expected_common:2 ~expected_preceding_sunday:66
+ (* expected_preceding_sunday 66 -> 63 (celebrant-rubrics-phase1, Bug 2
+ fix): this window's own three Ascension-week days move from
+ Preceding_sunday to Own_slug, the same reasoning as the 2023-2024
+ window's own note above; expected_ascension_week stays 3. *)
+ ~expected_bvm_votive:14 ~expected_proper:179 ~expected_common:2 ~expected_preceding_sunday:63
~expected_ascension_week:3 ~expected_gloria_l5:5 ~expected_gloria_l6:0
let suite_2025_2026 =
make_suite ~label:"lms-ordo-2025-2026" ~fixture_path:"fixtures/lms-ordo-2025-2026.sexp"
~fixture_sha256:"8839a61e0c7d1e6c8326114f4f45a5c183551287a88f4ed01127154add6ae5a5" ~window_first:"2025-11-28"
~window_last:"2026-12-31" ~year_lo:2024 ~year_hi:2027 ~allow_list_path ~expected_rows:399
- ~expected_bvm_votive:13 ~expected_proper:174 ~expected_common:2 ~expected_preceding_sunday:68
+ (* expected_preceding_sunday 68 -> 66 (celebrant-rubrics-phase1, Bug 2
+ fix): this window's own two Ascension-week days move from
+ Preceding_sunday to Own_slug, the same reasoning as the 2023-2024
+ window's own note above; expected_ascension_week stays 2. *)
+ ~expected_bvm_votive:13 ~expected_proper:174 ~expected_common:2 ~expected_preceding_sunday:66
~expected_ascension_week:2 ~expected_gloria_l5:6 ~expected_gloria_l6:0
diff --git a/test/test_oracle.ml b/test/test_oracle.ml
index f1d1a89..01938e1 100644
--- a/test/test_oracle.ml
+++ b/test/test_oracle.ml
@@ -1381,6 +1381,33 @@ let m26_dates =
citation fields are not, discovered by this task). *)
let m27_dates = [ "2026-12-25"; "2027-12-25" ]
+(* M31 (celebrant-rubrics-phase1, Bug 2, 2026-08-22) -- the six ferias
+ between the Ascension and the Friday before the Vigil of Pentecost that
+ repeat the Ascension's own Mass by an explicit marginal rubric in the
+ Proprium de Tempore (data/ef/lectionary.sexp's own [ascension_week_
+ entries], full citation there and in this file's sibling
+ data/ef/expected-divergences.sexp's own C41). Only three of the six
+ civil dates this window's own [c_date] range can reach are actually
+ unoccupied in 2026-2027: 2026-05-21, 2026-05-22 and 2027-05-14 (the
+ other three fall to a real sanctoral feast both engines already agree
+ on). missalemeum -- Divinum Officium's own lineage, the SAME lineage
+ lectio inherited this defect from before colitur's own bootstrap --
+ still walks these ferias back to the preceding Sunday's Mass, the
+ pre-fix answer colitur itself used to give; [Observed_identity_
+ unresolved] fires alongside because none of the three is a SANCTORAL-
+ origin day (the mapping this whole file's own header describes cannot
+ name a TEMPORAL office's title either way, unrelated to this cause). *)
+let m31_dates = [ "2026-05-21"; "2026-05-22"; "2027-05-14" ]
+
+(* The exact six slugs data/ef/lectionary.sexp's own [ascension_week_entries]
+ answers -- reused by [classify_2038]/[classify_2035] below, which key on
+ slug identity rather than a date list (those two live windows are not
+ scoped the way the 2026-2027 fixture is). *)
+let ascension_week_slugs =
+ [ "ef-easter-6-friday"; "ef-easter-7-monday"; "ef-easter-7-tuesday"; "ef-easter-7-wednesday";
+ "ef-easter-7-thursday"; "ef-easter-7-friday"
+ ]
+
(* The oracle's own row went unused when M2 -- its one reader, via
[o.o_title] -- was closed/removed (see the comment above [m1_dates]), and
was kept as a named, typed parameter rather than dropped from the
@@ -1512,6 +1539,8 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs =
[ Rank; Colour_f; Comm_presence; Comm_count; Observed_identity_mismatch;
Comm_identity_unresolved; First_mismatch; Gospel_mismatch ]
then Some "M30"
+ else if List.mem c.c_date m31_dates && subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ]
+ then Some "M31"
else None
(* ---------------------------------------------------------------------- *)
@@ -1992,6 +2021,16 @@ let classify_2038 (c : colitur_row) (o : oracle_row) diffs =
List.mem c.c_date [ "2035-08-09"; "2035-08-14"; "2038-08-09"; "2038-08-14" ]
&& diffs = [ Colour_f ]
then Some "VIGIL-COLOUR-RG128 (M29, colitur; see C37)"
+ (* The Ascension-repeat rubric (celebrant-rubrics-phase1, Bug 2; see M31
+ in this file's own 2026-2027 [layer_m_reason] and C41 in
+ data/ef/expected-divergences.sexp for the full citation). 2038 carries
+ three unoccupied instances the 2026-2027 window did not (2038-06-07/
+ 08/09, all week-7 weekdays); 2035 carries one (2035-05-08). Gated on
+ colitur's own slug rather than on the date list this window's sibling
+ windows use, the same style [m21_2038_slugs] already establishes for
+ a live-window slug-keyed class. *)
+ else if List.mem c.c_observed_slug ascension_week_slugs && diffs = [ First_mismatch; Gospel_mismatch ] then
+ Some "ASCENSION-WEEK-REPEAT (M31, colitur; register, Bug 2)"
else None
(* COMMEMORATIONS join the live-window comparison (2026-08-18).
@@ -2129,7 +2168,13 @@ let test_2038_class_counts () =
("MISSAL-TWO-PART-CITATION (register 6.9)", 1);
("COMM-IDENTITY-UNRESOLVED (temporal-origin, no English name -- M15's limit)", 2);
("PERPETUA-COMMON (register 6.8)", 1);
- ("PETER-COMPANION-ABSENT-UPSTREAM (M19)", 1)
+ ("PETER-COMPANION-ABSENT-UPSTREAM (M19)", 1);
+ (* celebrant-rubrics-phase1, Bug 2: 2038-06-07/08/09 (the Monday,
+ Tuesday and Wednesday of the week after the Sunday after the
+ Ascension) are unoccupied that year, all three landing on the
+ Ascension-repeat rubric -- see M31 (2026-2027 window) and C41
+ (data/ef/expected-divergences.sexp) for the full citation. *)
+ ("ASCENSION-WEEK-REPEAT (M31, colitur; register, Bug 2)", 3)
]
|> List.sort compare
in