Skip to content

ci: run only the checks relevant to the changed paths - #942

Merged
thekevinscott merged 2 commits into
mainfrom
claude/834-ci-path-triggers
Aug 14, 2026
Merged

thekevinscott merged 2 commits into
mainfrom
claude/834-ci-path-triggers

Conversation

@thekevinbot

Copy link
Copy Markdown
Collaborator

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/workflows tree hash 866cc24167e57b8b8a0c2ead5bfd4b38d5843b6a on both), rebased onto current main.

What changes

Per-domain workflows replace the per-concern ones. conventions.yml is deleted — all eight of its lanes now live in the workflow that owns their domain, job ids preserved so check-run names are unchanged.

New workflow Absorbs
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 / internals-distcheck-ci the two internals lanes
docs-ci new — docs had no PR verification at all
docs-release docs.yml, now push-only
release-ci / putitoutthere-config-check release-precheck / release-config-check

Fragment 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-check loses its branches: [main] filter — its gate is diff-scoped via base.sha, so the filter only hid it from stacked PRs.

Every workflow now lists its own file in its pull_request paths, 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:

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 and E2E attestation freshness.

Release impact

None. This touches only .github/workflows/. release.yml has no paths: 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 produced precheck / build / build → skipped.

No source files change, so there is no ruff / biome / cargo fmt exposure on main, and no e2e attestation is staled.

Follow-ups tracked separately

#862 (a ci-paths check 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

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.
@thekevinscott
thekevinscott merged commit ac56e2a into main Aug 14, 2026
91 checks passed
@thekevinscott
thekevinscott deleted the claude/834-ci-path-triggers branch August 14, 2026 16:34
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
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
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.

3 participants