record the defect the useDashboardState tests found

section 9 now carries a concrete instance of its own argument: a test found a bug that
two careful readings of the file had not, in code written three days earlier to prevent
exactly that failure. also records the two bun/testing-library harness facts that cost
more than the fix did, since both present as an unrelated file breaking for no reason.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-07 14:23:41 +00:00
co-authored by Claude Opus 5
parent 4f8046d7e9
commit 873ccae32a
+22
View File
@@ -988,6 +988,28 @@ they are marked below, because a dead-code list that is itself wrong is the wors
as an *updater*, never as a computed tree, which is the structural fix; a test there would be as an *updater*, never as a computed tree, which is the structural fix; a test there would be
guarding the fix rather than finding the bug. Checked, not assumed — `bun test src/workspaces/officerdev/src/components/Workspace/`. guarding the fix rather than finding the bug. Checked, not assumed — `bun test src/workspaces/officerdev/src/components/Workspace/`.
- [x] **`useDashboardState`, and the strongest argument this section has for itself.** _(`4f8046d`,
branch `agent-coordination-mvp`)_ — 14 tests over the store every layout and every
`config.agentName` is persisted through. They found a live Tier-A-class defect on the first run,
in code written three days earlier to *stop* silent write loss: `revert` decided whether to roll
back by asking "does the cache still hold exactly what I wrote?" **by reference**, and
`setQueryData` runs React Query's structural sharing, which rebuilds the object it stores rather
than keeping the one it was handed. Measured against @tanstack/react-query 5.101.4 — an object
value comes back `!==`, a string comes back `===`. So the guard was false for every *container*
the store exists to hold, and a refused write kept its optimistic value in the cache while the
toast said it had been rolled back; the change then vanished at the next reload. Only primitives
ever reverted, which is exactly why nobody saw it. Replaced with a per-key write sequence, which
asks the question the identity check meant to ask and does not depend on identity at all. The
regression pin is the test named "a refused OBJECT write is rolled back too".
Two things worth carrying forward. **A test found a bug that review had not**, in a file that had
been read carefully twice — which is the case for §9 stated better than any argument. And
`mock.module` is **process-wide and permanent** in Bun: a stub that does not spread the real
module deletes exports out from under files that never heard of it. Likewise
`@testing-library/react` auto-registers `afterEach(cleanup)` at *import* time, so it lands in
whichever test file imports the library first and every later file silently gets none — that is
now registered in `test-setup.ts`, where preload's lack of a file scope makes it global. Adding
one test file broke fourteen assertions in `DataTable.test.tsx` before both were understood.
- [x] **A panel is told where it is, instead of being handed a key to reverse-engineer.** _(`dbe585f` + - [x] **A panel is told where it is, instead of being handed a key to reverse-engineer.** _(`dbe585f` +
`717580f` + `585f234`, branch `agent-coordination-mvp`)_ — the first three items of §5.9. The `717580f` + `585f234`, branch `agent-coordination-mvp`)_ — the first three items of §5.9. The
context field `dashboardId: string` — which was never an id, always the whole `workspace.key` — context field `dashboardId: string` — which was never an id, always the whole `workspace.key` —