guard: wire 4 orphaned gate tools into CI + document 9th hook check - #712
guard: wire 4 orphaned gate tools into CI + document 9th hook check#712matt82198 wants to merge 3 commits into
Conversation
Gate inventory (PR #709) found four guardrail tools on main invoked by nothing -- unit-tested, documented, grading nothing. Three are wired as real shard-0 CI gates; the fourth is recorded as deliberately unwired. - sibling_import_check.py --check - fixture_intent_check.py --root . - port_fidelity_check.py --check --root . git_identity_check.py stays unwired: its subject is a managed target repo's *local* git identity, and a GitHub Actions runner clone sets only a --global one, so it reports mismatch on every CI run (verified exit 1). Softening it with --mode warn or continue-on-error would recreate the decoration this sweep removes. hooks/CLAUDE.md documented 8 pre-push checks while pre-push-policy.sh runs 9 -- check_test_suite_count() was undocumented. Added and renumbered. tests/test_ci_workflow_lint.py gains four assertions: the steps exist with exact invocations, they are shard-0 scoped and never continue-on-error, and every tool in the orphan inventory is either wired or explicitly excepted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Evicted from the merge queue: batch #736 (integrate/q-1785730980) red with every member individually green |
|
Holding as queue-rejected until #724 lands. Root cause of the merge-queue stall (batches #727/#729/#730/#731/#732/#733/#736/#737 all dissolved): this PR adds the 'Sibling import guard' step to .github/workflows/ci.yml, wiring |
|
Evicted from the merge queue: batch #766 (integrate/q-1785803317) red with every member individually green |
What
Gate inventory (PR #709) confirmed four guardrail tools on
maininvoked by nothing — unit-tested, documented intools/CLAUDE.md, grading zero real code. This wires the three that are semantically applicable to this repo's CI, and records the fourth as deliberately unwired rather than softening it.Per-tool verdict (run against a clean
origin/mainworktree)sibling_import_check.py --checkSibling import check: CLEANfixture_intent_check.py --root .OK: 4 fixtures tracked and validport_fidelity_check.py --check --root .port-fidelity-check: PASS (143 files, 0 findings)git_identity_check.py --repo .Error: Must provide --expect-name/--expect-email or --configWhy
git_identity_check.pystays unwiredIt is neither bitrot nor a real finding — it is inapplicable to this repo's CI, the same class as
tracker_guard(which lives in the pre-push hook, not CI, for the analogous reason).--localuser.name/user.email(git config --local, plus a physical.git/configread).aesop.config.jsonin the repo andaesop.config.example.jsonhas noidentityblock, so there is nothing for--configto read; expectations would have to be hardcoded into the workflow.--globalidentity (ci.ymlstep "Configure git" sets--global user.name "CI Runner"). Verified against a simulated CI-style repo with global-only identity:Wiring it would be permanently red. The two ways to make it green —
--mode warn(exit 0 unconditionally) orcontinue-on-error: true— both recreate the exact decoration this sweep exists to remove, andci_gate_runability.pyalready rejectscontinue-on-erroron required gates. Its real enforcement point is an aesop-managed target repo, not aesop's own CI. Left unwired, recorded inDELIBERATELY_UNWIREDwith the reason, and asserted by the inventory test so it cannot be forgotten.Doc fix
hooks/CLAUDE.mddocumented 8 pre-push checks;hooks/pre-push-policy.shmain()gates 9.check_test_suite_count()(runsverify_test_suite_count.py --checkbetweencheck_metricsandcheck_encoding_lint) was undocumented. Added as item 8 with its fail-open conditions (test_suite_count_skipped_tool_missing,test_suite_count_skipped_no_python); subsequent items renumbered.Tests
tests/test_ci_workflow_lint.py::GuardrailGateWiringTestextended:CI_GATE_INVOCATIONS(covered by the existing "wired" + "uncommented run command" assertions);test_orphan_sweep_steps_exist_with_expected_invocations— each step exists by name and runs exactly its check command;test_orphan_sweep_steps_are_real_enforcement— shard-0 scoped (the checks are shard-invariant) and nevercontinue-on-error;test_orphan_inventory_fully_accounted_for— each of the four inventory tools is either wired or explicitly excepted, never both.Verification
Pre-push hook battery passed on push (no bypass flags used).
🤖 Generated with Claude Code