fix(opencode): qualify 2.0.15 and preserve generated proxy URLs - #752
Conversation
Align server/UI client and bundled plugin dependencies with the recommended 2.0.14 runtime. Older technically compatible daemons remain usable and installation never implies a shared-service restart. Preserve complete historical credential comparisons while separately validating additive native key-method metadata. This unblocks the identical migration assertion seen in Linux, Windows and macOS CI without weakening identity, history, provider configuration or ownership checks. Validate four isolated Windows historical migrations and the native automation, proxy, worktree, history/pruning, environment, fork and aside suites on both 2.0.7 and 2.0.14. Server tests (85), UI tests (60), setup browser scenarios (12), typechecks and production bundles pass. Document pending cross-platform CI and existing browser search fixture failures in the shared qualification reference.
|
Additional local validation: the Windows Tauri release build completed successfully with npm run build --workspace @codenomad/tauri-app -- --no-bundle. Packaged server static checks, bundled Node 24.20.0, dependency imports and loading-asset references also passed. The build contains merged #751 and qualification head 23360d3. This is build/resource evidence; the installed desktop application has not been replaced or restarted. |
Advance the aligned client/plugin pins and recommendation to 2.0.15 while retaining the evidence-based 2.0.7 minimum and explicit runtime activation. The generated Promise client now preserves base URL path prefixes. Remove CodeNomad's prefix-repair workaround, which a real-client regression showed would duplicate workspace and deployment prefixes. Continue classifying prefixed API paths for foreground priority and the shared background catalogue budget. Preserve native declared Error fields and update the setup fixture to supply the current generated request shape. Local server/UI/Electron typechecks, production bundles, 85 server tests, 65 UI tests, 12 setup browser scenarios and historical migrations pass. Full isolated minimum/latest native suites and the Windows Tauri build are being recorded separately on the qualification PR. Keep issue 750 open: the upstream changes do not prove resolution of its existing pre-forward failure.
Remove the environment fixture's duplicate prefix-repair transport and update synthetic recovery/background requests to the generated client's prefixed URL contract. Retain the real manager, ownership checks and native shell execution in the environment fixture. Complete native automation, proxy/history/pruning, environment, fork and aside coverage on isolated 2.0.7 and 2.0.15 daemons. All four historical migrations pass. The additional background-budget regression and four auth-recovery browser cases also pass; Windows Tauri and packaged-resource checks succeed. Record these results in the shared qualification reference while keeping issue 750 and cross-platform CI verification separate.
Completed 2.0.15 qualification (Windows, isolated fixtures)
The native environment fixture initially failed with HTTP 403 on both runtimes because it had its own copy of the obsolete prefix-repair fetch wrapper. Removing that wrapper lets the pinned generated client supply the full proxy URL. The environment stage and previously unexecuted fork/aside stages then pass on both runtimes. Earlier passing native stages were not unnecessarily repeated. The Tauri executable was rebuilt at |
Bring the merged blank-session cleanup and its native fixture into the qualification branch. The pull-request workflow is evaluated from the merge ref but checks out the branch head; without this reconciliation both runtime matrix jobs call a script absent from the tested checkout. Validate the real cleanup fixture against isolated OpenCode 2.0.7 and 2.0.15 with the aligned 2.0.15 client, retaining populated native history and deleting only genuinely empty sessions. No shared service or user storage is used.
Record successful native historical migrations on Linux, Windows and macOS, and passing native pruning/UI coverage on Linux and macOS. Distinguish the Windows runtime jobs that completed native scenarios before the missing merged-dev fixture from the unexplained Windows pruning/UI process exit. Keep remaining CI gates explicit instead of presenting local or other-platform results as proof of the failing job.
|
Follow-up at cdfec0d: merged current dev (including #755) into this branch. In run 35848468936 both runtime jobs passed the native 2.0.7/2.0.15 scenarios but then failed because the merge-ref workflow called test-blank-session-cleanup-native.mjs while checkout explicitly used the older PR head. The fixture is now present, and its real native cleanup checks pass locally on both isolated runtimes with the 2.0.15 client. Historical migrations now pass in CI on Linux, Windows and macOS; native pruning/UI passes on Linux and macOS. The separate Windows pruning/UI process exited with no exception diagnostic; investigating locally, so that job is not yet claimed as qualified. Independent gatekeeper review is underway. |
|
Independent gatekeeper review of d7d9ee3 against the original base completed with zero actionable findings. The reviewer independently passed 28 focused tests and generated-client checks for prefix handling without a trailing slash, declared 404 error identity, undeclared 500 responses, and no request replay. No CodeNomad PTY-connect consumer requires an upstream WebSocket helper adaptation. Follow-up: the Windows native pruning/UI abrupt exit is now reproducible locally on Node 24.20.0 (the same scenario passes on Node 25.2.1); startup diagnostics are being added to locate it. The general browser CI failure remains the two previously identified system-message search fixture timeouts. |
Print bounded startup milestones before loading browser dependencies, production routes, the isolated broker and Vite. Windows CI and one local Node 24.20.0 run exited abruptly without a JavaScript diagnostic, so these phases identify how far a future failing fixture got. The instrumented Node 24.20.0 rerun passes the complete native/UI suite on isolated OpenCode 2.0.15, including busy refusal, single/group/session cleanup, persistence and reload. Record the intermittent exit without claiming a root-cause fix. Independent gatekeeper follow-up reports zero actionable findings.
|
Final follow-up at d663b1b: the complete instrumented native pruning/UI suite now passes locally under the CI Node version, 24.20.0, with isolated OpenCode 2.0.15. It covers busy refusal, single tool/reasoning deletion, cross-message group deletion, response and whole-session cleanup, persistence/reload, plugin lifecycle, concurrency and restart. The earlier abrupt Windows exit remains unexplained and intermittent; the five startup milestones are retained for the next CI occurrence rather than presented as a root-cause fix. A second independent gatekeeper review of the dev reconciliation, diagnostics and evidence updates reports zero actionable findings. No installed desktop or shared daemon was restarted. Current cross-platform migration evidence and the known system-message browser fixture timeouts are documented above. |
Summary
Advance this qualification PR from OpenCode 2.0.14 to 2.0.15, retaining the technical minimum 2.0.7. Align server/UI client, bundled plugin and recommended runtime together. The existing 2.0.14 migration correction remains included.
Required 2.0.15 client adaptation
Upstream #50428 makes the generated Promise client preserve the base URL path prefix. CodeNomad's old prefix-repair fetch wrapper would duplicate
/workspaces/:id/instance/. Remove that workaround and forward the generated request unchanged. Strip the prefix only for foreground/background read scheduling.A real generated-client regression reproduced the duplicated prefix before the fix, then verifies exact voice DELETE and placement PUT paths, including an extra deployment prefix. Scheduling tests retain shared catalogue limits, foreground dispatch and cancellation. The setup browser fixture now supplies the prefixed request produced by the current client.
Upstream #50788 wraps declared API failures in
Errorinstances while preserving native_tag/data. The regression checks the actual new error representation. Undeclared HTTP statuses still useUnexpectedStatus.Compatibility policy and migrations
method: "key"metadata, correcting the identical migration assertion previously seen on Linux, Windows and macOS.Validation
Windows, isolated Node 24.20.0 and synthetic storage/daemons:
The earlier 2.0.14 qualification at
23360d31passed four migrations, the native suites on 2.0.7/2.0.14, 12 setup browser scenarios and a Windows Tauri release build. Those are historical results, not substitutes for the new 2.0.15 runs.#750 and validation boundaries
This PR does not claim to resolve #750's remaining send failure. The user reproduced it with #751 loaded, before CodeNomad forwards the request. The 2.0.15 prefix adaptation prevents a new client-upgrade regression; it does not establish the cause of that existing pre-forward HTTP 500. Updating only the OpenCode CLI also cannot update CodeNomad's bundled client. Keep #750 open until its concrete desktop reproduction passes.
Fresh Linux/macOS migration completion remains a CI gate. The two pre-existing
system-messages.test.tssearch timeouts were reproduced during the 2.0.14 qualification; that synthetic browser fixture stubs APIs with{}without providing the bounded history-query contract. They are not native-runtime evidence. No continuous CI monitoring is performed.