Step 16: First usable slice check #12

Open
opened 2026-09-21 17:13:45 +00:00 by kayg · 6 comments
Owner

The first usable slice end to end in browser, CLI and MCP; budgets on the perf-test VM.

Step 16 in docs/PLAN.md. Done when: all green, numbers recorded

The first usable slice end to end in browser, CLI and MCP; budgets on the perf-test VM. Step 16 in docs/PLAN.md. Done when: all green, numbers recorded
Author
Owner

Starting S1 end-to-end suite work on branch s1-e2e, based on dev at 9688a2438a1c5bbeeb3326a5be8df58e5c4f9a0a. Scope is a new e2e/s1/ suite plus a separate e2e entry point in scripts/verify; no product code or scripts/browser-check.mjs edits. The suite will use the release binary, Chromium virtual authenticator, real Docker and rootless Podman, capture timings/screenshots/JSON under /mnt/hdd/infraternal/artifacts/s1-e2e/, and report 12b/13b/14b as pending when absent from this base.

Starting S1 end-to-end suite work on branch `s1-e2e`, based on `dev` at `9688a2438a1c5bbeeb3326a5be8df58e5c4f9a0a`. Scope is a new `e2e/s1/` suite plus a separate `e2e` entry point in `scripts/verify`; no product code or `scripts/browser-check.mjs` edits. The suite will use the release binary, Chromium virtual authenticator, real Docker and rootless Podman, capture timings/screenshots/JSON under `/mnt/hdd/infraternal/artifacts/s1-e2e/`, and report 12b/13b/14b as pending when absent from this base.
Author
Owner

Finding from base 9688a2438a1c: product-path features are absent despite being listed in the plan sequence. packages/web/src/routes/containers/[host_id]/[engine]/[container_id]/+page.svelte has facts/ports/mounts/labels but no log or exec surface; /terminals renders a placeholder; crates/infraternal/src/main.rs::Command has no logs, exec, or ssh variants. I’ll make the suite report browser logs/exec, the terminal route, and CLI logs/exec/ssh as pending_feature when those controls/commands are absent. UI lifecycle, CLI ps plus stop --dry-run/--plan, and MCP list/refusal/plan/execute remain required passes.

Decision: use a dedicated scripts/verify e2e level because this suite owns a single release-binary run spanning setup, Chromium, real engine fixtures, CLI device login, and MCP stdio; the existing integration and browser levels remain focused on narrower checks.

The bounded-log fixture policy follows issue #19. Docker supports max-size and max-file; installed Podman 5.4.2 documents max-size for its k8s-file driver but does not list max-file, so fixtures will use the supported size bound there: https://docs.podman.io/en/latest/markdown/podman-run.1.html

Finding from base `9688a2438a1c`: product-path features are absent despite being listed in the plan sequence. `packages/web/src/routes/containers/[host_id]/[engine]/[container_id]/+page.svelte` has facts/ports/mounts/labels but no log or exec surface; `/terminals` renders a placeholder; `crates/infraternal/src/main.rs::Command` has no `logs`, `exec`, or `ssh` variants. I’ll make the suite report browser logs/exec, the terminal route, and CLI logs/exec/ssh as `pending_feature` when those controls/commands are absent. UI lifecycle, CLI `ps` plus `stop --dry-run/--plan`, and MCP list/refusal/plan/execute remain required passes. Decision: use a dedicated `scripts/verify e2e` level because this suite owns a single release-binary run spanning setup, Chromium, real engine fixtures, CLI device login, and MCP stdio; the existing `integration` and `browser` levels remain focused on narrower checks. The bounded-log fixture policy follows issue #19. Docker supports `max-size` and `max-file`; installed Podman 5.4.2 documents `max-size` for its k8s-file driver but does not list `max-file`, so fixtures will use the supported size bound there: https://docs.podman.io/en/latest/markdown/podman-run.1.html
Author
Owner

Finished: S1 E2E prep

Branch: s1-e2e
Head: 8acbb64b5f54bc6411a3897ac3842103bb8354b8
Commits: 229775b (suite and gate), ac12de3 (virtualized table filtering), 8acbb64 (CLI response assertions and exact-500 smoke).

I added a dedicated scripts/verify e2e level because this flow spans browser authentication, a long-lived release server, CLI device login, MCP stdio, and real Docker/rootless Podman; it is broader than either the existing integration or browser gate.

S1 step Result Time
1. Release server and setup token Pass 1,035.97 ms
2. Setup token and Chromium virtual passkey Pass 1,339.94 ms
3. Docker/Podman inventory and live external start/stop updates Pass 10,407.44 ms
4. UI start/stop/restart/remove on both engines; direct logs/PTY stream smoke Pending feature for UI Logs/Exec; lifecycle and protocol smoke passed 35,707.46 ms
5. SSH host flow, step 14b Pending feature 0.07 ms
6. CLI device approval in the same browser, ps, stop dry-run and plan Pending feature for CLI logs/exec; implemented flows passed 7,011.17 ms
7. Scoped ai_agent MCP setup and stdio plan flow Pass 2,272.03 ms
8. Dev VM performance smoke Pass, non-reportable measurements 61,094.73 ms

