Skip to content

fix(opencode): align client and plugin with 2.0.11 contracts - #728

Merged
pascalandr merged 3 commits into
devfrom
test/opencode-2.0.11-qualification
Sep 20, 2026
Merged

pascalandr merged 3 commits into
devfrom
test/opencode-2.0.11-qualification

Conversation

@pascalandr

@pascalandr pascalandr commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Align the server/UI client and bundled plugin with published OpenCode 2.0.11. Qualification follows the latest stable OpenCode runtime. This supplies runtime qualification evidence for #696 and separately checks the published #723 history work on the target daemon.

Integration changes

  • Pin client/plugin and their OpenCode lockfile dependencies together at 2.0.11.
  • Route canonical server.info() through the authenticated discovery result. Keep 404-only discovery, connection fencing, restricted proxy exposure and no mutation retries.
  • Normalize missing legacy step start timestamps without changing durable identity or precise newer start times.
  • Hide native hidden Forms fields in session/provider-auth controls while preserving defaults and explicit protocol values in answers.
  • Reconcile unsettled tools into the visible bounded transcript after terminal execution, including idle/status events arriving during the asynchronous terminal-state check.
  • Qualify only @opencode/cli@latest in native CI, log the resolved version, and run environment/fork acceptance alongside the native suites. Add focused lifecycle regressions and rendered hidden-Forms coverage.
  • Maintain the shared policy in dev-docs/OPENCODE_V2_COMPATIBILITY.md and architecture/migration references. Detailed results stay in this PR and CI logs; no per-version reports.

Support policy: each CodeNomad release requires at least the latest stable OpenCode version available when that CodeNomad release is published. Record that minimum in its release notes; it remains fixed for that release. Retained compatibility code and historical acceptance results do not imply support for older runtimes. Client/plugin dependencies remain pinned together; native qualification targets latest stable.

Validation

  • Windows x64, repository Node 24.20.0, explicit isolated CLIs and synthetic DBs only.
  • Current client/plugin: native proxy/pruning/location suite passes on 2.0.11, 2.0.5, 2.0.3 and beta-19271; the latter two also exercise legacy identity/pruning.
  • 2.0.11 automation discovery/heartbeat/target-fence suite, per-send environment and message-fork fixtures pass.
  • Published feat(history): add full-history search, cleanup and global timeline navigation #723 at 5b988eca, unchanged client/plugin 2.0.4: native fixture passes on daemon 2.0.11, including 241-message search/count/cleanup and 1,501-message outline/window/restore checks. A combined merge still needs its own rerun.
  • Server/UI typechecks and production server/UI/plugin build pass.
  • 62 focused server tests, 166 UI tests and the rendered hidden-Forms fixture pass. After the lifecycle race fix, all 23 selected lifecycle/status tests pass (including three additional cases).
  • Full server suite: 599 pass / 2 skip / one timing-only Windows spawn failure (<1s assertion, observed ~1.08s under parallel load). The unchanged spawn file passes all 21 tests alone.
  • Gatekeeper review/fix/re-review completed with no remaining blockers.

No shared daemon or user database was used. WSL mounted-config discovery and installed Electron/Tauri release smoke checks remain outside this qualification.

Maintenance note: touched packages/ui/src/stores/session-events.ts is approximately 704 lines; no size-only refactor is included.

Upgrade the shared server/UI client and bundled plugin together while retaining connection-scoped legacy adaptation and historical pruning identities. Canonical server.info follows authenticated discovery, and older step events preserve their original creation timestamp for the current reducer.

Honor hidden native Forms fields without rendering their protocol inputs or dropping defaults from replies. Reconcile unsettled tools into the bounded visible transcript after terminal execution and subsequent idle events, while preserving supersession by a newer execution.

Add 2.0.11 runtime CI coverage, rendered Forms and deferred-lifecycle regressions, and an exact qualification report for dev and published history PR 723. Isolated Windows native acceptance passes on 2.0.11, 2.0.5, 2.0.3 and beta-19271; current automation, environment and forks pass. Typechecks, production build and focused regressions pass. Document the full-server parallel timing failure and successful isolated retry, plus remaining platform qualification boundaries. No shared daemon or user storage is used.
@github-actions

Copy link
Copy Markdown

PR builds are available as GitHub Actions artifacts:

https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/35505688778

Artifacts expire in 7 days.
Artifacts:

  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-tauri-macos-arm64
  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-electron-macos
  • session-pruning-plugin-windows-latest
  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-tauri-linux
  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-tauri-macos
  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-tauri-windows
  • session-pruning-plugin-ubuntu-latest
  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-electron-linux
  • pr-728-33730ac86596bf24015ecba3c72f3fee46cc761c-electron-windows
  • session-pruning-plugin-macos-latest

…loor

Qualify only the latest stable OpenCode runtime in native CI, log the resolved version and run environment and fork checks unconditionally. Each CodeNomad release sets its minimum supported OpenCode version to the latest stable available when that CodeNomad release ships; the floor remains fixed for that release.

Remove the per-version qualification report and keep one shared policy reference. Detailed evidence stays in PR and CI history. Retained compatibility code does not promise support for older runtimes. Validate workflow YAML, latest-runtime configuration, PowerShell script syntax and diff whitespace.
@pascalandr

Copy link
Copy Markdown
Contributor Author

Gatekeeper pass on c338279: server/protocol/dependencies/CI review is clean (17 compatibility tests pass). Independent UI review found a reproducible P2 race in the upgraded native reducer: a deferred terminal-tool history refresh can overwrite a newer streaming assistant, causing subsequent deltas to stop updating the visible transcript. Merge is held while this is fixed and regression-tested, then reviewed again. Current native CI passes on Windows/Linux/macOS, and Tauri checks pass; the general browser suite is still running.

The current native reducer re-reads history when execution settles with unfinished tools. A delayed response could replace its cache after a new assistant starts, leaving the visible transcript unable to apply subsequent deltas.

Fence projection-owned message reads against locally applied session events, retry stale responses serially, and reject pending reads after disposal or instance-generation changes. Keep live reduction and existing bounded rotation/resync authority intact.

Add a regression that defers terminal history across new assistant events, verifies continued streaming and coalesced trailing reads, and covers disposal. Register it in browser-condition CI. All 112 targeted projection/lifecycle/authority/pruning tests pass, with UI typecheck and production build passing.
@pascalandr

Copy link
Copy Markdown
Contributor Author

Gatekeeper loop complete on bda7602. Independent protocol/CI/dependency review is clean. The UI review found one terminal-history streaming race, fixed in bda7602 with deferred-history and disposal regressions. Independent re-review found no remaining actionable findings and reran 36 tests successfully. Final local projection/lifecycle/authority/pruning suite: 112 passed; UI typecheck and production build passed. All test jobs on the preceding head passed. CI for the final push is still running with no failure currently reported. Proceeding with the explicitly requested admin squash merge of this exact head. File-size follow-up signals: opencode-data.ts ~715 lines and session-events.ts ~704 lines.

@pascalandr
pascalandr merged commit ca94224 into dev Sep 20, 2026
11 of 13 checks passed
@pascalandr
pascalandr deleted the test/opencode-2.0.11-qualification branch September 20, 2026 11:48
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.

1 participant