this PR draws nothing on any live route, and this is the capture that establishes it
19 Sept 2026 · branch fix/openworkorders-coverage-caption · captured against propflow-stage · at 5a429a9fb4
Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.
This section is a CONTROL, not proof of a fix, and saying so is the point. This PR puts the day-coverage caption on the two surfaces that draw the folded openWorkOrders series: the Portfolio Metrics dock's Trend cell, and the expanded inspector that dock opens. Neither is mounted on any live route. catalog/surfaces.ts retired metricTable from the dashboard manifest on 2026-08-21 (Gera: “remove it from the dashboard page, but don't delete the component”), canvas/widgets.ts derives WIDGET_DEFS from that manifest so no picker can re-add it, and mergeLayout drops a persisted rect whose id is absent from the defaults. The metricRow inspector is reachable only from that dock.
How that was found, because it was the instrument and not a reading of the code. The first run of this spec asserted "Open Work Orders" and "History:" on this route and refused. Its waitFor text=Open Work Orders had matched the Maintenance card's lowercase “open work orders” caption — a false positive on the wait, a true negative on the assertion. That is the gate working: a picture of this page with a caption claim under it would have looked fine.
What to look at here. The widgets that ARE on the dashboard — Occupancy, Monthly Revenue, NOI, Leasing Pipeline, Renewals Pipeline, Maintenance, Turnovers, Collections — and the absence of a Portfolio Metrics table among them. This page is byte-identical to main: the only code path this PR changes that could touch it is gated by COUNTER_COVERAGE_CAPTIONED_KEYS, which holds openWorkOrders alone, and nothing on this page draws that key's folded series.
Asserted in the captured DOM — OCCUPANCY · MONTHLY REVENUE · LEASING PIPELINE · RENEWALS PIPELINE · MAINTENANCE. Five widget headers that ARE present, asserted as the POSITIVE CONTROL: without them a blank or errored page would render as a clean “nothing changed” and prove nothing. The absence claim — no Portfolio Metrics dock — is what the picture carries, and an absence cannot be asserted by this tool.
Because it cannot be photographed honestly, and contriving one would be worse than not having one. Re-adding metricTable to the surface manifest to make the caption appear would reverse a founder's product decision inside an evidence run, and the picture would then be of a page nobody can reach. The two rendered arms are instead pinned in open-work-orders-coverage-caption.test.tsx, which mounts the real MetricSummaryTable and reads the real heroCoverageNote, both driven through the real dailyCoverageOf — and both redden when the two rendered lines are reverted (3 failed / 4 passed, every failure an assertion).
The complete case could not have been photographed either, for the reason #9411 recorded: on stage every day in the deep window is short (25 of 30 stored days), so a fully-reporting portfolio cannot be staged by picking a window. Its arm is the unit suite's positive control.
And these pictures say nothing about the value. This PR closes honesty about the counter's provenance. The one value defect the row's tail names — the request-wide tenants union indexed before scoping, so one customer's failed read can move another customer's count — lives in compute-live.ts, is not in this row's paths, and has its own row. Untouched deliberately.