feat: 1954/1955 moveable feasts — Passiontide Seven Sorrows + Solemnity of St Joseph (#453) #465

Merged
manlycucumber merged 2 commits from feature/453-da-moveable-feasts into develop 2026-07-07 16:43:55 +00:00
manlycucumber commented 2026-07-07 16:42:24 +00:00 (Migrated from github.com)

Summary

Adds the two moveable feasts the pre-1955 rite keeps that the 1962 rubrics dropped, to the 1954 (Divino Afflatu) and 1955 (Cum nostra) editions — one of the last blockers on #453 (the 1954/1955 isBuilt burndown). They are minted the same way as the great moveable feasts and gated on the edition, so the 1962 golden fixture is byte-identical by construction.

  • Seven Sorrows of the BVM — Friday in Passion Week (Easter−9), a Duplex maius, white, no octave; commemorates the greater feria of Passion Week. Shares its name with the fixed 15 Sep feast (a Duplex II in the sanctoral) → disambiguated by slug, never by name.
  • Solemnity / Patronage of St Joseph — Wednesday before the 3rd Sunday after Easter (Easter+17), a Duplex I classis of a saint (double-i-class, not great-lord), white, with a common octave (days-within Easter+18..+23 semidouble; octave day Easter+24 greater double) — 1954 only (Cum nostra suppressed it for 1955).

The one new mechanism

Unlike the four always-commemorated privileged temporal octaves, a common octave's day-within is OMITTED (not commemorated) under a Double of the I or II class. Implemented via a new common-octave-within precedence tier + an isOctaveOmitted branch keyed by id (temporal offices carry no legacy grade). Live-triggered by Sts Philip & James (1 May) and the Finding of the Cross (3 May) when they land in the octave; verified end-to-end.

1955 (Cum nostra)

Both feasts are kept (a double is untouched by the grade-transform); the octave is dropped. The generator runs the 1954 temporale archetypes through a new deriveCumNostra1955Temporale (keep feast, drop within-octave/octave-day) — the temporal twin of the sanctoral derive. Both editions keep the Solemnity (the pre-1-May-1956 state; St Joseph the Worker held out) — documented in KNOWN-LIMITATIONS.md.

Process

Facts were derived + adversarially reconciled first (3 independent scholars + a reconciler, no live oracle), then implemented, then adversarially reviewed (6 dimension finders → per-finding verification). The review caught a real defect — the greater-double routing for the Seven Sorrows was wired into the 1954 engine only, so the 1955 edition (a separate engine/table) demoted it to an ordinary Double and lost it to a coincident Double saint in ~48 years. Root-caused, fixed by mirroring the routing into Rubrics1955Precedence, and pinned with a colliding-year regression test (the 1954-only test had masked it).

Verification

  • lint + phpstan clean; 967 PHPUnit tests (12 new resolution + 5 precedence-tier + 2 generator); 1962 golden byte-identical (corpus diff touches only the DA/1955 dirs + shared identity); corpus reproducible.
  • As-built: docs/design/rubric-system-model.md Seam 8; deferrals recorded in KNOWN-LIMITATIONS.md (octave-day-under-Double-II commemorated; transfer-with-octave dormant; 1955-keeps-Solemnity divergence; Latin orthography; Dominica-infra-Octavam).

Part of #453; leaves the Saturday Office of Our Lady as the last follow-up before isBuilt flips.

## Summary Adds the two moveable feasts the pre-1955 rite keeps that the 1962 rubrics dropped, to the **1954 (Divino Afflatu)** and **1955 (Cum nostra)** editions — one of the last blockers on `#453` (the 1954/1955 `isBuilt` burndown). They are minted the same way as the great moveable feasts and gated on the edition, so the **1962 golden fixture is byte-identical by construction**. - **Seven Sorrows of the BVM** — Friday in Passion Week (Easter−9), a **Duplex maius**, white, no octave; commemorates the greater feria of Passion Week. Shares its name with the fixed 15 Sep feast (a Duplex II in the sanctoral) → disambiguated by **slug**, never by name. - **Solemnity / Patronage of St Joseph** — Wednesday before the 3rd Sunday after Easter (Easter+17), a **Duplex I classis of a saint** (`double-i-class`, *not* `great-lord`), white, with a **common octave** (days-within Easter+18..+23 semidouble; octave day Easter+24 greater double) — **1954 only** (Cum nostra suppressed it for 1955). ## The one new mechanism Unlike the four always-commemorated *privileged* temporal octaves, a **common** octave's day-within is **OMITTED (not commemorated) under a Double of the I or II class**. Implemented via a new `common-octave-within` precedence tier + an `isOctaveOmitted` branch keyed by id (temporal offices carry no legacy grade). Live-triggered by **Sts Philip & James** (1 May) and the **Finding of the Cross** (3 May) when they land in the octave; verified end-to-end. ## 1955 (Cum nostra) Both feasts are kept (a double is untouched by the grade-transform); the octave is dropped. The generator runs the 1954 temporale archetypes through a new `deriveCumNostra1955Temporale` (keep `feast`, drop `within-octave`/`octave-day`) — the temporal twin of the sanctoral derive. Both editions keep the Solemnity (the pre-1-May-1956 state; St Joseph the Worker held out) — documented in `KNOWN-LIMITATIONS.md`. ## Process Facts were derived + adversarially reconciled first (3 independent scholars + a reconciler, no live oracle), then implemented, then adversarially reviewed (6 dimension finders → per-finding verification). **The review caught a real defect** — the greater-double routing for the Seven Sorrows was wired into the 1954 engine only, so the 1955 edition (a separate engine/table) demoted it to an ordinary Double and lost it to a coincident Double saint in ~48 years. Root-caused, fixed by mirroring the routing into `Rubrics1955Precedence`, and pinned with a colliding-year regression test (the 1954-only test had masked it). ## Verification - `lint` + `phpstan` clean; **967 PHPUnit tests** (12 new resolution + 5 precedence-tier + 2 generator); 1962 golden **byte-identical** (corpus diff touches only the DA/1955 dirs + shared identity); corpus reproducible. - As-built: `docs/design/rubric-system-model.md` **Seam 8**; deferrals recorded in `KNOWN-LIMITATIONS.md` (octave-day-under-Double-II commemorated; transfer-with-octave dormant; 1955-keeps-Solemnity divergence; Latin orthography; Dominica-infra-Octavam). Part of `#453`; leaves the **Saturday Office of Our Lady** as the last follow-up before `isBuilt` flips.
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!465
No description provided.