fix(ci): the docs-only skip has never worked — negations need predicate-quantifier: every - #418
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR updates the CI “changes” detection logic so documentation-only pull requests can correctly skip the heavier code/ARM matrix, by separating dorny/paths-filter invocations and using the appropriate quantifier for negated patterns. It also updates ARM cross-compile provisioning to install only the needed glibc header packages and adjusts the bounded apt retry wrapper.
Changes:
- Split
dorny/paths-filterinto two steps and setpredicate-quantifier: everyfor thecodefilter while keeping the default quantifier for theaccuracyfilter. - Update ARM cross-compile provisioning to install
libc6-dev-*-crossheader packages instead of full cross toolchains. - Rework
.github/scripts/apt-install-retry.shto skipapt-get updateon the first attempt and to use--no-install-recommendswith updated timeouts.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| .github/workflows/ci.yml | Splits change-detection filters and updates ARM provisioning package selection. |
| .github/scripts/apt-install-retry.sh | Adjusts retry/update strategy and install flags/timeouts for bounded apt provisioning. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
The half I said was unproven is now provenThe PR body stated plainly that the bug was demonstrated but the fix was not, since this PR touches
Under Why this is credible rather than just a modelIt reproduces the real defect exactly. What it is not: it models how the action combines per-pattern matchers under each quantifier, not the action's source. The remaining verification is unchanged and still worth doing — rebase a docs-only PR (#414 or #416) onto this after it merges and confirm |
12eb200 to
14442f5
Compare
`dorny/paths-filter`'s `predicate-quantifier` defaults to `some`, which includes a file if it matches ANY pattern in the filter. The `code` filter is `'**'` followed by seven exclusions, so `'**'` matches everything and every `!` line under it has been dead since the filter was written. The action's README states it outright: under `some`, negation syntax is ineffective. Proven from a run, not from the docs. PR #416 changed exactly one file, `AGENTS.md`, and the filter job's log reads: [modified] AGENTS.md Filter code = true Matching files: AGENTS.md [modified] A markdown file matched a filter whose whole purpose is to exclude markdown. Every documentation PR in this repository's history has therefore run the full code matrix -- fmt/clippy/rustdoc, wasm32, no_std and all four ARM cross-compiles -- and today two docs-only PRs (#414, #416) were blocked by a flaky apt provision for jobs that should never have been scheduled at all. Fixed with TWO filter steps rather than one, because `predicate-quantifier` is a step-level input and the two filters need opposite settings. `code` is one positive pattern plus exclusions, so it needs `every`. `accuracy` must keep the default: its eight patterns are ALTERNATIVES -- a file lives in one of those trees, never in all eight -- so `every` would make it unsatisfiable and silently disable the accuracy battery at review time, which is the gate A5 exists to add. Putting both filters in one step is exactly how the bug got here, and one quantifier cannot serve both. Verification is asymmetric and worth stating plainly. That the bug exists is proven by the log above. That the fix works is NOT yet proven: this PR touches `.github/workflows/ci.yml`, so it is correctly a code change and cannot demonstrate a skip. The demonstration is rebasing a docs-only PR onto this and observing `code = false` -- #414 and #416 are both available and both currently show the opposite.
14442f5 to
612ad8f
Compare
Antigravity review (Gemini via Ultra)This PR splits the CI path filtering into two distinct steps with different predicate quantifiers to correctly implement the docs-only skip. Blocking issuesNone found. Suggestions
Nitpicks
Automated first-pass review by |
|
Antigravity review — no blocking issues. Both points declined, one on the project rule and one on the file's own convention. Comment history. Answered on #412/#415: All-caps emphasis. Declined as a matter of matching the file. Both are style calls rather than correctness ones, and I would rather be consistent with the surrounding file than with a general guideline it does not follow. |
The remaining verification is done — proven on a real PRThe PR body said the bug was demonstrated but the fix was not, and that the confirmation would be "rebase a docs-only PR onto this and observe Compare the same PR before the fix: Same file, same filter list, opposite verdict. What that changes for a docs PR#416's check rollup, before → after:
The required check still reports, which is the property the workflow header has always claimed and never actually had. The Two docs PRs were blocked earlier today by a cross-compile failure on jobs that should never have been scheduled. They no longer are. |
The control, which the skip proof neededThe previous comment showed #414 supplies the control without being set up for it. It was docs-only when it went green earlier; a Three things at once, and the middle one is the part
Taken with the earlier |
Found while diagnosing why two documentation-only PRs were failing an ARM cross-compile.
The docs-only skip has never worked
dorny/paths-filter'spredicate-quantifierdefaults tosome, which includes a file if it matches any pattern in the filter. Thecodefilter is'**'followed by seven exclusions — so'**'matches everything and every!line under it has been dead since the filter was written. The action's README says it outright: undersome, negation syntax is ineffective.Proven from a run, not from the docs. #416 changed exactly one file, and the filter job's own log reads:
A markdown file matched a filter whose entire purpose is to exclude markdown.
So every documentation PR in this repository's history has run the full code matrix — fmt/clippy/rustdoc, wasm32,
no_std, and all four ARM cross-compiles. Today that stopped being merely wasteful: #414 and #416 were both blocked by a flaky apt provision, for jobs that should never have been scheduled.Why two steps and not one flag
predicate-quantifieris a step-level input, and the two filters need opposite settings:codeevery— otherwise'**'alone satisfies itaccuracysome— a file lives in one of them, never in all eightSetting
everyon a shared step would makeaccuracyunsatisfiable and silently disable the accuracy battery at review time — the gate A5 exists to add, turned off by the fix for a different gate. Sharing one step is how this bug arrived; one quantifier cannot serve both.Verification, and what is not yet verified
Asymmetric, and worth stating plainly rather than implying both halves are done:
.github/workflows/ci.yml, so it is correctly a code change and cannot demonstrate a skip. The demonstration is rebasing a docs-only PR onto this and observingcode = false. fix(frontend): omit the empty latency map, and backfill the CHANGELOG #414 and docs(agents): CodeRabbit does not auto-review this repo, and its check never resolves #416 are both available, and both currently show the opposite.actionlintclean; the step wiring (filter-code→code,filter-accuracy→accuracy, no stalesteps.filter.references) checked by parsing the workflow rather than by reading it.Relationship to #417
Independent defects, same symptom. #417 fixes the provisioning that failed; this fixes the reason docs PRs were exposed to it at all. Either alone leaves the other standing.