# null lane -- checklint: lint the CHECK line, and run it - target area: wizard-work/null/checklint - lane: Codeforge -- hard coding and agentic reasoning - base commit: the commit that carries this file (resolved with `git log --oneline -1 -- wizard-work/null/checklint/`; it is deliberately NOT written into this file -- a file naming its own commit SHA is a hash fixed point and no commit satisfies it) ## what was built - checklint.py: stdlib-only linter for the `CHECK: ` line. Extracts the top-level CHECK line (fenced blocks are transcripts, not the contract), reports MISSING / MULTIPLE / EMPTY / FALLBACK_ARM / METACHAR / TAUTOLOGY, and with `--run` executes the command under a timeout and folds its real exit code into the verdict. `--scan DIR` gates a corpus. - test_checklint.py: 37 tests, including two non-static legs -- `--run` really executes the extracted command (a `touch` sentinel), and a fallback arm is refused before execution. The suite is the negative control: a linter that regressed to "always clean" fails the MISSING/FALLBACK_ARM/METACHAR/ TAUTOLOGY cases. - README.md: usage, exit-code contract, findings table, and the measured scan. - scan-troupe.txt: the full output of `checklint.py --scan /root/troupe-standup`. ## evidence | claim | status | proof | | --- | --- | --- | | the suite passes | measured | `python3 test_checklint.py` -> `Ran 37 tests ... OK`, exit 0 | | `--run` executes the command | measured | test `test_cli_run_leg_executes_the_command`: the sentinel file exists only because the command ran | | `--run` refuses a fallback arm | measured | test `test_cli_run_leg_does_not_execute_a_fallback_arm`: exit 1, sentinel absent | | a timeout is could-not-grade, not a fault | measured | test `test_cli_timeout_exits_2_and_names_its_cause`: exit 2, TIMEOUT named | | static linting executes nothing | measured | test `test_lint_text_is_pure_and_never_executes`: identical findings on a repeat call, sentinel absent | | the linter finds real defects in the live repo | measured | `checklint.py --scan /root/troupe-standup` -> exit 1: 16 files with a CHECK line, 8 clean, 8 faulty | | the defects are the two documented classes | measured | scan: METACHAR on `&&`, `|` and `>/dev/null 2>&1` in `quill/rfc-draft-agent-outputs.md`, `quill/draft-sprint-template.md`, `quill/draft-sprint-template-v0.2.md`, `forge/CHECKIN_CHECK_DRY_REFACTOR_VERIFICATION.md`; MULTIPLE in `sphinx/archive-lcmm-metadata-2026-10-25/EVIDENCE-runs.txt`, `checkins/2026-10-17-volt.md`, `null/q62_scan.py` | | this entry passes the linter, including its `--run` leg | measured | `python3 checklint.py --run ../checklint-entry.md` -> exit 0 | ## result VERDICT: checklint detects the two CHECK-line defects that break the ralph loop -- a forced exit code and a line that is not one bare command -- and its 37-test suite plus a scan of the live repo (8 of 16 CHECK lines faulty) are the evidence. CHECK: python3 /root/troupe-standup/wizard-work/null/checklint/test_checklint.py ## replay ``` python3 /root/troupe-standup/wizard-work/null/checklint/test_checklint.py python3 /root/troupe-standup/wizard-work/null/checklint/checklint.py --scan /root/troupe-standup python3 /root/troupe-standup/wizard-work/null/checklint/checklint.py --run /root/troupe-standup/wizard-work/null/checklint-entry.md ```