# Operational-status projection review addendum

Use this with `frontend-api-contract-release-review.md` when a sprint adds an operator-facing status panel backed by persisted job/run rows.

## Persisted-to-displayed trace

1. Trace persisted run rows → projection service → API schema → TypeScript type → component labels → tests.
2. Keep these epochs distinct:
   - **latest attempt:** status, attempted/valued/missing counters, current reason codes;
   - **latest success:** successful timestamp, confirmed date, successful value, price timestamp;
   - **scheduler/source state:** global enablement, per-source enablement, pause state, next run.
3. Every displayed group of counters must come from one coherent run. Never combine `valued_assets` from the latest success with `missing_assets` from the latest attempt unless names and labels explicitly disclose the two epochs.
4. For partial runs, verify persistence retains successful and failed counts. A row that writes `stored=0` despite some valid provider results cannot support a truthful “partially successful” panel.
5. Probe every public operational enum (`active`, `paused`, `partial`, `failed`). Check that existing sources do not remain permanently `paused` because a new per-source flag was hardcoded false.
6. Prove ordinary dashboard loading does not cross the provider boundary. Trace the read endpoint and, where practical, spy on provider calls; a frontend cache-bypass option is not itself a provider call.
7. Verify a concrete UTC timestamp renders in the required timezone, including a DST boundary. Use field-specific null labels: “not planned” fits a future run but not a missing historical success.
8. A failed status fetch must render an explicit unavailable/error state rather than silently removing the status panel.
9. When responsive behavior is acceptance-critical, add browser viewport checks; component tests plus a production build are insufficient.

## Minimum matrix

- no run and source disabled;
- source enabled while global timer is disabled;
- first successful run;
- first partial run with both valid and missing assets;
- successful run followed by partial or failed attempt;
- malformed/unavailable status response;
- Europe/Zurich timestamp rendering across UTC-offset changes;
- narrow mobile, tablet, and desktop layout;
- no market-provider invocation during normal dashboard load.

## Verdict discipline

Green focused tests and a green frontend build do not override internally inconsistent persisted-to-displayed semantics. Report severity-ranked findings with exact file/line evidence, then list separately what was positively verified.