chore: back-merge main + bump version to 4.2.11 (unblocks release PR #1006) - #1007
Conversation
Update main to latest release
v4.1.3 release
Release v4.2.0
Release v4.2.1 — File → Open menu fix
Release v4.2.2 — alias-architecture rollup + transpiler toggle
…Buffer bug) v4.2.2's release run failed only on the Windows-ARM64 job with: gyp ERR! find VS Failure details: RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER] Error: Could not find any Visual Studio installation to use node-gyp failed to rebuild '@serialport/bindings-cpp' Direct comparison of runner images between releases: v4.2.1 (Jun 7, SUCCESS): Image: windows-2025 (VS 2022) v4.2.2 (Jun 8, FAILURE): Image: windows-2025-vs2026 (VS 2026) Same Windows Server 2025 OS, different Visual Studio version. `windows-latest` rotated forward to the `windows-2025-vs2026` image variant on Jun 8. VS 2026's `vswhere`/PowerShell enumeration emits enough metadata that the child_process stdout read in node-gyp's VS-finder overflows its 200 KB default buffer with `RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]`. node-gyp then reports "Could not find any Visual Studio installation," even though VS 2026 is fully installed on the runner. The ARM64 cross-compile of `@serialport/bindings-cpp` is the only path that hits this in the current build — Windows-x64 succeeded on the same v4.2.2 run because its native (non-cross-compile) build invokes a simpler node-gyp code path that doesn't enumerate VS the same way. Re-running the failed Win-ARM64 job reproduces deterministically; not a flake. This commit pins BOTH Windows jobs to `windows-2025` (the image that produced v4.2.0 / v4.2.1 successfully). Defensive: the Win-x64 job worked on `windows-latest = windows-2025-vs2026` today but the underlying VS 2026 maxBuffer issue could trip it on a future runner rotation (a fresh node-gyp/electron-builder release, a different native module, etc.). Pinning both today is cheaper than debugging the same class of failure again in a few months. When node-gyp / electron-builder ship a fix for the VS 2026 maxBuffer issue we can revert both to `windows-latest`. The tag `v4.2.2` will need to be re-cut to a commit that includes this workflow file — release workflow files are resolved at the tag's commit, so re-running the existing failed workflow would use the same (broken) workflow definition. Plan: land this on main, force-update v4.2.2 to the new merge commit, push the tag. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ci(release): pin Windows runners to windows-2025 (VS 2026 maxBuffer bug)
…no longer means VS 2022) The previous pin to `windows-2025` did not help — GitHub has rebound the `windows-2025` label to the `win25-vs2026` runner-images branch (VS 2026), same as `windows-latest`. Verified by an explicit `runs-on: windows-2025` resolving to `Image: windows-2025-vs2026` in the v4.2.2 re-cut release run and failing identically with the same maxBuffer error. v4.2.1's successful build ran on `Image: windows-2025` AT A TIME when that label pointed at the `win25` branch (with VS 2022). That branch is no longer reachable via a runner label — only `windows-2022` (Windows Server 2022 + VS 2022) still ships VS 2022 on a GitHub-hosted image. The pin moves both Windows jobs to `windows-2022`. This is a more conservative environment (older Windows OS too, not just older VS) but it's the only GitHub-supported label that avoids VS 2026's `vswhere`/PowerShell-output maxBuffer overflow on node-gyp's VS finder. When node-gyp / electron-builder ship a fix for the VS 2026 issue we can revert to `windows-latest`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ci(release): pin Windows runners to windows-2022 (the previous pin to windows-2025 didn't help)
dev to main
release: promote development to main (v4.2.4)
Release v4.2.3
dev to main
release: development → main (v4.2.6)
Release v4.2.7: USB-CDC Modbus framing fix + OPC-UA canonical contract
release(desktop): 4.2.8 — location-warning + alias-clear fix
Promote development → main (shared-surface parity, no desktop release)
Promote development → main (APP_VERSION 4.2.8 parity)
Promote development → main (idle re-trigger parity)
Release 4.2.9
Release 4.2.10
Release 4.2.9 (re-cut) — byte IEC locations + %MX fix
`main` carried 27 commits that never came back down to `development`: the merge commits GitHub created for every past release PR, plus two CI hotfixes committed directly on `main`. That left `development` BEHIND `main`, and `main`'s protection has "require branches to be up to date" with admin enforcement — so release PR #1006 could not merge. The only file with real content to bring back is `.github/workflows/release.yml`: the `windows-2022` pin for both Windows release jobs (35d8b90, 6c86e0b) was a direct hotfix on `main` and never reached `development`, which still had both jobs on `windows-latest`. Merging #1006 without this back-merge would have reverted the pin and broken the v4.2.11 Windows ARM64 build on VS 2026's node-gyp maxBuffer bug. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
WalkthroughThe release workflow pins Windows x64 and ARM64 build jobs to ChangesRelease updates
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Carried into the release PR itself so #1006 promotes the correct version to `main`, instead of needing a second PR after the fact. `APP_VERSION` is the single source of truth the About modal renders, and is byte-compared against openplc-web by the mirror gate — the identical edit lands there in Autonomy-Logic/openplc-web#667. `package.json.version` is what electron-builder stamps on the desktop binary and what the `v4.2.11` tag must match, so it is kept equal. Shipping only the package.json half is what left About showing 4.2.6 on the 4.2.7 and 4.2.8 releases. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Gustavohsdp
left a comment
There was a problem hiding this comment.
Approved — release plumbing, CI green.
Checked the one thing that matters here per CLAUDE.md: APP_VERSION and package.json.version are both 4.2.11, so the About dialog won't lag the binary the way 4.2.7/4.2.8 did.
Reminder for the release: package.json.version needs the same value in openplc-web, and the tag v4.2.11 goes on the editor's main to trigger the build.
Two changes that both need to land on
developmentbefore release PR #1006 can merge correctly.1. Back-merge
main— unblocks #1006#1006 (
development→main, 4.2.11) is approved with all checks green but cannot merge: GitHub reportsmergeStateStatus: BEHIND.main's protection setsrequired_status_checks.strict: true("require branches to be up to date") withenforce_admins: true, so it cannot be clicked through.developmentwas 124 commits ahead ofmainbut also 27 commits behind it — the merge commits GitHub created onmainfor every past release PR (#459 … #964, plus the v4.2.10 merge), plus two CI hotfixes committed directly onmain.A PR with
head: mainwould not work:development's protection is alsostrict, so such a PR would itself be BEHIND. Hence this branch, which contains development's tip and mergesmaininto it.The one real content change is
.github/workflows/release.yml(+28/-2): thewindows-2022pin for both Windows release jobs (35d8b90, 6c86e0b). That pin was a direct hotfix onmainand never reacheddevelopment, which still had both jobs onruns-on: windows-latest. It works around VS 2026'svswhereoutput overflowing node-gyp's stdout buffer (ERR_CHILD_PROCESS_STDIO_MAXBUFFER), which breaks the ARM64 cross-compile of@serialport/bindings-cpp.Merging #1006 without this back-merge would have reverted the pin on
mainand broken the v4.2.11 Windows ARM64 release build. No conflicts — verified withgit merge-tree --write-treebeforehand, and the real merge touched only that file.2. Version bump to 4.2.11
Carried here so #1006 promotes the correct version to
mainrather than needing a second PR after the tag.src/frontend/data/constants/app-version.tsAPP_VERSION— what the About modal renderspackage.jsonv4.2.11tag must matchShipping only the
package.jsonhalf is what left About showing 4.2.6 on the 4.2.7 and 4.2.8 releases, so both move together.Other
4.2.10occurrences in the tree are deliberately untouched — they are semver-comparison fixtures insemver.test.ts/runtime-version-gate.test.tsusing it as an arbitrary version, not the app version.Mirror gate
APP_VERSIONlives undersrc/frontend/, sosync / Shared Surface Syncbyte-compares it against openplc-web. The identical edit is in Autonomy-Logic/openplc-web#667 (basedevelopment).Verified locally:
app-version.tsis byte-identical across both branches (matching md5) andcompare-surfaces.pyreportsmatch: True, total_diffs: 0.The sync gate compares against web at
pull_request.base.ref, then — on mismatch — passes if an open web PR targeting that same base makes the surfaces match. So this PR's sync check is satisfied by web#667 while it is still open, and fully satisfied once it merges.Merge order
developmentdevelopmentv4.2.11on editormaindevelopment→mainPR must be open (or merged), otherwise #1006's own sync check compares editordevelopmentat 4.2.11 against webmainat 4.2.10 and fails. See the note on #1006.Follow-up
This BEHIND gap is structural: nothing in the release ritual merges
mainback down, so it recurs every release. Either add a back-merge step after each promotion or automate it.🤖 Generated with Claude Code
Summary by CodeRabbit
Bug Fixes
Release