Skip to content

gate-17 reports 'FAIL — 0 pass-through method(s)' when python3 dies with 'Argument list too long' — the crash IS the full-tree measurement #245

Description

@rubenvdlinde

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

  1. 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.

  2. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions