aboutsummaryrefslogtreecommitdiff
path: root/test/test_golden.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-12 13:32:13 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-12 13:32:13 +0200
commit7d3b5ec831a60e8b63466251d63b2bd564acba2b (patch)
treef9e5015704ff74f42b777d7aac207ffda0d55673 /test/test_golden.ml
parent5c9f2cdbffdff67ec8a1939ed6958767acf406fd (diff)
downloadcolitur-7d3b5ec831a60e8b63466251d63b2bd564acba2b.tar.gz
colitur-7d3b5ec831a60e8b63466251d63b2bd564acba2b.zip
fix(rite-ef,kernel): follow the oracle on the Purification; admit reads the day's own Sunday-ness, not observed
Fix round 1 review, two findings landed together because each golden pin's correctness depends on both. CRITICAL (item 1): reverts this branch's own first-pass retag of the Purification (2 February) from Lord back to Bvm -> Lord. The calendarium titles it 'B. Mariae Virg.', but missalemeum -- this project's designated EF oracle -- treats it as taking an occurring II-class Sunday's place outright, commemorations empty, exactly RG16(a)'s own festum Domini treatment (2020-02-02, 2014-02-02, independently fetched). Control, 2019-09-08 (the Nativity of the BVM, an ordinary Marian feast, on a Sunday): the Sunday observed, the feast merely commemorated -- the opposite pattern, proving the Purification's own oracle treatment is deliberate, not a gap. RG16(a) alone, on the untouched data, would have matched the oracle character for character; retagging Bvm is what moved colitur away from it on 1200 domain-wide days. The user has ruled: follow the oracle. Genuine primary-text counter-evidence (RG120(b), the colour rule grouping 2 February under 'B. Mariae Virg.', a category separate from 'Domini') is recorded in the register, not discarded -- a different project could reasonably rule the other way on the same evidence. most-holy-name-of-mary stays retagged Bvm; that one was never disputed. Removes the now-unneeded C12 lectio allow-list entry (data/ef/ expected-divergences.sexp, test_differential.ml): with the Purification Lord again, colitur matches lectio's own class = lord on every affected date, no divergence to allow-list. IMPORTANT (item 2): Precedence.rules.admit gains a ~temporal parameter -- a genuine kernel signature change, unlike RG16(a) itself. RG111(b)'s own Sunday rank floor ('one commemoration, namely of a II-class feast') used to be detected by reading observed's own slug for a Sunday marker, which silently assumed observed IS the day's temporal-cycle office. RG16(a) breaks that assumption on purpose: a Feast of the Lord standing in for an impeded Sunday 'cum omnibus iuribus et privilegiis' keeps the day a dominica II classis for RG111(b) too, even though the FEAST, not the Sunday, is observed. Before this fix an unrelated saint (Pope Sixtus II et al., 6 August, Class3) was wrongly admitted into the freed slot on every one of 1178 domain-wide days. Oracle-confirmed directly: 2023-08-06 (a Sunday) shows him displaced, commemorations empty; 2026-08-06 (an ordinary Thursday) shows him admitted -- being a Sunday is exactly what excludes him. admit now reads Sunday-ness off ~temporal (the day's own temporal-cycle candidate, passed through from Precedence.resolve unchanged) instead of observed. Validate's own admission fixed-point invariant updated to pass the same real temporal candidate through. Both golden pins in test_golden.ml were promoted from actual colitur day output without independently consulting the rubric or the oracle first -- a real defect the review caught. Re-derived from both before re-pinning: 2028-08-06 and 2025-02-02 now pin comms=[], no commemoration at all, matching missalemeum exactly in both cases.
Diffstat (limited to 'test/test_golden.ml')
-rw-r--r--test/test_golden.ml95
1 files changed, 64 insertions, 31 deletions
diff --git a/test/test_golden.ml b/test/test_golden.ml
index 85a129b..fb3cff4 100644
--- a/test/test_golden.ml
+++ b/test/test_golden.ml
@@ -501,16 +501,38 @@ let test_ii_class_sunday_admits_only_ii_class_commemoration () =
of the bug this pin closes -- before this fix `colitur day` admitted
"+ef-time-after-pentecost-sunday-9" here.
+ CORRECTED, fix round 1 (IMPORTANT finding, item 2): this pin used to
+ expect Pope Sixtus II et al. (6 August's own unrelated Class3 saint,
+ Commemoration_only) admitted as an ordinary commemoration in the freed
+ slot -- promoted from `colitur day`'s own actual output without
+ consulting either the primary text or the oracle first (the exact
+ vacuous-pin flavour the review caught, and this file's own header warns
+ against). Re-derived properly this time:
+ - PRIMARY TEXT: RG 16(a) itself says the winning Feast of the Lord holds
+ the Sunday's place cum omnibus iuribus et privilegiis -- WITH ALL the
+ Sunday's own rights and privileges. RG 111(b) is one of those: in
+ dominicis II classis, una tantum admittitur commemoratio, SCILICET DE
+ FESTO II CLASSIS -- a Sunday's own slot is reserved for a Class2
+ candidate specifically. The day is still a dominica II classis for
+ this purpose even though the Transfiguration, not the Sunday, is
+ [observed] -- so Sixtus (Class3) has no standing for the slot at all,
+ the same as on any other II-class Sunday (contrast
+ [test_ii_class_sunday_admits_only_ii_class_commemoration] above,
+ romanus, Class3, excluded the identical way on an ORDINARY II-class
+ Sunday).
+ - ORACLE, independently fetched (missalemeum's own /api/v5/calendar
+ JSON, not the small-model webpage summary, which proved unreliable for
+ this exact question): 2023-08-06 (a Sunday) -- title Transfiguration of
+ Our Lord, commemorations empty, displaced Pope Sixtus II, Felicissimus
+ and Agapitus, Martyrs -- Sixtus displaced, not commemorated. Control,
+ 2026-08-06 (a Thursday, no Sunday collision) -- Sixtus present in
+ commemorations. Being a Sunday is exactly what excludes him.
+
Deliberately NOT a bare "comms=[]" pin (this project's own catalogued
vacuity flavour: a count/emptiness assertion that would pass even if
nothing had ever been offered): [omitted_has] first proves the Sunday
really WAS a candidate that reached [disposition] and was actively
- excluded, not merely never constructed. And the Sunday is not the day's
- ONLY loser -- Pope Sixtus II, Felicissimus and Agapitus (Martyrs,
- Commemoration_only, III class, also fixed 6 August, unrelated to the
- Sunday) still receive their own ORDINARY commemoration exactly as RG
- 111(c)/(d) require: proof that RG 16(a) suppresses the SUNDAY
- specifically, not "every commemoration due that day". *)
+ excluded, not merely never constructed. *)
let test_rg16a_lord_feast_no_sunday_commemoration_2028 () =
let d = fetch 2028 8 6 in
Alcotest.(check bool)
@@ -518,35 +540,45 @@ let test_rg16a_lord_feast_no_sunday_commemoration_2028 () =
true
(omitted_has d "ef-time-after-pentecost-sunday-9");
Alcotest.(check string)
- "2028-08-06: the Transfiguration observed; the Sunday has NO commemoration (RG16a); an UNRELATED III-class \
- saint the same day still gets its own ordinary one"
+ "2028-08-06: the Transfiguration observed; NO commemoration at all -- RG16(a)'s own \"cum omnibus iuribus \
+ et privilegiis\" keeps the day a dominica II classis for RG111(b), so Sixtus (Class3) has no standing \
+ either, oracle-confirmed"
"2028-08-06 sunday season=time-after-pentecost week=9 slug=transfiguration-of-our-lord rank=class-2 \
- colour=white comms=[pope-sixtus-ii-felicissimus-and-agapitus-martyrs:ordinary] in=- out=[]"
+ colour=white comms=[] in=- out=[]"
(describe d)
-(* 2025-02-02: the other direction, and the change that made this task's
- two halves inseparable (this task's own report). The Purification (2
- Feb, calendarium "IN PURIFICATIONE B. MARIAE VIRG.") is a feast of the
- BLESSED VIRGIN, not of the Lord -- data/ef/adjustments.sexp retags it
- [Bvm] (the sanctoral audit, this task's report), so it no longer bands
- at RG 91 entry 14 and no longer outranks an occurring II-class Sunday
- (entry 16 > entry 15). `date -d 2025-02-02 +%A` = Sunday, independently
- confirmed. Register §6.0's own text: "Applying RG 16(a) to today's
- [pre-fix] data would then also suppress the Sunday's commemoration
- there" -- exactly the wrong outcome the data fix (not RG 16(a) itself)
- prevents: with the Purification correctly Bvm, RG 16(a)'s own winner-side
- [subject = Lord] conjunct never matches here, so the Sunday is simply the
- observed day and the Purification survives as its ordinary commemoration
- (RG 109/RG 111(b): a plain II-class candidate on a II-class Sunday, no
- privileged rival due). *)
+(* 2025-02-02, the other real instance of the SAME pattern -- not a
+ contrasting second direction, per this task's fix round 1 (CRITICAL
+ finding, item 1, reverted; see register §6.0 for the full account).
+
+ The Purification (2 Feb, calendarium "IN PURIFICATIONE B. MARIAE VIRG.")
+ stays [subject = Lord] -- the user has ruled: follow the oracle.
+ missalemeum treats it exactly as RG 16(a)'s own "festum Domini" case
+ (independently fetched, `/api/v5/calendar` JSON): 2020-02-02 (a Sunday)
+ -- `{"title":"Purification of the Blessed Virgin Mary","tags":["IV
+ Sunday after Epiphany"],...,"commemorations":[],"displaced":[]}` -- the
+ Sunday named only as a TAG (the underlying temporal placement), not
+ commemorated at all; matches 2014-02-02 exactly. Contrast, the SAME
+ oracle on an ordinary Marian feast (2019-09-08, the Nativity of the
+ BVM): `{"title":"XIII Sunday after Pentecost",...,"commemorations":
+ [{"title":"Nativity of the Blessed Virgin Mary",...}],...}` -- the
+ Sunday observed, the feast merely commemorated, the OPPOSITE pattern --
+ proving missalemeum does not treat every Marian feast this way, only the
+ Purification specifically. `date -d 2025-02-02 +%A` = Sunday,
+ independently confirmed.
+
+ Unlike 2028-08-06, no second sanctoral candidate exists on 2 February
+ (data/ef/sanctoral.sexp has exactly one 2 February entry) -- a genuinely
+ clean "comms=[]" case, complementing the pair above rather than
+ duplicating it. *)
let test_purification_on_a_sunday_2025 () =
check
~msg:
- "2025-02-02: the Sunday observed (Purification retagged Bvm, no longer a Feast of the Lord); the \
- Purification survives as an ordinary commemoration, not suppressed"
+ "2025-02-02: the Purification observed (subject Lord, unretagged -- the oracle's own treatment); NO \
+ commemoration of the Sunday, oracle-confirmed"
2025 2 2
- "2025-02-02 sunday season=time-after-epiphany week=4 slug=ef-time-after-epiphany-sunday-4 rank=class-2 \
- colour=green comms=[purification-of-the-blessed-virgin-mary:ordinary] in=- out=[]"
+ "2025-02-02 sunday season=time-after-epiphany week=4 slug=purification-of-the-blessed-virgin-mary \
+ rank=class-2 colour=white comms=[] in=- out=[]"
let suite =
( "golden pins (known-tricky years)",
@@ -574,10 +606,11 @@ let suite =
Alcotest.test_case "IV-class ferias never commemorated (2026)" `Quick test_iv_class_ferias_never_commemorated;
Alcotest.test_case "RG111(b): a II-class Sunday admits only a de-festo-II-classis commemoration (2009, 2026)"
`Quick test_ii_class_sunday_admits_only_ii_class_commemoration;
- Alcotest.test_case "RG16(a): a Feast of the Lord leaves the impeded Sunday with no commemoration (2028-08-06)"
+ Alcotest.test_case
+ "RG16(a): a Feast of the Lord leaves the impeded Sunday with NO commemoration at all, not even an \
+ unrelated saint's own (2028-08-06, rubric + oracle)"
`Quick test_rg16a_lord_feast_no_sunday_commemoration_2028;
Alcotest.test_case
- "RG16(a) does not fire for the (corrected) Purification: the Sunday observed, the Purification \
- commemorated (2025-02-02)"
+ "RG16(a), the Purification (oracle-ruled): observed outright, the Sunday not commemorated (2025-02-02)"
`Quick test_purification_on_a_sunday_2025
] )