Update perf gate selectors to match the container UI #89

Open
opened 2026-10-04 18:56:27 +00:00 by kayg · 3 comments
Owner

Problem and evidence

The formal command scripts/verify perf --dev-vm --calibrate failed at measured performance budgets after 724.342 s with locator.fill timing out after 30 seconds on getByRole('textbox', {name: 'Search', exact: true}). The current container page labels its searchbox Filter Containers (packages/web/src/routes/containers/+page.svelte:386-400; packages/ui/src/components/DataTable.svelte:342-353). The gate also assumes opening container detail opens logs, while the current page requires an explicit Open logs action (packages/web/src/routes/containers/[host_id]/[engine]/[container_id]/+page.svelte:516-529).

The selector failure itself did not produce a valid workload sample or captured load value. The separate 10k-lines/s browser runs recorded load1 24.84 and 8.29. Failure evidence is audit-first-failure.log; browser measurements are in browser-busy-loaded-timeline.json. No flamegraph applies because the gate stopped before these measurements.

Recommendation

Update the existing perf gate to use the actual Filter Containers searchbox and explicitly open the lazy log panel before measuring it. Then rerun the real production-binary gate and retain its absolute and baseline checks.

Payoff, effort and risk

Expected gain: the gate reaches the intended measurements instead of failing on stale selectors; the audit produced no valid calibration or baseline because partial.json says complete:false.
Quick win vs deeper change: correct selectors and the log-open step in ≤½ day; rerun and handle any real failures as a separate follow-up.
Risk: low; the selector repair must not skip workload assertions or weaken budgets.

Priority: Now (≤1 day).

2026-10-04 owner decisions: Matches performance-first verification and the decision that code and tests are the spec. This is separate from #53, which concerns serializing full gates before compilation. Related: #53.

Report: perf-audit report
Source: perf-audit 2026-10-04

## Problem and evidence The formal command scripts/verify perf --dev-vm --calibrate failed at measured performance budgets after 724.342 s with locator.fill timing out after 30 seconds on getByRole('textbox', {name: 'Search', exact: true}). The current container page labels its searchbox Filter Containers (packages/web/src/routes/containers/+page.svelte:386-400; packages/ui/src/components/DataTable.svelte:342-353). The gate also assumes opening container detail opens logs, while the current page requires an explicit Open logs action (packages/web/src/routes/containers/[host_id]/[engine]/[container_id]/+page.svelte:516-529). The selector failure itself did not produce a valid workload sample or captured load value. The separate 10k-lines/s browser runs recorded load1 24.84 and 8.29. Failure evidence is [audit-first-failure.log](/mnt/hdd/infraternal/jobs/perf-audit/audit-first-failure.log); browser measurements are in [browser-busy-loaded-timeline.json](/mnt/hdd/infraternal/jobs/perf-audit/browser-busy-loaded-timeline.json). No flamegraph applies because the gate stopped before these measurements. ## Recommendation Update the existing perf gate to use the actual Filter Containers searchbox and explicitly open the lazy log panel before measuring it. Then rerun the real production-binary gate and retain its absolute and baseline checks. ## Payoff, effort and risk **Expected gain:** the gate reaches the intended measurements instead of failing on stale selectors; the audit produced no valid calibration or baseline because partial.json says complete:false. **Quick win vs deeper change:** correct selectors and the log-open step in ≤½ day; rerun and handle any real failures as a separate follow-up. **Risk:** low; the selector repair must not skip workload assertions or weaken budgets. **Priority:** Now (≤1 day). **2026-10-04 owner decisions:** Matches performance-first verification and the decision that code and tests are the spec. This is separate from #53, which concerns serializing full gates before compilation. Related: #53. **Report:** [perf-audit report](/mnt/hdd/infraternal/jobs/perf-audit/report.md) Source: perf-audit 2026-10-04
Author
Owner

Starting issue work on branch gate-tooling-now at base 069059d31fcd91366e76072e6be4871c01e5cde6.

Scope: make the supply-chain check compare notices without rewriting the tracked file and resolve the jiti discrepancy; repair the perf gate's container search and lazy log selectors; align performance budget units/workload definitions and document each source from the perf audit. I will run only INFRATERAL_VERIFY_RUN_ID=gate-tooling-now scripts/verify fast and report its exact output plus final tree status.

