1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
; data/ef/expected-divergences.sexp -- Task 15's Layer C: the CITED allow-list
; for colitur's differential harness against lectio (test/test_differential.ml),
; 2005-2050. This is the only layer that may cover a difference in rank,
; colour, or which celebration is observed -- Layers A (vocabulary) and B
; (numbering) live in test_differential.ml's code because they normalise
; NAMES and INDICES only and never touch this file's territory.
;
; Each entry is a genuine liturgical disagreement between the two engines.
; [verdict] names which engine the register/Missal backs; every entry here
; is "colitur" -- an entry saying otherwise would mean "fix colitur", not
; "allow-list it" (task ruling). [expected_rows] is the exact row count this
; entry accounts for over the fixture's 2005-2050 span: a REGRESSION PIN, not
; documentation -- test_differential.ml asserts actual counts equal these
; exactly, so an unnoticed behaviour change here fails loudly instead of
; silently changing what the harness accepts.
;
; DEPARTURE, task 8 (branch ef-lectionary, citation comparison): this file
; carries [verdict open] entries -- C6 and C25 as of fix round 2 -- for
; genuine, precisely-diagnosed colitur DEFECTS the task that found them
; explained fully but did not fix, because doing so safely needs a
; behaviour change to a shared, multi-round-reviewed kernel-adjacent
; function (Rite_ef.Temporal_ef, RG 69's own gap -- see C6's own note for
; the full account) out of that task's own scope. Not a silent pass:
; `expected-divergences-missalemeum.sexp` already established [verdict
; open]/[verdict unresolvable] as this project's own mechanism for
; "genuinely unresolved, honestly counted, not swept under the rug, and
; re-adjudicable by name" (see that file's own M11/M13/M15 entries) --
; this task extends the SAME mechanism to this file rather than inventing
; a new one, on the judgment that a permanently-red `dune test` would
; serve this project's own stated goals (loud, tracked, NON-silent
; flagging) worse than a counted, cited, clearly-labelled-as-open entry
; does. Flagged here for explicit review, the same as every other
; deviation this project's own task reports record rather than hide.
;
; CORRECTED, fix round 2 (coordinator review, Important): this paragraph
; previously named a since-retired id (C21) and restated its own retired
; diagnosis verbatim, becoming stale the moment C21 itself was replaced by
; C6 (widened) and C25 (new) -- rewritten in full rather than layering a
; correction on top, the same discipline C6's own note below applies to
; itself for the identical reason.
;
; 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-12 January specifically, into the ferial slug family name (colitur's ef-christmas-2-<weekday> vs lectio's ef-time-after-epiphany-1-<weekday> for those 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). REFRESHED AGAIN (ef-rg112-rg110 task, branch ef-rg112-rg110): expected_rows moved 368 -> 361, back to its PRE-ef-rebootstrap value, but for a THIRD, different reason -- SPLIT OUT to its own new entry, C15, not silently re-absorbed: colitur now BUILDS Holy Family (RG 17(b)) and, on these same 7 dates, correctly observes it in the fixed Baptism's place (RG 91 entry 14, RG 112(a)), so colitur's own slug there changes from `commemoration-of-the-baptism-of-the-lord` (which happened to already match lectio's own slug) to `ef-time-after-epiphany-sunday-1` (Holy Family's own, lectio has no equivalent) -- a genuine SLUG divergence now, no longer inside C1's own [Season]-only shape. See C15's own entry for the full account. PROVENANCE, fix round 1 (coordinator finding 6, restoring the discipline this entry's own prior refresh recorded and this round's rewrite had dropped): 361 read directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's `Received` array, run against the widened C15 predicate/allow-list together, not before it existed) -- not hand-counted first and cross-checked after, and not 368 minus 7 taken on faith: the arithmetic matches C15's own independently-derived 7, which is corroboration, not the derivation itself.
REFRESHED AGAIN, Task 9 (branch ef-lectionary, layer-4 oracle): expected_rows moved 361 -> 173. NOT a data change -- this entry's OWN diff-set guard (`subset diffs [Season;Colour_f;Slug_f]`) never accepted a citation diff, and this task gave the `ef-christmas-2-<weekday>` and `ef-time-after-epiphany-1-<weekday>` families their OWN direct citations for the first time (the Missal's own Mass-propers \"diebus ferialibus\" rubrics -- NOT RG 17(a) itself, which states only the day-identity privilege; see C30/C31's own citations for the corrected attribution -- tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) -- every row in this window that ALSO now carries a real First_f/Gospel_f divergence escapes this entry's own subset guard and moves to the new C31/C32 instead (not silently re-absorbed: C31/C32's own [subset diffs [Season;Slug_f;Colour_f;First_f;Gospel_f]] guard is what actually catches them, checked BEFORE this entry no longer applies, not assumed). What remains here is every 6-13 January row this task's own fix did NOT touch: Epiphany itself, the fixed Baptism commemoration, and any day a competing saint or the BVM Saturday Office already wins outright (unaffected by a lectionary citation either way). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 173. REFRESHED (BVM Saturday Mass, 2026-08-17): 173 -> 159. Fourteen of these days are Saturdays carrying the RG 78 office, which now also says its own RG 309(a) Mass, so they gained a citation difference and moved to C17 -- whose single cause covers both. Not a new divergence and not a fix here: the same days, filed against the entry that actually explains them.")
(expected_rows 159))
((id C6)
(citation "RG 91 entry 17 (\"days within the Octave of the Nativity\") for the slug/rank divergence; RG 69, scan1.txt:625-631 word for word, for the QUESTIONED citation component (Important 3(b), coordinator review, task 8 fix round 1): \"De dominica infra octavam Nativitatis Domini, quae scilicet a die 26 ad 31 decembris occurrit, semper fit Officium cum commemoratione festi forte occurrentis, iuxta rubricas, nisi dominica incidat in festum I classis: quo in casu, fit de festo cum commemoratione dominicae\" -- the Sunday's OWN Office (not the fixed weekday placeholder) is kept, WITH a commemoration of whatever feast falls that day, whenever a Sunday lands anywhere 26-31 December (unless that feast is itself I class, in which case the feast wins with the Sunday commemorated instead)")
(verdict open)
(note "REWRITTEN IN FULL, task 8 fix round 1 (coordinator review, Important 4: a prior version of this note left three successive NARROWED/CORRECTED paragraphs standing on top of each other in a file whose whole purpose is a top-down audit trail -- this replaces all of them with one current account, history preserved in git, not layered here again.
29-31 December (RG 91 entry 17, II class) are colitur's own fixed `ef-nativity-octave-day-{5,6,7}` slugs regardless of weekday -- including on the years one of them IS itself a Sunday, which is the root of everything below. lectio keeps its own generic `ef-christmas-0-<weekday>` (or, on a Sunday, `ef-christmas-sunday-0`) naming instead: a genuine, historically stable SLUG divergence (this part of the entry is unchanged since the fixture refresh that first measured 138).
CITATION component, new this task: Important 3(a) (tools/bootstrap_lectionary.ml's own `nativity_octave_entries`) gave these three slugs a real, twice-Missal-verified citation for the first time (\"Diebus infra octavam Nativitatis Domini, II classis\": Tit. 3,4-7 / Luc. 2,15-20, docs/research/scan1.txt:6281-6329 and scan2.txt:6900-6960, each date's own rubric -- \"Missa Puer natus est nobis, ut supra [28]\" -- pointing straight at it). It does NOT converge with lectio's own answer, on ANY of the 138 rows, because lectio's own resolution never reaches this direct formulary either -- empirically, it always falls back to whichever true civil Sunday precedes the date (Christmas Day's own Mass, Advent IV's, or the genuinely different \"Dominica infra octavam\" Mass, Gal. 4,1-7/Luc. 2,33-40, depending on the year's own alignment) -- so all 138 rows, not merely a subset, now carry a citation diff alongside the pre-existing slug one.
VERDICT, split by the SAME 138-row population, not two entries: on the 119 rows where 29-31 December is an ordinary WEEKDAY that year, colitur's `Tit. 3,4-7` citation is CONFIRMED CORRECT against the Missal (verdict colitur would be accurate for this subset alone). On the 19 rows where 29-31 December IS ITSELF a Sunday that year (2006-12-31, 2007-12-30, 2012-12-30, 2013-12-29, 2017-12-31, 2018-12-30, 2019-12-29, 2023-12-31, 2024-12-29, 2028-12-31, 2029-12-30, 2030-12-29, 2034-12-31, 2035-12-30, 2040-12-30, 2041-12-29, 2045-12-31, 2046-12-30, 2047-12-29 -- independently re-derived against `date -d <date> +%u` for every one of the 138 dates, not estimated), RG 69's own unconditional rule means the SUNDAY'S distinct Office should be observed instead -- colitur's `Temporal_ef` does not distinguish the two cases at the slug level at all, so it emits the weekday formulary there too, which is WRONG by this reading. This is a genuine [Temporal_ef] defect (not a lectionary/bootstrap issue, and not something this generator can fix on its own), out of this task's own safe scope -- a behaviour change to a shared, multi-round-reviewed kernel-adjacent function, the same discipline C25 below explains for its own one-hop-removed consequence of this identical gap. [verdict] is [open], not [colitur], because a single per-entry verdict cannot honestly claim BOTH sub-populations at once, and the coordinator's own instruction was explicit: mark it questioned, not leave a verdict the evidence contradicts.
Gated on the literal date window (month=12, day in {29,30,31}) AND colitur's own slug family (`nativity_octave_day_slugs`) AND `subset diffs [ Slug_f; First_f; Gospel_f ]` (widened this task from the exact-match `diffs = [ Slug_f ]` the pre-citation-comparison entry used -- narrowing back to exact-match would have silently re-excluded the very citation divergence this task exists to surface). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 138.")
(expected_rows 138))
((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. 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 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 "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. WIDENED, task 8 (branch ef-lectionary, citation comparison): [First_f]/[Gospel_f] joined the accepted diff set -- Joseph's own transferred office now carries his own proper (Ecclus 45:1-6/Matt 1:18-21, data/ef/adjustments.sexp), a natural continuation of the SAME identity divergence this entry already explains, not a second cause. Count unchanged: 3.")
(expected_rows 3))
((id C15)
(citation "RG 91 entry 14 (\"Festa Domini II classis, primum mobilia, deinde fixa\") + RG 17(b) (\"festum S. Familiae ... celebrandum dominica prima post Epiphaniam ... locum tenet dominicae occurrentis cum omnibus iuribus et privilegiis\") + RG 112(a) (\"Officium, Missa aut commemoratio de aliquo festo vel mysterio unius Divinae Personae excludit commemorationem ... de alio festo vel mysterio eiusdem Divinae personae\"), all scan-verified; register §6.0/§4")
(verdict colitur)
(note "ef-rg112-rg110 task: SPLIT OUT of C1's own blanket 6-13 January window, not a new kind of divergence -- the same discipline the now-closed C13 already established for this exact date (C1's own note above), applied again because building Holy Family reopened the identical shape C13 used to cover, for a different underlying reason. Before this task, colitur had no Holy Family office: on these seven dates (13 January when it is itself a Sunday -- 2008, 2013, 2019, 2030, 2036, 2041, 2047), colitur's generic Sunday fallback lost outright to the fixed Commemoration of the Baptism of the Lord (already subject Lord in the rebootstrapped data, RG16(a)'s existing mechanism), producing the SAME slug lectio's own tridentine-calendar.ini shows there (`commemoration-of-the-baptism-of-the-lord`) -- only Season differed, inside C1's own shape. Holy Family (RG 17(b)) now correctly outranks the fixed Baptism (RG 91 entry 14's own \"primum mobilia, deinde fixa\" -- {!Rite_ef.Precedence_ef.entry_14_movable_band}) and excludes it as a commemoration entirely (RG 112(a), directly confirmed by the Holy Family Mass propers' own more specific 13-January rubric, both photographic scans: \"Si festum S. Familiae occurrerit die 13 ianuarii, Missa dicitur de festo S. Familiae, sine commemoratione Baptismatis D.N.I.C., et sine commemoratione dominicae\"), so colitur's own slug on these 7 dates changes to `ef-time-after-epiphany-sunday-1` (Holy Family's own -- unchanged from the plain Sunday key it always carried, temporal_ef.ml's own comment on why) -- a genuine SLUG divergence against lectio, which has no Holy Family at all and still shows the fixed Baptism observed. Gated on the literal 7-date list AND colitur's own slug (the same identity guard C1/C6/C8/C14 already apply, fix round 1's own finding 1). Derived from the OCaml comparator's own failure output directly (test_layer_c_counts_match_citations), not by hand-counting first and cross-checking after: 7. WIDENED, task 8: [First_f]/[Gospel_f] joined the accepted diff set -- Holy Family's own proper (Col 3:12-17/Luke 2:42-52) now differs from the fixed Baptism's, which lectio still shows, for the identical reason this entry already names. Count unchanged: 7.")
(expected_rows 7))
((id C16)
(citation "RG 17(a) (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii, SECUS DIE 2 IANUARII\") + the calendarium's own January table, both photographic scans, word for word: \"Dominica inter octavam Nativitatis Domini et Epiphaniam, vel, EA DEFICIENTE, die 2 ianuarii: Sanctissimi Nominis Iesu, II classis\"")
(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-<weekday>`/`ef-christmas-0-<weekday>` 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 <year>-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. WIDENED, task 8: [First_f]/[Gospel_f] joined the accepted diff set. `ef-holy-name` used to carry a MIS-DERIVED citation (Gal 4:1-7/Luke 2:33-40, borrowed by analogy from `ef-christmas-sunday-0`'s own ini section) -- on 13 of these 20 years lectio's own plain-ferial fallback happened to land on that SAME wrong value by coincidence, so those 13 rows matched outright and dropped out of the diff entirely, and only the remaining 7 (where 1 January itself is a Sunday, so lectio's fallback finds the Circumcision's own Titus 2:11-15/Luke 2:21 instead) carried a real citation diff -- both sub-populations still summed to the SAME 20-row count either way, since [layer_c_reason]'s own `subset` guard accepts an empty citation diff too.
CORRECTED, Task 9 (branch ef-lectionary, layer-4 oracle): the 13-vs-7 coincidental-match split above is now STALE, not merely superseded -- `ef-holy-name` carries its own genuinely correct citation as of this task (Acts 4:8-12/Luke 2:21, Missal-verified twice, both scans, `colitur_keys`'s own CORRECTED note in bootstrap_lectionary.ml has the full account of the analogy error this replaces), which cannot coincide with EITHER of lectio's own two possible fallback answers (Gal 4:1-7 nor Titus 2:11-15 -- neither equals Acts 4:8-12) -- so ALL 20 of this entry's rows now carry a real [First_f]/[Gospel_f] diff, not merely 7 of them, a direct logical consequence of the three citations' own values, not re-derived by a fresh sweep. Row count itself is UNCHANGED at 20 (confirmed against the OCaml comparator's own failure output, still 20) -- only which rows carry a citation diff moved, and this entry's own `subset` guard already tolerated both shapes throughout, so nothing about the ALLOW-LIST predicate itself needed to change, only this note's own account of the values involved.")
(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 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 <season>-<week>-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.
NARROWED, task 8: expected_rows moved 416 -> 406. Not a regression -- 10 of the former 416 rows now ALSO carry [First_f]/[Gospel_f] (C19's own Time-after-Epiphany week-numbering-shift years, 2008/2013/2019/2030/2036/2041/2047, on the specific Saturdays where the BVM office and the week-shift coincide) and so no longer satisfy this entry's own EXACT [diffs = [ Colour_f ]] guard -- they move to C19 instead, which explains the SAME colour divergence plus the week-shift's own citation divergence together. This entry's own guard is intentionally NOT widened to `subset`: doing so would risk silently absorbing a future, unrelated citation bug on an otherwise-ordinary BVM Saturday. Re-derived directly from the OCaml comparator's own failure output: 406. NARROWED (movable-date-specs follow-up, 2026-08-17): 406 -> 397. Nine of these Saturdays are ALSO the Saturday of the week after Trinity Sunday, where colitur now resolves the printed Mass the Missal assigns that week (RG 299 escape clause -- see C35) while lectio still walks back to Trinity. Those rows carry a citation difference as well as this entry own colour one, so they belong to C35 now; split out to a cited entry rather than silently re-absorbed here, the same discipline C15 own split from C1 set. The colour cause is unchanged on all 397 that remain. WIDENED (BVM Saturday Mass, 2026-08-17): 397 -> 445, the entry's scope growing with its cause. colitur has built RG 78's OFFICE since the ef-bvm-saturday task, white where lectio (having no such office) is green. It now also says the MASS that office calls for, RG 309(a)'s iuxta temporum diversitatem selection among the five Missae de sancta Maria in sabbato, where lectio says the feria's. So these days differ on citations as well as colour. One cause, one entry: the predicate admits Colour/First/Gospel together, requires at least one, and keeps its subject=bvm guard, still the only field pinning WHICH celebration is observed since the office deliberately reuses the ferial slug. Rows absorbed from C1, C19 and C25 are those entries' own Saturdays, refiled here rather than left split across two ids for one divergence.")
(expected_rows 445))
((id C18)
(citation "RG 124 (\"XVIII - De coloribus paramentorum\", \"C) De colore rubro\"), both photographic scans word for word: 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)\"; 124(e) \"Sanctorum Martyrum, quorum colitur aut martyrium\"; register's own audit rewrite, ef-sanctoral-audit task")
(verdict colitur)
(note "ef-sanctoral-audit task (2026-08-14): 14 [status = Feast] sanctoral entries bootstrapped from lectio's own tridentine-calendar.ini carry a colour lectio's data gets wrong at the source (checked individually: e.g. `martha`'s own Polish field there already reads \"Dziewicy\" -- Virgin, no \"Męczennicy\" -- yet that SAME record's colour is red) -- corrected via data/ef/adjustments.sexp's own `Edit <slug> ((Set_colour ...))` directives, the same mechanism and root-cause shape `eusebius-confessor` (ef-rebootstrap fix round 1, F3) already used. Two rules: an Apostle/Evangelist's own feast day is red except John's (27 December, already correctly white, untouched); a plain Confessor/Bishop/Virgin (no \"Mart.\"/\"Mm.\" in the calendarium's own line, not an Apostle) is white by RG 117's five-colour residual; a Martyr's own martyrdom is red. `audit_colour_corrected_slugs` in test_differential.ml is the literal 14-slug list (conversion-of-st-paul, chair-of-st-peter, john-of-san-fecundo, ephrem-of-syria, julia-of-falconieri, john-gualbert, camillus-de-lellis, jerome-emiliani, apollinaris, martha, alphonsus-liguori, augustine, rose-of-lima, josaphat) -- every one of these [status = Feast], so it wins its own day most years (rarely impeded) and diffs on [Colour_f] alone against lectio's still-wrong value. A further eight corrections (prisca/peter/vitus/margaret/agapitus/liborii/mark-i, all [Commemoration_only], plus the new `barbara` Add) are NOT in this count: a [Commemoration_only] candidate can never be the OBSERVED day (Precedence.resolve's own design), so this row-level comparator (which reads only the observed day's own record) never has a row to diff for them -- inert to this fixture, not unaffected in truth. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations's own `Received`), not hand-counted first and cross-checked after: 450.
CORRECTED, task 8 fix round 1 (coordinator review, Minor): this note previously ended \"...cross-checked after: 526\", inconsistent with its own `(expected_rows 450)` immediately below and with the value `dune test` actually asserts and passes -- a stale transcription, not a live discrepancy (the test itself has been green at 450 throughout; only this trailing sentence disagreed with it). Fixed to read 450, matching the pin.")
(expected_rows 450))
((id C19)
(citation "register §3c item 5 (Time-after-Epiphany week-numbering anchor, the SAME citation this file's own [strip_epiphany_index]/Layer B header comment already carries) -- not a new rubric dispute, the previously-invisible CITATION-level consequence of an already-adjudicated NUMBERING artifact")
(verdict colitur)
(note "task 8 (branch ef-lectionary, citation comparison): once Holy Family (RG 17(b), the ef-rg112-rg110 task) starts a Time-after-Epiphany week's own numbering one week \"behind\" lectio's own count -- confirmed to happen in exactly the same 7 years C15 above names, 2008/2013/2019/2030/2036/2041/2047 -- every later Sunday and feria of that SAME season reads a DIFFERENT week's Mass on each side (e.g. 2008-01-18, colitur's own \"week 1\" Friday reading Holy Family's own Col 3:12-17/Luke 2:42-52 where lectio's \"week 2\" Friday reads Rom 12:6-16/John 2:1-11) until Time after Epiphany ends at Septuagesima, which re-synchronises both engines' counts from zero -- the SAME numbering offset Layer B's own [strip_epiphany_index] already strips from the SLUG comparison (no [Slug_f] ever appears in this entry's own rows), now visible for the first time in the CITATION content it was never able to touch. Not a rubric dispute: both engines correctly compute \"whichever Sunday this feria repeats\", they simply disagree on which CIVIL Sunday that is once the week-count has drifted by one -- corroborating, not contradicting, the header comment's own \"no clean formula-based check is possible\" limit. A handful of these rows (the Saturdays, e.g. 2008-01-19/2019-02-16) ALSO carry [Colour_f]: those Saturdays independently carry C17's own BVM-Saturday office that week, a second, already-cited, unrelated cause layering onto the same row -- C17's own 416-row count is untouched, since its own guard requires diffs = EXACTLY [Colour_f], never satisfied on a row that also carries [First_f]/[Gospel_f]. Gated on the literal 7-year list AND colitur's own slug family (`ef-time-after-epiphany-*`, [starts_with] already declared for [strip_epiphany_index]) rather than a broader \"any citation diff this year\" rule, so an unrelated real bug elsewhere in one of these 7 years still surfaces as unexplained. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 45. REFRESHED (BVM Saturday Mass, 2026-08-17): 45 -> 35. Ten Saturdays moved to C17 for the same reason C1's fourteen did: they carry the RG 78 office and now its Mass too, which is C17's own cause.")
(expected_rows 35))
((id C20)
(citation "data/ef/commons.sexp's own citations (task 6, RG-cited per saint, three independent witnesses each -- task-6-report.md §1/§2) for four of these seven saints, routed through the Common; data/ef/adjustments.sexp's own `Edit ... Set_citation` propers, equally scan-verified, for the other three (thomas-aquinas/john-of-god/francis-of-paola)")
(verdict colitur)
(note "task 8 (branch ef-lectionary): lectio's own [caldata.Readings] genuinely resolves NOTHING at all -- literally \"-\"/\"-\", not merely a different value -- for 14 civil days across 2005-2050 (task-7-report.md's own count, independently reproduced here): every one is a day on which one of SEVEN readingless class-3 saints (vincent-ferrer x5, isidore-of-seville x3, john-of-god x2, thomas-aquinas, francis-of-paola, sts-felicitas-perpetua, frances-rome, x1 each) is the day's own observed office. Task 6 gave every one of these saints either a Common assignment (data/ef/commons.sexp, the Missal's own instruction at that saint's date, e.g. \"Missa Os iusti, de Communi Confessoris non Pontificis I loco\" for Vincent Ferrer) or, where the Missal instead prints a full proper Mass at the saint's own date (thomas-aquinas, john-of-god, francis-of-paola), a direct citation via data/ef/adjustments.sexp -- both routes read from three independent witnesses each (scan1, scan2, the page images; task-6-report.md's own cross-check discipline), not invented. colitur is MORE COMPLETE here, not wrong: lectio's own generator simply has no data for these particular saints, a genuine upstream gap this task's own report records for lectio, not a colitur defect. Gated on the literal 7-slug list AND on lectio's field reading the literal \"-\"/\"-\" sentinel, never \"any citation mismatch on these slugs\" -- a genuine future content disagreement on one of these seven saints (e.g. if lectio's own data ever grew an entry that DISAGREED with colitur's scan-verified citation) would still surface as unexplained, not silently absorbed here. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 14.")
(expected_rows 14))
; C21 -- CLOSED, task 8 fix round 1 (coordinator review), REMOVED not
; re-adjudicated to a different verdict: its own diagnosis ("colitur's
; step 3 cannot reach a correct answer for the fixed Christmastide
; slugs") was SUPERSEDED, not merely fixed around, by Important 3(a)'s
; direct Missal formulary for ef-nativity-octave-day-{5,6,7} (which
; resolves at step 2 now, not step 3 at all) and the Critical-1/2 fixes
; elsewhere in this same fix round. What C21 used to cover has split
; cleanly into C6 above (widened, re-opened) and C25 below (a newly,
; more precisely diagnosed one-hop-removed consequence of the SAME RG 69
; gap) -- test_differential.ml's own layer_c_reason carries no C21
; predicate any more, the same discipline this file's own C2-C5/C7/
; C9-C13 closures already established.
; C22 -- CLOSED, Task 9 (branch ef-lectionary, 2026-08-17), REMOVED not
; re-adjudicated to a different verdict: it stopped occurring entirely
; (0 of 16801 rows), the same shape this file's own C2-C5/C7/C9-C13/C21
; closures already established, and for the same reason -- the OTHER
; engine was fixed to agree, not colitur changed. The entry's own note
; called this out explicitly at the time ("A genuine LECTIO bug, reported
; here for upstream, NOT patched in this task"): lectio's own lectionary
; keyed the three Lenten Ember days under the generic "ef-lent-1-<weekday>"
; family while its calendar computed "ef-lent-ember-{wed,fri,sat}", so its
; own [caldata.Readings] never reached them and it fell back to Lent I
; Sunday's Mass. That is now fixed upstream (lectio v0.46.1, keys renamed,
; plus a test there that fails the build on any unreachable lectionary key
; rather than silently serving a plausible wrong Mass), and the fixture was
; regenerated from it -- so both engines now show the Ember day's own
; proper and there is nothing left to allow-list. The citation is preserved
; in docs/research/rules-register.md's own closure record, not deleted: it
; was a real divergence, correctly adjudicated in colitur's favour at the
; time. test_differential.ml's own layer_c_reason carries no C22 predicate
; any more.
((id C23)
(citation "Holy Monday (\"Feria II Hebdomadae sanctae, I classis\"): Isa 50:5-10 / John 12:1-9. Holy Tuesday (\"Feria III Hebdomadae sanctae, I classis\"): Jer 11:18-20 / the Passion according to Mark, 14:32-72; 15:1-46. Holy Wednesday (\"Feria IV Hebdomadae sanctae\"): Isa 53:1-12 (the SECOND of two peer lessons, see note) / the Passion according to Luke, 22:39-71; 23:1-53. Holy Thursday (\"Feria V in Cena Domini\"): 1 Cor 11:20-32 / John 13:1-15. Good Friday (\"Feria VI in Passione et Morte Domini\"): Ex 12:1-11 (the SECOND of two peer lessons) / the Passion according to John, 18:1-40; 19:1-42. Holy Saturday (Missa Vigiliae Paschalis' own Epistle+Gospel, explicitly labelled \"Lectio Epistolae\", distinct from its own preceding prophecies): Col 3:1-4 / Matt 28:1-7. All six: docs/research/scan1.txt AND scan2.txt, word for word, both scans independently (tools/bootstrap_lectionary.ml's own [holy_week_entries] comment has the exact line references)")
(verdict colitur)
(note "task 8 fix round 1 (coordinator review, Critical 1): the ORIGINAL version of this task's own `colitur_keys` widened lectio's single \"ef-passiontide-0-<weekday>\" ini section into BOTH Passion week (`ef-passiontide-1-*`) and Holy Week (`ef-passiontide-2-*`, including the entire Sacred Triduum) on the strength of lectio's own citation being byte-identical between the two weeks -- WRONG: that only proves lectio CONFLATES the two weeks (it has no Holy Week propers of its own at all), not that the Missal does. The Mass of the Lord's Supper reading Passion Sunday's own ferial Mass was a real defect, not a citation nicety -- caught by coordinator review before this task's own commit, not by anything in this suite (the differential was GREEN under the wrong widening, since both sides showed the identical wrong value).
CORRECTED, fix round 2 (coordinator review, Critical): the first-round fix hand-authored only FOUR of Holy Week's six days (Monday, Tuesday, Thursday, Saturday), reasoning that Wednesday and Good Friday have no unambiguous Epistle and leaving both entirely ABSENT under a separate entry, C24 (now retired). That was worse than the bug it replaced: an absent key does not mean \"no reading\" to Lectionary_ef.readings, it means step 3 silently resumes the preceding SUNDAY -- so Good Friday, which has no Mass at all, was emitting Palm Sunday's own Epistle and Passion narrative, every year. Fixed at the source: the GOSPEL is always unambiguous on both days (one labelled Passion narrative each) and is always authored; the FIRST slot is filled too, using the SAME \"last lesson before the Gospel\" convention already load-bearing elsewhere in data/ef/lectionary.sexp (the Lenten Ember Wednesday entry, itself an identical two-peer-lesson shape, already ships its own second lesson) -- not a fresh editorial invention for this entry. Neither lesson on either day is labelled \"Epistola\" the way Holy Saturday's genuinely is, so this remains a stated convention, not a textual fact, but a consistently-applied one. C24 is retired, not re-adjudicated: its own two-day population now has a real citation and folds into this entry, which covers all SIX days of Holy Week uniformly.
lectio, still conflating Holy Week with Passion week on all six days, keeps showing Passion week's own reused citation regardless -- a genuine, permanent, structural divergence, not a data gap on either side that could close. Gated on the literal 6-slug list and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees on all six -- season/slug/rank/colour were never the problem). NOT simply 46 x 6 = 276: Holy TUESDAY's own hand-authored citation is BYTE-IDENTICAL to lectio's own value (both draw on the identical Missal Mass -- C26 below has the account of why lectio's own ini carries Holy Tuesday's data under a Passion-week key), so all 46 of ITS rows match outright and never reach this entry. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 230 (276 - 46).")
(expected_rows 230))
; C25 -- CLOSED, BVM Saturday Mass (2026-08-17), REMOVED not re-adjudicated:
; 0 of 16801 rows. It covered `ef-christmas-1-saturday`, a Holy-Name-week
; Saturday with no proper of its own, which resumed the preceding Sunday's
; identity through step 3. Every one of those days is an unoccupied IV-class
; Saturday, so it carries RG 78's office -- and now RG 309(a)'s Mass for it,
; which answers before step 3 is ever reached. The days did not stop
; differing from lectio; they moved to C17, whose cause (colitur builds the
; office and its Mass, lectio builds neither) now explains them completely.
; Same "closed because the shape it named no longer occurs" discipline as
; C2-C5/C7/C9-C13/C21/C22, and the citation is preserved in the register.
((id C26)
(citation "Passion Tuesday's real Mass (\"Feria tertia, III classis, Statio ad S. Cyriacum\"): Dan 14:27, 28-42 / John 7:1-13 -- docs/research/scan1.txt:11085-11121, corroborated scan2.txt:12063-12120 (CORRECTED, fix round 3, coordinator review: the scan2 endpoint previously read 12104, which stops after the Epistle -- \"Lectio Danielis Prophetae, Dan. 14,27 et 28-42\" -- and never reaches the Gospel heading/citation at all; \"Sequentia sancti Evangelii secundum Ioannem, Ioann. 7,1-13\" is at scan2.txt:12117-12120, so the range now extends to 12120, mirroring scan1's own convention of ending right at the Gospel's citation line rather than the full pericope text), word for word both scans")
(verdict colitur)
(note "task 8 fix round 2 (coordinator review, Important): lectio's own ini section for Passion Tuesday (`ef-passiontide-0-tuesday`) is not Passion Tuesday's Mass at all -- it is Holy Tuesday's (Jer 11:18-20 / the Passion according to Mark), confirmed independently against both scans; C23 above has the full account of that same confusion for the OTHER (Holy) Tuesday. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this one ini section from translation rather than using its (wrong) value, and [passion_tuesday_entry] hand-authors the real Missal citation instead. lectio's own COMPUTED reading for the civil date it labels \"Passion Tuesday\" is drawn from the same wrong source, so colitur's now-correct citation genuinely diverges from lectio's on every occurrence this office is actually the observed day -- not a data gap on either side that could close. The other five Passion-week weekdays were independently re-verified against the Missal and are correct as lectio already had them; this is the ONE exception. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly. Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 43, not 46 -- traced, not merely accepted: in 2013, 2024 and 2042, Passion Tuesday's own civil date is impeded outright by a competing I-class feast (St Joseph, 19 March, in 2013/2024; the Annunciation, 25 March, in 2042), so colitur's own observed slug that day is the saint's, not this entry's slug at all -- those three rows already match independently, both engines agreeing on the saint's own citation. 43 + 3 = 46, the full domain, no residue.")
(expected_rows 43))
((id C27)
(citation "The Advent Ember Saturday's real Mass (\"Sabbato Quatuor Temporum Adventus\"): 2 Thess 2:1-8 / Luke 3:1-6 -- docs/research/scan1.txt:5425 (Gospel heading \"Sequentia sancti Evangelii secundum Lucam, Luc. 3,1-6\") and 5433 (Epistle heading \"Lectio Epistolae beati Pauli Apostoli ad Thessalonicenses, 2 Thess. 2,1-8\"), independently re-verified against scan2.txt:5904 (Gospel citation) and 5911 (Epistle citation), word for word both scans")
(verdict colitur)
(note "task 8 fix round 3 (coordinator review, Important): lectio's own ini value for `ef-advent-ember-sat` is not the Advent Ember Saturday's Mass at all -- it is St Thomas the Apostle's (Eph 2:19-22 / John 20:24-29, \"doubting Thomas\", 21 December), the identical shape C26 above documents for Passion Tuesday: a wrong value inherited verbatim from lectio's own ini, invisible to the differential because both engines carried the same wrong source before this fix. Both the real Epistle and the real Gospel are explicitly labelled in the Missal (\"Lectio Epistolae\" precedes 2 Thess 2:1-8, distinct from the prophecies before it), so this entry needed no \"last lesson before the Gospel\" convention judgement call the way Holy Wednesday/Good Friday (C23) did -- a textual fact, not an editorial choice. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this ini section from translation rather than using its wrong value, and [ember_saturday_corrections] hand-authors the real Missal citation instead. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 40, not 46 -- traced, not merely accepted: in 2013, 2019, 2024, 2030, 2041 and 2047, 21 December (St Thomas the Apostle) falls on a Saturday and coincides with the Advent Ember Saturday itself, so the SAINT wins outright (a real, correct occurrence result, both engines agreeing) and these six rows never reach this entry at all -- the same 6 civil years C28 below names, since 21 September and 21 December are always exactly 91 days (13 weeks) apart and so fall on the identical weekday every year, confirmed directly against `date -d`, not merely by arithmetic. This coincidence is also the likely origin of lectio's own wrong ini value in the first place: bootstrapped from a single calendar year that happened to be one of these six, generalising a real but year-specific coincidence into a permanent template value. 40 + 6 = 46, the full domain, no residue.")
(expected_rows 40))
((id C28)
(citation "The September Ember Saturday's real Mass (\"Sabbato Quatuor Temporum septembris\"): Heb 9:2-12 / Luke 13:6-17 -- docs/research/scan1.txt:23493 (Epistle heading \"Lectio Epistolae beati Pauli Apostoli ad Hebraeos, Hebr. 9, 2-12\") and 23545 (Gospel heading \"Sequentia sancti Evangelii secundum Lucam\", Luc. 13, 6-17 follows), independently re-verified against scan2.txt:26007 (Epistle citation) and 26013 (Gospel citation), word for word both scans")
(verdict colitur)
(note "task 8 fix round 3 (coordinator review, Important): lectio's own ini value for `ef-september-ember-sat` is not the September Ember Saturday's Mass at all -- it is St Matthew's (Ezek 1:10-14 / Matt 9:9-13, the calling of Matthew, 21 September), the identical shape C26/C27 document. Both the real Epistle and the real Gospel are explicitly labelled in the Missal (\"Lectio Epistolae\" precedes Heb 9:2-12), so this entry, like C27, needed no \"last lesson before the Gospel\" convention judgement call. tools/bootstrap_lectionary.ml's own [colitur_keys] now excludes this ini section from translation rather than using its wrong value, and [ember_saturday_corrections] hand-authors the real Missal citation instead. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 40, not 46 -- the IDENTICAL 6 civil years C27 above names (2013, 2019, 2024, 2030, 2041, 2047), where 21 September (St Matthew) falls on a Saturday and coincides with the September Ember Saturday itself, so the SAINT wins outright and these six rows never reach this entry -- the same 91-day/13-week weekday coincidence between 21 September and 21 December that explains C27's own gap, confirmed against `date -d` for all six years, not merely by arithmetic. The other four Ember entries (Advent Wednesday/Friday, September Wednesday/Friday) were checked against both scans and are correct as lectio already had them -- these two Saturdays are the only Ember exceptions. 40 + 6 = 46, the full domain, no residue.")
(expected_rows 40))
((id C29)
(citation "RG 17(a) (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii\") for the PRIVILEGE; the Missal's own Sanctissimi Nominis Iesu Mass propers, both scans, word for word: \"Lectio Actuum Apostolorum. Act. 4, 8-12\" / \"Sequentia sancti Evangelii secundum Lucam. Luc. 2, 21\" (docs/research/scan1.txt:6579-6608, scan2.txt:7225-7297) -- the Sunday shape's own citation, distinct from C16's fallback shape immediately above")
(verdict colitur)
(note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-holy-name-sunday`, the primary RG 17(a) shape (a genuine Sunday 2-5 January), had NO lectionary entry of its own before this task -- Rite_ef.Temporal_ef already computed the right slug/rank/colour (RG 91 entry 14, {!Rite_ef.Precedence_ef.entry_14_movable_band}), but tools/bootstrap_lectionary.ml's own [colitur_keys] used to WIDEN lectio's \"ef-christmas-sunday-0\" ini section onto this slug too, by analogy, on the (WRONG) assumption that Holy Name Sunday shares the Sunday-within-the-Octave's own Mass -- DISPROVED by missalemeum's own independent extraction for the two real Holy Name Sundays in its 2026-2027 window (test/fixtures/missalemeum-ef-2026-2027.txt, 2026-01-04/2027-01-03: \"Acts 4:8-12\"/\"Luke 2:21\", title \"Holy Name of Jesus\"), then confirmed against the Missal itself, twice, both scans (above) -- see [colitur_keys]'s own CORRECTED note in bootstrap_lectionary.ml for the full account of the analogy error this replaces. Season and Slug_f already agree on every occurrence (Layer A's own alias for \"ef-christmas-sunday-0\"/\"ef-holy-name-sunday\" -- the SAME underlying fact the generator's old, wrong widen also used, only one of the two uses was ever mistaken), so this entry's own guard is an EXACT match, `diffs = [ First_f; Gospel_f ]`, not a subset. 26 of the 46 years in the fixture's own 2005-2050 span DO have a Sunday 2-5 January -- the complement of C16's own 20 fallback years (26 + 20 = 46, no residue) -- derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 26.")
(expected_rows 26))
((id C30)
(citation "NOT RG 17(a) itself -- CORRECTED, fix round 1 (coordinator review): RG 17(a) (scan1.txt:396-402) states only the day-identity privilege (\"festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit a die 2 ad 5 ianuarii, secus die 2 ianuarii\"), nothing about ferial Masses -- this is the Missal's own MASS-PROPERS rubric for the Most Holy Name of Jesus (docs/research/rules-register.md's own account, \"the Mass propers' own rubric for this feast\", already correct there and now matched here), printed immediately BEFORE the Sunday-shape Mass heading, not after it, both scans, word for word: \"Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut die 1 ianuarii\" (docs/research/scan1.txt:6522-6526) / \"Diebus ferialibua a 2 ad fi ianuarii Missa dicitur ut die 1 ianuarii\" (scan2.txt:7213-7217 -- OCR-garbled there, \"ferialibua\"/\"fi\" for \"ferialibus\"/\"5\"; scan1 is clean and missalemeum's own extraction corroborates the citation this rubric produces, so the reading is not in doubt) -- ON FERIAL DAYS from 2 to 5 January, THE SAME MASS AS 1 JANUARY (the Circumcision, Titus 2:11-15/Luke 2:21) IS SAID")
(verdict colitur)
(note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-christmas-1-{monday,tuesday,wednesday,thursday,friday}` (2-5 January, EXCLUDING Saturday) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback. Given a direct entry now (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]), Season/Slug_f already agree with lectio on every occurrence (this window is entirely BEFORE C1's own 6-13 January boundary, and lectio's own naming for 2-5 January is already the SAME \"ef-christmas-0\"/\"ef-christmas-sunday-0\" family Layer A already aliases), so this entry's own guard is an EXACT match, `diffs = [ First_f; Gospel_f ]`. `ef-christmas-1-saturday` is DELIBERATELY excluded, both from the direct entry and from this predicate's own slug list -- RG 78's BVM Saturday Office wins that day unconditionally whenever nothing else does (Rite_ef.Temporal_ef's own [bvm_saturday_names], already built, ef-bvm-saturday task), confirmed directly against missalemeum's own title on this window's own two such Saturdays (\"II Mass of the B. V. M. -- Vultum Tuum\", never \"Feria\") -- giving it this entry's own citation would be wrong exactly there; it remains C25's own narrower population, unaffected by this task (see C25's own note).
CORRECTED, fix round 1 (coordinator review, Important 1): this note previously described its own 91-row population as \"C25's OWN former population, before this task narrowed it\" -- FALSE, the single load-bearing sentence an auditor would check. C25's former (pre-this-task) population contributed only 44 of these 91 rows (Wednesday 6, Thursday 19, Friday 19 -- C25's own fix-round-3 breakdown, unchanged); the remaining 47 (Monday 20, Tuesday 14, Wednesday 7, Friday 6) were NEVER in C25 at all -- C25's own fix-round-2 note already states Monday/Tuesday were excluded because they resolved to lectio's OWN value and passed outright. Those 47 rows PREVIOUSLY MATCHED lectio (both engines independently landing on the identical, now-known-wrong \"Gal 4:1-7\"/\"Luke 2:33-40\" value -- colitur's via the old mis-widened `ef-christmas-sunday-0` borrow, lectio's via its own equivalent fallback) and are NEWLY allow-listed here because colitur is now right and lectio still is not -- the SAME \"both engines independently fell back... and silently AGREED on the wrong answer... newly VISIBLE only because colitur is now correct\" shape this file's own C33/C34 already describe correctly. Re-derived directly against the real resolver (colitur's own PRE-fix binary vs POST-fix, both checked against the lectio fixture for every one of the 91 dates, not asserted): inherited 44 (Wed 6/Thu 19/Fri 19, matching C25's own totals exactly, corroboration not derivation), newly visible 47 (Mon 20/Tue 14/Wed 7/Fri 6), 44+47=91, no residue. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 91.")
(expected_rows 91))
((id C31)
(citation "NOT RG 17(a) -- CORRECTED, fix round 1 (coordinator review): this is a DIFFERENT Mass-propers rubric block, ~230 scan1 lines after Holy Name's own (C30 above), sitting within HOLY FAMILY'S OWN feast propers (RG 17(b)'s feast, page header \"Sanctae Familiae Iesu, Mariae, Ioseph\", scan1.txt:6751/scan2.txt:7412) -- printed immediately BEFORE the \"DOMINICA PRIMA post Epiphaniam / SANCTAE FAMILIAE\" Mass heading, the same structural position C30's own rubric occupies relative to Holy Name's heading, both scans: \"Diebus ferialibus a 7 ad 12 ianuarii ante dominicam I post Epiphaniam occurrentibus, dicitur Missa de festo Epiphaniae\" (docs/research/scan1.txt:6753-6757; scan2.txt:7413-7415 corroborates, OCR-garbled -- \"occurentibus\"/\"Epipbaniee\" -- but the reading is not in doubt: scan1 is clean and missalemeum's own extraction corroborates the citation this rubric produces) -- ON FERIAL DAYS from 7 to 12 January occurring BEFORE the first Sunday after Epiphany (Holy Family), THE MASS OF THE FEAST OF EPIPHANY (Isa 60:1-6/Matt 2:1-12) IS SAID")
(verdict colitur)
(note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-christmas-2-{monday,tuesday,wednesday,thursday,friday}` (7 January through the day before Holy Family Sunday, EXCLUDING Saturday -- the same RG 78 exclusion C30 above explains, confirmed again on this window's own remaining such Saturdays) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback. This slug family's own civil dates ALREADY carried a Season/Slug_f/Colour_f divergence against lectio BEFORE this task (lectio's own season boundary starts Time-after-Epiphany at Epiphany itself, RG 72-73's own later boundary colitur keeps; lectio's own week numbering has no Holy Family to wait for, so its own slug for these dates is already \"ef-time-after-epiphany-1-<weekday>\", not \"ef-christmas-2-...\"), previously absorbed by C1's own [jan_6_13_slug] allow-list (which already names this family, unchanged) -- this task's own fix (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) adds a First_f/Gospel_f divergence on top of that EXISTING one, so this entry's own guard is a SUBSET, `subset diffs [Season;Slug_f;Colour_f;First_f;Gospel_f]` with at least one of First_f/Gospel_f present (a feria's Epistle and Gospel are independent lookups and can each happen to already coincide). `ef-christmas-2-saturday`, though deliberately given no DIRECT entry (the same RG 78 reasoning as C30), is included in THIS entry's own slug list for a different, genuinely observed reason: its own step-3 walkback CAN land on `ef-holy-name-sunday` in years where that Sunday immediately precedes it, inheriting that slug's newly-corrected citation (C29 above) as a side effect, with no direct entry of its own involved at all -- confirmed directly against the real resolver, not theorised (`ef-christmas-1-saturday`'s own walkback structurally cannot reach that far forward, since its own window, 2-5 January, is entirely before Holy Name Sunday can exist; C25's own unchanged population is the proof this genuinely does not happen there). Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 89. REFRESHED (BVM Saturday Mass, 2026-08-17): 89 -> 103. Fourteen Christmastide Saturdays that previously matched C1 now match here instead, their citation difference having changed shape while the season difference persists; this entry's own subset already admits both.")
(expected_rows 103))
((id C32)
(citation "NOT RG 17(a) -- CORRECTED, fix round 1 (coordinator review): the SAME Holy Family propers block C31 above cites, its own next sentence, a named formula, both scans: \"post eandem dominicam vero Missa de eadem dominica In excelso throno, ut infra... Haec Missa dicenda est diebus ferialibus huius hebdomadae\" (docs/research/scan1.txt:6758-6851; scan2.txt:7415-7434 corroborates \"In excelso throno... ut infra\", OCR-garbled elsewhere in the same passage, reading not in doubt) -- \"MISSA DOMINICAE PRIMAE post Epiphaniam\", Epistle \"Lectio Epistolae beati Pauli Apostoli ad Romanos. Rom. 12, 1-5\" (scan1.txt:6875-6877), Gospel the SAME pericope as Holy Family's own Sunday Mass, Luke 2:42-52 (scan1.txt:6885-6905) -- said on the FERIAL DAYS of Holy Family Sunday's OWN week")
(verdict colitur)
(note "Task 9 (branch ef-lectionary, layer-4 oracle): `ef-time-after-epiphany-1-{monday,tuesday,wednesday,thursday,friday}` (Holy Family Sunday's own week, EXCLUDING Saturday -- the same RG 78 reasoning as C30/C31) had NO lectionary entry of their own before this task, falling through to step 3's preceding-Sunday walkback (which happened to land on Holy Family Sunday's OWN citation, Col 3:12-17/Luke 2:42-52 -- a DIFFERENT Epistle from this entry's own Rom 12:1-5, the same Mass propers' own distinction between the Sunday and its week's ferias, both scans). This slug family's own civil dates ALREADY carried a bare Season/Colour_f divergence against lectio BEFORE this task (SAME slug on both sides here, unlike C31 -- lectio's own season boundary alone, RG 72-73 vs Epiphany), previously absorbed by C1's own generic 6-13 January window (no [Slug_f] involved, so C1's own [jan_6_13_slug] gate was never even reached) -- this task's own fix (tools/bootstrap_lectionary.ml's own [epiphanytide_opening_entries]) adds a First_f/Gospel_f divergence on top, so this entry's own guard is a SUBSET, `subset diffs [Season;Colour_f;First_f;Gospel_f]` with at least one of First_f/Gospel_f present, the same \"not necessarily both\" reasoning C31 explains. Checked AFTER C19 deliberately in test_differential.ml's own [layer_c_reason]: C19's own 7 \"week shift\" years (2008/2013/2019/2030/2036/2041/2047) already explain this SAME slug family's own citation divergence there, for a DIFFERENT root cause (the week-numbering offset, not this task's own fix) -- this entry must not re-claim those rows under a citation-content reason C19 already owns, so its own population is exactly the OTHER (non-shift-year) civil dates; C19's own count is independently confirmed UNCHANGED at 45 by this same test run. `ef-time-after-epiphany-1-saturday`, though deliberately given no direct entry, is included in this entry's own slug list for the SAME step-3-ripple reason C31's own note explains for `ef-christmas-2-saturday` -- confirmed directly against the real resolver, not theorised. Derived directly from the OCaml comparator's own failure output (test_layer_c_counts_match_citations), not hand-counted first and cross-checked after: 99.")
(expected_rows 99))
((id C33)
(citation "\"IN FESTO SSMI CORPORIS CHRISTI, I classis\": \"Lectio Epistolae beati Pauli Apostoli ad Corinthios. 1 Cor. 11, 23-29\" / \"Sequentia sancti Evangelii secundum Ioannem. Io. 6, 56-59\" -- docs/research/scan1.txt:21867-21917, corroborated scan2.txt:24084-24172, word for word both scans")
(verdict colitur)
(note "Task 9 (branch ef-lectionary, layer-4 oracle): Corpus Christi (`ef-corpus-christi`, a real, directly-computed Rite_ef.Temporal_ef office, I class, movable, Thursday after Trinity Sunday) had NO lectionary entry at all before this task -- not a renamed/mis-widened value the way C29/C30/C31/C32 above are, a genuine ABSENCE: lectio's own EF ini has no equivalent section either. Both engines independently fell back to Trinity Sunday's own preceding-Sunday citation (\"Rom 11:33-36\") and silently AGREED on the wrong answer -- the \"Holy Thursday was violet in both\" shape this project's own CLAUDE.md names for exactly this reason (layer 3 shares colitur's own bootstrap lineage in general, and here shares an architectural gap specifically, not lineage) -- so this divergence is newly VISIBLE only because colitur is now correct (tools/bootstrap_lectionary.ml's own [movable_feast_entries]), not because either engine changed what it already agreed on. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- Corpus Christi is never impeded by anything else in the 1962 calendar, so it is the observed office on all 46 years). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 46, the full domain, no residue.")
(expected_rows 46))
((id C34)
(citation "\"IN FESTO SACRATISSIMI CORDIS IESU, I classis\": \"Lectio Epistolae beati Pauli Apostoli ad Ephesios. Ephes. 3, 8-12 et 14-19\" / \"Sequentia sancti Evangelii secundum Ioannem. Io. 19, 31-37\" -- docs/research/scan1.txt:22030-22095, corroborated scan2.txt:24284-24336 (the Epistle's own \"et 14-19\" clause is OCR-truncated to \"3, 8-19\" on this second scan alone; its printed body text otherwise matches word for word, and scan1's own transcription is unambiguous, so this is a scan-quality gap, not a genuine disagreement between the two printings), word for word both scans")
(verdict colitur)
(note "Task 9 (branch ef-lectionary, layer-4 oracle): the SAME shape as C33 immediately above, for the Sacred Heart of Jesus (`ef-sacred-heart`, I class, movable, Friday after the Octave of Corpus Christi). No lectionary entry at all before this task; both engines independently fell back to Trinity Sunday's own preceding-Sunday citation (\"1 John 3:13-18\") and silently agreed on the wrong answer, the identical \"both wrong, both silent\" shape C33 explains. Gated on the literal slug and `diffs = [ First_f; Gospel_f ]` exactly (identity already agrees -- never impeded, observed on all 46 years). Derived directly from the OCaml comparator's own failure output, not hand-counted first and cross-checked after: 46, the full domain, no residue.")
(expected_rows 46))
((id C35)
(citation "RG 299 (docs/research/scan1.txt:1096-1098), the general ferial rule: \"Item propriam Missam habent omnes feriae temporis Quadragesimae et Passionis necnon Quatuor Temporum Adventus et septembris. In reliquis feriis dicitur Missa dominicae praecedentis, NISI A RUBRICIS ALITER PROVISUM SIT\" -- restated in the propers (scan1.txt:4933-4935): \"Per totum annum, si dicenda sit infra hebdomadam Missa de feria, adhibetur Missa dominicae praecedentis, NISI PROPRIA MISSA ASSIGNETUR\". The assigned Mass here is the Missal's own printed heading \"Missa dominicae I post Pentecosten\" (scan1.txt:21758), whose readings are \"Lectio Epistolae beati Ioannis Apostoli. 1 Ioann. 4, 8-21\" (scan1.txt:21801-21802) and \"Sequentia sancti Evangelii secundum Lucam. Luc. 6, 36-42\" (scan1.txt:21813-21814).")
(verdict colitur)
(note "The ferias of the week after Trinity Sunday. Trinity is the temporal identity of its own Sunday, so a plain walkback to \"the preceding Sunday's Mass\" lands on Trinity's -- which is what colitur did until this fix and what lectio still does. But RG 299's rule carries an explicit exception, and this week is the clearest instance of it in the year: the Missal prints a NAMED formula for the week immediately after Trinity, precisely BECAUSE the feast has taken the Sunday's own Mass. colitur now resolves these ferias at step 2 from that formula and never reaches step 3's walkback at all. This is test_oracle.ml's own M26 shape 2(a), fixed rather than allow-listed there. Note what this does NOT cover: M26 shape 2(b), the ferias of Christ the King's week, where no proper Mass is assigned (checked directly -- no rubric precedes that Mass heading, scan1.txt:39163ff) and RG 299's DEFAULT therefore governs, making the preceding Sunday's Mass genuinely Christ the King's own. Gated on the literal 5-slug list, requiring the citation difference to be present, and admitting a colour difference only alongside it -- nine of these days are also unoccupied IV-class Saturdays carrying C17's own BVM-Office colour divergence, and a colour-only Saturday must still fall to C17 rather than be absorbed here. No Thursday in the list: Corpus Christi is Easter+60, which IS this week's Thursday every year, so the slug never exists -- the bootstrap's own reachability guard refuses to emit it. Derived from the comparator's own failure output, not hand-counted: 69.")
(expected_rows 69))
|