Skip to content

fix(opencode): qualify 2.0.15 and preserve generated proxy URLs - #752

Merged
pascalandr merged 6 commits into
devfrom
chore/qualify-opencode-2.0.14
Sep 23, 2026
Merged

pascalandr merged 6 commits into
devfrom
chore/qualify-opencode-2.0.14

Conversation

@pascalandr

@pascalandr pascalandr commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

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 Error instances while preserving native _tag/data. The regression checks the actual new error representation. Undeclared HTTP statuses still use UnexpectedStatus.

Compatibility policy and migrations

  • Retain 2.0.7 as the demonstrated native-timestamp minimum. Older compatible releases stay usable; recommendation/update availability are separate from admission.
  • Keep explicit daemon restart separate from installation. No shared service was restarted by this work.
  • Preserve historical credential fields and separately validate additive method: "key" metadata, correcting the identical migration assertion previously seen on Linux, Windows and macOS.
  • Update the existing compatibility reference and architecture guidance in place. Preserve authentication, ownership, connection fences, proxy allowlisting and historical storage validation.

Validation

Windows, isolated Node 24.20.0 and synthetic storage/daemons:

  • 85 server tests pass (compatibility, runtime admission, setup/update and proxy).
  • 65 UI tests pass (generated proxy client, scheduling, error handling, session sends, runtime contract and settlement history).
  • Server/UI/Electron typechecks and production server/UI/plugin builds pass.
  • Native migration, runtime suites, setup browser and desktop build results are recorded in the follow-up qualification comment on this PR.

The earlier 2.0.14 qualification at 23360d31 passed 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.ts search 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.

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.
@pascalandr

Copy link
Copy Markdown
Contributor Author

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.
@pascalandr pascalandr changed the title chore(opencode): qualify 2.0.14 with the existing 2.0.7 minimum fix(opencode): qualify 2.0.15 and preserve generated proxy URLs Sep 23, 2026
@pascalandr

Copy link
Copy Markdown
Contributor Author

Completed 2.0.15 qualification (Windows, isolated fixtures)

  • Native suites pass on both 2.0.7 and 2.0.15 with the 2.0.15 client/plugin: automation and daemon discovery, provisioning/heartbeats, real proxy instructions/prompts/commands/session Shell, permissions/Forms, ownership/worktrees, history queries/windows, pruning/concurrency/restart, per-send environment, inclusive forks and idle/busy /btw.
  • All four historical migrations pass: 2.0.3 and beta-19271 to each of 2.0.7 and 2.0.15.
  • 85 server tests and 65 UI integration/unit tests pass. The generated-client test fails before the URL adaptation with duplicated deployment/workspace prefixes and passes afterward; declared native Error fields remain available.
  • 12 setup browser scenarios pass, including unsupported-runtime recovery without mutation replay.
  • The additional shared-background-budget regression and all 4 auth-recovery browser scenarios pass, including upstream 401 separation, after updating their synthetic URLs to the current client contract.
  • Server/UI/Electron typechecks, production server/UI/plugin bundles and the Windows Tauri release build pass. Packaged-resource checks pass with bundled Node 24.20.0.

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 packages/tauri-app/target/release/codenomad-tauri.exe in the qualification worktree. This is build/resource evidence, not an installed-app replacement or verification of the user's #750 reproduction. No shared daemon was restarted. Linux/macOS qualification remains for CI.

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.
@pascalandr

Copy link
Copy Markdown
Contributor Author

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.

@pascalandr

Copy link
Copy Markdown
Contributor Author

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.
@pascalandr

Copy link
Copy Markdown
Contributor Author

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.

@pascalandr
pascalandr merged commit ea3aeb9 into dev Sep 23, 2026
12 of 14 checks passed
@pascalandr
pascalandr deleted the chore/qualify-opencode-2.0.14 branch September 23, 2026 10:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Every message send fails with UnexpectedStatus — proxied DELETE …/instructions/entries/codenomad.voice-mode returns 500

1 participant