summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-26 08:43:14 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-26 08:43:14 +0200
commit9a915291c3e76dd6cbaea92910ed9cfe3398062d (patch)
treeeb3b586896b5d1d371542c4a827dd7cac5b83887 /lib
parent1a1479fd60e192c48789b3b065a3033702e4eeda (diff)
downloadcolitur-9a915291c3e76dd6cbaea92910ed9cfe3398062d.tar.gz
colitur-9a915291c3e76dd6cbaea92910ed9cfe3398062d.zip
fix(of): rename credo to creed, correct three comment inaccuracies
Fix round 1 for Task 3, addressing review findings. Rename the exported creed function from `credo` to `creed` across the .ml, .mli and test call sites, so the OF rite bundle can write `creed = Rubrics_of.creed` with no gratuitous mismatch against Rite.t's own field name, matching Rite_ef.Rubrics_ef.creed's own naming. IGMR n. 67's own heading is "Professio fidei" and its body says "Symbolum", never "Credo" -- documented as a comment on the now-correctly-named function rather than kept as the exported name. Local test helpers (credo_on_temporal, check_credo, test_credo_*) and Alcotest description strings keep the Latin shorthand, since only the call sites against RO.creed needed to change. Corrected two comment inaccuracies: - The Annunciation (25 March) is NOT always inside Lent, unlike St Joseph (19 March): 25 March sits after Easter's own earliest possible date (22 March), so in an early-Easter year (2008, Easter 23 March) it falls inside the Easter Octave instead, or is transferred under Normae n. 60/5. No functional effect (gloria/creed read observed/temporal as actually resolved), but the stated reason was wrong. - The Requiem-silence argument's counts: three All Souls Mass formularies (not two), and roughly 147 Gloria+Credo markers combined elsewhere in the Missal (not "over 150", which conflated Gloria alone with the combined figure) -- recounted directly against a fresh pdftotext -layout extraction rather than estimated. Added: an independent corroborating citation for the Holy Thursday / Easter Vigil Gloria exception, Vigil n. 31 -- the Easter Vigil's own praenotanda ("VIGILIA PASCHALIS IN NOCTE SANCTA"), a THIRD independently-numbered rubric set inside the same Missal PDF, confirming the Vigil's own Gloria directly rather than resting solely on the Holy Thursday rubric's forward-looking "usque ad" clause. dune test: exit 0, 845 tests. make check (COLITUR_EXHAUSTIVE_SWEEP=1, full 1583-9999 sweep): exit 0, 851 tests, 330.3s, both run unpiped in the foreground. git diff --stat v1.0.0..HEAD -- lib/rites/rite_ef/ lib/kernel/ data/ef/ still empty.
Diffstat (limited to 'lib')
-rw-r--r--lib/rites/rite_of/rubrics_of.ml92
-rw-r--r--lib/rites/rite_of/rubrics_of.mli37
2 files changed, 86 insertions, 43 deletions
diff --git a/lib/rites/rite_of/rubrics_of.ml b/lib/rites/rite_of/rubrics_of.ml
index 3fa59e9..e85ba1a 100644
--- a/lib/rites/rite_of/rubrics_of.ml
+++ b/lib/rites/rite_of/rubrics_of.ml
@@ -26,7 +26,15 @@
"votive Mass class" scope limit {!Rite_ef.Rubrics_ef}'s own header
states for RG 431(d)/(e)/432(c) -- genuinely N/A, not silently skipped.
- CREDO / SYMBOLUM (IGMR n. 67-68, igmr.txt:568-577), quoted in full:
+ CREED / SYMBOLUM (IGMR n. 67-68, igmr.txt:568-577), quoted in full.
+ NAMED [creed] below, not [credo]: n. 67's own heading is "Professio
+ fidei" and its body says "Symbolum", never "Credo" (checked directly,
+ igmr.txt:568-577) -- "Credo" is this file's own prose shorthand, kept
+ in comments and test labels, but the exported name matches
+ {!Colitur_kernel.Rite.t.creed}'s own field exactly, so the OF rite
+ bundle can write [creed = Rubrics_of.creed] with no gratuitous
+ mismatch, the same discipline {!Rite_ef.Rubrics_ef.creed} already
+ follows:
"67. Symbolum seu professio fidei eo tendit ut universus populus
congregatus verbo Dei in lectionibus e sacra Scriptura nuntiato et per
@@ -50,7 +58,7 @@
reading both paragraphs in full above, not merely by their absence from
this file's own branches: nothing in IGMR nn. 52-69 (the whole "Actus
paenitentialis" through "Oratio universalis" span, igmr.txt:440-585)
- mentions an octave at all. [credo]'s own [date] parameter is therefore
+ mentions an octave at all. [creed]'s own [date] parameter is therefore
genuinely unread, kept only for {!Colitur_kernel.Rite.t}'s shared shape
-- an honest [None]-shaped fact about this rubric, not a gap.
@@ -61,19 +69,22 @@
reading every line of that section, not by a failed grep. The Missale's
own printed propers corroborate the OMISSION reading only indirectly:
every OTHER Mass text in the extracted Proper of Time/Sanctoral carries
- an explicit "Dicitur Gloria in excelsis."/"Non dicitur..." marker (over
- 150 occurrences, docs/research/of/missale-romanum-2002.pdf via
- `pdftotext -layout`), but the two "IN COMMEMORATIONE OMNIUM FIDELIUM
- DEFUNCTORUM" (2 November) Mass-text blocks carry NEITHER marker --
- consistent with (not proof of) universal, uncontested funeral-liturgy
- practice that a Requiem Mass never has either. Picked as the reading
- with the better textual support, per this task's own brief, and applied
- as narrowly as the evidence allows: {!requiem_slugs} is a CLOSED,
- directly-checked list of the ONE slug in data/of/calendar-2002.sexp this
- can ever apply to (grepped for "defunct"/"requiem"/"exsequial": zero
- other hits), the same "checked, not assumed, closed population"
- discipline {!Rite_ef.Rubrics_ef}'s own [Colour.Black] proxy uses for the
- identical EF question. *)
+ an explicit "Dicitur Gloria in excelsis."/"Non dicitur..." or "Dicitur
+ Credo."/"Non dicitur Credo." marker (roughly 147 occurrences combined,
+ docs/research/of/missale-romanum-2002.pdf via `pdftotext -layout`,
+ recounted directly rather than estimated), but the THREE "IN
+ COMMEMORATIONE OMNIUM FIDELIUM DEFUNCTORUM" (2 November) Mass
+ formularies (numbered 1, 2, 3, one Mass text block each -- lines
+ ~21831, ~21867, ~21898 of that extraction) carry NEITHER marker on any
+ of the three -- consistent with (not proof of) universal, uncontested
+ funeral-liturgy practice that a Requiem Mass never has either. Picked
+ as the reading with the better textual support, per this task's own
+ brief, and applied as narrowly as the evidence allows: {!requiem_slugs}
+ is a CLOSED, directly-checked list of the ONE slug in
+ data/of/calendar-2002.sexp this can ever apply to (grepped for
+ "defunct"/"requiem"/"exsequial": zero other hits), the same "checked,
+ not assumed, closed population" discipline {!Rite_ef.Rubrics_ef}'s own
+ [Colour.Black] proxy uses for the identical EF question. *)
open Colitur_kernel
@@ -100,11 +111,25 @@ let gloria ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t)
Triduum, is unaffected -- this rubric is keyed to the Mass, not the
day's own band), and the same sentence extends the silence "usque
ad" (UP TO) the Easter Vigil's own Gloria (Easter-1), confirming
- that Mass also has one. Neither day is ever a Sunday (both are fixed
- Easter-offsets within Holy Week), so this must be checked ahead of,
- and independently of, the season/weekday branches below -- the
- identical lex-specialis placement {!Rite_ef.Rubrics_ef.gloria}'s own
- RG 431(c) branch uses for the same two days. *)
+ that Mass also has one. Independently corroborated by a THIRD numbered
+ rubric set inside the same PDF -- not the IGMR, not the Normae, but
+ the Easter Vigil's own praenotanda ("VIGILIA PASCHALIS IN NOCTE
+ SANCTA", missale-romanum-2002.pdf line ~9452), which restarts its
+ own paragraph numbering at 1: Vigil n. 31 (line ~9925), "Post
+ ultimam lectionem e Vetere Testamento cum suo psalmo responsorio et
+ sua oratione, accenduntur cerei altaris, et sacerdos intonat hymnum
+ Gloria in excelsis Deo, quem omnes prosequuntur, dum pulsantur
+ campanae..." -- confirming the Vigil's own Gloria directly, from a
+ second, independent source, not merely the Holy Thursday rubric's
+ forward-looking "usque ad" clause. A third numbered document inside
+ one PDF is exactly the citation-ambiguity trap vocab_of.ml's own
+ top-of-file comment warns about for the Normae/IGMR pair -- naming
+ it "Vigil n. 31", not a bare "n. 31", for the same reason. Neither
+ day is ever a Sunday (both are fixed Easter-offsets within Holy
+ Week), so this must be checked ahead of, and independently of, the
+ season/weekday branches below -- the identical lex-specialis
+ placement {!Rite_ef.Rubrics_ef.gloria}'s own RG 431(c) branch uses
+ for the same two days. *)
n = -3 || n = -1
then true
else if
@@ -136,16 +161,27 @@ let gloria ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t)
(* IGMR n. 53: "in sollemnitatibus et festis" -- every remaining
Sollemnitas or Festum, whatever day of the week it falls on (a
solemnity transferred onto an ordinary weekday, or one that was
- never a Sunday to begin with -- St Joseph 19 March, the Annunciation
- 25 March, both always inside Lent by construction: Gregorian
- Easter's earliest possible date is 22 March, so Ash Wednesday can
- never fall later than 10 March and Easter itself can never fall
- before 19 March, meaning neither date can ever fall outside Lent).
- [Memoria_obligatoria], [Memoria_ad_libitum] and [Feria] are not
- named by n. 53 at all and correctly fall through to [false]. *)
+ never a Sunday to begin with). St Joseph, 19 March, is ALWAYS
+ inside Lent by construction: Gregorian Easter's earliest possible
+ date is 22 March, so Ash Wednesday can never fall later than
+ 10 March and Easter itself can never fall before 22 March, putting
+ 19 March always at least three days before Easter. The Annunciation,
+ 25 March, is NOT: unlike 19 March, 25 March sits AFTER Easter's own
+ earliest possible date, so in a sufficiently early-Easter year it
+ falls inside the Easter Octave instead of Lent, or is impeded and
+ transferred under Normae n. 60/5 (Precedence_of.mli's own
+ [transfer_target] citation: "the Annunciation falling anywhere in
+ Holy Week goes to Easter + 8") -- 2008 (Easter 23 March, so
+ 25 March is Easter+2, the Octave itself) is a real, checked
+ instance, not a hypothetical. Functionally inert either way: this
+ branch reads [observed.rank]/[temporal] as they actually resolve on
+ the given date, never assumes a season from the calendar date alone
+ -- but the comment should not claim more than that. [Memoria_
+ obligatoria], [Memoria_ad_libitum] and [Feria] are not named by
+ n. 53 at all and correctly fall through to [false]. *)
observed.Celebration.rank = Vocab_of.Sollemnitas || observed.Celebration.rank = Vocab_of.Festum
-let credo ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t)
+let creed ~(temporal : (Vocab_of.season, Vocab_of.rank) Temporal.t)
~(observed : Vocab_of.rank Celebration.t) ~(date : Date.t) : bool =
ignore date;
(* IGMR n. 67-68's own [date]-independence: see this file's own header. *)
diff --git a/lib/rites/rite_of/rubrics_of.mli b/lib/rites/rite_of/rubrics_of.mli
index 5325f12..ced9193 100644
--- a/lib/rites/rite_of/rubrics_of.mli
+++ b/lib/rites/rite_of/rubrics_of.mli
@@ -44,20 +44,27 @@ val gloria :
bool
(** Whether the Symbolum (Credo) is said, post-homily, at this day's Mass
- (IGMR n. 67-68). Reads [temporal] for the identical reason [gloria]
- does -- n. 68's own "diebus dominicis" is a plain, weekday-only fact,
- unlike n. 53's Advent/Lent carve-out, so every Sunday qualifies
- (Advent/Lent Sundays INCLUDED, unlike [gloria]) -- and [observed]'s
- [rank] for n. 68's own "in sollemnitatibus", and [slug] against
- {!requiem_slugs} for the identical reason [gloria] checks it. Narrower
- than [gloria] on purpose: n. 68 has no "et festis" clause at all, so a
- [Festum]-rank day (an ordinary feast) does NOT get the Credo -- the one
- place this function's shape most visibly parts from EF's own RG
- 475(b)/(c). [date] is accepted, for signature symmetry with [gloria]/
- [preface] and {!Rite.t}'s own shared shape, but genuinely unread: n.
- 67-68 carries no Easter-relative window of its own, unlike RG 475(d)'s
- three EF octaves -- checked, not assumed (see the .ml's own citation). *)
-val credo :
+ (IGMR n. 67-68). Named [creed], not [credo]: IGMR n. 67's own heading is
+ "Professio fidei" and its body says "Symbolum", never "Credo" (checked
+ directly, igmr.txt:568-577) -- "Credo" is this file's own prose
+ shorthand, kept in comments and test labels, but the exported name
+ matches {!Colitur_kernel.Rite.t.creed}'s own field exactly, the same
+ "interface name matches the kernel field it satisfies" discipline
+ {!Rite_ef.Rubrics_ef.creed} already follows. Reads [temporal] for the
+ identical reason [gloria] does -- n. 68's own "diebus dominicis" is a
+ plain, weekday-only fact, unlike n. 53's Advent/Lent carve-out, so every
+ Sunday qualifies (Advent/Lent Sundays INCLUDED, unlike [gloria]) -- and
+ [observed]'s [rank] for n. 68's own "in sollemnitatibus", and [slug]
+ against {!requiem_slugs} for the identical reason [gloria] checks it.
+ Narrower than [gloria] on purpose: n. 68 has no "et festis" clause at
+ all, so a [Festum]-rank day (an ordinary feast) does NOT get the Creed
+ -- the one place this function's shape most visibly parts from EF's own
+ RG 475(b)/(c). [date] is accepted, for signature symmetry with
+ [gloria]/[preface] and {!Rite.t}'s own shared shape, but genuinely
+ unread: n. 67-68 carries no Easter-relative window of its own, unlike
+ RG 475(d)'s three EF octaves -- checked, not assumed (see the .ml's own
+ citation). *)
+val creed :
temporal:(Vocab_of.season, Vocab_of.rank) Temporal.t ->
observed:Vocab_of.rank Celebration.t ->
date:Date.t ->
@@ -69,7 +76,7 @@ val credo :
Missal's preface collection (over 50 individual texts across ~30 named
occasions) against {!Preface.t}'s 15 EF-cited constructors, and why
none of them is safe to reuse. Same three parameters as [gloria]/
- [credo], all three genuinely unread -- kept only for {!Rite.t}'s shared
+ [creed], all three genuinely unread -- kept only for {!Rite.t}'s shared
shape. *)
val preface :
temporal:(Vocab_of.season, Vocab_of.rank) Temporal.t ->