Skip to content

Load and Benchmark Workflows

Atlas separates executable compilation, fixture regression, load-contract validation, measured performance, and candidate comparison. These are different forms of evidence. A green workflow means only that its declared operations passed.

Current Automation Surface

Workflow What it runs Evidence it establishes
ingest-benchmark-ci.yml compiles the ingest_throughput benchmark with --no-run; runs the ingest benchmark regression fixture test benchmark target remains buildable and the checked-in fixture contract passes
query-benchmark-ci.yml compiles query_patterns with --no-run; runs query threshold-sanity library tests query benchmark target remains buildable and fixture thresholds remain internally consistent
load-system-ci.yml parses selected JSON; compares the system baseline with itself; runs load manifest and baseline asset tests registry, generated-file, and deterministic comparison plumbing remain valid
performance-regression-ci.yml parses performance assets; compares the system baseline with itself; runs perf validate and asset tests performance policy and report assets are structurally consistent

None of these operations measures a candidate under load. The benchmark workflows do not execute Criterion measurements. The load and regression workflows compare identical baseline inputs, so their zero-delta result proves determinism rather than candidate performance.

Evidence Ladder

flowchart TD
    Compile[benchmark compiles] --> Fixture[fixture and policy checks]
    Fixture --> Execute[workload executes against candidate]
    Execute --> Complete[required metrics and identities retained]
    Complete --> Absolute[absolute scenario budgets pass]
    Absolute --> Compare[compatible measured baseline comparison passes]
    Compare --> Promote[promotion evidence]

Every higher claim requires the earlier layers. A compiled benchmark can catch API drift. A fixture can catch comparison drift. Only an executed candidate run can provide latency, throughput, saturation, failure, or recovery evidence.

Running a Measured Candidate

Freeze the source revision, binary or image digest, dataset, query pack, scenario, thresholds, profile, resources, topology, cache state, tool versions, and run ID before execution. Plan and execute one of the suites wired into ops/load/load.toml:

bijux-atlas-dev ops load plan mixed \
  --repo-root "$PWD" \
  --format json

bijux-atlas-dev ops load run mixed \
  --repo-root "$PWD" \
  --run-id candidate-load \
  --allow-subprocess \
  --allow-network \
  --allow-write \
  --format json

bijux-atlas-dev ops load report mixed \
  --repo-root "$PWD" \
  --run-id candidate-load \
  --format json

The manifest currently exposes only mixed, diff_heavy, and hpa_validation_short. The broader 40-entry suite registry is not fully wired to this executor. Record that scope instead of reporting the registry as run.

The separate load baseline, load run, and load compare commands emit deterministic synthetic harness measurements. They are suitable for command and comparison-contract tests, not candidate performance evidence. Store raw and derived K6 results under the run's artifacts/ directory. Do not replace raw K6, Criterion, resource, or telemetry data with a console summary.

For microbenchmarks, execute the owned target only when the environment is suited to measurement. Record CPU model, frequency policy, memory, storage, operating system, Rust toolchain, competing load, sample configuration, and Criterion output. Do not compare a local laptop result with a CI runner or cluster baseline without an explicit comparability decision.

Result Acceptance

A measured result is complete only when it binds:

  • candidate and environment identity;
  • exact scenario and query-pack hashes;
  • offered load, concurrency, duration, and warmup state;
  • required latency, throughput, failure, survival, and resource metrics;
  • absolute threshold verdicts;
  • compatible baseline and regression verdicts when claimed;
  • raw artifacts, failure classification, and command receipt.

Missing required metrics make the run invalid. Deliberate overload shedding must be separated from transport failures and incorrect successes. A process exit code alone cannot establish performance acceptance.

Trigger Coverage

The load-system and performance-regression workflows still list docs/04-operations/performance-and-load.md in their path filters. That path is not present in the current documentation tree. Changes to the active pages under docs/bijux-atlas-ops/load/ therefore do not trigger those workflows by that documentation rule.

Treat this as a coverage gap. Manually dispatch the relevant workflow when a documentation change also alters the declared load or regression contract. When workflow maintenance is in scope, replace obsolete filters with the active owned paths and verify the changed-file selection.

The ingest benchmark workflow is pull-request and manual only. The query benchmark workflow runs on pull requests and pushes to main. This difference is scheduling policy, not evidence that one benchmark family is more stable.

Changing Performance Contracts

Keep these changes separate in review whenever possible:

Change Required review evidence
benchmark implementation buildability plus measured before-and-after result
workload or query pack new workload identity and baseline comparability decision
absolute threshold user-visible service rationale and representative distributions
regression threshold historical false-positive and false-negative analysis
approved baseline raw repetitions, environment receipt, prior comparison, and approval
CI trigger or lane changed-file coverage and proof that the intended commands execute

Never refresh a baseline or weaken a threshold merely because a candidate failed. First determine whether the product regressed, the environment changed, or the measurement is invalid.

Continue with Scenario Registry, Baseline Management, and Benchmark CI.