diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-25 23:51:36 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-25 23:51:36 +0200 |
| commit | 0994587b3694bb87d9a8ee32d60babf25c784acf (patch) | |
| tree | 5585419d69e0b89fa839aba94ef50a3297251fbc /lib | |
| parent | 98d698b261c75a287ba3992744032babfb6ad763 (diff) | |
| download | colitur-0994587b3694bb87d9a8ee32d60babf25c784acf.tar.gz colitur-0994587b3694bb87d9a8ee32d60babf25c784acf.zip | |
fix(of): correct subject over-match, provenance truth, and stale hazard comment
Four fixes from fix round 2 review:
classify_subject's "maria"/"b.m.v" substring test over-matched 12 saints
who merely carry "Maria" in their own name (Maximilian Mary Kolbe, John
Mary Vianney, Mary Magdalene among them) as Bvm. Replaced with an
explicit BVM_DATES table of the 13 genuinely Marian entries. Bvm 25 -> 13.
The provenance header claimed lectio is "never a source", which omitted
that slugs and English names both come from it. Corrected to state
exactly what does (slugs, en names) and does not (every substantive
field) come from lectio. A missing lectio file used to degrade silently
to a different SHA-256 with no en names and no warning; it now fails
loudly. lectio's own SHA-256 is now pinned alongside the Missal PDF's.
Four more entries carried a second pdftotext artifact distinct from the
letter-spacing already handled -- a combining diacritic rendered as a
stray spacing character (Kim Taegŏn/Chŏng Ha-sang, Đũng Lạc, Makhlūf,
Kęty). Hand-repaired the same way Peter Damian was, each corroborated by
the identical corruption recurring in the Missal's own index.
precedence_of.ml's PHASE 3 HAZARD comment about All Souls (2 November)
was asserting a gap that no longer exists now that OF sanctoral data
ships. Added test_all_souls_beats_an_ordinary_sunday, which resolves the
shipped All Souls entry against a real per-annum Sunday (2025-11-02)
through the actual Precedence.resolve pipeline, and updated the comment
to record the resolution instead of demanding it.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rites/rite_of/precedence_of.ml | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/lib/rites/rite_of/precedence_of.ml b/lib/rites/rite_of/precedence_of.ml index ab5e394..0587f0a 100644 --- a/lib/rites/rite_of/precedence_of.ml +++ b/lib/rites/rite_of/precedence_of.ml @@ -140,25 +140,44 @@ let band (ctx : Vocab_of.season Precedence.context) 30 (* Tabula I.3 -- universal or temporal-origin, never proper; see the [is_proper] comment above for why this is not [is_universal]. - ENTRY 3 HAS A SECOND CLAUSE THIS BRANCH DOES NOT IMPLEMENT (transcription - line 840, identical in the 1969 Calendarium at OCR line 936): - "Commemoratio omnium fidelium defunctorum" -- All Souls, 2 November. - Nothing constructs it: there is no sanctoral data yet (Phase 3), and - Vocab_of.rank has no constructor for it -- the 2002 Calendarium prints - 2 November UNGRADED ("Omnium Fidelium defunctorum" / "Commemoratio - omnium Fidelium defunctorum"), so the natural rank tag is ambiguous: - Memoria_obligatoria (band 100, loses to a per annum Sunday, WRONG), - Memoria_ad_libitum (band 120, worse), or Sollemnitas (band 30, the - right precedence but a rank word the source never applies to this - day). The 1969 Calendarium's own printing of this clause additionally - carries a qualifier the 2002 text drops -- "quae tamen locum cedit - dominicae occurrenti" -- an edition difference Phase 3 will also need. - PHASE 3 HAZARD: transcribing 2 November with the natural ungraded - rank will silently make it an ordinary weekday whenever it falls on a - Sunday, with every test in this branch still green, because no test - here knows entry 3 has a second clause. Phase 3 must settle how this - day is tagged (or add a dedicated slug test here, mirroring - [entry_2_named]) before shipping OF sanctoral data. *) + ENTRY 3'S SECOND CLAUSE -- RESOLVED, fix round 2, Task 1 + (2026-08-25; transcription line 840, identical in the 1969 + Calendarium at OCR line 936): "Commemoratio omnium fidelium + defunctorum" -- All Souls, 2 November. The 2002 Calendarium + prints 2 November UNGRADED ("Commemoratio omnium Fidelium + defunctorum"), so no grade word could be transcribed literally; + data/of/calendar-2002.sexp (tools/extract_of_calendar.py's own + ALL_SOULS_OVERRIDE) tags it [Sollemnitas] anyway, on this table's + own authority -- entry 3 itself names "Commemoratio omnium + fidelium defunctorum" in the SAME line as "Sollemnitates ... + Sanctorum in Calendario generali inscriptae", i.e. this table + places it at THIS precedence tier regardless of what word the + calendar page prints next to it. (For the record, the two + rejected alternatives were Memoria_obligatoria, band 100, loses + to a per annum Sunday, WRONG; and Memoria_ad_libitum, band 120, + worse.) Proved, not merely asserted: + test/test_precedence_of.ml's [test_all_souls_beats_an_ordinary_ + sunday] loads the SHIPPED "all-souls" entry and resolves it + against a real per-annum Sunday (2 November 2025, itself a + Sunday) through {!Colitur_kernel.Precedence.resolve} and + [rules] below -- not [band] in isolation -- confirming All Souls + is [observed], not the Sunday. + + STILL OPEN, deliberately out of this task's scope: the 1969 + Calendarium's own printing of this clause carries a qualifier + the 2002 text drops -- "quae tamen locum cedit dominicae + occurrenti" -- an edition difference not reconciled here. + + A LOSING All Souls -- unreachable on universal data (nothing + shipped outranks a Tabula I.3 Sollemnitas except the Triduum's + own Easter-bound window, which can never reach 2 November) but + real the moment an overlay puts something higher there -- + would be TRANSFERRED, not omitted: [disposition] below sends + any losing Sollemnitas forward via Normae n. 60, and nothing + distinguishes "Commemoratio" from an ordinary Sollemnitas for + that purpose. The same shape as [Rite_ef.Precedence_ef]'s own + [entry_14_movable_band] (CLAUDE.md, "Carried into Plan 4") -- + recorded here rather than built defensively against. *) else if c.cel.rank = Vocab_of.Sollemnitas && is_proper layer then 40 (* Tabula I.4 *) else if c.cel.rank = Vocab_of.Festum && c.cel.subject = Subject.Lord |
