; data/ef/adjustments.sexp -- hand-authored overlay over data/ef/sanctoral.sexp ; (Task 11). NOT generated by tools/bootstrap_sanctoral.ml -- edit directly. ; ; Suppresses `vigil-of-christmas` (24 Dec, data/ef/sanctoral.sexp, lectio's ; own bootstrapped entry): it is the SAME celebration as colitur's temporal ; cycle's own `ef-nativity-vigil` (rite_ef/temporal_ef.ml's [named], also 24 ; Dec, RG 91 entry 5), not a second, distinct one. Once the sanctoral layer ; is live, that date would otherwise carry two candidates for one feast. ; Recorded as an Overlay directive rather than filtered out of the bootstrap ; or special-cased in code, per the task brief -- an auditable, diagnosable ; removal (Overlay.apply's own diagnostic fires if this slug is ever absent, ; e.g. after a re-bootstrap that renames it), not a silent drop. ; ; RG16(a) task (docs/research/rules-register.md §6.0): corrects one of ; data/ef/sanctoral.sexp's six `(subject Lord)` entries, inherited unchecked ; from lectio's own `class = lord` field (tridentine-calendar.ini) -- ; `most-holy-name-of-mary` (12 Sep): calendarium line "Sanctissimi Nominis ; Mariae, III classis" -- "Nominis Mariae", the Name of MARY, not of the ; Lord, with no counter-evidence found anywhere (the "D. N. I. C." formula ; the genuinely Lord-tagged entries carry, e.g. 6 Aug "IN TRANSFIGURATIONE ; D. N. I. C.", is simply absent here, and nothing else in the calendarium ; suggests otherwise). This tag has no behavioural effect either way today ; ({!Precedence_ef.band}'s entry 14, the only place [subject] is tested for ; a II-class candidate, requires [Class2]; this entry is [Class3]) -- kept ; for the data's own accuracy, not because anything currently reads it. ; ; The tag [Bvm] itself carries no further systematic meaning in this ; codebase beyond "not Lord" -- after this correction it exists on exactly ; this one entry, while every other Marian feast (the Assumption, the ; Immaculate Conception, the Nativity of the BVM, ...) stays `(subject ; Saint)`. Nothing reads [Bvm] specifically; {!Subject.t}'s four-way split ; is not fully exercised by this codebase's own logic, only [Lord] is. ; ; RG16(a) task, fix round 1 (CRITICAL finding, reverted): a companion Edit ; here previously also retagged `purification-of-the-blessed-virgin-mary` ; (2 Feb) to [Bvm], on the same calendarium-title argument ("B. Mariae ; Virg.", not "D. N. I. C."). REVERTED -- the user has ruled: follow the ; oracle. missalemeum (this project's designated EF oracle) treats the ; Purification as taking an occurring II-class Sunday's place OUTRIGHT, with ; NO commemoration of the Sunday (`2020-02-02`, `2014-02-02`: title ; "Purification of the Blessed Virgin Mary", `"commemorations": []`), ; exactly RG 16(a)'s own "festum Domini" treatment -- and NOT the treatment ; it gives an ordinary Marian feast on a Sunday (`2019-09-08`, the Nativity ; of the BVM: title "XIII Sunday after Pentecost", the FEAST demoted to a ; commemoration, the Sunday observed -- the opposite pattern). Genuine ; primary-text counter-evidence for the Marian reading remains on record ; (RG 120(b): the white-colour rule groups 2 February under "B. Mariae ; Virg.", a SEPARATE category from "Domini" -- register §6.0 quotes it in ; full), so the calendarium TITLE and the oracle's BEHAVIOUR disagree here; ; 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. ; ; `Add commemoration-of-st-peter` -- NEW (ef-holyname-rg110 task, RG 110). ; A genuine DATA GAP in lectio's own source, not merely a colitur bootstrap ; miss: `~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` has ; no 30 June entry for this at all (checked directly, `grep -n '30 June'` ; equivalent), so there is nothing for `tools/bootstrap_sanctoral.ml` to ; have picked up even correctly. RG 110's own text (docs/research/rules- ; register.md §4, Caput XIV): "In Officio et Missa S. Petri semper fit ; commemoratio S. Pauli, ET VICISSIM" -- in the Office and Mass of EITHER ; Peter or Paul, a commemoration of the OTHER is always made -- confirmed a ; THIRD time by the calendarium's own June table, BOTH photographic scans, ; word for word: "In Commemoratione S. Pauli Ap., III classis. / ; Commemoratio S. Petri Ap." -- exactly the SAME pattern already present in ; the base bootstrap for the other two RG 110 pairs (25 January's ; `conversion-of-st-paul` + `peter`; 22 February's `chair-of-st-peter` + ; `paul`), just missing here. `Precedence_ef.admit`'s own RG 110 mechanism ; (precedence_ef.ml) looks this slug up by name whenever ; `in-commemoratione-sancti-pauli-apostoli` is the day's own observed office ; -- a distinct slug from `peter` (25 January), because `peter` is already a ; DIFFERENT dated entry and this codebase's slugs are date-canonical, one ; date per slug (design spec §3.2). Class3/Commemoration_only/Saint, the ; SAME shape as `peter`/`paul`'s own two entries; names copied verbatim from ; `peter`'s own entry (the identical saint, the identical commemoration ; text, on a second date) -- NOT independently sourced from a missalemeum ; title (missalemeum shows no commemoration on this date at all, checked ; directly against its own fixture rows for both 2026 and 2027: neither ; year's `In Commemoratione Sancti Pauli Apostoli` row carries any ; commemoration -- missalemeum has the SAME gap this directive closes, ; verdict colitur in data/ef/expected-divergences-missalemeum.sexp's own ; M19). Colour Red: this ENTRY's own field has no independent primary-source ; pin (a bare "Commemoratio" line's own colour is not independently stated ; by the calendarium the way a full feast's class-and-colour line is -- the ; same honestly-flagged inference shape this file's own `romanus`/`eusebius- ; confessor` history already documents elsewhere in this project), chosen to ; match `paul`'s own entry and the HOST DAY's own Red -- and the host day's ; own Red IS now primary-sourced (fix round 1, coordinator finding F4), not ; merely RG 117's generic apostle/martyr default: RG 124(c), scan-verified ; word for word, `missale-romanum-1962.pdf`: "124. Item adhibetur color ; ruber in Officio et Missa de festis: ... c) Commemorationis S. Pauli ; Apostoli (30 iunii)" -- red is ALSO used in the Office and Mass of the ; feasts of ... (c) the Commemoration of St Paul the Apostle (30 June) -- ; naming this exact date by number. Inert either way today ; (Commemoration_only entries are never the OBSERVED celebration, so this ; entry's OWN colour is never printed by the current pipeline, the same ; note `Edit eusebius-confessor` above makes for its own colour field). ; ; `Add major-litanies` -- NEW (ef-major-litanies task). RG 80 (Caput X, "De ; Litaniis maioribus et minoribus", §A "De Litaniis maioribus"; all three ; primary documents -- both photographic scans AND the electronic ; transcription -- word for word, no divergence to adjudicate): "80. ; Litaniae maiores assignatae sunt diei 25 aprilis; si vero eo die ; occurrit dominica Paschatis vel feria II post Pascha, transferuntur in ; sequentem feriam III." RG 81, same division: "81. De Litaniis maioribus ; nihil fit in Officio, sed tantum in Missa. Earum autem commemoratio non ; est habenda commemoratio 'de Tempore'." RG 109(f) (Caput XVI, "De ; Commemorationibus"): "f) de Litaniis maioribus, in Missa" -- a ; privileged commemoration. The calendarium's own April table (all three ; documents, e.g. the transcription: "iv c vii 25 Litania Maior. - S. ; MARCI EVANGELISTAE, II classis.") prints "Litania Maior" as part of 25 ; April's own descriptive line, alongside St Mark, not as a second, ; separately class-numbered row -- corroborating RG 81's "nihil fit in ; Officio" the same way Maurice's own "Commemoratio ... " line (no class ; number) corroborates a demoted feast elsewhere in this project (see ; precedence_ef.ml's [band], top-of-function guard). ; ; MODELLING DECISION: `Commemoration_only`, `Fixed(4, 25)`, the same shape ; as `commemoration-of-st-peter` above -- because RG 81 denies the ; Litanies any Office standing at all ("nihil fit in Officio"), so they ; can never be the OBSERVED day (RG 91's table enumerates "dies ; liturgici", Office days, and this is explicitly none), only ever a Mass ; commemoration. `Precedence_ef.disposition`/`.privilege_of` wire RG ; 109(f)'s privilege and RG 80's own transfer condition (both cited in ; full at `Precedence_ef.major_litanies_slug` and its two call sites); see ; that module for the reasoning and precedence_ef.ml's own comments for ; why the transfer reuses the existing RG 96 placement machinery ; ({!Colitur_kernel.Precedence.Transfer}) rather than new machinery. ; ; `rank Class4`: RG 91's Table of Precedence has NO row for the Major ; Litanies at all (RG 81 denies them Office standing; the calendarium's ; own printed line above confirms it), so there is no class this data ; field could faithfully report -- the same situation `band`'s own ; top-of-function guard already documents for every `Commemoration_only` ; entry ("never had a row in the table for that occasion to begin with"). ; `Class4` is chosen as the lowest/inertest value available, deliberately ; NOT `Class1` (which would make `Precedence_ef.privilege_of`'s branch (b), ; "of a I-class day", grant this entry Privileged status for the WRONG ; cited reason, silently making the (f) branch this task wires dead code ; again). `band` ignores rank entirely for any `Commemoration_only` ; candidate (checked first, unconditionally); `admit`'s only rank-keyed ; test for an ordinary (non-privileged) II-class-Sunday commemoration ; never applies here either, since this entry is always Privileged. No ; live behavioural consequence either way -- recorded as a deliberate, ; honestly-flagged placeholder, not a citation. ; ; `colour Violet`: NOT independently scan-verified for this specific ; entry (out of this task's scope -- Mass propers are Plan 4, `citations` ; stays `()`). Matches, by internal consistency, the colour this same ; codebase already assigns the sibling Minor Litanies/Rogation days ; (`rite_ef/temporal_ef.ml`'s own Rogation branch: `~colour:Colour.Violet` ; for RG 87's Monday/Tuesday before Ascension) -- both are "Litaniae", ; major and minor, sharing the same penitential/processional character; ; RG 80/81/109(f) themselves say nothing about colour. Inert today ; regardless (`Commemoration_only` entries are never OBSERVED, so this ; field is never printed by the current pipeline -- the same note `Edit ; eusebius-confessor` above makes for its own colour field). ; ; `subject Saint`: no clean fit among {Lord, Bvm, Saint, Temporal} -- the ; Litanies are tied to no particular Divine Person or to the BVM (RG 80/81 ; name no one), and are far from an ordinary saint's feast either, but ; `Subject.Temporal` is reserved for the temporal cycle's OWN office ; (`subject.mli`), which this Fixed, sanctoral-origin entry structurally ; is not. `Saint` is the same "no special exclusion applies" default this ; codebase's own other `Commemoration_only` sanctoral entries already use ; (RG 110's own Peter/Paul companion entries, `commemoration-of-st-peter` ; immediately below) -- its only live behavioural consequence anywhere in ; this codebase, RG 112(a)/(d)'s Lord/BVM mutual-exclusion rules, is one ; this entry should NOT trigger either way, so `Saint` is safe as well as ; consistent. ; ; `names`: English ("The Major Litanies") is a plain translation of RG ; 80's own "Litaniae maiores", not independently primary-sourced (no ; English title exists in any of the three documents, all Latin). Polish ; ("Litanie Większe") likewise a plain vernacular rendering, not verified ; against any external Polish liturgical reference -- flagged here rather ; than presented as sourced, the same honesty this file's own ; `commemoration-of-st-peter` entry gives its own colour field above. ; ; ef-sanctoral-audit (2026-08-14, branch ef-sanctoral-audit): a full ; extraction of the CALENDARIUM (both photographic scans, missale-romanum- ; 1962.pdf and Missale Romanum 1962_text.pdf, pdftoppm-rendered page images ; read directly, not their pre-existing OCR text layers, which the task ; brief's own worked examples show are unreliable for exactly this kind of ; check) against all 327 base entries plus the two prior overlay Adds. ; Method and full findings: docs/research/rules-register.md's own audit ; rewrite (bucket recomputation) and .superpowers/sdd/2026-08-12-colitur- ; rg16a/sanctoral-audit-report.md. Two shapes of finding follow. ; ; `Add commemoration-of-the-seven-sorrows` -- NEW (2026-08-17). The OTHER ; Seven Sorrows: not the II-class feast of 15 September (which colitur has ; had since the bootstrap, slug `seven-sorrows-of-the-blessed-virgin-mary`) ; but the movable commemoration on the Friday of Passion Week, which colitur ; had no trace of at all. ; ; The 1962 calendarium lists it at the FOOT of March, below the fixed dates, ; exactly where a movable entry belongs (LT.txt:5056, verbatim): "Feria VI ; post dominicam I Passionis: Commemoratio septem Dolorum B. Mariae Virg." ; Note the word: Commemoratio. Under the 1960 rubrics this is a commemoration, ; not a feast -- hence `status Commemoration_only`, and hence it can never win ; the day (band returns `unclassified` for that status, checked first). ; ; Friday after Passion Sunday I is Easter-9 (Passion Sunday is the second ; Sunday before Easter, Easter-14; +5 for the Friday). Confirmed independently ; by BOTH dates the oracle allow-list already disputes: Easter 2026 is 5 April ; and M16's date is 27 March; Easter 2027 is 28 March and M13's is 19 March. ; ; This entity is the single root cause behind BOTH of those entries -- M13 ; (19 March 2027, where missalemeum commemorates the Seven Sorrows and colitur ; had nothing to commemorate) and M16 (27 March 2026, where colitur admits St ; John Damascene instead). It was recorded as "a known unimplemented office" ; and could not be built before Date_spec grew `Easter_offset`: there is no ; (month, day) pair for a Friday that moves with Easter, the same wall ; Rogation Wednesday hit. ; ; `subject Bvm` is accurate rather than conventional here -- this genuinely is ; a commemoration of the Blessed Virgin, unlike the Major Litanies and ; Rogation Wednesday which carry `Saint` by precedent. The one rule that reads ; it, RG 112(d)'s own BVM-Saturday exclusion, is structurally unreachable: ; Passion Friday is never a Saturday. ; ; `Add rogation-wednesday` -- NEW (movable-date-specs task, 2026-08-17). ; RG 87, primary-verified: "Litaniae minores seu Rogationes, per se, ; assignantur feriis II, III et IV ante festum Ascensionis Domini" ; (scan1.txt:691) -- Monday, Tuesday AND WEDNESDAY. colitur's temporal cycle ; already builds `ef-rogation-{monday,tuesday}` (Easter+36/+37) but never ; Wednesday: Easter+38 is by construction the Ascension Vigil (RG 91 entry ; 21), which wins the day structurally, so `Temporal_ef.named` emits the ; Vigil and there was no channel for the Rogation observance at all. ; ; That gap was architectural, not an oversight, and it is THIS task that ; closes it: until Date_spec grew `Easter_offset`, there was no (month, day) ; pair a Fixed spec could anchor to, which is exactly why the register ; concluded this "is not Commemoration_only sanctoral data by nature". With a ; movable spec it plainly is -- the identical shape `Add major-litanies` ; above already uses, differing only in how the date is expressed. ; ; RG 88: nothing is done in the Office, only the Mass -- so the Vigil's own ; office identity is CORRECTLY untouched; this entry is a commemoration and ; never competes for the observed slot (`Commemoration_only` -> band returns ; `unclassified`, checked first, ahead of every rank-keyed branch). ; ; RG 89: "Ad processionem aut alias peculiares supplicationes et Missam aut ; COMMEMORATIONEM quod attinet, serventur quae supra de Litaniis maioribus ; statuta sunt (nn. 81-83 et 86)". Note what follows: RG 109's closed list of ; privileged commemorations names only "de Litaniis MAIORIBUS" (f), never ; minoribus, so by RG 107's closing rule this is an ORDINARY commemoration -- ; unlike the Major Litanies' privileged one. That asymmetry is deliberate and ; is asserted in test_rite_ef.ml. ; ; Name: "feria IV Rogationum" is the Missal's own (scan1.txt:20495-20497, ; "Et in minoribus ante Ascensionem: feria II Rogationum, statio ad S. Mariam ; maiorem; feria III, statio ad S. Ioannem in Laterano; feria IV, statio ad ; S. Petrum"). Colour violet, matching the Rogation Monday/Tuesday offices ; `Temporal_ef` already builds. ; ; `subject Saint` matches `major-litanies` above. It is behaviourally INERT ; here, verified rather than assumed: `band` returns `unclassified` for any ; Commemoration_only candidate before reading subject at all, and the only ; other readers are RG 112(a) (fires on `Lord` only) and RG 112(d)'s ; `is_bvm_office` (`Bvm` only). `Temporal` would arguably describe both this ; and the Major Litanies better; changing them is a separate, zero-blast- ; radius tidy-up, deliberately not folded into this task. ; ; `Add barbara` -- a genuine DATA GAP, the same shape as the ef-rebootstrap ; task's five (agnes-secundo/boniface-martyr/eusebius-confessor/evaristus/ ; theodore, above): both scans, 4 December, carry a second line under S. ; Petri Chrysologi's own entry, "Commemoratio S. Barbarae Virg. et Mart." ; -- a real, standing commemoration, absent from `data/ef/sanctoral.sexp` ; AND from lectio's own `tridentine-calendar.ini` (checked directly: its ; 12-04 block holds only `peter-chrysologus`, then jumps straight to ; `sabbas`/12-05) -- not a colitur bootstrap miss, the same upstream gap ; shape the ef-rebootstrap task's own five entries already documented. ; Rank `Class3`: bootstrapped by the SAME convention every other ; `Commemoration_only` entry in this file uses (see the rank-inference note ; below) -- the calendarium gives a bare "Commemoratio", no class numeral, ; for any commemoration, hers included. Colour Red: RG 124(e), scan- ; verified word for word (both photographic scans, "XVIII - De coloribus ; paramentorum", "C) De colore rubro"): "adhibetur color ruber in Officio ; et Missa de festis: ... e) Sanctorum Martyrum, quorum colitur aut ; martyrium..." -- red for the feast of a Martyr's own martyrdom, and the ; calendarium's own line names her "Virg. et Mart." Names: English a plain ; translation of "Barbarae"; Polish a plain vernacular rendering -- neither ; independently primary-sourced, the same honesty this file's own ; `commemoration-of-st-peter` entry already gives its names. ; ; Eighteen `Edit ... ((Set_colour ...))` directives -- confirmed lectio/ ; missalemeum bootstrap DATA DEFECTS, the identical shape and root cause as ; `eusebius-confessor` above (checked individually against ; `~/git/projects/lectio/internal/caldata/tridentine-calendar.ini`: every ; one of these 17 slugs' wrong colour is already wrong AT THE SOURCE, not ; introduced by colitur's own bootstrap step -- e.g. `martha`'s own Polish ; field there already reads "św. Marty, Dziewicy" (Virgin, no "Męczennicy" ; suffix), contradicting that SAME ini record's own `colour = red`). Two ; rules, both scan-verified word for word against RG 124 ("XVIII - De ; coloribus paramentorum", missale-romanum-1962.pdf, both photographic ; scans agree): (124.b) "adhibetur color ruber in Officio et Missa de ; festis: ... Sanctorum Apostolorum et Evangelistarum, in eorum die ; natalicio, EXCEPTO FESTO S. IOANNIS (27 decembris)" -- red for an ; Apostle/Evangelist's OWN feast day, John's 27 December the one named ; exception (already correctly White in the base data, untouched here); ; (124.e) "Sanctorum Martyrum, quorum colitur aut martyrium" -- red for a ; Martyr's own martyrdom. Every plain Confessor/Bishop/Virgin entry below ; (no "Mart."/"Mm." in the calendarium's own line, not an Apostle) is ; White by RG 117's five-colour residual (not itself independently ; RG-124-cited the way the red corrections are, since 124 enumerates the ; RED exceptions, not a white default) -- flagged as inferred-by-category, ; the same distinction the design spec draws throughout. `peter` (25 ; January, a commemoration of the Apostle nested under `conversion-of-st- ; paul`) is corrected by CONSISTENCY with this file's own established ; precedent, not a fresh RG 124 citation of its own: `paul`'s sibling ; commemoration (22 February, under `chair-of-st-peter`) already carries ; Red in the base bootstrap, and `commemoration-of-st-peter` above (30 ; June) was deliberately set Red "to match the host day's own Red" by an ; earlier task -- the identical RG 110 Peter/Paul-pair shape, so `peter` ; is the one inconsistent survivor, not a newly-discovered rule. ((id ef-adjustments) (directives ((Suppress vigil-of-christmas) (Edit most-holy-name-of-mary ((Set_subject Bvm))) (Edit eusebius-confessor ((Set_colour White))) (Add ((date (Fixed (month 6) (day 30))) (cel ((slug commemoration-of-st-peter) (names ((en "St. Peter") (pl "\197\155w. Piotra, Aposto\197\130a"))) (rank Class3) (status Commemoration_only) (colour Red) (subject Saint) (citations ()) (layer ef-universal))))) (Add ((date (Fixed (month 4) (day 25))) (cel ((slug major-litanies) (names ((en "The Major Litanies") (pl "Litanie Większe"))) (rank Class4) (status Commemoration_only) (colour Violet) (subject Saint) (citations ()) (layer ef-universal))))) (Add ((date (Easter_offset -9)) (cel ((slug commemoration-of-the-seven-sorrows) (names ((la "Commemoratio septem Dolorum B. Mariae Virginis") (en "The Seven Sorrows of the Blessed Virgin Mary"))) (rank Class3) (status Commemoration_only) (colour White) (subject Bvm) (citations ()) (layer ef-universal))))) (Add ((date (Easter_offset 38)) (cel ((slug rogation-wednesday) (names ((la "Feria IV Rogationum") (en "Rogation Wednesday"))) (rank Class4) (status Commemoration_only) (colour Violet) (subject Saint) (citations ()) (layer ef-universal))))) (Add ((date (Fixed (month 12) (day 4))) (cel ((slug barbara) (names ((en "St. Barbara") (pl "\197\155w. Barbary, Dziewicy i M\196\153czennicy"))) (rank Class3) (status Commemoration_only) (colour Red) (subject Saint) (citations ()) (layer ef-universal))))) ; A SECOND genuine gap, found by the same audit and DELIBERATELY NOT ; FILLED -- recorded here, in the tracked tree, because the five prior ; upstream-gap precedents live in this file and this is where the next ; auditor will be standing. Both scans' 25 December row reads ; "IN NATIVITATE DOMINI, I classis cum oct." followed by "In secunda ; Missa: Commemoratio S. Anastasiae Mart." -- she is scoped to the ; SECOND of Christmas's three Masses, and it is the only per-Mass ; scoping notation in the whole twelve-month calendarium. ; Celebration.t attaches a commemoration to a DATE with no Mass scope, ; and temporal_ef builds exactly one office per civil day, so adding ; her the way `barbara` was added would ship a false positive on every ; 25 December. The obvious action on rediscovery is the wrong one. ; Open modelling question, register section 6. (Edit prisca ((Set_colour Red))) ; REVERTED by the fix-round review: conversion-of-st-paul (25 Jan), ; peter (25 Jan) and chair-of-st-peter (22 Feb) were set Red here on ; RG 124(b), whose own qualifier "in eorum die natalicio" does not ; reach them -- and RG 120(f), fifteen lines ABOVE 124(b) in the same ; column, NAMES both feasts by name and by date in the enumeration of ; WHITE: "f) S. Ioannis Ap. et Ev. (27 decembris); Cathedrae S. Petri ; (22 februarii); Conversionis S. Pauli (25 ianuarii); Nativitatis S. ; Ioannis Baptistae (24 iunii)". RG 475(e) confirms it a third time: ; "in festis nataliciis Apostolorum et Evangelistarum, NECNON in ; festis Cathedrae S. Petri et S. Barnabae Ap." -- the Missal names ; the Chair separately precisely because "natalician feasts of ; Apostles" does not include it. lectio and missalemeum both said ; white because both were right. ; `peter` (25 Jan) additionally rested on "match the host day's own ; Red", by analogy to commemoration-of-st-peter (30 June). That works ; there because 30 June's host is red BY NAME under RG 124(c); here ; the host is white BY NAME under RG 120(f), so the same precedent ; yields White. Its other anchor, `paul` @ 22 Feb (Red in base data), ; is unverified bootstrap on a day the Missal calls white and is now ; an open question in the register, not a precedent. ; ROOT CAUSE, recorded so it is not repeated: the audit's page-image ; method was applied to the CALENDARIUM and not to the RUBRIC. RG 124 ; was read from the OCR text layer, where the two-column interleave ; shreds RG 120(f) across rows belonging to RG 115, renders its clause ; label as "/ )" and hyphen-splits "Ca-"/"thedrae" -- so a text-layer ; grep for "Cathedr" returns nothing, while RG 124's own enumeration ; survives the same interleave cleanly. A text-layer read of that ; chapter finds 124 and STRUCTURALLY CANNOT find 120(f). (Edit vitus ((Set_colour Red))) (Edit margaret ((Set_colour Red))) (Edit apollinaris ((Set_colour Red))) (Edit agapitus ((Set_colour Red))) (Edit josaphat ((Set_colour Red))) (Edit john-of-san-fecundo ((Set_colour White))) (Edit ephrem-of-syria ((Set_colour White))) (Edit julia-of-falconieri ((Set_colour White))) (Edit john-gualbert ((Set_colour White))) (Edit camillus-de-lellis ((Set_colour White))) (Edit jerome-emiliani ((Set_colour White))) (Edit liborii ((Set_colour White))) (Edit martha ((Set_colour White))) (Edit alphonsus-liguori ((Set_colour White))) (Edit augustine ((Set_colour White))) (Edit rose-of-lima ((Set_colour White))) (Edit mark-i ((Set_colour White))) ; --- ef-lectionary Task 6: the eight class-3 saints whose Mass the ; 1962 Missal prints IN FULL, with its own Epistle and Gospel. ; ; Fifteen class-3 saints reached this branch with no readings at all ; (data/ef/sanctoral.sexp, `(citations ())` -- they are exactly the ; fifteen `status Feast` entries in that file that have none, checked ; not assumed). They are the 6 March - 5 April cluster whose RANKS ; lectio's own generator fix of 2026-08-12 restored without ; backfilling readings, and lectio has no Commons concept to have ; backfilled them from. ; ; The Missal splits them cleanly in two, and the split is NOT the one ; the plan predicted (it expected propers for Benedict, Patrick, ; Thomas Aquinas and Gregory the Great; only Thomas Aquinas has one). ; The seven that the Missal sends to a Common are routed through ; data/ef/commons.sexp instead -- see that file's header for the whole ; method, the Commune Sanctorum's own substitution rubric, and the ; per-Common evidence. The eight below are the ones the Missal prints ; a full Mass for at the date itself, so the readings are ASSIGNED ; ("certa Epistola aut certum Evangelium in Missali ... assignata", ; the Commune's own proviso) and belong on the celebration. ; ; They are Edits here, not corrections to data/ef/sanctoral.sexp, ; because that file is GENERATED (tools/bootstrap_sanctoral.ml) and ; its source is upstream in lectio -- the same reasoning the colour ; corrections above already carry. If lectio ever gains these ; readings, `Set_citation` is idempotent (overlay.ml's own ; [apply_field_edit] replaces the matching part), so the Edits stay ; harmless and stand as a regression guard. ; ; EVERY value below was read in three independent places before being ; written: docs/research/scan1.txt (CMAA scan), docs/research/scan2.txt ; (Internet Archive scan -- a DIFFERENT printing), and the rendered ; page images of missale-romanum-1962.pdf. Both text layers interleave ; the two-column page, so no value rests on a single reading. There is ; NO oracle for any of this: layer 3 (lectio) has no readings for these ; feasts at all, and layer 4 (missalemeum, 2026-2027) never observes ; one of them in either year. ; ; OBSERVABILITY, measured against the real resolver over 1950-2200: ; only three of the eight are EVER the observed office -- ; thomas-aquinas (6 days, e.g. 2000-03-07, 2011-03-07), john-of-god ; (5 days, e.g. 2011-03-08, 2038-03-08), francis-of-paola (2 days, ; 2008-04-02, 2160-04-02). The other five fall on dates always held by ; a Lenten or Passiontide feria that outranks a III-class feast, so ; they are only ever COMMEMORATIONS, and colitur emits readings for ; the observed office only. Their citations are correct data with no ; live witness today; they are recorded rather than omitted so that a ; diocesan overlay or a rank change finds them already sourced. ; 7 March, "S. Thomae de Aquino, Conf. et Eccl. Doct., III classis": ; "Lectio libri Sapientiae. Sap. 7, 7-14" / "Sequentia sancti ; Evangelii secundum Matthaeum. Mt. 5, 13-19". ; scan1:27701-27704 + 27699-27700; scan2:30588-30589 + 30643-30646; ; page image p. 484. (scan2's OCR renders the Gospel chapter as "6"; ; scan1 and the page image both print 5, and the pericope is "Vos ; estis sal terrae", Mt 5:13-19.) (Edit thomas-aquinas ((Set_citation First "Wis 7:7-14") (Set_citation Gospel "Matt 5:13-19"))) ; 8 March, "S. Ioannis a Deo Conf., III classis": ; "Lectio libri Sapientiae. Eccli. 31, 8-11" / "Sequentia sancti ; Evangelii secundum Matthaeum. Mt. 22, 34-46". ; scan1:27732-27734 + 27769-27770; scan2:30698-30699 + 30733-30736; ; page image p. 485. NOTE: the Epistle is the Common of a Confessor ; not a Bishop's own, but the GOSPEL is not (that Common has Luke ; 12:35-40) -- the Missal prints him a full Mass with an assigned ; Gospel, so this is a proper, not a Common. (scan2's OCR renders the ; Gospel's last verse as 48; scan1 and the page image print 46, and ; the pericope ends at "neque ausus fuit quisquam ex illa die eum ; amplius interrogare" = Mt 22:46.) (Edit john-of-god ((Set_citation First "Ecclus 31:8-11") (Set_citation Gospel "Matt 22:34-46"))) ; 10 March, "Ss. Quadraginta Martyrum, III classis": ; "Lectio Epistolae beati Pauli Apostoli ad Hebraeos. Hebr. 11, 33-39" ; / "Sequentia sancti Evangelii secundum Lucam. Luc. 6, 17-23". ; scan1:27841-27842 + 27832-27834; scan2:30766-30768 + 30821-30823. (Edit forty-holy-martyrs-of-sebaste ((Set_citation First "Heb 11:33-39") (Set_citation Gospel "Luke 6:17-23"))) ; 18 March, "S. Cyrilli Ep. Hierosolymitani, Conf. et Eccl. Doct., ; III classis": "Lectio libri Sapientiae. Eccli. 39, 6-14" / ; "Sequentia sancti Evangelii secundum Matthaeum. Mt. 10, 23-28". ; scan1:27948-27949 + 27953-27955; scan2:30890-30896 + 30948-30951; ; page image p. 489. This Epistle is the Common of Doctors' own ; labelled ALTERNATIVE ("Item altera Epistola pro Doctoribus") -- here ; it is assigned outright at the date, which is what makes it his. (Edit cyril-of-jerusalem ((Set_citation First "Ecclus 39:6-14") (Set_citation Gospel "Matt 10:23-28"))) ; 24 March, "S. Gabrielis Archangeli, III classis": ; "Lectio Danielis Prophetae. Dan. 9, 21-26" / "Sequentia sancti ; Evangelii secundum Lucam. Luc. 1, 26-38". ; scan1:28149-28150 + 28175-28176; scan2:31070-31074 + 31158-31160; ; page images pp. 493-494. ; ; THE ONE GENUINE CONFLICT BETWEEN THE TWO PRINTINGS, and the reason ; this task's cross-check discipline exists. scan1's edition prints ; the Gospel citation as "Luc. 2, 26-38" -- confirmed on the page ; image, so it is a TYPOGRAPHICAL ERROR IN THAT PRINTING, not an OCR ; artefact. scan2's edition prints "Luc. 1, 26-38". Three independent ; things settle it for Luke 1: (a) scan2's own text; (b) the pericope ; printed under the citation in BOTH editions is "Missus est Angelus ; Gabriel ... Ecce ancilla Domini", which is Luke 1:26-38 -- Luke ; 2:26-38 is Simeon and Anna, a different passage entirely; (c) the ; SAME edition that misprints it here prints the identical pericope ; two pages later for the Annunciation (25 March, page image p. 496) ; and cites it correctly as "Luc. 1, 26-38". (Edit gabriel-the-archangel ((Set_citation First "Dan 9:21-26") (Set_citation Gospel "Luke 1:26-38"))) ; 27 March, "S. Ioannis Damasceni, Conf. et Eccl. Doct., III classis": ; "Lectio libri Sapientiae. Sap. 10, 10-17" / "Sequentia sancti ; Evangelii secundum Lucam. Luc. 6, 6-11". ; scan1:28305-28306 + 28319-28320; scan2:31326-31328 + 31344-31346; ; page image p. 497. The 10-17 (here) versus 10-14 (John of ; Capistrano, next entry) split is real and agreed by all three ; sources: this pericope runs on through "Et reddidit iustis mercedem ; laborum suorum" (Wis 10:17), his does not. (Edit john-damascene ((Set_citation First "Wis 10:10-17") (Set_citation Gospel "Luke 6:6-11"))) ; 28 March, "S. Ioannis de Capistrano Conf., III classis": ; "Lectio libri Sapientiae. Sap. 10, 10-14" / "Sequentia sancti ; Evangelii secundum Lucam. Luc. 9, 1-6". ; scan1:28346-28348 + 28412-28413; scan2:31382-31387 + 31445-31447; ; page image p. 498 (the pericope there ends at "et in vinculis non ; dereliquit illum" = Wis 10:14). (Edit john-of-capistrano ((Set_citation First "Wis 10:10-14") (Set_citation Gospel "Luke 9:1-6"))) ; 2 April, "S. Francisci de Paula Conf., III classis": ; "Lectio Epistolae beati Pauli Apostoli ad Philippenses. Philipp. 3, ; 7-12" / "Sequentia sancti Evangelii secundum Lucam. Luc. 12, 32-34". ; scan1:28585-28586 + 28587-28588; scan2:31560-31562 + 31625-31630. ; (scan2's OCR of the Gospel citation is shredded to "Lac. U, 32-34"; ; scan1 prints it cleanly and the pericope is "Nolite timere, ; pusillus grex", Luke 12:32-34.) (Edit francis-of-paola ((Set_citation First "Phil 3:7-12") (Set_citation Gospel "Luke 12:32-34"))))))