Files
orca/config/performance-audit.md
T
OrcaWinandOrcaWin 8b7f8c88ce ci: run terminal perf on demand only, on a hosted runner (#34726)
* ci: run terminal perf on demand only, on a hosted runner

The nightly failed every run: the presented-frame guard accepts only
GitHub-hosted Xvfb displays, but the workflow ran on Blacksmith. Drop the
schedule, move dispatch runs to ubuntu-24.04 and document local use.

* docs: record the first hosted terminal perf result

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-27 21:48:08 -07:00

57 lines
3.6 KiB
Markdown

# Performance regression checks
`pnpm --silent audit:perf > performance-audit.json` scans production `src/` with
the existing app-store and buffer-concatenation rules. Warnings are advisory in this full inventory; tool/parser failures fail.
New findings from rules enabled in the changed-code configuration fail
`pnpm check:code-quality:changed`.
The `app-store-performance/no-whole-hot-map-selector` warning is advisory only:
it appears in this inventory and the performance-contracts artifact, and its
findings cannot fail the changed-code gate or other required checks. It catches
selectors returning the whole `runtimeStatusByEnvironmentId` map, which is
replaced on meaningful host observations. Select a stable derived answer inside
the selector (see `paired-runtime-parking-capabilities.ts`). Fleet consumers can
optionally silence the inventory warning with
`// oxlint-disable-next-line app-store-performance/no-whole-hot-map-selector -- <why every host is needed>`.
It resolves direct returns, module-scope named selectors and selector-local const
aliases/destructuring; it does not infer consumer lifetime or follow imported
helpers. Legitimate fleet consumers also match, so behavior-level render-isolation
assertions remain the safeguard against actual fanout regressions.
Tests, generated files, `mobile/` and `cloud/` are outside this source audit.
The ast-grep rule `config/ast-grep/rules/no-repeated-collator.yml` (`pnpm lint:ast-grep`,
an error everywhere) detects optioned `localeCompare` and `Intl.Collator` construction
inside inline `sort`/`toSorted` callbacks. Construct one collator outside the
callback, preserving locale, options and tie-breakers. If the locale changes at
runtime, reconstruct at the next sort or key the cache by locale. Bare comparisons
and standalone equality checks are allowed. There is no autofix or interprocedural
analysis: named comparators, aliases, custom methods and deferred callbacks need
manual review. A finding identifies repeated setup, not proof of visible lag.
`pnpm test:perf:contracts` runs the explicit selection in
`vitest.performance.config.ts`: SQLite statement reuse and schema parity, relay
filesystem concurrency, incremental Codex scans and reader lifetimes, pinned JSONL
readers and snapshots, linear tool-result pairing and attribution allocation,
tokenizer rejection, highlighting cache, queued cancellation, terminal backing-memory
retention and detector fixtures. Missing
listed files fail configuration loading. Tests run serially, without retries,
and inherit the full suite's setup and forced-GC support. This makes existing
regression coverage easy to run and attribute; it does not create new workload
coverage by itself.
Incremental Claude scans and persisted Claude cache checkpoints are also included.
`.github/workflows/performance-contracts.yml` runs daily and manually on Linux,
macOS and Windows, and on PRs changing this tooling or any listed contract file.
It uploads per-OS JSON test results, plus the source inventory once from Linux
because that scan is OS-independent. Its schedule starts after merge. Run the existing
`test:e2e:terminal-perf:scale:report` ([guide](../docs/readme/terminal-perf.md)) for rendered typing/frame budgets. Unit tests do not
measure SSH RTT, WSL scheduling or a packaged Electron renderer.
To extend coverage, select a production-path regression with an operation-count,
identity, queue-admission or retained-memory oracle. Confirm it fails with the
old behavior. Use controlled, counterbalanced benchmark samples for timings;
avoid new machine-dependent millisecond gates in the normal unit suite. A green
source scan and these contracts cannot establish that the whole app is fast.