Skip to content

chore(bin): move CI-only tooling into bin/ci/ - #2093

Merged
lmeyerov merged 1 commit into
masterfrom
chore/bin-ci-layout
Sep 18, 2026
Merged

lmeyerov merged 1 commit into
masterfrom
chore/bin-ci-layout

Conversation

@lmeyerov

Copy link
Copy Markdown
Contributor

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 to bin/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 the test-*.sh runners).

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":

  • 7 scripts derive REPO_ROOT by walking up from __file__, which is one level further now. Left alone, they would have resolved the repo root to bin/.
  • 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_lane caught this, which is the whole reason that test exists.
  • 4 test modules locate their subject by path, two as segmented Path("bin") / "name.py" rather than a literal string, so a textual replace could not see them. 14 test failures.
  • 4 guards build their baseline path from REPO_ROOT, one via a single-string REPO_ROOT / "bin/x.json" form.

What deliberately did not move

bin/test-*.sh stays put: 32 mentions across 15 files including graphistry/tests/conftest.py and committed coverage baselines. That is fixture churn for a cosmetic gain.

bin/pyright.sh also stays — it is a developer entry point like lint.sh and ruff.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 · actionlint clean on all workflows · changed-line-coverage 0 eligible lines · zero stale path references repo-wide · git diff --summary shows no file-mode changes.

Two things checked and found not to be regressions: the shellcheck SC2068/SC1091 in docker/test-cpu-entrypoint.sh are pre-existing on lines this PR does not touch, and type-hygiene reading 4448 rather than 4447 is also true of clean master (the 4447 was measured on #2092's older base).

🤖 Generated with Claude Code

https://claude.ai/code/session_017ropeBMLJUuy6ViYwy15ud

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant