Skip to content

fix(release): suppress the implicit success() that kept skipping the build - #74

Merged
MotherSphere merged 1 commit into
mainfrom
fix/release-dispatch-implicit-success
Aug 27, 2026
Merged

fix(release): suppress the implicit success() that kept skipping the build#74
MotherSphere merged 1 commit into
mainfrom
fix/release-dispatch-implicit-success

Conversation

@MotherSphere

Copy link
Copy Markdown
Member

The second recovery dispatch still built nothing, with the same shape as the
first: target succeeded and build, sign and aur skipped while the run
reported success. Naming the dependencies explicitly in #73 was necessary but
not sufficient.

A job if: that contains no status-check function gets an implicit success()
ANDed onto it, and that success() is evaluated over the whole ancestor graph
rather than the direct needs. release-please is skipped on a dispatch, so
the implicit success() was false and the job skipped no matter what the
explicit condition said.

The evidence was already in the file: target carries !cancelled() && !failure() and RAN despite the skipped ancestor, while build carried only
needs.target.result == 'success' and skipped even though target had
succeeded. Naming any status function suppresses the implicit one, so
!cancelled() on each downstream job lets the explicit conditions govern.

The explicit conditions from #73 are what make that safe to do: !cancelled()
alone would run these jobs after a FAILED dependency, which is exactly what the
per-dependency checks prevent. The two changes only work together.

…build

The second recovery dispatch still built nothing, with the same shape as the
first: `target` succeeded and `build`, `sign` and `aur` skipped while the run
reported success. Naming the dependencies explicitly in #73 was necessary but
not sufficient.

A job `if:` that contains no status-check function gets an implicit `success()`
ANDed onto it, and that `success()` is evaluated over the whole ancestor graph
rather than the direct `needs`. `release-please` is skipped on a dispatch, so
the implicit `success()` was false and the job skipped no matter what the
explicit condition said.

The evidence was already in the file: `target` carries `!cancelled() &&
!failure()` and RAN despite the skipped ancestor, while `build` carried only
`needs.target.result == 'success'` and skipped even though `target` had
succeeded. Naming any status function suppresses the implicit one, so
`!cancelled()` on each downstream job lets the explicit conditions govern.

The explicit conditions from #73 are what make that safe to do: `!cancelled()`
alone would run these jobs after a FAILED dependency, which is exactly what the
per-dependency checks prevent. The two changes only work together.
@MotherSphere
MotherSphere merged commit 919500c into main Aug 27, 2026
5 checks passed
@MotherSphere
MotherSphere deleted the fix/release-dispatch-implicit-success branch August 27, 2026 22:14
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