feat: 1954 sanctoral octave subsystem (safer split) (#65) #449
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!449
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/65-octave-subsystem"
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 #65. Materialises the pre-1955 (Divino Afflatu) sanctoral octaves for the 1954 edition — the safer-split design (user-approved 2026-07-04): a sanctoral octave is a fixed-date, feast-anchored window that behaves exactly like a vigil, so it is pure DATA, not a runtime engine. Temporal octaves (Christmas/Easter/Pentecost) stay in the temporal fillers, untouched.
What it does
facts/octaves.yaml(per edition) → the generator'stransformOctavesexpands each entry into full identity / attributes / placement records. A common octave yields its six days within (dies secunda..septima, semidouble) + the octave day (dies octava, greater double); a simple octave yields the octave day only (simple), no days within.semiduplex/duplex-maius→III,simplex→IV), exactly as a feast's rank is (#448).octaves.yamlauthors only class + Latin genitive + two cites.octaveOfplumbing threads through the engine mirroringvigilOf(SanctoralEntry/SanctoralObservanceincl.equals(),CorpusSanctoralData,SanctoralCalendar,RerankOperation,CorpusOverlayData,DayContract's reserved slot).Guarantees
CorpusTestinvariant updated to per-edition referential integrity.)within-octave/octave-day; the only schema change is an additiveoctaveOfonplacement.sanctorale.Octave facts — research-verified (adversarially)
Deferred to #64/#67 (office displaced; commemoration-survival unconfirmed — held to the 100%-accuracy bar): the Assumption octave day (Aug 22, occupied by the Immaculate Heart) and the whole Nativity-BVM octave (Sep 15, replaced by the Seven Sorrows). Adding those feasts + the precedence/commemoration rules is #64/#67.
An adversarial 4-dimension review (data accuracy · plumbing · generator · regression) + a verification pass found one must-fix — the John Baptist octave title needed "Nativitatis" (distinguishing it from the Decollation; every other bearer keeps its full descriptor) — now applied, plus its recommended hardening (the
CorpusOverlayDataoctaveOfsymmetry and three fail-closed generator guards).Gates
phpcs · phpstan L6 · phpunit (728) ·
npm test(18, incl.OctaveEditionTest+ generator unit tests) ·npm run verify(16 files reproducible) · validate-oracles — all green.