diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 01:42:00 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-13 01:42:00 +0200 |
| commit | 254cfd7d9111b0f23f9c44e82d3e31d5817dc5a4 (patch) | |
| tree | a14a1e43e95d5bb3b03cd9832776461ea9440605 /test/test_golden.ml | |
| parent | a2654a1e4d8987a251bcefbad2b0f0b867a6c6e6 (diff) | |
| parent | 0f6454c123f1514c1cf255faed8d9b8c752c6347 (diff) | |
| download | colitur-254cfd7d9111b0f23f9c44e82d3e31d5817dc5a4.tar.gz colitur-254cfd7d9111b0f23f9c44e82d3e31d5817dc5a4.zip | |
Merge branch 'ef-rebootstrap': re-bootstrap the sanctoral, refresh the differential
Re-bootstraps data/ef/sanctoral.sexp from lectio's corrected generator
(322 -> 327 entries), propagating fixes colitur had inherited wholesale:
15 entries wrongly marked commemoration-only that are really III-class
feasts, four entries missing entirely, six commemorations an electronic
transcription had hidden, and two class corrections.
38639 days change across 1583-9999, in three shapes with no remainder:
2245 where a III-class feast now correctly beats a class-4 feria, 35174
where one of five restored commemorations appears, and 1220 on 13
January. All five restored entries were verified against a photographic
scan -- real, correctly ranked, and confined to their own dates.
13 January is NOT fixed by this. It moves from one wrong answer to a
different one, because RG 112 and a Holy Family office are both unbuilt.
Recorded as its own allow-list entry with a citation and a count, rather
than left inside a season-boundary entry's cardinality pin, and
deliberately not pinned by a golden test.
Then refreshes the lectio differential fixture, which predated the seven
EF defects fixed in that project. Nine allow-list entries close -- each
was a real divergence adjudicated in colitur's favour, and each closes
because lectio was fixed, with its RG citation preserved. The list goes
from twelve entries to four; the remaining 540 differences are fully
attributed with none unexplained.
Diffstat (limited to 'test/test_golden.ml')
| -rw-r--r-- | test/test_golden.ml | 117 |
1 files changed, 106 insertions, 11 deletions
diff --git a/test/test_golden.ml b/test/test_golden.ml index fb3cff4..5292427 100644 --- a/test/test_golden.ml +++ b/test/test_golden.ml @@ -163,16 +163,21 @@ let test_easter_extreme_1666 () = the SAME extreme as 1666, reached independently), chosen because it is a near-term year rather than a 17th-century one. - DELIBERATE EXCLUSION, not an oversight: register §6's F4 finding - confirms 2038-03-06 (+sts-felicitas-perpetua), 2038-03-08 (+john-of-god) - and 2038-03-09 (+frances-rome) are WRONG -- three sanctoral entries - bootstrapped from lectio carry a Commemoration_only status that should be - a real III-class Feast (a bootstrap-generator defect traced to - missalemeum's own commemoration-id ranks, not fixable without touching - lectio). Pinning those three dates as "correct" would freeze a known bug - into a regression test that then fights its own fix -- the report's own - warning against exactly this. Only the Easter-week days (temporal-cycle - territory, untouched by the March sanctoral bug) are pinned here. *) + ORIGINAL EXCLUSION, now RESOLVED (ef-rebootstrap, 2026-08-12): this + comment used to say 2038-03-06 (+sts-felicitas-perpetua), 2038-03-08 + (+john-of-god) and 2038-03-09 (+frances-rome) were deliberately left + unpinned because they were WRONG -- three sanctoral entries bootstrapped + from lectio carried a `Commemoration_only` status that should have been a + real III-class Feast. That defect was in lectio's own generator, not + fixable without touching lectio; lectio's generator has SINCE been fixed + (source SHA-256 6a25e634... -> 1b303ef2...) and colitur re-bootstrapped + from it, so this specific exclusion reason no longer holds. These three + dates, plus three more of the same shape (2008-04-02/04/05), are now + pinned below in [test_iii_class_feast_wins_class4_feria] -- the deferred + pin this comment always pointed at, not a new finding. Kept as a + temporal-cycle-only test regardless (the two concerns -- Easter-extreme + arithmetic and a sanctoral occurrence rule -- stay separate pins even + though nothing forces that any more). *) let test_easter_extreme_2038_late_modern () = check ~msg:"2038-04-24 Holy Saturday: still Passiontide, violet (RG 128)" 2038 4 24 "2038-04-24 saturday season=passiontide week=2 slug=ef-passiontide-2-saturday rank=class-1 colour=violet \ @@ -580,6 +585,92 @@ let test_purification_on_a_sunday_2025 () = "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=[]" +(* ------------------------------------------------------------------ *) +(* RG 91 entry 24 ("Festa III classis, in calendario Ecclesiae universae + inscripta") outranks entry 28 ("feriae IV classis") -- ef-rebootstrap + (2026-08-12). Fifteen data/ef/sanctoral.sexp entries, 6 March-5 April, + were wrongly bootstrapped `rank = commemoration` (Commemoration_only, + which RG 91's table has no row for at all, register §6.1's own Maurice/ + Thomas finding) where the 1962 calendarium gives each a real class + number instead; corrected upstream in lectio's own generator and + re-bootstrapped here (source SHA-256 1b303ef2...). Only 7 of the 15 ever + land on a date that collides with a plain CLASS-4 feria somewhere in the + domain -- fact-checked by a full 1583-9999 blast-radius sweep finding + zero diff rows for the other 8 anywhere in the domain, not assumed. + + CORRECTED (ef-rebootstrap fix round 1, F1): this comment previously gave + a single reason for the other 8's silence -- "always fall inside Lent/ + Passiontide proper, RG 91 entry 22, which already outranks entry 24" -- + WRONG for 3 of the 8, measured directly against the domain-wide season + breakdown per slug: `gabriel-the-archangel` (24 Mar) lands in + PASCHALTIDE 226 times, `john-damascene` (27 Mar) 846 times, + `john-of-capistrano` (28 Mar) 1108 times -- always at `class-1` there + (inside the Easter Octave, RG 91 entry 2/10), never a class-4 feria. + Entry 22 itself is also narrower than "Lent/Passiontide" suggests (its + own text excludes the Ember days). The TRUE, general shield, checked + against every (season, rank) pair these 8 slugs' dates ever land in + domain-wide: whichever office already occupies the date is EITHER + class-1 or class-2 (an Easter-Octave/Holy-Week/I-class-Sunday day, + entries 2/6/7/10; a II-class Sunday or Ember feria, entries 15/18) -- + which trivially outranks ANY class-3 candidate regardless of status, and + also excludes it from commemoration by RG 111(a)/(b)'s own rank floors + the same way regardless of status -- OR the ordinary Lent/Passiontide + class-3 feria itself, entry 22, which outranks entry 24 for OBSERVATION + but (RG 111(c)/(d), no ferial-class gate on an "ordinary" sanctoral + candidate) admits the losing saint's commemoration identically whether + `Commemoration_only` or a genuine `Feast` -- so no context these 8 dates + ever reach anywhere in the domain distinguishes the two statuses in + either direction, observation or commemoration. Not "always Lent" -- + "always something at entry ≤22 already occupies the day". These are the + SIX dates the task brief that started this re-bootstrap named as + producing "a wrong observed office" + under the OLD data (2008-04-02/04/05, 2038-03-06/08/09) -- + [test_easter_extreme_2038_late_modern]'s own header above is the record + of why they were deliberately left unpinned until now. *) + +let test_iii_class_feast_wins_class4_feria () = + (* Two [omitted_has] checks, one per season family (Paschaltide, + Septuagesima), prove the displaced CLASS-4 feria actually reached + [disposition] and was actively omitted under RG26 ("IV-class ferias + are never commemorated"), not merely absent because no candidate was + ever offered -- this file's own established convention (the RG16(a) + and "IV-class ferias never commemorated" tests above), not repeated + for all six to avoid duplicating the same proof six times. *) + let d1 = fetch 2008 4 2 in + Alcotest.(check bool) + "2008-04-02: the displaced class-4 Paschaltide feria is in [omitted] (RG26), proving RG91 entry24>28 fired" + true + (omitted_has d1 "ef-easter-2-wednesday"); + Alcotest.(check string) "2008-04-02: Francis of Paola (III class, RG91 entry 24) outranks the class-4 feria" + "2008-04-02 wednesday season=paschaltide week=2 slug=francis-of-paola rank=class-3 colour=white comms=[] \ + in=- out=[]" + (describe d1); + check ~msg:"2008-04-04: Isidore of Seville (III class) outranks the class-4 Paschaltide feria, same shape" 2008 + 4 4 + "2008-04-04 friday season=paschaltide week=2 slug=isidore-of-seville rank=class-3 colour=white comms=[] in=- \ + out=[]"; + check ~msg:"2008-04-05: Vincent Ferrer (III class) outranks the class-4 Paschaltide feria, same shape" 2008 4 5 + "2008-04-05 saturday season=paschaltide week=2 slug=vincent-ferrer rank=class-3 colour=white comms=[] in=- \ + out=[]"; + let d4 = fetch 2038 3 6 in + Alcotest.(check bool) + "2038-03-06: the displaced class-4 Septuagesima feria is in [omitted] (RG26), proving RG91 entry24>28 fired" + true + (omitted_has d4 "ef-septuagesima-2-saturday"); + Alcotest.(check string) + "2038-03-06: Sts Perpetua and Felicity (III class, RG91 entry 24) outrank the class-4 feria; RED per their \ + own martyrs' colour, not the season's violet" + "2038-03-06 saturday season=septuagesima week=2 slug=sts-felicitas-perpetua rank=class-3 colour=red comms=[] \ + in=- out=[]" + (describe d4); + check ~msg:"2038-03-08: John of God (III class) outranks the class-4 Septuagesima feria, same shape" 2038 3 8 + "2038-03-08 monday season=septuagesima week=3 slug=john-of-god rank=class-3 colour=white comms=[] in=- \ + out=[]"; + check ~msg:"2038-03-09: Frances of Rome (III class) outranks the class-4 Septuagesima feria, same shape" 2038 3 + 9 + "2038-03-09 tuesday season=septuagesima week=3 slug=frances-rome rank=class-3 colour=white comms=[] in=- \ + out=[]" + let suite = ( "golden pins (known-tricky years)", [ Alcotest.test_case "Easter extreme: 1598 earliest (22 Mar, Gauss-verified)" `Quick @@ -612,5 +703,9 @@ let suite = `Quick test_rg16a_lord_feast_no_sunday_commemoration_2028; Alcotest.test_case "RG16(a), the Purification (oracle-ruled): observed outright, the Sunday not commemorated (2025-02-02)" - `Quick test_purification_on_a_sunday_2025 + `Quick test_purification_on_a_sunday_2025; + Alcotest.test_case + "ef-rebootstrap: RG91 entry24 (III-class feast) outranks entry28 (class-4 feria) -- the six dates \ + deferred since 2038's own Easter-extreme pin (2008-04-02/04/05, 2038-03-06/08/09)" + `Quick test_iii_class_feast_wins_class4_feria ] ) |
