fix(ci): stop the desktop paths-filter from matching every PR - #182
Merged
Conversation
The `desktop` filter mixed a positive glob (`desktop/**`) with a standalone negation (`!desktop/src-tauri/**`) in one pattern list. dorny/paths-filter (via picomatch) treats each entry in a filter's pattern list as an independent OR clause, not an "AND NOT" applied to the other entries -- so the negated pattern alone matched every file outside desktop/src-tauri/**, which silently made `desktop` true for almost any change in the repo, including plain launchpad/*.md docs. That's why docs-only PRs (#147, #167, #168, #172, #174, #175, #179) were running -- and getting blocked by -- the full Desktop Core, Desktop Smoke E2E, and Desktop E2E Integration suites. See #181. Verified directly against picomatch: an array of ['desktop/**', '!desktop/src-tauri/**'] matches 'launchpad/plans/foo.md' as true. Drop the exclusion instead of trying to fix its quantifier: every job condition that reads `outputs.desktop` already ORs in `outputs.desktop-rust`, which independently and correctly catches desktop/src-tauri/** changes, so removing the exclusion doesn't change which jobs run for tauri-only changes. Add scripts/test-ci-changed-paths-filter.sh, wired into the `changes` job's existing self-test steps, to reject any future filter that mixes negated and positive patterns in one list before it can reintroduce this bug. Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
serina-mcfall
marked this pull request as ready for review
August 16, 2026 21:34
This was referenced Aug 21, 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.
Summary
ci.yml'sdesktoppath filter mixed a positive glob with a standalone negation, which picomatch treats as an independent OR clause — the negation alone matched almost every file in the repo, sodesktop=truefor nearly any PR including docs-only ones. Removes the exclusion and adds a regression guard.Related issue
Closes #181
Issue type
Bug
Agent provenance
Objective
Fix
.github/workflows/ci.yml'sdesktoppath filter so docs-only PRs stop running (and failing) the full Desktop CI suite.Impacted components
Approach and rejected alternatives
Considered setting
predicate-quantifier: everyon thedesktopfilter sodesktop/**AND NOTdesktop/src-tauri/**would be evaluated as a conjunction. Rejected:predicate-quantifieris set once for the wholedorny/paths-filterstep, not per filter, so it would also change the semantics ofrust,web, andmobile(requiring every changed file to match, not any), breaking multi-file PRs across those filters. Dropping the exclusion entirely is correct instead: every job condition that readsoutputs.desktopalready ORs inoutputs.desktop-rust, which independently and correctly matchesdesktop/src-tauri/**, so no job-gating behavior changes for real Tauri work.Verification
Command run:
Raw output:
Command run:
Raw output:
Command run:
Raw output:
Also confirmed
scripts/test-ci-changed-paths-filter.shfails with the expected::error::message when run against a reconstructed copy of the original (buggy) filter block, before it was fixed here.Not verified
Did not run the full
Desktop Core/Desktop Smoke E2E/Desktop E2E Integrationsuites end-to-end locally (they need Postgres/Redis and take 10-20 minutes each); relying on this PR's own CI run for that, since it touches.github/workflows/ci.ymland will triprust=trueregardless of this fix. Also did not verify behavior against every other open PR retroactively — confirmed the mechanism directly against picomatch instead of re-running all 8 affected PRs' CI.Security implications
None. This only changes which CI jobs run for a given diff; it does not change any runtime code, permissions, or secret handling.
desktop/src-tauri/**changes still get full desktop-rust coverage via the independentdesktop-rustfilter output.Escalations
This PR's own CI run surfaced a second, unrelated failure: the
Securityjob (cargo deny check) fails onadvisoriesdue to yanked crates (spin0.9.8 and 0.10.0, transitive viamesh-llm-host-runtime→iroh/n0-future/mdns-sd/flume). It's pre-existing on thelaunchpadbranch, not caused by this diff — confirmed no other currently-open PR even triggers theSecurityjob, because this is the only one that touches arust-filtered path (.github/workflows/ci.ymlis explicitly listed in therustfilter). Have not toucheddeny.tomlorCargo.lockto address it since that's a dependency-health decision outside this issue's scope - raising it rather than deciding it.