Prospects: a failed list read is said
PR #11609, audit gap G10. The captures are from a local dev server on the branch, bound to propflow-stage (anonymized by construction; checked through /api/health before the browser launched). They were signed in as the smoke user, and every list read (/api/leasing/prospects) was forced to answer 500 with Playwright's request routing.
1. A refresh fails over this selection's own rows
The page loaded normally, then every later read failed. The rows are this selection's last good load, so they stay. The line above the table says they are the last good load, so they are not passed off as current.
Checked in the DOM: “We couldn't refresh this list” present: True; table rows kept: 50.
2. Company switch, and the new company's read fails
This time the company picker switched to one company (a TEST company) while every read failed. None of the previous selection's rows stay. The table's title says the read failed and names the next thing that happens, and the count reads “—”. Before this PR it would have shown the old company's leads under the new name. Without the round-2 fix it would have shown “No prospects found.” and “0 prospects”. Both are claims about a list nobody read.
Checked in the DOM: “We couldn't load leads” present: True; “Clara will track leads as they come in.” present: False; table rows: 0.
Critique rounds
Round 1 found the empty state still titled “No prospects found.” with a “0 prospects” count over an unread list. Round 2 added a failure title, the next action as the detail, and countUnknown on the shared DataTable (renders “—”). The regression test now fails on the previous head for both strings.