feat: make the 1954 and 1955 editions publicly resolvable (#453) #467
No reviewers
Labels
No labels
area: build
area: ci
area: compare
area: data
area: engine
area: model
area: provenance
area: rite
area: validation
backport
blocked
breaking
confirmed
dependencies
duplicate
epic
github_actions
invalid
needs-info
needs-triage
php
priority: high
priority: low
priority: medium
regression
type: bug
type: chore
type: correction
type: docs
type: enhancement
type: feature
type: fix
type: perf
type: refactor
type: security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Directorium/Core!467
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/453-flip-isbuilt"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The final #453 PR — flip
isBuiltfor 1954 and 1955With every calendar-level component built by PRs A–E (octaves, vigils, the full sanctoral, the privileged temporal octaves, the moveable feasts, the Office of the Dead, the Saturday Office of Our Lady), this flips
RubricSystem::isBuilt()totruefor Divino Afflatu (1954) and Cum nostra (1955). They are now publicly resolvable —day(),contract(), andCalendarCatalog::resolver()serve them by name, where they were reachable only throughDayResolver::forEdition()before.The flip
1954/1955 built => true; 1962 unchanged.CalendarCatalogguard stays; its meaning narrows. It no longer fires for the three built systems but still refuses a future declared-but-unbuilt edition (Tridentine, Novus Ordo).isBuilt()remains the single source of truth, read by both the Api/metaadvertise-filter and this runtime gate — I deliberately kept the boundary check rather than deleting now-dormant code, because the next edition will land unbuilt and wants it. (Open to reversing this if the review disagrees.)RubricSystemTestasserts all three are built.Tabella dignity — complete for the universal fixed calendar
An offline scan of the 1954 fixed-date placements finds exactly two same-day Simple-vs-Simple collisions; both are now in the
dignior-simpleset — 19 Jan (Marius > Canute) and 21 Oct (Hilarion > Ursula). The resolved calendar is byte-identical (Oct 21 already agreed alphabetically); the change makes both rule-driven, not lucky. Under 1955 the reform abolished the simple office, so the set is inert there (documented in itsprecedence.yaml).Full-year structural sweep
PreConciliarYearSweepTestresolves every day of five stress-test years (earliest/latest Easter, two leap years, the 1954 anticipated-Sunday year) under each edition — exactly one principal office, a valid colour, a clean contract stamp. This is the offline proof that opening the public boundary exposes no latent crash. It complements, not replaces, the pinned Divinum Officium agreement fixture; the definitive live full-year DO oracle sweep across the whole corpus stays the maintainer's cross-check (the DO Perl checkout does not run on every platform).One residual tracked in
known-differences.ndjson(category renameddeferred-anticipated-sunday): the temporal engine does not yet mint an anticipated Sunday, so a rare Saturday-before-early-Septuagesima shows the Saturday Office instead of yielding; the lady tier is already ranked to yield once that observance is built.Verification
lint+phpstanclean · 989 PHPUnit + 32 generator tests green · corpus reproducible.dignior-simplemembership rule; 1955 byte-identical (only a comment changed).corpusVersion→1962-2026-07-07.3.rubric-system-model.mdSeam 10,KNOWN-LIMITATIONS,ROADMAPv0.3 shipped.Closes #453.