diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index 4d75cfa6..63d06e39 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -120,8 +120,8 @@ Which phases cover which requirements. Updated during roadmap creation. | UIFIX-05 | Phase 1 | Pending | | UIFIX-06 | Phase 1 | Pending | | PERF-01 | Phase 2 | Complete | -| PERF-02 | Phase 2 | Complete (02-02 tracer + 02-04..02-07 extended KeepAlive/cache to every main tab, each dev-preview-verified against archi-dev-box per D-11). Timing-regression verdict closed by 02-10 (`02-FINDINGS.md` § Re-measurement, gap closure): Server/Web5 confirmed real, growing, phase-2-caused revisit-ms regressions on instances confirmed (02-09) to genuinely survive the round-trip (client-side render/reactivation cost, not a remount or a refetch) — accepted deviations, not fixed this session (deploy blocked by a shared-tree hazard), carried forward in STATE.md Blockers/Concerns | -| PERF-03 | Phase 2 | Complete. Timing-regression verdict closed by 02-10 (`02-FINDINGS.md` § Re-measurement, gap closure): Discover/AppDetails/OpenWrtGateway confirmed real, growing, phase-2-caused revisit-ms regressions (same client-side split-signal cause) — accepted deviations, not fixed this session; Wallet/send-flow's apparent regression cleared as environmental noise (re-measure returned at/below baseline) | +| PERF-02 | Phase 2 | Complete. 02-11 (`02-FINDINGS.md` § Client-Side Render Cost Root Cause + § Task 3) named and fixed the real cause of Web5/Server's revisit-ms regressions — three leaked background pollers (`useFleetData.ts`, `FipsNetworkCard.vue`, `Web5Monitoring.vue`) armed in `onMounted` and never disarmed once their owning views joined `KEEP_ALIVE_PATHS`, gated to activate/deactivate. Web5 now fixed (275ms, below both its 566ms pre-phase-2 baseline and the 300ms pass bar); Server's regression is closed (574ms, below its 738ms baseline) though not yet under the 300ms stretch target — residual named as real, un-eliminated per-resource reactivation cost, not a new defect | +| PERF-03 | Phase 2 | Complete. 02-11 fixed Fleet's leaked `useFleetData.ts` poll (790ms, down from a 2631ms regression, substantially closing the gap to its 330ms baseline). AppDetails restored to at/near its own baseline (1231ms vs. 1204ms) — residual is the already-documented `useCachedResource` per-mount setup cost, not fixed further. Discover (1389ms) has a SECOND, distinct, evidenced cause found this session (CSS entrance-animation replay on KeepAlive reactivation, `card-stagger`/`showStagger` never removed from the DOM) — named with full profiling/diagnostic evidence but NOT fixed (blast radius spans 5+ files outside this plan's scope, needs its own real-device verification budget) — recommended as a dedicated follow-up. OpenWrtGateway: not measurable this pass (Chromium crash cascading from an unrelated surface); prior numbers stand, confirmed to reflect a real (not empty) disconnected-device UI render, not retracted | | MNODE-01 | Phase 3 | Pending | | MNODE-02 | Phase 3 | Pending | | MNODE-03 | Phase 3 | Pending | diff --git a/.planning/phases/02-ui-performance/02-FINDINGS.md b/.planning/phases/02-ui-performance/02-FINDINGS.md index 363fd0a5..90dd99d6 100644 --- a/.planning/phases/02-ui-performance/02-FINDINGS.md +++ b/.planning/phases/02-ui-performance/02-FINDINGS.md @@ -1073,3 +1073,160 @@ passing (part of the full-suite run). their navSteps-transit and session-wide-contention explanations above are the standing account) — Task 3's re-measure is the test of whether removing the three leaked pollers alone is enough to move their numbers, or whether they need their own follow-up. + +## Task 3: Deploy, four-way re-measure, and final verdicts + +**Deploy:** `ARCHIPELAGO_TARGET=archipelago@archi-dev-box scripts/deploy-to-target.sh --frontend-only` +from the main checkout (never a worktree — this box IS archi-dev-box over loopback), commit +`2c25e512` (Task 2's fix commit), `dirty=true` only for a harmless `neode-ui/e2e/test-results/.last-run.json` +test-artifact (not a source file). Post-deploy health check: OK (200) after 5s. Deploy took 143s +total. + +**Re-measure:** `cd neode-ui && ARCHY_BASE_URL=http://archi-dev-box ARCHY_PERF_RUNS=5 +ARCHY_PERF_OUT=../.planning/phases/02-ui-performance/02-PERF-FINAL.json npx playwright test +e2e/perf/surface-perf.spec.ts --project=chromium --reporter=line`, identical to 02-10's own +invocation. Confirmed frozen: `git diff --stat 3ee20430 -- neode-ui/e2e/perf/surfaces.ts +neode-ui/e2e/perf/measure.ts neode-ui/e2e/perf/surface-perf.spec.ts` empty both before and after. +Completed in 4.8 minutes, 15/15 rows present. The artifact's own `commit` field reads `12161989` +rather than `2c25e512` — two unrelated BotFights-app commits landed locally between the deploy and +the harness run (same cosmetic discrepancy 02-10's own artifact had); confirmed via `git diff --stat +2c25e512..12161989 -- neode-ui/src` (empty) that no frontend source changed in between, so the +measurement is against exactly the deployed build. + +### Four-way dispersion (min/median/max revisit ms), Baseline -> After -> Remeasure -> Final + +| Surface | Baseline | After | Remeasure | **Final** | +|---|---|---|---|---| +| web5 | 255/**566**/606 (n=3) | 696/**709**/1116 (n=3) | 1152/**1329**/1723 (n=5) | 121/**275**/533 (n=5) | +| server | 563/**738**/808 (n=3) | 676/**849**/1392 (n=3) | 807/**1239**/1946 (n=5) | 466/**574**/1228 (n=5) | +| fleet | 305/**330**/548 (n=3) | 1013/**1054**/1148 (n=3) | 2116/**2631**/4224 (n=5) | 298/**790**/1274 (n=5) | +| app-details | 1065/**1204**/1864 (n=3) | 1168/**1510**/2063 (n=3) | 1597/**2668**/3822 (n=5) | 1043/**1231**/1410 (n=5) | +| discover | 1053/**1083**/1386 (n=3) | 1016/**1257**/1285 (n=3) | 1109/**1453**/2152 (n=5) | 1099/**1389**/2213 (n=5) | +| openwrt-gateway | 432/**663.5**/895 (n=2) | 521/**1148**/1854 (n=3) | 894/**1460**/2014 (n=5) | **no data — see below** | + +### OpenWrtGateway: no data this pass, plus a data-integrity finding about its earlier numbers + +**This pass:** all 5 runs errored with `locator.click: Target crashed` — a genuine Chromium renderer +crash, first occurring on the `cloud-folder` row (earlier in `SURFACES` order) and cascading through +every surface measured after it in the same browser session (`mesh`, `cloud-folder`, +`openwrt-gateway`, `wallet-send` all show the identical crash error in this run's `notes`). This is a +harness-execution failure, not a measurement — per this doc's own standing rule, never written in as +data and never silently dropped. **Verdict: not measurable this pass** (browser crash, unrelated to +this surface's own code). + +**Separately, a data-integrity question the coordinator raised: no OpenWrt device has ever been +connected to archi-dev-box during any measurement in this phase.** Checked directly against source +(not assumed either way): `OpenWrtGateway.vue`'s `