◐ Off-By-One · answer catalog

clean-machine-native-suite-runner-missing-attribution

2 answer(s)bashpython3bashpython3

clean-machine-native-suite-runner-missing-attribution

📦 Source in repository (JSON)

Answer 1

I diagnosed the incident and wrote the complete, self-contained solution to ~/QA-BUNKER-26-solution.md.

What it is

Root cause: In ~/.hermes/scripts/bunker-qa.sh the detection ladder and the venv+pytest provisioning bootstrap are two independent "is this a Python repo?" conditions. QA-BUNKER-24 extended detection to pytest.ini/conftest.py, but the bootstrap still armed only under pyproject.toml. A pytest.ini-only repo is therefore selected for python3 -m pytest but never gets a runner — on a fresh JIT agent (stdlib-only python3, venv bin not on PATH) every suite leg dies No module named pytest. Harness row QA-BUNKER-26; not a product row.

Exact fix (generated-remote bootstrap guard):

-# python venv + pytest bootstrap (arms only for pyproject.toml repos)
-if [ -f pyproject.toml ]; then
+# QA-BUNKER-26: arm for every shape the detection ladder selects.
+if [ -f pyproject.toml ] || [ -f pytest.ini ] || [ -f conftest.py ] || [ -f tests/conftest.py ]; then

with the existing fresh-creation + best-effort top-up (|| true) body unchanged, plus a recommended shared python_repo_shape() predicate so the two halves can never drift again.

Verification I actually ran (in the markdown, with real output): - Local control: auger py_compile OK, ruff clean, 218 tests collected. - A self-contained fresh-agent repro that builds a real stdlib-only venv: pre-fix rc=1 → UNVERIFIED (No module named pytest), post-fix rc=0 → OK (1 passed). - Classifier battery and generated-bytes regression test, plus the fresh-agent acceptance run.

Grade rule is preserved throughout: runner-missing native legs are UNVERIFIED ("suite NEVER RAN, no repo signal"), never FAIL, never OK.

Evidence & signatures

# Evidence
- Problem class: clean-machine-native-suite-runner-missing-attribution
- Model: openrouter/deepseek/deepseek-v4.1-flash
- Solved: 2026-09-27T05:13:00.334Z
- Verification: solution produced by pi in sandbox; see signatures.json
{"description": "Symptom: a QA battery cell (chaos-resource or the ci-pass native leg) on a fresh JIT clean machine shows the only suite output as 'No module named pytest' (or another runner-missing signature) while the repo is green on the dev box. Diagnosis procedure: (1) Read the per-cell log on the agent (res.log / native.log over the per-agent ssh key) BEFORE destroying the agent - the evidence detail truncates; the log names the exact runner and rc. (2) Run the local control: full unfiltered suite at HEAD on the dev box; rc=0 means clean-machine environment class, not repo brittleness. (3) Check the harness runner-provisioning chain: the venv+pytest bootstrap in bunker-qa.sh arms only under pyproject.toml, so pytest.ini/conftest.py-only repos (the detection-ladder branch added for QA-BUNKER-24) get selected for pytest but never provisioned - the runner is missing by construction, not by accident. (4) Grade: runner-missing native legs are UNVERIFIED ('suite NEVER RAN, no repo signal'), never FAIL and never OK; the fix belongs to the harness (extend the bootstrap trigger to the same condition the detection ladder added), file a harness row, do NOT file a product row. Root cause this instance: detection extended to a new repo shape without adding the runner provisioning to the same bootstrap in the same commit. Fix shape: extend the venv+pytest bootstrap trigger to the same pytest.ini/conftest.py condition the detection ladder added (fresh creation plus best-effort top-up). Verification: local control green at HEAD; agent log names the missing runner; harness row QA-BUNKER-26 filed with the repro.", "environment": "bunker-qa.sh JIT battery agent (bunker-mvp); pytest.ini-only Python repo (no pyproject.toml/setup.py/Makefile/package.json/go.mod); agent python3 stdlib-only; suite legs run under a 3G memory cap with the venv bin not on PATH", "language": "bash", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "clean-machine-native-suite-runner-missing-attribution", "provider": "openrouter", "solved_at": "2026-09-27T05:13:00.334Z", "version": ""}

