| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three corrections from the fix-round re-review, none changing behaviour.
RG 431(e) was attributed to "Caput XX, De hymno Gloria in excelsis".
There is no Caput XX -- the Rubricae Generales' Caput series ends at
XIX. The paragraph number, letter and subsection title were all right;
only the containing division was invented. It sits under "VIII -- De
diversis Missae partibus", subsection "C) De hymno Gloria in excelsis".
Shipping a new invented structural citation in the very round that
corrected a source-fidelity overclaim is what the gate exists to catch.
marian_slugs claimed TWO entries found and deliberately excluded after
individual consideration, "not merely omitted". There was a third:
vigil-of-the-assumption, 14 August, which is de B. Maria Virg. and whose
collect implores her protection. It was merely omitted. Added to the
list -- behaviourally inert, verified: it wins 7196 times domain-wide,
always with the non-Marian eusebius-confessor as its only commemoration,
and never loses -- but a closed list's whole value is its enumeration
claim, and that claim was false as written.
And the new rule has no comparison-layer witness at all. Reverting it
reddens three tests, none of them a comparison layer: the differential's
row type carries no commemorations, and the oracle's window has no
16-July Saturday. Worse, lectio's fixture DOES carry commemorations and
prints +our-lady-of-mt-carmel on all 8 in-window dates where colitur now
prints nothing -- a real divergence, neither fixed nor cited, swallowed
by a blind spot, which binding decision 1 forbids. Recorded, with the
note that colitur's reading here has no reference confirmation anywhere
and only extending the oracle fixture to 2033 or later would settle it.
Also records the RG 112(d) branch's ordering constraint: it precedes RG
95's Transfer branch, which it does not need to, and must move below it
if a Class1 Marian entry is ever added.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bvm_saturday_names's own comment: the "Missae de S. Maria in sabbato"
heading quote corrected from an overclaimed "both scans, word for word"
to showing both scans' own raw OCR (noisy, and genuinely differing in
abbreviation from each other) side by side, with the substance-only
corroboration stated plainly.
Colour citation tightened: RG 431(e) (the Missal's own classification
of this Mass as a "Missa votiva IV classis... de B. Maria Virg.") -> RG
121(a) (votive Masses take the colour of the feast-type they
correspond to) -> RG 120(b) (BVM feasts are white), replacing RG 120(b)
alone as the primary citation -- this Office is not itself a festum, so
RG 120(b)'s own "in Officio et Missa de festis" was a stretch as the
sole basis. Conclusion (white) unchanged.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 91 entry 27, "Officium sanctae Mariae in sabbato", sits in the Table
of Precedence between entry 26 (III-class vigils) and entry 28 (IV-class
ferias). Precedence_ef.band already routed a plain IV-class Saturday
feria to entry 27's own band value, but nothing in Temporal_ef.temporal
ever constructed the office itself, so an otherwise-unoccupied Saturday
still surfaced with a bare ferial slug and its season's ordinary colour.
Established from Caput IX of the Rubricae Generales, both photographic
scans and the electronic transcription, word for word (no
scan-vs-transcription conflict: RG 78/79 are General Rubrics prose, not
the Mass-propers body text the transcription is documented elsewhere as
missing almost all of):
"78. In sabbatis, in quibus occurrit Officium de feria IV classis, fit
de sancta Maria in sabbato.
79. Officium sanctae Mariae in sabbato incipit a Matutino et explicit
post Nonam."
RG 78's own protasis IS "otherwise unoccupied IV-class Saturday" --
every Saturday whose temporal candidate would otherwise be Class4,
across every season that rank reaches (Christmastide, Septuagesima,
Time after Epiphany, Time after Pentecost, ordinary Paschaltide).
Nothing else was needed to decide "otherwise unoccupied": band's own
entry-27 branch already reads rank/weekday on the temporal candidate
unconditionally and only wins the day when nothing outranks it -- RG
78's own condition, decided by the existing occurrence machinery.
Colour is white, unconditionally, per RG 120(b) ("Adhibetur color albus
in Officio et Missa de festis: ... b) B. Mariae Virg."), not RG 119/127/
128's seasonal rules -- this office is never "de Tempore" for colour
purposes, so it overrides the season's own violet/green.
The slug is deliberately left UNCHANGED (reused from whatever the
generic <season>-<week>-<weekday> ferial fallback would already have
produced), for two independent reasons: it matches the Sacred Triduum's
own precedent (identified structurally, off rank/weekday, never off the
slug), and a bespoke uniform slug would have broken
Colitur_kernel.Validate's own slug-uniqueness-per-liturgical-year
invariant, sighted zero times before this task -- confirmed directly by
writing it that way first and watching the landmark-years test fail.
Subject is tagged Bvm (currently inert for precedence -- only Lord is
ever read by band/disposition/admit) and the name is the Latin
"Officium sanctae Mariae in sabbato" (RG 91 entry 27's own table title
and RG 79's own heading), deliberately not English, the same
zero-circularity discipline Holy Family/Holy Name/the Sacred Triduum
already established.
The I-V numbered "Missae de sancta Maria in sabbato" (both scans) are a
Mass-propers selection detail (RG 309(a): "iuxta temporum diversitatem")
governing which readings/texts are said, not which office is kept --
colitur computes no citations yet (Plan 4), so this is deliberately not
modelled here.
Two pre-existing tests needed correction, not because they were wrong
before, but because RG 78 genuinely changes their dates' own facts: a
Saturday inside the Holy Name of Jesus window (3 January) and two
Saturdays inside christmastide_feria_slug's own "-0-"/"-2-" stretches
(26 December, 10 January) are all otherwise-unoccupied Class4 Saturdays,
so they now legitimately carry the BVM office instead of staying a bare
Temporal-subject feria.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two corrections from the fix-round review, both to the record.
"Sabbato Sancto" is attested zero times in either photographic scan. The
scans print SABBATO SANCTO as the heading (once) and "Sabbato sancto" as
the running header (28x and 30x); the shipped casing appears only in the
electronic transcription's table of contents -- the source this
project's own methodology rule deprecates -- while the comment beside it
called the value "both photographic scans, word for word". Recased to
the running-header form, which is the convention the other three Latin
names in the file already follow, with a source note recording the
count. Third source-fidelity slip this week, and the first where the
wrong value came from the deprecated source itself.
The Major Litanies deferral was recorded with two false blockers. It
claimed a kernel signature extension was needed to suppress the feast in
transfer years: admit already takes ~temporal and disposition already
takes ~winner, both carrying the Easter office on 25 April, so a
rite-local slug test does it with zero kernel surface. And it implied
Easter Monday is unmarkable: ef-easter-1-monday occurs exactly 8417
times in 8417 years, as reliable as ef-easter-sunday. So the guarded
build -- never scored -- is a strict improvement, 8223 years newly
correct against 194 unchanged, and "worse than the gap" was true only of
the unguarded one.
Deferring is still right, for a reason nobody had found: 25 April is St
Mark, II class, so under RG 111(c) a privileged Litanies commemoration
would displace the day's existing ordinary commemoration in ~97.7% of
years -- an unmeasured blast radius through layers 3 and 4. That
measurement is the prerequisite. The 194 figure is exact and reproduces.
Also corrects a subject-audit list that named five months for six
entries, omitting the Precious Blood on 1 July.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Holy Thursday, Good Friday and Holy Saturday resolved to the generic
Passiontide ferial slugs with no distinct identity of their own -- rank
and colour were already correct (RG 91 entry 2; Holy Thursday's white
per RG 128(b)/RG 122), only Celebration.names/subject were missing.
Keeps the slug (RG 91 entry 2 is identified structurally, off rank and
Easter offset, by Precedence_ef.band -- never off the slug -- so
renaming it would touch precedence for no reason and break the lectio
differential's own slug mapping for these three lectionary keys, the
same reasoning already given for Holy Family/Holy Name). Carries the
identity in Celebration.names instead, the same treatment those two
established: Latin, not English, to avoid reading the oracle this axis
is compared against.
Names sourced from both photographic scans, word for word, corroborated
by the electronic transcription's own table-of-contents-style listing at
the identical three headings (three-way agreement, nothing to
adjudicate): "Feria V in Cena Domini" (Holy Thursday), "Feria VI in
Passione et Morte Domini" (Good Friday -- not the transcription's own
informal "Feria VI Parasceve" used in passing elsewhere), "Sabbato
Sancto" (Holy Saturday).
Also tags subject = Lord, going further than Holy Family/Holy Name
strictly required (they needed it only because band's entry 14 reads
subject to outrank a colliding fixed feast; entry 2 here needs no such
thing). Safe: disposition's RG 112(a) branch only fires when both sides
of an occurrence are tagged Lord, and no Lord-subject sanctoral entry
has a fixed civil date inside Holy Week's own movable range; any Class1
sanctoral entry landing there (e.g. a transferred Annunciation) reaches
disposition's earlier, subject-blind Transfer branch first regardless.
Verified against the full 1583-9999 domain: zero
observed/commemorations/transferred_* difference traceable to the tag.
test_golden.ml's describe gains a name_la field alongside subject, for
the same reason subject was added: a names-only change is otherwise
invisible to every pin whose rank/colour/slug are already correct (this
task's own catalogued vacuity flavour #1). Six existing pins move from
subject=temporal to subject=lord (the three Easter-extreme Holy Saturday
pins, 2016's Good Friday, and the 2026 Holy Thursday/Good Friday pair);
the rest gain name_la=- by construction (no other temporal-cycle
candidate carries a name yet).
Mutation-tested: reverting temporal_ef.ml alone (keeping the tests)
reddens the new Rite_ef unit test plus five golden pins across two
independent layers.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 110(c), word for word: "quoties vero oratio unius Apostoli addenda
est ad modum commemorationis, huic orationi additur altera immediate,
ante omnes alias commemorationes." "Huic orationi" (dative, "to this
oration") refers to the trigger's own oration; "additur altera" means
the companion is added to it, i.e. follows it. "Ante omnes alias
commemorationes" governs the pair's position relative to other,
unrelated commemorations, not the pair's own internal order. The
previous build prepended the companion uniformly in both RG 110
shapes, citing this same clause for both -- correct for (a)/(b) (the
day's own oration, not a list member, has nothing to order against),
backwards for (c), where the trigger is itself a list member and the
companion belongs after it. Fixed in rg110_additions: shape (a)/(b)
still prepends; shape (c) now splices the companion in immediately
after its own trigger. Re-pinned the unit test that had asserted the
wrong order, and corrected both rows' comments to cite the clause that
actually governs each shape.
No layer in this codebase compares commemoration order: the lectio
differential never compares commemorations, the oracle sorts both
sides into a multiset, and the golden tests' own describe function
sorts its commemorations field too. Recorded as a new, permanent blind
spot in CLAUDE.md and the register, not merely fixed around -- the
admit_cases unit table is the only place order is asserted at all.
Re-measured the full blast radius against the same pre-change binary:
same 14,627 differing days, same four shapes and counts, confirming
the fix changed only the content of the 593 shape-(c) rows and nothing
else. Mutation-tested: reverting the splice back to a uniform prepend
reddens exactly the shape-(c) unit test; a new golden pin for a real
shape-(c) day (2004-02-22) stays green under the same mutation, living
proof that golden pins cannot see this axis, not merely a claim.
Separately, M19's own predicate checked a date and a diff shape but
not which candidate -- proved insufficient by fabricating a second,
bogus companion on 30 June and confirming the whole suite stayed
green. Fixed by requiring the admitted commemoration to be exactly
commemoration-of-st-peter, mirroring C16's own identity guard. Added a
golden pin for 30 June, the only assertion of that entry's identity
outside the allow-list.
Also: corrected a false claim in the task report that the electronic
transcription carries no corroboration of the Holy Name fallback --
its own table of contents does, at a line not checked on the first
pass. Added two further citations, both re-verified against the scan:
RG 17's own closing paragraph, settling the Sunday shape's Sunday-
exclusion at the rubric level rather than only in the propers; RG
124(c), which assigns red to 30 June by paragraph number rather than
by the generic apostle/martyr default. Noted the fragility of deriving
the Sunday shape's RG 109(a) privilege from a slug-substring match
rather than from a citation. Cosmetic: a stray blank line and an
indentation inconsistency.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 17(a): "festum Ss.mi Nominis Iesu, celebrandum dominica quae occurrit
a die 2 ad 5 ianuarii (secus die 2 ianuarii)" -- both photographic scans,
confirmed on the calendarium's own January table and the Mass propers'
own heading. Two defects closed together, since they interact through
RG 91 entry 14/RG 16(a):
1. The Sunday shape (2-5 January) now tags subject = Lord, matching
RG 91 entry 14 ("Festa Domini II classis") -- previously subject =
Temporal, the same defect shape Holy Family had before it.
2. The fallback (RG 17(a)'s own "secus die 2 ianuarii", the calendarium's
"vel, ea deficiente, die 2 ianuarii") is now built: 2 January carries
the feast whenever no Sunday falls 2-5 January that year. Before this
fix colitur emitted no Holy Name office at all in such a year -- a
real II-class feast simply missing, on 3,619 of 8,417 years in the
domain (43%; 20 of the 46 years 2005-2050, independently re-derived
against `date -d`).
Both shapes band identically at RG 91 entry 14's MOVABLE half
(Precedence_ef.entry_14_movable_band) -- one feast, not two differently
classified ones, per the Mass propers' own single heading covering both
dates. No live collision exists in the current sanctoral data (nothing
fixed-date falls 2-5 January besides a Commemoration_only entry on 5
Jan), so the RG 16(a)/RG 112(a) interaction is proved with synthetic
precedence-level fixtures mirroring Holy Family's own precedent, not a
live-data regression. One asymmetry the synthetic tests found and kept
honest rather than forced: a losing Holy-Name-Sunday is privileged
(RG 109(a), "of a Sunday") and survives RG 111(a)'s cap; a losing
Holy-Name-fallback is not (2 January is not a Sunday, and no other
RG 109(a)-(f) category applies to it), so it gets no commemoration at
all if ever outranked -- both individually correct readings of RG 109/111's
closed lists.
Golden pins follow the brief's own vacuity warning: the Sunday shape
already emitted the right slug/rank/colour before this fix (an ordinary
Sunday and Holy Name coincide on those fields), so its pin asserts
subject explicitly rather than pinning the whole line uncritically; the
fallback pin (2029-01-02) is the one with teeth against the larger
defect, reddening on slug/rank/subject together if reverted.
Mutation-tested: each half of the fix reverted separately reddens
exactly its own tests (Sunday subject: the dedicated unit test, the
golden pin's subject field, one precedence end-to-end test; fallback:
the fallback unit/anchor/golden tests, the new C16 differential count,
and both shapes of the precedence end-to-end tests) and nothing else.
Adds data/ef/expected-divergences.sexp's C16 (lectio has no fallback for
this window at all) -- the lectio differential's own count, independently
re-derived against `date -d` for the fixture's 2005-2050 span, not
transcribed from the domain-wide figure. The missalemeum oracle window
(2026-2027) exercises only the Sunday shape and needed no new entry:
subject is not one of its compared fields, and both years' rows already
corroborate the Sunday-shape ranking (missalemeum's own 2026-01-04 and
2027-01-03 rows: rank 2, white, title "Holy Name of Jesus").
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On 7,197 of the 8,417 days Holy Family occurs (every year that
isn't the 13-January collision), every emitted byte was identical to
the pre-change binary -- subject appeared in no output path the CLI
or any test read. Celebration.make already takes ?names, defaulting
to empty, and Temporal_ef.build never passed it.
build now takes an optional ?names, set only on Holy Family's own
branch: a LATIN name, not English. The oracle's own observed-identity
axis (test_oracle.ml) reads only `en`, so this is deliberately
invisible to it -- an English name here would mean reading
missalemeum's own title text, the oracle this exact axis is compared
against, to decide colitur's "ground truth" name: the "expected value
promoted from actual output" vacuity flavour this project's review
process watches for. Latin has no such circularity: the calendarium's
own January table and the Mass propers' own heading, both
photographic scans, word for word, "Sanctae Familiae Iesu, Mariae,
Ioseph" -- the same genitive-title convention test_names.ml's own
worked example already uses for Easter ("Dominica Resurrectionis").
Every other temporal-cycle candidate, including the neighbouring
Sundays, still carries no name of any kind -- a targeted addition for
the one day this task built, not a claim that the general gap
(register's own open item on Holy Name of Jesus, RG 17(a)) is closed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 17(b), verified against both photographic scans (missale-romanum-
1962.pdf and "Missale Romanum 1962_text.pdf" -- the electronic
transcription carries the same paragraph, so this one is not itself
a transcription-vs-scan divergence): the Holy Family of Jesus, Mary
and Joseph is celebrated on the first Sunday after Epiphany, II
class, EVERY year, taking the Sunday's own place "cum omnibus
iuribus et privilegiis" -- the same formula RG 16(a) already uses.
The slug, rank and colour temporal_ef.ml already computed for that
Sunday (ef-time-after-epiphany-sunday-1, Class2, white) turn out to
be exactly right by coincidence -- an ordinary, unnamed Sunday and
Holy Family share both. The only field that was silently wrong is
subject: always Temporal before this, when RG 91 entry 14 ("Festa
Domini II classis, primum mobilia, deinde fixa") calls Holy Family a
movable Feast of the Lord. temporal's build now takes an optional
~subject, applied only on Holy Family's own date -- every other
Sunday, including the still-unbuilt Holy Name of Jesus (RG 17(a)),
is unaffected.
RG 17(b)'s window (7-13 January) can never be empty of a Sunday --
sunday_on_or_before(6 Jan) + 7 always lands in [7, 13] regardless of
6 January's weekday -- unlike RG 17(a)'s Holy Name (2-5 January, CAN
be empty), whose calendarium entry carries an explicit "vel ea
deficiente, die 2 ianuarii" fallback right next to Holy Family's own,
fallback-free one. No fallback needed or built.
Added to anchors (holy_family_sunday is independently computed, not
routed through named -- see temporal_ef.ml's own comment on why) and
to its own dedicated anchor/erosion test in test_temporal_ef.ml,
kept separate from the generic named-days coverage test since this
genuinely isn't one of named's own outputs.
Does not yet touch precedence: band still has no notion of a movable
Class2 Lord feast (entry 14 gates on sanctoral origin only), so on
the seven years 13 January is itself Holy Family's date (2008, 2013,
2019, 2030, 2036, 2041, 2047), the fixed Commemoration of the Baptism
of the Lord still wins the day exactly as before this commit -- the
next commit fixes the ordering RG 91 entry 14's own text states
("primum mobilia, deinde fixa").
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Several comments described work as "arriving with Plan 3" or "waiting
for Plan 3" that either shipped without it or refer to the wrong future
plan number, all now false in ways that would mislead the next reader:
- temporal_ef.ml (two places) and precedence_ef.ml said the Major
Litanies (25 April, RG 80) "arrive with Plan 3's sanctoral". Plan 3
shipped, in this branch, without them; register §6 tracks this as a
plain open item with no plan committed to build it, and now says so.
- temporal_ef.ml said the Sacred Triduum's "own named offices are a Plan
3 sanctoral addition". Wrong on two counts: Plan 3 shipped without
adding them, AND a proper office for I-class FERIAS was never a
sanctoral matter in the first place (RG 21 defines "feria" to exclude
Sundays/feasts, not the reverse). 2026-04-02/03/04 still resolve to the
ordinary Passiontide ferial fallback's own generic slugs
(ef-passiontide-2-{thursday,friday,saturday}), confirmed against real
output; register §6 now records this as its own open item.
- temporal_ef.ml said the Rogation-Wednesday commemoration (Ascension
Vigil day, entry 21) "waits for RG 108-111" -- both the precedence
framework and RG 108-111 exist now; the Wednesday's own commemoration
is still never constructed, but for a different, still-real reason (no
candidate is wired for it), not a forward dependency. Fixed at both of
this comment's two occurrences in the file.
- vocab.ml/vocab.mli's `seasons` field doc said "Validate's contiguity
check reads this" -- false since validate.ml's "seasons" check switched
to Rite.t.season_runs in this branch (rite-supplied, to support a
season appearing in more than one run, which the modern form's Ordinary
Time needs and EF does not).
- vocab.ml/vocab.mli's `ranks` field doc said "it is not a precedence
relation until Plan 3 defines one" -- Plan 3 did define one (RG 111's
dignity ordering), but as its own small, separately-hardcoded function
in precedence_ef.ml, not one derived from this field; corrected to say
so precisely rather than leaving a forward-looking claim unresolved.
- The lectionary bootstrap (reading citations, Liturgical_day.t's own
`citations` field) is called "Plan 3" at slug.ml, vocab_ef.ml, and
three places in temporal_ef.ml, but "Plan 4" at liturgical_day.mli
(whose own doc comment -- "always empty until Plan 4" -- is the
authoritative one: the SANCTORAL bootstrap is Plan 3 and shipped; the
LECTIONARY bootstrap is a separate, later Plan 4). All six corrected to
say Plan 4, cross-referencing the Plan 3/4 distinction at the first
(slug.ml) occurrence so the reasoning is not duplicated six times.
No behaviour change: every edit here is a comment/documentation
correction. Verified byte-identical `colitur day` output across 1583,
1900, 1902, 2008, 2011, 2026, 2038, 9999. 259/259 tests green.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Four citation problems, all resolved against the primary scans
(docs/research/*.pdf via pdftotext):
1. temporal_ef.ml's Ember-day date-derivation comment still carried a
retracted note claiming the scans have no numbered-paragraph statement
of the rule. Register §3a corrected this in an earlier commit (the
search used the genitive "Quatuor Temporum"; the rubric heading is the
nominative "Quatuor Tempora") and the register's own words warn "a
false 'not in the source' note is worse than no note" -- the code
still carried the retracted note verbatim. Replaced with the verified
citation and the primary Latin.
2. temporal_ef.ml cited RG 71 for "Advent I is the Sunday nearest 30
November". RG 71 is a season-boundary citation only ("a I Vesperis
dominicae I Adventus..."); it does not say which Sunday opens the
season. The actual rule is RG 20 (Caput III, "De Dominicis"):
"Dominica I Adventus ea est, quae cadit die 30 novembris vel est ipsi
proximior" -- verified against the scan and added to the register.
Behaviour was always correct; only the citation was borrowed.
3. RG 88 ("de Litaniis minoribus nihil fit in Officio") is cited five
times across code and tests, load-bearing twice (why Rogation days
take their season's ordinary ferial class; why privilege_of lets them
fall through to Ordinary), but appeared nowhere in the register. RG 67
and RG 69 were likewise cited at expected-divergences-missalemeum.sexp
(M11) without register backing. All three verified against the scan
and added to the register's §4 (Octaves / Rogations subsections).
4. Two citations flagged for re-verification, both CONFIRMED accurate
against the primary scan (word for word):
- precedence_ef.ml's RG 32 "si impeditur, commemoratur" (the sole
textual basis for treating a vigil as always-commemorated once RG 33
doesn't omit it outright) -- the register previously stated RG 32
only as "same pattern as RG 31", not verbatim; the full sentence is
now in the register too.
- precedence_ef.ml's RG 111(b) full sentence (the sole textual basis
for the shipped Sunday rank-floor fix) -- the register previously
carried only the fragment "de festo II classis"; the full sentence
is now there.
- temporal_ef.ml's RG 91 entry 7 "feria IV cinerum et II, III et IV
Hebdomadae sanctae" (the sole justification for stopping the I-class
ferias at Wednesday) was also checked and matches the scan exactly;
left as-is (already correctly cited), noted in the report.
Bonus finding while re-verifying RG 20: RG 17(d), same chapter, states
"festum D. N. Iesu Christi Regis, celebrandum dominica ultima mensis
octobris" -- primary-source confirmation that Christ the King falls on
the last Sunday of October. This was the register's one
oracle-backed-but-not-primary-verified rule (CLAUDE.md's own carried-item
language); it no longer is. Updated temporal_ef.ml's christ_the_king
comment and closed the item in register §6.
No behaviour change: every edit here is a comment/citation change to
already-correct code. Verified byte-identical `colitur day` output across
1583, 1900, 1902, 2008, 2011, 2026, 2038, 9999. 259/259 tests green.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG109
Review round 1 (F1, Critical): the commemoration-eligibility fix from
the previous commit silently dropped II-class Advent and Lent Ember
ferias when impeded, while ordinary (lower-solemnity) ferias of the
same seasons kept their commemoration -- backwards on any reading.
Reproduced: 1900-12-21 (an Advent Ember Friday) lost its commemoration
entirely; 2026-12-21 (an ordinary Advent feria the same week) kept
its.
F2 (Important, the direct cause of F1): the branch's own justification
mis-stated RG 109 as an exhaustive list of the only temporal
circumstances that generate a commemoration. RG 109 is headed
"Commemorationes privilegiatae sunt commemorationes" and closes
"Omnes aliae commemorationes sunt commemorationes ordinariae" -- it
sorts commemorations that already exist into two HONOUR classes
(RG 108's differing liturgical hours), and says nothing about which
offices have the right to be commemorated at all. That right belongs
to Caput IV, "De feriis" (RG 21-27), never opened by the original
pass:
RG 24 (II-class ferias): "si vero impediuntur, commemorari debent"
-- if impeded, MUST be commemorated. Not optional.
RG 25 (III-class ferias): same mandate.
RG 26: every feria not named in 23-25 is IV class, and IV-class
ferias are NEVER commemorated -- the one exclusion RG 21-27 actually
states.
The omission branch is now gated on `rank = Class4` (RG 26) directly,
not on `privilege_of = Ordinary` -- the old gate happened to reach the
right answer for IV-class ferias (RG 26 also excludes them, for a
reason the old citation did not give) and the wrong one for II/III-
class Ember ferias RG 109(e) did not name by letter.
RG 109(e) itself is also corrected: its bare "feriis Adventus,
Quadragesimae et Passionis" previously excluded the Advent and Lent
Ember sub-days by analogy with (d)'s separate September carve-out.
RG 91's own TABLE needs an explicit "exceptis feriis Quatuor
Temporum" at entries 22 and 25 to keep Ember days from being double-
listed against their own entry 18 -- an exception that would be
unnecessary drafting if "feriae Adventus"/"feriae Quadragesimae" did
not already include their Ember sub-days by default. RG 109(e) carries
no such exception, so it is read at that same default, inclusive
scope: the Advent and Lent Ember ferias are privileged under (e), not
merely ordinary-but-commemorable. (d)'s own existence is unaffected --
September Ember days sit outside Advent/Lent/Passiontide under any
reading, so (d) remains necessary regardless.
Verified: 1900-12-21 and 1902-02-22 now correctly commemorate their
Ember ferias; 2026-12-21 and 1902-02-24 (ordinary ferias) unchanged.
Blast radius re-measured against the prior commit, 1900-2100: 102
civil days changed, every one an Advent/Lent Ember (or Ember-vs-
Joseph-collision) day regaining its commemoration, nothing else.
Validate re-swept exhaustively, 1583-9998: 0 failures.
F6: two privilege-boundary test rows that had been bent to expect the
bug's own output (Commemorate -> Omit) are restored to what RG 24/25
actually require, now Commemorate(Privileged) given the RG 109(e)
correction above -- these are the rows that should have caught F1.
F7: admit_cases had no witness for RG 111(b)'s rank floor that wasn't
already Class2, so reverting that filter only reddened the oracle
suite, never this file. Added a row (II-class Sunday, sole candidate
an ordinary Class3) that fails without the filter and passes with it.
F9: RG 122 cited alongside RG 128(b) for Holy Thursday's white --
states the same fact affirmatively ("Demum adhibetur color albus,
feria V Hebdomadae sanctae...") rather than as an exception to violet.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 128(b) excepts "Missa sive Chrismatis sive in Cena Domini feria V
Hebdomadae sanctae" from the Septuagesima-to-Easter-Vigil violet span
as a whole-Mass exception (unlike Palm Sunday's blessing/procession,
which the same sentence carves out as only part of that day) -- so
Holy Thursday's Mass is white, not violet. temporal_ef.ml fell through
to the generic Passiontide ferial path (season_colour Passiontide =
violet) for this date, since [named] has no entry for the Triduum at
all (rank was already correct via [privileged_feria]; only colour was
wrong).
Found via Task 16's missalemeum oracle comparison: every other Triduum
day's oracle colour set includes violet as an option (Good Friday
"bv", Holy Saturday "vw" -- already-flagged, deliberately deferred
per-action gaps, register §3b), but Holy Thursday's is white alone.
This is a genuine NEW divergence from lectio too (lectio has no such
exception and still prints violet for Holy Thursday) -- added as
Layer C11 to the differential harness and data/ef/expected-divergences
.sexp, 46 rows (2005-2050), rather than silently changing what that
harness accepts.
Also corrected a stale comment on season_colour claiming white's RG
paragraph was never pinned -- RG 119 was found and cited in the
register on 2026-08-11 but the correction was never copied into this
file's own comment.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two correctness bugs in Temporal_ef, both only visible across many
years, not a single point assertion:
1. Duplicate slugs within one liturgical year. Christmastide has no
numbered weeks, so the ferial fallback's <season>-<week>-<weekday>
scheme collapsed every feria in it to literal week "0". Since
colitur's Christmastide runs 25 Dec - 13 Jan (RG 72-73, a deliberate
divergence from lectio), the same weekday recurs across that span
and the keys collided (e.g. ef-christmas-0-saturday on three
different dates). Fixed with a dedicated christmastide_feria_slug
that splits the span into four sub-stretches, prioritising
compatibility with lectio's own keys wherever lectio has one:
- 26-28 Dec keeps lectio's existing ef-christmas-0-<weekday>.
- 2-5 Jan becomes ef-christmas-1-<weekday> -- lectio collapses
this indistinguishably into the same key as the stretch above,
so there is nothing to preserve; a colitur-only lectionary gap.
- 7-13 Jan splits at the actual first-Sunday-after-Epiphany
origin: on/after it, this is genuinely week 1 of Time after
Epiphany and takes lectio's own ef-time-after-epiphany-1-<weekday>
(which also can't collide with that season's own later week-1
ferias, since it's the same computation). Before it (0-6 days,
whenever Epiphany doesn't fall on a Saturday), a first attempt
at labelling this "week 1" too, matching a literal reading of
lectio's behaviour, was verified empirically (a throwaway sweep
of the full 1583..9998 domain) to reproduce duplicates in most
years -- so this remainder is its own ef-christmas-2-<weekday>,
a further colitur-only gap.
Verified with the same throwaway sweep: zero duplicate slugs across
1583..9998 after the fix.
2. named's week field was set by hand on some branches (Passion/Palm
Sunday, Easter, Low Sunday, Pentecost and its Vigil, Christ the
King) and left at None on others (Ascension and its Vigil, Corpus
Christi, Sacred Heart) even though all of them sit inside a
numbered season run. named no longer carries a week at all --
temporal now calls week itself for every day, named or not, so "a
named day inside a run carries that run's week" holds by
construction rather than by remembering to set it on each branch.
temporal.mli's week field doc is reworded to state the actual rule.
Covering tests: point assertions for all four Christmastide
sub-stretches; a QCheck property scanning random years for any
duplicate slug within a liturgical year (excluding the deliberate
resumed-Sunday reuse); point assertions for the four previously-None
days now carrying their week (first to fail without the fix: Ascension
Vigil, expected Some 6, got None); a QCheck property asserting
temporal's week equals week for every day of the year, replacing a
prior property whose fallback made it structurally incapable of
detecting an omitted week.
Also: cite RG 91 e18 for the September/Advent Ember days matching
lectio and flag the Lent/Whitsun Ember and Rogation slugs as
colitur-only lectionary gaps inline, matching the existing
Nativity-vigil/octave-day convention; cite RG 117/123/127/128/131 for
season colours and Gaudete/Laetare rose; drop the unreachable
Passiontide arm from the Sunday-rank match (Passiontide has only two
Sundays and both are already named above, so no Passiontide Sunday
ever reaches that fallback).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
named hardcoded week = None for ef-pentecost-vigil, ef-pentecost and
ef-christ-the-king, unlike the five sibling named Sundays (Easter, Low
Sunday, Passion Sunday, Palm Sunday, Trinity), which already carry the
explicit week number that week computes for the same date. Because these
three sit inside a season run rather than at a run boundary, the omission let
the week number jump on the following Monday without an intervening Sunday
marking the change -- breaking week continuity in every single year in the
domain.
This was found by the new Validate invariant harness (Task 14), which
flagged exactly two failures in every one of the 8416 years 1583..9998, both
on the Monday after one of these days. Season contiguity itself was clean
across the whole domain; only week numbering was affected.
Pentecost and its Vigil are fixed Easter offsets, so they take the literal
values (7 and 8) that week already computes for them. Christ the King's date
varies by year, so the same expression week evaluates is inlined instead,
since week is defined later in the file and cannot be called from named.
Added a general property test, prop_named_week_agrees_with_week, checking
across 200 random years that wherever named gives an explicit week, it
matches what week independently computes for that date -- covering all
sibling entries, not just the three fixed here, so the same drift cannot
silently reappear in a future addition to named.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ferial ranks per RG 91: I class in Holy Week and the privileged octaves
(entries 7, 10), II class for Advent 17-23 and the Ember days (entry 18), III
class for Advent to 16 December and Lent/Passiontide (entries 22, 25), IV class
per annum (entry 28). Two further divergences from lectio, both from the table:
Advent 17-23 are II class, and the Lenten Ember days are II class rather than
ordinary Lenten ferias. Rogations (RG 80/87) exist at all, which lectio does
not compute. Gaudete and Laetare are rose.
Two corrections against the primary source beyond the task brief's draft.
Entry 7 (verified against the Latin: "feria IV cinerum et II, III et IV
Hebdomadae sanctae") covers only Ash Wednesday and Monday-Wednesday of Holy
Week; Thursday-Saturday are the Sacred Triduum, entry 2, cited separately.
Rogation Monday and Tuesday keep the ordinary ferial rank of their season
(RG 88: "de Litaniis minoribus nihil fit in Officio") rather than a fixed
class, since no RG 91 entry ranks them specially.
A module-type constraint proves Temporal_ef satisfies the kernel RITE contract.
|
| |
|
|
|
|
|
|
|
| |
Task 12 review: add a permanent regression test for floor_div's negative
branch (Ash Wednesday, 4 days before the Lent I origin -- the only date in
the system where it fires), and stop sunday_slug from independently
recomputing the Pentecost-relative week number that week already computes.
A cross-check test pins the two together before the refactor and continues
to guard against future duplication.
|
| |
|
|
|
|
|
|
| |
Week origins are Sundays, so week numbers are constant Sunday-to-Saturday; the
origin is season-specific, which is why Validate must not assume a run starts
at 1. When Easter is early the surplus Sundays after Pentecost resume the
Sundays after Epiphany that Septuagesima cut short, and the last Sunday before
Advent always keeps the 24th (Last) Mass.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Circumcision (1 Jan) is the Octave Day of the Nativity, RG 91 entry 5, the
same table entry as the Nativity vigil -- not covered by the entries-1-3
group it sat under. Passion Sunday, Palm Sunday and Low Sunday are RG 91
entry 6 (I-class Sundays of Passiontide and Low Sunday); Ash Wednesday is
entry 7 (I-class ferias). All five branches now carry their own citation,
and the function-level comment states the full coverage instead of a
narrower one.
Also corrects the Nativity-octave range from RG 64-70 to RG 63-70, matching
the register's own citation for the octave rules.
Comment-only change; behaviour is unaffected.
|
| |
|
|
|
|
|
|
|
|
| |
The I-class feasts of the Lord (RG 91 entries 1-3), the Nativity, Ascension
and Pentecost vigils (RG 28-34), and the days within the Octave of the
Nativity (RG 64-70). Christ the King is the last Sunday of October per the
1960 calendar, not the OF's last Sunday before Advent.
Rogation Wednesday coincides with the Ascension vigil; with no precedence
framework until Plan 3, temporal emits the higher-ranked vigil.
|
|
|
Christmas Time runs to 13 January inclusive (RG 72-73) and time after Epiphany
opens on 14 January (RG 77), diverging from lectio, which starts
time-after-epiphany at 6 January. Holy Saturday stays in Passiontide: the
Easter Vigil is a night Mass, and a per-day calendar assigns a date by the
season governing its day-hours.
|