From 957a6d88ed447be16aa8c7e71250f4c9b87a832b Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 13 Aug 2026 15:57:26 +0200 Subject: data(ef): close and derive the RG 91 entry 27 allow-list rows The BVM Saturday office is now genuinely correct, so both comparators' allow-lists move -- every count derived from the harnesses' own failure output, never transcribed or guessed. lectio differential (data/ef/expected-divergences.sexp, C17, new, colitur): lectio builds no equivalent office at all, so it keeps showing the plain season colour on every otherwise-unoccupied Class4 Saturday where colitur now shows white. Season, slug and rank all still agree (the office deliberately reuses the ordinary ferial slug), so Colour_f alone is the complete diff set -- gated on colitur's own rank/weekday/colour rather than a date list, the same shape M2 used, at 416 rows over 2005-2050. missalemeum oracle (data/ef/expected-divergences-missalemeum.sexp): M2 is CLOSED, REMOVED, the same shape as this file's own M4/M6/M7/M9/M12/ M14/M17 precedents -- not re-adjudicated to a different verdict, gone because the colour divergence it named no longer occurs on any of its former 22 dates. What is left on all 22 is Observed_identity_unresolved alone (colitur's BVM-Saturday candidate is temporal-origin and deliberately carries no English name) -- exactly M18's own shape, not a distinct citation any more. Keeping M2 as a separate id would have kept silently absorbing these rows under a stale "colour differs" citation whose own reason had stopped firing (subset's own diff-set test admits a SMALLER set than the one named) -- the same "count proving cardinality where identity was required" trap this project's review process watches for. M18's own expected_rows moves 373 -> 395 accordingly. --- data/ef/expected-divergences-missalemeum.sexp | 62 +++++++++++++++++++-------- data/ef/expected-divergences.sexp | 5 +++ 2 files changed, 49 insertions(+), 18 deletions(-) (limited to 'data') diff --git a/data/ef/expected-divergences-missalemeum.sexp b/data/ef/expected-divergences-missalemeum.sexp index 0584dfa..1fce257 100644 --- a/data/ef/expected-divergences-missalemeum.sexp +++ b/data/ef/expected-divergences-missalemeum.sexp @@ -11,9 +11,11 @@ ; genuine DATA GAPS this task found and could not fix here (the sanctoral ; data is bootstrapped from lectio, which is itself missing several of ; these entries -- CLAUDE.md's binding decision 3, and this task does not -; touch ~/git/projects/lectio) or genuine CODE gaps (RG 91 entry 27's BVM- -; Saturday office, RG 110's inseparable Peter/Paul commemoration) this task -; did not build. Those are honestly verdicted [missalemeum] -- colitur is +; touch ~/git/projects/lectio) or genuine CODE gaps this task did not build +; (RG 110's inseparable Peter/Paul commemoration -- closed by a later task, +; see the ef-holyname-rg110 paragraph below; RG 91 entry 27's BVM-Saturday +; office -- closed by a later task still, see the ef-bvm-saturday paragraph +; further below, after M18's own). Those are honestly verdicted [missalemeum] -- colitur is ; short a feature or a row, not correct -- and each is cross-referenced ; into docs/research/rules-register.md §6 as an open item, not silently ; absorbed as if colitur were right. TWO entries (M11 and M13) are @@ -42,16 +44,22 @@ ; sides purely by coincidence). [M18] is [verdict unresolvable], the SAME ; fourth verdict as M15, for the SAME reason: colitur's own resolved name is ; [None] for any TEMPORAL-origin observed day, the large majority of this -; window. M1, M2, M3, M13 and M16's own subsets were each widened to absorb -; this axis where it fires alongside their pre-existing citation (see each -; entry's own note) rather than being folded into M18's own count, which -; covers only rows where [Observed_identity_unresolved] is the SOLE -; disagreement. +; window. M1, M3 and M16's own subsets were each widened to absorb this axis +; where it fires alongside their pre-existing citation (see each entry's own +; note) rather than being folded into M18's own count, which covers only +; rows where [Observed_identity_unresolved] is the SOLE disagreement. +; UPDATED, ef-bvm-saturday task: M2 used to belong on this list too (RG 91 +; entry 27's own BVM-Saturday office had not been built yet), but M2 is now +; CLOSED, REMOVED (see the ef-bvm-saturday paragraph below, after the FIVE +; MORE REMOVED note) -- its former 22 dates fall through to THIS entry +; instead now, moving M18's own count from 373 to 395 (see M18's own sexp +; note below for the precise derivation). ; ; ef-holyname-rg110 task (RG 110, the inseparable Peter/Paul commemoration -- -; PART of RG 91 entry 27's neighbour list this file's own header names at -; line 15 as unbuilt; RG 91 entry 27 itself, the BVM-on-Saturday office, -; remains unbuilt, still M2 below): [M12] CLOSED, REMOVED (same shape as +; PART of RG 91 entry 27's neighbour list this file's own header names above +; as unbuilt at the time; RG 91 entry 27 itself, the BVM-on-Saturday office, +; was closed by a LATER task, see the ef-bvm-saturday paragraph below): +; [M12] CLOSED, REMOVED (same shape as ; M17's own removal above, not re-adjudicated) -- 22 February 2027 no ; longer diverges on [Comm_count], since colitur now admits Paul ; unconditionally alongside whatever else the day's own privileged @@ -117,6 +125,29 @@ ; - theodore (9 Nov): "IN DEDICATIONE ARCHIBASILICÆ SANCTISSIMI ; SALVATORIS, II classis. / Com. S. Theodori Mart." ; +; ef-bvm-saturday task: RG 91 entry 27 ("Officium sanctae Mariae in +; sabbato") is now built (Rite_ef.Temporal_ef's own [bvm_saturday_names] +; citation has the full RG 78/RG 120(b) argument -- white, unconditionally, +; on every otherwise-unoccupied IV-class Saturday). [M2] is CLOSED, REMOVED +; -- same shape as M4/M6/M7/M9/M12/M14/M17's own removals above/below, not +; re-adjudicated to a different verdict: the divergence M2 used to name +; ([Colour_f], alone or alongside [Observed_identity_unresolved]) no longer +; occurs on any of its former 22 dates (checked directly: 0 of them retain +; [Colour_f] now). What is left on all 22 is [Observed_identity_unresolved] +; ALONE -- colitur's own BVM-Saturday candidate is temporal-origin and +; deliberately carries no ENGLISH name (Latin only, the same +; zero-circularity discipline Holy Family/Holy Name/the Sacred Triduum +; already established) -- which is [M18]'s own shape exactly, not a +; distinct citation any more (keeping M2 as a separate id here would have +; been the SAME "count proving cardinality where identity was required" +; trap this project's review process watches for: [subset]'s own diff-set +; test admits a SMALLER set than the one named, so M2's predicate would +; have kept silently absorbing these 22 rows under a stale "colour differs" +; citation whose own reason had stopped firing). [M18]'s own expected_rows +; therefore moves 373 -> 395 (373 + M2's former 22), derived directly from +; test_oracle.ml's own [test_layer_m_counts_match_citations] failure output +; after removing the M2 predicate branch, not computed by hand first. +; ; [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 @@ -131,11 +162,6 @@ (verdict colitur) (note "missalemeum does not implement RG 33's Sunday-omission for II/III-class vigils. 28 June 2026 (Vigil of Sts Peter & Paul, II class): still shown as a commemoration on the V Sunday after Pentecost. 9 August 2026 (Vigil of St Lawrence, III class): shown as the day's FULL OBSERVED OFFICE, displacing the XI Sunday after Pentecost entirely, not merely surviving as a commemoration.") (expected_rows 2)) - ((id M2) - (citation "RG 91 entry 27 (\"Officium sanctae Mariae in sabbato\") -- register §4") - (verdict missalemeum) - (note "Every otherwise-unoccupied IV-class Saturday should carry the votive Office of the BVM (white; missalemeum's own titles cycle \"I\"..\"V Mass of the B. V. M. -- Salve, Sancta Parens\"). precedence_ef.ml's [band] already has an entry-27 comment acknowledging this row exists (corrected attribution, final fix wave: this note previously said temporal_ef.ml, but [band] is precedence_ef.ml's own function), but [Temporal_ef.temporal] never actually CONSTRUCTS this office -- an unimpeded Time-after-Epiphany/-Pentecost Saturday gets a bare ferial slug and season green instead. A genuine feature gap, not a citation dispute; tracked in register §6, not built in this task. REFRESHED (ef-rg112-rg110 task): expected_rows moved 17 -> 22, for the SAME reason M1/M3/M16 below move too -- the new observed-identity axis (test_oracle.ml's own header) now ALSO fires on 5 Paschaltide BVM-Saturday dates that used to match CLEANLY (colour already white there, RG 119, so the pre-existing [Colour_f]-only check never even reached these 5 rows; M2's own comment already noted \"every Paschaltide occurrence... never reaches this predicate at all\" -- no longer true once [Observed_identity_unresolved] alone is enough to reach it). Not a new divergence, the identical feature gap surfacing on a second axis -- derived from the comparator's own failure output (test_layer_m_counts_match_citations), not hand-counted.") - (expected_rows 22)) ((id M3) (citation "RG 87 (Minor Litanies/Rogations, Mon/Tue before Ascension) -- the SAME citation as the lectio allow-list's own C8 (data/ef/expected-divergences.sexp)") (verdict colitur) @@ -179,8 +205,8 @@ ((id M18) (citation "test_oracle.ml's own header, \"COMMEMORATION IDENTITY\" section, restated for the OBSERVED axis (ef-rg112-rg110 task) -- not an RG citation, a comparator LIMIT: Rite_ef.Temporal_ef never sets an English [names] field on any candidate it builds, the SAME limit M15 already names for a commemoration, now visible for the OBSERVED day itself now that the observed-identity axis exists") (verdict unresolvable) - (note "373 of the 730 days in this window carry this shape alone (M1/M2/M3/M16 absorb a further 26 where it fires ALONGSIDE their own pre-existing citation -- see each entry's own widened note; 373+26=399 is the axis's own full unresolved population). CORRECTED, fix round 1 (coordinator finding 8) -- the full breakdown, precisely: of 730 days, 331 are RESOLVED (colitur's own observed celebration carries a name) -- 330 resolved-and-MATCHING, 1 resolved-and-MISMATCHED (M13, Joseph vs the Seven Sorrows, already its own entry above) -- and 399 are UNRESOLVED (colitur's own name is [None]), split between this entry's own 373 and the 26 absorbed elsewhere. The BLIND SPOT this axis exists to close, stated precisely: a TEMPORAL-origin observed day silently replaced by a DIFFERENT temporal-origin observed day of the SAME RANK AND COLOUR -- exactly the shape that hid Holy Family from every layer before this task (rank 2/white on both sides, purely coincidental). This count PIN is what stands guard against that population growing silently in either direction: an implementation change that made MORE days temporal-origin-and-unresolvable, or fewer, changes 373 and fails the pin, even though the axis itself cannot say WHICH specific day moved or why. The overwhelming majority of days whose observed celebration is TEMPORAL-origin (an ordinary Sunday, a feria, a movable named feast including Holy Family itself) never carry an English name on colitur's side -- not a rubric dispute and not a data gap either engine is wrong about, a LIMIT of this comparator, honestly counted rather than silently passed, per the brief's own explicit instruction (\"a day whose observed identity cannot be resolved must be a counted, allow-listed outcome, never a silent skip\"). Gated on the diff SHAPE alone (exactly, and only, observed-identity-unresolved), not a literal date list the way every other entry in this file is -- at this population size a date list would itself be the \"pattern that could silently widen\" this file's own header warns against, for the opposite reason a date RANGE is normally risky: the predicate (colitur's own resolved name is [None]) is the precise, falsifiable evidence, the same shape M2's own title-substring predicate already uses instead of enumerating dates, just keyed on presence-of-a-name rather than a title string. Building an English name onto every temporal-cycle candidate (a data/lectionary-bootstrap task, Plan 4, out of this task's scope -- register §6, the same open item M15's own note already tracks) would resolve this entry to Matched for every one of these days it does not instead expose as a REAL divergence (Holy Family's own two dates in this window, 2026-01-11 and 2027-01-10, are counted here, not separately -- the name comparison genuinely cannot distinguish \"Holy Family\" from any other unnamed Sunday, so proving Holy Family's own correctness rests on the golden pins and the differential's own C15, not this axis). Derived directly from the comparator's own failure output (test_layer_m_counts_match_citations), not hand-counted first and cross-checked after: 373.") - (expected_rows 373)) + (note "REVISED, ef-bvm-saturday task: 395 of the 730 days in this window now carry this shape alone (M1/M3/M16 absorb a further 4 where it fires ALONGSIDE their own pre-existing citation -- see each entry's own widened note; 395+4=399 is the axis's own full unresolved population, UNCHANGED from before this task -- only the SPLIT moved, since M2 (closed above, this task) used to separately absorb 22 of the 26 that used to be \"elsewhere\"). Before this revision the split was 373 alone / 26 elsewhere (373+26=399) -- CORRECTED, fix round 1 (coordinator finding 8) -- the full breakdown, precisely: of 730 days, 331 are RESOLVED (colitur's own observed celebration carries a name) -- 330 resolved-and-MATCHING, 1 resolved-and-MISMATCHED (M13, Joseph vs the Seven Sorrows, already its own entry above) -- and 399 are UNRESOLVED (colitur's own name is [None]), split between this entry's own 395 and the 4 absorbed elsewhere. The BLIND SPOT this axis exists to close, stated precisely: a TEMPORAL-origin observed day silently replaced by a DIFFERENT temporal-origin observed day of the SAME RANK AND COLOUR -- exactly the shape that hid Holy Family from every layer before this task (rank 2/white on both sides, purely coincidental). This count PIN is what stands guard against that population growing silently in either direction: an implementation change that made MORE days temporal-origin-and-unresolvable, or fewer, changes 373 and fails the pin, even though the axis itself cannot say WHICH specific day moved or why. The overwhelming majority of days whose observed celebration is TEMPORAL-origin (an ordinary Sunday, a feria, a movable named feast including Holy Family itself) never carry an English name on colitur's side -- not a rubric dispute and not a data gap either engine is wrong about, a LIMIT of this comparator, honestly counted rather than silently passed, per the brief's own explicit instruction (\"a day whose observed identity cannot be resolved must be a counted, allow-listed outcome, never a silent skip\"). Gated on the diff SHAPE alone (exactly, and only, observed-identity-unresolved), not a literal date list the way every other entry in this file is -- at this population size a date list would itself be the \"pattern that could silently widen\" this file's own header warns against, for the opposite reason a date RANGE is normally risky: the predicate (colitur's own resolved name is [None]) is the precise, falsifiable evidence, the same shape M2's own title-substring predicate already uses instead of enumerating dates, just keyed on presence-of-a-name rather than a title string. Building an English name onto every temporal-cycle candidate (a data/lectionary-bootstrap task, Plan 4, out of this task's scope -- register §6, the same open item M15's own note already tracks) would resolve this entry to Matched for every one of these days it does not instead expose as a REAL divergence (Holy Family's own two dates in this window, 2026-01-11 and 2027-01-10, are counted here, not separately -- the name comparison genuinely cannot distinguish \"Holy Family\" from any other unnamed Sunday, so proving Holy Family's own correctness rests on the golden pins and the differential's own C15, not this axis). Derived directly from the comparator's own failure output (test_layer_m_counts_match_citations), not hand-counted first and cross-checked after: 373.") + (expected_rows 395)) ((id M19) (citation "RG 110's OTHER direction: \"In Officio et Missa S. Petri semper fit commemoratio S. Pauli, ET VICISSIM\" -- the SAME rule M12 used to cite, applied here to Paul's own office commemorating Peter, not Peter's own office commemorating Paul; 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.\"") (verdict colitur) diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index 261e900..444f55e 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -72,3 +72,8 @@ (verdict colitur) (note "ef-holyname-rg110 task: RG 17(a)'s own fallback, previously unbuilt (register §6.2's own open item -- colitur emitted no Holy Name office at all in a year with no Sunday 2-5 January, not merely an unnamed generic Sunday the way Holy Family's own pre-fix gap was). 2 January in a year with no Sunday in that window now carries the feast (`ef-holy-name`, class-2, subject Lord) instead of the ordinary Christmastide ferial fallback (`ef-christmas-1-`/`ef-christmas-0-` in lectio's own naming, class-4) -- a genuine SLUG AND RANK divergence against lectio, which has no fallback for this window at all (`~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` carries no 01-02 entry; checked directly, not assumed) and shows the plain ferial slug on every one of these dates regardless. Gated on the literal date list AND colitur's own slug (the same identity guard C1/C6/C8/C14/C15 already apply, fix round 1's own finding 1). 20 of the 46 years in the fixture's own 2005-2050 span have no Sunday 2-5 January -- independently re-derived against `date -d -01-0{2,3,4,5} +%u` for every year in range (not the register's domain-wide 3,619-of-8,417 figure divided down; a fresh count over this file's own narrower window), then cross-checked against the OCaml comparator's own failure output before being set here: 20.") (expected_rows 20)) + ((id C17) + (citation "RG 91 entry 27 (\"Officium sanctae Mariae in sabbato\") + RG 78 (Caput IX, \"De sancta Maria in sabbato\", both photographic scans and the electronic transcription word for word): \"In sabbatis, in quibus occurrit Officium de feria IV classis, fit de sancta Maria in sabbato\" -- on Saturdays on which the Office of a IV-class feria occurs, [the Office] is made of Holy Mary on Saturday instead + RG 120(b) (\"Adhibetur color albus in Officio et Missa de festis: ... b) B. Mariae Virg.\") for the white colour, unconditional regardless of season") + (verdict colitur) + (note "ef-bvm-saturday task: colitur now builds RG 91 entry 27's votive Office of the BVM on every otherwise-unoccupied IV-class Saturday (Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full argument) -- white (RG 120(b)), unconditionally, overriding the season's own colour (violet in Septuagesima, green in Time after Epiphany/Time after Pentecost; Christmastide and ordinary Paschaltide already happened to be white). lectio builds no equivalent office at all -- checked directly against its own tridentine-calendar.ini/generator, no comparable rule exists there, the same genuine upstream gap C15/C16 above document for their own gaps, not a colitur bootstrap miss -- so it keeps showing the plain season colour on every one of these Saturdays. Season, slug and rank all still agree: temporal_ef.ml's own [bvm_saturday_names] citation (\"Slug\" paragraph) deliberately REUSES the ordinary --saturday ferial slug rather than minting a new one (partly BECAUSE a bespoke uniform slug would itself have broken Colitur_kernel.Validate's own slug-uniqueness invariant, sighted on every otherwise-unoccupied Saturday in a year), so [Colour_f] alone is the complete diff set every one of these rows carries -- never [Slug_f] too. Gated on colitur's own [rank]=class-4, [weekday]=saturday and [colour]=white (test_differential.ml's own [is_bvm_saturday_row]) rather than a date list, unlike C14/C15/C16 above: RG 78's own condition (\"otherwise unoccupied IV-class Saturday\") reduces exactly to this triple, and the population is large (a substantial fraction of all Saturdays in the 2005-2050 window) and entirely formulaic, not a short, individually-interesting list. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after.") + (expected_rows 416)) -- cgit v1.3 From c63e37b8cbef1480b6f5677420425d22fe7061d9 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 13 Aug 2026 17:37:40 +0200 Subject: docs: an invented Caput, a list that was not closed, and a blind spot Three corrections from the fix-round re-review, none changing behaviour. RG 431(e) was attributed to "Caput XX, De hymno Gloria in excelsis". There is no Caput XX -- the Rubricae Generales' Caput series ends at XIX. The paragraph number, letter and subsection title were all right; only the containing division was invented. It sits under "VIII -- De diversis Missae partibus", subsection "C) De hymno Gloria in excelsis". Shipping a new invented structural citation in the very round that corrected a source-fidelity overclaim is what the gate exists to catch. marian_slugs claimed TWO entries found and deliberately excluded after individual consideration, "not merely omitted". There was a third: vigil-of-the-assumption, 14 August, which is de B. Maria Virg. and whose collect implores her protection. It was merely omitted. Added to the list -- behaviourally inert, verified: it wins 7196 times domain-wide, always with the non-Marian eusebius-confessor as its only commemoration, and never loses -- but a closed list's whole value is its enumeration claim, and that claim was false as written. And the new rule has no comparison-layer witness at all. Reverting it reddens three tests, none of them a comparison layer: the differential's row type carries no commemorations, and the oracle's window has no 16-July Saturday. Worse, lectio's fixture DOES carry commemorations and prints +our-lady-of-mt-carmel on all 8 in-window dates where colitur now prints nothing -- a real divergence, neither fixed nor cited, swallowed by a blind spot, which binding decision 1 forbids. Recorded, with the note that colitur's reading here has no reference confirmation anywhere and only extending the oracle fixture to 2033 or later would settle it. Also records the RG 112(d) branch's ordering constraint: it precedes RG 95's Transfer branch, which it does not need to, and must move below it if a Class1 Marian entry is ever added. --- data/ef/expected-divergences.sexp | 2 +- lib/rites/rite_ef/precedence_ef.ml | 41 ++++++++++++++++++++++++++++++++++---- lib/rites/rite_ef/temporal_ef.ml | 8 ++++++-- 3 files changed, 44 insertions(+), 7 deletions(-) (limited to 'data') diff --git a/data/ef/expected-divergences.sexp b/data/ef/expected-divergences.sexp index 444f55e..f5d5381 100644 --- a/data/ef/expected-divergences.sexp +++ b/data/ef/expected-divergences.sexp @@ -75,5 +75,5 @@ ((id C17) (citation "RG 91 entry 27 (\"Officium sanctae Mariae in sabbato\") + RG 78 (Caput IX, \"De sancta Maria in sabbato\", both photographic scans and the electronic transcription word for word): \"In sabbatis, in quibus occurrit Officium de feria IV classis, fit de sancta Maria in sabbato\" -- on Saturdays on which the Office of a IV-class feria occurs, [the Office] is made of Holy Mary on Saturday instead + RG 120(b) (\"Adhibetur color albus in Officio et Missa de festis: ... b) B. Mariae Virg.\") for the white colour, unconditional regardless of season") (verdict colitur) - (note "ef-bvm-saturday task: colitur now builds RG 91 entry 27's votive Office of the BVM on every otherwise-unoccupied IV-class Saturday (Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full argument) -- white (RG 120(b)), unconditionally, overriding the season's own colour (violet in Septuagesima, green in Time after Epiphany/Time after Pentecost; Christmastide and ordinary Paschaltide already happened to be white). lectio builds no equivalent office at all -- checked directly against its own tridentine-calendar.ini/generator, no comparable rule exists there, the same genuine upstream gap C15/C16 above document for their own gaps, not a colitur bootstrap miss -- so it keeps showing the plain season colour on every one of these Saturdays. Season, slug and rank all still agree: temporal_ef.ml's own [bvm_saturday_names] citation (\"Slug\" paragraph) deliberately REUSES the ordinary --saturday ferial slug rather than minting a new one (partly BECAUSE a bespoke uniform slug would itself have broken Colitur_kernel.Validate's own slug-uniqueness invariant, sighted on every otherwise-unoccupied Saturday in a year), so [Colour_f] alone is the complete diff set every one of these rows carries -- never [Slug_f] too. Gated on colitur's own [rank]=class-4, [weekday]=saturday and [colour]=white (test_differential.ml's own [is_bvm_saturday_row]) rather than a date list, unlike C14/C15/C16 above: RG 78's own condition (\"otherwise unoccupied IV-class Saturday\") reduces exactly to this triple, and the population is large (a substantial fraction of all Saturdays in the 2005-2050 window) and entirely formulaic, not a short, individually-interesting list. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after.") + (note "ef-bvm-saturday task: colitur now builds RG 91 entry 27's votive Office of the BVM on every otherwise-unoccupied IV-class Saturday (Rite_ef.Temporal_ef's own [bvm_saturday_names] citation has the full argument) -- white (RG 431(e) -> RG 121(a) -> RG 120(b); RG 120(b) alone reads \"de festis\" and this Office is not a festum), unconditionally, overriding the season's own colour (violet in Septuagesima, green in Time after Epiphany/Time after Pentecost; Christmastide and ordinary Paschaltide already happened to be white). lectio builds no equivalent office at all -- checked directly against its own tridentine-calendar.ini/generator, no comparable rule exists there, the same genuine upstream gap C15/C16 above document for their own gaps, not a colitur bootstrap miss -- so it keeps showing the plain season colour on every one of these Saturdays. Season, slug and rank all still agree: temporal_ef.ml's own [bvm_saturday_names] citation (\"Slug\" paragraph) deliberately REUSES the ordinary --saturday ferial slug rather than minting a new one (partly BECAUSE a bespoke uniform slug would itself have broken Colitur_kernel.Validate's own slug-uniqueness invariant, sighted on every otherwise-unoccupied Saturday in a year), so [Colour_f] alone is the complete diff set every one of these rows carries -- never [Slug_f] too. Gated on colitur's own [rank]=class-4, [weekday]=saturday and [colour]=white (test_differential.ml's own [is_bvm_saturday_row]) rather than a date list, unlike C14/C15/C16 above: RG 78's own condition (\"otherwise unoccupied IV-class Saturday\") reduces exactly to this triple, and the population is large (a substantial fraction of all Saturdays in the 2005-2050 window) and entirely formulaic, not a short, individually-interesting list. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after.") (expected_rows 416)) diff --git a/lib/rites/rite_ef/precedence_ef.ml b/lib/rites/rite_ef/precedence_ef.ml index 302df98..7b64b83 100644 --- a/lib/rites/rite_ef/precedence_ef.ml +++ b/lib/rites/rite_ef/precedence_ef.ml @@ -458,9 +458,18 @@ let band (ctx : Vocab_ef.season Precedence.context) (c : Vocab_ef.rank Precedenc "eiusdem Divinae Personae" (read as simply "both [subject = Lord]", that branch's own comment: "safe at today's data's own granularity") -- here read as "titled a feast of the BVM", not verified oration-by- - oration, and said so explicitly rather than overclaimed. TWO entries - found and deliberately EXCLUDED after individual consideration, not - merely omitted: "dedication-of-the-basilica-of-st-mary-major" (5 + oration, and said so explicitly rather than overclaimed. THREE entries found + and considered individually rather than merely omitted -- the third, + "vigil-of-the-assumption" (14 August, Class2, Feast), was MISSED by the + original enumeration and is recorded here by the fix-round re-review: it + is unambiguously de B. Maria Virg. and its collect implores her + protection ("sua nos defensione munitos"), so it BELONGS on the list on + the same reasoning as the rest. It is behaviourally inert either way -- + measured domain-wide, it wins 7196 times, always with the non-Marian + [eusebius-confessor] as its only commemoration, and never loses, since + no Class1 Marian falls on 14 August -- but a closed list's whole value is + its enumeration claim, and that claim was false as first written. The + other two were genuinely excluded after consideration: "dedication-of-the-basilica-of-st-mary-major" (5 August, Class3, Feast) -- a DEDICATION feast (of the building, "In Dedicatione S. Mariae ad Nives"), whose own oration could not be found in either scan under this exact heading to confirm it invokes her @@ -517,6 +526,11 @@ let marian_slugs = "most-holy-name-of-mary"; "nativity-of-the-blessed-virgin-mary"; "our-lady-of-lourdes"; + (* Added by the fix-round re-review: missed by the original enumeration, + behaviourally inert (it never loses; no Class1 Marian falls 14 Aug), + but it is de B. Maria Virg. and its collect implores her protection, + so it belongs on the list by the same test as every other member. *) + "vigil-of-the-assumption"; "our-lady-of-mt-carmel"; "our-lady-of-ransom"; "our-lady-of-the-rosary"; @@ -753,7 +767,26 @@ let disposition ~(winner : Vocab_ef.rank Precedence.candidate) let is_temporal = loser.Precedence.origin = Precedence.Temporal in if is_bvm_office winner && is_bvm_office loser then (* RG 112(d) -- see [marian_slugs]'s own citation above for the full - argument. Checked FIRST, even ahead of the [Commemoration_only] + argument. + + ON THIS BRANCH'S POSITION (fix-round re-review, finding 5): it sits + ahead of RG 33's vigil branch and RG 95's Class1 Transfer branch as + well as ahead of [Commemoration_only], and only the last of those + three is a position it NEEDS. RG 112(d) governs commemorations, not + translations, so if a Class1 Marian celebration ever lost to a Marian + winner it would be silently [Omit]ed here instead of reaching RG 95 + and transferring. That is unreachable on shipped data -- the + re-review swept the whole domain and found ZERO Marian-winner / + Marian-loser pairs other than the 16 July case this branch exists + for, which is [Commemoration_only] and so could never transfer + anyway -- and it is left in place rather than moved, because + reordering a disposition branch is a behavioural change that deserves + its own measurement and review rather than a late edit. Recorded here + and in the register so the next task that touches this chain knows + the constraint: if a Class1 Marian entry is ever added, this branch + must move BELOW the Transfer branch. + + Checked FIRST, then, ahead of the [Commemoration_only] branch immediately below, because the one live witness (Mt Carmel, 16 July) IS [Commemoration_only] -- that branch's own "always Commemorate, nothing overrides it" previously had no diff --git a/lib/rites/rite_ef/temporal_ef.ml b/lib/rites/rite_ef/temporal_ef.ml index cf0d22c..4add824 100644 --- a/lib/rites/rite_ef/temporal_ef.ml +++ b/lib/rites/rite_ef/temporal_ef.ml @@ -631,8 +631,12 @@ let weekday_word d = Date.weekday_to_string (Date.weekday d) citation -- its own text reads "in Officio et Missa DE FESTIS" (of FEASTS), and this Office is not itself a festum (RG 91's own table position, entry 27, sits outside the Festa rows 11-13/16/19/20/23/24 - entirely). The tighter chain, found on the same scan: RG 431(e) (Caput - XX, "De hymno Gloria in excelsis") is the Missal's OWN classification of + entirely). The tighter chain, found on the same scan: RG 431(e) ("VIII -- De diversis + Missae partibus", subsection "C) De hymno Gloria in excelsis" -- NOT + "Caput XX", which does not exist: the Rubricae Generales' Caput series + ends at XIX. Corrected by the fix-round re-review; the paragraph number, + letter and subsection title were right, only the containing division was + invented) is the Missal's OWN classification of this exact Mass, word for word: "431. Hymnus Gloria in excelsis dicitur: ... e) in Missis votivis IV classis de Angelis, quocumque die, et de B. Maria Virg. QUAE IN SABBATO CELEBRANTUR" -- the Gloria is said -- cgit v1.3