Pending features detected at runtime:

  • 12b UI Logs: container detail page has no Logs control.
  • 13b UI Exec terminal: container detail page has no Exec/terminal control. The real browser stream smoke still opened the logs channel and ran echo commands over PTY on both engines.
  • 14b SSH host connection flow: no host SSH connection UI is present on this dev head.
  • CLI logs and exec: neither subcommand appears in compiled CLI --help.

Smoke measurements (all are dev VM smoke; reportable only from the perf-test VM): keystroke p99 was 11.3 ms Docker / 23.7 ms Podman against a 5 ms target; list p99 at exactly 500 labelled containers was 19.63 ms against 20 ms; first-load JS was 218,816 encoded bytes against 122,880 bytes; idle server RSS was 35.15 MiB against 40 MiB. The suite records these target comparisons but does not treat dev VM values as reportable performance evidence.

Artifacts: /mnt/hdd/infraternal/artifacts/s1-e2e/s1-mufedu4c-0f29cca6/report.json, dashboard-desktop.png, containers-desktop.png, and containers-mobile-390x844.png. Cleanup completed with no errors; temporary credentials were revoked, temporary data removed, and run-labelled containers removed.

No product flow defect was found. The initial anonymous POST /api/v1/auth/refresh returns 401 before setup; authStore.initialize catches that response and clears the unauthenticated session. The first screenshot also showed the shared host inventory had 159 rows and the test fixture was outside the virtualized table's mounted rows; the suite now filters by its unique run suffix. Other failures were suite assertion mismatches and are corrected. No product code was edited.

Gates (verbatim output)

scripts/verify fast

PASS fast: migrations are append-only
PASS fast: JavaScript dependencies
PASS fast: build web app
PASS fast: cargo fmt --check
PASS fast: cargo clippy
PASS fast: cargo test
PASS fast: svelte-check
PASS fast: UI package svelte-check
PASS fast: stream package typecheck
PASS fast: Vitest
PASS fast: UI package Vitest
PASS fast: stream package Vitest
PASS fast: OpenAPI and TypeScript client drift
PASS fast: terminal TypeScript
PASS fast: terminal Vitest

scripts/verify e2e

