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
|
; data/of/expected-divergences-litcal.sexp -- of-litcal-layer task
; (2026-08-25)'s cited allow-list for the litcal external-validation layer
; (test/test_litcal_of.ml), fixture window 2023-12-03..2035-12-01 (twelve
; litcal liturgical years, 4382 civil days).
;
; ONE active entry. The Ordinary Time WEEK comparison (the actual risk this
; layer exists to validate, Normae n. 44's two-block resumption arithmetic)
; carries NO allow-list at all -- see test_litcal_of.ml's own
; [test_ordinary_time_week_matches] comment for why a witnessed week is
; zero-tolerance, not an "expected divergence" shape.
; L1 -- OPEN BY DESIGN, adjudicated "colitur" (a deliberate, cited design
; decision, not a defect on either side). Fires on every litcal row tagged
; EASTER_TRIDUUM: Holy Thursday's own evening Mass of the Lord's Supper,
; Good Friday, and Holy Saturday, across all twelve fixture years -- 3
; dates x 12 years = 36 rows, exactly.
;
; litcal's own data model gives the Sacred Triduum a season value of its
; own (`liturgical_season: EASTER_TRIDUUM`), distinct from both LENT and
; EASTER. colitur's `Vocab_of.season` has no such value: it keeps the
; whole civil day of Holy Thursday, Good Friday and Holy Saturday inside
; `Lent`, per lib/rites/rite_of/temporal_of.ml's own top-of-module
; citation --
;
; Normae n. 28 (PRIMARY): "Tempus Quadragesimae decurrit a feria IV
; Cinerum ad Missam in Cena Domini EXCLUSIVE" -- Lent runs from Ash
; Wednesday up to (excluding) the evening Mass of the Lord's Supper. At
; colitur's own civil-day granularity (one season per date, never a
; sub-day boundary), the excluded boundary is an EVENT within Holy
; Thursday's own civil day, not an earlier day -- so the whole day stays
; Lent.
;
; Normae n. 30 (PRIMARY, independent second anchor): "Dominicae huius
; temporis appellantur dominicae I, II, III, IV, V in Quadragesima.
; Dominica sexta, in qua initium sumit Hebdomada sancta, dicitur...
; 'Dominica in palmis de Passione Domini'" -- Holy Week (Palm Sunday
; through the Vigil) is Lent's OWN sixth week by the Missal's own prose,
; not a season outside Lent's numbering.
;
; Normae Titulus II's own six subsection headings (II-VI): FIVE are
; literally called a "tempus"; "Triduum paschale" is deliberately NOT --
; a real textual signal that the document's own authors did not count
; the Triduum among the season vocabulary a day's season field needs to
; name, corroborated by the Missal's own Mass-propers structure printing
; "HEBDOMADA SANCTA" and "SACRUM TRIDUUM PASCHALE" as two separate
; headings, neither titled "tempus" either.
;
; So litcal's EASTER_TRIDUUM is a genuine, defensible IMPLEMENTATION
; choice (giving the Triduum its own practical season tag, useful for an
; API consumer), and colitur's `Lent` is an equally genuine, primary-
; source-argued READING of the same Normae text that declines to invent a
; sixth season value the text itself does not name. Neither side is wrong;
; this is a vocabulary question the two engines answer differently by
; design, not a computation either got wrong -- verdict "colitur" here
; means "colitur's own choice is deliberate and cited", not "litcal is in
; error".
;
; The ROW SELECTION that produces exactly 36, not 24 or 48, is explained
; in test/fixtures/litcal-temporal-2024-2035.sexp's own header and
; tools/extract_litcal_ordo.py's own top-of-file comment: Holy Thursday
; carries TWO non-vigil litcal rows on the same civil date (the Chrism
; Mass, LENT, and the evening Mass of the Lord's Supper, EASTER_TRIDUUM);
; the Chrism row is excluded upstream (in the fixture generator, not
; here) so the evening Mass -- the day's own actual public/parish liturgy
; -- represents the date, giving Holy Thursday the SAME season shape as
; Good Friday and Holy Saturday (each of which has only one non-vigil row,
; always EASTER_TRIDUUM) rather than an inconsistent 2-of-3 split.
((id L1)
(citation "Normae nn. 28, 30; Normae Titulus II's own six subsection headings")
(verdict colitur)
(note "Holy Thursday (evening Mass)/Good Friday/Holy Saturday: litcal tags EASTER_TRIDUUM, colitur has no Triduum season value and keeps the whole day Lent -- a cited design decision, not a defect.")
(expected_rows 36))
; L2, L3 -- CLOSED, REMOVED (W2 fix, CLAUDE.md, temporal_of.ml). These two
; entries used to record a defect from task 6 (2026-08-26): the litcal layer
; extended beyond season/week to GRADE and IDENTITY, and both fired on the
; SAME date, the SAME then-known, then-PINNED-NOT-FIXED gap test_rite_of.ml
; used to record: Normae n. 35(a)'s "Dominica infra octavam Nativitatis, vel,
; ea deficiente, die 30 decembris" fallback was never reached by
; {!Rite_of.Temporal_of.temporal} in a year 25 December is itself a Sunday
; (its Holy-Family test lived inside the Sunday-only dispatch arm of
; [sunday_slug], so the 30-December fallback [holy_family] itself computed
; correctly was never actually consulted there). 2033 was this fixture's own
; live witness. {!Rite_of.Temporal_of.temporal} now consults
; {!Rite_of.Temporal_of.holy_family} directly, independent of weekday, so
; litcal and colitur agree on 30 December 2033 on both axes -- test_litcal_of
; .ml's own [test_no_holy_family_2033_divergence] asserts this directly.
; `expected_rows` for both would now be 0 (no divergent rows remain), so the
; entries are removed rather than kept as zero-value ghosts, the same
; "CLOSED, REMOVED" discipline data/ef/expected-divergences-missalemeum.sexp
; already follows for a closed entry.
; L4 -- litcal's own [grade_lcl] text "celebration with precedence over
; solemnities" (this fixture's own display word for Tabula I.1/I.2) is ALSO
; used for Trinity Sunday and Corpus Christi, every one of the fixture's 12
; years (24 rows). precedence_of.ml's own Tabula I.2 transcription --
; "Nativitas Domini, Epiphania, Ascensio et Pentecostes; dominicae Adventus,
; Quadragesimae et Paschae; feria IV Cinerum; hebdomada sancta a feria II ad
; V" -- names neither: both are "Sollemnitates Domini", Tabula I.3 (band
; 30), the SAME entry {!Rite_of.Precedence_of.band} gives ChristKing, a
; structurally identical "Solemnity of the Lord anchored to a Sunday within
; Ordinary Time" -- and litcal ITSELF labels ChristKing "SOLEMNITY", not
; this text, offered as corroborating (not conclusive -- this task did not
; inspect litcal's own source) evidence that litcal's own grade vocabulary
; is coarser/inconsistent here, not a considered different Tabula reading.
((id L4)
(citation "Normae/Tabula I.2's own enumeration (precedence_of.ml); litcal's own inconsistent treatment of ChristKing vs Trinity/CorpusChristi")
(verdict colitur)
(note "Trinity Sunday and Corpus Christi, all 12 fixture years: litcal's grade text implies Tabula I.1/I.2 (band 10/20); colitur (Tabula I.3, band 30) matches the primary text's own I.2 enumeration, which names neither.")
(expected_rows 24))
; L5 -- litcal's own data is STALE. St Mary Magdalene (22 July) reads grade
; "Memorial" on every one of the 10 years this fixture witnesses her (2 of
; the 12 years: an ordinary per-annum Sunday there instead, on both sides,
; not a witness). The Congregation for Divine Worship's decree "Sanctae
; Mariae Magdalenae" (3 June 2016, Prot. n. 708/2015, AAS 108 (2016)
; 798-799) raised her to FEAST -- colitur's data/of/amendments/
; 005-mary-magdalene-rank.sexp applies it (band 70); litcal's grade text
; shows no sign of having done so.
((id L5)
(citation "CDW decree \"Sanctae Mariae Magdalenae\", 3 June 2016, Prot. n. 708/2015, AAS 108 (2016) 798-799; data/of/amendments/005-mary-magdalene-rank.sexp")
(verdict litcal)
(note "St Mary Magdalene, 22 July, 10 witnessed years: litcal's grade text (\"Memorial\") does not reflect the 2016 CDW decree raising her to Feast; colitur's shipped amendment does.")
(expected_rows 10))
; L6, L7 -- a genuine, UNADJUDICATED tie-break, found live, not anticipated.
; Easter 2033 is 17 April, putting the movable Solemnity of the Sacred
; Heart (Easter+68) on 24 June, the SAME fixed date as the Nativity of St
; John the Baptist -- an exact Tabula I.3/band-30 tie.
; Colitur_kernel.Precedence.resolve's own tie-break (precedence.ml's
; [compare_by], Slug.compare when bands are equal) hands the day to
; "birth-of-saint-john-the-baptist" alphabetically, and
; Rite_of.Precedence_of.disposition Transfers the loser (Sacred Heart) to
; 25 June. litcal's own answer is the OPPOSITE: Sacred Heart keeps 24 June,
; and John the Baptist is shown a day EARLY, on 23 June. NEITHER answer is
; dictated by any citation this task found -- the Tabula ranks both
; candidates at the identical entry, and nothing in the Normae or IGMR
; extracts a Lord-outranks-Saint rule WITHIN one Tabula entry the way, e.g.,
; RG 112(a) does on the EF side for a narrower case. NOT fixed here (a
; kernel-level tie-break policy is out of this task's own scope regardless
; of verdict).
;
; UPDATE 2026-08-28: a CANDIDATE citation has since been found, and it
; points AGAINST colitur's current answer. Tabula I.3 does not name a bare
; category; it enumerates one in a definite order -- "Sollemnitates DOMINI,
; beatae Mariae Virginis, et SANCTORUM in Calendario generali inscriptae".
; The Sacred Heart is a Solemnity of the Lord; the Nativity of St John the
; Baptist is a Solemnity of a Saint. Read as ordered, that entry puts the
; Lord first, litcal's answer is right and colitur's alphabetical tie-break
; is reaching a conclusion the text already settles. colitur's own EF side
; models exactly this shape already -- RG 91 entry 14's "primum mobilia,
; deinde fixa" is a within-entry order, and Precedence_ef.band expresses it
; by scaling the whole table x10 so a half-row sits between its neighbours.
; Precedence_of.band is scaled x10 too, so I.3 could carry 30/31/32 with no
; structural change.
;
; The counter-argument, which is why this stays OPEN rather than becoming a
; fix: Tabula entry 4 marks its own internal order with explicit a) b) c) d)
; lettering, so the drafters had a way to signal ordering and used it. Entry
; 3 is a plain "A, B, et C" list. Entry 2's own list ("Nativitas Domini,
; Epiphania, Ascensio et Pentecostes...") cannot be an ordering at all,
; since those days can never collide with each other -- which is evidence
; that a list inside an entry need not imply precedence.
;
; What would settle it: any authoritative source treating 24 June in a
; Sacred-Heart-collision year -- an ordo, a Notitiae reply, or a
; conference decree. The collision is rare (Easter must be late enough to
; put Easter+68 on 24 June) and none of the project's current witnesses
; covers such a year. Verdict stays open; behaviour unchanged.
((id L6)
(citation "precedence.ml's compare_by (Slug.compare tie-break); no Tabula/Normae text found ranking Sacred Heart above/below the Nativity of John the Baptist at equal band")
(verdict open)
(note "2033-06-23 (NativityJohnBaptist, grade) and 2033-06-25 (ImmaculateHeart, grade, downstream of the same collision): the Sacred-Heart/John-Baptist tie on 24 June 2033, GRADE axis. See L7 for the identity axis.")
(expected_rows 2))
((id L7)
(citation "precedence.ml's compare_by (Slug.compare tie-break); no Tabula/Normae text found ranking Sacred Heart above/below the Nativity of John the Baptist at equal band")
(verdict open)
(note "2033-06-23 (NativityJohnBaptist) and 2033-06-24 (SacredHeart): the same tie L6 records for grade, IDENTITY axis.")
(expected_rows 2))
; L8, L9 -- a SECOND, newly-found instance of precedence_of.mli's own
; documented "KNOWN UNIMPLEMENTED FOURTH RULE" (Normae n. 60's own "ad
; proximiorem diem" -- the nearest day, not necessarily the nearest
; FOLLOWING one -- constrained to forward-only search by
; Colitur_kernel.Rite.t.transfer_target's own strictly-later contract).
; That section's own worked example is St Joseph falling exactly ON Palm
; Sunday (Normae n. 56(f), anticipated to 18 March); this is a DIFFERENT
; date shape reaching the SAME underlying limitation. Easter 2035 is 25
; March, putting St Joseph's fixed 19 March on the MONDAY of Holy Week
; (Easter-6, a privileged Tabula I.2 feria, not a Sunday) -- Normae n. 5's
; own "following Monday" rule (keyed to a privileged SUNDAY) does not apply
; here at all, so this falls to n. 60's general rule 3, forward-only on
; colitur's side, landing Joseph on 3 April (Easter+9). litcal's own answer
; anticipates BACKWARD instead, to 17 March -- the Saturday immediately
; before Palm Sunday, a generalisation of n. 56(f)'s own underlying
; principle this task found no primary-source text for -- offered as
; informative evidence of what a fix would need to produce, not as a
; citation substituting for one. NOT fixed here, per this task's own brief.
((id L8)
(citation "precedence_of.mli's own \"KNOWN UNIMPLEMENTED FOURTH RULE\" (Normae n. 60, n. 56(f)); Colitur_kernel.Rite.t.transfer_target's strictly-later contract")
(verdict colitur)
(note "2035-03-17 (StJoseph, grade): a second instance of the documented forward-only transfer_target limitation -- St Joseph impeded by Holy Monday (not Palm Sunday itself) is sent forward to Easter+9 instead of anticipated backward. See L9 for the identity axis.")
(expected_rows 1))
((id L9)
(citation "precedence_of.mli's own \"KNOWN UNIMPLEMENTED FOURTH RULE\" (Normae n. 60, n. 56(f)); Colitur_kernel.Rite.t.transfer_target's strictly-later contract")
(verdict colitur)
(note "2035-03-17 (StJoseph): the same known limitation L8 records for grade, IDENTITY axis.")
(expected_rows 1))
; L10 -- W3 (of-known-wrongs, 2026-08-26). Precedence_of.band now gives the
; two shipped movable BVM obligatory memorials (Mary, Mother of the Church;
; the Immaculate Heart of Mary) a sub-rank of 95, strictly between Tabula
; entries 9 and 10, rather than the ordinary 100 -- so a real collision with
; a FIXED obligatory memorial (e.g. 2011-06-13, Mater Ecclesiae vs Anthony
; of Padua) resolves in the Marian memorial's favour instead of falling to
; Colitur_kernel.Precedence.resolve's own alphabetical tie-break. Cited
; on a genuine primary source, not colitur's own invented rule: the CDWDS's
; own "Notification on the Memorial of the Blessed Virgin Mary, Mother of
; the Church" (24 March 2018 -- the same dicastery and signatories as the
; 11 February 2018 decree itself; published only on vatican.va, confirmed
; NOT in the AAS 2018 combined index) -- "In casu occurrentiae huius
; memoriae cum alia memoria ... in casu occurrentiae cum alia memoria
; alicuius Sancti vel Beati, ... memoria B.M.V. praevalere debet."
;
; litcal's own grade_lcl text is coarser than this: every
; Memoria_obligatoria reads "Memorial" regardless of colitur's own finer
; sub-rank, so the [100;110] bucket cannot represent 95 -- a genuine
; representational gap in litcal's own vocabulary, not a computational
; disagreement (the two engines still agree on WHICH day is observed; the
; identity axis is untouched by this fix and needed no new entry). Fires on
; every fixture row naming either entity where colitur's own band is
; exactly 95, on ANY date that entity is observed, not only a live
; collision date, because the sub-rank is unconditional. 15 rows over this
; fixture's 12 years, measured directly, not guessed.
((id L10)
(citation "CDWDS Notification on the Memorial of the BVM, Mother of the Church (24 March 2018); precedence_of.ml's movable_bvm_memorials")
(verdict colitur)
(note "MaryMotherChurch (11 years) and ImmaculateHeart (4 years): colitur bands both at 95 (between Tabula 9 and 10), which litcal's own coarse \"Memorial\" grade text cannot represent -- a cited design choice, not a defect.")
(expected_rows 15))
|