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!472
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/311-calendar-comparison"
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?
What & why
Epic #311 — calendar-mode comparison: the cheapest, earliest comparison mode. Resolve a date, range, or sequence under two or more editions (1962/1954/1955 today) and report where they diverge. It needs no text layer — only ≥2 calendar engines — and is the pattern-setter for the v2.0 rite/office
DiffResult.The taxonomy (
src/Compare/)ComparisonField— the five text-free dimensions two calendars can differ on:feast(principal id),rank,colour,commemorations,season.EditionDayCell— one edition's view of a date, built from the published day contract (so it diffs exactly what a consumer sees, never an internal shape).ComparedDay— N-way symmetric per-day diff: a field is divergent iff the cells don't all share one value (no privileged base). Commemorations compare as an order-independent set.CalendarComparison— a range result with thedivergentDayCountroll-up an "only-changed" filter needs.The comparators
CalendarComparator(#312) —compareDay/compareRange. Selectors are normalised to edition urns and de-duplicated (1962/1960/roman:rubricae-1960collapse); ≥2 distinct required.SequenceComparator(#313) —acrossYears(a fixed civil date scrubbed through the movable cycle, skipping dates a year doesn't have) andacrossEditions; eachComparedSequencepoint is tagged with the fields changed from the previous point — powers the Site year-slider.EditionResolver(internal) memoises the resolved year per(edition, year).Verification
lint✅ ·analyse✅ ·test✅ 1027 tests (1 skipped = live-oracle sweep). Purely additive — 0 existing files changed, so goldens are byte-identical.docs/design/calendar-comparison-model.md); added an orderededitionslist toComparedDay::toArray()(JSON object key order isn't guaranteed); dropped the unusedOverlay\CalendarCatalogDI param so the frozen constructor is clean.Closes #312, #313.