aboutsummaryrefslogtreecommitdiff
path: root/data/ef/adjustments.sexp
blob: f41d0d18c0fd20a234daae6ca49bead4c2ac1240 (plain) (blame)
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
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
; data/ef/adjustments.sexp -- hand-authored overlay over data/ef/sanctoral.sexp
; (Task 11). NOT generated by tools/bootstrap_sanctoral.ml -- edit directly.
;
; Suppresses `vigil-of-christmas` (24 Dec, data/ef/sanctoral.sexp, lectio's
; own bootstrapped entry): it is the SAME celebration as colitur's temporal
; cycle's own `ef-nativity-vigil` (rite_ef/temporal_ef.ml's [named], also 24
; Dec, RG 91 entry 5), not a second, distinct one. Once the sanctoral layer
; is live, that date would otherwise carry two candidates for one feast.
; Recorded as an Overlay directive rather than filtered out of the bootstrap
; or special-cased in code, per the task brief -- an auditable, diagnosable
; removal (Overlay.apply's own diagnostic fires if this slug is ever absent,
; e.g. after a re-bootstrap that renames it), not a silent drop.
;
; RG16(a) task (docs/research/rules-register.md §6.0): corrects one of
; data/ef/sanctoral.sexp's six `(subject Lord)` entries, inherited unchecked
; from lectio's own `class = lord` field (tridentine-calendar.ini) --
; `most-holy-name-of-mary` (12 Sep): calendarium line "Sanctissimi Nominis
; Mariae, III classis" -- "Nominis Mariae", the Name of MARY, not of the
; Lord, with no counter-evidence found anywhere (the "D. N. I. C." formula
; the genuinely Lord-tagged entries carry, e.g. 6 Aug "IN TRANSFIGURATIONE
; D. N. I. C.", is simply absent here, and nothing else in the calendarium
; suggests otherwise). This tag has no behavioural effect either way today
; ({!Precedence_ef.band}'s entry 14, the only place [subject] is tested for
; a II-class candidate, requires [Class2]; this entry is [Class3]) -- kept
; for the data's own accuracy, not because anything currently reads it.
;
; The tag [Bvm] itself carries no further systematic meaning in this
; codebase beyond "not Lord" -- after this correction it exists on exactly
; this one entry, while every other Marian feast (the Assumption, the
; Immaculate Conception, the Nativity of the BVM, ...) stays `(subject
; Saint)`. Nothing reads [Bvm] specifically; {!Subject.t}'s four-way split
; is not fully exercised by this codebase's own logic, only [Lord] is.
;
; RG16(a) task, fix round 1 (CRITICAL finding, reverted): a companion Edit
; here previously also retagged `purification-of-the-blessed-virgin-mary`
; (2 Feb) to [Bvm], on the same calendarium-title argument ("B. Mariae
; Virg.", not "D. N. I. C."). REVERTED -- the user has ruled: follow the
; oracle. missalemeum (this project's designated EF oracle) treats the
; Purification as taking an occurring II-class Sunday's place OUTRIGHT, with
; NO commemoration of the Sunday (`2020-02-02`, `2014-02-02`: title
; "Purification of the Blessed Virgin Mary", `"commemorations": []`),
; exactly RG 16(a)'s own "festum Domini" treatment -- and NOT the treatment
; it gives an ordinary Marian feast on a Sunday (`2019-09-08`, the Nativity
; of the BVM: title "XIII Sunday after Pentecost", the FEAST demoted to a
; commemoration, the Sunday observed -- the opposite pattern). Genuine
; primary-text counter-evidence for the Marian reading remains on record
; (RG 120(b): the white-colour rule groups 2 February under "B. Mariae
; Virg.", a SEPARATE category from "Domini" -- register §6.0 quotes it in
; full), so the calendarium TITLE and the oracle's BEHAVIOUR disagree here;
; the user's ruling resolves that disagreement in the oracle's favour for
; this codebase's own purposes, not by declaring the calendarium argument
; wrong. See register §6.0 for the full account of both sides.
;
; ef-rebootstrap (2026-08-12): both directives re-examined against the
; regenerated source (tridentine-calendar.ini, SHA-256 1b303ef2...), which
; independently fixed several of the same defects this file was written to
; patch. Neither directive was removed -- reasoning below, per the task's
; own instruction to decide deliberately rather than delete on sight.
;
; `Edit most-holy-name-of-mary` -- the base bootstrap no longer needs this
; correction: the regenerated INI's own `[most-holy-name-of-mary]` section
; has DROPPED its `class = lord` field entirely (confirmed by direct grep
; against the source), so `tools/bootstrap_sanctoral.ml`'s `parse_subject`
; now falls through to its own default, `Subject.Saint` -- not `Lord` --
; before this overlay ever runs. Checked what {!Overlay.apply}'s [Edit]
; actually does with a directive whose target slug is present but whose
; field is no longer wrong, rather than assuming: [Edit] has no notion of
; "already correct" -- it looks up the slug, and if found (as this one
; still is) unconditionally folds every field_edit over the current value,
; firing NO diagnostic either way (overlay.ml's [apply_directive], the
; [Edit] branch: the only diagnostic is "slug not present", never "already
; matches"). So this is not a no-op: it still forces `Saint -> Bvm` on
; every run, identically to before, just starting from a different base
; value than it used to. Decision: KEEP, for two independent reasons, not
; one -- (1) DATA PRECISION, unaffected by the base bootstrap's own fix:
; the calendarium's "Sanctissimi Nominis Mariae" title names Mary
; specifically, so [Bvm] remains the more accurate tag than the generic
; [Saint] default, on the same textual grounds as the original entry
; above, regardless of what lectio's own `class` field happens to say this
; week. (2) REGRESSION DEFENCE: because [Set_subject] is unconditional, it
; also now stands as a guard against `class = lord` ever being
; RE-introduced for this slug by a future lectio regeneration -- the
; overlay would still force the result away from [Lord] (the one subject
; value {!Precedence_ef.band}'s RG 16(a) branch behaviourally reads),
; rather than silently letting a re-introduced bootstrap defect through.
; Removing the directive now would trade a currently-harmless redundancy
; for the loss of that guard.
;
; `Suppress vigil-of-christmas` -- re-verified, not assumed: `[vigil-of-
; christmas]` (24 Dec) is still present, unchanged, in both the
; regenerated INI and the regenerated `data/ef/sanctoral.sexp` (still the
; same duplicate of `rite_ef/temporal_ef.ml`'s own `ef-nativity-vigil`
; this directive was written to remove), so `Layer.mem` still finds it and
; {!Overlay.apply}'s [Suppress] branch still fires its ordinary
; slug-present path (no diagnostic) exactly as before. Nothing about this
; regeneration touched the reason this directive exists; kept unchanged.
;
; `Edit eusebius-confessor` -- NEW (ef-rebootstrap fix round 1, F3): this
; new entry's own bootstrapped colour, `Red`, is a LECTIO DATA DEFECT,
; found by checking the primary scan directly rather than trusting lectio's
; ini or missalemeum's own `:r` colour tag, which agree with each other but
; not with the Missal -- exactly the "two non-primary witnesses agreeing
; against the primary text" trap this project's own transcription-audit
; task already named once. `missale-romanum-1962.pdf`, 14 August, the
; commemoration's own proper: *"Eodem die 14 augusti / S. Eusebii Conf. /
; Commemoratio / Missa Iustus, ut in festo S. Pauli primi Eremitae, die 15
; ianuarii..."* -- "Conf." (Confessor, not Martyr), and the borrowed Mass
; "Iustus" is the SAME Mass 15 January's own St Paul the First Hermit uses
; -- a Confessor, white in both lectio's own data and colitur's
; (`paul-the-first-hermit`, `data/ef/sanctoral.sexp`) -- for the Common of
; Confessors. Corroborated negatively: lectio gives WHITE to every other
; Confessor/Abbot commemoration in its own data (`maur-abbot`, `giles`,
; `remigius`, `didacus`, `ubaldus`, `hilarion`, `sabbas`, `silvester`,
; `alexis`) -- Eusebius Confessor is the one exception, with no textual
; support found for it. No behavioural impact today (`Commemoration_only`
; entries are never the OBSERVED celebration, so this colour is never
; printed by the current pipeline -- but `Record`/rendering will read it
; the moment a template does), fixed for the data's own accuracy via the
; SAME overlay mechanism as the other two directives, since
; `data/ef/sanctoral.sexp` is generated and the source is upstream. Logged
; as a lectio-side generator/data defect in docs/research/rules-register.md
; for a future generator fix, not merely patched here silently.
;
; `Add commemoration-of-st-peter` -- NEW (ef-holyname-rg110 task, RG 110).
; A genuine DATA GAP in lectio's own source, not merely a colitur bootstrap
; miss: `~/git/projects/lectio/internal/caldata/tridentine-calendar.ini` has
; no 30 June entry for this at all (checked directly, `grep -n '30 June'`
; equivalent), so there is nothing for `tools/bootstrap_sanctoral.ml` to
; have picked up even correctly. RG 110's own text (docs/research/rules-
; register.md §4, Caput XIV): "In Officio et Missa S. Petri semper fit
; commemoratio S. Pauli, ET VICISSIM" -- in the Office and Mass of EITHER
; Peter or Paul, a commemoration of the OTHER is always made -- confirmed a
; THIRD time by the calendarium's own June table, BOTH photographic scans,
; word for word: "In Commemoratione S. Pauli Ap., III classis. /
; Commemoratio S. Petri Ap." -- exactly the SAME pattern already present in
; the base bootstrap for the other two RG 110 pairs (25 January's
; `conversion-of-st-paul` + `peter`; 22 February's `chair-of-st-peter` +
; `paul`), just missing here. `Precedence_ef.admit`'s own RG 110 mechanism
; (precedence_ef.ml) looks this slug up by name whenever
; `in-commemoratione-sancti-pauli-apostoli` is the day's own observed office
; -- a distinct slug from `peter` (25 January), because `peter` is already a
; DIFFERENT dated entry and this codebase's slugs are date-canonical, one
; date per slug (design spec §3.2). Class3/Commemoration_only/Saint, the
; SAME shape as `peter`/`paul`'s own two entries; names copied verbatim from
; `peter`'s own entry (the identical saint, the identical commemoration
; text, on a second date) -- NOT independently sourced from a missalemeum
; title (missalemeum shows no commemoration on this date at all, checked
; directly against its own fixture rows for both 2026 and 2027: neither
; year's `In Commemoratione Sancti Pauli Apostoli` row carries any
; commemoration -- missalemeum has the SAME gap this directive closes,
; verdict colitur in data/ef/expected-divergences-missalemeum.sexp's own
; M19). Colour Red: this ENTRY's own field has no independent primary-source
; pin (a bare "Commemoratio" line's own colour is not independently stated
; by the calendarium the way a full feast's class-and-colour line is -- the
; same honestly-flagged inference shape this file's own `romanus`/`eusebius-
; confessor` history already documents elsewhere in this project), chosen to
; match `paul`'s own entry and the HOST DAY's own Red -- and the host day's
; own Red IS now primary-sourced (fix round 1, coordinator finding F4), not
; merely RG 117's generic apostle/martyr default: RG 124(c), scan-verified
; word for word, `missale-romanum-1962.pdf`: "124. Item adhibetur color
; ruber in Officio et Missa de festis: ... c) Commemorationis S. Pauli
; Apostoli (30 iunii)" -- red is ALSO used in the Office and Mass of the
; feasts of ... (c) the Commemoration of St Paul the Apostle (30 June) --
; naming this exact date by number. Inert either way today
; (Commemoration_only entries are never the OBSERVED celebration, so this
; entry's OWN colour is never printed by the current pipeline, the same
; note `Edit eusebius-confessor` above makes for its own colour field).
;
; `Add major-litanies` -- NEW (ef-major-litanies task). RG 80 (Caput X, "De
; Litaniis maioribus et minoribus", §A "De Litaniis maioribus"; all three
; primary documents -- both photographic scans AND the electronic
; transcription -- word for word, no divergence to adjudicate): "80.
; Litaniae maiores assignatae sunt diei 25 aprilis; si vero eo die
; occurrit dominica Paschatis vel feria II post Pascha, transferuntur in
; sequentem feriam III." RG 81, same division: "81. De Litaniis maioribus
; nihil fit in Officio, sed tantum in Missa. Earum autem commemoratio non
; est habenda commemoratio 'de Tempore'." RG 109(f) (Caput XVI, "De
; Commemorationibus"): "f) de Litaniis maioribus, in Missa" -- a
; privileged commemoration. The calendarium's own April table (all three
; documents, e.g. the transcription: "iv c vii 25 Litania Maior. - S.
; MARCI EVANGELISTAE, II classis.") prints "Litania Maior" as part of 25
; April's own descriptive line, alongside St Mark, not as a second,
; separately class-numbered row -- corroborating RG 81's "nihil fit in
; Officio" the same way Maurice's own "Commemoratio ... " line (no class
; number) corroborates a demoted feast elsewhere in this project (see
; precedence_ef.ml's [band], top-of-function guard).
;
; MODELLING DECISION: `Commemoration_only`, `Fixed(4, 25)`, the same shape
; as `commemoration-of-st-peter` above -- because RG 81 denies the
; Litanies any Office standing at all ("nihil fit in Officio"), so they
; can never be the OBSERVED day (RG 91's table enumerates "dies
; liturgici", Office days, and this is explicitly none), only ever a Mass
; commemoration. `Precedence_ef.disposition`/`.privilege_of` wire RG
; 109(f)'s privilege and RG 80's own transfer condition (both cited in
; full at `Precedence_ef.major_litanies_slug` and its two call sites); see
; that module for the reasoning and precedence_ef.ml's own comments for
; why the transfer reuses the existing RG 96 placement machinery
; ({!Colitur_kernel.Precedence.Transfer}) rather than new machinery.
;
; `rank Class4`: RG 91's Table of Precedence has NO row for the Major
; Litanies at all (RG 81 denies them Office standing; the calendarium's
; own printed line above confirms it), so there is no class this data
; field could faithfully report -- the same situation `band`'s own
; top-of-function guard already documents for every `Commemoration_only`
; entry ("never had a row in the table for that occasion to begin with").
; `Class4` is chosen as the lowest/inertest value available, deliberately
; NOT `Class1` (which would make `Precedence_ef.privilege_of`'s branch (b),
; "of a I-class day", grant this entry Privileged status for the WRONG
; cited reason, silently making the (f) branch this task wires dead code
; again). `band` ignores rank entirely for any `Commemoration_only`
; candidate (checked first, unconditionally); `admit`'s only rank-keyed
; test for an ordinary (non-privileged) II-class-Sunday commemoration
; never applies here either, since this entry is always Privileged. No
; live behavioural consequence either way -- recorded as a deliberate,
; honestly-flagged placeholder, not a citation.
;
; `colour Violet`: NOT independently scan-verified for this specific
; entry (out of this task's scope -- Mass propers are Plan 4, `citations`
; stays `()`). Matches, by internal consistency, the colour this same
; codebase already assigns the sibling Minor Litanies/Rogation days
; (`rite_ef/temporal_ef.ml`'s own Rogation branch: `~colour:Colour.Violet`
; for RG 87's Monday/Tuesday before Ascension) -- both are "Litaniae",
; major and minor, sharing the same penitential/processional character;
; RG 80/81/109(f) themselves say nothing about colour. Inert today
; regardless (`Commemoration_only` entries are never OBSERVED, so this
; field is never printed by the current pipeline -- the same note `Edit
; eusebius-confessor` above makes for its own colour field).
;
; `subject Saint`: no clean fit among {Lord, Bvm, Saint, Temporal} -- the
; Litanies are tied to no particular Divine Person or to the BVM (RG 80/81
; name no one), and are far from an ordinary saint's feast either, but
; `Subject.Temporal` is reserved for the temporal cycle's OWN office
; (`subject.mli`), which this Fixed, sanctoral-origin entry structurally
; is not. `Saint` is the same "no special exclusion applies" default this
; codebase's own other `Commemoration_only` sanctoral entries already use
; (RG 110's own Peter/Paul companion entries, `commemoration-of-st-peter`
; immediately below) -- its only live behavioural consequence anywhere in
; this codebase, RG 112(a)/(d)'s Lord/BVM mutual-exclusion rules, is one
; this entry should NOT trigger either way, so `Saint` is safe as well as
; consistent.
;
; `names`: English ("The Major Litanies") is a plain translation of RG
; 80's own "Litaniae maiores", not independently primary-sourced (no
; English title exists in any of the three documents, all Latin). Polish
; ("Litanie Większe") likewise a plain vernacular rendering, not verified
; against any external Polish liturgical reference -- flagged here rather
; than presented as sourced, the same honesty this file's own
; `commemoration-of-st-peter` entry gives its own colour field above.
;
; ef-sanctoral-audit (2026-08-14, branch ef-sanctoral-audit): a full
; extraction of the CALENDARIUM (both photographic scans, missale-romanum-
; 1962.pdf and Missale Romanum 1962_text.pdf, pdftoppm-rendered page images
; read directly, not their pre-existing OCR text layers, which the task
; brief's own worked examples show are unreliable for exactly this kind of
; check) against all 327 base entries plus the two prior overlay Adds.
; Method and full findings: docs/research/rules-register.md's own audit
; rewrite (bucket recomputation) and .superpowers/sdd/2026-08-12-colitur-
; rg16a/sanctoral-audit-report.md. Two shapes of finding follow.
;
; `Add barbara` -- a genuine DATA GAP, the same shape as the ef-rebootstrap
; task's five (agnes-secundo/boniface-martyr/eusebius-confessor/evaristus/
; theodore, above): both scans, 4 December, carry a second line under S.
; Petri Chrysologi's own entry, "Commemoratio S. Barbarae Virg. et Mart."
; -- a real, standing commemoration, absent from `data/ef/sanctoral.sexp`
; AND from lectio's own `tridentine-calendar.ini` (checked directly: its
; 12-04 block holds only `peter-chrysologus`, then jumps straight to
; `sabbas`/12-05) -- not a colitur bootstrap miss, the same upstream gap
; shape the ef-rebootstrap task's own five entries already documented.
; Rank `Class3`: bootstrapped by the SAME convention every other
; `Commemoration_only` entry in this file uses (see the rank-inference note
; below) -- the calendarium gives a bare "Commemoratio", no class numeral,
; for any commemoration, hers included. Colour Red: RG 124(e), scan-
; verified word for word (both photographic scans, "XVIII - De coloribus
; paramentorum", "C) De colore rubro"): "adhibetur color ruber in Officio
; et Missa de festis: ... e) Sanctorum Martyrum, quorum colitur aut
; martyrium..." -- red for the feast of a Martyr's own martyrdom, and the
; calendarium's own line names her "Virg. et Mart." Names: English a plain
; translation of "Barbarae"; Polish a plain vernacular rendering -- neither
; independently primary-sourced, the same honesty this file's own
; `commemoration-of-st-peter` entry already gives its names.
;
; Eighteen `Edit ... ((Set_colour ...))` directives -- confirmed lectio/
; missalemeum bootstrap DATA DEFECTS, the identical shape and root cause as
; `eusebius-confessor` above (checked individually against
; `~/git/projects/lectio/internal/caldata/tridentine-calendar.ini`: every
; one of these 17 slugs' wrong colour is already wrong AT THE SOURCE, not
; introduced by colitur's own bootstrap step -- e.g. `martha`'s own Polish
; field there already reads "św. Marty, Dziewicy" (Virgin, no "Męczennicy"
; suffix), contradicting that SAME ini record's own `colour = red`). Two
; rules, both scan-verified word for word against RG 124 ("XVIII - De
; coloribus paramentorum", missale-romanum-1962.pdf, both photographic
; scans agree): (124.b) "adhibetur color ruber in Officio et Missa de
; festis: ... Sanctorum Apostolorum et Evangelistarum, in eorum die
; natalicio, EXCEPTO FESTO S. IOANNIS (27 decembris)" -- red for an
; Apostle/Evangelist's OWN feast day, John's 27 December the one named
; exception (already correctly White in the base data, untouched here);
; (124.e) "Sanctorum Martyrum, quorum colitur aut martyrium" -- red for a
; Martyr's own martyrdom. Every plain Confessor/Bishop/Virgin entry below
; (no "Mart."/"Mm." in the calendarium's own line, not an Apostle) is
; White by RG 117's five-colour residual (not itself independently
; RG-124-cited the way the red corrections are, since 124 enumerates the
; RED exceptions, not a white default) -- flagged as inferred-by-category,
; the same distinction the design spec draws throughout. `peter` (25
; January, a commemoration of the Apostle nested under `conversion-of-st-
; paul`) is corrected by CONSISTENCY with this file's own established
; precedent, not a fresh RG 124 citation of its own: `paul`'s sibling
; commemoration (22 February, under `chair-of-st-peter`) already carries
; Red in the base bootstrap, and `commemoration-of-st-peter` above (30
; June) was deliberately set Red "to match the host day's own Red" by an
; earlier task -- the identical RG 110 Peter/Paul-pair shape, so `peter`
; is the one inconsistent survivor, not a newly-discovered rule.
((id ef-adjustments)
  (directives
    ((Suppress vigil-of-christmas)
      (Edit most-holy-name-of-mary ((Set_subject Bvm)))
      (Edit eusebius-confessor ((Set_colour White)))
      (Add
        ((date (Fixed (month 6) (day 30)))
          (cel
            ((slug commemoration-of-st-peter)
              (names
                ((en "St. Peter") (pl "\197\155w. Piotra, Aposto\197\130a")))
              (rank Class3) (status Commemoration_only) (colour Red)
              (subject Saint) (citations ()) (layer ef-universal)))))
      (Add
        ((date (Fixed (month 4) (day 25)))
          (cel
            ((slug major-litanies)
              (names ((en "The Major Litanies") (pl "Litanie Większe")))
              (rank Class4) (status Commemoration_only) (colour Violet)
              (subject Saint) (citations ()) (layer ef-universal)))))
      (Add
        ((date (Fixed (month 12) (day 4)))
          (cel
            ((slug barbara)
              (names
                ((en "St. Barbara") (pl "\197\155w. Barbary, Dziewicy i M\196\153czennicy")))
              (rank Class3) (status Commemoration_only) (colour Red)
              (subject Saint) (citations ()) (layer ef-universal)))))
            ; A SECOND genuine gap, found by the same audit and DELIBERATELY NOT
      ; FILLED -- recorded here, in the tracked tree, because the five prior
      ; upstream-gap precedents live in this file and this is where the next
      ; auditor will be standing. Both scans' 25 December row reads
      ; "IN NATIVITATE DOMINI, I classis cum oct." followed by "In secunda
      ; Missa: Commemoratio S. Anastasiae Mart." -- she is scoped to the
      ; SECOND of Christmas's three Masses, and it is the only per-Mass
      ; scoping notation in the whole twelve-month calendarium.
      ; Celebration.t attaches a commemoration to a DATE with no Mass scope,
      ; and temporal_ef builds exactly one office per civil day, so adding
      ; her the way `barbara` was added would ship a false positive on every
      ; 25 December. The obvious action on rediscovery is the wrong one.
      ; Open modelling question, register section 6.
(Edit prisca ((Set_colour Red)))
      ; REVERTED by the fix-round review: conversion-of-st-paul (25 Jan),
      ; peter (25 Jan) and chair-of-st-peter (22 Feb) were set Red here on
      ; RG 124(b), whose own qualifier "in eorum die natalicio" does not
      ; reach them -- and RG 120(f), fifteen lines ABOVE 124(b) in the same
      ; column, NAMES both feasts by name and by date in the enumeration of
      ; WHITE: "f) S. Ioannis Ap. et Ev. (27 decembris); Cathedrae S. Petri
      ; (22 februarii); Conversionis S. Pauli (25 ianuarii); Nativitatis S.
      ; Ioannis Baptistae (24 iunii)". RG 475(e) confirms it a third time:
      ; "in festis nataliciis Apostolorum et Evangelistarum, NECNON in
      ; festis Cathedrae S. Petri et S. Barnabae Ap." -- the Missal names
      ; the Chair separately precisely because "natalician feasts of
      ; Apostles" does not include it. lectio and missalemeum both said
      ; white because both were right.
      ; `peter` (25 Jan) additionally rested on "match the host day's own
      ; Red", by analogy to commemoration-of-st-peter (30 June). That works
      ; there because 30 June's host is red BY NAME under RG 124(c); here
      ; the host is white BY NAME under RG 120(f), so the same precedent
      ; yields White. Its other anchor, `paul` @ 22 Feb (Red in base data),
      ; is unverified bootstrap on a day the Missal calls white and is now
      ; an open question in the register, not a precedent.
      ; ROOT CAUSE, recorded so it is not repeated: the audit's page-image
      ; method was applied to the CALENDARIUM and not to the RUBRIC. RG 124
      ; was read from the OCR text layer, where the two-column interleave
      ; shreds RG 120(f) across rows belonging to RG 115, renders its clause
      ; label as "/ )" and hyphen-splits "Ca-"/"thedrae" -- so a text-layer
      ; grep for "Cathedr" returns nothing, while RG 124's own enumeration
      ; survives the same interleave cleanly. A text-layer read of that
      ; chapter finds 124 and STRUCTURALLY CANNOT find 120(f).
      (Edit vitus ((Set_colour Red)))
      (Edit margaret ((Set_colour Red)))
      (Edit apollinaris ((Set_colour Red)))
      (Edit agapitus ((Set_colour Red)))
      (Edit josaphat ((Set_colour Red)))
      (Edit john-of-san-fecundo ((Set_colour White)))
      (Edit ephrem-of-syria ((Set_colour White)))
      (Edit julia-of-falconieri ((Set_colour White)))
      (Edit john-gualbert ((Set_colour White)))
      (Edit camillus-de-lellis ((Set_colour White)))
      (Edit jerome-emiliani ((Set_colour White)))
      (Edit liborii ((Set_colour White)))
      (Edit martha ((Set_colour White)))
      (Edit alphonsus-liguori ((Set_colour White)))
      (Edit augustine ((Set_colour White)))
      (Edit rose-of-lima ((Set_colour White)))
      (Edit mark-i ((Set_colour White)))

      ; --- ef-lectionary Task 6: the eight class-3 saints whose Mass the
      ; 1962 Missal prints IN FULL, with its own Epistle and Gospel.
      ;
      ; Fifteen class-3 saints reached this branch with no readings at all
      ; (data/ef/sanctoral.sexp, `(citations ())` -- they are exactly the
      ; fifteen `status Feast` entries in that file that have none, checked
      ; not assumed). They are the 6 March - 5 April cluster whose RANKS
      ; lectio's own generator fix of 2026-08-12 restored without
      ; backfilling readings, and lectio has no Commons concept to have
      ; backfilled them from.
      ;
      ; The Missal splits them cleanly in two, and the split is NOT the one
      ; the plan predicted (it expected propers for Benedict, Patrick,
      ; Thomas Aquinas and Gregory the Great; only Thomas Aquinas has one).
      ; The seven that the Missal sends to a Common are routed through
      ; data/ef/commons.sexp instead -- see that file's header for the whole
      ; method, the Commune Sanctorum's own substitution rubric, and the
      ; per-Common evidence. The eight below are the ones the Missal prints
      ; a full Mass for at the date itself, so the readings are ASSIGNED
      ; ("certa Epistola aut certum Evangelium in Missali ... assignata",
      ; the Commune's own proviso) and belong on the celebration.
      ;
      ; They are Edits here, not corrections to data/ef/sanctoral.sexp,
      ; because that file is GENERATED (tools/bootstrap_sanctoral.ml) and
      ; its source is upstream in lectio -- the same reasoning the colour
      ; corrections above already carry. If lectio ever gains these
      ; readings, `Set_citation` is idempotent (overlay.ml's own
      ; [apply_field_edit] replaces the matching part), so the Edits stay
      ; harmless and stand as a regression guard.
      ;
      ; EVERY value below was read in three independent places before being
      ; written: docs/research/scan1.txt (CMAA scan), docs/research/scan2.txt
      ; (Internet Archive scan -- a DIFFERENT printing), and the rendered
      ; page images of missale-romanum-1962.pdf. Both text layers interleave
      ; the two-column page, so no value rests on a single reading. There is
      ; NO oracle for any of this: layer 3 (lectio) has no readings for these
      ; feasts at all, and layer 4 (missalemeum, 2026-2027) never observes
      ; one of them in either year.
      ;
      ; OBSERVABILITY, measured against the real resolver over 1950-2200:
      ; only three of the eight are EVER the observed office --
      ; thomas-aquinas (6 days, e.g. 2000-03-07, 2011-03-07), john-of-god
      ; (5 days, e.g. 2011-03-08, 2038-03-08), francis-of-paola (2 days,
      ; 2008-04-02, 2160-04-02). The other five fall on dates always held by
      ; a Lenten or Passiontide feria that outranks a III-class feast, so
      ; they are only ever COMMEMORATIONS, and colitur emits readings for
      ; the observed office only. Their citations are correct data with no
      ; live witness today; they are recorded rather than omitted so that a
      ; diocesan overlay or a rank change finds them already sourced.

      ; 7 March, "S. Thomae de Aquino, Conf. et Eccl. Doct., III classis":
      ; "Lectio libri Sapientiae. Sap. 7, 7-14" / "Sequentia sancti
      ; Evangelii secundum Matthaeum. Mt. 5, 13-19".
      ; scan1:27701-27704 + 27699-27700; scan2:30588-30589 + 30643-30646;
      ; page image p. 484. (scan2's OCR renders the Gospel chapter as "6";
      ; scan1 and the page image both print 5, and the pericope is "Vos
      ; estis sal terrae", Mt 5:13-19.)
      (Edit thomas-aquinas
        ((Set_citation First "Wis 7:7-14") (Set_citation Gospel "Matt 5:13-19")))

      ; 8 March, "S. Ioannis a Deo Conf., III classis":
      ; "Lectio libri Sapientiae. Eccli. 31, 8-11" / "Sequentia sancti
      ; Evangelii secundum Matthaeum. Mt. 22, 34-46".
      ; scan1:27732-27734 + 27769-27770; scan2:30698-30699 + 30733-30736;
      ; page image p. 485. NOTE: the Epistle is the Common of a Confessor
      ; not a Bishop's own, but the GOSPEL is not (that Common has Luke
      ; 12:35-40) -- the Missal prints him a full Mass with an assigned
      ; Gospel, so this is a proper, not a Common. (scan2's OCR renders the
      ; Gospel's last verse as 48; scan1 and the page image print 46, and
      ; the pericope ends at "neque ausus fuit quisquam ex illa die eum
      ; amplius interrogare" = Mt 22:46.)
      (Edit john-of-god
        ((Set_citation First "Ecclus 31:8-11") (Set_citation Gospel "Matt 22:34-46")))

      ; 10 March, "Ss. Quadraginta Martyrum, III classis":
      ; "Lectio Epistolae beati Pauli Apostoli ad Hebraeos. Hebr. 11, 33-39"
      ; / "Sequentia sancti Evangelii secundum Lucam. Luc. 6, 17-23".
      ; scan1:27841-27842 + 27832-27834; scan2:30766-30768 + 30821-30823.
      (Edit forty-holy-martyrs-of-sebaste
        ((Set_citation First "Heb 11:33-39") (Set_citation Gospel "Luke 6:17-23")))

      ; 18 March, "S. Cyrilli Ep. Hierosolymitani, Conf. et Eccl. Doct.,
      ; III classis": "Lectio libri Sapientiae. Eccli. 39, 6-14" /
      ; "Sequentia sancti Evangelii secundum Matthaeum. Mt. 10, 23-28".
      ; scan1:27948-27949 + 27953-27955; scan2:30890-30896 + 30948-30951;
      ; page image p. 489. This Epistle is the Common of Doctors' own
      ; labelled ALTERNATIVE ("Item altera Epistola pro Doctoribus") -- here
      ; it is assigned outright at the date, which is what makes it his.
      (Edit cyril-of-jerusalem
        ((Set_citation First "Ecclus 39:6-14") (Set_citation Gospel "Matt 10:23-28")))

      ; 24 March, "S. Gabrielis Archangeli, III classis":
      ; "Lectio Danielis Prophetae. Dan. 9, 21-26" / "Sequentia sancti
      ; Evangelii secundum Lucam. Luc. 1, 26-38".
      ; scan1:28149-28150 + 28175-28176; scan2:31070-31074 + 31158-31160;
      ; page images pp. 493-494.
      ;
      ; THE ONE GENUINE CONFLICT BETWEEN THE TWO PRINTINGS, and the reason
      ; this task's cross-check discipline exists. scan1's edition prints
      ; the Gospel citation as "Luc. 2, 26-38" -- confirmed on the page
      ; image, so it is a TYPOGRAPHICAL ERROR IN THAT PRINTING, not an OCR
      ; artefact. scan2's edition prints "Luc. 1, 26-38". Three independent
      ; things settle it for Luke 1: (a) scan2's own text; (b) the pericope
      ; printed under the citation in BOTH editions is "Missus est Angelus
      ; Gabriel ... Ecce ancilla Domini", which is Luke 1:26-38 -- Luke
      ; 2:26-38 is Simeon and Anna, a different passage entirely; (c) the
      ; SAME edition that misprints it here prints the identical pericope
      ; two pages later for the Annunciation (25 March, page image p. 496)
      ; and cites it correctly as "Luc. 1, 26-38".
      (Edit gabriel-the-archangel
        ((Set_citation First "Dan 9:21-26") (Set_citation Gospel "Luke 1:26-38")))

      ; 27 March, "S. Ioannis Damasceni, Conf. et Eccl. Doct., III classis":
      ; "Lectio libri Sapientiae. Sap. 10, 10-17" / "Sequentia sancti
      ; Evangelii secundum Lucam. Luc. 6, 6-11".
      ; scan1:28305-28306 + 28319-28320; scan2:31326-31328 + 31344-31346;
      ; page image p. 497. The 10-17 (here) versus 10-14 (John of
      ; Capistrano, next entry) split is real and agreed by all three
      ; sources: this pericope runs on through "Et reddidit iustis mercedem
      ; laborum suorum" (Wis 10:17), his does not.
      (Edit john-damascene
        ((Set_citation First "Wis 10:10-17") (Set_citation Gospel "Luke 6:6-11")))

      ; 28 March, "S. Ioannis de Capistrano Conf., III classis":
      ; "Lectio libri Sapientiae. Sap. 10, 10-14" / "Sequentia sancti
      ; Evangelii secundum Lucam. Luc. 9, 1-6".
      ; scan1:28346-28348 + 28412-28413; scan2:31382-31387 + 31445-31447;
      ; page image p. 498 (the pericope there ends at "et in vinculis non
      ; dereliquit illum" = Wis 10:14).
      (Edit john-of-capistrano
        ((Set_citation First "Wis 10:10-14") (Set_citation Gospel "Luke 9:1-6")))

      ; 2 April, "S. Francisci de Paula Conf., III classis":
      ; "Lectio Epistolae beati Pauli Apostoli ad Philippenses. Philipp. 3,
      ; 7-12" / "Sequentia sancti Evangelii secundum Lucam. Luc. 12, 32-34".
      ; scan1:28585-28586 + 28587-28588; scan2:31560-31562 + 31625-31630.
      ; (scan2's OCR of the Gospel citation is shredded to "Lac. U, 32-34";
      ; scan1 prints it cleanly and the pericope is "Nolite timere,
      ; pusillus grex", Luke 12:32-34.)
      (Edit francis-of-paola
        ((Set_citation First "Phil 3:7-12") (Set_citation Gospel "Luke 12:32-34"))))))