Repository navigation
ci: run only the checks relevant to the changed paths - #942
Merged
Merged
Conversation
Rebuilds the PR-trigger surface so each workflow runs when, and only when, files it actually verifies change. Collapses the #834 definition stack (#880, #882, #883, #897-#902, #940) into one PR; the probe PRs that measured each trigger are closed unmerged, their check-run lists being the evidence. Per-domain workflows replace the per-concern ones. conventions.yml is gone -- all eight of its lanes now live in the workflow that owns their domain: dirsql-python-ci <- python-lint, python-typecheck, python-test, conventions(python-sdk, rust-python-binding) dirsql-typescript-ci <- ts-lint, ts-typecheck, ts-test, conventions(typescript-sdk, rust-napi-binding) dirsql-rust-ci <- rust-test, conventions(rust) plugin-dirsql-embedding-ci <- plugins-test, conventions(plugins-embeddings) internals-checks-ci <- conventions(internals-checks) internals-distcheck-ci <- conventions(internals-distcheck) docs-ci <- new; docs had no PR verification at all docs-release <- docs.yml, now push-only release-ci <- release-precheck putitoutthere-config-check <- release-config-check Fragment and README paths are excluded where they cannot change a verdict: a rust changelog fragment or README edit used to fan out into 47 irrelevant checks and now runs one. READMEs stay in release-ci's scope deliberately -- they ship in all three published artifacts. changelog-check loses its `branches: [main]` filter; its gate is diff-scoped via base.sha, so that filter only hid it from stacked PRs. Every workflow lists its own file in its pull_request paths, so a change to CI configuration is verified by the CI it configures. Refs #834
Twenty-one comment lines were made false by this PR: eighteen named workflows it deletes or renames (conventions.yml, python-test.yml, docs.yml, release-precheck.yml), and three claimed "No self-path on pull_request", which it reverses. The rest is the archaeology AGENTS.md prohibits -- issue references, "merged from X", tombstones for jobs that no longer exist -- which rots precisely because the file is never re-read once merged. Kept: comments carrying a constraint a reader would not infer, such as why a Python workflow watches packages/rust/**, why coverage is whole-tree on Rust only, and the artifact-completeness rationale. External references survive (pypi/warehouse#11096, putitoutthere#605) because they document third-party behavior rather than our own history. Comment-only: the comment-stripped content of every workflow is byte-identical before and after.
This was referenced Aug 14, 2026
thekevinscott
pushed a commit
that referenced
this pull request
Aug 14, 2026
`#check-failure = 0` means "nothing is red", which is true while checks are yellow -- the gate went green 2m21s before CI finished on both commits of #942. Adding `#check-pending = 0` makes it mean "all green". The comment claiming this deadlocks is unverified: it is Mergify's own documented pattern, and merge protections report pending rather than resolving when a pending condition is present. #832 more likely deadlocked on the named anchors over path-filtered workflows. If it does deadlock, the next PR hangs and this reverts in one line. Fixes #943
This was referenced Aug 20, 2026
thekevinscott
pushed a commit
that referenced
this pull request
Aug 20, 2026
#738 moved the wheel's CLI in-process and deleted `dirsql/_binary/`, so the python distcheck flow stopped staging a cargo-built binary. `gate.py` never referenced one again, but three callers were never updated: `python_flow_test.py` located `target/{release,debug}/dirsql` and skipped when it was absent, then never used the path -- `run()` takes `(_PKG, _REPO)`. So the only real-subprocess coverage of the flow silently skipped on a machine with no cargo build lying around, which is every clean checkout. Observed directly rather than assumed: with no binary present the case skipped before this change and passes after it (39.84s, `1 passed`). `dirsql-python-ci.yml`'s distcheck job then built that binary on every Python PR for nothing. `Install Rust` / `Rust cache` stay -- `maturin build` compiles the PyO3 extension. Verified by running the job's remaining command with no binary in `target/`: `dirsql-distcheck python` -> `OK`, exit 0. The README still described the flow as staging the binary; its two other stale lines the issue cites (#942's workflow renames) were already corrected on main by 6c02901. The node flow is untouched: it genuinely needs the staged host CLI. Fixes #972 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FPnyJVtn9Ld2iNbP9xnGus
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.
Delivers #834. Collapses the definition stack (#880, #882, #883, #897–#902, #940) into one PR — the workflow tree here is byte-identical to the stack tip (
.github/workflowstree hash866cc24167e57b8b8a0c2ead5bfd4b38d5843b6aon both), rebased onto currentmain.What changes
Per-domain workflows replace the per-concern ones.
conventions.ymlis deleted — all eight of its lanes now live in the workflow that owns their domain, job ids preserved so check-run names are unchanged.dirsql-python-cipython-lint,python-typecheck,python-test, conventionspython-sdk+rust-python-bindingdirsql-typescript-cits-lint,ts-typecheck,ts-test, conventionstypescript-sdk+rust-napi-bindingdirsql-rust-cirust-test, conventionsrustplugin-dirsql-embedding-ciplugins-test, conventionsplugins-embeddingsinternals-checks-ci/internals-distcheck-ciinternalslanesdocs-cidocs-releasedocs.yml, now push-onlyrelease-ci/putitoutthere-config-checkrelease-precheck/release-config-checkFragment and README paths are excluded where they cannot change a verdict. A rust changelog fragment or README edit previously fanned out into 47 irrelevant checks; it now runs 1. Package READMEs stay in
release-ci's scope deliberately — they ship in all three published artifacts (PyPI long-description, npm tarball, crate).changelog-checkloses itsbranches: [main]filter — its gate is diff-scoped viabase.sha, so the filter only hid it from stacked PRs.Every workflow now lists its own file in its
pull_requestpaths, so a change to CI configuration is verified by the CI it configures. That closes the post-#881 hole where a CI-config-only PR triggered nothing and merged vacuously green under#check-failure = 0.Verification
Measured with throwaway probe PRs (#903–#928 stacked, #935–#938 based on
main), all closed unmerged — their check-run lists are the evidence. Every one of 27 expected rows matched:Changelog Checkmain-based rust fragment) fired onlydocs-ci+Changelog Check— the negative proof that release-ci, python CI, ts CI and rust CI all correctly stay outChangelog Check, confirming the gate is plugins-blind (changelog-gate cannot see plugins/ — plugin changes are not changelog-enforced #896)The definition layers themselves ran green once self-paths were restored: #899 (26 checks), #900 (21), #901 (11) all
success/skipped, including the full 3.10/3.12/3.13 matrix andE2E attestation freshness.Release impact
None. This touches only
.github/workflows/.release.ymlhas nopaths:filter so it runs on the merge push, but putitoutthere's change detection matches no package glob (packages/**,plugins/dirsql-plugin-embeddings/**,Cargo.toml,Cargo.lock), so it plans zero packages. Probe #937 demonstrated this directly: a config-only change producedprecheck / build / build→skipped.No source files change, so there is no
ruff/biome/cargo fmtexposure onmain, and no e2e attestation is staled.Follow-ups tracked separately
#862 (a
ci-pathscheck to stop the two path sources drifting), #932 (docs pass), #933 (attestation scope), #934 (close-or-rewrite #843–#861), #939 (crate ships fragments).E2E Verification
N/A - CI configuration only
Generated by Claude Code