<feed xmlns='http://www.w3.org/2005/Atom'>
<title>colitur.git/lib/rites/rite_ef/temporal_ef.ml, branch v0.1.0</title>
<subtitle>deterministic OCaml engine to compute and validate liturgical calendars for multiple rites, template-driven output to year 9999</subtitle>
<id>https://git.labunix.xyz/colitur.git/atom?h=v0.1.0</id>
<link rel='self' href='https://git.labunix.xyz/colitur.git/atom?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/'/>
<updated>2026-08-15T01:40:19Z</updated>
<entry>
<title>test(differential): fix round 1 -- Holy Week, Lent Ember, RG 69</title>
<updated>2026-08-15T01:40:19Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-15T01:40:19Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=b0ff86ae552b90613be21c52433f4180deba7758'/>
<id>urn:sha1:b0ff86ae552b90613be21c52433f4180deba7758</id>
<content type='text'>
Two Critical findings, both real: Holy Week (including the entire Sacred
Triduum) was reading Passion Week's Masses -- the original colitur_keys
widened lectio's single, conflated ini section into both weeks instead of
Passion week alone. Narrowed to Passion week only; Holy Week's own four
cleanest days (Monday, Tuesday, Thursday, Saturday) are hand-authored
directly from the Missal, verified twice against both scans (C23); Holy
Wednesday and Good Friday are genuinely multi-lesson liturgies with no
single Epistle slot and are deliberately left unanswered, not guessed (C24).

The Lenten Ember days were still dead keys: Temporal_ef computes
ef-lent-ember-{wed,fri,sat}, lectio's ini names the same data
ef-lent-1-{wednesday,friday,saturday}, and colitur_keys never translated
it -- both engines independently fell through to the same wrong ferial
answer, so even the differential stayed green (C22, a genuine lectio bug
recorded for upstream). Fixed the instance and the class: colitur_keys
gained the rename, and tools/bootstrap_lectionary.ml gained
assert_reachable, sweeping Rite_ef.Temporal_ef.temporal at generation time
so a translation table entry naming a slug colitur never computes dies
loudly instead of shipping silently, plus an informational log of every
real slug with no entry at all.

C21 ("colitur's step 3 cannot reach a correct answer for the fixed
Christmastide slugs") is retired, superseded rather than merely patched:
the Nativity-Octave days now have their own direct Missal formulary
(Tit. 3,4-7/Luc. 2,15-20, "Diebus infra octavam Nativitatis Domini"),
resolved at step 2, not step 3 at all. That surfaced a real RG 69 gap
underneath it: a Sunday landing 26-31 December should keep its own Office,
not the fixed weekday placeholder, which Temporal_ef does not currently
distinguish. C6's verdict is re-opened (open, not colitur) for the 19 of
its 138 rows where this applies directly, and a new entry C25 (57 rows)
records the same gap propagating one hop further through step 3 into Holy
Name week. Both are out of this task's own scope -- a behaviour change to
a shared, multi-round-reviewed kernel-adjacent function -- and recorded,
not fixed, per the coordinator's own instruction.

C6's own note is rewritten in full rather than layered with another
correction; C18's stale trailing count is fixed to match its own pin; the
Vigil-misapplication risk flagged as a Minor closed itself once the
Nativity-Octave fix landed, confirmed by inspection rather than assumed.

dune test: 358/358. COLITUR_EXHAUSTIVE_SWEEP=1 dune test --force: 359/359.
</content>
</entry>
<entry>
<title>docs: an invented Caput, a list that was not closed, and a blind spot</title>
<updated>2026-08-13T15:37:40Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T15:37:40Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=c63e37b8cbef1480b6f5677420425d22fe7061d9'/>
<id>urn:sha1:c63e37b8cbef1480b6f5677420425d22fe7061d9</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>docs(ef): fix round 1 citation corrections in temporal_ef.ml (F5b, F6)</title>
<updated>2026-08-13T15:10:00Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T15:10:00Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=f389e57e965e7bc7ea46ad1f37203d00f22e25a7'/>
<id>urn:sha1:f389e57e965e7bc7ea46ad1f37203d00f22e25a7</id>
<content type='text'>
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.") -&gt; RG
121(a) (votive Masses take the colour of the feast-type they
correspond to) -&gt; 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.
</content>
</entry>
<entry>
<title>temporal(ef): the votive Office of the BVM on Saturday, RG 91 entry 27</title>
<updated>2026-08-13T13:57:00Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T13:57:00Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=044aa0dccbfe76ac9afd299af6074296eeb2cca3'/>
<id>urn:sha1:044aa0dccbfe76ac9afd299af6074296eeb2cca3</id>
<content type='text'>
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 &lt;season&gt;-&lt;week&gt;-&lt;weekday&gt; 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.
</content>
</entry>
<entry>
<title>docs: a name that matched no scan, and a blocker that was not real</title>
<updated>2026-08-13T11:45:46Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T11:45:46Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=67855ae3125148116df870bf1a9abeac5b501d5b'/>
<id>urn:sha1:67855ae3125148116df870bf1a9abeac5b501d5b</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>temporal(ef): the Sacred Triduum's own Latin identity, RG 91 entry 2</title>
<updated>2026-08-13T11:12:01Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T11:12:01Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=d2bfeb3c9b5cff163ed9cd9e86eb0e1849117f67'/>
<id>urn:sha1:d2bfeb3c9b5cff163ed9cd9e86eb0e1849117f67</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>fix round 1: RG 110(c)'s ordering was inverted; M19 lacked an identity gate</title>
<updated>2026-08-13T10:01:25Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T10:01:25Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=853351fad8aebc71c5341e6ff90371ca0caf8cf9'/>
<id>urn:sha1:853351fad8aebc71c5341e6ff90371ca0caf8cf9</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>temporal(ef): Holy Name of Jesus, RG 17(a) -- fallback + Lord subject</title>
<updated>2026-08-13T08:40:40Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T08:40:40Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=b5dcdd8d4048295cfbdf1606f4cafd39b3c433e6'/>
<id>urn:sha1:b5dcdd8d4048295cfbdf1606f4cafd39b3c433e6</id>
<content type='text'>
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").
</content>
</entry>
<entry>
<title>temporal(ef): fix round 1 (F3) -- give Holy Family a primary-sourced Latin name</title>
<updated>2026-08-13T07:16:39Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T07:16:39Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=b7da41445d89cc83e749ec19c57e321ceb6d5cf2'/>
<id>urn:sha1:b7da41445d89cc83e749ec19c57e321ceb6d5cf2</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>temporal(ef): the Holy Family, first Sunday after Epiphany (RG 17(b))</title>
<updated>2026-08-13T06:11:26Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-08-13T06:11:26Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/colitur.git/commit/?id=bbc8ce26916ca92b3c2286c57342a6565323b66f'/>
<id>urn:sha1:bbc8ce26916ca92b3c2286c57342a6565323b66f</id>
<content type='text'>
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").
</content>
</entry>
</feed>