PASS e2e: JavaScript dependencies
PASS e2e: install Chromium and system dependencies
PASS e2e: build web app
PASS e2e: build release binary
RUN e2e: S1 first usable slice against the real release server, Docker, and rootless Podman
PASS step 1. release server and setup token (1035.97 ms) — real release binary healthy with embedded infraternal agent
PASS step 2. Playwright setup token and passkey (1339.94 ms) — setup token accepted; Chromium virtual authenticator registered a passkey
PASS step 3. Docker and Podman inventory live updates (10407.44 ms) — both labelled containers appeared and live state followed external start and stop
UI_ACTION start s1-docker-s1-mufedu4c-0f29cca6
UI_ACTION stop s1-docker-s1-mufedu4c-0f29cca6
UI_ACTION start s1-docker-s1-mufedu4c-0f29cca6
UI_ACTION restart s1-docker-s1-mufedu4c-0f29cca6
UI_ACTION stop s1-docker-s1-mufedu4c-0f29cca6
UI_ACTION remove s1-docker-s1-mufedu4c-0f29cca6
UI_ACTION start s1-podman-s1-mufedu4c-0f29cca6
UI_ACTION stop s1-podman-s1-mufedu4c-0f29cca6
UI_ACTION start s1-podman-s1-mufedu4c-0f29cca6
UI_ACTION restart s1-podman-s1-mufedu4c-0f29cca6
UI_ACTION stop s1-podman-s1-mufedu4c-0f29cca6
UI_ACTION remove s1-podman-s1-mufedu4c-0f29cca6
PENDING FEATURE step 4. UI actions, Logs and Exec feature detection (35707.46 ms) — UI lifecycle passed; missing Logs and Exec UI marked pending; real browser stream smoke passed
PENDING FEATURE step 5. SSH host controls (step 14b) (0.07 ms) — no SSH host connection UI found on the current dev head
PENDING FEATURE step 6. compiled CLI device flow, ps and planned stop (7011.17 ms) — device approval, ps and stop plan passed; CLI logs/exec marked pending
PASS step 7. scoped ai_agent MCP over stdio (2272.03 ms) — MCP tools/list, list_containers, required plan refusal and dry-run/execute passed
PASS step 8. dev VM performance smoke (61094.73 ms) — 500-container list and idle memory measured as non-reportable dev VM smoke
REPORT /mnt/hdd/infraternal/artifacts/s1-e2e/s1-mufedu4c-0f29cca6/report.json
PENDING_FEATURES [{"step":"12b","feature":"UI container logs","status":"pending_feature","reason":"container detail page has no Logs control"},{"step":"13b","feature":"UI exec terminal","status":"pending_feature","reason":"container detail page has no Exec or terminal control"},{"step":"14b","feature":"SSH host connection flow","status":"pending_feature","reason":"host SSH connection UI is not present on this dev head"},{"step":"step-6","feature":"CLI logs","status":"pending_feature","reason":"compiled CLI --help has no logs subcommand"},{"step":"step-6","feature":"CLI exec","status":"pending_feature","reason":"compiled CLI --help has no exec subcommand"}]
SMOKE first_load_js {"value_bytes":218816,"target_max_gzip_bytes":122880,"within_target":false,"resources":[{"path":"/_app/immutable/entry/start.rS8oqgfN.js","encoded_bytes":82},{"path":"/_app/immutable/chunks/DYb7skxK.js","encoded_bytes":26778},{"path":"/_app/immutable/chunks/rbrvUBU4.js","encoded_bytes":56987},{"path":"/_app/immutable/chunks/DeM9JS5-.js","encoded_bytes":22},{"path":"/_app/immutable/chunks/xihTtKlq.js","encoded_bytes":65},{"path":"/_app/immutable/entry/app.CwsFHkTM.js","encoded_bytes":7080},{"path":"/_app/immutable/chunks/BKPtN_FV.js","encoded_bytes":294},{"path":"/_app/immutable/nodes/0.GrtJoSzt.js","encoded_bytes":37024},{"path":"/_app/immutable/chunks/BPvTWCsJ.js","encoded_bytes":6062},{"path":"/_app/immutable/chunks/BZv3cjOg.js","encoded_bytes":4408},{"path":"/_app/immutable/chunks/NozeucNs.js","encoded_bytes":70429},{"path":"/_app/immutable/nodes/1.DkVtLV9T.js","encoded_bytes":357},{"path":"/_app/immutable/nodes/2.Doj-YrZy.js","encoded_bytes":7913},{"path":"/_app/immutable/chunks/C5U2EtAp.js","encoded_bytes":1315}],"environment":"dev VM smoke","reportable":false}
SMOKE keystroke_p99_ms {"by_engine":{"docker":11.300000011920929,"podman":23.69999998807907},"target_max_ms":5,"within_target":false,"source":"Chromium WebSocket logs and PTY echo through the real server and embedded infraternal agent","environment":"dev VM smoke","reportable":false}
SMOKE container_list_p99_500_ms {"value_ms":19.63,"within_target":true,"sample_count":25,"test_container_count":500,"target_max_ms":20,"creation_ms":37624.97,"environment":"dev VM smoke","reportable":false}
SMOKE idle_server_rss_mib {"value_mib":35.15,"within_target":true,"samples_mib":[35.1484375,35.1484375,35.1484375,34.09765625,34.09765625],"target_max_mib":40,"environment":"dev VM smoke","reportable":false}
PASS e2e: S1 first usable slice
## Finished: S1 E2E prep Branch: `s1-e2e` Head: `8acbb64b5f54bc6411a3897ac3842103bb8354b8` Commits: `229775b` (suite and gate), `ac12de3` (virtualized table filtering), `8acbb64` (CLI response assertions and exact-500 smoke). I added a dedicated `scripts/verify e2e` level because this flow spans browser authentication, a long-lived release server, CLI device login, MCP stdio, and real Docker/rootless Podman; it is broader than either the existing integration or browser gate. | S1 step | Result | Time | | --- | --- | ---: | | 1. Release server and setup token | Pass | 1,035.97 ms | | 2. Setup token and Chromium virtual passkey | Pass | 1,339.94 ms | | 3. Docker/Podman inventory and live external start/stop updates | Pass | 10,407.44 ms | | 4. UI start/stop/restart/remove on both engines; direct logs/PTY stream smoke | Pending feature for UI Logs/Exec; lifecycle and protocol smoke passed | 35,707.46 ms | | 5. SSH host flow, step 14b | Pending feature | 0.07 ms | | 6. CLI device approval in the same browser, `ps`, stop dry-run and plan | Pending feature for CLI logs/exec; implemented flows passed | 7,011.17 ms | | 7. Scoped `ai_agent` MCP setup and stdio plan flow | Pass | 2,272.03 ms | | 8. Dev VM performance smoke | Pass, non-reportable measurements | 61,094.73 ms | Pending features detected at runtime: - **12b UI Logs:** container detail page has no Logs control. - **13b UI Exec terminal:** container detail page has no Exec/terminal control. The real browser stream smoke still opened the logs channel and ran echo commands over PTY on both engines. - **14b SSH host connection flow:** no host SSH connection UI is present on this dev head. - **CLI logs and exec:** neither subcommand appears in compiled CLI `--help`. Smoke measurements (all are dev VM smoke; reportable only from the perf-test VM): keystroke p99 was 11.3 ms Docker / 23.7 ms Podman against a 5 ms target; list p99 at exactly 500 labelled containers was 19.63 ms against 20 ms; first-load JS was 218,816 encoded bytes against 122,880 bytes; idle server RSS was 35.15 MiB against 40 MiB. The suite records these target comparisons but does not treat dev VM values as reportable performance evidence. Artifacts: `/mnt/hdd/infraternal/artifacts/s1-e2e/s1-mufedu4c-0f29cca6/report.json`, `dashboard-desktop.png`, `containers-desktop.png`, and `containers-mobile-390x844.png`. Cleanup completed with no errors; temporary credentials were revoked, temporary data removed, and run-labelled containers removed. No product flow defect was found. The initial anonymous `POST /api/v1/auth/refresh` returns 401 before setup; `authStore.initialize` catches that response and clears the unauthenticated session. The first screenshot also showed the shared host inventory had 159 rows and the test fixture was outside the virtualized table's mounted rows; the suite now filters by its unique run suffix. Other failures were suite assertion mismatches and are corrected. No product code was edited. ## Gates (verbatim output) ### `scripts/verify fast` ```text PASS fast: migrations are append-only PASS fast: JavaScript dependencies PASS fast: build web app PASS fast: cargo fmt --check PASS fast: cargo clippy PASS fast: cargo test PASS fast: svelte-check PASS fast: UI package svelte-check PASS fast: stream package typecheck PASS fast: Vitest PASS fast: UI package Vitest PASS fast: stream package Vitest PASS fast: OpenAPI and TypeScript client drift PASS fast: terminal TypeScript PASS fast: terminal Vitest ``` ### `scripts/verify e2e` ```text PASS e2e: JavaScript dependencies PASS e2e: install Chromium and system dependencies PASS e2e: build web app PASS e2e: build release binary RUN e2e: S1 first usable slice against the real release server, Docker, and rootless Podman PASS step 1. release server and setup token (1035.97 ms) — real release binary healthy with embedded infraternal agent PASS step 2. Playwright setup token and passkey (1339.94 ms) — setup token accepted; Chromium virtual authenticator registered a passkey PASS step 3. Docker and Podman inventory live updates (10407.44 ms) — both labelled containers appeared and live state followed external start and stop UI_ACTION start s1-docker-s1-mufedu4c-0f29cca6 UI_ACTION stop s1-docker-s1-mufedu4c-0f29cca6 UI_ACTION start s1-docker-s1-mufedu4c-0f29cca6 UI_ACTION restart s1-docker-s1-mufedu4c-0f29cca6 UI_ACTION stop s1-docker-s1-mufedu4c-0f29cca6 UI_ACTION remove s1-docker-s1-mufedu4c-0f29cca6 UI_ACTION start s1-podman-s1-mufedu4c-0f29cca6 UI_ACTION stop s1-podman-s1-mufedu4c-0f29cca6 UI_ACTION start s1-podman-s1-mufedu4c-0f29cca6 UI_ACTION restart s1-podman-s1-mufedu4c-0f29cca6 UI_ACTION stop s1-podman-s1-mufedu4c-0f29cca6 UI_ACTION remove s1-podman-s1-mufedu4c-0f29cca6 PENDING FEATURE step 4. UI actions, Logs and Exec feature detection (35707.46 ms) — UI lifecycle passed; missing Logs and Exec UI marked pending; real browser stream smoke passed PENDING FEATURE step 5. SSH host controls (step 14b) (0.07 ms) — no SSH host connection UI found on the current dev head PENDING FEATURE step 6. compiled CLI device flow, ps and planned stop (7011.17 ms) — device approval, ps and stop plan passed; CLI logs/exec marked pending PASS step 7. scoped ai_agent MCP over stdio (2272.03 ms) — MCP tools/list, list_containers, required plan refusal and dry-run/execute passed PASS step 8. dev VM performance smoke (61094.73 ms) — 500-container list and idle memory measured as non-reportable dev VM smoke REPORT /mnt/hdd/infraternal/artifacts/s1-e2e/s1-mufedu4c-0f29cca6/report.json PENDING_FEATURES [{"step":"12b","feature":"UI container logs","status":"pending_feature","reason":"container detail page has no Logs control"},{"step":"13b","feature":"UI exec terminal","status":"pending_feature","reason":"container detail page has no Exec or terminal control"},{"step":"14b","feature":"SSH host connection flow","status":"pending_feature","reason":"host SSH connection UI is not present on this dev head"},{"step":"step-6","feature":"CLI logs","status":"pending_feature","reason":"compiled CLI --help has no logs subcommand"},{"step":"step-6","feature":"CLI exec","status":"pending_feature","reason":"compiled CLI --help has no exec subcommand"}] SMOKE first_load_js {"value_bytes":218816,"target_max_gzip_bytes":122880,"within_target":false,"resources":[{"path":"/_app/immutable/entry/start.rS8oqgfN.js","encoded_bytes":82},{"path":"/_app/immutable/chunks/DYb7skxK.js","encoded_bytes":26778},{"path":"/_app/immutable/chunks/rbrvUBU4.js","encoded_bytes":56987},{"path":"/_app/immutable/chunks/DeM9JS5-.js","encoded_bytes":22},{"path":"/_app/immutable/chunks/xihTtKlq.js","encoded_bytes":65},{"path":"/_app/immutable/entry/app.CwsFHkTM.js","encoded_bytes":7080},{"path":"/_app/immutable/chunks/BKPtN_FV.js","encoded_bytes":294},{"path":"/_app/immutable/nodes/0.GrtJoSzt.js","encoded_bytes":37024},{"path":"/_app/immutable/chunks/BPvTWCsJ.js","encoded_bytes":6062},{"path":"/_app/immutable/chunks/BZv3cjOg.js","encoded_bytes":4408},{"path":"/_app/immutable/chunks/NozeucNs.js","encoded_bytes":70429},{"path":"/_app/immutable/nodes/1.DkVtLV9T.js","encoded_bytes":357},{"path":"/_app/immutable/nodes/2.Doj-YrZy.js","encoded_bytes":7913},{"path":"/_app/immutable/chunks/C5U2EtAp.js","encoded_bytes":1315}],"environment":"dev VM smoke","reportable":false} SMOKE keystroke_p99_ms {"by_engine":{"docker":11.300000011920929,"podman":23.69999998807907},"target_max_ms":5,"within_target":false,"source":"Chromium WebSocket logs and PTY echo through the real server and embedded infraternal agent","environment":"dev VM smoke","reportable":false} SMOKE container_list_p99_500_ms {"value_ms":19.63,"within_target":true,"sample_count":25,"test_container_count":500,"target_max_ms":20,"creation_ms":37624.97,"environment":"dev VM smoke","reportable":false} SMOKE idle_server_rss_mib {"value_mib":35.15,"within_target":true,"samples_mib":[35.1484375,35.1484375,35.1484375,34.09765625,34.09765625],"target_max_mib":40,"environment":"dev VM smoke","reportable":false} PASS e2e: S1 first usable slice ```
Author
Owner