Starting issue work on branch `gate-tooling-now` at base `069059d31fcd91366e76072e6be4871c01e5cde6`. Scope: make the supply-chain check compare notices without rewriting the tracked file and resolve the `jiti` discrepancy; repair the perf gate's container search and lazy log selectors; align performance budget units/workload definitions and document each source from the perf audit. I will run only `INFRATERAL_VERIFY_RUN_ID=gate-tooling-now scripts/verify fast` and report its exact output plus final tree status.
Author
Owner

Finding: scripts/perf/browser.mjs currently asks for a textbox named Search, but the production DataTable exposes its filter as the Filter Containers searchbox. The detail page shows a Container logs heading before the lazy stream is open; Open logs must be clicked and the gate must continue to assert a real stream OPEN before measuring memory.

Finding: `scripts/perf/browser.mjs` currently asks for a textbox named `Search`, but the production DataTable exposes its filter as the `Filter Containers` searchbox. The detail page shows a `Container logs` heading before the lazy stream is open; `Open logs` must be clicked and the gate must continue to assert a real stream OPEN before measuring memory.
Author
Owner

Finished issue #89 on gate-tooling-now.

Head: 459046794cd600c1b890472064b69c76b50c99ba

The perf browser workload now targets the DataTable searchbox Filter Containers and clicks Open logs before requiring the real log stream OPEN. The requested fast verification does not run the perf stage, so this selector path was not exercised by that gate.

Fast verification output (verbatim; command exited 0):

PASS fast: migrations are append-only (0.284s)
PASS fast: workspace package dependencies (0.397s)
PASS fast: gate target-directory and launch diagnostics tests (0.387s)
PASS fast: JavaScript dependencies (0.056s)
PASS fast: advisory review policy tests (0.314s)
SUPPLY_CHAIN_NOTICES match THIRD_PARTY_NOTICES.md from 81 frontend packages
SUPPLY_CHAIN_PASS Rust advisory/license checks complete; Bun findings are report-only
PASS fast: supply-chain checks (5.994s)
PASS fast: build web app (13.542s)
PASS fast: cargo fmt --check (2.066s)
PASS fast: cargo clippy (313.855s)
PASS fast: cargo test (375.380s)
PASS fast: svelte-check (30.882s)
PASS fast: UI package svelte-check (10.815s)
PASS fast: stream package typecheck (14.500s)
PASS fast: Vitest (13.575s)
PASS fast: UI package Vitest (11.750s)
PASS fast: stream package Vitest (2.446s)
PASS fast: OpenAPI and TypeScript client drift (79.158s)
PASS fast: terminal TypeScript (2.947s)
PASS fast: terminal Vitest (1.456s)

Bun audit reported one low cookie advisory as report-only. git status was clean after verification.

Finished issue #89 on `gate-tooling-now`. Head: `459046794cd600c1b890472064b69c76b50c99ba` The perf browser workload now targets the DataTable searchbox `Filter Containers` and clicks `Open logs` before requiring the real log stream OPEN. The requested `fast` verification does not run the perf stage, so this selector path was not exercised by that gate. Fast verification output (verbatim; command exited 0): ```text PASS fast: migrations are append-only (0.284s) PASS fast: workspace package dependencies (0.397s) PASS fast: gate target-directory and launch diagnostics tests (0.387s) PASS fast: JavaScript dependencies (0.056s) PASS fast: advisory review policy tests (0.314s) SUPPLY_CHAIN_NOTICES match THIRD_PARTY_NOTICES.md from 81 frontend packages SUPPLY_CHAIN_PASS Rust advisory/license checks complete; Bun findings are report-only PASS fast: supply-chain checks (5.994s) PASS fast: build web app (13.542s) PASS fast: cargo fmt --check (2.066s) PASS fast: cargo clippy (313.855s) PASS fast: cargo test (375.380s) PASS fast: svelte-check (30.882s) PASS fast: UI package svelte-check (10.815s) PASS fast: stream package typecheck (14.500s) PASS fast: Vitest (13.575s) PASS fast: UI package Vitest (11.750s) PASS fast: stream package Vitest (2.446s) PASS fast: OpenAPI and TypeScript client drift (79.158s) PASS fast: terminal TypeScript (2.947s) PASS fast: terminal Vitest (1.456s) ``` Bun audit reported one low `cookie` advisory as report-only. `git status` was clean after verification.
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#89
No description provided.