summaryrefslogtreecommitdiff
path: root/test/cli.t
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 17:56:42 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-22 17:56:42 +0200
commitf4cc032d7e812d716ff6b5df8192f79a2560e8f0 (patch)
tree65c8c20456ebe66fd1ff2253428357b5b027ec0a /test/cli.t
parent60e87914718dd2c8e69bb89d8cc48d6bef9bfc74 (diff)
downloadcolitur-f4cc032d7e812d716ff6b5df8192f79a2560e8f0.tar.gz
colitur-f4cc032d7e812d716ff6b5df8192f79a2560e8f0.zip
feat(ef): the Gloria in excelsis, RG 431-432, deferring to Breviary 237-238
Phase 2 of celebrant-rubrics-phase1: colitur rubrics gains a fifth column, whether the Gloria is said. Follows the Creed's own seam exactly -- Rite.t.gloria, Liturgical_day.t.gloria, wired through calendar.ml the same way. RG 431(a)/432(a) defer the Gloria to the Breviary's own Te Deum rule (nn. 237-238), so te_deum is implemented as its own named predicate, cited clause by clause, not collapsed into a colour heuristic. 431(c) (Holy Thursday, the Easter Vigil Mass) and 432(b)/(d) (violet; a Requiem) are independent overrides checked ahead of the Te Deum-derived answer. Every clause this engine has no dimension to model (votive Mass classes, the wider n.302 "Missa festiva" categories) is stated as N/A with its own reasoning, not silently dropped. Validated against the FIUV universal Ordo (Gloria and Te Deum) and all three LMS editions (Gloria). A first pass over-trusted a clean-looking 15-for-15 FIUV contradiction of 237(b)'s own Septuagesima exception and replaced it with a blanket "every Sunday" rule; the evidence was itself corrupted -- the FIUV extractor recognised only one of the source's two Te Deum negations ("non dicitur", not "sine"), so every "sine Te Deum" Sunday read wrongly true. Fixed in tools/extract_fiuv_ordo.ml, fixture re-extracted, and the literal 237(b) reading restored once the corrected data confirmed it. A second bug surfaced alongside it (Palm/ Passion Sunday wrongly reading true via Temporal_ef.named's own table membership, then Christ the King wrongly reading false from an over-broad fix) is closed with an explicit two-slug exclusion. Domain-wide 1583-9999: every violet or Rose day is gloria=false except the Easter Vigil (RG 431(c) lex specialis), every Requiem is gloria=false, both measured exhaustively, zero exceptions. Mutation- proved: disabling 431(c) reddens 8 tests including all four oracle comparisons; disabling 238(c)'s feria-I-classis exclusion reddens exactly the dedicated Ash Wednesday unit test, a genuine blind spot in both oracle layers, reported rather than hidden. Two open, cited findings, neither fixed here (out of this task's "follow creed's exact seam" scope): a privileged Lenten/Passiontide feria carrying one commemoration reads Gloria=true in the LMS Ordo but Te-Deum=true/Gloria=false in FIUV -- the two oracles disagree with each other, not merely with colitur (data/ef/expected-divergences-lms.sexp L5, expected-divergences-fiuv.sexp F3); and a pre-existing, uncited Colour.Violet bug on Rogation Monday/Tuesday in Temporal_ef.temporal, surfaced by this comparison but root-caused as a separate defect (L6). day/readings verified byte-identical against a build from the branch tip before this task (v0.10.1's own tag predates an already-landed bissextile fix that legitimately changed both, so it is not the right baseline). 671 tests green (dune test); 678 with the exhaustive sweep (COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force, ~104s).
Diffstat (limited to 'test/cli.t')
-rw-r--r--test/cli.t40
1 files changed, 27 insertions, 13 deletions
diff --git a/test/cli.t b/test/cli.t
index 5bf8d83..8bd5b9f 100644
--- a/test/cli.t
+++ b/test/cli.t
@@ -210,9 +210,9 @@ separate command for the same mechanical reason `readings` is: `day`'s row
is fixed-width space-separated with a variable-length "+slug" tail.
$ colitur rubrics 2026 | head -3
- 2026-01-01 ef-circumcision own true
- 2026-01-02 ef-christmas-1-friday own false
- 2026-01-03 ef-christmas-1-saturday votive false
+ 2026-01-01 ef-circumcision own true true
+ 2026-01-02 ef-christmas-1-friday own false true
+ 2026-01-03 ef-christmas-1-saturday votive false true
$ colitur rubrics 2026 | wc -l
365
@@ -224,19 +224,19 @@ apply to it -- step 2 does (the day's own temporal slug in the lectionary),
tagged `own`. Contrast a real sanctoral saint with his own proper:
$ colitur rubrics 2038 | grep '^2038-03-08'
- 2038-03-08 john-of-god proper false
+ 2038-03-08 john-of-god proper false true
A saint with no proper of his own says his assigned Common (step 4):
$ colitur rubrics 2038 | grep '^2038-03-06'
- 2038-03-06 common-of-non-virgins-1 common false
+ 2038-03-06 common-of-non-virgins-1 common false true
A weekday with no proper of its own resumes the preceding Sunday's, never
its own observed slug -- 1 December 2025 is the Monday after Advent I, and
Advent's ferias have no Mass of their own (step 3):
$ colitur rubrics 2025 | grep '^2025-12-01'
- 2025-12-01 ef-advent-sunday-1 preceding-sunday false
+ 2025-12-01 ef-advent-sunday-1 preceding-sunday false false
3 January 2026 above ("votive") is the RG 78/309(a) Saturday Mass of Our
Lady, said IN PLACE of the day's own office's Mass while the office (an
@@ -257,9 +257,9 @@ diocesan overlay's local patron observed instead (no proper or Common of his
own in the fixture), the chain falls all the way back to step 3:
$ colitur rubrics 2026 --overlay fixtures/overlay-example-diocesan.sexp | grep '^2026-07-11'
- 2026-07-11 ef-time-after-pentecost-sunday-6 preceding-sunday false
+ 2026-07-11 ef-time-after-pentecost-sunday-6 preceding-sunday false true
$ colitur rubrics 2026 | grep '^2026-07-11'
- 2026-07-11 ef-time-after-pentecost-6-saturday votive false
+ 2026-07-11 ef-time-after-pentecost-6-saturday votive false true
`--lang`/`--raw`/`--sigla-*` are refused rather than silently ignored, unlike
`readings`: this row resolves no display name and no citation for any of
@@ -343,13 +343,13 @@ prints for the identical day, so the two cannot silently drift apart
again in either direction:
$ colitur --help | grep '^ rubrics date'
- rubrics date, formulary slug, source, creed -- TAB-separated
+ rubrics date, formulary slug, source, creed, gloria -- TAB-separated
$ colitur --help | sed -n '/^ rubrics date/{n;p}'
- 2026-01-01[TAB]ef-circumcision[TAB]own[TAB]true
+ 2026-01-01[TAB]ef-circumcision[TAB]own[TAB]true[TAB]true
$ colitur rubrics 2026 | grep '^2026-01-01' | sed $'s/\t/[TAB]/g'
- 2026-01-01[TAB]ef-circumcision[TAB]own[TAB]true
+ 2026-01-01[TAB]ef-circumcision[TAB]own[TAB]true[TAB]true
--version prints the version alone, to standard output, exit 0. Deliberately
not embedded in the help text above: this pin would then have to be edited
@@ -573,10 +573,24 @@ across many lines' own wrap points, not just the days whose DATA changed
-- confirmed directly (diffed the full sexp output line by line): every
difference is exactly this [said] shape change or a consequent wrap
shift, nothing else. Not a claim that [emit]'s FORMAT changed, only that
-individual records' pretty-printed SHAPE did:
+individual records' pretty-printed SHAPE did.
+
+9025 -> 9197 (Gloria, celebrant-rubrics-phase1 Phase 2): {!Liturgical_day.t}
+gained a [gloria] field, the same seam [creed] already used -- [emit
+--format sexp] dumps the whole record ({!Sexplib.Sexp.to_string_hum} over
+[Liturgical_day.sexp_of_t]) unlike [csv]/[json]/[xml] (a curated
+[View]/[Record] projection that has never included [creed] either, hence
+their own line counts above are UNCHANGED by this task -- confirmed by
+this cram file's own diff touching only the [sexp] count). All 365 of
+2027's records print a new [(gloria <bool>)] token (checked directly,
+[grep -c gloria]), but the wrap-point mechanics are the same cosmetic
+reflow the two entries above describe, not a fixed one-line-per-record
+addition: 2027-01-01's own record wraps [gloria] onto its own new line,
+while 2027-01-02's fits it on the same line as [creed] and [formulary] --
+172 of 365 records happened to cross a wrap boundary, the rest did not.
$ colitur emit --format sexp --from 2027 --to 2027 | wc -l
- 9025
+ 9197
$ colitur emit --format xml --from 2027 --to 2027 | head -2
<?xml version="1.0" encoding="UTF-8"?>