docs(02-09): complete plan — Server/Web5 KeepAlive gap closure, checkpoint approved

Task 3 checkpoint approved by user, covering all seven verification items
including the OpenWrt Gateway Connect-form (WR-03) sanity check. Writes
02-09-SUMMARY.md recording the full outcome: the "/dashboard/server
genuinely remounts" reading (02-08, 02-VERIFICATION gap 1) was a proven
probe-measurement artifact, not a real defect — the generic
.view-container [data-controller-container] selector shared by every
KeepAlive-cached main tab couldn't disambiguate the foreground tab from
another still-connected cached tab, confirmed via an authoritative
document.elementFromPoint() hit-test that repeatedly contradicted the
naive "remounted" verdict across independent device runs for both Server
and Web5 (the latter a mid-investigation discovery). The committed
keepalive-remount-probe.spec.ts replaces the ad-hoc 02-08 probe, and four
new vm.$.uid-based regression tests pin real instance survival immune to
the same selector ambiguity.

Updates STATE.md (metrics, decisions, resolved blocker, session) and
ROADMAP.md (02-09 checked off, 9/10 plans executed) for phase 02's gap
closure. No code changes; 02-FINDINGS.md is owned by the concurrently
running 02-10 executor and was not touched here (already committed by
this plan's earlier Task 1/2 commits).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-07-31 06:09:53 -04:00
co-authored by Claude Opus 5
parent 3e3159fa95
commit d7fbba98ae
3 changed files with 206 additions and 17 deletions
+17 -14
View File
@@ -3,16 +3,16 @@ gsd_state_version: 1.0
milestone: v1.8.0
milestone_name: milestone
current_phase: 02
status: completed
stopped_at: Completed 02-08-PLAN.md — Phase 02 (ui-performance) complete, 8/8 plans
last_updated: "2026-07-31T03:54:32.766Z"
last_activity: 2026-07-30
last_activity_desc: Phase 02 marked complete
status: verifying
stopped_at: "Completed 02-09-PLAN.md — Server/Web5 KeepAlive gap closure: no source change needed, checkpoint approved"
last_updated: "2026-07-31T10:08:38.935Z"
last_activity: 2026-07-31
last_activity_desc: 02-09 gap closure complete (checkpoint approved); 02-10 in progress
progress:
total_phases: 9
completed_phases: 1
total_plans: 25
completed_plans: 13
total_plans: 27
completed_plans: 16
percent: 11
current_phase_name: ui-performance
---
@@ -28,10 +28,10 @@ See: .planning/PROJECT.md (updated 2026-07-29)
## Current Position
Phase: 02 — COMPLETE
Plan: 8 of 8
Status: Phase 02 complete
Last activity: 2026-07-30Phase 02 marked complete
Phase: 02 — gap closure in progress
Plan: 9 of 10 (02-09 complete; 02-10 running concurrently)
Status: 02-09 complete (checkpoint approved); 02-10 in progress
Last activity: 2026-07-3102-09 gap closure complete
Progress: [█████░░░░░] 52%
@@ -60,6 +60,7 @@ Progress: [█████░░░░░] 52%
| Phase 02 P06 | 73min | 2 tasks | 7 files |
| Phase 02 P07 | 75min | 3 tasks | 5 files |
| Phase 02 P08 | ~190min | 3 tasks | 4 files |
| Phase 02 P09 | 130min | 3 tasks | 3 files |
## Accumulated Context
@@ -109,6 +110,8 @@ Decisions are logged in PROJECT.md (10 locked ADRs in the `<decisions>` block +
- [Phase ?]: 02-08: the harness's remount-probe field is confounded for main tabs once real KeepAlive keeps multiple instances alive simultaneously; corrected via an independent, reproduced-twice verification rather than editing the frozen 02-01 harness — revealed Server.vue genuinely does not survive a round-trip (open gap, not hidden)
- [Phase ?]: 02-08: a user-reported Cloud first-visit navigation regression was treated as release-blocking, not known-open, per explicit direction — root-caused to content.browse-peer's unbounded, untimed-enough per-peer RPC fan-out starving Chromium's connection pool; fixed via a concurrency cap + shortened timeout, verified 5/5, user-approved on-node
- [Phase ?]: 02-08: 4 other user-reported UX issues (Paid Files window.open, PiP not closing lightbox, missing loader on Paid Files item-open, PiP not surviving tab changes) classified as pre-existing (predate phase 2 via git history) and captured into UIFIX-04/05/06, not fixed
- [Phase ?]: 02-09: /dashboard/server's (and Web5's) 'genuinely remounts' reading was a proven probe-measurement artifact (generic .view-container selector can't disambiguate the foreground tab from other still-connected cached tabs) — confirmed via document.elementFromPoint() hit-test contradicting the naive verdict across device runs; no source change needed, pinned with vm.$.uid-based regression tests instead
- [Phase ?]: 02-09: committed neode-ui/e2e/perf/keepalive-remount-probe.spec.ts as a re-runnable, instrumented probe covering every KEEP_ALIVE_PATHS tab, replacing the ad-hoc 02-08 probe so this class of false positive cannot recur
### Pending Todos
@@ -128,7 +131,7 @@ Decisions are logged in PROJECT.md (10 locked ADRs in the `<decisions>` block +
- [Phase 6] Strengthened ADR-009 validation may reject existing catalog apps — audit manifests before enforcement lands
- [Global] Live OTA fleet: deploy to the dev pair before any OTA; gate re-runs required after orchestrator changes; some verification is user/hardware-gated (radios, on-device tests)
- cloud.ts's navigate() needs a TTL gate to fully satisfy 'no new RPC within TTL' for CloudFolder.vue — currently always re-fetches on revisit (just doesn't block paint)
- [Phase 2, carried forward] Server.vue does not survive a tab round-trip despite KEEP_ALIVE_PATHS registration — confirmed real gap, needs a future targeted fix
- [Phase 2, RESOLVED by 02-09] ~~Server.vue does not survive a tab round-trip despite KEEP_ALIVE_PATHS registration~~ — retracted: proven a probe-measurement artifact (shared generic `.view-container` selector couldn't disambiguate the foreground tab from other cached tabs), not a real defect. Server.vue's (and Web5.vue's) instance genuinely survives; pinned with `vm.$.uid`-based regression tests immune to the same ambiguity. Checkpoint approved on real hardware.
- [Phase 2, carried forward] Timing regressions on Discover/Web5/Fleet/AppDetails/OpenWrtGateway (02-PERF-AFTER.json vs baseline) — a same-time-of-day re-run would help disambiguate real regression from node-load noise
### Quick Tasks Completed
@@ -151,6 +154,6 @@ Decisions are logged in PROJECT.md (10 locked ADRs in the `<decisions>` block +
## Session Continuity
Last session: 2026-07-31T03:54:32.747Z
Stopped at: Completed 02-08-PLAN.md — Phase 02 (ui-performance) complete, 8/8 plans
Last session: 2026-07-31T10:08:38.916Z
Stopped at: Completed 02-09-PLAN.md — Server/Web5 KeepAlive gap closure: no source change needed, checkpoint approved
Resume file: None