You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ruled by the maintainer on 2026-08-20 (#5393, verbatim 「接受你的所有建议,现在开始处理。」). Item 3 of 5, and last on purpose — see the ordering note below. Both halves are in changeset-release.yml, so one card, one PR.
Half 1 — the duplicate test run
Run tests (pnpm test, unsharded) is 34 minutes of a ~35-minute job; everything else combined is ~90 seconds (install 7 s, build 35 s, publish 12 s). It re-tests a commit that is already on main — failing it cannot keep anything out, it only blocks publishing after the fact.
Half 2 — runs are being discarded, not queued
concurrency: ${{ github.workflow }}-${{ github.ref }} with cancel-in-progress unset. I originally described this as serialising with a ~35-minute wait. #5395 refuted the magnitude and found something worse: GitHub holds only one pending run per group and discards the rest — 95 of 200 release runs never executed at all. Median wait for those that did run is 5 min 08 s (22% of wall clock), not ~35 min.
So the defect is not latency. Release runs are being thrown away, on a workflow whose last step publishes to npm.
⛔ Do not fix this with cancel-in-progress: true. The final step is changeset publish; cancelling mid-publish is worse than any wait. The requirement is that no merge loses its release run — find the shape that achieves that (a queue that actually queues, or a design where a dropped run is provably harmless because the next run subsumes it). If the second is true, prove it rather than asserting it: show that a discarded run's changesets are still consumed by the following run.
⚠️ Half 1 makes half 2 much cheaper — a ~2-minute job contends far less than a 35-minute one — but ⛔ it does not make half 2 unnecessary. A dropped run is a dropped publish at any duration.
⚠️ Why this card is last, and what must be true before it lands
I originally proposed removing the release-side tests first, arguing the CI push lane still ran the whole suite as a backstop. That argument was false: #5402 shows Test (coverage) has failed 100% of the time since 2026-08-16.
So this card may only land once both are true, and the implementer must verify both on origin/main before opening the PR, not take this card's word for it:
If either is not true when you pick this up, stop and report rather than proceeding — removing this test run while the push lane is dark would leave main with no working post-merge validation at all.
⚠️ Related context the implementer should read but not act on: the merge queue currently runs no CI (#4986 — a repository-settings matter, ⛔ no PR can fix it), and the release PR itself runs no CI (#5397). Neither blocks this card; both mean there is less validation upstream than the workflow's design assumes.
⛔ Constraints
⛔ changeset:publish behaviour is not in scope and must not change. ⛔ No AI-executed release.
Blocked-by: #5403
Ruled by the maintainer on 2026-08-20 (#5393, verbatim 「接受你的所有建议,现在开始处理。」). Item 3 of 5, and last on purpose — see the ordering note below. Both halves are in
changeset-release.yml, so one card, one PR.Half 1 — the duplicate test run
Run tests(pnpm test, unsharded) is 34 minutes of a ~35-minute job; everything else combined is ~90 seconds (install 7 s, build 35 s, publish 12 s). It re-tests a commit that is already onmain— failing it cannot keep anything out, it only blocks publishing after the fact.Half 2 — runs are being discarded, not queued
concurrency: ${{ github.workflow }}-${{ github.ref }}withcancel-in-progressunset. I originally described this as serialising with a ~35-minute wait. #5395 refuted the magnitude and found something worse: GitHub holds only one pending run per group and discards the rest — 95 of 200 release runs never executed at all. Median wait for those that did run is 5 min 08 s (22% of wall clock), not ~35 min.So the defect is not latency. Release runs are being thrown away, on a workflow whose last step publishes to npm.
⛔ Do not fix this with
cancel-in-progress: true. The final step ischangeset publish; cancelling mid-publish is worse than any wait. The requirement is that no merge loses its release run — find the shape that achieves that (a queue that actually queues, or a design where a dropped run is provably harmless because the next run subsumes it). If the second is true, prove it rather than asserting it: show that a discarded run's changesets are still consumed by the following run.I originally proposed removing the release-side tests first, arguing the CI push lane still ran the whole suite as a backstop. That argument was false: #5402 shows
Test (coverage)has failed 100% of the time since 2026-08-16.So this card may only land once both are true, and the implementer must verify both on
origin/mainbefore opening the PR, not take this card's word for it:ci.ymlTest (coverage)has failed 100% of the time since 2026-08-16 — one test times out under v8 coverage, and Codecov has received nothing since #5402 is fixed — the push lane's suite actually passes.Test (coverage)4 ways and stop the Codecov upload being skipped by its implicitsuccess()#5403 has landed — the push lane is sharded and its upload no longer fails silently.If either is not true when you pick this up, stop and report rather than proceeding — removing this test run while the push lane is dark would leave
mainwith no working post-merge validation at all.⛔ Constraints
changeset:publishbehaviour is not in scope and must not change. ⛔ No AI-executed release.changeset:version— fix(release): carry QUICK_REFERENCE's Current Release block in changeset:version #5396 just wired the QUICK_REFERENCE sync into it, and a pin insync-quick-reference-release.test.tsasserts this workflow'sversion:input. If your change trips that pin, that is the pin working; do not weaken it.started_at/completed_at.Evidence and method: #5395. Ruling: #5393.