Repository navigation
[Tracking] Minimal engineering benchmarks shared by Workbench, SkillEval and SearchSpace experiments #252
Description
Current state: No initial benchmark subset, upstream reuse choice or accountable implementer is agreed; the latest activity is the 2026-10-29 review asking for three search-policy RFC revisions before that contract is delegated.
Decision needed: Which initial SearchSpace task subset, upstream reuse choices and accountable implementer to adopt, from requester Dong1017.
Next action: No assignee (help wanted); per the body, benchmark implementation is scheduled after the current SkillEval and Indexer discussions finish.
Goal
Track a minimal, reusable engineering benchmark foundation for InferRSI, organized around SearchSpace and engineering objectives, not around individual skills.
Reuse and adapt existing benchmarks wherever possible. The shared task/environment/validation packages should support:
- Workbench measurement of code/configuration candidates;
- SkillEval controlled agent comparisons for skill/knowledge PRs;
- overall harness experiments (task: measure whether InferRSI helps Claude Code and Codex optimize inference tasks #248) and optimization-search experiments (task: parallel optimization rounds with orthogonal lanes for multi-agent harnesses #249).
A benchmark measures the produced implementation. Attributing an improvement to a skill or search policy additionally requires a controlled experiment; these are separate responsibilities.
Candidate coverage, to narrow before implementation
- Operators: representative shapes/dtypes, reference correctness and numerical tolerances, latency/throughput.
- Communication: topology and message-size conditions, correctness, latency/bandwidth.
- Memory: representative workloads, peak allocation/reservation definitions, capacity/OOM boundaries, with correctness and performance constraints.
- Further SearchSpace slices only when justified by an actual campaign or accepted requirement.
These are coverage directions, not a commitment to build every category or hardware combination in the first delivery. No per-skill large question bank or universal aggregate score is required.
Minimal shared contract to discuss
For each selected task: pinned upstream source/license, workload and allowed search scope, environment/device requirements, baseline/reference implementation, independent validation commands, metric units and timing boundaries, repeatability checks, and explicit unsupported/missing coverage.
Keep task/grader versions fixed within a comparison. Reuse existing runners and evidence mechanisms rather than introduce another execution platform. CPU/software checks do not establish GPU/NPU correctness or performance; unavailable environments remain unverified.
Relationship to existing work
- [RFC] Benchmark selection by task for InferRSI #60 (closed): task-specific benchmark selection research, especially model/serving workloads. Reuse its source report; this tracker concerns the shared minimal engineering benchmark delivery.
- [RFC] Iteration Campaign Plan: one table for model, hardware, goal, search plan and test plan #30 and [RFC] Hardware-aware optimization goals throughout the RSI workflow #143: campaign plans, hardware-aware goals and constraints.
- [Tracking] SearchSpace distillation coverage and knowledge consolidation #91: SearchSpace knowledge coverage, not benchmark execution coverage.
- Skill Eval v1.1: automated evaluation for skill additions and updates #88: SkillEval comparison/reporting workflow; reference supplement. Benchmark construction remains separable from SkillEval implementation.
- task: measure whether InferRSI helps Claude Code and Codex optimize inference tasks #248: overall agent benefit experiment; task: parallel optimization rounds with orthogonal lanes for multi-agent harnesses #249: parallel candidate-search scheduling. Neither alone supplies this shared benchmark foundation.
Initial reuse candidates include KernelBench, BackendBench, existing framework tests/benchmarks, and applicable task-package practices from SkillsBench. Listing a source is not adoption or evidence that it supports the target device.
Tracking and acceptance
- Agree a small initial SearchSpace/task subset, upstream reuse choices and accountable implementer.
- Agree the concrete task/environment/oracle interface and scoped delivery criteria before implementation.
- Deliver and validate the selected subset, retaining reproducible measurements and explicit coverage limits.
- Demonstrate that the selected shared package can be consumed by its agreed Workbench/evaluation use cases without duplicating task truth or runners.
- Record evidence-backed acceptance of the agreed subset; do not close merely because a catalog/document exists or software CI is green.
Ownership and authorization
Requested by @Dong1017 as an umbrella tracking issue. Current authorization is to track and clarify this work, not to launch implementation, claim another contributor's work, run paid models or allocate hardware. Implementer and initial subset remain unassigned. This issue does not reopen completed scopes or alter #248/#249 ownership.
Next step: retain this tracker, then finish the current SkillEval and Indexer discussions before scheduling benchmark implementation.
Activity
amy-why-3459 commentedon Oct 29, 2026
[RFC] Optimization search policy: candidate admission, cost ladder and stop contract
RunSpecmapping; phase-locked round recording; stop evaluator; negative-result ledgerevaluation.pystatistics, parallel lanes (#249), benchmark task packages (#252)RunSpec(src/inferrsi/runspec.py); AB/BA runner;assessment()short-circuit shape (src/inferrsi/harness/improvement.py); existing rejected-direction cases1. Problem
optimization-search-policyalready states a complete policy: four admission considerations, a seven-phase locked round, a six-tier cost ladder and four stop criteria. Every one of those is prose. Nothing insrc/inferrsi/reads it.The gap is visible in three concrete places:
src/inferrsi/catalog.py:127scores records by token-AND (every token must appear) and ranks by raw occurrence count. That is a precision-ordered substring index, not a recall-complete case search. The three existing rejected-direction cases are plain Markdown with no query interface.evaluation.py:36reportsrange_pct_of_medianas descriptive only and asserts"statistical_significance": "not established". S3 needs a verdict history across rounds; nothing aggregates rounds.The result: the policy is correct and unusable. An agent can read it and still re-enter a recorded dead end, because nothing makes the dead end queryable at the moment of candidate generation.
The narrow claim of this RFC: the admission, ordering and stopping decisions can be made deterministic over declared inputs and existing evidence, without synthesizing candidates and without spending compute. That is a contract problem, not a modelling problem.
2. Design principles
docs/searchspace-matrix.mdas the authoritative coverage matrix. No third matrix.unverifiedwith the cheapest check that would resolve it. No default fraction, no assumed share, no fallback threshold. This matches the existingINCONCLUSIVE > FAIL > PASSprecedence.3. Objects
3.1 Search-space cell index
Generated from
docs/searchspace-matrix.mdby extendingtools/build_skill_coverage.py(which already resolvesSEARCHSPACE = Path("docs/searchspace-matrix.md")), never hand-authored. The matrix remains authoritative; the index is a derived artifact with a--checkmode that fails on drift.{ "schema_version": 1, "id": "accelerator.kv.admission", "layer": "accelerator", "stages": ["diagnose", "configure", "verify"], "target_classes": ["serving", "kv-cache"], "skill_ids": ["diagnose-vllm-admission-pressure"], "evidence_pins": [{"source": "<repo>", "commit": "<40-hex>"}], "maturity": "source_candidate", "plane_hint": "model", "pruning_claims": [ "Queue length and KV usage do not establish allocation pressure", "stats are gated and incomplete" ], "rejected_direction_refs": ["casebook/cases/qwen-ascend-rejected-directions.md"] }pruning_claimsis the load-bearing field. The matrix's Cases / Experience column currently holds falsifying statements that only a human can read — "Shape agreement is not conversion", "CPU bypasses accelerator capacity and segmentation gates", "matching total tokens does not preserve peer rows". Those are pre-registered counter-claims. Surfacing them as queryable constraints is the cheapest available reduction of the candidate space, and it costs no measurement.maturitycarries the existing key unchanged (covered/partial/gap);source_candidateandnot_runremain distinct states and neither becomes an admissibility signal.3.2 Candidate card
The machine form of row 4. Field names are the campaign plan's; this adds typing, not vocabulary.
{ "schema_version": 1, "id": "D-01", "plane": "model", "cell": "accelerator.kv.admission", "hypothesis": "If admission accounting charges <mechanism>, <metric> improves because <causal step>", "mechanism_class": "ownership", "risk_class": "lossless-exact", "cost_tier": "profile-run", "stage": {"name": "<stage>", "exposed_share_pct": null, "share_source": "unmeasured"}, "headroom": {"removable_ms": null, "assumptions": [], "uncertainty_ms": null}, "diagnostic": {"cost_tier": "profile-run", "kill_criterion": "<observable>"}, "prior_art": [], "negative_record": [], "falsification": { "metric_key": "<dotted.positive.key>", "direction": "minimize", "criterion": "<the observation that would reject this hypothesis>" }, "kill_criterion": "<immutable once run>", "status": "planned" }Validation rules (all reject, none warn):
falsification.criterionnonempty, andfalsification.metric_keyresolves to a positive finite number under the existing metric contract (model/protocols/metrics.py). A candidate that no single metric could reject is not a hypothesis; it is a wish.kill_criterionnonempty and not equal to the falsification criterion.plane∈harness | model | infra, one per candidate (AGENTS.md RSI contract).cellmust resolve in the generated index;mechanism_classmust be one of the seven declared tags.stage.exposed_share_pctmay benullonly whenstage.share_source == "unmeasured"and adiagnosticis attached.3.3 Admission gates
Ordered cheapest-first. Each returns
admit | refuse | admit_conditional | unverified, with a reason and, where applicable, the cheapest resolving action.G0 — Amdahl plausibility.
residual_targetis campaign-declared, never a tree default. This is an upper bound on what the stage could yield, not a prediction, and it is the cheapest way to discard a candidate before any compute is spent. Missing share →unverifiedwithrequired_action: "run the cheapest diagnostic in this cell"(typically a profile run, which is a measurement, not a comparison).G1 — Mechanism class alignment. The declared
mechanism_classmust be reachable from the measured bottleneck class. A residency candidate against a compute-bound stage is refused withreason: class_mismatch. The five/six families the policy names — ownership, work elimination, residency, algorithm, configuration, fusion/operator, graph/launch, parallelism/communication, precision/approximation — are the declared tag set from row 4 and are not extended here.G2 — Prior art and negative record. Two lookups, deliberately different:
(cell, mechanism_class, backend, device, model, workload, evidence_level).On a negative-record hit the gate returns
admit_conditional, neverrefuse. The card must then name:quality_rejection,no_demonstrated_gain,resource_failure,confounded_control,unintegrated_lead,analytical_rejection;A keyword match is a lead, not a causal diagnosis and not an automatic veto. A different implementation failing does not ban a mechanism family.
G3 — Cost tier assignment. The cheapest tier that can separate the hypothesis from local noise, declared before measurement. A tier above the minimum needs a stated reason. Escalation is one-way and only on a positive result at the current tier.
3.4 Cost ladder →
RunSpecThe policy's six tiers map onto
RunSpecknobs. The mapping is shape, not numbers; tier presets are campaign-scoped in rows 4 and 6.RunSpecshapestatic/configmicrobenchmetric_key, single scenario, minimalrepetitionsprofile-runexposed_sharefor G0scenario@c1RunSpec, one declared regimemulti-regimeRunSpec, declared regime setfull-cohortTwo hard rules:
scenario@c1PASS is not an acceptance PASS, and no promotion rule may treat it as one. This mirrors the CRISP adaptation boundary already recorded in the policy: screening rejects, it does not conclude.3.5 Phase-locked round
Seven phases, with the existing runner as P5's executor. The lock is enforced on the record:
A ledger entry is qualifying only if it records P1 inputs (the cell and the negative-record lookup result), a P2 card, a P4 outcome, and a P5/P6 result. An entry missing P4 is recorded as
unqualifiedand cannot be cited by a stop decision or a promotion.This is weaker than a hook by design: it cannot stop an agent from running a benchmark out of order, it can only refuse to treat the result as evidence. Given the repo's non-autonomous posture, that is the correct strength.
3.6 Stop evaluator
Deterministic over the ledger. Each criterion yields
{decision: stop | continue | unverified, reason, required_action}.uncertaintyunverified— never infer headroom from a rooflineunverifiedinconclusivefor onehypothesishashcontinuewithrequired_action: "repair the measurement protocol or change hypothesis"stopwithrequired_action: "escalate abstraction level"S1 must not be satisfied by proximity to a roofline. The existing policy says this explicitly and it matters: changing the algorithm changes both work and traffic, so proximity to the old roof does not rule out improvement. The evaluator encodes that by requiring a measured removable quantity, and returning
unverifiedotherwise.S3's repetition count is campaign-declared. No tree default.
3.7 Negative-result ledger
One record per terminal round outcome, including
worseandinconclusive. This is the compounding asset: the repository already keeps three rejected-direction cases by hand, and each one exists because someone paid to learn it.{ "schema_version": 1, "candidate_id": "D-01", "cell": "accelerator.kv.admission", "mechanism_class": "ownership", "context": { "repo": "<repo>", "revision": "<40-hex>", "backend": "ascend", "device": "<exact SKU>", "model": "<model>", "workload": "<id>" }, "evidence_level": "scenario@c1", "hypothesis": "<as tested>", "metric_key": "<key>", "verdict": "FAIL", "rejection_class": "no_demonstrated_gain", "observed": "<measured values and uncertainty>", "constraint_derived": "<the search constraint this failure establishes>", "reopen_condition": "<what changed would justify retrying>" }constraint_derivedis mandatory. A negative result that establishes no constraint has not narrowed the space and cannot satisfy S4.4. Relationship to existing work
assessment()short-circuit ordering (incomplete_evidence → unknown_usage → quality_floor → regression_limit → no_improvement) is the precedent for §3.3's ordering, not a component to reuse: it scores skill-text edits, not inference candidates.optimization-search-policyskill5. Dependency and ordering
The gates can land first; multi-round search cannot.
Two preconditions for using this contract across more than one round:
harness/evaluation.py:36compares two independent medians and discards the pairing that the AB/BA schedule already established. Over repeated rounds, selecting the best of N unvalidated comparisons is selection bias, not tuning, and it will deposit noise into the ledger as if it were a constraint. The minimum repair — paired difference plus a resolvability gate that refusesPASSwhen baseline spread is on the order ofmin_improvement_pct— is a change toevaluation.py, not to this RFC, and is not proposed here as a slice.unverifiedfor everything and the gates reduce to a schema validator.So the slices below are ordered accordingly, and no slice depends on statistical work.
I am not claiming that fixing resolution is sufficient. It is a precondition for round count > 1, and stating it here is cheaper than discovering it after a campaign.
6. Delivery slices
--checkdrift gateunverifiedpathsRunSpecmapping + escalation refusalEvery slice is model-free and hardware-free. No slice spends compute, allocates a device, calls a paid model, or produces a measured claim.
7. Acceptance criteria for this RFC
--checkfails on an unreconciled edit. The matrix remains the only authoritative source; the index cannot be edited by hand.nullstage share with no diagnostic attached.admit_conditional, neverrefuse, and a card withoutwhat changedfails to validate.scenario@c1result cannot satisfy a promotion rule.unqualifiedand is rejected as input to S3/S4.unverified— notcontinue— when headroom inputs are absent.constraint_derivedcannot satisfy S4.status: candidateor a schema.8. What this RFC does not authorize
evaluation.py, the runner, the AB/BA schedule or any frozen row.residual_targetand S3's N are campaign-scoped in rows 4 and 6.9. Open questions
src/inferrsi/data/as package data, or stay atools/artifact? Package data would letknowledge searchjoin on cells; it would also create a second shipped copy of the matrix.catalog.py:127is precision-ordered by construction. Separate paths risk the two disagreeing.plausible_removal(mechanism_class)bounded without inventing numbers? Options: campaign-declared per class, derived only from recorded positive results in the ledger, or leftunverifieduntil a campaign declares it. The third is honest and the least useful; the second cannot bootstrap on an empty ledger.unqualifiedround still write a negative ledger entry? It carries information but fails the P4 precondition. Recording it pollutes S4; discarding it loses a real dead end.Proposed for review. Comment on scope and slice boundaries before any implementation claim. No part of this proposes reopening #248, #249 or #252.
Dong1017 commentedon Oct 29, 2026
Issue/design review of the body updated 2026-10-29T11:14:20Z and the optimization-search-policy RFC, against main
7d1d82f55cda89842bd23ee2da91b521ee60eb08. Source/document inspection only; no benchmark, model, device or workflow execution.The shared task/environment/oracle foundation remains a sound bounded goal. The RFC proposes a separate search-policy contract; it should not silently become a prerequisite or expand this tracker's benchmark acceptance. Please revise these three design points before implementing that contract:
P2 — G0 rejects useful incremental candidates (§3.3).
upper_bound < residual_targetcompares one candidate's ceiling with the entire remaining campaign target. In a hypothetical campaign targeting a 10% latency reduction, two independent changes could each remove 6% of the original E2E time and jointly meet the goal, yet G0 refuses both before either runs. Preserve candidate contribution/composition, and reserve the whole-target impossibility test for the combined remaining opportunity. The existing search policy applies its campaign ceiling to all remaining stages together; the campaign template also retains conditional headroom, overlap, queueing, capacity and uncertainty. An unknown or inapplicable bound should remain unverified.P2 — Static/profile tiers cannot be represented by RunSpec presets alone (§3.4–3.5).
static/configsupplies only validation, andprofile-runexplicitly has no A/B pair. Current RunSpec.validate() requires nonempty baseline and candidate commands, and the runner executes paired measurements before optional validation. Define diagnostic/correctness records and their transitions/qualification separately, keeping RunSpec for actual comparisons. Do not fabricate a baseline or performance verdict to pass validation. Clarify how a no-verdict diagnostic can advance under the positive-only escalation rule without pretending it completed P5/P6 comparison.P2 — S4's per-cell terminal-entry test does not establish search exhaustion (§3.6–3.7). One matrix cell can contain several mechanisms and candidates. One failed candidate in each cell still leaves other candidates untried; G2 itself correctly says a negative hit is conditional evidence, not a veto. Scope exhaustion to an explicitly declared, versioned candidate/hypothesis set and matching context, consistent with the existing candidate-based stopping rule. Retain all terminal records, including correctness failures and inconclusive runs, but keep retention separate from eligibility to exclude a candidate or satisfy S4; inconclusive evidence need not establish a causal search constraint.
Next: @Dong1017 should retain #252's small shared-task scope, identify an accountable owner for the proposed policy contract, and settle these admission/execution/stop semantics before delegating it. Implementation owner and initial benchmark subset remain unassigned; neither this review nor the RFC demonstrates search benefit, accepts a benchmark delivery, or authorizes execution.