Starting independent review on branch s1-e2e. Review head: 8acbb64b5f54bc6411a3897ac3842103bb8354b8; fetched current dev at d4d16de (includes steps 11b and 12f). I am merging that head before reviewing the E2E suite and gates.

Starting independent review on branch `s1-e2e`. Review head: `8acbb64b5f54bc6411a3897ac3842103bb8354b8`; fetched current `dev` at `d4d16de` (includes steps 11b and 12f). I am merging that head before reviewing the E2E suite and gates.
Author
Owner

Independent review result

PASS by suite-review criteria; no open blocks-merge finding. Branch s1-e2e, final head 7517cf3bc3941cdc87172d1a7fab9fca0286c35b. The review merged origin/dev at d4d16de (including 11b and 12f) before reviewing. No push.

1. S1 flow — PASS, with product gaps marked pending

Two post-fix sequential runs used the real release binary, real Docker, rootless Podman, and Playwright Chromium’s virtual authenticator. Step 1 setup-token startup, step 2 passkey registration, and step 3 live inventory transitions ran. Step 4 exercised UI start/stop/restart/remove on both engines; Logs/Exec UI is absent and pending. The real Chromium stream smoke ran. Step 5 visited Hosts list and detail; SSH controls are absent and pending. Step 6 exercised device login, ps, and the stop plan; missing CLI logs/exec/ssh are pending. Step 7 used a scoped MCP token, verified a destructive action is refused without a plan, then executed the plan; missing MCP logs/exec/ssh are pending. Both reports are passed_with_pending_features; no missing flow is silently skipped or marked passed.

2. Measurements — PASS for JS budget; later for release performance evidence

The 218,816 value is the sum of raw response-body bytes across 14 same-origin JavaScript files. The E2E runner separately gzip-compresses each body and sums to 76,762 bytes, below the budget of 122,880 bytes (120 KiB). Setup and authenticated dashboard reload both produce this count; the terminal lazy chunks were not loaded. The earlier browser gate’s 76,761 B uses the same per-response gzipSync method; its one-byte difference is immaterial. The four largest raw/gzip contributors are NozeucNs.js 70,429/22,333 B, rbrvUBU4.js 56,987/21,365 B, nodes/0.GrtJoSzt.js 37,024/12,480 B, and DYb7skxK.js 26,778/10,258 B. The remaining ten total 27,598 raw / 10,326 gzip bytes. The full per-file list is in the reports below. The embedded test server does not send a gzip content-encoding header, so raw bytes describe the test transfer and gzip bytes are the explicit budget measure.

The reported 11.3/23.7 ms keystroke p99 values are not comparable with PLAN’s paced ~55 MiB/s stream workload: these are low-rate fixtures (~300 B in 5 seconds). The runner now labels them plan_budget_comparable:false and reportable:false, and records host load. In the second clean run, smoke p99 was 1.6 ms Docker / 5.9 ms Podman; load averages (1/5/15 min) were Docker 9.69/11.60/12.27 before and 8.72/11.33/12.18 after, Podman 8.72/11.33/12.18 before and 8.99/11.34/12.18 after. The first clean run measured 9.4/10.5 ms under 12.93–13.31 1-minute load. These are smoke diagnostics, not a keystroke budget pass.

