aboutsummaryrefslogtreecommitdiff
path: root/test/test_golden.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_golden.ml')
-rw-r--r--test/test_golden.ml132
1 files changed, 131 insertions, 1 deletions
diff --git a/test/test_golden.ml b/test/test_golden.ml
index ba25d8a..c916a54 100644
--- a/test/test_golden.ml
+++ b/test/test_golden.ml
@@ -1281,6 +1281,33 @@ let test_readings_displaced_sunday_feria_known_divergent () =
2026 10 26
"2026-10-26 slug=ef-time-after-pentecost-22-monday first=Col 1:12-20. gospel=John 18:33-37"
+(* ---- The Ascension-repeat rubric (celebrant-rubrics-phase1 Bug 2 fix,
+ 2026-08-22) ----
+
+ The Missale Romanum's own Proprium de Tempore carries an explicit
+ marginal rubric immediately after the Ascension's own Mass propers
+ (scan1.txt:20749-20754, both scans corroborate): "Diebus a feria VI post
+ Ascensionem usque ad feriam VI ante vigiliam Pentecostes inclusive,
+ dicitur Missa de festo Ascensionis" -- every feria without its own
+ proper, from the Friday after the Ascension through the Friday before
+ the Vigil of Pentecost, repeats the Ascension's own Mass (Acts 1:1-11 /
+ Mark 16:14-20), not the preceding Sunday's. Witnessed directly: the LMS
+ Ordo prints "Mass of the Ascension" literally on every affected day of
+ this shape across all three of its own fixture windows
+ (data/ef/expected-divergences-lms.sexp's own now-closed L2).
+
+ 2031-05-23 is the exact day the bug report this task fixed was filed
+ against: the day after Ascension Thursday (2031-05-22, Easter+39), an
+ unoccupied Friday that step 3 used to walk back to
+ "ef-easter-sunday-6" -- the 5th Sunday after Easter, the wrong answer
+ -- instead of resolving at step 2 through the new
+ data/ef/lectionary.sexp entry. WHEN THIS PIN'S OWN VALUE WOULD REVERT TO
+ "Iac 1:22-27"/"Ioann 16:23-30" the fix has regressed; update it
+ deliberately then, never to make the suite pass again without checking
+ why. *)
+let test_readings_ascension_week_repeat () =
+ check_readings ~msg:"the day after Ascension repeats the Ascension's own Mass, not the 5th Sunday after Easter's"
+ 2031 5 23 "2031-05-23 slug=ef-easter-6-friday first=Acts 1:1-11 gospel=Mark 16:14-20"
(* ---- Rogation Wednesday (RG 87/88/89), movable-date-specs task ----
@@ -1315,6 +1342,95 @@ let test_rogation_wednesday_yields_to_a_feast_2026 () =
"2026-05-13 wednesday season=paschaltide week=6 slug=ef-ascension-vigil rank=class-2 colour=white \
subject=temporal name_la=- comms=[robert-bellarmine:ordinary] in=- out=[]"
+(* ---- Rogation Monday/Tuesday colour, RG 119/128/88 (celebrant-rubrics-
+ phase1 Bug 1 fix, 2026-08-22; data/ef/expected-divergences-lms.sexp's
+ now-closed L6, data/ef/expected-divergences.sexp's reopened C8) ----
+
+ {!Rite_ef.Temporal_ef.temporal}'s Rogation Monday/Tuesday branch used to
+ hardcode [Colour.Violet] with no citation. RG 119 assigns white to the
+ de-Tempore Office and Mass from the Paschal Vigil to the Pentecost Vigil
+ exclusive -- Easter+36/+37 sit inside that window -- and RG 128's own
+ exhaustive four-case violet list never names Rogation days; RG 88 ("de
+ Litaniis minoribus nihil fit in Officio") is why -- the violet belongs
+ to the Rogation MASS/procession alone, not the day's own Office. Fixed
+ to [season_colour s], the same call every other Paschaltide feria makes.
+
+ 2028 pins BOTH days at once (unlike the LMS witness, which only reaches
+ one day per fixture window): neither is impeded by a competing
+ sanctoral feast that year, so both are observed outright, both white.
+ Verified directly against `date -d`: Easter 2028-04-16, so 22/23 May are
+ Easter+36/+37. *)
+let test_rogation_monday_white_2028 () =
+ check ~msg:"2028: Rogation Monday is white (RG 119), not violet" 2028 5 22
+ "2028-05-22 monday season=paschaltide week=6 slug=ef-rogation-monday rank=class-4 colour=white \
+ subject=temporal name_la=- comms=[] in=- out=[]"
+
+let test_rogation_tuesday_white_2028 () =
+ check ~msg:"2028: Rogation Tuesday is white (RG 119), not violet" 2028 5 23
+ "2028-05-23 tuesday season=paschaltide week=6 slug=ef-rogation-tuesday rank=class-4 colour=white \
+ subject=temporal name_la=- comms=[] in=- out=[]"
+
+(* ---- The bissextile (leap-year) calendarium footnote, bissextile-shift
+ task, 2026-08-22 ----
+
+ The Missale Romanum's own CALENDARIUM table, February, footnote
+ (docs/research/LT.txt:5011-5014, scan-corroborated docs/research/
+ scan2.txt:3050-3058): "In anno bissextili mensis februarius est dierum
+ 29, et festum S. Matthiae celebratur die 25 februarii, ac festum S.
+ Gabrielis a Virgine perdolente 28 februarii, et bis dicitur sexto
+ calendas, id est die 24 et die 25" -- in a leap year the sixth kalends
+ of March (24 February) is doubled rather than a 29th day appended, so
+ St Matthias (ordinarily 24 February) is kept on 25 February and St
+ Gabriel of Our Lady of Sorrows (ordinarily 27 February) on 28 February;
+ 24 February itself carries no fixed office that year.
+ {!Rite_ef.Temporal_ef.bissextile_fixed_key} implements this as the
+ rubric's own general MECHANISM, so a leap year moves the VACATED date's
+ slug/rank/colour away and the OCCUPIED date's toward it -- both sides
+ pinned for each saint, plus one common-year control apiece proving the
+ identity default is unchanged where the footnote does not apply. *)
+
+(* Matthias, 2044 (leap): 24 February carries no fixed office at all
+ (Class4 temporal only, zero commemorations); Matthias (Class2, an
+ Apostle) wins 25 February outright against that day's own Class4
+ feria. *)
+let test_bissextile_matthias_leap_2044 () =
+ check ~msg:"leap year: 24 February carries no fixed office, Matthias has moved away" 2044 2 24
+ "2044-02-24 wednesday season=septuagesima week=2 slug=ef-septuagesima-2-wednesday rank=class-4 colour=violet \
+ subject=temporal name_la=- comms=[] in=- out=[]";
+ check ~msg:"leap year: Matthias observed outright on 25 February, not 24" 2044 2 25
+ "2044-02-25 thursday season=septuagesima week=2 slug=matthias rank=class-2 colour=red subject=saint name_la=- \
+ comms=[] in=- out=[]"
+
+(* Matthias, 2025 (common): unaffected control -- the identity default
+ applies, Matthias stays at his ordinary 24 February. *)
+let test_bissextile_matthias_common_2025 () =
+ check ~msg:"common year: Matthias unaffected, still 24 February" 2025 2 24
+ "2025-02-24 monday season=septuagesima week=2 slug=matthias rank=class-2 colour=red subject=saint name_la=- \
+ comms=[] in=- out=[]"
+
+(* Gabriel of Our Lady of Sorrows, 2008 (leap): 27 February carries no
+ trace of him at all (not even a commemoration -- fixed_key removes him
+ from the candidate set entirely, RG 111's admission machinery never
+ sees him); on 28 February he is admitted as an ORDINARY commemoration
+ (Class3 ties the day's own privileged Lenten feria, which keeps
+ observed). A different shape from Matthias's outright win above,
+ deliberately pinned: the mechanism moves WHERE the saint is tried, not
+ whether he wins once he gets there. *)
+let test_bissextile_gabriel_leap_2008 () =
+ check ~msg:"leap year: 27 February carries no trace of Gabriel, he has moved away" 2008 2 27
+ "2008-02-27 wednesday season=lent week=3 slug=ef-lent-3-wednesday rank=class-3 colour=violet subject=temporal \
+ name_la=- comms=[] in=- out=[]";
+ check ~msg:"leap year: Gabriel admitted as an ordinary commemoration on 28 February, not 27" 2008 2 28
+ "2008-02-28 thursday season=lent week=3 slug=ef-lent-3-thursday rank=class-3 colour=violet subject=temporal \
+ name_la=- comms=[gabriel-of-our-lady-of-sorrows:ordinary] in=- out=[]"
+
+(* Gabriel of Our Lady of Sorrows, 2025 (common): unaffected control --
+ observed outright at his ordinary 27 February. *)
+let test_bissextile_gabriel_common_2025 () =
+ check ~msg:"common year: Gabriel unaffected, still observed on 27 February" 2025 2 27
+ "2025-02-27 thursday season=septuagesima week=2 slug=gabriel-of-our-lady-of-sorrows rank=class-3 colour=white \
+ subject=saint name_la=- comms=[] in=- out=[]"
+
(* RG 128, transcribed in docs/research/rules-register.md ยง3b: violet is used
for "II/III-class vigils outside Paschaltide". Two of colitur's five vigils
disagreed with that rule until the ef-oconnell-rubrics branch -- the
@@ -1507,8 +1623,22 @@ let suite =
Alcotest.test_case
"readings: displaced-Sunday feria pins M26 shape 2(b)'s KNOWN-WRONG walkback (2026-10-26)" `Quick
test_readings_displaced_sunday_feria_known_divergent;
+ Alcotest.test_case "readings: the Ascension-repeat rubric, the reported bug's own date (2031-05-23)" `Quick
+ test_readings_ascension_week_repeat;
Alcotest.test_case "RG87: Rogation Wednesday admitted (2024)" `Quick
test_rogation_wednesday_admitted_2024;
Alcotest.test_case "RG87/113: Rogation Wednesday yields to an impeded feast (2026)" `Quick
- test_rogation_wednesday_yields_to_a_feast_2026
+ test_rogation_wednesday_yields_to_a_feast_2026;
+ Alcotest.test_case "RG119/128: Rogation Monday is white, not violet (2028)" `Quick
+ test_rogation_monday_white_2028;
+ Alcotest.test_case "RG119/128: Rogation Tuesday is white, not violet (2028)" `Quick
+ test_rogation_tuesday_white_2028;
+ Alcotest.test_case "bissextile footnote: Matthias moves 24->25 February (leap, 2044)" `Quick
+ test_bissextile_matthias_leap_2044;
+ Alcotest.test_case "bissextile footnote: Matthias unaffected (common, 2025)" `Quick
+ test_bissextile_matthias_common_2025;
+ Alcotest.test_case "bissextile footnote: Gabriel of Our Lady of Sorrows moves 27->28 February (leap, 2008)"
+ `Quick test_bissextile_gabriel_leap_2008;
+ Alcotest.test_case "bissextile footnote: Gabriel of Our Lady of Sorrows unaffected (common, 2025)" `Quick
+ test_bissextile_gabriel_common_2025
] )