feat: Saturday Office of Our Lady + pre-1955 precedence tie-breaks (#453) #466

Merged
manlycucumber merged 1 commit from feature/453-saturday-office-our-lady into develop 2026-07-07 18:26:26 +00:00
manlycucumber commented 2026-07-07 18:22:59 +00:00 (Migrated from github.com)

Part of the #453 / #63 burndown to flip isBuilt for the 1954 (Divino Afflatu) and 1955 (Cum nostra) editions — the last content seam before the flip (PR E of the A→C→B→D→E→F series).

Saturday Office of Our Lady

The votive Officium Sanctae Mariae in Sabbato — a white ritus simplex office said on a free Saturday — that the 1962 rubrics dropped.

  • New edition-gated filler src/Temporal/SaturdayOfOurLady.php, minted like the moveable feasts (gated on TemporalAttributes::has('sancta-maria-sabbato')), so 1962 is byte-identical by construction.
  • Seasonal eligibility computed by the filler: excluded in Advent, the Christmas-vigil → Epiphany-octave block (24 Dec – 13 Jan), and Lent/Passiontide; pre-Lent (Septuagesima) Saturdays are kept. Ember/vigil/octave Saturdays fall out by precedence.
  • Precedence: the lady-on-saturday tier moves above simple (ordinal 23) in both editions; the kind is routed before the grade ladder; a coincident Simple is commemorated under it; a displaced lady office is dropped, not commemorated. 1955 keeps more free Saturdays than 1954 (its collapsed octaves free them: 8/52 in 1954 → 10/52 in 1955).

Two precedence tie-breaks

  • 2a — two Simples: a new dignior-simple tier (above a plain simple by subOrder) selected by a membership set, seeded with Ss Marius & Companions over St Canute (19 Jan) — replacing the resolver's arbitrary id-string order (which wrongly celebrated Canute).
  • 2b — greater double vs resumed Sunday: no code change. The engine already gives the correct Divino Afflatu answer (a minor/resumed Sunday outranks a greater double, so on 18 Nov the resumed Sunday is celebrated and the Dedication of Ss Peter & Paul commemorated), locked by a regression test. A 3-scholar fact sheet had claimed the opposite (the Tridentine/1960 rule) and was rejected. ⚠️ A scraped 1956 DO snapshot has a corrupted 18-Nov row — do not use it to "correct" this verified behaviour.

Verification

  • Lint + phpstan clean; 984 PHPUnit tests + 32 generator tests green; corpus reproducible; 1962 golden byte-identical.
  • 6-dimension adversarial review against live engine output — cross-edition parity (the prior-PR failure class confirmed absent), season boundaries (brute-forced 1913–2060, zero off-by-one), drop-not-commemorate invariant, 1962 no-leak (all 5 hashes identical), the dignity tie-break, and the liturgical facts (both doubts resolved in the PR's favour).
  • One documented residual (known-differences + KNOWN-LIMITATIONS): the temporal engine does not yet model an anticipated Sunday, so a rare Saturday before an early Septuagesima shows the lady office; the tier is correctly ranked to yield automatically once that observance is added.

As-built design: docs/design/rubric-system-model.md Seam 9.

Part of the **#453 / #63** burndown to flip `isBuilt` for the 1954 (Divino Afflatu) and 1955 (Cum nostra) editions — the last content seam before the flip (PR E of the A→C→B→D→**E**→F series). ## Saturday Office of Our Lady The votive *Officium Sanctae Mariae in Sabbato* — a white *ritus simplex* office said on a free Saturday — that the 1962 rubrics dropped. - New edition-gated filler `src/Temporal/SaturdayOfOurLady.php`, minted like the moveable feasts (gated on `TemporalAttributes::has('sancta-maria-sabbato')`), so **1962 is byte-identical by construction**. - **Seasonal eligibility** computed by the filler: excluded in Advent, the Christmas-vigil → Epiphany-octave block (24 Dec – 13 Jan), and Lent/Passiontide; **pre-Lent (Septuagesima) Saturdays are kept**. Ember/vigil/octave Saturdays fall out by precedence. - **Precedence:** the `lady-on-saturday` tier moves **above `simple`** (ordinal 23) in both editions; the kind is routed before the grade ladder; a coincident Simple is commemorated under it; a displaced lady office is **dropped, not commemorated**. 1955 keeps **more** free Saturdays than 1954 (its collapsed octaves free them: 8/52 in 1954 → 10/52 in 1955). ## Two precedence tie-breaks - **2a — two Simples:** a new `dignior-simple` tier (above a plain simple by subOrder) selected by a membership set, seeded with **Ss Marius & Companions over St Canute** (19 Jan) — replacing the resolver's arbitrary id-string order (which wrongly celebrated Canute). - **2b — greater double vs resumed Sunday:** **no code change.** The engine already gives the correct Divino Afflatu answer (a minor/resumed Sunday outranks a greater double, so on 18 Nov the resumed Sunday is celebrated and the Dedication of Ss Peter & Paul commemorated), locked by a regression test. A 3-scholar fact sheet had claimed the opposite (the Tridentine/1960 rule) and was rejected. **⚠️ A scraped 1956 DO snapshot has a corrupted 18-Nov row — do not use it to "correct" this verified behaviour.** ## Verification - Lint + phpstan clean; **984 PHPUnit tests + 32 generator tests** green; corpus reproducible; **1962 golden byte-identical**. - **6-dimension adversarial review** against live engine output — cross-edition parity (the prior-PR failure class confirmed absent), season boundaries (brute-forced 1913–2060, zero off-by-one), drop-not-commemorate invariant, 1962 no-leak (all 5 hashes identical), the dignity tie-break, and the liturgical facts (both doubts resolved in the PR's favour). - One documented residual (known-differences + KNOWN-LIMITATIONS): the temporal engine does not yet model an *anticipated* Sunday, so a rare Saturday before an early Septuagesima shows the lady office; the tier is correctly ranked to **yield automatically** once that observance is added. As-built design: `docs/design/rubric-system-model.md` **Seam 9**.
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!466
No description provided.