Summary
gate-17 (redundant-controller) passes its file list to python3 as argv. On a whole-tree scope that exceeds ARG_MAX, execve fails, and the gate reports:
[gate-17] redundant-controller: FAIL — 0 pass-through method(s)
A FAIL with a finding count of zero. The log contains no findings at all — only:
$ cat hydra-gate-redundant-controller.log
run-hydra-gates.sh: line 1731: /usr/bin/python3: Argument list too long
This is the mirror of #147: there, a missing helper reported PASS; here, a crashed helper reports FAIL. Both state a verdict the run did not earn. The FAIL direction is less dangerous but more corrosive — it puts a phantom red next to a real number, and anyone burning it down finds nothing to fix.
Measured
nldesign, run-hydra-gates.sh --scope-to-diff --base <root commit>:
[hydra-gates] SCOPE-FILE-COUNT: 3611
[gate-17] redundant-controller: FAIL — 0 pass-through method(s)
Same tree, same checkers, diff-scoped normally (a handful of files): gate-17 PASS.
The failure is triggered by the scope size, not by the code. That is the sharp edge: gate-17 breaks precisely when you try to measure the whole tree, which is the one measurement that tells you your real debt. Every fleet-wide gate-17 number gathered this way is a phantom.
Two defects, worth separating
-
argv overflow. python3 helper.py <3611 paths> cannot work at that size on Linux (ARG_MAX ≈ 2 MB including environment). Pass the list on stdin, or via a temp file, or xargs-batch it.
-
A non-zero exit with zero findings is reported as findings. Whatever the cause, helper exited non-zero AND wrote no findings must be distinguishable from helper found N problems. The existing _fail ... "audit COULD NOT RUN" wording in gate-4 is the right shape:
[gate-17] redundant-controller: FAIL — CHECK DID NOT RUN (python3: Argument list too long) — NOT a finding count
Not a pass, not a silent zero, and it cannot be mistaken for debt.
Suggested audit
Any gate that shells out with an expanded file list has the same ceiling. Worth grepping the runner for "${_files[@]}" / $(find ...) passed as argv and converting them to stdin, then re-running one repo at root scope to confirm the counts change.
Related: #147 (missing helper reported PASS), #242 (gates 19/25/63 invisible to --require-full-coverage), #243 (set -e leak aborts the run mid-way), #244 (gate-19 "never runs" false positives).
Summary
gate-17 (
redundant-controller) passes its file list topython3as argv. On a whole-tree scope that exceedsARG_MAX,execvefails, and the gate reports:A FAIL with a finding count of zero. The log contains no findings at all — only:
This is the mirror of #147: there, a missing helper reported PASS; here, a crashed helper reports FAIL. Both state a verdict the run did not earn. The FAIL direction is less dangerous but more corrosive — it puts a phantom red next to a real number, and anyone burning it down finds nothing to fix.
Measured
nldesign,
run-hydra-gates.sh --scope-to-diff --base <root commit>:Same tree, same checkers, diff-scoped normally (a handful of files): gate-17 PASS.
The failure is triggered by the scope size, not by the code. That is the sharp edge: gate-17 breaks precisely when you try to measure the whole tree, which is the one measurement that tells you your real debt. Every fleet-wide gate-17 number gathered this way is a phantom.
Two defects, worth separating
argvoverflow.python3 helper.py <3611 paths>cannot work at that size on Linux (ARG_MAX≈ 2 MB including environment). Pass the list on stdin, or via a temp file, orxargs-batch it.A non-zero exit with zero findings is reported as findings. Whatever the cause,
helper exited non-zero AND wrote no findingsmust be distinguishable fromhelper found N problems. The existing_fail ... "audit COULD NOT RUN"wording in gate-4 is the right shape:Not a pass, not a silent zero, and it cannot be mistaken for debt.
Suggested audit
Any gate that shells out with an expanded file list has the same ceiling. Worth grepping the runner for
"${_files[@]}"/$(find ...)passed as argv and converting them to stdin, then re-running one repo at root scope to confirm the counts change.Related: #147 (missing helper reported PASS), #242 (gates 19/25/63 invisible to
--require-full-coverage), #243 (set -eleak aborts the run mid-way), #244 (gate-19 "never runs" false positives).