a5b52047 ("perf(SPEC-DSPARK): deep dive -- the drafter is not the gap, the verify step is") is on main and fails scripts/check-role-discipline.py standalone:
$ python3 scripts/check-role-discipline.py --commit a5b52047
ERROR: a5b52047: repository change (src/vllm/v1/worker/gpu/runner.cpp,
src/vllm/v1/worker/gpu/spec_decode/dspark/speculator.cpp) reached main without
arriving on a task branch. Work happens in its own worktree on a `row/<ID>`
branch and lands through a reviewed PR or an authorized local merge naming that
branch; never directly on the shared checkout
git log -1 --format='%P' a5b52047 gives a single parent, c9924566 (the merge of #211), so it sits directly on main's first-parent line rather than arriving through a row/* merge. Two product src/ files, both real feature code.
Why this is worth a row rather than a shrug
It is latent until someone merges main forward. Found while landing #242: that branch forward-merged origin/main twice, and the second merge went RED, attributing these two files to my merge commit. The violation is a5b52047's, but the cost lands on the next unrelated branch that integrates. I worked around it by cherry-picking onto current main instead of merging, which drops the merge commit and reads green. That workaround is not general, and nobody should have to discover it.
The waiver route does not exist here
Worth recording, because it is the obvious first idea: check-role-discipline.py does not consult .agents/waivers.csv. Its imports are argparse, re, subprocess, sys, pathlib and nothing else. Only three checkers load waivers:
$ grep -ln 'waivers' scripts/check-*.py
scripts/check-commit-trailers.py
scripts/check-prompt-contract.py
scripts/check-pr-size.py
So a waiver row for this would parse, sit in the CSV, and change nothing, while making a red gate look like an authorized exception. Not written for that reason.
Options
- Re-land
a5b52047 through a row/* branch. Correct, but rewrites published main with several sessions active, and main moved four times in the ~1h I was working. Risky.
- Make
check-role-discipline waiver-aware, consistent with the other three checkers, then waive this commit. This is a checker semantics change, so per AGENTS.md it needs a spec, a red-before test or mutation, and green-after evidence. Additive, not a weakening.
- Accept and document that forward-merging
main can inherit this red, with the cherry-pick workaround written down.
(2) looks like the honest general fix: the waiver mechanism exists precisely for "visible debt", and this checker is currently the one enforcement path with no way to record a sanctioned exception.
Prevention
The direct-to-main path that produced this is the thing to close. Whatever session pushed a5b52047 had the access to do it; the checker only notices afterwards, and only when someone merges forward.
a5b52047("perf(SPEC-DSPARK): deep dive -- the drafter is not the gap, the verify step is") is onmainand failsscripts/check-role-discipline.pystandalone:git log -1 --format='%P' a5b52047gives a single parent,c9924566(the merge of #211), so it sits directly on main's first-parent line rather than arriving through arow/*merge. Two productsrc/files, both real feature code.Why this is worth a row rather than a shrug
It is latent until someone merges
mainforward. Found while landing #242: that branch forward-mergedorigin/maintwice, and the second merge went RED, attributing these two files to my merge commit. The violation isa5b52047's, but the cost lands on the next unrelated branch that integrates. I worked around it by cherry-picking onto currentmaininstead of merging, which drops the merge commit and reads green. That workaround is not general, and nobody should have to discover it.The waiver route does not exist here
Worth recording, because it is the obvious first idea:
check-role-discipline.pydoes not consult.agents/waivers.csv. Its imports areargparse,re,subprocess,sys,pathliband nothing else. Only three checkers load waivers:So a waiver row for this would parse, sit in the CSV, and change nothing, while making a red gate look like an authorized exception. Not written for that reason.
Options
a5b52047through arow/*branch. Correct, but rewrites publishedmainwith several sessions active, andmainmoved four times in the ~1h I was working. Risky.check-role-disciplinewaiver-aware, consistent with the other three checkers, then waive this commit. This is a checker semantics change, so per AGENTS.md it needs a spec, a red-before test or mutation, and green-after evidence. Additive, not a weakening.maincan inherit this red, with the cherry-pick workaround written down.(2) looks like the honest general fix: the waiver mechanism exists precisely for "visible debt", and this checker is currently the one enforcement path with no way to record a sanctioned exception.
Prevention
The direct-to-main path that produced this is the thing to close. Whatever session pushed
a5b52047had the access to do it; the checker only notices afterwards, and only when someone merges forward.