feat: define the 1962 precedence rule-table scaffold (#30) #346

Merged
manlycucumber merged 1 commit from feature/30-precedence-table into develop 2026-07-02 03:04:13 +00:00
manlycucumber commented 2026-07-02 03:02:55 +00:00 (Migrated from github.com)

Closes #30. Epic #29, issue 1/8 — the precedence correctness surface.

What

Adds src/Precedence/ and the per-edition seam:

  • PrecedenceRules interface — the #59 abstraction (1954/1955/NO editions later); the resolver pipeline is edition-agnostic.
  • Rubrics1962PrecedencetierOf() maps an office to its line in the 1960 Table of Liturgical Days (Codex Rubricarum n. 91). Tier ordinals are the n. 91 line numbers; sub-lines the data can't yet distinguish (proper/indult) collapse onto the universal-Church line until the corpus (#38) carries provenance.
  • PrecedenceTier — the true sort key (ordinal + subOrder). 1962 precedence is not a total order on RankClass.
  • PrecedenceContext — day-level facts (the Triduum). No accessor added to RealizedObservance — season is read via a narrow instanceof TemporalObservance.

Correctness

The n. 91 order was fetched from The New Rubrics of the Roman Breviary and Missal (1960) and cross-checked against a second primary-source transcription (line-for-line agreement). This corrected one slip in the design synthesis: privileged first-class ferias (line 7) outrank first-class feasts (11) — the reason the Annunciation transfers out of Holy Week. Named great feasts (lines 1/3/4/5) are matched by canonical id (Easter/Pentecost are kind=sunday, so must be caught before the Sunday line).

The test pins all 24 detectable categories to their exact n. 91 line and asserts the occurrence-critical boundaries. Occurrence outcomes over this order are #31–#33.

Verification

composer lint · composer analyse (PHPStan L6, no errors) · composer test
(426 tests, 30,242 assertions — +30). Commits signed + DCO.

Closes #30. Epic #29, issue 1/8 — the precedence correctness surface. ## What Adds `src/Precedence/` and the per-edition seam: - **`PrecedenceRules`** interface — the #59 abstraction (1954/1955/NO editions later); the resolver pipeline is edition-agnostic. - **`Rubrics1962Precedence`** — `tierOf()` maps an office to its line in the **1960 Table of Liturgical Days (Codex Rubricarum n. 91)**. Tier ordinals *are* the n. 91 line numbers; sub-lines the data can't yet distinguish (proper/indult) collapse onto the universal-Church line until the corpus (#38) carries provenance. - **`PrecedenceTier`** — the true sort key (ordinal + subOrder). 1962 precedence is **not** a total order on `RankClass`. - **`PrecedenceContext`** — day-level facts (the Triduum). **No accessor added to `RealizedObservance`** — season is read via a narrow `instanceof TemporalObservance`. ## Correctness The n. 91 order was fetched from *The New Rubrics of the Roman Breviary and Missal (1960)* and **cross-checked against a second primary-source transcription** (line-for-line agreement). This corrected one slip in the design synthesis: **privileged first-class ferias (line 7) outrank first-class feasts (11)** — the reason the Annunciation transfers out of Holy Week. Named great feasts (lines 1/3/4/5) are matched by canonical id (Easter/Pentecost are `kind=sunday`, so must be caught before the Sunday line). The test pins all 24 detectable categories to their exact n. 91 line and asserts the occurrence-critical boundaries. Occurrence *outcomes* over this order are #31–#33. ## Verification `composer lint` · `composer analyse` (PHPStan L6, no errors) · `composer test` (426 tests, 30,242 assertions — +30). Commits 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!346
No description provided.