Expand description
2026-09-26: What a PR owes: the gates its changed paths invalidate
(by_path) united with the gates its recorded intent classifications
imply (by_intent).
pr_taxonomy::validate refuses any _benches id outside
super::coverage::REQUIRED, so the intent half names only required
gates. The intent half matters where paths invalidate nothing: paths off
PERF_PATHS (docker/, docs/, scripts/, bench/), BENCH.toml
files, and crates/bench/src/gate files outside BOUNDARY_FILES.
super::check::check_gates checks every gate in REQUIRED_GATES
whatever this module computes. met benchmark --pull-request-gate-check
prints the intent half after the verdicts, and it does not change the
exit code.
Every classification recorded for the PR counts, and the result is their union, so re-running the classifier can only add gates.
Owner: bench gate (intent). Invariants:
by_pathdoes not depend on the classifications or the taxonomy.required_forandreportread no files.
Structs§
- Required
Report - 2026-09-26: Both halves plus where the intent half came from.
- Required
Set - 2026-09-26: Both halves, kept apart so a report can say which half required a gate.
Enums§
- Intent
Source - 2026-09-26: Where the intent half came from. It keeps “not classified” apart from “the ledger could not be read”, which both give an empty intent half.
Functions§
- intent_
source - 2026-09-26: Read the classifications recorded for
prfrom its ledger, deduplicated. Every Category row counts, whatever itshead_sha: the row for a head is committed after that head, so a head filter would find nothing. Unioning across older heads can only add gates. - parse_
category - 2026-09-26: Parse
performance/decodeinto["performance", "decode"]. Segments are trimmed and empty ones dropped:benches_forwould stop at an empty segment and lose the benchmarks below it. - report
- 2026-09-26: Assemble the report. Only a
Recordedsource contributes intent. Reads no files: the I/O is inintent_sourceand the caller’s taxonomy load. - required_
for - 2026-09-26: Compute both halves.
categoriesis every recorded classification path; an empty slice (not classified) or an emptyrootsyields an empty intent half.