Canvas: the window details popover on the host pill #127

Closed
opened 2026-10-09 07:56:18 +00:00 by kayg · 10 comments
Owner

Owner: the machine info popover (window details: machine, connection and session facts, copy on click) from the windows prototype (apps/tracer/src/canvas/mock/windows-proto/popover.ts) never made it into the product canvas. Port it: a tap/click on a window's host pill (no drag) opens it; dragging the pill still moves the window. Real data from the session/host inventory, mock data in the mockup.

Owner: the machine info popover (window details: machine, connection and session facts, copy on click) from the windows prototype (apps/tracer/src/canvas/mock/windows-proto/popover.ts) never made it into the product canvas. Port it: a tap/click on a window's host pill (no drag) opens it; dragging the pill still moves the window. Real data from the session/host inventory, mock data in the mockup.
Author
Owner

Starting work on branch budget-fix, based on dev at 7d6df4470cfce59661225c0f3dbcbf2a36827ab1.

Starting work on branch `budget-fix`, based on `dev` at `7d6df4470cfce59661225c0f3dbcbf2a36827ab1`.
Author
Owner

Baseline production build (bun run build && bun run transfer-budget.ts) fails at apps/tracer/transfer-budget.ts:67:

JavaScript transfer, critical: identity=921772 gzip=283435/307200 brotli=235000/256000 bytes
JavaScript transfer, deferred: identity=143949 gzip=51873/51200 brotli=45340/45056 bytes
JavaScript transfer, onDemand: identity=58835 gzip=24710/20480 brotli=21952/18432 bytes

The deferred class is 673 gzip bytes and 284 brotli bytes over its existing limits. The live details source is constructed eagerly by src/canvas/product.ts and imports details-live.ts and details-facts.ts into the deferred graph.

Baseline production build (`bun run build && bun run transfer-budget.ts`) fails at `apps/tracer/transfer-budget.ts:67`: JavaScript transfer, critical: identity=921772 gzip=283435/307200 brotli=235000/256000 bytes JavaScript transfer, deferred: identity=143949 gzip=51873/51200 brotli=45340/45056 bytes JavaScript transfer, onDemand: identity=58835 gzip=24710/20480 brotli=21952/18432 bytes The deferred class is 673 gzip bytes and 284 brotli bytes over its existing limits. The live details source is constructed eagerly by `src/canvas/product.ts` and imports `details-live.ts` and `details-facts.ts` into the deferred graph.
Author
Owner

Step 1 committed as fd1eddf8: live and mock details sources now load with the popover after the first pill press; the live source still reads the latest sampled connection delay. scripts/verify fast passed. This leaves 270 gzip and 520 brotli bytes of headroom, so the 1.5 KiB target still needs the next action-only move.

JavaScript transfer, critical: identity=921807 gzip=283453/307200 brotli=235163/256000 bytes
JavaScript transfer, deferred: identity=141782 gzip=50930/51200 brotli=44536/45056 bytes
JavaScript transfer, onDemand: identity=61109 gzip=25804/20480 brotli=22953/18432 bytes

Step 1 committed as `fd1eddf8`: live and mock details sources now load with the popover after the first pill press; the live source still reads the latest sampled connection delay. `scripts/verify fast` passed. This leaves 270 gzip and 520 brotli bytes of headroom, so the 1.5 KiB target still needs the next action-only move. JavaScript transfer, critical: identity=921807 gzip=283453/307200 brotli=235163/256000 bytes JavaScript transfer, deferred: identity=141782 gzip=50930/51200 brotli=44536/45056 bytes JavaScript transfer, onDemand: identity=61109 gzip=25804/20480 brotli=22953/18432 bytes
Author
Owner

Finding: scripts/verify fast stopped before other rows at the latency proxy check: configured 300 ms RTT, p50=324.83 ms, p99=392.67 ms. Host load at the failure was 28.02 / 21.47 / 17.50. Retrying the gate after this load-sensitive result.

Finding: `scripts/verify fast` stopped before other rows at the latency proxy check: configured 300 ms RTT, p50=324.83 ms, p99=392.67 ms. Host load at the failure was 28.02 / 21.47 / 17.50. Retrying the gate after this load-sensitive result.
Author
Owner

Finding: the full real-browser run reached 29 passes, then real/switch.spec.ts failed its no-reconnect assertion (expected 4 bridges, received 5). The suite recorded load averages up to 24; the host was at 22.42 / 19.20 / 16.54 at the next attempt. A grep-only replay skipped the file's serial setup and was not a valid reproduction; rerunning the whole switch spec with the setup in a CPU-weighted scope.

Finding: the full real-browser run reached 29 passes, then `real/switch.spec.ts` failed its no-reconnect assertion (expected 4 bridges, received 5). The suite recorded load averages up to 24; the host was at 22.42 / 19.20 / 16.54 at the next attempt. A grep-only replay skipped the file's serial setup and was not a valid reproduction; rerunning the whole switch spec with the setup in a CPU-weighted scope.
Author
Owner

Finding: the scoped full real-browser rerun reached 34 passes, then real/switch.spec.ts timing bounds failed targets: manager median pre-paint work was 38.2 ms against 34 ms. Host load was 38.20 / 28.84 / 22.20 at launch and rose to about 39.5 during the run. The earlier bridge-count assertion passed on this rerun. Replaying setup plus the timing case in isolation to check host-load sensitivity.

Finding: the scoped full real-browser rerun reached 34 passes, then `real/switch.spec.ts` timing bounds failed `targets`: manager median pre-paint work was 38.2 ms against 34 ms. Host load was 38.20 / 28.84 / 22.20 at launch and rose to about 39.5 during the run. The earlier bridge-count assertion passed on this rerun. Replaying setup plus the timing case in isolation to check host-load sensitivity.
Author
Owner

