Files
waggle-os/docs/ux-refactor/p7-track-b-review-record.md
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

46 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P7/D15 Track B — Adversarial Review Record
> Multi-agent review of the Track B error-state diff (`e797926..cce3ef0`): **5 per-screen
> reviewers → 3-lens adversarial verification** (correctness / state-machine-races /
> reproduction; confirmed if ≥2 of 3 vote real). 38 agents, ~2.3M subagent tokens.
> Fixes in `9f3cf2a`.
## Tally
**11 findings → 2 confirmed / 9 refuted.** Both confirmed were in B4 (Files), one root cause.
| # | Sev | Votes | Screen | Finding | Disposition |
|---|-----|-------|--------|---------|-------------|
| 1 | MED | 2/2 | files | Cross-directory nav failure: stale entries from the prior dir keep `files.length>0`, so the `offline && files.length===0` error gate is skipped → a failed `/sub` load renders "Empty directory" + a contradictory "showing cached files" banner | **FIXED**`loadedPath` (set only on success); cold-error gate = `offline && !haveCurrentData` where `haveCurrentData = loadedPath===currentPath`. Regression test: nav into a failing subdir → error, not empty. |
| 2 | LOW | 2/2 | files | A known-empty dir (`[]` loaded OK) then a failed refresh → `files.length===0` → false "Couldn't load files" for a dir we proved empty | **FIXED** — same `loadedPath` signal: a failed refresh keeps `haveCurrentData` true → falls through to "Empty directory", not the cold error. Regression test: context-menu Refresh → reject → stays empty. |
Both fixed together by replacing `files.length` inference with an explicit `loadedPath`
load-outcome signal, making error / empty / cached-banner mutually exclusive regardless of
stale cross-directory data. `loading` initial state flipped to `true` so the first paint
isn't a false empty.
## Refuted (9, all 01/3)
The panel correctly dismissed every other finding, several with detailed traces:
- **Room "error UI dead in production" (HIGH, 1/3)** — claimed real SSE failures (401/drop)
never set `error`. Refuted: the adapter's reconnecting EventSource handles `onerror`
internally (close→backoff→token-refresh→reopen) and surfaces nothing to the hook *by
design* (D3 SSE-revival contract). `error` correctly fires only on a synchronous
subscribe throw; the async path is the adapter's job, not a Track B regression.
- **Approvals partial-success / poll-flash (HIGH+MED, 0/3)** — the single `error` does not
defeat partial success: `allSettled` still renders the fulfilled source; a transient poll
failure resolving to error-then-heal is the intended 5s-cadence behavior.
- **Room `connecting` sync-flip, error∧tiles coexistence (MED+LOW, 0/3)** — when `error` is
truthy the event callback never ran, so `workspaceMap` is empty and the ungated tile
blocks are unreachable; no state combo renders tiles beside the error.
- **Command Center boundary/portal, searchDegraded race (0/3)**, **B5 filter-masking /
gate-coverage (0/3)** — traced and dismissed.
## Gate (post-fix)
FE 897/897 · tsc 0 (apps/web) · lint 0. `9f3cf2a`.
> Note: several verifier agents hit a weekly model limit mid-run; both confirmed findings
> reached a clean 2/2 and the load-bearing refutals completed, so the verdict is sound.