feat: emit a cited resolution trace from day() (#234) #432
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!432
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/234-resolution-trace"
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?
First of Epic #233 (show-your-work resolution trace). Closes #234.
Fills the output contract's reserved day-level
resolutionslot with a cited "why-this-won" trace.Design —
docs/design/resolution-trace-model.mdday()/contract()are unchanged —resolutionstaysnull, payloads stay lean, and the golden digest is untouched (it hashes the default contract; no re-freeze).explain($date)/contract($date, true)resolve the year with a distinct tracing resolver and populate the slot — the API's?explainsurface.decideOccurrence()that decides the outcome, sooccurrenceOutcome()and the newexplainOccurrence()are two readers of one decision. The trace records the actual sorted candidates + outcomes fromassemble(), not a reconstruction — transfers and displaced offices are reported exactly as decided.rg-1960:<n>, reusing the Codex Rubricarum paragraphs already vetted in the precedence rules.Shape (a real trace, St Silverius 2024-06-20 — the #424 fix, shown)
What's here
src/Trace/ResolutionReason.php,ResolutionTrace.php— the trace VOs (depend only onCitation, so the Precedence→Trace dependency stays one-way).PrecedenceTiercarries itsselector+ n.91line(already in the corpus data); the sort still keys only onordinal/subOrder→ resolution unchanged.PrecedenceRulesgainsexplainPrecedence/explainOccurrence/explainCommemorationLimit;Rubrics1962Precedenceimplements them via the single-sourcedecideOccurrence().DayResolver::explaining()(opt-in tracing mode) records the trace inassemble();LiturgicalDaycarries it;DayContractfillsresolution;functions.phpaddsexplain().explain()/contract()on contested days (commemoration-grade #424, Annunciation transfer, All Saints, Christmas).Colour + season derivation (#235), citation-completeness (#236), and golden trace fixtures (#240) follow.
Gate:
lintclean ·analyse[OK] ·test652 (+11) · golden unchanged · corpus-verify OK.