Finding: after the sharing loader retry handling, the mock sharing-dialog case passed. The team-layout test then hit its 30 s test timeout; an isolated replay timed out at keyboard.type("share layout") before opening the dialog. This host was at load averages 22.88 / 28.60 / 26.14 before the first replay and 27.71 / 28.92 / 26.53 after. The same team-layout case passed in the earlier 68-test run; retrying with a longer runner timeout under the CPU-weighted scope.

Finding: after the sharing loader retry handling, the mock sharing-dialog case passed. The team-layout test then hit its 30 s test timeout; an isolated replay timed out at `keyboard.type("share layout")` before opening the dialog. This host was at load averages 22.88 / 28.60 / 26.14 before the first replay and 27.71 / 28.92 / 26.53 after. The same team-layout case passed in the earlier 68-test run; retrying with a longer runner timeout under the CPU-weighted scope.
Author
Owner

Step 2 committed as 42e50d42: canvas sharing now keeps a small handle and loads dialog/incoming-layout code on first action or incoming share; failed chunk loads can be retried. Deferred now has 4,218 gzip and 3,569 brotli bytes of headroom.

JavaScript transfer, critical: identity=921931 gzip=283616/307200 brotli=235218/256000 bytes
JavaScript transfer, deferred: identity=130699 gzip=46982/51200 brotli=41487/45056 bytes
JavaScript transfer, onDemand: identity=72649 gzip=30675/20480 brotli=27238/18432 bytes
JavaScript transfer, onDemand largest chunk chunk-1473ejax.js: gzip=8489/20480 brotli=7631/18432 bytes (class total gzip=30675 brotli=27238, not limited)

Step 2 committed as `42e50d42`: canvas sharing now keeps a small handle and loads dialog/incoming-layout code on first action or incoming share; failed chunk loads can be retried. Deferred now has 4,218 gzip and 3,569 brotli bytes of headroom. JavaScript transfer, critical: identity=921931 gzip=283616/307200 brotli=235218/256000 bytes JavaScript transfer, deferred: identity=130699 gzip=46982/51200 brotli=41487/45056 bytes JavaScript transfer, onDemand: identity=72649 gzip=30675/20480 brotli=27238/18432 bytes JavaScript transfer, onDemand largest chunk chunk-1473ejax.js: gzip=8489/20480 brotli=7631/18432 bytes (class total gzip=30675 brotli=27238, not limited)
Author
Owner

Finished at head 42e50d42c5e43dabc3da89de4b01dd92329bf030. scripts/verify fast passed in the CPU-weighted scope; host load at launch was 34.21 / 30.45 / 27.21. Gate output, verbatim summary:

METRIC name=network_rtt_selftest configured_rtt_ms=300 jitter_ms=30 loss=unsupported transport=tcp-stream n=3 p50_ms=302.85 p99_ms=304.81 result=PASS
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
54 pass
0 fail
9930 expect() calls
Ran 54 tests across 12 files. [232.00ms]
JavaScript transfer, critical: identity=921931 gzip=283616/307200 brotli=235218/256000 bytes
JavaScript transfer, deferred: identity=130699 gzip=46982/51200 brotli=41487/45056 bytes
JavaScript transfer, onDemand: identity=72649 gzip=30675/20480 brotli=27238/18432 bytes
stream differential: 134 streams, 11439 schedules, zero divergences
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.06s]

Mock browser coverage: the combined run passed 64/68; all four cases that timed out or missed timing assertions passed when rerun separately. After the final sharing-loader change, sharing-dialog and team-layout cases passed separately. The full real-browser run under high host load reached 34 passes and missed one 34 ms switch pre-paint bound at 38.2 ms; the complete real/switch.spec.ts passed 7/7 separately under the weighted scope. Capture outputs were restored and the worktree is clean.

Finished at head `42e50d42c5e43dabc3da89de4b01dd92329bf030`. `scripts/verify fast` passed in the CPU-weighted scope; host load at launch was 34.21 / 30.45 / 27.21. Gate output, verbatim summary: METRIC name=network_rtt_selftest configured_rtt_ms=300 jitter_ms=30 loss=unsupported transport=tcp-stream n=3 p50_ms=302.85 p99_ms=304.81 result=PASS +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ 54 pass 0 fail 9930 expect() calls Ran 54 tests across 12 files. [232.00ms] JavaScript transfer, critical: identity=921931 gzip=283616/307200 brotli=235218/256000 bytes JavaScript transfer, deferred: identity=130699 gzip=46982/51200 brotli=41487/45056 bytes JavaScript transfer, onDemand: identity=72649 gzip=30675/20480 brotli=27238/18432 bytes stream differential: 134 streams, 11439 schedules, zero divergences 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.06s] Mock browser coverage: the combined run passed 64/68; all four cases that timed out or missed timing assertions passed when rerun separately. After the final sharing-loader change, sharing-dialog and team-layout cases passed separately. The full real-browser run under high host load reached 34 passes and missed one 34 ms switch pre-paint bound at 38.2 ms; the complete `real/switch.spec.ts` passed 7/7 separately under the weighted scope. Capture outputs were restored and the worktree is clean.
Author
Owner

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Window details popover merged into dev (7d6df4470, 90c3d9328 "popover is in the product canvas", head 42e50d42 is ancestor of origin/dev); finish comment has gate output, no open findings. Reopen if anything is still missing.

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Window details popover merged into dev (7d6df4470, 90c3d9328 "popover is in the product canvas", head 42e50d42 is ancestor of origin/dev); finish comment has gate output, no open findings. Reopen if anything is still missing.
kayg closed this issue 2026-10-28 17:52:45 +00:00
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#127
No description provided.