chore(bin): move CI-only tooling into bin/ci/ - #2093
Merged
Merged
Conversation
bin/ had grown to 34 flat files, and the pyright gate had just added three
more. The 13 CI-only scripts and baselines move to bin/ci/, leaving 21
developer-facing entry points (lint.sh, ruff.sh, mypy.sh, pyright.sh,
typecheck.sh, pytest.sh, build.sh, the test-*.sh runners) at the top level.
Pure relocation: no behaviour, flags or output change, and git tracks all 13
as renames so history follows. What the move actually required, none of it
visible as a path:
- seven scripts derive REPO_ROOT by walking up from __file__, which is one
level further now
- four guards build their baseline path from REPO_ROOT
- the python change-filter in ci.yml matched '^bin/ci_.*baseline\.json$', so
after the move an edit to any guard baseline would no longer have triggered
the lane that runs the guards. test_every_guard_baseline_triggers_the_python_ci_lane
caught that, which is the whole reason it exists.
- four test modules locate their subject by path, two of them as segmented
Path("bin") / "name.py" rather than a literal string
test-*.sh deliberately stays put: 32 mentions across 15 files including
conftest.py and committed coverage baselines, which is fixture churn for a
cosmetic gain.
Historical CHANGELOG entries keep their original paths; a changelog records
what was true when it was written.
Verified from the new paths: lint.sh (ruff, type-hygiene 4448, comment-density
1151), pyright guard 273, cypher surface guard, gpu gate audit, mypy 351 files,
61 guard tests, actionlint.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ropeBMLJUuy6ViYwy15ud
This was referenced Sep 18, 2026
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.
bin/had grown to 34 flat files, and the pyright gate (#2092) had just added three more. The 13 CI-only scripts and baselines move tobin/ci/, leaving 21 developer-facing entry points at the top level (lint.sh,ruff.sh,mypy.sh,pyright.sh,typecheck.sh,pytest.sh,build.sh, and thetest-*.shrunners).Pure relocation — no behaviour, flags or output change — and git tracks all 13 as renames, so history follows.
What the move actually required
None of this is visible as a path change, which is the interesting part of a "pure rename":
REPO_ROOTby walking up from__file__, which is one level further now. Left alone, they would have resolved the repo root tobin/.ci.yml's python change-filter matched^bin/ci_.*baseline\.json$. After the move, editing any guard baseline would no longer have triggered the lane that runs the guards — the gate would go quiet precisely when a baseline changed.test_every_guard_baseline_triggers_the_python_ci_lanecaught this, which is the whole reason that test exists.Path("bin") / "name.py"rather than a literal string, so a textual replace could not see them. 14 test failures.REPO_ROOT, one via a single-stringREPO_ROOT / "bin/x.json"form.What deliberately did not move
bin/test-*.shstays put: 32 mentions across 15 files includinggraphistry/tests/conftest.pyand committed coverage baselines. That is fixture churn for a cosmetic gain.bin/pyright.shalso stays — it is a developer entry point likelint.shandruff.sh, not CI-only tooling.Historical CHANGELOG entries keep their original paths; a changelog records what was true when it was written. Only the unreleased
[Development]entries are updated.Verification, all from the new paths
bin/lint.sh(ruff, type-hygiene 4448, comment-density 1151) · pyright guard 273 · cypher surface guard · gpu gate audit ·bin/typecheck.sh(mypy, 351 files) · 61 guard tests ·actionlintclean on all workflows · changed-line-coverage 0 eligible lines · zero stale path references repo-wide ·git diff --summaryshows no file-mode changes.Two things checked and found not to be regressions: the shellcheck SC2068/SC1091 in
docker/test-cpu-entrypoint.share pre-existing on lines this PR does not touch, and type-hygiene reading 4448 rather than 4447 is also true of cleanmaster(the 4447 was measured on #2092's older base).🤖 Generated with Claude Code
https://claude.ai/code/session_017ropeBMLJUuy6ViYwy15ud