fix(calculation): read cache carries real input status + timestamps

This commit is contained in:
Joseph Doherty
2026-08-20 10:40:15 -04:00
parent 48efdac600
commit 60e5b40228
6 changed files with 163 additions and 25 deletions
@@ -758,3 +758,15 @@ test could only pass once the production change landed.
- `TagState.LastPublishedBad` (two-state) became `HasPublished` + `LastPublishedStatus` (uint), which is
what lets a Bad→different-Bad transition republish and what makes `ReadAsync` agree with the
subscriber. The evaluator is still handed bare values here — T14 hands it the snapshots.
### T14 — `CalculationEvaluator` snapshot overload
- RED: `--filter "…CalculationEvaluatorTests"` ⇒ **build failure**, `CS1503: cannot convert from
'Dictionary<string, DataValueSnapshot>' to 'IReadOnlyDictionary<string, object?>'` (×3) — no snapshot
overload existed.
- GREEN: `Driver.Calculation.Tests` 64/64.
- `BuildReadCache` is **deleted**, not fixed: the snapshots now pass straight through as the read cache.
The value-only overload survives (tests use it) but is now the one that fabricates Good, and its
xmldoc says so and points at the snapshot overload.
- Docs: `docs/drivers/Calculation.md` gains an "Input quality" section (the policy table + the
behaviour change for null-tolerant scripts) and the dedup bullet now says **(value, status)**.
@@ -102,7 +102,7 @@
{
"id": "T14",
"subject": "CalculationEvaluator snapshot overload: read cache carries real input status + timestamps; passthrough fast path on snapshots",
"status": "pending",
"status": "done",
"blockedBy": [
"T13"
]