ci: run the money-path suite in its own job (#271) - #276
Merged
Conversation
The money-path tests are the only tests in CI carrying money teeth, and they ran as the final step of the acp job. When the acp concurrency test dies they are marked `skipped` while the job reports `failure` — a single red check that cannot distinguish "the money suite failed" from "the money suite never ran". Every money-path signal in the repo carried that ambiguity. They now run in their own job, on their own runner, with no `needs:`. Job isolation is what empirically survives this fault: on run 30487009981 attempt 2 both sibling jobs passed while the acp job died. `if: always()` is the cheaper edit but a weaker guarantee — it leaves the suite on the same runner as the fault it is meant to outlive, and still buries its result inside another job's conclusion. The split gives up no build sharing: this suite compiles its own feature set (--no-default-features --features gateway,git-delivery,wallet, in release) and reused none of the acp job's build output. The cargo invocation is byte-for-byte unchanged. The acp job keeps its build coverage and is named for what it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Jul 30, 2026
orveth
added a commit
that referenced
this pull request
Jul 30, 2026
Cut dev→main: the money-path suite gets its own CI job (#276) — tag gate
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.
Closes the blinding half of #271. Unblinds money CI; does not fix the acp flake — that is deliberate and stays open on the issue.
The defect
Test mobee-core (money-path suite)was step 8 of the acp job, behindTest mobee-core (acp)at step 7. When step 7 dies, step 8 is markedskippedand the job reportsfailure. The check list then shows one red row that cannot distinguish "the money suite failed" from "the money suite never ran" — and since the acp step has been dying intermittently on dev, main, and every PR, that ambiguity was on every money-path signal in the repo.This is worth stating precisely because the usual framing ("a skipped row looks like a passing row") is not quite what happens here. It is worse: the row goes red, so a reader may well believe the money suite ran and failed.
The fix
money-pathis now its own job — own runner, noneeds:— so nothing else in the workflow can take it down or absorb its result.Why a separate job rather than
if: always()The issue offered both. I took the separate job, and one reason I expected to give turned out to be wrong, so I am not giving it:
if: always()cannot run because the runner is dead." The job records a conclusion offailure, so the runner was alive.if: always()probably would have executed. I withdrew that argument.if: always()keeps the suite on the same runner as the fault it is meant to outlive. It papers over one instance instead of removing the shared-fate surface.Money-path testscheck it can be made a required context on its own. Inside the acp job its result is unreadable from the check list.Evidence
Job isolation survives this exact fault — measured, not assumed. Run
30487009981attempt 2, the red one:Two sibling jobs completed successfully while that job died ⇒ the kill is job-scoped, so a separate job is not collaterally killed. This is evidence from the real failure rather than a synthetic control.
Also verified locally before pushing:
actionlintclean (rc=0) — with a positive control: the same binary returns rc=1 and names both defects on a deliberately broken workflow, so the silence on this file means "passed", not "never ran".cargo testinvocation is byte-for-byte unchanged (diffed againstHEAD).needs:anywhere in the workflow.build-acp→ build, build,Test mobee-core (acp);money-path→Test mobee-core (money-path suite).Rename, and a thing to confirm
build-acp's display name becomesBuild & test (acp), since it no longer runs money-path tests. The job id is unchanged. I checked before renaming: classic branch protection is absent onmainanddev, and ruleset20000440carries no required status checks, so no required context is named after this job. Worth a second pair of eyes — if any config I cannot see pins the old display name, that pin needs updating with this.Not in scope
okhaving run nothing). Real, separately valuable, not this PR.Money-path testsa required check — needs a protection config that does not currently exist.