Container-list p99 used 200 nearest-rank samples over direct API calls returning exactly this run’s 500 labelled containers. In the second clean run it was 29.76 ms against the 20 ms target while load was 23.29/15.24/13.46 before and 23.02/15.31/13.50 after (1/5/15 min); it is explicitly a non-reportable dev-VM smoke. The timing ends after JSON parsing, so it is client-observed request-plus-decode time, not an internal server-handler timer.

Idle server RSS sampled the actual release-server PID’s /proc/<pid>/status VmRSS five times after the browser and test containers were removed. Second-run peak was 39.41 decimal MB / 37.59 MiB at load 21.97/15.60/13.63; the first clean run was 41.10 decimal MB / 39.20 MiB at load 17.66/13.57/12.61. These dev-VM values are marked non-reportable; official budget evidence still belongs on the perf-test VM. Linux documents VmRSS as resident set size, labels the field kB, and notes its reported value can be inaccurate: proc_pid_status(5).

3. Isolation and cleanup — PASS

The suite uses a unique run ID, dynamically selected loopback port, per-run temp/database/HOME/XDG directories, unique artifact directory, run labels, and bounded container logs. The broad stale-container sweep was removed. After each normal run, exact Docker/Podman labels and temp roots were absent and cleanup_errors was empty.

For the hard-kill check, I verified one labelled fixture in each engine, confirmed PID 1160101 was this run’s Node runner (process group 1160099), and sent SIGKILL only to that PID after step 3. The wrapper exited 137 as expected, then removed both exact container labels, the process group, and its temp root. No simultaneous duplicate suite was launched; the per-run isolation was exercised alongside other VM jobs without touching their processes.

4. Re-runnability — PASS

Two post-fix scripts/verify e2e runs completed sequentially. Both reported passed_with_pending_features, had no cleanup errors, and left no run-scoped containers or temp roots. Their reports are:

  • /mnt/hdd/infraternal/artifacts/review-s1-e2e-12-c/s1-1790251436470346072-1078539-23713/report.json
  • /mnt/hdd/infraternal/artifacts/review-s1-e2e-12-d/s1-1790252233794916194-1103121-26991/report.json

5. Gates — PASS

Verbatim output from final scripts/verify fast:

PASS fast: migrations are append-only
PASS fast: JavaScript dependencies
PASS fast: build web app
PASS fast: cargo fmt --check
PASS fast: cargo clippy
PASS fast: cargo test
PASS fast: svelte-check
PASS fast: UI package svelte-check
PASS fast: stream package typecheck
PASS fast: Vitest
PASS fast: UI package Vitest
PASS fast: stream package Vitest
PASS fast: OpenAPI and TypeScript client drift
PASS fast: terminal TypeScript
PASS fast: terminal Vitest

Verbatim status lines from the second clean scripts/verify e2e run:

PASS step 1. release server and setup token (684.57 ms) — real release server healthy with embedded infraternal agent
PASS step 2. Playwright setup token and passkey (1965.8 ms) — setup token accepted; Chromium virtual authenticator registered a passkey
PASS step 3. Docker and Podman inventory live updates (8335.72 ms) — both labelled containers appeared and live state followed external start and stop
PENDING FEATURE step 4. UI actions, Logs and Exec feature detection (43448.27 ms) — UI lifecycle passed; missing Logs and Exec UI marked pending; real browser stream smoke passed
PENDING FEATURE step 5. SSH host controls (1583.4 ms) — checked the live Hosts list and detail; no SSH connection controls are present
PENDING FEATURE step 6. compiled CLI device flow, ps and planned stop (9627.76 ms) — device approval, ps and stop plan passed; missing CLI logs/exec/SSH subcommands marked pending
PENDING FEATURE step 7. scoped ai_agent MCP over stdio (6546.08 ms) — scoped container tools and stop plan passed; MCP logs, exec, and SSH are absent and marked pending
PASS step 8. dev VM performance smoke (78013.96 ms) — 500-container list and idle memory measured as non-reportable dev VM smoke
PASS e2e: S1 first usable slice

