From 9090f9112a368259c07c38e0e9f6ba4f5aa2015d Mon Sep 17 00:00:00 2001 From: JUN Date: Tue, 29 Sep 2026 14:57:13 +0900 Subject: [PATCH 1/5] docs(devlog): record the 2.71.0 landing on dev --- .../260929_release_2_71_0/032_wp3_results.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 devlog/_plan/260929_release_2_71_0/032_wp3_results.md diff --git a/devlog/_plan/260929_release_2_71_0/032_wp3_results.md b/devlog/_plan/260929_release_2_71_0/032_wp3_results.md new file mode 100644 index 0000000000..1affb33855 --- /dev/null +++ b/devlog/_plan/260929_release_2_71_0/032_wp3_results.md @@ -0,0 +1,18 @@ +# 032 wp3 results: landed on dev + +| Step | Evidence | +|---|---| +| Screenshots | pr-assets 947e869c8b (`260929-release-2-71-0/request-pacing.png`, `cursor-installer.png`), fast-forward from ea1749154d | +| PR | #6224 `chore(release): integrate six reviewed PRs for 2.71.0`, head dcfbb2f708 | +| PR-event CI | Cross-platform CI 36525839698 success; Service lifecycle 36525839767 success; React Doctor 36525839694, PR hygiene, Enforce PR target branch success | +| Full-lane CI | Cross-platform CI workflow_dispatch 36526719414 (lane all) success: 39 jobs success, 1 skipped; includes windows 1/9-9/9 (the pull_request event skips the Windows matrix, ci.yml:835-839) and macos control | +| Head totals | 80 check-runs: 74 success, 6 skipped by design, 0 failed | +| Policy | `scripts/ci/assert-mergeable-review.sh --maintainer-integration 6224`: OK; decision recorded in PR comment 5884552184 | +| Merge | `gh pr merge 6224 --admin --merge --match-head-commit dcfbb2f708` -> dev d161c0e83e; all six land commits and four fixes are ancestors of dev | +| Source PRs | #6206 #6201 #6209 #6094 #5905 #6198 closed with a comment naming the land commit; issue #6208 closed with the #6209 commit | + +Note: windows 8/9 passed in 36526719414, including the 32-profile transaction case that failed +the dev tip in 36499924172, now under BULK_DURABLE_IO_BUDGET_MS. + +Candidate for 040: dev d161c0e83e (version sources 2.71.0). + From 23a04c77aea4589a687a89db420b7e0840108d5e Mon Sep 17 00:00:00 2001 From: JUN Date: Tue, 29 Sep 2026 15:00:54 +0900 Subject: [PATCH 2/5] docs(devlog): script the 2.71.0 release --- .../041_wp4_execution.md | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 devlog/_plan/260929_release_2_71_0/041_wp4_execution.md diff --git a/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md b/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md new file mode 100644 index 0000000000..5b1511dfec --- /dev/null +++ b/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md @@ -0,0 +1,58 @@ +# 041 wp4 execution: release 2.71.0 + +Previous D (wp3): #6224 merged, dev d161c0e83e; final CI green including windows 1-9. Direction +unchanged: release that candidate exactly as 040 (same shape as 2.70.0: #6211/#6212/#6213). + +Revalidated at wp4 P: dev d161c0e83e (package 2.71.0), preview aa3a8dda16 (2.70.0-preview.20260929), +main 53834ff47b (2.70.0); npm latest=2.70.0, preview=2.70.0-preview.20260929. Candidate C = +d161c0e83ea8a88027b2cef28c125ff3c1f29f8a. + +## Order and parallelism + +1. Pre-move dispatch (runs on GitHub, ~1 min): + `gh workflow run dev-version-bump.yml -R lidge-jun/opencodex --ref main -f intended-version=2.71.0 -f mode=pre-move` + -> PR `codex/dev-version-2.72.0`. Accept only if its files are exactly the four version sources and + each reads 2.72.0. Its PR CI runs while steps 2-3 proceed; merge it (`--admin --squash + --match-head-commit`, as #6213) once its Cross-platform CI and gates are green. It must be merged + before any release dispatch (release.yml preflight refuses until dev outranks 2.71.0). +2. Preview branch (managed worktree, clean tree): + ```sh + git switch -c codex/promote-preview-2.71.0 d161c0e83ea8a88027b2cef28c125ff3c1f29f8a + git merge -s ours refs/remotes/canon/preview -m "Merge preview into 2.71.0-preview.20260929 promotion" + bun scripts/release-version-sources.ts sync 2.71.0-preview.20260929 + git commit -am "chore(release): 2.71.0-preview.20260929" + git diff --name-only d161c0e83e HEAD # must list exactly the four version sources + bun scripts/release-version-sources.ts # check mode: all sources 2.71.0-preview.20260929 + ``` + Push, PR to preview titled "release: 2.71.0-preview.20260929", body as #6211 (plus the two + pr-assets screenshots because the union touches gui/), merge with `--admin --merge + --match-head-commit`. +3. Main branch: + ```sh + git switch -c codex/promote-main-2.71.0 d161c0e83ea8a88027b2cef28c125ff3c1f29f8a + git merge -s ours refs/remotes/canon/main -m "Merge main into 2.71.0 promotion" + git diff --quiet d161c0e83e HEAD # tree equals the candidate + ``` + Push, PR to main titled "release: 2.71.0", body as #6212 plus screenshots, merge the same way. +4. Gate per promotion SHA (the merge commits on preview and main): push-event Cross-platform CI and + Service lifecycle both `success` (release.yml checks both). A red run is diagnosed; a flake with + evidence may be rerun once; a real defect is fixed on dev and re-promoted. +5. Dispatch, preview first: + `gh workflow run release.yml -R lidge-jun/opencodex --ref preview -f version=2.71.0-preview.20260929 -f tag=preview -f dry-run=false -f expected-sha=` + then after it succeeds: + `gh workflow run release.yml -R lidge-jun/opencodex --ref main -f version=2.71.0 -f tag=latest -f dry-run=false -f expected-sha=
` + On a failure after npm acknowledged publication: same inputs plus `-f resume-after-npm-publish=true`. +6. Verify: `npm view @bitkyc08/opencodex dist-tags --json` (latest=2.71.0, preview=2.71.0-preview.20260929), + `npm view @bitkyc08/opencodex@2.71.0 gitHead` = main merge sha, `gh release view v2.71.0` (not + prerelease, asset count as v2.70.0 = 25), `gh release view v2.71.0-preview.20260929` (prerelease), + latest.json from the v2.71.0 release reports 2.71.0 with signed platforms. +7. Outcome: 090_outcome.md, move the unit to devlog/_fin/260929_release_2_71_0, docs PR to dev from + a branch on the pre-moved dev tip; merge after its gates. + +Merging promotion PRs is owner-authorized in this session ("배포까지 완료"). enforce-target flags +promotion PRs as wrong base by design (2.70.0 precedent); that check is not required for preview/main. + +D11 (architect, wp4, ALIGNED): release.yml:847-867 accepts only a push-event ci.yml run on the exact +SHA (a PR run does not count); package.json is in both ci.yml push paths (:51) and +service-lifecycle.yml push paths (:19), so both gating runs fire on each promotion merge commit; +release-preflight.sh enforces dev strictly ahead, so the pre-move PR merges first. From da24e74b08b9c6e349489d15bbdba793c13863f4 Mon Sep 17 00:00:00 2001 From: JUN Date: Tue, 29 Sep 2026 15:06:36 +0900 Subject: [PATCH 3/5] docs(devlog): fold the 2.71.0 release audit --- devlog/_plan/260929_release_2_71_0/040_release.md | 5 ++--- devlog/_plan/260929_release_2_71_0/041_wp4_execution.md | 5 +++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/devlog/_plan/260929_release_2_71_0/040_release.md b/devlog/_plan/260929_release_2_71_0/040_release.md index aa108ce81b..174aa21149 100644 --- a/devlog/_plan/260929_release_2_71_0/040_release.md +++ b/devlog/_plan/260929_release_2_71_0/040_release.md @@ -7,8 +7,8 @@ that merge commit is informative; the gating runs are on the promotion SHAs. 1. Pre-move dev: `gh workflow run dev-version-bump.yml --ref main -f intended-version=2.71.0 -f mode=pre-move`; the opened PR must change only the four version sources to 2.72.0 (package.json, - desktop/src-tauri/Cargo.toml, Cargo.lock, tauri.conf.json); merge it with --admin --merge - --match-head-commit. + desktop/src-tauri/Cargo.toml, Cargo.lock, tauri.conf.json); merge it with --admin --squash + --match-head-commit (as #6213). 2. Preview: branch `codex/promote-preview-2-71-0` from the candidate, `git merge -s ours origin/preview`, `bun scripts/release-version-sources.ts sync 2.71.0-preview.20260929`, commit, PR to preview, merge commit. Wait for push-event Cross-platform CI and Service lifecycle success on the @@ -28,4 +28,3 @@ Guards: verify preview tree differs from candidate only in the four version sour equals the candidate. A failing promotion run is fixed through dev and re-promoted. If a release run fails after npm acknowledged publication, re-dispatch with resume-after-npm-publish=true and the same expected-sha; never republish. - diff --git a/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md b/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md index 5b1511dfec..f1db2d5025 100644 --- a/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md +++ b/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md @@ -13,8 +13,9 @@ d161c0e83ea8a88027b2cef28c125ff3c1f29f8a. `gh workflow run dev-version-bump.yml -R lidge-jun/opencodex --ref main -f intended-version=2.71.0 -f mode=pre-move` -> PR `codex/dev-version-2.72.0`. Accept only if its files are exactly the four version sources and each reads 2.72.0. Its PR CI runs while steps 2-3 proceed; merge it (`--admin --squash - --match-head-commit`, as #6213) once its Cross-platform CI and gates are green. It must be merged - before any release dispatch (release.yml preflight refuses until dev outranks 2.71.0). + --match-head-commit`, as #6213) once its Cross-platform CI and gates are green. It is merged + before any release dispatch; the stable dispatch strictly requires it (release-preflight.sh + assert-ahead), and doing it first for both keeps one order. 2. Preview branch (managed worktree, clean tree): ```sh git switch -c codex/promote-preview-2.71.0 d161c0e83ea8a88027b2cef28c125ff3c1f29f8a From b071c32387b34610fd646756f941af5c04d8ac72 Mon Sep 17 00:00:00 2001 From: JUN Date: Tue, 29 Sep 2026 16:10:11 +0900 Subject: [PATCH 4/5] docs(devlog): record the 2.71.0 release outcome --- .../260929_release_2_71_0/090_outcome.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 devlog/_plan/260929_release_2_71_0/090_outcome.md diff --git a/devlog/_plan/260929_release_2_71_0/090_outcome.md b/devlog/_plan/260929_release_2_71_0/090_outcome.md new file mode 100644 index 0000000000..f3bd2a59d2 --- /dev/null +++ b/devlog/_plan/260929_release_2_71_0/090_outcome.md @@ -0,0 +1,38 @@ +# 090 Outcome: 2.71.0 released + +Published 2026-09-29 (KST). GitHub releases `v2.71.0` and `v2.71.0-preview.20260929` exist with 25 +assets each; npm accepted both publications with signed provenance. + +Six reviewed PRs landed on dev with author credit, the Windows timeout that had turned the dev tip +red was fixed, and the whole set was released as 2.71.0 and 2.71.0-preview.20260929. + +| Step | Evidence | +|---|---| +| Integration | #6224 merged to dev as d161c0e83e (merge commit). Land commits: df951bc2ee #6206 (Ingwannu), 6d7af977a4 #6201 (luvs01), 21ccf35dbe #6209 (Jio Kim), e3fcf3e43c #6094 (Brad Hallett), 2b0ac07170 #5905 (halysondev), febc16d2a4 #6198 (luvs01); follow-ups 9155880950, 7b875559dd, 917db156de, 441aeb179e. Details in 032. | +| Local regression | 022: all gates exit 0; full-suite failures proven pre-existing at dev 37ad7e771b. | +| Final CI | #6224 head dcfbb2f708: Cross-platform CI pull_request 36525839698, workflow_dispatch lane=all 36526719414 (windows 1-9), Service lifecycle 36525839767, all success; 0 failed check-runs. | +| dev pre-move | Dev version bump run 36529404555 opened #6226; its PR checks were approval-gated (bot-authored, as #6213), so the version tests and typecheck ran locally on its head 316750815c (209 pass) before `--admin --squash`; dev 69ce312097 reads 2.72.0. | +| Preview | #6227 merged as fd346e2489 (tree = candidate + four version sources at 2.71.0-preview.20260929). Push Cross-platform CI 36529530341 and Service lifecycle 36529530333 success. Release run 36531705017 success; npm `preview=2.71.0-preview.20260929`, gitHead fd346e2489, provenance attestation present. | +| Stable | #6228 merged as 8a005dd98f (tree equal to the candidate). Push Cross-platform CI 36529537253 and Service lifecycle 36529537201 success. Release run 36533478070 success; npm publish acknowledged (`+ @bitkyc08/opencodex@2.71.0`, sigstore log 2995422874); GitHub release `v2.71.0` not prerelease, 25 assets; latest.json reports 2.71.0 with 5 signed platforms. | +| Source PRs | #6206 #6201 #6209 #6094 #5905 #6198 closed with landing comments; issue #6208 closed. | + +## Notes + +- The pull_request event skips the Windows matrix (ci.yml:835-839); a workflow_dispatch run on the + integration head covered windows 1-9 before merge. +- The promotion PRs' own pull_request CI runs (36529486815, 36529483354) were cancelled to free + runners after both promotions merged; the push runs on the same trees gate the release. +- The registry smoke step warned on both releases because npm took a few minutes to serve the new + versions; no republish was attempted. +- The installed proxy, service and desktop app on this machine were not updated. + +## What did not improve / open follow-ups + +- Local full `bun run test` on a loaded macOS host is not a clean signal: a claude-integration + server test can hang and cascade into `SpendLedgerOwnerError` for the rest of its worker, and + `tests/service/shutdown-launcher.test.ts` fails and leaves orphan proxies. Both reproduce at dev + 37ad7e771b; they deserve their own issue. +- Optional hardening noted by reviewers and not built here: a response-size cap and redirect policy + for the Cursor manifest fetch (#5905), strict single-[3] TBS parsing in picker-ca (#6201), extra + subprocess tests for #6209, localized copies of the cli.md priority note. + From b313a8408859af19aefd68d68cc41e3e2d78665e Mon Sep 17 00:00:00 2001 From: JUN Date: Tue, 29 Sep 2026 16:10:11 +0900 Subject: [PATCH 5/5] docs(devlog): close the 2.71.0 release unit --- devlog/{_plan => _fin}/260929_release_2_71_0/000_plan.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/001_consultation.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/010_integration.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/011_wp1_execution.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/020_verification.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/021_wp2_execution.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/022_wp2_results.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/030_land.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/031_wp3_execution.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/032_wp3_results.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/040_release.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/041_wp4_execution.md | 0 devlog/{_plan => _fin}/260929_release_2_71_0/090_outcome.md | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename devlog/{_plan => _fin}/260929_release_2_71_0/000_plan.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/001_consultation.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/010_integration.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/011_wp1_execution.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/020_verification.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/021_wp2_execution.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/022_wp2_results.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/030_land.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/031_wp3_execution.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/032_wp3_results.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/040_release.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/041_wp4_execution.md (100%) rename devlog/{_plan => _fin}/260929_release_2_71_0/090_outcome.md (100%) diff --git a/devlog/_plan/260929_release_2_71_0/000_plan.md b/devlog/_fin/260929_release_2_71_0/000_plan.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/000_plan.md rename to devlog/_fin/260929_release_2_71_0/000_plan.md diff --git a/devlog/_plan/260929_release_2_71_0/001_consultation.md b/devlog/_fin/260929_release_2_71_0/001_consultation.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/001_consultation.md rename to devlog/_fin/260929_release_2_71_0/001_consultation.md diff --git a/devlog/_plan/260929_release_2_71_0/010_integration.md b/devlog/_fin/260929_release_2_71_0/010_integration.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/010_integration.md rename to devlog/_fin/260929_release_2_71_0/010_integration.md diff --git a/devlog/_plan/260929_release_2_71_0/011_wp1_execution.md b/devlog/_fin/260929_release_2_71_0/011_wp1_execution.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/011_wp1_execution.md rename to devlog/_fin/260929_release_2_71_0/011_wp1_execution.md diff --git a/devlog/_plan/260929_release_2_71_0/020_verification.md b/devlog/_fin/260929_release_2_71_0/020_verification.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/020_verification.md rename to devlog/_fin/260929_release_2_71_0/020_verification.md diff --git a/devlog/_plan/260929_release_2_71_0/021_wp2_execution.md b/devlog/_fin/260929_release_2_71_0/021_wp2_execution.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/021_wp2_execution.md rename to devlog/_fin/260929_release_2_71_0/021_wp2_execution.md diff --git a/devlog/_plan/260929_release_2_71_0/022_wp2_results.md b/devlog/_fin/260929_release_2_71_0/022_wp2_results.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/022_wp2_results.md rename to devlog/_fin/260929_release_2_71_0/022_wp2_results.md diff --git a/devlog/_plan/260929_release_2_71_0/030_land.md b/devlog/_fin/260929_release_2_71_0/030_land.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/030_land.md rename to devlog/_fin/260929_release_2_71_0/030_land.md diff --git a/devlog/_plan/260929_release_2_71_0/031_wp3_execution.md b/devlog/_fin/260929_release_2_71_0/031_wp3_execution.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/031_wp3_execution.md rename to devlog/_fin/260929_release_2_71_0/031_wp3_execution.md diff --git a/devlog/_plan/260929_release_2_71_0/032_wp3_results.md b/devlog/_fin/260929_release_2_71_0/032_wp3_results.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/032_wp3_results.md rename to devlog/_fin/260929_release_2_71_0/032_wp3_results.md diff --git a/devlog/_plan/260929_release_2_71_0/040_release.md b/devlog/_fin/260929_release_2_71_0/040_release.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/040_release.md rename to devlog/_fin/260929_release_2_71_0/040_release.md diff --git a/devlog/_plan/260929_release_2_71_0/041_wp4_execution.md b/devlog/_fin/260929_release_2_71_0/041_wp4_execution.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/041_wp4_execution.md rename to devlog/_fin/260929_release_2_71_0/041_wp4_execution.md diff --git a/devlog/_plan/260929_release_2_71_0/090_outcome.md b/devlog/_fin/260929_release_2_71_0/090_outcome.md similarity index 100% rename from devlog/_plan/260929_release_2_71_0/090_outcome.md rename to devlog/_fin/260929_release_2_71_0/090_outcome.md