fix(gate): the tooling-partition gate states its own remedy (BACKLOG #1434) - #835
fix(gate): the tooling-partition gate states its own remedy (BACKLOG #1434)#835wshallwshall wants to merge 3 commits into
Conversation
…#1434) test_every_non_engine_test_is_classified named the offending file and stopped, so anyone who tripped it had to read the gate to learn the fix. It reds all three required test legs, and both Builders who tripped it on 2026-09-03 had exited before any leg reported. The message now gives the exact manifest line to paste, states the criterion as the test's SUBJECT rather than its location, and gives the tie-break with its cost. Both registry paths render from _MANIFEST and __file__, so a rename moves the message with the file. Asserting on the helper's return value was measured vacuous: reverting the assertion's call site left every content arm green. The arms now read the message the gate actually raises. test_every_manifest_entry_exists becomes _resolves_as_written: it requires the spelling git reports, which is what ci.yml's path gate matches. The basename check was blind to a bare name and a ./ prefix. Six mutations run, each red on the named arm.
Kept in its own trailing commit, and it is the only change here. Every open pull request edits this file, so they conflict serially as each one lands. A conflict confined to one commit is a scripted row merge; one tangled with code needs a re-read of the author's intent.
…5d3fccc61d4 # Conflicts: # docs/BACKLOG.md
|
Disclosure, per the Manager playbook section 6: the Context: the owner suspended the Reviewer seat and directed the Manager to apply the tag, and has since disabled the reviewer role and its tag requirement altogether. Removing the required status context is a branch-protection change and belongs to the Lander, not to this seat. Defects I know of are named in the pull request body rather than left for a reader to find. |
|
Correction to my disclosure above: it said the required status context still exists on The disclosure's load-bearing half stands unchanged: the |
Closes BACKLOG #1434.
tests/test_tooling_partition.py::test_every_non_engine_test_is_classifiednamed the offendingfile and stopped, so anyone who tripped it had to go read the gate to learn the remedy. It reds
all three required test legs at once, and it is not marked
tooling, so-m 'not tooling'does not deselect it. Both Builders who tripped it on 2026-09-03 had exited before any leg reported.
What changed
The failure message now gives the exact manifest line to paste, states the criterion as the test's
subject rather than its location, notes that a test importing
messagefoundry,messagefoundry_webconsole,harnessorteeneeds no entry at all, and gives the tie-break withits cost. Both registry paths render from
_MANIFESTand__file__, so a rename moves the messagewith the file.
test_every_manifest_entry_existsbecomes_resolves_as_written: it now requires the spellinggit diff --name-onlyreports, which is whatci.ymlmatches withgrep -qxFf. The old basenamecheck was blind to a bare name and to a
./prefix.The mutation that mattered
The first version of the message tests asserted on
_unclassified_remedy's return value, soreverting the assertion's call site to the old string left every content arm green. That is the
SDS-3.8 defect this repository names, committed inside a fix for a gate. The arms now drive the real
gate into failure against a
tmp_pathand read the message it actually raises.Six mutations run, each red on its named arm: revert the message, recommend a bare filename, bare
manifest entry, drop the tie-break, a
./tests/entry, and point the reader at a renamed registry.Sweep of the open queue, both directions
Five open pull requests will red three required legs as they stand -- each added a
harness-subject test file missing from
tests/tooling_manifest.txt. I did not push to any of them;the fix is one alphabetical line each.
tests/test_coord_fleet_fetch_clock.pyscripts/coord/fleet.ps1tests/test_ci_red_reader.pyscripts/ci/report_ci_red.pytests/test_install_gate_allowlist_merge.pyscripts/worktree/install-gate.ps1tests/test_claim_shared_registry.pyclaim.ps1,claim_check.pytests/test_steer_inject.pyscripts/hooks/steer-inject.ps1The other six pull requests adding test files are correct: 764, 769, 773 and 796 import the engine;
792 and 806 each appended their own manifest line.
The opposite direction is clean. All 137 manifest entries were swept for an engine test wrongly
listed -- the silent failure, where a test stops running on the legs that would catch its
regressions. One hit,
tests/test_serverdb_ci_coverage.py, and it is correctly listed: it rglobsthe engine only to prove a
ci.ymlregex still refuses something, so its assertion is invariant toengine content. The discriminator is recorded in the item: can an engine-only diff change this
test's result?
Commit shape
The
docs/BACKLOG.mdrow is deliberately its own trailing commit, so a conflict with anotherpull request is a scripted row merge rather than a re-read of intent.
Checks
ruff check,ruff format --check,mypystrict on the changed file, and all 11 pre-commit hookspassed at commit. Tests:
test_tooling_partition(11), plustest_ci_tooling_gate,test_conftest_name_collision_guard,test_licence_header_gate,test_cp1252_console_safety,test_control_char_check,test_escape_sequence_check(121 total), plus the backlog doc guards(164 total).
Not run: the full suite. The box was saturated -- 20 logical cores against 28 concurrent pytest
processes -- and a full run reached 4 percent in 18 minutes. CI must read the remaining legs.
Two follow-ups recorded in the item, not built
Three copies of the manifest parser pinned against nothing (here,
tests/conftest.py, andtests/test_ci_tooling_gate.py); and atest_every_manifest_entry_trips_its_own_gatearm thatfeeds each entry back as its own changed path.