feat: 1954 privileged temporal octaves — Epiphany, Corpus Christi, Ascension, Sacred Heart (#453) #462

Merged
manlycucumber merged 1 commit from feature/453-1954-temporal-octaves into develop 2026-07-07 06:44:25 +00:00
manlycucumber commented 2026-07-07 06:41:32 +00:00 (Migrated from github.com)

Mints the four pre-1955 privileged temporal octaves the 1954 (Divino Afflatu) edition keeps that 1962 dropped — Epiphany and Corpus Christi (2nd order), the Ascension and the Sacred Heart (3rd order) — the same code path 1962 uses for its Christmas/Easter/Pentecost octaves. Part of the #453 burndown (does not close it — PR F flips isBuilt).

What lands

  • Edition-aware temporal engine. TemporalAttributes gains an editionDir + a has() gate; DayResolver threads its corpusDir into every filler. The generator now emits a per-edition attributes.temporale.ndjson for every edition and merges edition-specific temporal-archetype identities into the shared identity.temporale (deduped, fail-closed). The base (1962) file is untouched, so a filler mints an octave only where the edition declares the archetype — 1962 mints none and its golden fixture is byte-identical by construction.
  • Data. facts/editions/roman-divino-afflatu/temporale.yaml — eight archetypes (a within-octave + an octave-day per octave), rank 3, white, title cited mr-1920, grade/colour cited ordo-1954.
  • Minting. ChristmasCycle (Epiphany), Eastertide (Ascension), TimeAfterPentecost (Corpus Christi + Sacred Heart) mint the days within + the octave day; a Sunday within keeps its own office and the octave is commemorated under it.
  • Precedence. Rubrics1954Precedence routes the octaves by id before the grade ladder: the 2nd-order octaves yield only to a Double of the I class; the 3rd-order octaves sit low, always commemorated (emergent). This makes a Double II transferred into the Corpus octave skip it and land on the Sacred Heart day-within — the Queenship of the BVM, 1956: 9 June, not 1 June.
  • Coupled dignity fix (from adversarial review). A feast of the Lord (great-lord) now outranks a I-class saint on the same I-class line (a lower subOrder, which PrecedenceTier already modelled), so Corpus Christi / the Sacred Heart keep their own day when a I-class saint coincides (St John the Baptist 24 Jun / the Precious Blood 1 Jul, in the rare years Easter is 25/24 Apr) — the saint is transferred and the octave stays attached to its feast. Matches 1962.

Verification

  • lint + phpstan clean; 950 PHPUnit tests pass; 30 generator tests pass; corpus reproducible.
  • 1962 golden byte-identical (no frozen fixture touched); missalemeum + SSPX oracle baselines zero drift.
  • 12-agent adversarial review (6 dimensions × find-then-verify): five clean, one HIGH defect found and fixed at the root (the dignity fix above).
  • 1900–2100 DA sweep: 0 great-lord feasts wrongly transferred, 0 octave detachments, change confined to 26 intended dignity-order cases.

Design as-built: docs/design/rubric-system-model.md Seam 7.

Mints the four pre-1955 **privileged temporal octaves** the 1954 (Divino Afflatu) edition keeps that 1962 dropped — **Epiphany** and **Corpus Christi** (2nd order), the **Ascension** and the **Sacred Heart** (3rd order) — the same code path 1962 uses for its Christmas/Easter/Pentecost octaves. Part of the #453 burndown (does not close it — PR F flips `isBuilt`). ## What lands - **Edition-aware temporal engine.** `TemporalAttributes` gains an `editionDir` + a `has()` gate; `DayResolver` threads its `corpusDir` into every filler. The generator now emits a per-edition `attributes.temporale.ndjson` for every edition and merges edition-specific temporal-archetype identities into the shared `identity.temporale` (deduped, fail-closed). The base (1962) file is untouched, so a filler mints an octave **only** where the edition declares the archetype — 1962 mints none and its golden fixture is **byte-identical by construction**. - **Data.** `facts/editions/roman-divino-afflatu/temporale.yaml` — eight archetypes (a within-octave + an octave-day per octave), rank 3, white, title cited `mr-1920`, grade/colour cited `ordo-1954`. - **Minting.** `ChristmasCycle` (Epiphany), `Eastertide` (Ascension), `TimeAfterPentecost` (Corpus Christi + Sacred Heart) mint the days within + the octave day; a Sunday within keeps its own office and the octave is commemorated under it. - **Precedence.** `Rubrics1954Precedence` routes the octaves by id before the grade ladder: the 2nd-order octaves yield only to a Double of the I class; the 3rd-order octaves sit low, **always commemorated** (emergent). This makes a Double II transferred into the Corpus octave skip it and land on the Sacred Heart day-within — the Queenship of the BVM, 1956: **9 June, not 1 June**. - **Coupled dignity fix** (from adversarial review). A feast of the Lord (`great-lord`) now outranks a I-class *saint* on the same I-class line (a lower `subOrder`, which `PrecedenceTier` already modelled), so Corpus Christi / the Sacred Heart keep their own day when a I-class saint coincides (St John the Baptist 24 Jun / the Precious Blood 1 Jul, in the rare years Easter is 25/24 Apr) — the saint is transferred and the octave stays attached to its feast. Matches 1962. ## Verification - `lint` + `phpstan` clean; **950 PHPUnit tests** pass; 30 generator tests pass; corpus **reproducible**. - 1962 golden **byte-identical** (no frozen fixture touched); missalemeum + SSPX oracle baselines **zero drift**. - 12-agent adversarial review (6 dimensions × find-then-verify): five clean, one HIGH defect found and **fixed at the root** (the dignity fix above). - 1900–2100 DA sweep: **0** great-lord feasts wrongly transferred, **0** octave detachments, change confined to 26 intended dignity-order cases. Design as-built: `docs/design/rubric-system-model.md` Seam 7.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Directorium/Core!462
No description provided.