Skip to content

perf: black-box performance harness + CI perf gates - #139

Merged
mrcsin merged 2 commits into
masterfrom
blackbox-perf-harness
Jul 17, 2026
Merged

perf: black-box performance harness + CI perf gates#139
mrcsin merged 2 commits into
masterfrom
blackbox-perf-harness

Conversation

@mrcsin

@mrcsin mrcsin commented Jul 17, 2026

Copy link
Copy Markdown
Member

Two squashed commits:

perf: add black-box performance harness with committed baselines — measurement core (PerfScenarioRunner + PerfSignals) over framework-boundary signals (allocated bytes, fresh-visual identity diff, GC counts, retained floor); IRecipeGridDriver drives the real headless views through their public surface, so gates survive panel refactors. Gate hierarchy: exact invariants (FreshVisualInstances == 0) → same-process ratios (per-add scaling, transposed/canonical parity, selection time ratio) → soft byte baselines with hand-set budget caps. Probes are xunit v3 explicit tests; re-baselining is a file copy of the fixture-merged actuals artifact. Docs in Docs/perf/README.md.

ci: run perf gates on master push and wire IDE entry pointsperf.yml runs the explicit suite on every master push (workflow_dispatch too), with byte baselines neutralized to their record-only path (dev-testbed numbers are not comparable on a hosted runner); invariant/ratio gates assert at full strength; measured values upload as the perf-actuals artifact. Canonical invocation is OS-neutral dotnet run ... -- -explicit only; Rider run configuration and Zed task added; comment strip per comment-hater audit.

Verification: full normal suite 1444/1444 green, harness units 33/33, full explicit suite 8/8 probes green, dotnet format --verify-no-changes clean.

🤖 Generated with Claude Code

mrcsin and others added 2 commits July 17, 2026 17:05
Measurement core (PerfScenarioRunner + PerfSignals) reads framework-boundary
signals only: allocated bytes, fresh visual instances via reference-identity
set-diff, GC counts, retained floor. IRecipeGridDriver drives the real
headless views over their public surface (transposed + canonical drivers), so
the gates survive panel refactors.

Gate hierarchy: exact invariants (FreshVisualInstances == 0 on scroll
round-trips), same-process ratios (per-add scaling, transposed/canonical
parity, selection time ratio), then soft byte baselines in
Docs/perf/baselines.json with hand-set budget caps against compounding
re-baseline drift. Probes are xunit v3 explicit tests: dotnet test and CI do
not run them by default.

Re-baselining is a file copy: PerfActualsFixture merges measured metrics over
the loaded baselines and writes the proposed next baselines.json once per
process. Docs/perf/README.md carries the commands, the gate hierarchy, and
the re-baseline procedure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
perf.yml runs the explicit suite on windows-latest for every master push
(plus workflow_dispatch), separate from the regular ci workflow. Byte
baselines are neutralized before the run: dev-testbed numbers are not
comparable on a hosted runner, and an empty metrics document flips the byte
tier to its record-only path while the invariant and ratio gates keep
asserting. Measured values upload as the perf-actuals artifact for later
promotion to a ci-hosted baseline.

The canonical invocation becomes OS-neutral dotnet run (an xunit v3 test
project is an executable): docs, probe headers, and the re-baseline guidance
now name it; the built exe stays only for dotnet-trace capture, which must
launch the test process directly. Adds the Rider run configuration and the
Zed task for the same command, and strips comments that restated
Docs/perf/README.md or the assertions beneath them (comment-hater audit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mrcsin
mrcsin merged commit 020208f into master Jul 17, 2026
1 check passed
@mrcsin
mrcsin deleted the blackbox-perf-harness branch July 17, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant