chore: add the SSPX 1962 ordo as a secondary validation oracle (#49) #429

Merged
manlycucumber merged 1 commit from chore/49-sspx-oracle into develop 2026-07-02 18:17:14 +00:00
manlycucumber commented 2026-07-02 18:14:40 +00:00 (Migrated from github.com)

Closes #49.

Adds the SSPX 1962 ordo (1962ordo.today) as the third oracle in the validation harness (#45), after Computus (#46) and missalemeum (#47/#48).

Why SSPX

The SSPX ordo is a second, independent implementation of the 1962 (Rubricae 1960) calendar and a particular calendar in its own right — the universal 1962 base plus its own observances (St Pius X and the Seven Sorrows elevated to first class, tagged (FSSPX) upstream). Per the oracle-authority policy it is not the base authority (missalemeum is); its jobs are corroboration and overlay discovery.

What's here

  • tools/oracles/harvest-sspx.mjs — maintainer harvester of the public GET /get-liturgical-days/ feed (facts only, clean-room), pinned to 2024–2026 (the missalemeum range) for a day-for-day cross-check. Byte-reproducible.
  • tests/Validation/fixtures/sspx/ — the pinned fixture ({date, name, klasse, particular, feast}), provenance.json, README.md, and the frozen sspx-differences.ndjson baseline.
  • tests/Validation/SspxOracle.php + SspxOracleTest.php — compares the engine's per-day class against SSPX and asserts the mismatch set equals the baseline (regression and drift both fail).
  • bin/freeze-sspx-baseline.php — re-freeze after a reviewed calendar change.

Three-way categorisation (85 mismatches)

Each class mismatch is cross-referenced against missalemeum's reading:

category n meaning feeds
corroborates-base-rank 71 SSPX and missalemeum agree against the engine accuracy worklist #428 (now witnessed twice)
sspx-particular 6 (FSSPX)-tagged elevations (St Pius X, Seven Sorrows, Sep) v0.2 SSPX overlay
sspx-diverges-from-base 6 engine matches base authority; SSPX alone differs (Lenten Seven Sorrows, Assumption Vigil) v0.2 SSPX overlay
sspx-divergent-other 2 all three sources differ (Ember Saturday of September) adjudication

The 71 corroborated rows are exactly the corpus-rank days missalemeum already flags — an independent second source reaching the identical verdict.

Notes / allowances

  • The feed exposes class but not colour or commemoration counts, so only class is compared (documented).
  • Days without an upstream class token (e.g. All Saints 2026) are skipped; the feed omits a couple of days per year (2024-06-24, 2025-04-28), simply not compared.
  • Because SSPX is a particular calendar, every mismatch is expected — the baseline is a living catalogue of how the base engine relates to SSPX, not a bug list.

Gate: lint 117/117, analyse [OK], test 629 passing.

Closes #49. Adds the **SSPX 1962 ordo** ([1962ordo.today](https://1962ordo.today)) as the third oracle in the validation harness (#45), after Computus (#46) and missalemeum (#47/#48). ## Why SSPX The SSPX ordo is a *second, independent* implementation of the 1962 (Rubricae 1960) calendar and a **particular calendar** in its own right — the universal 1962 base plus its own observances (St Pius X and the Seven Sorrows elevated to first class, tagged `(FSSPX)` upstream). Per the oracle-authority policy it is **not** the base authority (missalemeum is); its jobs are **corroboration** and **overlay discovery**. ## What's here - `tools/oracles/harvest-sspx.mjs` — maintainer harvester of the public `GET /get-liturgical-days/` feed (facts only, clean-room), pinned to **2024–2026** (the missalemeum range) for a day-for-day cross-check. Byte-reproducible. - `tests/Validation/fixtures/sspx/` — the pinned fixture (`{date, name, klasse, particular, feast}`), `provenance.json`, `README.md`, and the frozen `sspx-differences.ndjson` baseline. - `tests/Validation/SspxOracle.php` + `SspxOracleTest.php` — compares the engine's per-day class against SSPX and asserts the mismatch set equals the baseline (regression **and** drift both fail). - `bin/freeze-sspx-baseline.php` — re-freeze after a reviewed calendar change. ## Three-way categorisation (85 mismatches) Each class mismatch is cross-referenced against missalemeum's reading: | category | n | meaning | feeds | |---|---|---|---| | `corroborates-base-rank` | 71 | SSPX **and** missalemeum agree against the engine | accuracy worklist #428 (now witnessed twice) | | `sspx-particular` | 6 | `(FSSPX)`-tagged elevations (St Pius X, Seven Sorrows, Sep) | v0.2 SSPX overlay | | `sspx-diverges-from-base` | 6 | engine matches base authority; SSPX alone differs (Lenten Seven Sorrows, Assumption Vigil) | v0.2 SSPX overlay | | `sspx-divergent-other` | 2 | all three sources differ (Ember Saturday of September) | adjudication | The 71 corroborated rows are exactly the corpus-rank days missalemeum already flags — an independent second source reaching the identical verdict. ## Notes / allowances - The feed exposes **class** but not colour or commemoration counts, so only class is compared (documented). - Days without an upstream class token (e.g. All Saints 2026) are skipped; the feed omits a couple of days per year (2024-06-24, 2025-04-28), simply not compared. - Because SSPX is a particular calendar, every mismatch is *expected* — the baseline is a living catalogue of how the base engine relates to SSPX, not a bug list. Gate: `lint` 117/117, `analyse` [OK], `test` 629 passing.
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!429
No description provided.