diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-25 16:31:15 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-25 16:31:15 +0200 |
| commit | b9cb5060d2ba5aa7f7a9d6d97e3bced112e30fed (patch) | |
| tree | 35c76256683b4feb8f0031eb3b505c0a8ee410e0 /data/of/expected-divergences-litcal.sexp | |
| parent | 6559a9b19451ce82a7d71281e25899acbcee2d49 (diff) | |
| download | colitur-b9cb5060d2ba5aa7f7a9d6d97e3bced112e30fed.tar.gz colitur-b9cb5060d2ba5aa7f7a9d6d97e3bced112e30fed.zip | |
test(of): validate Phase 1's Ordinary Time resumption against litcal
Adds a sixth-lineage external validation layer for the OF rite module's
Phase 1 temporal cycle, targeting the single highest-risk function that
report named: the two-block Ordinary Time week arithmetic (Normae n. 44),
which has no external witness anywhere in Phase 1's own suite and whose
output selects the Mass formulary, not merely a label.
Witness: litcal (Liturgical Calendar API), Apache-2.0, already archived
and SHA-256-pinned by the sibling lectio project. AELF was considered and
correctly excluded earlier (its CGU forbids redistribution) -- litcal is
what it was replaced with.
- tools/extract_litcal_ordo.py verifies all twelve archived
calendar-YYYY-en.json files (2024-2035; the task brief said eleven,
but twelve are actually pinned in lectio's manifest -- all twelve are
used) against lectio's own manifest.tsv, then builds one fixture
spanning the contiguous 4382-day range those twelve liturgical-year
files cover.
- test/fixtures/litcal-temporal-2024-2035.sexp: one row per day, season
and (where witnessed) Ordinary Time week, with full provenance,
licence, per-year Easter dates and the row-selection rules in its own
header.
- test/test_litcal_of.ml calls Temporal_of.temporal directly (no Rite.t)
and compares 1:1 against the fixture: zero Ordinary Time week
mismatches on all 1876 witnessed days (zero tolerance, no allow-list);
the only season divergence class is the Sacred Triduum, which litcal
tags with a season value colitur's vocabulary deliberately has none of
-- one cited allow-list entry, data/of/expected-divergences-litcal.sexp,
36 rows, exact.
- Mutation-tested: dropping the backward-from-34 adjustment reddens this
layer (1511 of 1876 days) plus three pre-existing Phase 1 tests; the
mutation was not committed.
Does not touch lib/rites/rite_ef/, data/ef/, or lib/rites/rite_of/ --
this validates Phase 1, it does not change it. Full suite: 786 tests via
dune test, 791 via make check, exit 0 both; lib/bin diff empty throughout.
Diffstat (limited to 'data/of/expected-divergences-litcal.sexp')
| -rw-r--r-- | data/of/expected-divergences-litcal.sexp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/data/of/expected-divergences-litcal.sexp b/data/of/expected-divergences-litcal.sexp new file mode 100644 index 0000000..c75538a --- /dev/null +++ b/data/of/expected-divergences-litcal.sexp @@ -0,0 +1,72 @@ +; 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)) |