Answer 2

I diagnosed the incident and wrote the complete, self-contained solution to ~/QA-BUNKER-26-solution.md.

What it is

Root cause: In ~/.hermes/scripts/bunker-qa.sh the detection ladder and the venv+pytest provisioning bootstrap are two independent "is this a Python repo?" conditions. QA-BUNKER-24 extended detection to pytest.ini/conftest.py, but the bootstrap still armed only under pyproject.toml. A pytest.ini-only repo is therefore selected for python3 -m pytest but never gets a runner — on a fresh JIT agent (stdlib-only python3, venv bin not on PATH) every suite leg dies No module named pytest. Harness row QA-BUNKER-26; not a product row.

Exact fix (generated-remote bootstrap guard):

-# python venv + pytest bootstrap (arms only for pyproject.toml repos)
-if [ -f pyproject.toml ]; then
+# QA-BUNKER-26: arm for every shape the detection ladder selects.
+if [ -f pyproject.toml ] || [ -f pytest.ini ] || [ -f conftest.py ] || [ -f tests/conftest.py ]; then

with the existing fresh-creation + best-effort top-up (|| true) body unchanged, plus a recommended shared python_repo_shape() predicate so the two halves can never drift again.

Verification I actually ran (in the markdown, with real output): - Local control: auger py_compile OK, ruff clean, 218 tests collected. - A self-contained fresh-agent repro that builds a real stdlib-only venv: pre-fix rc=1 → UNVERIFIED (No module named pytest), post-fix rc=0 → OK (1 passed). - Classifier battery and generated-bytes regression test, plus the fresh-agent acceptance run.

Grade rule is preserved throughout: runner-missing native legs are UNVERIFIED ("suite NEVER RAN, no repo signal"), never FAIL, never OK.

Evidence & signatures

# Evidence
- Problem class: clean-machine-native-suite-runner-missing-attribution
- Model: openrouter/deepseek/deepseek-v4.1-flash
- Solved: 2026-09-27T05:13:00.334Z
- Verification: solution produced by pi in sandbox; see signatures.json
{"description": "Symptom: a QA battery cell (chaos-resource or the ci-pass native leg) on a fresh JIT clean machine shows the only suite output as 'No module named pytest' (or another runner-missing signature) while the repo is green on the dev box. Diagnosis procedure: (1) Read the per-cell log on the agent (res.log / native.log over the per-agent ssh key) BEFORE destroying the agent - the evidence detail truncates; the log names the exact runner and rc. (2) Run the local control: full unfiltered suite at HEAD on the dev box; rc=0 means clean-machine environment class, not repo brittleness. (3) Check the harness runner-provisioning chain: the venv+pytest bootstrap in bunker-qa.sh arms only under pyproject.toml, so pytest.ini/conftest.py-only repos (the detection-ladder branch added for QA-BUNKER-24) get selected for pytest but never provisioned - the runner is missing by construction, not by accident. (4) Grade: runner-missing native legs are UNVERIFIED ('suite NEVER RAN, no repo signal'), never FAIL and never OK; the fix belongs to the harness (extend the bootstrap trigger to the same condition the detection ladder added), file a harness row, do NOT file a product row. Root cause this instance: detection extended to a new repo shape without adding the runner provisioning to the same bootstrap in the same commit. Fix shape: extend the venv+pytest bootstrap trigger to the same pytest.ini/conftest.py condition the detection ladder added (fresh creation plus best-effort top-up). Verification: local control green at HEAD; agent log names the missing runner; harness row QA-BUNKER-26 filed with the repro.", "environment": "bunker-qa.sh JIT battery agent (bunker-mvp); pytest.ini-only Python repo (no pyproject.toml/setup.py/Makefile/package.json/go.mod); agent python3 stdlib-only; suite legs run under a 3G memory cap with the venv bin not on PATH", "language": "bash", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "clean-machine-native-suite-runner-missing-attribution", "provider": "openrouter", "solved_at": "2026-09-27T05:13:00.334Z", "version": ""}
Generated from the verified corpus · MIT licensedBack to the catalog