docs(recurring): record the coherence rule, and catch up §10-11 to what shipped

- AGENTS.md §1: reworded the "no horizon" invariant now that a parameter
  literally named horizonMonths exists. Nothing is stored — ExpectedBand's
  horizon only widens how far one read-only walk looks before the result is
  thrown away — but the old wording read as a contradiction to the next
  reader. The no-materialisation rule itself is unchanged.
- DECISIONS.md: added the "archived mirrors endedFrom" entry that was
  missing, including the previously-undocumented corollary that a
  future-dated cancellation dims the row immediately even though the bill
  keeps projecting until endedFrom.
- docs/specs/2026-09-03-recurring-costs-design.md §10-11: updated to
  describe the shipped UI — the "Coming up" group, the Ends column, the two
  coherence checks that gate a coming-up row (X1, X3), and the tests that
  now cover all of it.
This commit is contained in:
Lucas Winther committed 2026-09-04 09:15:28 +02:00
1 parent e3a1fb366b
commit 92e6b763f2
3 files changed
+82 -12

No files matched your search

+11
View File
@@ -105,6 +105,17 @@ record.
happened. Under projection-only this would not have held, and a dated series
would have been required.
→ [`specs/2026-09-03-recurring-costs-design.md`](specs/2026-09-03-recurring-costs-design.md)
- **`archived` MIRRORS "`endedFrom` is set"**, maintained in one place
(`setRecurringCostEndedFrom`) rather than two independent fields a caller
could desynchronise. `endedFrom` stops the projection; `archived` only dims
the row, the same way an archived post stays listed rather than
disappearing. Neither touches a past occurrence. One consequence is visible
and undocumented until now: dating a cancellation in the future sets
`archived` immediately, so a bill still live for months still renders
dimmed with a "restart" button while it keeps projecting rows right up to
`endedFrom`. Defensible under the rule as chosen, not a bug.
→ [`specs/2026-09-03-recurring-costs-design.md`](specs/2026-09-03-recurring-costs-design.md),
`src/store/actions.ts`
## Design system