Findings and fixes

  • blocks-merge — fixed in f8f72cf: the original 218,816-byte value was raw, but was compared as gzip. The corrected gzip value is 76,762 B and passes the budget.
  • blocks-merge — fixed in 7517cf3: SSH feature detection queried a fixture after step 4 had removed it. Step 3 now retains the host ID; step 5 visits Hosts list/detail and reports the absent SSH flow as pending.
  • later: run the prescribed paced stream benchmark and controlled list/RSS A/B on the perf-test VM before making release-budget claims. Current dev-VM diagnostics are explicitly non-reportable and were collected under high load.

Hard-kill injection output (expected failure):

_: line 4: 1160101 Killed                  node "$1" 2>&1
     1160102 Done                    | tee "$2"
FAIL e2e: S1 first usable slice

Post-kill cleanup checks:

Docker labels: clean
Podman labels: clean
Temp root: clean
Process group 1160099: clean
Node PID 1160101: gone
## Independent review result **PASS by suite-review criteria; no open `blocks-merge` finding.** Branch `s1-e2e`, final head `7517cf3bc3941cdc87172d1a7fab9fca0286c35b`. The review merged `origin/dev` at `d4d16de` (including 11b and 12f) before reviewing. No push. ### 1. S1 flow — PASS, with product gaps marked pending Two post-fix sequential runs used the real release binary, real Docker, rootless Podman, and Playwright Chromium’s virtual authenticator. Step 1 setup-token startup, step 2 passkey registration, and step 3 live inventory transitions ran. Step 4 exercised UI start/stop/restart/remove on both engines; Logs/Exec UI is absent and pending. The real Chromium stream smoke ran. Step 5 visited Hosts list and detail; SSH controls are absent and pending. Step 6 exercised device login, `ps`, and the stop plan; missing CLI logs/exec/ssh are pending. Step 7 used a scoped MCP token, verified a destructive action is refused without a plan, then executed the plan; missing MCP logs/exec/ssh are pending. Both reports are `passed_with_pending_features`; no missing flow is silently skipped or marked passed. ### 2. Measurements — PASS for JS budget; later for release performance evidence The `218,816` value is the sum of **raw response-body bytes** across 14 same-origin JavaScript files. The E2E runner separately gzip-compresses each body and sums to **76,762 bytes**, below the budget of **122,880 bytes (120 KiB)**. Setup and authenticated dashboard reload both produce this count; the terminal lazy chunks were not loaded. The earlier browser gate’s 76,761 B uses the same per-response `gzipSync` method; its one-byte difference is immaterial. The four largest raw/gzip contributors are `NozeucNs.js` 70,429/22,333 B, `rbrvUBU4.js` 56,987/21,365 B, `nodes/0.GrtJoSzt.js` 37,024/12,480 B, and `DYb7skxK.js` 26,778/10,258 B. The remaining ten total 27,598 raw / 10,326 gzip bytes. The full per-file list is in the reports below. The embedded test server does not send a gzip content-encoding header, so raw bytes describe the test transfer and gzip bytes are the explicit budget measure. The reported 11.3/23.7 ms keystroke p99 values are **not comparable** with PLAN’s paced ~55 MiB/s stream workload: these are low-rate fixtures (~300 B in 5 seconds). The runner now labels them `plan_budget_comparable:false` and `reportable:false`, and records host load. In the second clean run, smoke p99 was 1.6 ms Docker / 5.9 ms Podman; load averages (1/5/15 min) were Docker 9.69/11.60/12.27 before and 8.72/11.33/12.18 after, Podman 8.72/11.33/12.18 before and 8.99/11.34/12.18 after. The first clean run measured 9.4/10.5 ms under 12.93–13.31 1-minute load. These are smoke diagnostics, not a keystroke budget pass. Container-list p99 used 200 nearest-rank samples over direct API calls returning exactly this run’s 500 labelled containers. In the second clean run it was 29.76 ms against the 20 ms target while load was 23.29/15.24/13.46 before and 23.02/15.31/13.50 after (1/5/15 min); it is explicitly a non-reportable dev-VM smoke. The timing ends after JSON parsing, so it is client-observed request-plus-decode time, not an internal server-handler timer. Idle server RSS sampled the actual release-server PID’s `/proc/<pid>/status` `VmRSS` five times after the browser and test containers were removed. Second-run peak was 39.41 decimal MB / 37.59 MiB at load 21.97/15.60/13.63; the first clean run was 41.10 decimal MB / 39.20 MiB at load 17.66/13.57/12.61. These dev-VM values are marked non-reportable; official budget evidence still belongs on the perf-test VM. Linux documents `VmRSS` as resident set size, labels the field `kB`, and notes its reported value can be inaccurate: [proc_pid_status(5)](https://www.man7.org/linux/man-pages/man5/proc_pid_status.5.html). ### 3. Isolation and cleanup — PASS The suite uses a unique run ID, dynamically selected loopback port, per-run temp/database/HOME/XDG directories, unique artifact directory, run labels, and bounded container logs. The broad stale-container sweep was removed. After each normal run, exact Docker/Podman labels and temp roots were absent and `cleanup_errors` was empty. For the hard-kill check, I verified one labelled fixture in each engine, confirmed PID 1160101 was this run’s Node runner (process group 1160099), and sent SIGKILL only to that PID after step 3. The wrapper exited 137 as expected, then removed both exact container labels, the process group, and its temp root. No simultaneous duplicate suite was launched; the per-run isolation was exercised alongside other VM jobs without touching their processes. ### 4. Re-runnability — PASS Two post-fix `scripts/verify e2e` runs completed sequentially. Both reported `passed_with_pending_features`, had no cleanup errors, and left no run-scoped containers or temp roots. Their reports are: - `/mnt/hdd/infraternal/artifacts/review-s1-e2e-12-c/s1-1790251436470346072-1078539-23713/report.json` - `/mnt/hdd/infraternal/artifacts/review-s1-e2e-12-d/s1-1790252233794916194-1103121-26991/report.json` ### 5. Gates — PASS Verbatim output from final `scripts/verify fast`: ```text PASS fast: migrations are append-only PASS fast: JavaScript dependencies PASS fast: build web app PASS fast: cargo fmt --check PASS fast: cargo clippy PASS fast: cargo test PASS fast: svelte-check PASS fast: UI package svelte-check PASS fast: stream package typecheck PASS fast: Vitest PASS fast: UI package Vitest PASS fast: stream package Vitest PASS fast: OpenAPI and TypeScript client drift PASS fast: terminal TypeScript PASS fast: terminal Vitest ``` Verbatim status lines from the second clean `scripts/verify e2e` run: ```text PASS step 1. release server and setup token (684.57 ms) — real release server healthy with embedded infraternal agent PASS step 2. Playwright setup token and passkey (1965.8 ms) — setup token accepted; Chromium virtual authenticator registered a passkey PASS step 3. Docker and Podman inventory live updates (8335.72 ms) — both labelled containers appeared and live state followed external start and stop PENDING FEATURE step 4. UI actions, Logs and Exec feature detection (43448.27 ms) — UI lifecycle passed; missing Logs and Exec UI marked pending; real browser stream smoke passed PENDING FEATURE step 5. SSH host controls (1583.4 ms) — checked the live Hosts list and detail; no SSH connection controls are present PENDING FEATURE step 6. compiled CLI device flow, ps and planned stop (9627.76 ms) — device approval, ps and stop plan passed; missing CLI logs/exec/SSH subcommands marked pending PENDING FEATURE step 7. scoped ai_agent MCP over stdio (6546.08 ms) — scoped container tools and stop plan passed; MCP logs, exec, and SSH are absent and marked pending PASS step 8. dev VM performance smoke (78013.96 ms) — 500-container list and idle memory measured as non-reportable dev VM smoke PASS e2e: S1 first usable slice ``` ### Findings and fixes - **`blocks-merge` — fixed in `f8f72cf`:** the original 218,816-byte value was raw, but was compared as gzip. The corrected gzip value is 76,762 B and passes the budget. - **`blocks-merge` — fixed in `7517cf3`:** SSH feature detection queried a fixture after step 4 had removed it. Step 3 now retains the host ID; step 5 visits Hosts list/detail and reports the absent SSH flow as pending. - **`later`:** run the prescribed paced stream benchmark and controlled list/RSS A/B on the perf-test VM before making release-budget claims. Current dev-VM diagnostics are explicitly non-reportable and were collected under high load. Hard-kill injection output (expected failure): ```text _: line 4: 1160101 Killed node "$1" 2>&1 1160102 Done | tee "$2" FAIL e2e: S1 first usable slice ``` Post-kill cleanup checks: ```text Docker labels: clean Podman labels: clean Temp root: clean Process group 1160099: clean Node PID 1160101: gone ```
Author
Owner

Orchestrator: the S1 end-to-end suite is merged to dev at 0113f79 and pushed (step 16 prep). The review passed with no blocks-merge findings. Gates on the merge head: fast 15/15; scripts/verify e2e passed with pending features (12b logs UI, 13b exec UI, 14b SSH, CLI logs/exec/ssh, and the matching MCP tools). First-load JS is 76,762 B gzip (budget 120 KiB). Watch item for step 16: 500-container list p99 29.76 ms against a 20 ms target, measured at load5 about 15 on the dev VM (non-reportable); it must be measured on the perf-test VM.

Orchestrator: **the S1 end-to-end suite is merged to `dev` at `0113f79`** and pushed (step 16 prep). The review passed with no blocks-merge findings. Gates on the merge head: fast 15/15; `scripts/verify e2e` passed with pending features (12b logs UI, 13b exec UI, 14b SSH, CLI logs/exec/ssh, and the matching MCP tools). First-load JS is 76,762 B gzip (budget 120 KiB). **Watch item for step 16:** 500-container list p99 29.76 ms against a 20 ms target, measured at load5 about 15 on the dev VM (non-reportable); it must be measured on the perf-test VM.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
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-v0#12
No description provided.