| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three things the project had no answer for: how to install it without
knowing dune, where to read about it, and what it does when asked.
Makefile, same shape as lectio's -- PREFIX ?= $(HOME)/.local, BINDIR,
MANDIR, and the '## '-comment help target -- so the two siblings are
driven the same way. Every recipe wraps dune in `opam exec --`, which is
the actual point of having one here: `make build` works from a plain
shell with no `eval $(opam env)` first. install goes through `dune
install` rather than a hand-rolled copy, because the binary finds its
calendar data relative to its own path; the man page is installed
separately to share/man/man1, matching lectio. install and uninstall
were both run against a scratch prefix and checked: uninstall leaves
zero files behind.
PREFIX defaults to ~/.local because that is where lectio installs and
where it actually lives on this machine, so colitur lands on an existing
PATH with no shell change. An earlier install this session went to
~/opt/colitur, which was me over-applying a rule meant for third-party
tools to one of the author's own projects; it has been removed rather
than left as a second, staler binary competing on PATH.
man/colitur.1 documents the four commands, both output formats and why
they differ, COLITUR_DATA_DIR and its refusal to fall back, the data
resolution order, exit statuses, and -- deliberately -- the limitations:
EF only, Epistle and Gospel only with the chants unbuilt and rejected
rather than guessed, and the BVM Saturday Mass-selection gap. A man page
that only lists what works is half a man page. Renders clean under
`groff -ww -z`, no warnings.
--help prints to stdout and exits 0; a usage error prints one line to
stderr and exits 2. That is the Unix convention rather than a
preference: asking for help succeeded and should be pipeable, being
invoked wrongly did not and must not pollute stdout. Both directions are
asserted in cli.t, along with a loop confirming every command the help
text advertises is one the dispatch actually accepts -- the check that
catches help drifting away from the code.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Register section 6.7 recorded that step 4 of the reading chain -- the
Common route -- had no external witness of any kind, and proved it by
mutation: corrupting a Common citation left both the 16801-day
differential and the 730-day oracle green. This closes that.
2038 is the only year in 2005-2050 in which two of the five
Common-routed saints are the observed office (Perpetua and Felicitas on
6 March, Frances of Rome on 9 March). 365 days were captured live, one
request per day, zero failures.
A separate fixture, not more rows on the existing one. sources.md
already records that the live endpoint has drifted from lectio's
archived 2026-2027 snapshot; merging two versions of one source behind a
single set of expectations would make any future disagreement
unattributable -- calendar or drift, no way to tell. Nothing in the 2038
comparison is checked against the older fixture, and its provenance file
says so, along with the fact that a live capture is not reproducible
byte-for-byte on demand the way a snapshot-derived one is.
338 of 365 days match. 27 differ, every one of them in a named,
already-adjudicated class, none unexplained: 13 the BVM Saturday votive
Mass (M26 shape 1), 7 colour (M21), 2 Judith (M28), 2 Christ the King's
week (M26 shape 2b), 1 Christmas multi-Mass (M27), 1 Perpetua's Common,
1 new. Each was decided in a different year, so 2038 re-confirms them
independently -- the point of a second window is not new rulings but
evidence the old ones are not artefacts of their own year.
Two findings came out of it. Perpetua and Felicitas: missalemeum serves
the Common of Virgins and calls them "Virgins and Martyrs" in its own
oration, where the Missal directs "Missa Me exspectaverunt, de Communi
non Virginum I loco" (scan1:27634-27635). Both Commons share the Introit
Ps 118:95-96, which is exactly why the calendarium qualifies its
direction, and both women were mothers. Verdict colitur; the mechanism
is located on missalemeum's side, not merely asserted. Passion Tuesday:
the Missal prints "Dan. 14, 27 et 28-42" (scan1:11106) and colitur
reproduces that two-part form where missalemeum collapses it to
27-42. Same verses; the convention is deliberate, appearing also in the
Seven Sorrows and the Common of Non-Virgins. Verdict colitur, cosmetic.
Citations are notation-normalised before comparing, as layer 3 already
does: Ecclus/Sir, Joann/John, Luc/Luke, Matth/Matt. Each pair was added
because a real row needed it, and no target contains its own source as a
substring, so the set is idempotent.
Not compared, stated rather than left to be found: commemorations and
observed-identity. That machinery is built around a date-literal
28-entry allow-list specific to 2026-2027, and re-deriving it for a
second year is its own task. 2038 compares rank, colour, Epistle, Gospel.
The extractor's day count was hardcoded to 730, which silently forbade
any other window. It is now a parameter defaulting to 730, so the
existing documented command keeps its guard and a partial fetch still
fails loudly instead of producing a short fixture that passes a
comparison it never ran.
Teeth, by re-running section 6.7's own experiment: corrupting the Common
of Non-Virgins II now reddens four tests, two of them external-oracle,
where the same mutation previously reddened neither oracle layer.
Residual: isidore-of-seville is still unwitnessed and needs 2035 or
2046; gregory-the-great and patrick are never the observed office in any
year 2005-2050, so no fixture in that range can reach them.
Register section 6.8 and 6.9.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The lectionary has been resolvable since Task 4 but invisible from the
command line: `colitur day` prints no citations, so the branch's whole
deliverable could only be seen through the test suite.
A separate command rather than extra columns on `day`, which is where the
plan pointed. Its instruction was to append the Epistle and Gospel to
each row "matching the existing column style", and that turns out not to
be possible: a citation contains spaces and commas ("Ezech 34:11-16",
"Ecclus 51:1-8, 12") while a day row is space-separated with a
variable-length +slug commemoration tail, so appending them leaves the
row unsplittable -- no awk or cut field number recovers where the Epistle
ends. That is the opposite of what the row is shaped for.
So `day` keeps its format byte-identical, asserted directly in cli.t
rather than left implicit, and the citations get their own row with
" | "-delimited fields, safe for values containing spaces. Both formats
are a stopgap and say so in the source: the design calls for one schema
rendered through a logic-less template engine, and two ad-hoc formats are
easier to retire later than one overloaded format whose parsing rules
nobody wrote down.
The year walk is now shared. day_report and readings_report differ only
in how a day is printed, and the two-liturgical-year indexing -- with its
own reasoning about civil-versus-liturgical spans -- is exactly the part
that must not be duplicated and drift.
"-" for an absent part, though no EF day can currently print one: layer 2
asserts exactly one First and one Gospel on every day of every year
1583-9999. The CLI still does not assume a guarantee the kernel makes
about data rather than about types.
cli.t gains the four chain-step cases test_golden.ml pins against the
scans, so the CLI path is checked to agree with the library path, plus
the 2 January line, which reads the Circumcision's Mass under the
Missal's own ferial rubric (scan1:6523-6526) and not RG 17(a). Verified
the cram tests actually run and have teeth: corrupting one expectation
produces a diff and exits 1.
CLAUDE.md: state, test count (369, 370 with the sweep), the readings
command and why it is separate, and What's next -- the lectionary landed
early rather than inside Plan 4, so what remains there is OF's own
lectionary, not the mechanism. Chants stay deliberately unbuilt, and
Validate now rejects any part outside First/Gospel.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Comment and citation corrections found by review, plus one finding that
survived an attempt to reconstruct it. No behaviour change; the suite is
unchanged at 358 green.
The ferial rubric "Diebus ferialibus a 2 ad 5 ianuarii Missa dicitur ut
die 1 ianuarii" was attributed to RG 17(a) in three test comments. It is
not RG 17(a). RG 17(a) (LT.txt:843) fixes only WHEN the Holy Name is
kept -- "celebrandum dominica quae occurrit a die 2 ad 5 ianuarii; secus
die 2 ianuarii". The rubric quoted is a Mass-propers rubric printed
under the Sanctissimi Nominis Iesu heading (scan1:6523-6526, corroborated
scan2:7216), governing what the ordinary ferias of that window say when
they are not the feast at all. Two rules sharing a date window. Fix
round 1 had already corrected this on the data side; the generator's own
comment was right throughout. Only the test comments were stale.
test_differential.ml named bootstrap_lectionary.ml's derived_entries as
the source of ef-holy-name's citations. That binding no longer exists --
it was the mechanism that derived them from ef-holy-name-sunday's
wrongly-widened ini translation, removed in Task 9 because the
derivation was itself the error. They are hand-authored from the scans
now, as holy_name_entries.
M26's shape 1 described its 21 rows as votive Masses of the BVM "on an
otherwise-unoccupied feria, not only a Saturday", splitting them into 4
BVM-Saturday rows and 17 "ordinary weekday ferias". Every one of the 21
is a Saturday, each checked individually against date -d. The error was
not merely verbal: it made the gap look broader than a single cause and
pointed away from the one rule that explains all 21. The sub-groups
differ by season, not weekday, and only in what colitur shows in the
votive Mass's place. One gap -- the office is built (RG 91 entry 27),
the seasonal selection among the five Masses is not.
Recorded, not fixed: step 4 of the reading chain has no oracle witness
at all. This began as a note to write up a live-oracle confirmation for
Felicitas and Perpetua; the reconstruction contradicted its premise. The
sweep ran over 2028, where 6 March resolves as a Lenten feria with the
saint admitted only as a commemoration, so her own Mass is never read
that year. The finding underneath is firmer: only five saints route
through a Common, they are the observed office on five days in all of
2005-2050 (isidore-of-seville 2008/2035/2046, frances-rome and
sts-felicitas-perpetua both 2038), two are never observed in 46 years,
and none falls in layer 4's window. Layer 3 does not cover it either --
lectio resolves the literal "-"/"-" sentinel there, which is what C18 is
gated on, so it confirms only that colitur emits a citation where lectio
emits none, never that it is right. Closing it needs the oracle fixture
extended to 2035, 2038 or 2046; that is a fixture-scope decision.
Register: sections 6.6 and 6.7. CLAUDE.md's layer-blindness list gains
the step-4 entry.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
attribution, RG434(b)
F2: the task report's "colour/subject/names on the Litanies entry are
currently inert" was false for names -- test_oracle.ml's identity axis
reads Names.find on every commemoration, and the invented English name is
exactly why 2026-04-25 registers as a Comm_identity_mismatch, the reason
M5 had to be re-gated. Corrected precisely, field by field, in the report.
F3: Easter 2027 is 28 March, not 18 April, as previously stated in the
report's own "layer 4 is blind to the transfer" reasoning. The conclusion
survives (28 March is not 25 April); the date is corrected.
F4: "the exhaustive property sweep caught this immediately" was a wrong
attribution, in the report, the register, and calendar.ml's own comment.
The committed exhaustive sweep walks 1583-9998 in order and aborts at the
first failure; the years actually reported (5700, 4747) were draws from
prop_invariants, the default dune test run's 200-year random sample.
Corrected in all three places.
F5: the Litanies' privileged commemoration is due in the MASS specifically
(RG 108 + RG 81), never a separate Office answer -- colitur emits one
resolved day, and the M20 adjudication rests on that being the Mass
reading. Stated explicitly now in M20's own note, the register, and
precedence_ef.ml's own RG111(b) comment.
Also added to M20 and the register: Rubricae Generales Missalis Romani
n. 434(b) ("VIII - De diversis Missae partibus", "D) De orationibus", "I
- De orationibus in genere"), verified word for word against all three
documents -- word-identical to RG 111(b) but explicitly scoped to the
Mass ("post orationem Missae"), answering the objection that RG 111
(Caput XVI, which RG 106 says governs both Office and Mass) might be read
as Office-shaped. Moves the M20 adjudication from "moderate-high, not
certain" to near-certain.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Records RG80/109(f) as RESOLVED (was "NARROWED, deliberately not built"),
corrects a mis-citation carried in that entry (RG111(b), not RG111(c), is
the clause that makes a privileged Litanies commemoration displace St
Mark's own ordinary one), and narrows the shared "no channel for a
movable, Easter-relative commemoration candidate" blocker to Rogation
Wednesday alone -- the Major Litanies' own version of that blocker
dissolved by reusing the existing RG96 transfer machinery, a route not
available to Rogation Wednesday (nothing there is being transferred FROM
a fixed civil date).
Adds a "know what each layer cannot see" bullet: layer 3 (lectio) is
entirely blind to this whole change; layer 4 (missalemeum) sees the entity
and the RG111(b) question but is blind to the transfer specifically,
confirmed by mutation, since neither year in its 2026-2027 fixture window
is a trigger year.
Updates the stale Plan-3-era test count and the allow-list summary
(expected-divergences-missalemeum.sexp now 12 active entries, M5
corrected, M20 added, M18's count adjusted).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
F2: test_christmastide_feria_slugs's 26 December assertions removed --
St Stephen/John/the Holy Innocents (RG 67-70) always outrank a Class4
Saturday candidate there, in every year, so the office can never
actually be observed on any day in the 26-28 December stretch. 3
January (no competing sanctoral entry, any year) used for the "-1-"
stretch demonstration instead, alongside the pre-existing 10 January
one.
F3: test_differential.ml's shared row type gains a subject field
(populated for colitur's own rows only; lectio's fixture has no such
column). C17's own predicate now also requires subject = "bvm" --
defence in depth against a future bug producing a white Class4
Saturday candidate some other way, particularly in Christmastide/
Paschaltide where colour alone could not catch it.
F4: Precedence_ef.band's entry-27 comment gains its RG 78 citation,
replacing "per the historical default that fills it".
F5: two report inaccuracies corrected -- band was already receiving a
real candidate 312,966 times pre-change (what was missing was its
identity, not its reality); the "Missae de S. Maria in sabbato" heading
quote was presented as "both scans, word for word" when both scans are
OCR-noisy there AND genuinely differ in abbreviation from each other --
corrected in temporal_ef.ml's own comment and the register alongside
the report.
F6: the colour rule gains a tighter citation chain -- 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) -- reaching the same conclusion through the category (votive)
the Missal's own text actually places this Mass in, not by treating it
as a festum RG 91's own table structure says it is not.
F7: the oracle's real seasonal coverage recorded precisely in CLAUDE.md
and the register -- of 26 BVM-Saturday-office days in the 2026-2027
fixture only 17 are colour-discriminating; Time after Epiphany (5,015
observed days domain-wide) has zero oracle witnesses.
Full account in .superpowers/sdd/2026-08-12-colitur-rg16a/
bvm-saturday-report.md (local, gitignored).
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
CLAUDE.md's "Unbuilt, recorded" list and Data section move to reflect
the closed gap: a new item 9 records the office's own build, citations
and measured blast radius; the allow-list counts move to 7 active
lectio entries (C17 new) and 11 active missalemeum entries (M2 closed).
docs/research/rules-register.md (gitignored, not tracked) gets the
matching update: §4's entry marked RESOLVED with a cross-reference,
the §6 open-item checkbox closed, and a new §6.4 with the full
primary-source account -- every scan reading quoted, the blast-radius
reconciliation, and the mutation-test record.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Item 5: the Sacred Triduum's own identity is RESOLVED (RG 91 entry 2),
full 1583-9999 blast radius measured at zero differing CLI lines --
the change is invisible to layers 2-4, visible only to the two golden/
unit tests built for it.
Major Litanies (RG 80) and Rogation Wednesday's own commemoration
(RG 87-89) are established from a photographic scan and fully cited,
but deliberately not built: both need a rite-computed, Easter-relative,
non-competing commemoration candidate -- a kind of thing
Precedence.resolve's architecture has no channel for. Measured, not
assumed: RG 80's own transfer clause triggers in 194 of 8417 domain
years (~2.3%), so building only the ordinary case would trade a known,
understood gap for a new wrong answer in those years.
Renumbers the trailing three architectural-debt items (5-7 -> 6-8) to
make room.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
| |
Both items this file tracked as open since branch ef-rg112-rg110
(Holy Name of Jesus's subject tag and missing RG 17(a) fallback; RG
110's inseparable Peter/Paul commemoration) are resolved. Adds item 4
to the behaviour-items list with the account and measured blast
radius, renumbers the structural items 5-7, and removes both from the
"Unbuilt, recorded" paragraph. Updates the two allow-list active-entry
counts (differential 5 -> 6 for C16; oracle stays 12, M12 closed and
M19 opened).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Both are the defect class this fix round existed to close, which is why
they are worth recording rather than quietly overwriting.
CLAUDE.md still carried F1's retracted design rationale -- describing
entry_14_movable_band as "negative so it can never collide with a real
table position" -- and F2's retracted transcription-defect attribution,
verbatim, in the one tracked file the project's own workflow tells a
fresh session to read first. The fix round struck both everywhere else
and missed this file. A session following it as instructed could have
re-derived the negative sentinel for entry 20's or entry 23's movable
half and re-introduced the inversion in a new branch.
precedence_ef.ml's replacement justification for the x10 rescale then
introduced a fresh misstatement of the same primary text it was
correcting: it attributed "primum mobilia, deinde fixa" to "entry 12's
own ninth sub-item" and counted three such rows. Both photographic
scans, and the register's own section 4 table, put that clause at entry
13; entry 12 has eight sub-items and no such clause. The split occurs at
five rows -- 13, 14, 20, 23's third sub-item, and 24. Entry 24 is the
most-evaluated band in the whole domain and is unsplit in the code,
which is precisely the sub-rank the new headroom exists to hold.
Corrected in the .mli and the register too. No behaviour change; 290
tests green.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
just a name
A second, more severe gap than the identity-shaped one already
recorded: RG 17(a)'s own 2-5 January window, unlike Holy Family's
7-13 January (never empty, register section 6.2), CAN be empty of a
Sunday -- the calendarium carries an explicit fallback for it ("vel,
ea deficiente, die 2 ianuarii") that colitur does not implement at
all. Independently computed (matched the reviewer's own figure
exactly): 3,619 of 8,417 domain years have no Sunday in 2-5 January,
and colitur emits no Holy Name office whatsoever in any of them -- a
genuine missing II-class feast on 43% of years, not merely an
unnamed generic Sunday the way Holy Family's own pre-task gap was.
Recorded in the register (gitignored, not part of this commit) and
CLAUDE.md's carried-item list; out of this task's own dispatched
scope (Holy Family and RG 112 only), not fixed here.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
spot precisely
The full breakdown, precisely: of 730 days, 331 are resolved (330
matching, 1 mismatched -- M13, Joseph vs the Seven Sorrows), 399
unresolved -- 373 in M18's own bucket, 26 absorbed inside M1/M2/M3/
M16's own widened subsets where the axis fires alongside their
pre-existing citation. M18's own note previously stated only its own
373 without this fuller context.
Also names the blind spot the axis exists to close in exact terms,
not just "the observed day's identity": a TEMPORAL-origin observed
day silently replaced by a DIFFERENT temporal-origin observed day of
the SAME rank and colour -- exactly Holy Family's own shape, and the
reason every prior layer stayed green through the whole gap. States
explicitly what the count pin does and does not prove: it guards
against the 373/399 population moving silently in either direction,
but cannot say which specific day moved or why.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
CLAUDE.md's own carried-item list (item 1, RG16(a)) named two open
items it did not fix: 13 January mistagged Saint (independently
fixed upstream by ef-rebootstrap, not this task) and RG 112
unimplemented. Both close now, plus a third: the 'know what each
layer cannot see' section did not record that layer 4 (the
missalemeum oracle) compared the observed day's rank and colour and
never its identity -- exactly why the missing Holy Family went
unnoticed by every layer for as long as it did. Recorded as a new,
third RESOLVED item alongside RG16(a) and commemoration identity,
with the same shape: what broke, what was found while fixing it, the
measured blast radius, what stays open.
docs/research/rules-register.md (gitignored, not part of this
commit) carries the full account as its own new §6.2 -- the complete
RG 91 entry 14 and RG 112 primary texts (all four sub-clauses, not
only the two the register quoted before), the Holy Family Mass
propers' own more specific 13-January rubric found while building
this, and the independently cross-verified 1,220-day blast radius.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix round 1 on the commemoration-identity/tie-break work: the "genuine
same-band tie" M17 adjudicated as open was not a tie at all. RG 91's
table enumerates only "dies liturgici" (real feasts) -- entry 24's own
text is "Festa III classis, in calendario Ecclesiae universae
inscripta" -- so a Celebration.t.status = Commemoration_only candidate
(a saint reduced to a bare commemoration) has no row in the table to
begin with. Precedence_ef.band used to read rank alone, so it silently
lent such a candidate the same table entry as a genuine Feast of its
own rank; the calendarium's own 22 September row confirms the
distinction in its own notation ("S. Thomae de Villanova ... III
classis. / Commemoratio Ss. Mauritii et Soc. Mm." -- Thomas carries a
class number, Maurice carries none).
Fixed at the source, not by adding a status tier to compare_precedence:
band now checks status first, ahead of every rank-keyed branch, and
returns unclassified for any Commemoration_only candidate. M17 deleted
(not re-adjudicated) -- 22 September now resolves identically on both
sides, with no divergence left to name.
Blast radius measured independently (a temporary git worktree at the
pre-fix commit): 4451 days change across the whole 1583-9999 domain,
exactly 4 verified shapes -- 3576 x maurice-and-companions-martyrs ->
thomas-of-villanova and 282 x eleutherius -> philip-neri (admitted set
changes), 502 x appollonia/cyril-of-alexandria and 91 x dorothy/titus
(order only, independently confirmed against the calendarium's own
listing convention). Zero days change who is observed. Further swept
the whole domain for a genuine "two different candidates on the
identical real table entry" residual -- the shape RG 113 truly gives
no instruction for -- and found it empty: of 109201 same-rank ties
domain-wide, 83950 now resolve by band alone and the remaining 25251
are exclusively two Commemoration_only candidates tied at unclassified,
never two real feasts. The residual admit still breaks alphabetically
is real, but narrower than previously documented.
The "66 days" figure is reconciled, not merely disputed: 599 is the
tie population, 65 (whole-comparator: 67) is the real admitted-set
decision count within it (independently reproduced against the
pre-Task-B binary), 149 is order-only. Every one of the 65 real
decisions traces to the same Commemoration_only/Feast root cause as
Maurice/Thomas.
Also: validate.ml's admission fixed-point check recovers a
commemoration's real origin (by matching its slug against the day's
own temporal office) instead of reconstructing every candidate as
Sanctoral, since band -- unlike EF's own admit -- does read origin;
precedence_ef.ml/.mli's motivating example and blast-radius claims
corrected to no longer rest on the fixed Maurice/Thomas case;
test_identity_rank_corroboration's own population count corrected now
that 22 September (and 21 other Feast-status matches) became reachable;
its rank-agreement pin documents exactly what it does and does not
prove. Register (§4, §6.1, §6 checklist) and CLAUDE.md corrected in
place, including the RG 113 first-sentence gap this exercise surfaced
but did not close, recorded as a new open item.
275 -> 276 tests (with the exhaustive sweep), all green.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
test_oracle.ml (validation layer 4) used to compare commemoration
presence and List.length only -- cardinality, never which candidate is
admitted. A reviewer proved this vacuous by reversing admit's dignity
sort (the engine admitting the worst commemoration, an outright RG 111
violation) and finding every assertion in this file green across all
730 days.
tools/extract_missalemeum_oracle.py now also emits each commemoration's
own missalemeum id (field 9, commemoration_ids), parallel to the
existing title field; fixture regenerated from the same underlying
lectio snapshot (commit d7da4b0, re-verified, first 8 fields
byte-identical), read from a scratch copy so ~/git/projects/lectio was
never touched. SHA-256 pin and provenance updated.
The mapping: colitur identifies a commemoration by slug, missalemeum by
an English title string. No hand-built slug<->title table -- colitur's
own Celebration.t.names already carries the same English text for every
SANCTORAL-origin commemoration (bootstrapped from lectio, verified to
match missalemeum's titles character-for-character). This resolves
identity for every sanctoral-origin commemoration but cannot resolve a
TEMPORAL-origin one (Rite_ef.Temporal_ef never sets a celebration name)
-- that case is a new, distinct outcome (Comm_identity_unresolved),
counted and allow-listed, never silently skipped: 19 of 227
non-empty-commemoration days over 2026-2027.
Two genuine identity mismatches found and adjudicated (new allow-list
entries M15-M17, one is the unresolved bucket): M16, 27 March 2026, the
already-known unimplemented Seven Sorrows of Passion Friday office
(verdict missalemeum); M17, 22 September 2027, the RG 113 same-band
tie-break residual (verdict open, per the sibling admit fix). A new
corroborating check cross-references missalemeum's own id-embedded rank
against colitur's, split by status: Feast-status matches must agree
exactly (none reachable in this 2-year window, checked regardless);
Commemoration_only-status matches either genuinely agree or fit a known,
pre-existing, already-registered convention gap (colitur's bootstrap
rank vs missalemeum's own sentinel) -- not a title-matching defect.
Perturbation test performed and reverted: reversing admit's dignity-
based ordering (compare_precedence's real committed form uses band, not
dignity -- this reproduces the historical defect shape directly) turns
the oracle layer red: "no differences outside the cited allow-list"
fails with an unexplained commemoration-identity-mismatch on 2026-09-23
(colitur admits "St. Thecla" where the rubric and missalemeum both
require "St. Linus"). Reverted; diff against the prior commit confirms
no residue.
CLAUDE.md's "know what each layer cannot see" section updated: the
commemoration-identity gap it documented as open is now closed, with
the mapping's limits and the RG 113 tie-break finding summarised.
271 -> 273 tests (274 with the exhaustive sweep), all green.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
blindness
CLAUDE.md's own carried-item record, updated to match the register's full
account: the Purification retag reversed (follow the oracle, not the
calendarium title, per the user's ruling), the admit/~temporal kernel
signature change (a genuine one, unlike RG16(a) itself), RG112 recorded as
a newly-found, unimplemented rule (a feast/mystery of one Divine Person
excludes a commemoration of another of the same Person -- confirmed live
on 13 January in seven real differential-window years, independent of the
subject question), and the Dedication-of-a-Church classification question
(measured, not applied: St Michael's own Dedication, 29 September, may
also be a feast of the Lord -- 1200 days domain-wide if so).
Extends the existing 'commemoration identity is unasserted' item: this is
the exact gap the whole RG16(a) fix round exploited both ways -- the
original bug and the review's own catch (Pope Sixtus II wrongly admitted,
both golden pins promoted from output) were both invisible to every layer
except unit tests and two golden pins.
|
| |
|
|
|
|
|
|
|
|
|
| |
Mirrors the register §6.0 correction: the carried-item list previously
said the fix "needs a signature change -- privilege_of cannot currently
see the winner's subject", which was true of privilege_of specifically
but wrong about what the fix required -- disposition already took the
winner. Marked resolved, with a pointer to the register's own full
account (audit, fix, blast radius, allow-list) and to one further
sanctoral subject defect this task found but did not fix (13 January,
Baptism of the Lord, mistagged Saint).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Plans 1-3 are done: the resolution engine, the sanctoral data, and all
five validation layers. Records what each layer CANNOT see, which is the
part a fresh session most needs and the part a green suite hides -- the
lectio differential never compares commemorations and shares colitur's
own data lineage, the oracle is two years wide and never compares
celebration identity, and between them they sleep through commemoration
identity entirely.
Carries into Plan 4 the two behaviour items that all five layers
currently miss (RG 16(a), 5996 wrong days; commemoration identity), the
structural items cheapest to fix before a second rite exists, and the
data defects traced upstream into lectio's generator.
Adds the exhaustive-sweep invocation to the build block: the default
suite samples, so the "clean across every year" claim is reproducible
only on demand.
|
|
|
Orients a fresh session: what colitur is, the authoritative docs, the
binding decisions, the architecture, the five validation layers, current
state and what comes next. The design spec and research register it points
at stay local (docs/ is gitignored).
|