aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 20:15:56 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 20:15:56 +0200
commitcd3e03bf3e5b040786838fc3c5639d7c29e9b3b8 (patch)
treee73a7d87dfe7edae72428865c26d6ab851242e17 /test
parente5e304c4004089ea75ea472ebd56414197a4190f (diff)
downloadcolitur-cd3e03bf3e5b040786838fc3c5639d7c29e9b3b8.tar.gz
colitur-cd3e03bf3e5b040786838fc3c5639d7c29e9b3b8.zip
fix(ef): Rogation Monday/Tuesday are white, not violet (RG 119)
Temporal_ef.temporal's Rogation Monday/Tuesday branch hardcoded Colour.Violet with no citation (data/ef/expected-divergences-lms.sexp's L6, surfaced by the LMS Ordo). RG 119 assigns white to the de-Tempore Office and Mass from the Paschal Vigil Mass to the Pentecost Vigil Mass exclusive; Easter+36/+37 sit inside that window. RG 128's own exhaustive four-case violet list never names Rogation days, and its vigil clause (d) is doubly inapplicable: these are not vigils, and they are inside Paschaltide, not outside it. RG 88 explains the violet actually seen in print sources: "de Litaniis minoribus nihil fit in Officio, sed tantum in Missa" -- the violet belongs to the Rogation Mass/procession, a distinct votive text this engine does not model, not to the day's own Office. Witnessed directly: LMS Ordo 2023-2024, 2024-05-06, "FERIA IV Cl W" with "Gl", the Office and Mass printed separately from the optional violet votive Mass of the Rogations. Cascade verified, not assumed: RG 432(b) omits the Gloria on every violet Mass, so the wrong colour was also silencing the Gloria on these two weekdays even though RG 237(e) (Breviary, ordinary Paschaltide ferias say Te Deum) already made it true underneath. White removes the 432(b) block, and the Gloria now follows Te Deum via 431(a), matching the Ordo's own "Gl" -- confirmed with dedicated golden pins in both test_golden.ml (colour) and test_rubrics_ef.ml (the Gloria flip), 2028-05-22/23 (neither day impeded that year). Closed L6 in data/ef/expected-divergences-lms.sexp. Reopened C8 in data/ef/expected-divergences.sexp (26 of 16801 rows, 2005-2050): lectio independently computes these two days violet too, so the two engines used to agree by sharing the same uncited assumption; colitur's colour is now correct and lectio's is not, so the comparator disagrees again, for the opposite reason. While reopening C8, found and corrected a genuine misattribution in its own prior closure note, which claimed lectio's violet was "RG 128(d)" -- 128(d) governs vigils outside Paschaltide and has nothing to do with Rogation days. Checked docs/research/rules-register.md for the same claim: not present there, but a related conflation was found and corrected at its O'Connell section 4(d) note, which had used a Rogation MASS/procession citation to "confirm" the day's own OFFICE colour. Blast radius measured in-process across the full 1583-9999 domain (throwaway probe, not committed): 4722 days total (2368 Rogation Mondays + 2354 Rogation Tuesdays actually observed outright, i.e. not impeded by a stronger sanctoral feast that year), all Violet->White, all with the Gloria flipping false->true alongside, zero anomalies. Mutation-tested: reverting the branch to Colour.Violet reddens 16 tests across Rubrics_ef, the lectio differential, the LMS Ordo suite and both golden pin files; restored and reconfirmed green (680 tests).
Diffstat (limited to 'test')
-rw-r--r--test/golden/grid-2027.html2
-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.html4
-rw-r--r--test/golden/ordo-2027.md2
-rw-r--r--test/golden/ordo-2027.ms2
-rw-r--r--test/golden/ordo-2027.tex4
-rw-r--r--test/golden/ordo-2027.txt2
-rw-r--r--test/golden/ordo-2027.typ4
-rw-r--r--test/test_golden.ml32
-rw-r--r--test/test_lms_ordo.ml52
-rw-r--r--test/test_rubrics_ef.ml20
13 files changed, 96 insertions, 34 deletions
diff --git a/test/golden/grid-2027.html b/test/golden/grid-2027.html
index daa6ba5..6741ad7 100644
--- a/test/golden/grid-2027.html
+++ b/test/golden/grid-2027.html
@@ -131,7 +131,7 @@
<td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="pad"></td><td class="white"><span class="dom">1</span>St. Joseph the Workman<span class="sigla">Col 3:14-15, 17, 23-24 &middot; Matt 13:54-58</span></td>
</tr>
<tr>
- <td class="white"><span class="dom">2</span>5th Sunday after Easter<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="violet"><span class="dom">3</span>Rogation Monday<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">4</span>St. Monica<span class="sigla">1 Tim 5:3-10 &middot; Luke 7:11-16</span></td><td class="white"><span class="dom">5</span>Vigil of the Ascension<span class="sigla">Eph 4:7-13 &middot; John 17:1-11</span></td><td class="white"><span class="dom">6</span>The Ascension of Our Lord<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">7</span>St. Stanislaus<span class="sigla">Wis 5:1-5 &middot; John 15:1-7</span></td><td class="white"><span class="dom">8</span>Our Lady&#39;s Saturday Office<span class="sigla">Ecclus 24:14-16 &middot; John 19:25-27</span></td>
+ <td class="white"><span class="dom">2</span>5th Sunday after Easter<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">3</span>Rogation Monday<span class="sigla">Jas 1:22-27 &middot; John 16:23-30</span></td><td class="white"><span class="dom">4</span>St. Monica<span class="sigla">1 Tim 5:3-10 &middot; Luke 7:11-16</span></td><td class="white"><span class="dom">5</span>Vigil of the Ascension<span class="sigla">Eph 4:7-13 &middot; John 17:1-11</span></td><td class="white"><span class="dom">6</span>The Ascension of Our Lord<span class="sigla">Acts 1:1-11 &middot; Mark 16:14-20</span></td><td class="red"><span class="dom">7</span>St. Stanislaus<span class="sigla">Wis 5:1-5 &middot; John 15:1-7</span></td><td class="white"><span class="dom">8</span>Our Lady&#39;s Saturday Office<span class="sigla">Ecclus 24:14-16 &middot; John 19:25-27</span></td>
</tr>
<tr>
<td class="white"><span class="dom">9</span>Sunday after the Ascension<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="white"><span class="dom">10</span>St. Antoninus<span class="sigla">Ecclus 44:16-27; 45:3-20 &middot; Matt 25:14-23</span></td><td class="red"><span class="dom">11</span>Sts. Philip &amp; James<span class="sigla">Wis 5:1-5 &middot; John 14:1-13</span></td><td class="red"><span class="dom">12</span>Sts. Nereus, Achilleus, Domitilla, &amp; Pancras<span class="sigla">Wis 5:1-5 &middot; John 4:46-53</span></td><td class="white"><span class="dom">13</span>St. Robert Bellarmine<span class="sigla">Wis 7:7-14 &middot; Matt 5:13-19</span></td><td class="white"><span class="dom">14</span>Friday of the 7th Week of Eastertide<span class="sigla">1 Pet 4:7-11 &middot; John 15:26-27; 16:1-4</span></td><td class="red"><span class="dom">15</span>Vigil of Pentecost<span class="sigla">Acts 19:1-8 &middot; John 14:15-21</span></td>
diff --git a/test/golden/grid-2027.tex b/test/golden/grid-2027.tex
index 674b9c4..d81bdb4 100644
--- a/test/golden/grid-2027.tex
+++ b/test/golden/grid-2027.tex
@@ -151,7 +151,7 @@
\begin{tabular}{|*{7}{p{\cellw}|}}\hline
\textbf{ Sunday } & \textbf{ Monday } & \textbf{ Tuesday } & \textbf{ Wednesday } & \textbf{ Thursday } & \textbf{ Friday } & \textbf{ Saturday } \\ \hline
& & & & & & \cellcolor{cwhite}\daycell{ 1 }{ St. Joseph the Workman }{ 1st Class }{ Col 3:14-15, 17, 23-24\ \textperiodcentered\ Matt 13:54-58 } \\ \hline
-\cellcolor{cwhite}\daycell{ 2 }{ 5th Sunday after Easter }{ 2nd Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cviolet}\daycell{ 3 }{ Rogation Monday }{ 4th Class }{ Jas 1:22-27\ \textperiodcentered\ John 16:23-30 } & \cellcolor{cwhite}\daycell{ 4 }{ St. Monica }{ 3rd Class }{ 1 Tim 5:3-10\ \textperiodcentered\ Luke 7:11-16 } & \cellcolor{cwhite}\daycell{ 5 }{ Vigil of the Ascension }{ 2nd Class }{ Eph 4:7-13\ \textperiodcentered\ John 17:1-11 } & \cellcolor{cwhite}\daycell{ 6 }{ The Ascension of Our Lord }{ 1st Class }{ Acts 1:1-11\ \textperiodcentered\ Mark 16:14-20 } & \cellcolor{cred}\daycell{ 7 }{ St. Stanislaus }{ 3rd Class }{ Wis 5:1-5\ \textperiodcentered\ John 15:1-7 } & \cellcolor{cwhite}\daycell{ 8 }{ Our Lady's Saturday Office }{ 4th Class }{ Ecclus 24:14-16\ \textperiodcentered\ John 19:25-27 } \\ \hline
+\cellcolor{cwhite}\daycell{ 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{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
diff --git a/test/golden/grid-2027.typ b/test/golden/grid-2027.typ
index 800edf9..b9e1d0e 100644
--- a/test/golden/grid-2027.typ
+++ b/test/golden/grid-2027.typ
@@ -2056,7 +2056,7 @@
- table.cell(fill: cgrid.at("violet"))[
+ table.cell(fill: cgrid.at("white"))[
#block(height: cellh - 2 * cellinset, clip: true)[
#set par(leading: 0.3em)
#text(weight: "bold")[3] #text(size: 6.5pt)[Rogation Monday]
diff --git a/test/golden/ordo-2027.adoc b/test/golden/ordo-2027.adoc
index 39e5ae4..d5660a0 100644
--- a/test/golden/ordo-2027.adoc
+++ b/test/golden/ordo-2027.adoc
@@ -879,7 +879,7 @@ Epistle Jas 1:22-27 Gospel John 16:23-30
*3* Rogation Monday +
-class-4 · violet +
+class-4 · white +
Epistle Jas 1:22-27 Gospel John 16:23-30
+
Commemoration Sts. Alexander & Companions
diff --git a/test/golden/ordo-2027.html b/test/golden/ordo-2027.html
index 8513909..1b621e4 100644
--- a/test/golden/ordo-2027.html
+++ b/test/golden/ordo-2027.html
@@ -672,9 +672,9 @@
<div class="meta">class-2 &middot; white &middot; Epistle Jas 1:22-27 &middot; Gospel John 16:23-30</div>
</div>
-<div class="day violet">
+<div class="day white">
<span class="dom">3</span>Rogation Monday
- <div class="meta">class-4 &middot; violet &middot; Epistle Jas 1:22-27 &middot; Gospel John 16:23-30</div>
+ <div class="meta">class-4 &middot; white &middot; Epistle Jas 1:22-27 &middot; Gospel John 16:23-30</div>
<div class="meta">Commemoration Sts. Alexander &amp; Companions</div>
</div>
<div class="day white">
diff --git a/test/golden/ordo-2027.md b/test/golden/ordo-2027.md
index 3d96240..d4acf1d 100644
--- a/test/golden/ordo-2027.md
+++ b/test/golden/ordo-2027.md
@@ -789,7 +789,7 @@
**3** Rogation Monday
-`class-4` · violet · Epistle Jas 1:22-27 · Gospel John 16:23-30
+`class-4` · white · Epistle Jas 1:22-27 · Gospel John 16:23-30
- Commemoration Sts. Alexander & Companions
diff --git a/test/golden/ordo-2027.ms b/test/golden/ordo-2027.ms
index e029a76..7bc8c89 100644
--- a/test/golden/ordo-2027.ms
+++ b/test/golden/ordo-2027.ms
@@ -1354,7 +1354,7 @@ May
.IP "3" 4
\fBRogation Monday\fR
.br
-\s74th Class \(bu Violet\s9
+\s74th Class \(bu White\s9
.br
\s7Epistle Jas 1:22-27\s9
.br
diff --git a/test/golden/ordo-2027.tex b/test/golden/ordo-2027.tex
index 0db4121..e8ec59f 100644
--- a/test/golden/ordo-2027.tex
+++ b/test/golden/ordo-2027.tex
@@ -1548,9 +1548,9 @@
\begin{tcolorbox}[colback=white,colframe=black!35,boxrule=0.3pt,sharp corners,boxsep=0mm,left=1.6mm,right=1.6mm,top=0.4mm,bottom=0.4mm,before skip=0.3mm,after skip=0mm]
-\fontsize{9}{9}\selectfont\bfseries 3 \fontsize{7}{9}\selectfont\mdseries\;Monday\hfill\swatch{licolviolet}\\
+\fontsize{9}{9}\selectfont\bfseries 3 \fontsize{7}{9}\selectfont\mdseries\;Monday\hfill\swatch{licolwhite}\\
\fontsize{9}{9.7}\selectfont\bfseries Rogation Monday\\
-\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ Violet \quad Epistle\ Jas 1:22-27 \quad Gospel\ John 16:23-30 \\
+\fontsize{6.5}{7.4}\selectfont\mdseries 4th Class \textperiodcentered\ White \quad Epistle\ Jas 1:22-27 \quad Gospel\ John 16:23-30 \\
\fontsize{6.5}{7.4}\selectfont\mdseries Commemoration\ Sts. Alexander \& Companions
\end{tcolorbox}
diff --git a/test/golden/ordo-2027.txt b/test/golden/ordo-2027.txt
index 0af67b3..e0073ec 100644
--- a/test/golden/ordo-2027.txt
+++ b/test/golden/ordo-2027.txt
@@ -728,7 +728,7 @@ May 2027
Gospel John 16:23-30
3 Rogation Monday
- class-4 · violet
+ class-4 · white
Epistle Jas 1:22-27
Gospel John 16:23-30
Commemoration Sts. Alexander & Companions
diff --git a/test/golden/ordo-2027.typ b/test/golden/ordo-2027.typ
index 0d87f04..ce5e0ca 100644
--- a/test/golden/ordo-2027.typ
+++ b/test/golden/ordo-2027.typ
@@ -1480,9 +1480,9 @@
#block(width: 100%, above: 0.4mm, below: 0mm, breakable: false, stroke: 0.4pt + luma(160), inset: (x: 1.6mm, y: 0.4mm))[
#set par(leading: 0.36em)
- #text(weight: "bold")[3] #h(2mm) #text(size: 7pt)[Monday] #h(1fr) #swatch("violet") \
+ #text(weight: "bold")[3] #h(2mm) #text(size: 7pt)[Monday] #h(1fr) #swatch("white") \
#text(weight: "bold")[Rogation Monday] \
- #text(size: 6.5pt)[4th Class #sym.dot.c Violet #h(2mm) Epistle Jas 1:22\-27 #h(2mm) Gospel John 16:23\-30] \
+ #text(size: 6.5pt)[4th Class #sym.dot.c White #h(2mm) Epistle Jas 1:22\-27 #h(2mm) Gospel John 16:23\-30] \
#text(size: 6.5pt)[Commemoration Sts. Alexander & Companions]
]
diff --git a/test/test_golden.ml b/test/test_golden.ml
index d680720..3a6f3f5 100644
--- a/test/test_golden.ml
+++ b/test/test_golden.ml
@@ -1315,6 +1315,34 @@ let test_rogation_wednesday_yields_to_a_feast_2026 () =
"2026-05-13 wednesday season=paschaltide week=6 slug=ef-ascension-vigil rank=class-2 colour=white \
subject=temporal name_la=- comms=[robert-bellarmine:ordinary] in=- out=[]"
+(* ---- Rogation Monday/Tuesday colour, RG 119/128/88 (celebrant-rubrics-
+ phase1 Bug 1 fix, 2026-08-22; data/ef/expected-divergences-lms.sexp's
+ now-closed L6, data/ef/expected-divergences.sexp's reopened C8) ----
+
+ {!Rite_ef.Temporal_ef.temporal}'s Rogation Monday/Tuesday branch used to
+ hardcode [Colour.Violet] with no citation. RG 119 assigns white to the
+ de-Tempore Office and Mass from the Paschal Vigil to the Pentecost Vigil
+ exclusive -- Easter+36/+37 sit inside that window -- and RG 128's own
+ exhaustive four-case violet list never names Rogation days; RG 88 ("de
+ Litaniis minoribus nihil fit in Officio") is why -- the violet belongs
+ to the Rogation MASS/procession alone, not the day's own Office. Fixed
+ to [season_colour s], the same call every other Paschaltide feria makes.
+
+ 2028 pins BOTH days at once (unlike the LMS witness, which only reaches
+ one day per fixture window): neither is impeded by a competing
+ sanctoral feast that year, so both are observed outright, both white.
+ Verified directly against `date -d`: Easter 2028-04-16, so 22/23 May are
+ Easter+36/+37. *)
+let test_rogation_monday_white_2028 () =
+ check ~msg:"2028: Rogation Monday is white (RG 119), not violet" 2028 5 22
+ "2028-05-22 monday season=paschaltide week=6 slug=ef-rogation-monday rank=class-4 colour=white \
+ subject=temporal name_la=- comms=[] in=- out=[]"
+
+let test_rogation_tuesday_white_2028 () =
+ check ~msg:"2028: Rogation Tuesday is white (RG 119), not violet" 2028 5 23
+ "2028-05-23 tuesday season=paschaltide week=6 slug=ef-rogation-tuesday rank=class-4 colour=white \
+ subject=temporal name_la=- comms=[] in=- out=[]"
+
(* ---- The bissextile (leap-year) calendarium footnote, bissextile-shift
task, 2026-08-22 ----
@@ -1572,6 +1600,10 @@ let suite =
test_rogation_wednesday_admitted_2024;
Alcotest.test_case "RG87/113: Rogation Wednesday yields to an impeded feast (2026)" `Quick
test_rogation_wednesday_yields_to_a_feast_2026;
+ Alcotest.test_case "RG119/128: Rogation Monday is white, not violet (2028)" `Quick
+ test_rogation_monday_white_2028;
+ Alcotest.test_case "RG119/128: Rogation Tuesday is white, not violet (2028)" `Quick
+ test_rogation_tuesday_white_2028;
Alcotest.test_case "bissextile footnote: Matthias moves 24->25 February (leap, 2044)" `Quick
test_bissextile_matthias_leap_2044;
Alcotest.test_case "bissextile footnote: Matthias unaffected (common, 2025)" `Quick
diff --git a/test/test_lms_ordo.ml b/test/test_lms_ordo.ml
index 00fb32c..ed1c871 100644
--- a/test/test_lms_ordo.ml
+++ b/test/test_lms_ordo.ml
@@ -582,17 +582,25 @@ let make_suite ~label ~fixture_path ~fixture_sha256 ~window_first ~window_last ~
| Some { MF.said = None; _ } -> "NONE (said, unexpectedly outside Votive)"
| None -> "NONE")
in
- (* Two REAL, STRUCTURAL shapes found running this comparison (see
- data/ef/expected-divergences-lms.sexp's own L5/L6 for the full
- citations) -- neither is a fixed date list, both a property of the
- day itself, because both recur every year the underlying condition
- holds, not on a fixed calendar date the way L4 above does. Matched
- by PREDICATE, not by date, for the same reason L2's own note gives
- for why it is prose-only rather than wired through the shared
- [expected_rows] mechanism: the count varies window to window (L5:
- 6/5/6; L6: 1/0/0), so a single static count cannot check it, and
- [make_suite] threads the per-window expected totals directly
- (~expected_gloria_l5/~expected_gloria_l6 below) instead. *)
+ (* L5 is the one REAL, STRUCTURAL shape still open (see
+ data/ef/expected-divergences-lms.sexp's own L5 for the full
+ citation) -- not a fixed date list, a property of the day itself,
+ because it recurs every year the underlying condition holds, not on a
+ fixed calendar date the way L4 above does. Matched by PREDICATE, not
+ by date, for the same reason L2's own note gives for why it is
+ prose-only rather than wired through the shared [expected_rows]
+ mechanism: the count varies window to window (L5: 6/5/6), so a single
+ static count cannot check it, and [make_suite] threads the per-window
+ expected total directly (~expected_gloria_l5 below) instead.
+
+ L6 is CLOSED (celebrant-rubrics-phase1, Bug 1 fix, this task):
+ {!Rite_ef.Temporal_ef.temporal}'s Rogation Monday/Tuesday branch no
+ longer hardcodes [Colour.Violet] -- see temporal_ef.ml's own citation
+ on that branch and data/ef/expected-divergences-lms.sexp's L6 entry
+ for the fix and its measured blast radius. [is_l6_rogation_colour] and
+ ~expected_gloria_l6 are kept, at 0 in every window, as the regression
+ net the same way L3's own bissextile fix keeps a predicate whose count
+ is now provably zero rather than deleting it. *)
let is_l5_lenten_commemoration (o : ordo_row) (c : colitur_row) =
(* NOT a Gloria defect (CORRECTED, l5-f3-readjudication task,
2026-08-22 -- data/ef/expected-divergences-lms.sexp's own L5 has
@@ -613,15 +621,17 @@ let make_suite ~label ~fixture_path ~fixture_sha256 ~window_first ~window_last ~
(not c.c_gloria) && Option.value o.gloria ~default:false && c.c_has_commemoration && c.c_rank = V.Class3
in
let is_l6_rogation_colour (o : ordo_row) (c : colitur_row) =
- (* Root-caused to a DIFFERENT, pre-existing bug this comparison merely
- surfaced -- {!Rite_ef.Temporal_ef.temporal}'s own Rogation Monday/
- Tuesday branch hardcodes [Colour.Violet] with no RG citation at
- all, but the Ordo shows this exact date "FERIA IV Cl W" (white,
- matching Paschaltide's own [season_colour] and RG88's "nihil fit in
- Officio" -- the Office, hence its colour, is unchanged by the
- Rogation, only the Mass TEXT is proper) -- so [gloria]'s own 432(b)
- violet guard wrongly fires. NOT a Gloria defect and NOT fixed here
- (out of this task's own scope; see the task report). *)
+ (* CLOSED (celebrant-rubrics-phase1, Bug 1 fix). Was root-caused to a
+ DIFFERENT, pre-existing bug this comparison merely surfaced --
+ {!Rite_ef.Temporal_ef.temporal}'s own Rogation Monday/Tuesday branch
+ used to hardcode [Colour.Violet] with no RG citation at all, where
+ the Ordo shows this exact date "FERIA IV Cl W" (white, matching
+ Paschaltide's own [season_colour] and RG88's "nihil fit in Officio"
+ -- the Office, hence its colour, is unchanged by the Rogation, only
+ the Mass TEXT is proper) -- so [gloria]'s own 432(b) violet guard
+ wrongly fired. Now fixed at the source (temporal_ef.ml); this
+ predicate and its own ~expected_gloria_l6 count (0 in every window)
+ are kept as the regression net, not deleted. *)
(not c.c_gloria) && Option.value o.gloria ~default:false
&& (contains_substring c.c_slug ~needle:"rogation-monday" || contains_substring c.c_slug ~needle:"rogation-tuesday")
in
@@ -788,7 +798,7 @@ let suite_2023_2024 =
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_ascension_week:1 ~expected_gloria_l5:5 ~expected_gloria_l6:1
+ ~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"
diff --git a/test/test_rubrics_ef.ml b/test/test_rubrics_ef.ml
index 71f180d..6679702 100644
--- a/test/test_rubrics_ef.ml
+++ b/test/test_rubrics_ef.ml
@@ -598,6 +598,24 @@ let test_431a_mirrors_te_deum_true () =
let test_432a_mirrors_te_deum_false () =
check_gloria "432(a): mirrors [te_deum]=false (an ordinary Advent feria)" 2025 12 1 false
+(* ---- The Rogation Monday/Tuesday cascade (celebrant-rubrics-phase1 Bug 1
+ fix, 2026-08-22): {!Rite_ef.Temporal_ef.temporal} used to hardcode
+ [Colour.Violet] on these two days with no citation, which silenced
+ [gloria] via 432(b) even though 237(e)'s own Paschaltide-feria branch
+ already said [te_deum]=true underneath. Fixed to [season_colour] (RG
+ 119: white from the Paschal Vigil to the Pentecost Vigil exclusive; RG
+ 128's own violet list never names Rogation days; RG 88 -- the violet
+ belongs to the Rogation MASS, not the Office this field describes).
+ 2028-05-22/23: neither day is impeded that year (test_golden.ml's own
+ [test_rogation_{monday,tuesday}_white_2028] pins the colour side of the
+ same fix), so both resolve to white and both now say the Gloria, MIRROR
+ OF [te_deum] via 431(a) once 432(b)'s violet guard no longer fires --
+ MATCHING the LMS Ordo witness (2023-2024, 2024-05-06, "FERIA IV Cl W
+ ... Gl"). Reverting temporal_ef.ml's fix alone (mutation-checked while
+ building this task) turns both [false], the pre-fix answer. *)
+let test_rogation_monday_gloria_2028 () = check_gloria "Rogation Monday: white -> Gloria said (2028)" 2028 5 22 true
+let test_rogation_tuesday_gloria_2028 () = check_gloria "Rogation Tuesday: white -> Gloria said (2028)" 2028 5 23 true
+
(* ---- Domain-wide sanity, task requirement 5: "every violet day must be
false (RG 432 b), and every Requiem must be false (432 d)". Two
invariants, checked over every day {!Cal.year} resolves -- [Cal.year],
@@ -794,6 +812,8 @@ let suite =
Alcotest.test_case "432(d): All Souls' Day (transferred)" `Quick test_432d_all_souls;
Alcotest.test_case "431(a): mirrors [te_deum]=true" `Quick test_431a_mirrors_te_deum_true;
Alcotest.test_case "432(a): mirrors [te_deum]=false" `Quick test_432a_mirrors_te_deum_false;
+ Alcotest.test_case "Rogation Monday: white -> Gloria said (2028)" `Quick test_rogation_monday_gloria_2028;
+ Alcotest.test_case "Rogation Tuesday: white -> Gloria said (2028)" `Quick test_rogation_tuesday_gloria_2028;
Alcotest.test_case "domain sanity: every violet day has [gloria]=false (sample)" `Quick
test_domain_violet_implies_no_gloria_sample;
Alcotest.test_case "domain sanity: every Requiem day has [gloria]=false (sample)" `Quick