[Epic] Show-your-work resolution trace #233

Closed
opened 2026-07-01 06:42:36 +00:00 by manlycucumber · 1 comment
manlycucumber commented 2026-07-01 06:42:36 +00:00 (Migrated from github.com)

For any day, expose WHY it resolved as it did — the single highest-authority feature. Depends on precedence-as-data (#43) and the Citation model. Done when day() can explain its winner, colour, and season with cited reasons.

Epic — child issues are tracked as sub-issues.

For any day, expose WHY it resolved as it did — the single highest-authority feature. Depends on precedence-as-data (#43) and the Citation model. Done when `day()` can explain its winner, colour, and season with cited reasons. _Epic — child issues are tracked as sub-issues._
manlycucumber commented 2026-07-02 19:16:59 +00:00 (Migrated from github.com)

Epic complete — the engine shows its work

For any day, explain($date) (and contract($date, true)) now returns a cited "why-this-won" trace in the output contract's reserved resolution slot.

Children

  • #234 — emit the trace from day(): the sorted field of candidates (each with its line in the Table of Liturgical Days), the celebrated winner and why, every impeded office's occurrence outcome, and the commemoration limit.
  • #235 — colour and season derivation added, each with its governing rubric.
  • #236 — proven: every cited step foreign-keys a real source in sources.ndjson (3535 assertions across two years); no dangling citations.
  • #240 — golden-master traces for 11 contested days, regression-tested against silent precedence drift.

Design (docs/design/resolution-trace-model.md)

  • Opt-inday()/contract() are unchanged (resolution: null); a distinct tracing resolver populates the slot on demand. The golden-year digest never moved — zero re-freeze.
  • No decision/explanation drift — each occurrence reason is produced by the same decideOccurrence() that makes the decision; the trace records the actual candidates and outcomes from assemble(), not a reconstruction.
  • Every step cited to the Codex Rubricarum (rg-1960:<n>), reusing the exact paragraphs already vetted in the precedence rules.

Value

This is the platform's highest-authority feature and the groundwork for the API's ?explain surface and the Site's "why this day?" panel. It also debugs everything downstream — the v0.2 SSPX overlay, the 1954/1955 engines, and the corpus.

Session: 4 PRs (#432 · #433 · #434 · #435), all green, golden-year fixture untouched throughout.

Closing as complete.

## Epic complete — the engine shows its work ✅ For any day, `explain($date)` (and `contract($date, true)`) now returns a cited "why-this-won" trace in the output contract's reserved `resolution` slot. ### Children - **#234** — emit the trace from `day()`: the sorted field of candidates (each with its line in the Table of Liturgical Days), the celebrated winner and why, every impeded office's occurrence outcome, and the commemoration limit. - **#235** — colour and season derivation added, each with its governing rubric. - **#236** — proven: every cited step foreign-keys a real source in `sources.ndjson` (3535 assertions across two years); no dangling citations. - **#240** — golden-master traces for 11 contested days, regression-tested against silent precedence drift. ### Design (`docs/design/resolution-trace-model.md`) - **Opt-in** — `day()`/`contract()` are unchanged (`resolution: null`); a distinct tracing resolver populates the slot on demand. **The golden-year digest never moved** — zero re-freeze. - **No decision/explanation drift** — each occurrence reason is produced by the *same* `decideOccurrence()` that makes the decision; the trace records the *actual* candidates and outcomes from `assemble()`, not a reconstruction. - **Every step cited** to the Codex Rubricarum (`rg-1960:<n>`), reusing the exact paragraphs already vetted in the precedence rules. ### Value This is the platform's highest-authority feature and the groundwork for the API's `?explain` surface and the Site's "why this day?" panel. It also debugs everything downstream — the v0.2 SSPX overlay, the 1954/1955 engines, and the corpus. Session: 4 PRs ([#432](https://github.com/Introibo-App/Core/pull/432) · [#433](https://github.com/Introibo-App/Core/pull/433) · [#434](https://github.com/Introibo-App/Core/pull/434) · [#435](https://github.com/Introibo-App/Core/pull/435)), all green, golden-year fixture untouched throughout. Closing as complete.
Sign in to join this conversation.
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#233
No description provided.