feat: SSPX particular-calendar conformance gate (#80) #445

Merged
manlycucumber merged 1 commit from feature/80-sspx-conformance-gate into develop 2026-07-02 21:19:08 +00:00
manlycucumber commented 2026-07-02 21:17:57 +00:00 (Migrated from github.com)

Closes the v0.2 SSPX overlay milestone (epic #75): flips the #49 SSPX oracle from a base-engine divergence tracker into the SSPX particular-calendar conformance gate. The overlay content itself shipped in #76 (St Pius X + Seven Sorrows of Sep 15 to first class); this wires the #78 selector into the harness and proves conformance. Refs #80.

What changed

  • SspxOracle resolves under the SSPX overlay now (CalendarCatalog::resolver('sspx')), not the bare base engine — exactly the production path a consumer gets by selecting the SSPX calendar.
  • New conformance assertion testOverlayModelsEverySspxParticular: every FSSPX-tagged (particular:true) day the ordo publishes must match the engine under the overlay. A newly-published Society proper feast, or a broken overlay, fails it — naming the days.
  • The residual baseline shrinks 23 → 17 and now contains zero sspx-particular rows: St Pius X and the Seven Sorrows (Sep 15) conform across all three fixture years.

The residual (all particular:false, tracked)

category rows what it is
corroborates-base-rank 10 base-1962 ranks the base engine still gets wrong, corroborated by missalemeum — the September Ember week (#439), the Ascension vigil (#440), BVM-on-Saturday. Not the overlay's job; also feeds #428.
sspx-diverges-from-base 6 the movable Seven Sorrows (Friday after Passion Sunday — Easter-relative, beyond a fixed-date SanctoralData overlay) and the Vigil of the Assumption (III upstream vs a II-class vigil under the 1960 Code of Rubrics n. 91 — a feed artifact, not conformed to, cf. the didacus/ubaldus precedent)
sspx-divergent-other 1 2026-09-26 Ember Saturday (base structural, #439)

Nothing is silently dropped: the two SSPX divergences we don't model are documented in the fixture README, the oracle docblock, and facts/overlays/sspx.yaml, and remain guarded in the baseline for drift.

Verification

lint + analyse clean · validation 23 green (SSPX conformance + residual-baseline + well-formed) · introibo-core 704 green (1 pre-existing skip). Baseline re-frozen with php bin/freeze-sspx-baseline.php. Commit SSH-signed + DCO.

Closes the v0.2 SSPX overlay milestone (epic #75): flips the #49 SSPX oracle from a base-engine **divergence tracker** into the SSPX particular-calendar **conformance gate**. The overlay content itself shipped in #76 (St Pius X + Seven Sorrows of Sep 15 to first class); this wires the #78 selector into the harness and proves conformance. Refs #80. ## What changed - **`SspxOracle` resolves under the SSPX overlay** now (`CalendarCatalog::resolver('sspx')`), not the bare base engine — exactly the production path a consumer gets by selecting the SSPX calendar. - **New conformance assertion** `testOverlayModelsEverySspxParticular`: every FSSPX-tagged (`particular:true`) day the ordo publishes must match the engine under the overlay. A newly-published Society proper feast, or a broken overlay, fails it — naming the days. - **The residual baseline shrinks 23 → 17** and now contains **zero `sspx-particular` rows**: St Pius X and the Seven Sorrows (Sep 15) conform across all three fixture years. ## The residual (all `particular:false`, tracked) | category | rows | what it is | |---|---|---| | `corroborates-base-rank` | 10 | base-1962 ranks the **base** engine still gets wrong, corroborated by missalemeum — the September Ember week (#439), the Ascension vigil (#440), BVM-on-Saturday. Not the overlay's job; also feeds #428. | | `sspx-diverges-from-base` | 6 | the movable Seven Sorrows (Friday after Passion Sunday — Easter-relative, beyond a fixed-date `SanctoralData` overlay) and the Vigil of the Assumption (III upstream vs a II-class vigil under the 1960 Code of Rubrics n. 91 — a feed artifact, **not conformed to**, cf. the didacus/ubaldus precedent) | | `sspx-divergent-other` | 1 | 2026-09-26 Ember Saturday (base structural, #439) | **Nothing is silently dropped:** the two SSPX divergences we don't model are documented in the fixture README, the oracle docblock, and `facts/overlays/sspx.yaml`, and remain guarded in the baseline for drift. ## Verification `lint` + `analyse` clean · `validation` 23 green (SSPX conformance + residual-baseline + well-formed) · `introibo-core` 704 green (1 pre-existing skip). Baseline re-frozen with `php bin/freeze-sspx-baseline.php`. Commit SSH-signed + DCO.
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!445
No description provided.