ci: run the full gates on testnet-canary PRs - #1992
Conversation
testnet-canary was never in the branch filters — not removed, simply never added: the filters were last touched on 2026-04-03 to add v10-rc, and the canary branch postdates that. The effect is that PRs targeting testnet-canary run only SPARQL-lint and the path-filtered gates; the vitest lanes, EVM integration, knip and the supply-chain scan all skip. A change can land on canary with no unit signal at all. Adds testnet-canary to ci.yml, evm-integration.yml, knip.yml and supply-chain-scan.yml so canary PRs get the same gates as main. Also drops v10-rc, which was deleted upstream and no longer resolves, and repoints a turbo restore-key that referenced it at main so the cache fallback can actually hit. Two v10-rc mentions remain in explanatory comments and are left as historical context. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
| on: | ||
| push: | ||
| branches: [main, v10-rc, release/rc.12, rc17-vm-wip] | ||
| branches: [main, testnet-canary, release/rc.12, rc17-vm-wip] |
There was a problem hiding this comment.
🟡 Issue: Keep the workflow branch policy descriptions in sync
What's wrong
The PR updates the trigger allowlist from v10-rc to testnet-canary, but leaves branch-specific documentation in the same workflow referring to v10-rc. These workflow files are CI policy, and conflicting branch-policy descriptions make later maintenance harder because readers cannot tell whether v10-rc was intentionally removed everywhere or only from the top-level triggers.
Example
A maintainer searching the workflow for release-branch CI policy now finds both testnet-canary in the trigger lists and stale v10-rc references deeper in the same file, so the intended protected branch set is no longer obvious.
Suggested direction
When changing the canonical branch set in workflow triggers, update the branch-specific policy comments in the same file or make those comments generic enough that future branch rotations do not create conflicting documentation.
For Agents
Review .github/workflows/ci.yml around the trigger updates and the downstream comments that describe branch policy. Preserve the same workflow triggers, but update or remove branch-specific prose so the workflow has a single current branch story.
There was a problem hiding this comment.
Valid — fixed in aa39a6c58.
One calibration on the framing: the two lines are push (main / v10-rc / …) shorthand whose … already elides the rest of the list, so they were describing trigger shape (push vs PR vs merge_group) rather than declaring a canonical branch set. That doesn't rescue them though — naming a branch that no longer exists in the repo is misleading regardless, and leaving it behind in a PR whose whole purpose is to purge v10-rc is a half-done rotation.
Took the second of your two suggested options — making the prose generic rather than renaming — since that's what stops the next branch rotation from recreating this:
ci.yml:1025,ci.yml:1206→push (trigger branches)
Also swept one instance outside the flagged file: .github/CODEOWNERS:3 described branch protection on `main` / `v10-rc`. That one names the branches we genuinely protect rather than illustrating trigger shape, so it got the concrete rename to testnet-canary — which is also the branch the follow-up ruleset will cover.
grep -rn v10-rc .github/ is now empty.
Validation: the diff is comment-only (both changed workflow lines begin with #), and all four workflows still parse to the intended triggers — ci/evm-integration/supply-chain-scan → [main, testnet-canary, release/rc.12, rc17-vm-wip], knip → [main, testnet-canary, rc17-vm-wip].
There was a problem hiding this comment.
🟡 Issue: Branch trigger migration is not covered by workflow-policy tests
What's wrong
This PR changes which branches receive CI, EVM integration, dead-code, and supply-chain scanning, but the existing validation does not prove the trigger filters were updated consistently or spelled correctly. Because branch filters are only interpreted by GitHub Actions, this kind of regression can land green and then remove coverage from the branch it was meant to protect.
Example
A typo such as testnet-canray, or updating ci.yml but missing supply-chain-scan.yml, would still pass the existing repo policy tests while GitHub Actions would silently stop running that workflow for the intended branch.
Suggested direction
Add a small policy test that pins the expected branch trigger sets for the security/CI workflows changed here, ideally from one shared expected branch list per workflow class.
For Agents
Add a workflow-policy regression test near scripts/lib/__tests__/ci-delta.test.mjs that parses the changed workflow YAML files and asserts the intended push/pull_request branch allowlists, including testnet-canary and excluding v10-rc where this PR migrates it. Preserve existing workflow job-wiring checks.
The trigger allowlists moved off the deleted `v10-rc` branch, but three comments still named it: two `push (main / v10-rc / …)` shorthands in ci.yml and the CODEOWNERS header describing which branches need "Require review from Code Owners". The ci.yml comments describe trigger *shape* (push vs PR vs merge_group), not a canonical branch list, so they now say `push (trigger branches)` — generic, so the next branch rotation cannot desync them again. CODEOWNERS names the branches we actually protect, so it gets `testnet-canary`. Comment-only; the parsed trigger config is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chore: sync main into testnet-canary after CI parity (#1992)
Summary
testnet-canaryPRs currently run almost no CI. The vitest lanes, EVM integration, knip and the supply-chain scan are all branch-filtered to[main, v10-rc, release/rc.12, rc17-vm-wip], so a PR targeting canary gets only SPARQL-lint and the path-filtered gates. A change can land on canary with no unit signal at all.git log -S'testnet-canary' -- .github/workflows/ci.ymlreturns nothing — the branch was never in the filters. They were last touched on 2026-04-03 to addv10-rc, andtestnet-canarypostdates that.v10-rc, which no longer resolves (git rev-parse origin/v10-rc→ gone). A deleted branch in a filter is dead weight, and it was also used as a turborestore-keyfallback, so that cache tier could never hit; repointed atmain.Related
testnet-canaryand noticing the CLI vitest lanes stopped running.protect-mainruleset requiresCI gateandEVM integration gate, so a canary ruleset must come after this merges, not before.Diagrams
Files changed
.github/workflows/ci.ymltestnet-canaryto push + PR filters; drop deadv10-rc; repoint thev10-rcturbo restore-key atmain.github/workflows/evm-integration.yml.github/workflows/knip.yml.github/workflows/supply-chain-scan.ymlTest plan
npx js-yaml <file>→ OK for eachgrep -rn v10-rc .github/workflows/→ only two explanatory comments remain, no live referencestestnet-canaryand confirmCI gate,EVM integration gate,Knip dead-code reportand the supply-chain scan all appeartestnet-canarytriggers the same lanesFollow-up (deliberately not in this PR)
Branch rules are a settings change, not a file change, so they can't ride along here.
mainis governed by theprotect-mainruleset (id14325863), which targets~DEFAULT_BRANCHonly:CI gate,EVM integration gate(non-strict)These must be applied to
testnet-canaryonly after this PR merges. The required checks are exactly the ones this PR enables — turning them on first would leave every canary PR blocked forever on checks that never run.Worth a separate decision: whether canary wants the merge queue at all. It adds latency, and a canary branch is usually optimising for iteration speed. The protection rules (no deletion, no force-push, review required) are the parts that matter most.
🤖 Generated with Claude Code