feat: 1955 interim edition (Cum nostra hac aetate) — data, engine, validation #456
No reviewers
Labels
No labels
area: build
area: ci
area: compare
area: data
area: engine
area: model
area: provenance
area: rite
area: validation
backport
blocked
breaking
confirmed
dependencies
duplicate
epic
github_actions
invalid
needs-info
needs-triage
php
priority: high
priority: low
priority: medium
regression
type: bug
type: chore
type: correction
type: docs
type: enhancement
type: feature
type: fix
type: perf
type: refactor
type: security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Directorium/Core!456
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/68-1955-interim-edition"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #69, #70, #71 — Epic #68 (the 1955 interim / Cum nostra hac aetate engine), milestone v0.3.0.
The 1955 reform (S.R.C. decree of 23 Mar 1955, in force 1 Jan 1956) as an additive edition over the
already-validated 1954 (Divino Afflatu) engine. Like 1954, it is
isBuilt: false— it resolves throughDayResolver::forEdition(RubricSystem::rubricae1955())for validation, and the publicCalendarCatalogboundary refuses
day('1955')until the deferred temporal casuistry lands. The 1962 golden fixture isbyte-identical throughout; the corpus is reproducible.
#69 — the dataset (a generator-derived delta)
Rather than author ~250 redundant YAML blocks,
deriveCumNostra1955computes theroman-rubricae-1955edition from the 1954 data by the reform's mechanical transform: semidouble → simple (II.20), simple →
commemoration (II.21), doubles unchanged. Grades cite the
cn-1955decree; colours inheritordo-1954.The transform reconciles exactly (349 → 319 attribute records = the suppressions below).
#70 — octave & vigil suppressions + the precedence engine
octaves (II.11 —
octaves.yamldeclares none for 1955).Rubrics1955Precedenceholds only what Cum nostra changed: no semidouble tier; the 0/1/2 commemorationcaps (III.4) via a tier-aware
dayClassFor()(so an Advent Sunday elevated to the first class by II.3takes the zero cap despite its shared 1962 rank); the never-omitted privileged commemorations kept over
the cap (III.2, an edition-scoped
privilegedCommemorationsExemptFromLimit()honoured by the sharedselector — 1954/1962 return false, so their resolution is unmoved); vigil-on-Sunday omitted not anticipated
(II.10); translation restricted to first-class feasts; and a mystery of the Lord taking a per-annum
Sunday's place (II.7, the
lord-mysteryset).#71 — validation against Divinum Officium
Day-by-day cross-check of
forEdition()resolution against DO'sDivino Afflatu - 1954andReduced - 1955engines (1954, 1957, 1958). The derived grade transform is confirmed correct; two real 1955 occurrence
departures the sweep surfaced (the first-class-only transfer rule and the II.7 lord-mystery) are fixed in the
engine. A representative cross-section is pinned as a committed fixture and asserted in CI by
HistoricalEditionOracleTest— no Perl or DO checkout needed at test time (the SSPX approval-test shape).The differences the grade-level engine defers (the apostle-vs-martyr Tabella; the 1955-instituted St Joseph
the Worker; one single-feast grade disagreement; the shared temporal / Office-of-the-Dead categories) are
catalogued in
known-differences.ndjson.Verification
composer test(all green, incl. the 1962 golden 1583–2200),composer lint,phpstan([OK]),npm run verify(corpus reproducible),npm test(generator). Design:docs/design/rubric-system-model.mdSeam 6a, rewritten as built + validated.