Summary
Two workflows on v1/main still filter on main, left over from when the v1 line
was main. Neither describes how the branches work now: v1/main publishes
exclusively to the v1-latest dist-tag straight from that branch, and main is
where v2/main's milestone merges land and publish to latest.
The two cases look alike but differ sharply in consequence.
1. main.yml — stale, but inert
on:
push:
branches:
- main # <- stale
- v1/main
pull_request: # <- unfiltered
Nothing is mis-publishing today:
- For
push events GitHub runs the workflow file from the commit that was
pushed. A push to main therefore uses main's workflow, and this file is
consulted only when the pushed ref is v1/main. For the main entry to fire, a
commit on main would have to carry this file — and it doesn't: origin/main
holds claude.yml + a main.yml that is the v2 workflow.
- The same file-resolution rule makes the unfiltered
pull_request: harmless,
since a PR's workflow comes from its merge ref.
- Publishing is gated on
github.event_name == 'release' and never consults the
branch filter; the release's target commit selects the workflow. The cross-line
dist-tag risk is already defused explicitly — publish-all pins
--tag v1-latest, with the reasoning commented in place — and a mis-targeted
release is caught by the version assert on both lines.
So the problem is that the file asserts an intent that is no longer true, and the
main entry would become live the moment anything put a v1-shaped tree back on
main.
2. e2e_tests.yml — the same leftover, but it silently disabled a gate
on:
push:
branches: [main]
pull_request:
branches: [main]
Here main matching nothing is not harmless — it means the Playwright suite has
never run on v1/main at all. Confirmed against the branch's full run history,
which contains only Run install, format, lint, build, and test on every push and
CLI Tests, and zero Playwright Tests runs.
This was initially held back from the fix on the theory that re-enabling a suite
that had never executed risked a permanently red CI on a deprecated line. That
concern doesn't apply: nothing has changed on this branch since the suite last ran
on main, so there is nothing for it to have rotted against. It's in scope.
cli_tests.yml needs no change — it filters on paths: cli/** with no branch
filter, so it already runs here.
The change
Both handled in #2066, as two commits so the risk profiles stay separable:
release is untouched in both, so publishing is unaffected.
Notes
- No milestone: every open milestone is a v2 release bucket, and v1 releases never
pass through main, so there is no correct bucket for a v1 issue.
Summary
Two workflows on
v1/mainstill filter onmain, left over from when the v1 linewas
main. Neither describes how the branches work now:v1/mainpublishesexclusively to the
v1-latestdist-tag straight from that branch, andmainiswhere
v2/main's milestone merges land and publish tolatest.The two cases look alike but differ sharply in consequence.
1.
main.yml— stale, but inertNothing is mis-publishing today:
pushevents GitHub runs the workflow file from the commit that waspushed. A push to
maintherefore usesmain's workflow, and this file isconsulted only when the pushed ref is
v1/main. For themainentry to fire, acommit on
mainwould have to carry this file — and it doesn't:origin/mainholds
claude.yml+ amain.ymlthat is the v2 workflow.pull_request:harmless,since a PR's workflow comes from its merge ref.
github.event_name == 'release'and never consults thebranch filter; the release's target commit selects the workflow. The cross-line
dist-tag risk is already defused explicitly —
publish-allpins--tag v1-latest, with the reasoning commented in place — and a mis-targetedrelease is caught by the version assert on both lines.
So the problem is that the file asserts an intent that is no longer true, and the
mainentry would become live the moment anything put a v1-shaped tree back onmain.2.
e2e_tests.yml— the same leftover, but it silently disabled a gateHere
mainmatching nothing is not harmless — it means the Playwright suite hasnever run on
v1/mainat all. Confirmed against the branch's full run history,which contains only
Run install, format, lint, build, and test on every pushandCLI Tests, and zeroPlaywright Testsruns.This was initially held back from the fix on the theory that re-enabling a suite
that had never executed risked a permanently red CI on a deprecated line. That
concern doesn't apply: nothing has changed on this branch since the suite last ran
on
main, so there is nothing for it to have rotted against. It's in scope.cli_tests.ymlneeds no change — it filters onpaths: cli/**with no branchfilter, so it already runs here.
The change
Both handled in #2066, as two commits so the risk profiles stay separable:
main.yml— drop- mainfrompush, constrainpull_requesttov1/main.No behavior change on any path that runs today.
e2e_tests.yml— repoint both filters atv1/main. This is a behaviorchange: it turns a dead workflow back on.
releaseis untouched in both, so publishing is unaffected.Notes
pass through
main, so there is no correct bucket for a v1 issue.