fix: an allowlist is authoritative — no_run.yaml filters discovery only - #262
Merged
Merged
Conversation
#261 shipped the opposite rule ("no_run wins over the list"). Measured against the real workspaces before writing a single delegator, that rule would have SILENTLY DROPPED 13 SCRIPTS from smoke coverage: autogalaxy_workspace_test 9 autolens_workspace_test 2 autofit_workspace 1 autolens_workspace 1 all of which run in smoke today. The vendored runners read only smoke_tests.txt and have never opened no_run.yaml, so honouring it would have been a coverage regression disguised as a refactor — exactly what the task's "no repo loses behaviour it has today" criterion forbids. The rule was wrong because it conflated two policies for two different runs. no_run.yaml governs the release mega-run and notebook generation; an allowlist governs the PR smoke gate. A script legitimately appears in both — excluded from the full build, required in smoke. So with --list the allowlist is the policy and no_run.yaml is not consulted; without one, discovery is filtered by no_run.yaml exactly as before. Second fix, same cause: a missing config/build/no_run.yaml is no longer fatal under --list. autocti_workspace_test has none, and the autohands-level fallback path does not exist either, so both run_python.py and run.py crashed with FileNotFoundError before running anything — once at load and again in parse_no_run_reasons under --report-dir. Discovery still requires the file (a run with no exclusion policy is not a safe default) and now says why. Tests: the two that pinned the old rule are replaced by ones pinning the new, each carrying the measured 13-script rationale, plus a test that discovery is untouched. Suite 389 passed, 5 skipped. Verified end-to-end that a script named by BOTH the list and no_run.yaml now runs, and that the autocti shape (no no_run.yaml at all) completes and reports. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UpSFum81Jeq9KZ9wdKtaeZ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Corrects a rule #261 got wrong. Found by measuring the real workspaces before
writing a single delegator, which is exactly what that measurement was for.
#261's rule would have silently dropped 13 scripts from smoke coverage.
no_run.yamlautogalaxy_workspace_testautolens_workspace_testautofit_workspaceautolens_workspaceEvery one of them runs in smoke today. The vendored runners read only
smoke_tests.txtand have never openedno_run.yaml, so honouring it duringthe collapse would have been a coverage regression disguised as a refactor —
precisely what #260's "no repo loses behaviour it has today" criterion forbids.
Why the rule was wrong
It conflated two policies for two different runs:
no_run.yaml→ the release mega-run and notebook generationsmoke_tests.txt/smoke_notebooks.txt→ the PR smoke gateA script legitimately appears in both — excluded from the full build, required
in smoke. "The more specific statement of intent" reasoning in #261 assumed they
were competing statements about the same run. They are not.
So: with
--list, the allowlist is the policy andno_run.yamlis notconsulted. Without one, discovery is filtered by
no_run.yamlexactly asbefore — that path is untouched and pinned by a new test.
Second fix, same root cause
A missing
config/build/no_run.yamlis no longer fatal under--list.autocti_workspace_testhas none, and the autohands-level fallback path doesnot exist either, so both runners crashed with
FileNotFoundErrorbeforerunning anything — once at module load, and again in
parse_no_run_reasonsunder
--report-dir. That would have taken out one of the four phase-1 repos onits first CI run.
Discovery still requires the file (a run with no exclusion policy is not a safe
default), and the error now says what to do about it.
Test Plan
pytest tests/ -q→ 389 passed, 5 skipped, 0 failedone, each carrying the measured 13-script rationale
no_run.yamlstill skips, with reasonno_run.yamlnow runs;the
autocti_workspace_testshape (nono_run.yamlat all) completes andwrites its report; discovery without the file still errors clearly
One of the new tests caught a real bug in this very fix — an
if allowlist: passbranch that swallowed the script instead of falling through to the run branch.
Restructured to
if not files_are_allowlist and should_skip(...).Generated by the PyAutoLabs agent workflow.
Generated by Claude Code