| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Six flavours: latex, groff, html, xml, ics, none. Markdown, AsciiDoc and
plain text map to none deliberately -- their metacharacters are
context-dependent and escaping them aggressively produces worse output
than not escaping.
An unrecognised extension returns None rather than falling back to none:
guessing the flavour wrong produces malformed output that looks fine
until it does not.
Folding backs off to a non-continuation byte, so a fold never splits a
UTF-8 sequence -- the failure mode that would corrupt Polish and Latin
names in a published feed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lectio adopted the last two Missal corrections colitur argued:
C14 3 -> 0 RG 96(a)/97/98. lectio resolved each impeded I-class feast's
transfer independently, so in 2008, 2035 and 2046 St Joseph and
the Annunciation both walked onto the Monday after Low Sunday
and Joseph, losing there, was observed on no day of those years
at all. It now resolves the year's transfers as a set: the
Annunciation takes the Monday as its sedes propria, Joseph the
Tuesday.
C15 7 -> 0 The Holy Family propers' own 13-January rubric, "sine
commemoratione Baptismatis D.N.I.C.". lectio kept the Baptism
as the observed office on all seven such years in 2005-2050.
Those were the last two BEHAVIOUR classes. What is left is C1 (138) and C6
(119), both pure slug vocabulary.
Measured across the whole fixture, applying only the season normalisation the
test already applies: 579 of 16801 days differ, and every one of them differs
on the SLUG ALONE. Zero days differ on season, rank, colour, Epistle or Gospel.
(The test's own norm_slug table already maps 322 of the 579; the 257 left are
C1 and C6. The field profile is the same either way.)
So the two engines now agree on every liturgically meaningful field on every
day of 2005-2050. The residue is what the two projects call things --
ef-christmas-2-friday against ef-time-after-epiphany-1-friday for the same day,
same Mass. Aligning it means renaming lectio's slugs, and those are keys: its
lectionary, clectio's generated tables and any user overlay are built on them.
Left as vocabulary rather than forced.
Fixture refreshed against lectio e713da2; 13 rows changed, colitur agrees with
all of them. 24 divergence classes at the start of this work, 2 now.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The ferias between Epiphany and the first Sunday after it repeat Epiphany's
own Mass in lectio now; they had been taking the Mass of the Sunday that
follows them.
C31 98 -> 0
C1 40 -> 138 grew, and changed character
C1 is now SLUG VOCABULARY ONLY, and its note says so. Season, rank, colour and
both citations agree with colitur on every day of the January window; what
differs is the identifier -- ef-christmas-2-thursday against
ef-time-after-epiphany-1-thursday for the same day with the same Mass. C6 is
the same shape.
That is 257 of the 267 remaining rows. Aligning the vocabularies would mean
renaming lectio's slugs, and those are keys: its own lectionary, clectio's
generated tables and any user overlay are built on them. Recorded as
vocabulary rather than closed, because the rows do differ -- just not in
anything a reader of either engine's output sees.
Measured for 2026: season, rank and colour agree on all 365 days; 14 days
differ and every one differs on the slug alone.
5 classes -> 4, agreement 98.4%.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lectio carries the readings of the nine Common-routed saints and of three more
that had proper Masses but no reading at all. Every day of 2005-2050 now
resolves a reading there; four days used to come back empty.
C38's own note said it could not close without lectio gaining a Commons
concept. The readings arrived instead of the abstraction, which was enough:
each Common resolves to one first/gospel pair for the saint that names it, so
a table plus assignment layer would have bought indirection and nothing else.
C20 14 -> 0
C38 70 -> 0
7 classes -> 5, 351 rows -> 267, agreement 97.9% -> 98.4%.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lectio gained the Passiontide week split and thirteen lectionary entries.
C23 230 -> 0 Holy Week's own six Masses
C32 99 -> 0
C35 60 -> 0 the first weeks after Epiphany and Pentecost (RG 299)
C33 46 -> 0 Corpus Christi
C34 46 -> 0 the Sacred Heart
C26 43 -> 0 Passion Tuesday
C19 7 -> 0 the Holy Family week-index residue
C1 75 -> 40
C31 63 -> 98 GREW
The Passiontide split is the one that carried most of this. efWeek had no
Passiontide case, so both weeks numbered 0 and every day of Holy Week took the
slug of its Passion-week namesake -- one set of readings for two weeks with
entirely different Masses. Good Friday was reading Passion Friday's.
C31 growing is the same bookkeeping as C1's earlier growth and is recorded in
its own note: C32 and C35 closed, and rows that carried several causes now
carry only this one. Nothing new disagrees.
17 classes -> 10, 1019 rows -> 488, agreement 93.9% -> 97.1%.
What remains is almost entirely NAMING rather than disagreement: C6 (119) is
colitur's ef-nativity-octave-day-N against lectio's ef-christmas-N-weekday on
days where both now read the same Mass, and C1 (40) is the same shape in the
January window.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lectio gained Rogation Monday and Tuesday (RG 87, violet under RG 128(d)) and
the Missal's own Mass for the weekdays within the Octave of the Nativity
("Diebus infra octavam Nativitatis Domini", Titus 3:4-7 / Luke 2:15-20).
C8 26 -> 0 CLOSED
C6 119 -> 119 narrowed: the cause halved, the count did not
C6 is worth reading carefully rather than skimming the number. Its rows no
longer differ on First_f or Gospel_f at all -- the two engines now read the
SAME Mass on 29-31 December, where lectio previously served the Sunday's. What
is left is Slug_f alone, colitur's ef-nativity-octave-day-N against lectio's
ef-christmas-N-weekday. That is vocabulary, not disagreement. The count did not
move because the entry's gate already admitted a Slug_f-only subset, which is
exactly the case where a row count is a misleading summary.
17 classes, 1019 rows, agreement 93.9%.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lectio built the votive Office of Our Lady on Saturday (RG 78) and then said
RG 309(a)'s own Mass for it. Both halves were needed: RG 78 keeps the office
and gives it white, RG 309(a) picks among the Missal's five seasonal
formularies. Fixing only the first leaves the day announcing Our Lady and
reading the feria's Mass -- the bug colitur itself shipped briefly and fixed
in its v0.3.0.
C17 439 -> 0 CLOSED -- the largest class between the two engines
C31 103 -> 63 Saturdays that carried both causes; only this one left
C35 69 -> 60 same
C1 35 -> 75 GREW
C1 growing is not a regression and is recorded as such in its own note: the
January Saturdays C17 used to absorb now differ only on the slug vocabulary
C1 already covers, so they land there instead. Rows moved between entries as
the larger cause was removed.
Also in this refresh, from the same session: weeks after Epiphany now count
from the first Sunday after it rather than from 6 January, which took C19
from 35 to 7 -- what remains there is the Holy Family interaction, a different
cause needing RG 17(b) in lectio.
19 classes -> 18, 1493 rows -> 1045, agreement 91.1% -> 93.8%.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lectio has taken three further corrections colitur argued from the Missal: the
twelve RG 124 colours (red is for Apostles, Evangelists and Martyrs, and
missalemeum had the rule inverted in both directions), Good Friday's black
under RG 128(b) with RG 132, and RG 72's Christmas Time boundary at 13 January
inclusive.
864 rows changed. Two classes closed outright and two moved:
C18 450 -> 0 the RG 124 colours -- the LARGEST single class in this file
C36 46 -> 0 Good Friday's colour
C1 159 -> 35 the season boundary stopped differing
C23 184 -> 230 Good Friday's rows fold back, the split no longer needed
C36 is closed rather than kept at zero because the split it represented has
dissolved: it existed only to hold Good Friday apart while its diff set had a
third member, and with the colour agreeing the rows are the exact pair C23 has
always gated on. Restoring 230 is not a regression, it is the number returning
to what it was before the split.
Cited classes 24 -> 19, divergent rows 2252 -> 1521, agreement 86.6% -> 90.9%.
The percentage is again the least interesting part. C18 alone was 450 days on
which the two engines agreed about nothing and now agree because both apply
RG 124 the same way round.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
It compares colitur's sanctoral data against lectio's calendar ini, so a
correction to a temporal day -- computed in code on both sides, present in
neither file -- is structurally invisible to it.
Not hypothetical. The Good Friday colour fix (RG 128(b) + RG 132, v0.4.0) was
missed entirely by this tool when the eight-field patch was produced, and
surfaced only by running clectio at the bottom of the chain and diffing its
output against colitur date by date. The tool narrows the search; it does not
close it.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
CLAUDE.md's lineage note said layers 3 and 4 are one chain -- Divinum
Officium, missalemeum, lectio, colitur -- and that a defect inherited at the
root is invisible to both. That is still true everywhere except on the days
lectio has now corrected.
lectio adopted eight corrections colitur argued from the Missal. On those days
the chain no longer runs DO to lectio: lectio follows the Missal, and
missalemeum is the only party still carrying the inherited error. C27, C28 and
C37 went to zero and are closed; C38 narrowed to a readings-only divergence
that cannot close without lectio gaining a Commons concept.
The practical consequence for layer 4 is a base rate, and it is worth stating
because it is easy to get backwards: on those days the oracle disagrees with
BOTH engines, so M29 and M30 should be read as "missalemeum is the outlier"
rather than "colitur is unusual". A fresh colitur-vs-missalemeum divergence is
no longer presumptively colitur's fault.
And the limit, stated so it is not over-read: everywhere else the two layers
remain one lineage, and lectio's sanctoral is still generated from missalemeum
by a script that would silently revert all four calendar corrections if
re-run. That warning now lives in lectio's two ini headers and the generator's
own doc comment as well as here.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Every previous refresh of this fixture carried lectio's answers TO colitur,
because colitur's data was bootstrapped from lectio. This one carries
colitur's answers BACK. lectio has merged eight field corrections colitur
argued from the 1962 Missal: ubaldus and didacus promoted from commemoration
to III-class feast on the Missal's own calendarium, both August vigils
recoloured violet under RG 128, and both Ember Saturdays' readings, which
lectio had carrying St Thomas's and St Matthew's Masses respectively.
227 of the 16801 rows changed. Three cited classes went to zero and are
CLOSED and REMOVED, citations preserved in the register, the same discipline
C2-C5, C7, C9-C13, C21, C22 and C25 already record:
C27 40 -> 0 the Advent Ember Saturday's readings
C28 40 -> 0 the September Ember Saturday's readings
C37 77 -> 0 the two vigil colours
C37 is worth noting by name: its own note called the shared lineage "the
sharpest demonstration in the project", colitur and lectio and missalemeum all
carrying the same two wrong colours. Two of the three now carry the right one.
C38 NARROWED rather than closed, and the distinction matters. Its identity
half is gone -- lectio ranks both saints class-3 now -- but the same 70 rows
still differ on readings, because both saints take their Mass from a Common
and lectio has no Commons concept to resolve one. It is gated on
diffs = [First_f; Gospel_f] exactly, which is C18's shape. It cannot close
without lectio gaining a capability, which is a feature rather than a fix.
Net: 24 cited classes to 21, 2252 divergent rows to 2095, agreement 86.6% to
87.5%. The number that matters is not the percentage though -- it is that
those 227 days now agree BECAUSE BOTH ENGINES FOLLOW THE MISSAL, where before
they agreed because both inherited the same errors from Divinum Officium.
That is the failure mode CLAUDE.md's lineage note describes, resolved rather
than documented, for the first time in this project.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The first version of poland.ini marked three classes INFERRED because the
ordo's class column sits several lines below its own date row and the first
extraction pass did not reach it. All three are now read from the source:
Our Lady Queen of Poland class-1 (line 1114), St Stanislaus class-1 (1233),
Our Lady of Czestochowa class-1 (2398).
One of the three inferences was WRONG. Czestochowa was written class-2 as
"the conservative reading"; the ordo gives class-1. The mistake was treating
the ordo's "part." marker -- particular, proper to certain places rather than
universal in Poland -- as implying a lower rank. Those are different axes.
The extraction method was validated before being trusted, against two entries
whose class was already known from a clean single-line row: St Adalbert
class-1 and St Andrew Bobola class-2. It reproduced both.
Visible consequence, and it is correct: at class-1 Czestochowa no longer
commemorates St Zephyrinus, because RG 111(a) admits no ordinary
commemoration on a I-class day.
The ordo also names the particular sees each patron is proper to -- Stanislaus
for four archdioceses and three dioceses, Queen of Poland for Czestochowa and
Przemysl and the military ordinariate -- which is now recorded beside them,
and which reinforces the header's existing warning that a diocesan calendar
is not a national one.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Poland and the Benedictines, in the flat INI form, installed beside the
invented diocesan example.
poland.ini -- 17 entries from the Calendarium Perpetuum pro Dioecesium
Poloniae (1964), promulgated under Rubricarum instructum and applying to the
1962 Missal. Transcribed from a published Polish EF ordo that names that same
calendar, cross-checked against missalemeum's supplement page for the two
formularies 1964 added (13 and 15 July). Date, Latin name and class were read
from the source for every entry; three classes could not be recovered from
the PDF's column layout and are marked INFERRED where they appear, with the
reasoning. The header carries an edition warning that is a real trap here:
the Proprium Poloniae of 1921 and 1934 is still bound into many missals and
carries an outdated arrangement of dioceses and ranks. It is not this
calendar, and it is exactly the kind of plausible wrong-edition source that
has cost this project time before.
benedictine.ini -- two entries, and the comment explaining why is the point of
shipping it. Counted across the Norcia ordo: 86 "I cl.", 43 "II cl.", ZERO
"III cl." and ZERO "IV cl.", against 103 "Semidup." and ~96 "Dup.". The
monastic rite uses the Roman classes at the top and the older Duplex /
Semiduplex grades below, exactly where the Roman calendar has III and IV
class. colitur's rank vocabulary cannot express those, so most Benedictine
propers cannot be written here at all -- a mismatch of vocabularies between
related rites, not a gap in the data. Rather than invent a Duplex -> Class3
mapping the source never states, that file ships only what its ordo gives in
Roman terms and lists roughly two dozen excluded feasts BY NAME, so the
omission is visible instead of silent.
Both headers say plainly that they are examples and not authorities: they are
transcriptions from published ordines, none of the five test layers can vouch
for either, and both should be checked against the reader's own ordo. The
cram test asserts only what we control -- that they parse, convert and apply
-- and says so.
They also demonstrate the precedence engine on real data: the Benedictine
Transitus is I class and takes 21 March with the Lenten feria commemorated,
and Maurus is II class and takes 15 January with Paul the First Hermit
commemorated.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The format was documented; the pipeline was not. The commonest surprise when
writing a local calendar is 'my feast does not appear', and it is almost never
a loading failure -- which means the existing docs answered a question nobody
was asking.
Four stages, named: load, merge, resolve, emit. The one that matters is
resolve, and the point it makes explicit is that overlay entries take part in
precedence on EQUAL TERMS. A local feast is not privileged for being local; it
competes under RG 91's table exactly as a universal one does.
Three concrete causes of a missing feast, each of which came up while testing
this branch: outranked by the day it lands on, a date structurally occupied
(an easter+60 feast can never appear, because Corpus Christi is Easter+60 and
is I class), or a commemoration past RG 111's limit for the day's class. And
the diagnostic rule -- if check says the file loaded and every directive found
its target, the answer is stage 3, so raise the class or move the date.
Also records why the shipped adjustments are applied first and why that is not
configurable: replacing rather than layering would silently drop the
inseparable Peter/Paul commemoration, the Major Litanies, St Barbara and
Rogation Wednesday. Overriding one deliberately by naming its slug is a
different thing from losing it by accident.
|
| |\
| |
| |
| |
| | |
A convenience format for simple local calendars, transpiled to the existing
S-expression form and verified against it before emitting.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A convenience format for calendars that add a few local feasts and drop one
or two universal entries. Section names are slugs, a [overlay] section carries
the id, and status/subject/layer default so the common case -- an ordinary
local saint's feast -- says only what distinguishes it.
It is a FRONT DOOR, not a second data model. It parses to exactly the
Overlay.t the S-expression form parses to, and everything downstream is the
same code on the same values; a test asserts an INI overlay and its
hand-written sexp equivalent produce identical Overlay.t values. It is also
deliberately less expressive -- Add, Suppress and single-field Edit only --
and refuses Replace, multi-field edits and citation edits BY NAME rather than
dropping them silently. Anything it cannot say is a reason to write sexp.
Little of this is new machinery: tools/bootstrap_sanctoral.ml has parsed INI
and mapped it to celebrations since the sanctoral was bootstrapped from
lectio. The dates needed extending, since that mapping handled only MM-DD;
the flat forms are easter+N/easter-N and mon/day/nth, with nth negative to
count from the end.
`colitur convert` is a separate step rather than --overlay sniffing the
extension, so the author can read what their INI became. When a date form was
mistyped, "what did the engine actually get" is the question, and an invisible
transpile cannot answer it.
The conversion verifies its own output: the emitted text is parsed back with
the same function that loads an overlay and must equal what the INI denoted,
or nothing is written. That is the point of the module. A transpiler emitting
valid-but-wrong sexp is the failure a convenience format invites, and `colitur
check` could never catch it -- the output would parse cleanly and mean
something else.
That check was WRONG on the first attempt, in exactly the way it exists to
prevent. It re-serialised the parsed value instead of parsing the text being
returned, so it verified t -> sexp -> t, which is true by construction and
proves nothing. Found by mutation: corrupting the renderer to emit a different
overlay id sailed through and exited 0. It now parses the returned text, the
mutation is caught with exit 2, and two tests fail under it where none did
before.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The overlay format was documented in three partial places -- a paragraph in
colitur(1), a block in --help, and the comments inside the shipped example --
none of which was a reference. Someone writing a diocesan calendar had to
read all three and infer the rest.
Section 5 because an overlay is a thing a user AUTHORS rather than a command
they run: it belongs beside fstab(5), not in man1.
Covers every directive and every field edit, the six required fields and the
two optional ones, all three date specifications including the signed
Easter_offset and the negative nth, three worked examples, and the caveats.
The subject field gets a note explaining that it is not decoration -- it
decides whether a feast displaces an occurring Sunday under RG 16(a).
Two things it says that the code says and the old prose did not. There is no
Set_status and no Set_date among the field edits, deliberately: changing an
entry's status or its date makes it a different celebration rather than an
edited one, so Replace is the right directive and the change stays visible in
`colitur check` output. And a local feast missing from output has usually
LOST its day under the general rubrics rather than failed to load -- the
engine applies precedence to overlay entries exactly as to universal ones,
which is the first thing an author hits and was written down nowhere.
Writing it caught a documentation bug before it shipped: a first draft listed
a Set_status edit that does not exist and omitted Remove_name that does. Every
documented edit is now cross-checked against overlay.mli.
Linked from colitur(1)'s SEE ALSO and its OVERLAYS section, and from --help.
The Makefile installs it into man5, removes it on uninstall, and the man and
doc targets lint both pages.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Both listed check and new-overlay among the commands but neither told a
reader how they fit together, which is the part that makes them useful. The
overlay sections now carry the four-step loop -- new-overlay, edit, check,
run -- and state what check does not do, since its name invites a stronger
reading than it earns.
Also documents what the format now permits: citations and layer optional, the
signed Easter_offset, the negative nth counting from the end of the month,
and the legal values of each of the six required fields, which previously
appeared only in the shipped example.
|
| |\
| |
| |
| |
| |
| | |
Two mandatory fields made optional, parse errors that stop naming kernel
source files, and a feedback loop -- colitur check and colitur new-overlay --
for a file the test layers deliberately cannot vouch for.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Writing a local calendar had no feedback loop. An overlay is applied, not
validated -- that stays true, and the five test layers still cannot vouch for
a user's file -- but before this the only way to learn whether yours did what
you meant was to generate a year of output and grep for your own slug, and the
only way to see that a directive matched nothing was to notice a warning
scroll past among 365 lines.
`check` loads each overlay, applies it to the real shipped calendar, and
reports the directive counts, the slug each one targets, and any directive
that found no target. It exits 2 when a file fails to load or a directive
matched nothing, so it composes into a Makefile or a pre-commit hook rather
than merely being readable. It is applied to the SHIPPED calendar and not to
an empty layer on purpose: against an empty one every Suppress would fail
trivially and the check would be worthless.
It answers three narrow questions -- does the file parse, does every directive
find its target, what does the merged result contain. It does not validate a
calendar against the rubrics and cannot, and both the help text and the man
page say so rather than letting the name imply more than it does.
`new-overlay` prints a starter to stdout for redirection, rather than writing
a file where it likes. Every value in it is a placeholder that will appear in
`day` output if left unedited, so a half-finished overlay is visible rather
than silently inert, and it documents the three date shapes and the legal
values for each closed field inline.
load_ef_layer now returns its diagnostics instead of printing them: day and
readings still want them on stderr beside a year of output, while check wants
them on stdout, attributed to the overlay that produced them, and counted.
Printing at the source made the second impossible.
The cram test round-trips new-overlay through check rather than pinning the
template line by line -- editing its prose should not fail a test, but a
syntax error in it still must.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A user-supplied overlay is the only sexp this engine reads that a human writes
by hand, and two of Celebration.t's eight fields carry nothing such an author
can meaningfully supply: citations is always empty for a local feast, since
citations come from the rite's lectionary and never from calendar data, and
layer merely repeats the overlay file's own id.
Requiring both made the commonest first mistake -- omitting them -- fail with
'lib/kernel/celebration.ml.t_of_sexp: the following record elements were
undefined: citations layer', which names a source file the author will never
open and does not say what to write instead. A minimal local feast needed 12
lines, two of them noise.
Overlay.load now fills each field only where ABSENT, so an explicitly stated
value always wins: an overlay may legitimately name a layer different from its
own id, and defaulting must not silently overwrite that. A test pins both
directions.
Deliberately scoped to overlays. Layer.load, which reads the shipped
sanctoral, is untouched and stays strict -- that data is the project's own,
every field of it is asserted by tests, and a missing one there is a defect
rather than a convenience.
Parse failures also stop naming kernel source paths: the five prefixes that
actually reach a user are rewritten into the vocabulary of the file being
edited, and anything unrecognised passes through verbatim rather than being
reworded into something possibly wrong.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
colitur has been downstream of lectio since its data was bootstrapped from
it. These are the fields where that relationship should now invert: eight
changes, each annotated with the colitur allow-list entry carrying its rubric.
Deliberately a PATCH and not a regeneration. colitur carries 205 of the 327
Polish names lectio ships, so regenerating lectio's ini from colitur would
silently drop 122 of them; colitur also uses a different slug vocabulary for
Passion/Holy week and different Paschaltide week numbering. What colitur is
authoritative for is the adjudicated fields, and only those are emitted.
Comparing the two datasets field by field also caught a counting error in
colitur's own register that no assertion in this project was watching for:
six sanctoral entries carry subject = Lord, not the four recorded, because
the regex that counted them truncated on the two longest Polish names. The
RG 112(b) reachability measurement was re-run against all six and is
unchanged at 0/0; both docs are corrected.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
They have been carried as a bare 'unbuilt' for weeks. The reason is not
neglect, and it differs per clause -- now measured across 1583-9999 rather
than asserted.
(c) cannot fire in this architecture at all: Temporal_ef.temporal returns one
office per day, so two de Tempore candidates never coexist. Nothing to build.
(b) is already produced by RG 16(a), which is implemented: 0 days in either
direction, because a Lord feast takes an occurring Sunday's place with no
commemoration, and no Class1 Sunday shares a date with any of the four
Lord-subject entries.
(d)'s saint half has no candidate pair. Three apparent pairs are distinct
saints sharing a forename -- recorded so the false positive is not rediscovered
-- and the one real pair, agnes and agnes-secundo, is 7 days apart and
co-occurs 0 times.
(b) and (d) are data-unreachable rather than architecture-unreachable, so an
overlay can make either live. That is the entry_14_movable_band shape. Left as
an explicit open decision rather than silently resolved.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
CLAUDE.md still described it as architecturally blocked, and that claim was
being carried forward into task lists a release later. It was true when
written and was superseded by the very next task: the blocker was that no
(month, day) pair could anchor an Easter-relative trigger, and Date_spec
gained Easter_offset in v0.2.0. The entity has shipped since then as an
ordinary Add in adjustments.sexp -- 1 981 days across the domain carry it.
Also recorded the general lesson, since this cost a stale item twice: a
blocker phrased as an architectural impossibility was really a claim about
one type's expressiveness, and it dissolved when that type grew a
constructor.
|
| | |
|
| | |
|
| |\
| |
| |
| |
| |
| | |
Two corrections argued from the Missal's own calendarium and rubrics, both
found by consulting primary sources the project already had but had not
fully read.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
"113. Commemoratio de Tempore fit primo loco. In admittendis et ordinandis
aliis commemorationibus, servetur ordo tabellae praecedentiae." Only the
second sentence was implemented, adopted on ef-rg16a as the admission and
ordering criterion. The first -- the commemoration OF THE SEASON is made in
the first place -- was not, so ordering ran through band alone for every
commemoration including the seasonal one.
Reconciled with RG 110(c), which adds the inseparable Peter/Paul pair "ante
omnes alias commemorationes". Both rubrics are primary-source certain: the
photographic scans' OCR is illegible at RG 110(c), but docs/research/LT.txt,
the electronic transcription, carries the Rubricae Generales complete, and
O'Connell's footnote 39 turns out to render that clause exactly rather than
gloss it. They share a technical term. RG 113's own sentence fixes the sense
of "aliae commemorationes" as the ones other than the de Tempore one it has
just placed primo loco, and RG 110(c) sits three paragraphs earlier in the
same code. Read consistently, the pair heads the OTHERS, not the whole list:
season, then the pair, then the table order. So this runs after
rg110_additions, and List.partition's stability keeps the pair adjacent while
the seasonal commemoration steps in front of it.
Blast radius, two full 1583-9999 sweeps diffed: 3 533 days, every one
ORDER-ONLY -- the commemoration set is identical on both sides of every
changed day, checked as sorted multisets, zero days where anything else
moved. All are 22 February with chair-of-st-peter observed. Exactly the
population measured before the rule was written.
The order-sensitive test row is in test_precedence_ef.ml's admit_cases, which
is still the only place in the suite that asserts commemoration order at all.
It needed a mixed-origin candidate: every other candidate in that table is
origin = Temporal by default, so the rule is an identity on them.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Both carried rank Class3 with status Commemoration_only, bootstrapped from
lectio, which inherits it from missalemeum, which is generated from Divinum
Officium. The Missal's own universal calendarium ranks both "III classis"
outright, with no commemoration rubric: "S. Ubaldi Ep. et Conf., III classis"
(16 May) and "S. Didaci Conf., III classis" (13 November), corroborated in
the second scan and in a published 1962 Ordo.
Universal by construction, not by assumption: the calendarium carries no "pro
aliquibus locis" marker in its 573 lines while the wider Missal carries 79 of
them elsewhere. Each saint also has his own Mass entry in the Proprium, which
a bare commemoration never has -- a commemoration carries an oration only.
Found by auditing ALL 290 fixed-date entries against that calendarium, day by
day, anchored on the Roman calends column because the arabic day column is
OCR-wrecked and the dominical-letter column vanishes in some months. These
two were the only status defects in the whole file. The 15 days the automated
pass could not cover were read by hand and all agree.
Neither needed a proper authored: each takes its Mass from a Common with only
its own Oratio proper, per its own rubric at its own date. ubaldus shares
patrick's Common exactly. didacus needed one newly transcribed --
common-of-a-confessor-not-a-bishop-2, the "Altera Missa" Iustus, 1 Cor 4:9-14
and Luke 12:32-34, read independently in both scans, which agree, so the
page-image third reading this file's method requires on disagreement was not
triggered.
Blast radius, full 1583-9999 sweep, every day classified: 13 036. That is
5 564 ubaldus observed, 7 196 didacus observed, and 276 where the Ascension
Vigil still wins on 16 May but its single RG 111(c) slot passes from
rogation-wednesday to ubaldus -- correct and already pinned, since the
Rogation days are the MINOR Litanies and so an ordinary commemoration, which
RG 113's table order ranks below a III-class feast. Cited as C38 (70 rows)
and M30 (3); C8, C17 and M18 shrink accordingly, each with the reason
recorded rather than the count silently adjusted.
|
| | |
|
| | |
|
| |\
| |
| |
| |
| | |
Three colour fixes, each argued from the Missal and each invisible to every
validation layer that shares colitur's own data lineage.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
RG 128, transcribed in the rules register since 2026-08-11, gives violet to
"vigils of II and III class outside Paschaltide". The Vigil of the Assumption
(14 August, II class) carried White and the Vigil of St Lawrence (9 August,
III class) carried Red. Both are outside Paschaltide, so both are violet. The
Ascension's vigil is untouched: it is the one II-class vigil inside
Paschaltide and was already correctly white.
The rule had been sitting in the register, disagreeing with the shipped data,
since before the data was bootstrapped. It was invisible because colitur,
lectio and missalemeum all carried the same two wrong colours -- colitur was
bootstrapped from lectio, lectio's ini is generated from missalemeum, and
missalemeum uses Divinum Officium's data files. Three sources agreeing is one
source counted three times, and the differential and the oracle both went
green on the shared error. It surfaced only against witnesses outside that
tree: a published 1962 Ordo flagged the Assumption's, and O'Connell, The
Celebration of Mass 4th ed. (1964), section 4(c) and footnote 169, gave the
general rule and with it St Lawrence's, which the Ordo omits entirely.
Two golden pins added, in years where each vigil is actually observed rather
than impeded. The divergence this creates against every DO-lineage source is
cited in both allow-lists: C37 (lectio, 77 rows -- 92 possible minus 15 where
the vigil falls on a Sunday) and M29 (missalemeum, 3 rows in 2026-2027 and 2
in each of 2035 and 2038). Both gated on the exact slugs or dates and on
colour alone, so any other divergence on those days would still surface.
Also recorded, no code change: rose on Gaudete and Laetare stays. RG 131 is
permissive ("adhiberi possunt") and the Ordo prints violet, so the colour
field carries a permission rather than a requirement on those two Sundays a
year -- a decided position now, not an unexamined one.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 128(b)'s own exception list, transcribed in the rules register and
primary-source-verified since Task 16, excepts "Actione liturgica feria VI
in Passione et Morte Domini usque ad Communionem exclusive" from the violet
that otherwise runs from Septuagesima to the Easter Vigil. RG 132 assigns
black there. The register recorded this as an acknowledged gap rather than a
disputed reading -- the code comment beside the Holy Thursday exception says
so in as many words -- and it is closed here.
Found by two witnesses outside the Divinum Officium lineage that colitur,
lectio and missalemeum all share: O'Connell, The Celebration of Mass, 4th ed.
(1964), revised throughout to the Codex Rubricarum (1960) and the 1962
Missal, and a published 1962 Ordo. Both say black. So does missalemeum's own
colour set, which orders the day "bv".
The rubric is per-action ("usque ad Communionem exclusive") and the model
emits one colour per day; black is the day's principal one, the same
acknowledged limit RG 126's Palm Sunday blessing already carries.
Blast radius: one day per year, colour only, across the whole 1583-9999
domain. Two golden pins re-pinned. Good Friday's 46 differential rows leave
C23 for a new C36 gated on the exact triple [First_f; Gospel_f; Colour_f],
so C23's own exact-pair gate still means what its note says for its
remaining four days: 184 + 46 = 230, no residue, both counts from the
comparator rather than hand-counted.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two research findings, and the first changes how every earlier
adjudication should be read.
missalemeum's own repository states it uses Divinum Officium's data files
via a git submodule. lectio's ini is generated from missalemeum. colitur
was bootstrapped from lectio. So the chain is Divinum Officium ->
missalemeum -> lectio -> colitur, and the other projects in this space
are the same tree: OfficiumDivinum is an object-oriented rewrite of
Divinum Officium, Breviarium Meum is based on its texts.
That is worse than the caveat already recorded. CLAUDE.md described layer
3 as sharing colitur's lineage and layer 4 as a separate oracle. It is
not separate: layer 4 is layer 3's own upstream. The two oracles are one
source seen at two removes, so every colitur-versus-missalemeum
adjudication is in substance colitur versus Divinum Officium -- the de
facto standard for this whole software space. That makes the six prior
adjudications more consequential, and it means the project has one
external software witness plus the scans, not two.
The second finding is a witness outside that tree entirely: the published
Ordo, compiled by clergy applying the rubrics. The 2025-26 Ordo for the
Traditional Latin Mass shows commemorations AND distinguishes privileged
from ordinary, which is precisely colitur's thinnest axis. Its liturgical
timeline matches colitur exactly, and it confirms seven colitur positions
-- including M16, reversed against Divinum Officium two days ago on RG
111(d), and the Nativity Octave work from this morning, both halves,
including the RG 69 Sunday guard.
Three of the confirmations matter most: the Major Litanies, the RG 110
30-June Peter companion, and St Barbara are entries colitur hand-authored
because they are missing from lectio AND missalemeum, that is from
Divinum Officium. The Ordo carries all three, and even notes the Peter
commemoration is said "w/ 1 conclusion" -- RG 110's own pro unica
habeantur. Those were the least-supported entries in the dataset and are
now the best-corroborated.
The one apparent disagreement resolves in colitur's favour: the Ordo
lists St Evaristus as 26 October's Mass where colitur observes the feria
and commemorates him, but the calendarium reads "Commemoratio S.
Evaristi... Comm." in both sources, and the Ordo's own preamble explains
it lists Masses that may be said on a class 4 feria. An Ordo is a
practical document, not a rank authority.
Not wired in as a layer: the PDF's columns shift between pages, automated
extraction recovered 271 of 364 rows and truncated text mid-word, and a
fragile layer that silently mis-parses is worse than none. A structured
Ordo would be the only way to add a genuinely independent fourth lineage.
Register: section 6.20.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
C6 was closed by the Nativity-Octave fix rather than by argument. Its own
note had already split the 138 rows into 119 weekday rows, where it
recorded colitur's citation as confirmed correct and said verdict colitur
would be accurate for that subset alone, and 19 Sunday rows where colitur
emitted the weekday formulary against RG 69 and was plainly wrong -- a
Temporal_ef defect the entry deliberately left out of its own scope. That
defect is fixed, and the count fell 138 to 119: exactly the population
the note had enumerated by date. Verdict open becomes colitur on
reasoning already written there.
M26 closed on a positive argument, not an absence. Both its other shapes
are now built -- the BVM Saturday Mass selection and Trinity's week --
leaving Christ the King's week. RG 299's rule has an escape clause and
the escape requires an assigned proper Mass; none is assigned for that
week, checked at the source, unlike Trinity's week which prints one and
unlike Holy Name and Holy Family which each carry a ferial rubric. That
absence is not a research gap, it is the condition that triggers RG 299's
default -- and by the default the ferias say the preceding Sunday's Mass,
which on this week is Christ the King's own.
The limit is stated in the entry rather than glossed: this reads a
printed silence as the default rather than as an oversight, which the
text cannot distinguish. It is the same reading applied everywhere else
RG 299 governs, and applying it inconsistently here to match an oracle
already adjudicated wrong six times would be the worse error.
No entry in either allow-list is now verdict open or verdict missalemeum.
The only non-colitur entries are M15 and M18, both unresolvable, and both
are comparator limits rather than calendar disagreements: a
temporal-origin celebration carries no English name, so its identity
cannot be matched even where both streams plainly mean the same thing.
Register: section 6.18.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
M11 was the one entry in the missalemeum allow-list adjudicated against
colitur, and it was right to be. The calendarium directs "Com. octavae
Nativitatis" under each of 26, 27 and 28 December (LT.txt:5454-5459) and
RG 109(c) makes a commemoration of the days within the Octave privileged.
colitur emitted none.
The cause was a reasoning error stated in Temporal_ef's own comment:
"26-28 Dec are Stephen, John and the Innocents, hence sanctoral". Their
office is sanctoral -- those II-class feasts win the day -- but they
remain days WITHIN the Octave (RG 67, "Dies infra octavam sunt II
classis"), and colitur built them as generic Class4 ferias. With no
octave-day candidate there was nothing for the feast to be commemorated
over. Building days 2-4 exactly as days 5-7 always were makes the
commemoration fall out of the existing machinery rather than needing a
special case: the feast wins on rank, the octave day loses, RG 109(c)
privileges it, RG 111(c)'s single slot goes to it.
A second, independent defect surfaced while fixing it. The octave-day
branch covered 29-31 December unconditionally, so a Sunday falling there
got a feria identity -- where RG 69 says a Sunday occurring 26-31
December SEMPER keeps its own office and commemorates the feast.
Confirmed against the oracle rather than argued: missalemeum shows
"Sunday in the Octave of Christmas" on 2035-12-30, a Sunday, where
colitur showed a feria. Both named and anchors now exclude Sundays;
anchors had asserted the octave slugs unconditionally and was wrong the
same way.
Blast radius, full sweep against the pre-change binary: 25251 days, every
one 26-31 December, exactly two shapes, zero unclassified -- 21653
carrying an octave-day slug and 3598 that are all Sundays, the RG 69
correction.
Allow-lists: M11 closed and removed. C6 narrowed 138 to 119, nineteen of
its days having changed temporal identity rather than verdict. M15
widened 18 to 22 -- both streams now commemorate the octave, but the
candidate is temporal-origin and carries no English name to match against
missalemeum's own, this entry's documented limit on four more dates.
Stated rather than glossed: this trades a substantive divergence, colitur
omitting a commemoration the Missal directs, for a comparator limit, the
commemoration existing but not being name-matchable. That is a real
improvement, but what the oracle now proves is that both streams
commemorate something on those days; the identity rests on the rubric and
the calendarium.
Register: section 6.17.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commemorations were checked against an oracle in the 2026-2027 fixture
alone -- 227 days out of roughly 968 000 commemoration-bearing days in the
domain, about 0.02%, and by some distance the thinnest axis in the
project. Layer 3's 16 801 days compare none of them and never can:
lectio's trailing "+slug" tokens are its losing candidates, not an RG 111
admitted set. About a third of all days carry a commemoration and admit is
the most intricate code in the engine, so the gap was worth closing.
2035 and 2038 now compare presence, count and identity, reusing the
2026-2027 comparator's own identity_diff with the same limits: a
sanctoral-origin commemoration resolves by colitur's English name, a
temporal-origin one cannot and is reported as a counted, classified
outcome rather than a silent pass. Observed-identity stays out
deliberately -- that is M18's separate limit and folding it in would
flood these windows with a class that says nothing about commemorations.
36 differing rows across 730 days, every one classified. The great
majority of commemoration days agree, which is the headline. Four rows
are not calendar differences at all but name forms -- colitur's "The
Seven Sorrows of the Blessed Virgin Mary" against the oracle's "For Our
Lady of the Seven Sorrows", "The Major Litanies" against "Pro
rogationibus" -- which is this month's new entities appearing correctly
in windows that had never seen them.
One finding is genuinely new. On 2038-06-02 the Ascension Vigil admits
one commemoration under RG 111(c) and two candidates compete:
rogation-wednesday and sts-marcellinus-peter-erasmus. Both are
Commemoration_only, so neither has a row in RG 91's table, band returns
unclassified for both, RG 113 has nothing to order by, and admit falls
through to its alphabetical slug tie-break -- which decides the day.
missalemeum keeps the saints.
That tie-break was already documented as existing only between two
Commemoration_only candidates; this is its first live,
externally-witnessed instance, and the decision is made by slug alphabet,
which is arbitrary and not rubrical. There may be a real rule going
unused: RG 113's first sentence is "Commemoratio de Tempore fit primo
loco", and a Rogation is arguably de Tempore -- which turns on whether
the entry should carry subject Temporal rather than the Saint it
inherited from the Major Litanies precedent, a question the
movable-date-specs spec deferred as behaviourally inert and which
demonstrably is not.
Not decided here. Adopting whichever answer matches the oracle is exactly
the reasoning this project refuses, so it is recorded and cited for a
task that can weigh it on its own terms.
Register: section 6.16.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`--overlay` shipped last week with nothing to point at. The only example
was a test fixture, explicitly labelled invented and living where no user
would find it, so "colitur supports local calendars" was true but
undemonstrated.
data/ef/examples/diocesan-example.sexp is installed to
<prefix>/share/colitur/examples/ and is runnable documentation: every
celebration in it is invented, with example- slugs that cannot collide,
and its header explains the four directives, the three date shapes, and
the field vocabularies before showing any of them.
It demonstrates the range deliberately rather than the minimum: a
fixed-date local patron with its own propers; a movable dedication on the
first Sunday of October, I class because a church's own dedication
anniversary is I class in that church and at III it would lose to the
Sunday every year; an Easter-relative commemoration; an Edit raising a
universal feast for local use; and a Suppress shown commented out,
because suppressing a universal feast is a real liturgical act and an
example should not invite it casually.
Two things the header says plainly, since this is the one file that lets
someone change what colitur computes: an overlay is applied ON TOP of the
shipped calendar and never instead of it, and an overlay is applied, NOT
validated -- the five test layers assert things about the shipped data
and cannot vouch for a user's file.
A test asserts it loads against the real EF rank vocabulary, still
demonstrates at least four directives, and applies with NO diagnostics.
The last matters most: a directive naming a slug the universal calendar
lacks would warn, and an example that warns teaches the wrong lesson. It
deliberately does not pin which days it produces -- those celebrations
are invented, and pinning their dates would make an illustrative file
behave like calendar data.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Step 4's blind spot is now closed as far as the method allows. 2038
witnessed two of the five Common-routed saints; isidore-of-seville is the
third and the last that any year in 2005-2050 can reach, being observed
only in 2008, 2035 and 2046. He is also the only saint routing through
common-of-doctors, so that Common had never been compared against any
external source in any window.
Three independent agreements on it: the scan (Commune Doctorum,
scan1:41878ff, 2 Tim. 4, 1-8 / Mt. 5, 13-19), colitur, and missalemeum's
own 2035-04-04 row. Asserted by date in its own test rather than folded
into an aggregate count, so a regression there cannot hide.
The remaining two saints are unreachable by construction, not for want of
a fixture: gregory-the-great and patrick both sit in March and are
impeded by Lent's privileged ferias in every one of the 46 years the
differential covers. The blind spot is closed to its limit, not closed
absolutely, and the register says so.
The comparator is generalised rather than copied -- compare_live takes a
fixture and a year -- so a fourth window would cost a fixture and a count
list.
2035 differs on 3 days, both families pre-existing and already cited.
2035-04-02/03 are the Joseph/Annunciation transfer pair landing in the
opposite order from missalemeum's: neither stream loses a feast, the
sequence differs, which is C14's own RG 96 collision finally getting an
oracle window. 2035-12-30 is the Sunday within the Christmas Octave
against colitur's numbered octave-day slug, C6's family. Both are
recognised by slug rather than by date, so a year exhibiting only half
the shape would surface as unexplained rather than be quietly absorbed.
393 tests green with the exhaustive sweep.
Register: section 6.15.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two open questions closed, both by looking rather than reasoning.
M13 listed three possibilities for 19 March 2027 and stayed open because
none was confirmed. The live one was (b): a rubric at St Joseph's own
Proprium Sanctorum entry overriding the general table, "the same shape as
the Annunciation's own Attamen clause", its text simply not yet found. It
was looked for directly. Joseph's entry runs from its heading straight
into the Introit with no rubric of any kind -- and the analogue does not
exist where the note placed it either: the Annunciation's entry does the
same. That exception lives in RG 96, a general rubric about transferring
an impeded I-class feast, not in its propers, so there is no precedent
for a propers-level override at all.
With (b) eliminated and (c) still unsupported, (a) stands: RG 91 ranks a
I-class feast above a III-class Passiontide feria, Joseph is not impeded
so RG 96 never engages, and colitur observes him. Recorded with its
limit, because this is elimination and not proof: the specific hypothesis
named is false, which is weaker than showing no rubric anywhere says
otherwise.
Separately, the note that Mass I of the BVM Saturday needed an
Advent-Saturday oracle year to corroborate it is answered: there is no
such year and cannot be. Advent has no IV-class ferias -- Class2 from 17
December, Class3 before -- and RG 78 requires a IV-class feria. Zero
IV-class Advent Saturdays across 2000-2100. Its single witness is not a
gap in the research but the only evidence obtainable. The branch is kept:
the Missal does print the Mass for Advent, RG 309's subject being Masses
that may be celebrated as votive, and an overlay producing such a day
would otherwise fall through silently.
Register: sections 6.13 addendum and 6.14.
|
| |
|
|
|
|
|
|
|
| |
3 January 2026 is an unoccupied IV-class Saturday, so its office is Our
Lady's and now its Mass is too -- the second of the Missal's five, assigned
to Christmas through the Purification. The pin held the Christmastide
feria's readings, which is what colitur said before RG 309(a) was
implemented. Caught by make check on the 0.3.0 release, which is what that
gate is for.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RG 78's office has been built since ef-bvm-saturday: an otherwise
unoccupied IV-class Saturday is de sancta Maria in sabbato, white, IV
class. The Mass stayed the feria's, so the day observed Our Lady and then
read Colossians on the parable of the weeds. That is M26 shape 1.
RG 309(a) is the rule -- the Masses the Missal assigns "iuxta temporum
diversitatem" -- and it prints five, each under its own season heading.
All ten citations are transcribed from the scans with line numbers in the
source. Masses II-V were confirmed twice, against the scan and against a
live missalemeum capture of 2038 which names them and agrees on both
readings. Mass I rests on the scan alone: no oracle year to hand has an
Advent Saturday carrying this office. One witness where the others have
two, and the code says so rather than blurring it.
The mapping looked like the hard part and dissolved. The Missal's ranges
are cut by civil dates and movable feasts, not by this rite's seasons --
II ends mid-season at the Purification, III spans four seasons. But
measured against what a IV-class Saturday can actually be, it reduces to
a seasonal mapping plus one date test at 2/3 February, with no Easter
arithmetic at all: III's end to IV's start leaves the Triduum unassigned,
unreachable because Holy Saturday is I class; IV's end to V's start
leaves Pentecost week unassigned, also unreachable because that week's
Saturday is an Ember Saturday. Time after Pentecost then begins exactly
at Trinity, exactly where Mass V begins. Both gaps verified by sweep --
zero IV-class Saturdays in either across 2000-2059 -- not inferred.
The office is identified structurally, never off the slug, which it
deliberately shares with the ordinary feria: subject Bvm, IV class,
Saturday.
Blast radius: 87611 reading rows over the full domain, every one a
Saturday.
Allow-lists: M26 27 to 6, shape 1 gone, leaving only the Christ-the-King
residue argued in colitur's favour last commit. The 2038 suite's
BVM-SATURDAY-MASS class is removed rather than zeroed -- an id with no
rows must not be declared. M18 355 to 376. C17 widened 397 to 445,
taking its own Saturdays back from C1, C19 and C25, since one cause
should not be filed under two ids; C31 89 to 103; C25 closed at 0 rows,
its Holy-Name-week Saturdays now answered before step 3 is reached.
Three unit tests pinned the old behaviour and are corrected rather than
re-pinned: two asserted the day "keeps its ferial Mass", which was the
honest thing to assert while this was unimplemented. The third still
tests what it always did -- that step 4 refuses a temporal office -- and
only what answers instead has changed.
Register: section 6.13.
|