Context
#19637 changes how the Engine is released. The old flow pushed straight to dev and needed a ruleset bypass. Now publish.mjs prepare opens a release PR, the operator merges it once its required checks pass, and publish.mjs finish squashes the merge onto main and creates the GitHub release. 13.3.0 (milestone v13.3) is the first cut on that path.
This ticket is the cut's record. It is not the release PR's close target. The release PR resolves a preparation leaf filed at cut time, so this record stays open until finish, npm and the Portal are verified. It owns the real-cut validation that #19637 cannot show before a release exists.
The Cut
- Bump
package.json to 13.3.0, and author .github/RELEASE_NOTES/v13.3.0.md through the release-notes epic.
- File the preparation leaf, the release PR for v13.3.0, whose ACs the PR itself delivers. Write the release PR body against it. Then
node buildScripts/release/publish.mjs prepare --rehearse --ticket <leaf> --body-file <body> prints every gate as โ
.
node buildScripts/release/publish.mjs prepare --ticket <leaf> --body-file <body> opens the release PR.
- The operator merges it after its required checks and CodeQL pass. This is the cut's one human step.
node buildScripts/release/publish.mjs finish.
- Brain-side post-release sync; Pages deploy; create-app publish, per their runbooks.
If a phase stops, re-running the same command continues it.
Acceptance Criteria
Out of Scope
The contents of 13.3 (the milestone and roadmap) and the release notes themselves (the release-notes epic).
Related
#19637, #19642 (Engine 13.3 roadmap), #14800 (the 13.2 cut runbook, the last cut on the old path; its package-refresh caveat moved to AC-5)
Sweeps:
- Live open issues: latest 20 at 2026-10-12T12:43Z, plus milestone v13.3's open list. No cut ticket.
- A2A: no 13.3 cut claim.
- Own assignments: #19637 covers the tooling, not the cut.
unowned-rationale: the cut runs when milestone v13.3 is ready; whoever runs it self-assigns, and the merge stays the operator's.
Origin Session ID: 02040656-932a-48c8-8894-6f43d0368663
Context
#19637 changes how the Engine is released. The old flow pushed straight to
devand needed a ruleset bypass. Nowpublish.mjs prepareopens a release PR, the operator merges it once its required checks pass, andpublish.mjs finishsquashes the merge ontomainand creates the GitHub release. 13.3.0 (milestone v13.3) is the first cut on that path.This ticket is the cut's record. It is not the release PR's close target. The release PR resolves a preparation leaf filed at cut time, so this record stays open until
finish, npm and the Portal are verified. It owns the real-cut validation that #19637 cannot show before a release exists.The Cut
package.jsonto 13.3.0, and author.github/RELEASE_NOTES/v13.3.0.mdthrough the release-notes epic.node buildScripts/release/publish.mjs prepare --rehearse --ticket <leaf> --body-file <body>prints every gate as โ .node buildScripts/release/publish.mjs prepare --ticket <leaf> --body-file <body>opens the release PR.node buildScripts/release/publish.mjs finish.If a phase stops, re-running the same command continues it.
Acceptance Criteria
dev's required checks and CodeQL, and nothing reacheddevexcept through it. No ruleset bypass was added.finish's squash push tomainsucceeded for the account that ran it, and the GitHub release body ends with the atomic-commit line.npm-publish.ymlpublished 13.3.0 through Trusted Publishing (OIDC), with no token.Out of Scope
The contents of 13.3 (the milestone and roadmap) and the release notes themselves (the release-notes epic).
Related
#19637, #19642 (Engine 13.3 roadmap), #14800 (the 13.2 cut runbook, the last cut on the old path; its package-refresh caveat moved to AC-5)
Sweeps:
unowned-rationale: the cut runs when milestone v13.3 is ready; whoever runs it self-assigns, and the merge stays the operator's.
Origin Session ID: 02040656-932a-48c8-8894-6f43d0368663