feat: load the fixed-date sanctoral onto the calendar grid (#24) #340
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!340
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/24-sanctoral-loader"
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?
Closes #24. First issue of Epic #23 (the sanctoral overlay).
What
Introduces
src/Sanctoral/— the sanctoral analogue of the temporalblock-fillers — plus the shared
Calendar\RealizedObservanceseam.SanctoralCalendar::forYear($year, ?SanctoralData)places every entry onits civil date (
Y-m-d => list<SanctoralObservance>), guarding the 29 Febedge (placed only in leap years). Same-date ordering (#25) and the bissextile
shift (#333) build on this.
SanctoralEntry/SanctoralData/SeedSanctoralData— thecorpus datum, the source interface, and a provisional cited seed. The
interface is the swap-seam for the cited corpus generator (#38): the seed is
replaceable with zero change to the loader.
Calendar\RealizedObservance— the shared shape both cycles produce.TemporalObservancenowimplementsit (a verified no-op) and the newSanctoralObservance(identity shell + rank + colour) implements it too, sothe resolver (#29) compares temporal and sanctoral offices uniformly. Season
stays a day property, deliberately off the interface.
LiturgicalDaywillhold
RealizedObservances once the resolver assembles days (#37).Correctness
The seed's ranks, colours, and Latin titles were adversarially verified against
the 1962 books. Two corrections folded in: the Four Crowned Martyrs (8 Nov) are
a commemoration, not a IV-class feast (1962 has no IV-class saints' feast —
IV is the commemoration tier); the Annunciation takes the locative title
"In Annuntiatione B.M.V.". Full seed rationale + sources:
docs/design/sanctoral-overlay-model.md.Scope
The overlay is a standalone layer; composing it with the temporal skeleton by
precedence/commemoration/transfer is the resolver's work (#29). The complete
cited General Calendar is the corpus epic (#38).
Verification
composer lint(clean) ·composer analyse(PHPStan L6, no errors) ·composer test(363 tests, 16,480 assertions). Commits signed + DCO.