summaryrefslogtreecommitdiff
path: root/data/ef
diff options
context:
space:
mode:
Diffstat (limited to 'data/ef')
-rw-r--r--data/ef/adjustments.sexp73
-rw-r--r--data/ef/expected-divergences-missalemeum.sexp75
-rw-r--r--data/ef/expected-divergences.sexp74
-rw-r--r--data/ef/sanctoral.sexp95
4 files changed, 214 insertions, 103 deletions
diff --git a/data/ef/adjustments.sexp b/data/ef/adjustments.sexp
index 05ee401..e33b4eb 100644
--- a/data/ef/adjustments.sexp
+++ b/data/ef/adjustments.sexp
@@ -50,7 +50,78 @@
; the user's ruling resolves that disagreement in the oracle's favour for
; this codebase's own purposes, not by declaring the calendarium argument
; wrong. See register §6.0 for the full account of both sides.
+;
+; ef-rebootstrap (2026-08-12): both directives re-examined against the
+; regenerated source (tridentine-calendar.ini, SHA-256 1b303ef2...), which
+; independently fixed several of the same defects this file was written to
+; patch. Neither directive was removed -- reasoning below, per the task's
+; own instruction to decide deliberately rather than delete on sight.
+;
+; `Edit most-holy-name-of-mary` -- the base bootstrap no longer needs this
+; correction: the regenerated INI's own `[most-holy-name-of-mary]` section
+; has DROPPED its `class = lord` field entirely (confirmed by direct grep
+; against the source), so `tools/bootstrap_sanctoral.ml`'s `parse_subject`
+; now falls through to its own default, `Subject.Saint` -- not `Lord` --
+; before this overlay ever runs. Checked what {!Overlay.apply}'s [Edit]
+; actually does with a directive whose target slug is present but whose
+; field is no longer wrong, rather than assuming: [Edit] has no notion of
+; "already correct" -- it looks up the slug, and if found (as this one
+; still is) unconditionally folds every field_edit over the current value,
+; firing NO diagnostic either way (overlay.ml's [apply_directive], the
+; [Edit] branch: the only diagnostic is "slug not present", never "already
+; matches"). So this is not a no-op: it still forces `Saint -> Bvm` on
+; every run, identically to before, just starting from a different base
+; value than it used to. Decision: KEEP, for two independent reasons, not
+; one -- (1) DATA PRECISION, unaffected by the base bootstrap's own fix:
+; the calendarium's "Sanctissimi Nominis Mariae" title names Mary
+; specifically, so [Bvm] remains the more accurate tag than the generic
+; [Saint] default, on the same textual grounds as the original entry
+; above, regardless of what lectio's own `class` field happens to say this
+; week. (2) REGRESSION DEFENCE: because [Set_subject] is unconditional, it
+; also now stands as a guard against `class = lord` ever being
+; RE-introduced for this slug by a future lectio regeneration -- the
+; overlay would still force the result away from [Lord] (the one subject
+; value {!Precedence_ef.band}'s RG 16(a) branch behaviourally reads),
+; rather than silently letting a re-introduced bootstrap defect through.
+; Removing the directive now would trade a currently-harmless redundancy
+; for the loss of that guard.
+;
+; `Suppress vigil-of-christmas` -- re-verified, not assumed: `[vigil-of-
+; christmas]` (24 Dec) is still present, unchanged, in both the
+; regenerated INI and the regenerated `data/ef/sanctoral.sexp` (still the
+; same duplicate of `rite_ef/temporal_ef.ml`'s own `ef-nativity-vigil`
+; this directive was written to remove), so `Layer.mem` still finds it and
+; {!Overlay.apply}'s [Suppress] branch still fires its ordinary
+; slug-present path (no diagnostic) exactly as before. Nothing about this
+; regeneration touched the reason this directive exists; kept unchanged.
+;
+; `Edit eusebius-confessor` -- NEW (ef-rebootstrap fix round 1, F3): this
+; new entry's own bootstrapped colour, `Red`, is a LECTIO DATA DEFECT,
+; found by checking the primary scan directly rather than trusting lectio's
+; ini or missalemeum's own `:r` colour tag, which agree with each other but
+; not with the Missal -- exactly the "two non-primary witnesses agreeing
+; against the primary text" trap this project's own transcription-audit
+; task already named once. `missale-romanum-1962.pdf`, 14 August, the
+; commemoration's own proper: *"Eodem die 14 augusti / S. Eusebii Conf. /
+; Commemoratio / Missa Iustus, ut in festo S. Pauli primi Eremitae, die 15
+; ianuarii..."* -- "Conf." (Confessor, not Martyr), and the borrowed Mass
+; "Iustus" is the SAME Mass 15 January's own St Paul the First Hermit uses
+; -- a Confessor, white in both lectio's own data and colitur's
+; (`paul-the-first-hermit`, `data/ef/sanctoral.sexp`) -- for the Common of
+; Confessors. Corroborated negatively: lectio gives WHITE to every other
+; Confessor/Abbot commemoration in its own data (`maur-abbot`, `giles`,
+; `remigius`, `didacus`, `ubaldus`, `hilarion`, `sabbas`, `silvester`,
+; `alexis`) -- Eusebius Confessor is the one exception, with no textual
+; support found for it. No behavioural impact today (`Commemoration_only`
+; entries are never the OBSERVED celebration, so this colour is never
+; printed by the current pipeline -- but `Record`/rendering will read it
+; the moment a template does), fixed for the data's own accuracy via the
+; SAME overlay mechanism as the other two directives, since
+; `data/ef/sanctoral.sexp` is generated and the source is upstream. Logged
+; as a lectio-side generator/data defect in docs/research/rules-register.md
+; for a future generator fix, not merely patched here silently.
((id ef-adjustments)
(directives
((Suppress vigil-of-christmas)
- (Edit most-holy-name-of-mary ((Set_subject Bvm))))))
+ (Edit most-holy-name-of-mary ((Set_subject Bvm)))
+ (Edit eusebius-confessor ((Set_colour White))))))
diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp
index 53e93d4..9cff236 100644
--- a/data/ef/expected-divergences-missalemeum.sexp
+++ b/data/ef/expected-divergences-missalemeum.sexp
@@ -35,6 +35,56 @@
; primary-source effort, not defaulted past -- see each entry's own note
; and the task report for the full search.
;
+; FIVE MORE REMOVED, ef-rebootstrap (2026-08-12), same shape as M17's own
+; removal above -- not re-adjudicated to a different verdict, just gone,
+; because the underlying divergence stopped occurring: M4 (second
+; commemoration of St Agnes, 28 Jan), M6 (St Eusebius Confessor, 14 Aug),
+; M7 (St Evaristus, 26 Oct), M9 (St Theodore, 9 Nov) and M14 (St Boniface
+; Martyr, 14 May) were all recorded as genuine DATA GAPS traced upstream
+; into lectio's own tridentine-calendar.ini and "cannot be fixed without
+; touching lectio" -- true at the time, and no longer true: lectio's own
+; generator was independently fixed in the same session (docs/research/
+; rules-register.md's own transcription-audit record) and colitur's
+; sanctoral data re-bootstrapped from the corrected source (SHA-256
+; 1b303ef2..., tools/bootstrap_sanctoral.ml's own regenerated header). All
+; five commemorations these entries named are now present in
+; data/ef/sanctoral.sexp (agnes-secundo, boniface-martyr, eusebius-confessor,
+; evaristus, theodore -- CORRECTED, fix round 1: this list previously
+; dropped boniface-martyr, an omission with no other consequence, since the
+; removal itself and the row-count check below were never driven by this
+; prose list) and admitted through the ordinary pipeline with no code
+; change -- re-run against the 2026-2027 fixture, each of the five now
+; contributes ZERO rows to the comparator's own diff stream (verified: the
+; day-by-day classification no longer reaches [layer_m_reason] for any of
+; their dates at all, since [diffs = []] -- Matched, not Explained -- for
+; every one). Removed rather than kept as a dead 0-row citation, matching
+; the M17 precedent immediately below: the count pin now enforces that
+; none of these five divergences can silently reappear.
+;
+; PROVENANCE, added ef-rebootstrap fix round 1 (F7): removing M4/M6/M7/M9/
+; M14 deleted the only TRACKED primary-source citations for these five
+; entries -- docs/research/ (where the full quotes and page cross-checks
+; originally lived) is gitignored, and data/ef/sanctoral.sexp is generated
+; data with no citations field of its own, so without this note the public
+; repository would carry no record of why these five exist at all. Each
+; quote below is verbatim from `missale-romanum-1962.pdf`'s own calendarium
+; (the photographic scan, primary-source-verified 2026-08-12, per the same
+; standard as every other citation in this file):
+; - agnes-secundo (28 Jan): "S. Petri Nolasci Conf., III classis. /
+; Com. S. Agnetis Virg. et Mart., secundo."
+; - boniface-martyr (14 May): "Com. S. Bonifatii Mart."
+; - eusebius-confessor (14 Aug): "Vigilia, II classis, Commemoratio
+; S. Eusebii Conf.", with its own proper immediately following,
+; "Eodem die 14 augusti / S. Eusebii Conf. / Commemoratio / Missa
+; Iustus, ut in festo S. Pauli primi Eremitae, die 15 ianuarii..."
+; -- the proper is also this entry's own colour citation: "Conf.", not
+; "Mart.", borrowing a CONFESSOR's Mass -- see adjustments.sexp's own
+; `Edit eusebius-confessor` entry (fix round 1, F3), which corrects the
+; colour this bootstrap inherited (Red) against this same evidence.
+; - evaristus (26 Oct): "Com. S. Evaristi Papæ et Mart."
+; - theodore (9 Nov): "IN DEDICATIONE ARCHIBASILICÆ SANCTISSIMI
+; SALVATORIS, II classis. / Com. S. Theodori Mart."
+;
; [expected_rows] is the exact row count this entry accounts for over the
; fixture's 2026-2027 span: a REGRESSION PIN, not documentation --
; test_oracle.ml asserts actual counts equal these exactly, so an unnoticed
@@ -59,36 +109,16 @@
(verdict colitur)
(note "missalemeum, like lectio, computes no Rogation day at all and shows the plain paschaltide-week feria instead. Only 3 May 2027 (Rogation Monday) shows it in this window -- every other Rogation day here is won outright by a saint on both sides, so only the underlying temporal identity differs, which this comparator's axes do not expose.")
(expected_rows 1))
- ((id M4)
- (citation "1962 calendarium (missale-romanum-1962.pdf), 28 January row: \"S. Petri Nolasci Conf., III classis. / Com. S. Agnetis Virg. et Mart., secundo.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A second commemoration of St Agnes (secundo, distinct from her main 21 January feast) is missing from data/ef/sanctoral.sexp. Traced upstream: lectio's own tridentine-calendar.ini has no 01-28 entry beyond [peter-nolasco] either -- a bootstrap-source gap, not a bootstrap-tool bug. Cannot be fixed without touching lectio (out of this task's reach); register §6 open item.")
- (expected_rows 2))
((id M5)
(citation "RG 80 (Major Litanies, 25 April) -- register §6's own pre-existing open item, \"Major Litanies (25 April, RG 80) are not computed\"")
(verdict missalemeum)
(note "Independently confirmed by the oracle, not a new finding: missalemeum's \"Pro rogationibus\" commemoration on St Mark's day (25 April, the Major Litanies' fixed date) is exactly the missing office register §6 already tracks. Only 2026 shows as a comparator MISMATCH: 25 April 2026 is a Saturday with Mark winning outright, so colitur's commemoration list is empty where the oracle's carries \"Pro rogationibus\" -- a real presence gap. 25 April 2027 is a Sunday: the Sunday wins on BOTH sides, and each side's own single commemoration slot goes to a DIFFERENT candidate (colitur: St Mark himself, an ordinary II-class sanctoral loser admitted under RG111(b)'s \"de festo II classis\" slot; missalemeum: the Major Litanies) -- both non-empty, same count, so this comparator's count-only axis (deliberately not slug-identity, see test_oracle.ml's own header) cannot see that mismatch; the underlying gap is the same, just invisible to this year's row.")
(expected_rows 1))
- ((id M6)
- (citation "CORRECTED 2026-08-12, transcription-audit task (branch ef-rg16a): the previous citation below read the ELECTRONIC TRANSCRIPTION (1962-06-23,_SS_Ioannes_XXIII,_Missale_Romanum,_LT.pdf), which silently drops calendarium commemorations, and mistook its silence for the calendarium's own. A photographic scan (missale-romanum-1962.pdf), 14 August row: \"Vigilia, II classis, Commemoratio S. Eusebii Conf.\", with its own proper immediately following (\"Eodem die ... Et fit commemoratio S. Eusebii Conf.\") -- independently confirmed in the second scan, Missale Romanum 1962_text.pdf. Primary-source-verified 2026-08-12.")
- (verdict missalemeum)
- (note "The same shape as M4/M7/M9/M14, not the reverse of them: a genuine commemoration -- S. Eusebius, Confessor, 14 August -- is present in the 1962 calendarium and in missalemeum's own data, but absent from data/ef/sanctoral.sexp and from lectio's own tridentine-calendar.ini (no 08-14 entry beyond vigil-of-the-assumption). This Eusebius Confessor (14 Aug) is a genuinely DIFFERENT saint from Eusebius Bishop and Martyr (16 Dec, already correctly in data/ef/sanctoral.sexp, matching lectio's own [eusebius] entry at THAT date) -- both exist, at their own separate dates; the calendarium carries both. Not fixed here: single-source data, the same bootstrap-reach constraint as M4/M7/M9/M14 (would require touching ~/git/projects/lectio). Register docs/research/rules-register.md, Decisions item 4 and the transcription-audit record in section 6, has the full account and the wider calendarium sweep this correction came from.")
- (expected_rows 2))
- ((id M7)
- (citation "1962 calendarium, 26 October row: \"Com. S. Evaristi Papæ et Mart.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A genuine data gap, the same shape as M4: absent from data/ef/sanctoral.sexp and from lectio's own tridentine-calendar.ini (no 10-26 entry at all). Register §6 open item.")
- (expected_rows 2))
((id M8)
(citation "RG 109(a) (\"of a Sunday\" is always privileged) + RG 111(a) (\"I class: none save one privileged\")")
(verdict colitur)
(note "When a fixed I-class feast (All Saints 1 Nov; the Assumption 15 Aug) lands on an ordinary Sunday, the impeded Sunday IS the one privileged commemoration RG 111(a) admits -- already an established, independently-tested rule (test_precedence_ef.ml's RG95/RG109(a) row). missalemeum shows no commemoration at all on either occurrence in this window.")
(expected_rows 2))
- ((id M9)
- (citation "1962 calendarium, 9 November row: \"IN DEDICATIONE ARCHIBASILICÆ SANCTISSIMI SALVATORIS, II classis. / Com. S. Theodori Mart.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A genuine data gap, the same shape as M4/M7: absent from data/ef/sanctoral.sexp and from lectio's own 11-09 entry (dedication-of-the-archbasilica-of-our-holy-savior alone). Register §6 open item.")
- (expected_rows 2))
((id M10)
(citation "RG 109(e), unqualified text: \"de feriis Adventus, Quadragesimae et Passionis\" -- of the FERIAS of Advent (not \"the Advent ferias 17-23 December only\", which is RG 91 entry 18's separate OCCURRENCE-table dignity, not a RG 109 privilege restriction)")
(verdict colitur)
@@ -104,11 +134,6 @@
(verdict missalemeum)
(note "Unimplemented in this codebase. 22 February 2027 (Chair of St Peter): colitur commemorates only the privileged Lent feria; missalemeum shows that AND \"St. Paul\". A genuine, primary-cited feature gap -- register §6 open item. Narrow: the only row in this window where it becomes visible against this comparator's axes (see the task report for the other Peter/Paul offices checked and found clean).")
(expected_rows 1))
- ((id M14)
- (citation "1962 calendarium, 14 May row: \"Com. S. Bonifatii Mart.\" -- primary-source-verified 2026-08-12")
- (verdict missalemeum)
- (note "A genuine data gap, the same shape as M4/M7/M9: a commemoration-only St Boniface, Martyr (DIFFERENT from the II-class St Boniface, Bishop and Martyr, of 5 June, which data/ef/sanctoral.sexp already carries correctly) is absent from data/ef/sanctoral.sexp and from lectio's own tridentine-calendar.ini for 05-14 (no entry at all). Only visible in 2027 -- in 2026, 14 May is Ascension Thursday (I class), which correctly admits no ordinary commemoration on either side (RG 111(a)), so Boniface is (correctly) absent from BOTH streams that year. Register §6 open item.")
- (expected_rows 1))
((id M13)
(citation "OPEN -- not adjudicated. 1962 calendarium's March table: \"Feria VI post dominicam I Passionis: Commemoratio septem Dolorum B. Mariæ Virg.\" (confirmed real, every year) -- but RG 91's plain table (entry 11-13, Joseph, I class, vs entry 22, an ordinary III-class Passiontide feria) gives Joseph the day outright, with no RG 96 collision requiring a transfer, so the primary text found here does not by itself explain missalemeum's result")
(verdict open)
diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp
index c8d863d..a733273 100644
--- a/data/ef/expected-divergences.sexp
+++ b/data/ef/expected-divergences.sexp
@@ -17,58 +17,48 @@
; Regenerate expected_rows only after re-adjudicating the change against the
; Missal/register -- never by re-running the comparator and copying its
; output back here (that would launder a regression into a new baseline).
+;
+; REFRESHED 2026-08-12 (task 2026-08-12-colitur-rg16a, branch ef-rebootstrap):
+; the fixture was regenerated from lectio's current HEAD (3b32c00), which has
+; independently fixed the seven EF calendar defects this file's own C2, C3,
+; C4, C5, C7, C9 (in part), C10 and C11 used to allow-list, plus lectio's
+; sanctoral generator fix that resolved C12. NINE entries -- C2, C3, C4, C5,
+; C7, C10, C11, C12, C13 -- are CLOSED (removed below, not re-adjudicated to
+; a different verdict): each stopped occurring entirely (0 of 16801 rows),
+; the same "REMOVED, not re-adjudicated" shape M17/M4/M6/M7/M9/M14 already
+; used in data/ef/expected-divergences-missalemeum.sexp. Every closed
+; citation is preserved in docs/research/rules-register.md's own closure
+; record (search "ef-rebootstrap fixture refresh" there), not deleted --
+; each was a real divergence, correctly adjudicated in colitur's favour at
+; the time, closed because the OTHER engine was fixed to agree, not because
+; colitur changed. C9's OLD shape ("Joseph observed on a Lent Sunday") is
+; part of that same closure; a DIFFERENT, narrower divergence involving the
+; same saint (Joseph's transfer colliding with the Annunciation's own fixed
+; "sedes propria") survived the refresh and is re-cited below as C14, a new
+; id, not folded back into C9 -- the two are different rules and conflating
+; them is exactly the "count proving cardinality where identity was
+; required" failure mode this project's own review process has caught
+; before. Three entries survive with their original citation, unchanged in
+; kind: C1 (368 rows, up from 361 -- see C1's own note), C6 (138 rows,
+; unchanged count, narrower shape -- see C6's own note) and C8 (31 rows,
+; wholly unchanged).
((id C1)
(citation "RG 72-73 (Nativity/Epiphany season boundary, Jan 1-13) + RG 119a (white through \"expletum tempus Epiphaniae\"); register §3c item 1")
(verdict colitur)
- (note "6-13 January is Christmastide in colitur, matching RG 72-73's explicit boundary at 13 January (corroborated independently by RG 119a's colour rule, §3b). lectio's efSeason switches to time-after-epiphany on 6 January. The season disagreement cascades into colour (green vs white) and, on 7-8 January specifically, into the ferial slug family name (colitur's ef-christmas-2-<weekday> vs lectio's ef-time-after-epiphany-1-<weekday> for the same two days).")
+ (note "6-13 January is Christmastide in colitur, matching RG 72-73's explicit boundary at 13 January (corroborated independently by RG 119a's colour rule, §3b). lectio's efSeason switches to time-after-epiphany on 6 January. The season disagreement cascades into colour (green vs white) and, on 7-8 January specifically, into the ferial slug family name (colitur's ef-christmas-2-<weekday> vs lectio's ef-time-after-epiphany-1-<weekday> for the same two days). REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows moved 361 -> 368. NOT a new divergence -- the closed C13's own 7 rows (13 January in the 7 years it falls on a Sunday) fold back in here: lectio's fix wave independently fixed its own equivalent of the RG16(a) defect C13 used to allow-list, so on all 7 of those Sunday years lectio's slug now matches colitur's `commemoration-of-the-baptism-of-the-lord` too (not just rank/colour), leaving season as the ONLY residual difference on those rows -- squarely inside C1's own existing shape (diffs subset of [Season;Colour;Slug] with the Slug-diff escape clause unused). Re-derived independently (a Python cross-check reading colitur's own `day` CLI output for 2005-2050 and the refreshed lectio fixture directly, replicating diff_fields/layer_c_reason's own logic outside the OCaml comparator, then cross-checked against the OCaml comparator's own `test_layer_c_counts_match_citations` failure output before this entry's value was set -- not by running the comparator green and copying its number): 368.")
(expected_rows 368))
- ((id C2)
- (citation "RG 91 entry 6, §4 (\"Sundays of Advent, Lent, Passiontide, and Low Sunday\" -- I class, unqualified); extends register §3c item 4 (stated there for Advent only) to Lent on the same textual basis")
- (verdict colitur)
- (note "Advent II & IV and Lent I-III are I class in colitur, matching RG 91's own unqualified entry 6 (already confirmed for Passion Sunday, Palm Sunday, Low Sunday and Advent I, where lectio agrees). lectio's temporal_ef.go generic Sunday branch assigns Class2 and special-cases only Advent I, Passion/Palm/Low Sunday -- a lectio gap for the remaining five Sundays this entry covers.")
- (expected_rows 215))
- ((id C3)
- (citation "RG 91 entry 6, §4 (same I-class Sunday rule as C2) + RG 131 (rose indult, Gaudete/Laetare, \"in Officio et Missa diei dominici tantum\")")
- (verdict colitur)
- (note "Gaudete (Advent III) and Laetare (Lent IV): I class per C2's citation, plus the RG 131 rose indult. lectio has no Rose case in its EF colour function and zero rose rows in tridentine-calendar.ini -- Rose exists only on lectio's OF path -- so it prints violet for both Sundays.")
- (expected_rows 89))
- ((id C4)
- (citation "RG 91 entry 18 (\"II-class ferias ... Advent 17-23 Dec\"); register §3c item 2")
- (verdict colitur)
- (note "Advent ferias 17-23 December (excluding the Advent Ember days, already correct on both sides) are II class in colitur. lectio marks every Advent feria III class.")
- (expected_rows 140))
- ((id C5)
- (citation "RG 91 entry 18 (\"Ember days of Advent, Lent, September\", the same entry as C4); extends register §3c item 2 to the Lent set on the same textual basis lectio already gets right for Advent and September")
- (verdict colitur)
- (note "The Lent I Ember Wednesday/Friday/Saturday are II class with colitur's own ef-lent-ember-{wed,fri,sat} slugs. lectio implements the Advent and September Ember exceptions (matches colitur exactly, confirmed empty diff there) but not the Lent one, falling back to a plain ef-lent-1-<weekday> III-class feria -- a lectio gap not previously named in the register.")
- (expected_rows 128))
((id C6)
(citation "RG 91 entry 17 (\"days within the Octave of the Nativity\")")
(verdict colitur)
- (note "29-31 December (and any Sunday landing among them) are II class in colitur, with the ef-nativity-octave-day-{5,6,7} slugs. lectio treats them as plain class-4 ferias (ef-christmas-0-<weekday>), not recognising the Nativity octave's own entry.")
+ (note "29-31 December (and any Sunday landing among them) are II class in colitur, with the ef-nativity-octave-day-{5,6,7} slugs. REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows is UNCHANGED at 138, but the SHAPE narrowed -- lectio's fix wave independently promoted 26-31 December to II class too (its own \"beyond the seven\" fix, RG 67-68), so the RANK component of this divergence is gone; every one of the 138 rows now differs ONLY in slug (lectio keeps its generic ef-christmas-0-<weekday> feria name; colitur's date-keyed ef-nativity-octave-day-N names are not adopted, since these are FIXED calendar dates within the octave, not a weekday-numbered family Layer A's own literal-pair table could safely absorb without re-entangling the two engines' differing office-identity conventions for this window -- see test_differential.ml's own norm_slug comment for why the analogous January case is handled there and this one deliberately is not). Re-derived the same way as C1 above (Python cross-check against the refreshed fixture and colitur's `day` CLI output, cross-checked against the OCaml comparator's own failure output): 138, exactly the prior count -- a coincidence of this being a pure renaming (identity/count both unchanged), not evidence the recount was skipped.")
(expected_rows 138))
- ((id C7)
- (citation "RG 91 entries 16 (II-class feast of the universal Church) vs 18 (II-class ferias, incl. Ember days) -- entry 16 outranks entry 18")
- (verdict colitur)
- (note "St Matthew (21 September, colliding with the September Ember Wednesday or Friday in some years) and St Thomas (21 December, colliding with the Advent Ember Friday in some years) are both II-class universal feasts and win the day per RG 91's own numeric ordering -- matching Rite_ef.Precedence_ef.band's already-reviewed entry 16/18 handling. lectio does not contest Ember days against sanctoral feasts at all and keeps the Ember office observed.")
- (expected_rows 34))
((id C8)
(citation "RG 87 (Minor Litanies/Rogations, Mon/Tue before Ascension); register §3c item 3")
(verdict colitur)
- (note "Rogation Monday and Tuesday exist as colitur's own ef-rogation-{monday,tuesday} slugs (violet) whenever no higher-ranked saint intervenes. lectio computes no Rogation days at all and shows the plain paschaltide-week-6 feria instead.")
+ (note "Rogation Monday and Tuesday exist as colitur's own ef-rogation-{monday,tuesday} slugs (violet) whenever no higher-ranked saint intervenes. lectio computes no Rogation days at all and shows the plain paschaltide-week-6 feria instead. REFRESHED (ef-rebootstrap fixture refresh, 2026-08-12): expected_rows UNCHANGED at 31 -- lectio's fix wave did not touch Rogation computation at all (not named in any of its seven defects), independently confirmed by re-deriving the count against the refreshed fixture (same Python cross-check as C1/C6, matched the OCaml comparator's own failure output before being set here).")
(expected_rows 31))
- ((id C9)
- (citation "RG 95 (translation is a right of I-class FEASTS only) + RG 91 entry 6, §4 (Sundays are a separate table row, not feasts) + RG 109(a) (\"of a Sunday\" is a privileged commemoration, presupposing the Sunday stays put) + RG 96 (the general translation walk) -- the same reasoning already fixed for the analogous impeded-Sunday defect in Precedence_ef (Task 9)")
- (verdict colitur)
- (note "St Joseph (19 March, I class) colliding with a Lent Sunday (I class per C2): colitur keeps the Sunday observed and transfers Joseph to the next free day (usually 20 March; in years the walk is congested enough to cross Easter, as far as 1 April -- 2008, 2035, 2046, independently pinned by this project's own transfer tests). lectio instead puts Joseph ON the Sunday, displacing the Lenten Sunday office RG 95 says cannot be displaced by a translated feast.")
- (expected_rows 15))
- ((id C10)
- (citation "RG 91 entry 3 (Sacred Heart, a Feast of the Lord, outranks entry 11 Precious Blood) + RG 96 (impeded I-class feast moves to the next day that is NOT I or II class)")
- (verdict colitur)
- (note "2011: Sacred Heart (Friday after the Corpus Christi octave) falls on 1 July and impedes the Precious Blood (also 1 July, I class but a lower RG 91 entry). RG 96's walk must skip 2 July (Visitation, II class) and 3 July (Sunday), landing on 4 July (Monday, a free class-4 feria). lectio instead lands Precious Blood on 2 July, illegitimately displacing the Visitation -- exactly what RG 96's \"not I or II class\" clause forbids.")
- (expected_rows 2))
- ((id C11)
- (citation "RG 128(b), primary-source-verified 2026-08-12 (Task 16): \"...a dominica in Septuagesima usque ad Vigiliam paschalem, exceptis: ... Missa sive Chrismatis sive in Cena Domini feria V Hebdomadae sanctae; ...\" -- violet runs Septuagesima to the Easter Vigil EXCEPT (among other things) the Mass of Holy Thursday, named as a whole-Mass exception")
+ ((id C14)
+ (citation "RG 95 (translation is a right of I-class feasts) + RG 96 (the general forward walk, \"the next following day that is not I or II class\") + RG 96's own Attamen (a) (\"festum Annuntiationis ... quando est transferendum post Pascha, transfertur, tamquam in sedem propriam, in feriam II post dominicam in albis\" -- the Annunciation's transferred target is its OWN PROPER SEAT, not a provisional landing spot subject to further re-ordering)")
(verdict colitur)
- (note "Holy Thursday (\"ef-passiontide-2-thursday\") is white in colitur, per RG 128(b)'s explicit exception -- independently confirmed by the missalemeum oracle (Task 16 report), whose colour set for that day is white alone, unlike the surrounding Triduum days which include violet as an option. lectio has no such exception and prints Passiontide's base violet straight through Holy Thursday. Found via Task 16's oracle comparison, not the original lectio differential (lectio's own colour did not previously disagree, because colitur's own bug matched it) -- fixed in colitur, so this row records a NEW divergence from lectio's still-uncorrected violet, not a pre-existing one.")
- (expected_rows 46))
+ (note "ef-rebootstrap fixture refresh (2026-08-12), replacing the closed C9's old 'Joseph on a Lent Sunday' shape: in 2008, 2035 and 2046, St Joseph's (19 March) RG 96 walk is congested enough by Passiontide/Holy Week/the Easter octave to cross Easter, landing on the Monday after Low Sunday -- exactly where the Annunciation (25 March), independently transferred under its own Attamen (a) exception, has already been assigned its \"sedes propria\". colitur's calendar.ml (place_transfers/compare_deferred) resolves the resulting same-band (RG 91 entry 11) tie between the two I-class feasts by slug order (\"annunciation...\" < \"joseph...\"), an engineering convention with no direct RG citation of its own (recorded honestly as such in calendar.ml's own comments and test_golden.ml's 2008 golden-pin comment) -- so the Annunciation keeps the Monday and Joseph's own walk continues one day further (1 April 2008; 3 April 2035 and 2046, since the Annunciation's own target there is 2 April), each a genuine free class-4 feria. lectio, by contrast, does NOT resolve this collision at all: its transferIfImpededEF walks each candidate independently with no awareness of a second contestant, so the Annunciation's own walk claims the Monday and Joseph is left with no transferred day anywhere -- merely tacked onto the Annunciation's own row as a trailing, never-admitted \"+joseph-spouse-of-the-bl-virgin-mary\" candidate (lectio's own commit 09a1444, \"calendar: record the RG 95 chained-transfer gap in the source\", states this outright: \"No functional change -- this collision is left unfixed, defensible against scope\"). RG 95 grants the right of translation to I-class feasts; Joseph has it and lectio's engine never exercises it for him here -- colitur giving him a real transferred day, somewhere, is the more textually faithful reading regardless of the harder sub-question below. OPEN SUB-QUESTION, recorded rather than silently resolved either way (docs/research/rules-register.md has the full account): whether Joseph, being impeded FIRST (19 March, six days before the Annunciation's own 25 March), should instead take priority for the Monday under RG 98's \"in paritate autem Officium prius impeditum praecedit\" (at equal table position, the office impeded first takes precedence) -- which would push the ANNUNCIATION to the later day instead. colitur's current slug-order tie-break was never checked against this specific reading; the Annunciation's own \"tamquam in sedem propriam\" wording is offered as the stronger textual argument for exempting it from an RG 97/98 queue contest altogether (it names a specific day as its own proper seat, not a provisional walk target), but this is this project's own reading of the primary text, not a settled point -- flagged as a genuine open item, not adjudicated with full confidence either direction. Independently re-derived (not copied from prose): `grep joseph-spouse-of-the-bl-virgin-mary` against both the refreshed fixture and colitur's own `day` CLI output for 2005-2050, filtered to rows with a real post-Layer-A/B diff -- exactly these 3 dates, cross-checked against the OCaml comparator's own failure output before this value was set.")
+ (expected_rows 3))
diff --git a/data/ef/sanctoral.sexp b/data/ef/sanctoral.sexp
index 1ff9577..dadac36 100644
--- a/data/ef/sanctoral.sexp
+++ b/data/ef/sanctoral.sexp
@@ -4,9 +4,9 @@
; generator against a newer lectio and commit the diff instead.
;
; Source: ../lectio/internal/caldata/tridentine-calendar.ini
-; SHA-256: 6a25e6349cae576a10b27c2cdddbfa35905753d4b1e0bc19463dc848f65b94a8
-; Converted (UTC): 2026-08-11
-; 322 entries (208 feast, 114 commemoration-only). Regenerate with:
+; SHA-256: 1b303ef2bce8f5ab431c9228d04e6d44cc11d6c5d36a6a34f8565912d6d7d54a
+; Converted (UTC): 2026-08-12
+; 327 entries (223 feast, 104 commemoration-only). Regenerate with:
; eval $(opam env) && dune exec tools/bootstrap_sanctoral.exe -- ../lectio/internal/caldata/tridentine-calendar.ini data/ef/sanctoral.sexp
((id ef-universal) (name "EF (1962) universal sanctoral")
(entries
@@ -34,6 +34,11 @@
(pl "\197\155w. Agnieszki, Dziewicy i M\196\153czennicy")))
(rank Class3) (status Feast) (colour Red) (subject Saint)
(citations ()) (layer ef-universal))))
+ ((date (Fixed (month 1) (day 28)))
+ (cel
+ ((slug agnes-secundo) (names ((en "St. Agnes"))) (rank Class3)
+ (status Commemoration_only) (colour Red) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 11) (day 15)))
(cel
((slug albert-the-great)
@@ -292,8 +297,8 @@
(cel
((slug benedict)
(names ((en "St. Benedict") (pl "\197\155w. Benedykta, Opata")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 8) (day 20)))
(cel
((slug bernard-of-clairvaux)
@@ -337,6 +342,11 @@
(pl "\197\155w. Bonifacego, Biskupa i M\196\153czennika")))
(rank Class3) (status Feast) (colour Red) (subject Saint)
(citations ()) (layer ef-universal))))
+ ((date (Fixed (month 5) (day 14)))
+ (cel
+ ((slug boniface-martyr) (names ((en "St. Boniface"))) (rank Class3)
+ (status Commemoration_only) (colour Red) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 10) (day 8)))
(cel
((slug bridget-of-sweden)
@@ -480,7 +490,7 @@
(names
((en "Commemoration of the Baptism of the Lord")
(pl "Wspomnienie Chrztu Pa\197\132skiego")))
- (rank Class2) (status Feast) (colour White) (subject Saint)
+ (rank Class2) (status Feast) (colour White) (subject Lord)
(citations ()) (layer ef-universal))))
((date (Fixed (month 1) (day 25)))
(cel
@@ -516,8 +526,8 @@
((en "St. Cyril of Jerusalem")
(pl
"\197\155w. Cyryla Jerozolimskiego, Biskupa, Wyznawcy i Doktora Ko\197\155cio\197\130a")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 12) (day 11)))
(cel
((slug damasus-i)
@@ -655,6 +665,16 @@
(pl "\197\155w. Euzebiusza, Biskupa i M\196\153czennika")))
(rank Class3) (status Feast) (colour Red) (subject Saint)
(citations ()) (layer ef-universal))))
+ ((date (Fixed (month 8) (day 14)))
+ (cel
+ ((slug eusebius-confessor) (names ((en "St. Eusebius")))
+ (rank Class3) (status Commemoration_only) (colour Red)
+ (subject Saint) (citations ()) (layer ef-universal))))
+ ((date (Fixed (month 10) (day 26)))
+ (cel
+ ((slug evaristus) (names ((en "St. Evaristus"))) (rank Class3)
+ (status Commemoration_only) (colour Red) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 9) (day 14)))
(cel
((slug exaltation-of-the-holy-cross)
@@ -721,8 +741,8 @@
((en "Forty Holy Martyrs of Sebaste")
(pl
"\197\155\197\155. Czterdziestu M\196\153czennik\195\179w")))
- (rank Class3) (status Commemoration_only) (colour Red)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour Red) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 11) (day 8)))
(cel
((slug four-holy-crowned-martyrs)
@@ -738,8 +758,8 @@
(names
((en "St. Frances Rome")
(pl "\197\155w. Franciszki Rzymianki, Wdowy")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 10) (day 10)))
(cel
((slug francis-borgia)
@@ -779,8 +799,8 @@
(names
((en "St. Francis of Paola")
(pl "\197\155w. Franciszka z Pauli, Wyznawcy")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 12) (day 3)))
(cel
((slug francis-xavier)
@@ -803,8 +823,8 @@
(names
((en "St. Gabriel the Archangel")
(pl "\197\155w. Gabriela Archanio\197\130a")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 4) (day 23)))
(cel
((slug george)
@@ -868,8 +888,8 @@
((en "St. Gregory the Great")
(pl
"\197\155w. Grzegorza Wielkiego, Papie\197\188a, Wyznawcy i Doktora Ko\197\155cio\197\130a")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 11) (day 17)))
(cel
((slug gregory-the-wonderworker)
@@ -1034,8 +1054,8 @@
((en "St. Isidore of Seville")
(pl
"\197\155w. Izydora, Biskupa, Wyznawcy i Doktora Ko\197\155cio\197\130a")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 7) (day 25)))
(cel
((slug james-the-greater)
@@ -1126,8 +1146,8 @@
((en "St. John Damascene")
(pl
"\197\155w. Jana Damasce\197\132skiego, Wyznawcy i Doktora Ko\197\155cio\197\130a")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 8) (day 19)))
(cel
((slug john-eudes)
@@ -1173,16 +1193,16 @@
(names
((en "St. John of Capistrano")
(pl "\197\155w. Jana Kapistrana, Wyznawcy")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 3) (day 8)))
(cel
((slug john-of-god)
(names
((en "St. John of God")
(pl "\197\155w. Jana Bo\197\188ego, Wyznawcy")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 2) (day 8)))
(cel
((slug john-of-matha)
@@ -1526,7 +1546,7 @@
(names
((en "Most Holy Name of Mary")
(pl "Naj\197\155wi\196\153tszego Imienia Maryi")))
- (rank Class3) (status Feast) (colour White) (subject Lord)
+ (rank Class3) (status Feast) (colour White) (subject Saint)
(citations ()) (layer ef-universal))))
((date (Fixed (month 7) (day 12)))
(cel
@@ -1640,8 +1660,8 @@
(names
((en "St. Patrick")
(pl "\197\155w. Patryka, Biskupa i Wyznawcy")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 2) (day 22)))
(cel
((slug paul)
@@ -2200,8 +2220,8 @@
((en "Sts. Felicitas & Perpetua")
(pl
"\197\155\197\155. Perpetui i Felicyty, M\196\153czennic")))
- (rank Class3) (status Commemoration_only) (colour Red)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour Red) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 8) (day 30)))
(cel
((slug sts-felix-and-adauctus)
@@ -2420,6 +2440,11 @@
(pl "\197\155w. Tekli, Dziewicy i M\196\153czennicy")))
(rank Class3) (status Commemoration_only) (colour Red)
(subject Saint) (citations ()) (layer ef-universal))))
+ ((date (Fixed (month 11) (day 9)))
+ (cel
+ ((slug theodore) (names ((en "St. Theodore"))) (rank Class3)
+ (status Commemoration_only) (colour Red) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 10) (day 3)))
(cel
((slug theresa-of-the-infant-jesus)
@@ -2442,8 +2467,8 @@
((en "St. Thomas Aquinas")
(pl
"\197\155w. Tomasza z Akwinu, Wyznawcy i Doktora Ko\197\155cio\197\130a")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 12) (day 29)))
(cel
((slug thomas-becket)
@@ -2591,8 +2616,8 @@
(names
((en "St. Vincent Ferrer")
(pl "\197\155w. Wincentego Fereriusza, Wyznawcy")))
- (rank Class3) (status Commemoration_only) (colour White)
- (subject Saint) (citations ()) (layer ef-universal))))
+ (rank Class3) (status Feast) (colour White) (subject Saint)
+ (citations ()) (layer ef-universal))))
((date (Fixed (month 7) (day 2)))
(cel
((slug visitation-of-the-blessed-virgin-mary)