Context
Second documented datum (first: 2026-07-05, again 2026-07-10 during the PR #14910 review, reproduced on clean dev): test/playwright/unit/apps/agentos/view/fleet/healthSwatch.spec.mjs:42 ("renders a legend row (no count) — state dot + label, no count element") fails whenever the spec runs in ANY multi-file company, and passes 6/6 solo. In a larger 3-dir batch (ai/services/fleet + ai/graph + the fleet app dir, --workers=1), eventChip.spec.mjs:27 and fleetGrid.spec.mjs:103 ALSO fail — and pass when the batch shrinks to 3 files. Classic order-dependent cross-file state bleed.
The Problem
Local batch runs of the fleet app specs are untrustworthy: reviewers must attribute failures by isolation-matrix runs (as done twice now), which burns review time and hides real regressions behind known noise. CI's sharding happens to dodge the failing order, so the bleed is invisible on PRs — until a shard boundary moves.
The Architectural Reality
- Neo's single-thread custom Playwright layout: specs in one worker process share module state;
test/playwright/setup.mjs boots a Neo app context per file via setup({neoConfig, appConfig}).
- Suspects (V-B-A at implementation, in order): shared/colliding
appName across fleet specs; module-level mutable state in a shared import (e.g. registries/singletons imported by multiple specs — FleetControlBridge spec resets its injected fields in beforeEach, but other fleet-view specs may leak component/vdom state); Neo config bleeding between setup() calls in the same worker.
- The failure signature (legend-row DOM assertion) suggests leaked mounted components or vdom state from a prior spec file.
The Fix
Root-cause via bisection (pair healthSwatch.spec with each other fleet spec until the poisoning file is found), then fix the leak at its source (per-file isolation by construction — unique appNames, teardown of mounted components, or module-state reset), NOT by masking (no test re-ordering, no .serial, no retry).
Acceptance Criteria
Out of Scope
Rewriting the fleet specs' assertions; CI sharding changes; the pre-existing WIRE_SOURCES block-alignment drift (noted in PR #14910's body as surfaced-not-caused).
Related
#14637 (healthSwatch), #14594 (eventChip), #14599 (fleetGrid) — the specs' origin tickets · PR #14910 (tonight's isolation matrix evidence).
Live latest-open sweep: checked latest 20 open issues at 2026-07-10T02:45Z; no equivalent found. A2A in-flight claim sweep: last-60-min claims checked; no scope overlap.
Origin Session ID: b956ba53-01ed-4ea6-a1e5-62969f887bc3
Retrieval Hint: query_raw_memories("healthSwatch cross-file bleed isolation matrix fleet app specs")
Context
Second documented datum (first: 2026-07-05, again 2026-07-10 during the PR #14910 review, reproduced on clean
dev):test/playwright/unit/apps/agentos/view/fleet/healthSwatch.spec.mjs:42("renders a legend row (no count) — state dot + label, no count element") fails whenever the spec runs in ANY multi-file company, and passes 6/6 solo. In a larger 3-dir batch (ai/services/fleet+ai/graph+ the fleet app dir,--workers=1),eventChip.spec.mjs:27andfleetGrid.spec.mjs:103ALSO fail — and pass when the batch shrinks to 3 files. Classic order-dependent cross-file state bleed.The Problem
Local batch runs of the fleet app specs are untrustworthy: reviewers must attribute failures by isolation-matrix runs (as done twice now), which burns review time and hides real regressions behind known noise. CI's sharding happens to dodge the failing order, so the bleed is invisible on PRs — until a shard boundary moves.
The Architectural Reality
test/playwright/setup.mjsboots a Neo app context per file viasetup({neoConfig, appConfig}).appNameacross fleet specs; module-level mutable state in a shared import (e.g. registries/singletons imported by multiple specs —FleetControlBridgespec resets its injected fields inbeforeEach, but other fleet-view specs may leak component/vdom state); Neo config bleeding betweensetup()calls in the same worker.The Fix
Root-cause via bisection (pair
healthSwatch.specwith each other fleet spec until the poisoning file is found), then fix the leak at its source (per-file isolation by construction — unique appNames, teardown of mounted components, or module-state reset), NOT by masking (no test re-ordering, no.serial, no retry).Acceptance Criteria
--workers=1three consecutive runsai/services/fleet+ai/graph+ fleet app dir) passes cleanOut of Scope
Rewriting the fleet specs' assertions; CI sharding changes; the pre-existing
WIRE_SOURCESblock-alignment drift (noted in PR #14910's body as surfaced-not-caused).Related
#14637 (healthSwatch), #14594 (eventChip), #14599 (fleetGrid) — the specs' origin tickets · PR #14910 (tonight's isolation matrix evidence).
Live latest-open sweep: checked latest 20 open issues at 2026-07-10T02:45Z; no equivalent found. A2A in-flight claim sweep: last-60-min claims checked; no scope overlap.
Origin Session ID: b956ba53-01ed-4ea6-a1e5-62969f887bc3
Retrieval Hint:
query_raw_memories("healthSwatch cross-file bleed isolation matrix fleet app specs")