feat: efficacy-benchmark tracer bullet (task 0004) #4
Reference in New Issue
Block a user
Delete Branch "task-0004-efficacy-benchmark-tracer-bullet"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Task:
.claude/tasks/0004-efficacy-benchmark-tracer-bullet.mdSummary
The efficacy-benchmark tracer bullet — the thinnest complete path that benchmarks a skill against a no-skill baseline and renders an HTML report.
tests/convention — a top-level tree mirroringskills/by full path; case directories hold acase.md(contract inCASE-FORMAT.md) and an optional committed fixture, kept outsideskills/so they never get packaged.benchmark-skill— an auto-discovered, packaged, non-model-invocable runner (disable-model-invocation: true), invoked/benchmark-skill <name>. It validates the target'stests/tree, then orchestrates a force-invoked new-skill arm and a skill-absent baseline arm plus a blind per-trial judge as in-session subagents via the workflow mechanism.core/benchmark_core.py) — a pure transform over the collected run data: sums per-arm transcript usage into raw/cost-equivalent/imputed-cost/turns, collapses each trial to WIN/TIE/LOSS (tie = non-win), applies the efficacy pass rule (wins ≥ 3, losses ≤ 1), flags losses, and renders a self-contained HTML report with the Efficacy badge, a two-row cost table with the cache-overhead footnote, and cases in stable authored order. Parameterized over arms and comparisons; two-arm here.checks/benchmark-core.nixfeeds committed fixtures to the core and asserts the metrics, verdicts, and report with no LLM; wired intoflake.nix.tests/tree foraxi-reviewplus a live 5-trial/benchmark-skill axi-reviewrun that produced its efficacy report end to end.Deviations
nix shell nixpkgs#python3on this host, which lacks a globalpython3); it cleanly owns the HTML/JSON work the shell idiom would fight.AXI-PRINCIPLES.mdrubric from the repo on disk, so it was not a clean counterfactual. Filesystem isolation of the baseline arm is a follow-up; the core, pass rule, and skill design are unaffected.agent()surface); the per-skill temperature and zero-override remain documented knobs.Review
Risk
Overall: Low
.gitignoreand oneflake.nixentry, no existing callers touched.checks/benchmark-core.nixagainst a committed fixture.shruns only against local fixtures in dev tooling.Unaddressed findings
Standards
CASE-FORMAT.mdall-caps name (soft naming call) — kept: matches the repo's existing skill-companion-doc convention (AXI-PRINCIPLES.md,REPORT-FORMAT.md), which overrides the baseline.rulefield and arms/comparisons parameterization are unused by this two-arm slice — kept: the spec mandates "structured parameterized over the number of arms and the comparisons from the start"; the regression rule lands in task 0005.usageblocks across fixture trials — kept: inert committed test data, not logic.Spec
case.md" (spec line 60) — no change: parsing lives in the runner prose, and the pure-transform split matches spec lines 57 and 82 and is the better design.