Repository navigation
chore(opencode): recommend OpenCode 2.2.5 - #1222
Merged
Merged
Conversation
OpenCode 2.2.4 and 2.2.5 change no contract CodeNomad consumes: the authenticated OpenAPI dumps keep every consumed schema byte-identical or additive, the published client and plugin declarations typecheck, the native plugin host modules resolve, and the image tool, Claude Agent provider, Code Mode and permission contracts are unchanged. Users therefore get the qualified, current runtime offered as the recommendation. RECOMMENDED_OPENCODE_VERSION becomes 2.2.5 and the reviewed-publication shortcut in contractProfile lists 2.2.3 and 2.2.5; every other version, 2.2.4 included, still negotiates its authenticated schema. The 2.2.3 minimum, its image tool contract reason and the 2.1.0 client/plugin/schema pins stay. Help in all ten locales, the READMEs, CONTRIBUTING.md, the compatibility doc and the architecture skill state the minimum and the recommendation as two versions again. Validation on the exact 2.2.5 CLI: every native suite, including Design, image settings, Missions with all recurring journeys, history migrations from 2.1.2/2.2.3/2.2.4 and install/upgrade/legacy replacement; typecheck, server units, update/compatibility tests, the browser OpenCode setup test and the ten-locale help checks.
Contributor
Author
Gatekeeper reviewZERO FINDINGS (P0: 0, P1: 0, P2: 0, P3: 0). Round 1 found no code or documentation defects and one P3: the description listed upgrade and legacy replacement among the 2.2.5 native suites, but those runs predated the recommendation bump and installed 2.2.3. Both suites were rerun after the bump: upgrade installed Verified:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
@opencode/client/plugin/schemapins stay: neither 2.2.4 nor 2.2.5 changes a contract CodeNomad consumes.RECOMMENDED_OPENCODE_VERSIONis 2.2.5, and the reviewed-publication shortcut incontractProfilelists 2.2.3 and 2.2.5; other versions, 2.2.4 included, keep negotiating their authenticated schema. The CIlatestlane already resolves the latest stable CLI.CONTRIBUTING.md,dev-docs/OPENCODE_COMPATIBILITY.mdand the architecture skill state two separate versions again: minimum 2.2.3 with its reason, recommendation 2.2.5.Contract review (v2.2.3 → v2.2.4 → v2.2.5; 31 + 19 commits)
Reviewed from the exact tags
v2.2.3(082ac6281f),v2.2.4(45898d0f85) andv2.2.5(9bbb8ce18c), the published npm packages, and an authenticated OpenAPI dump from each official CLI running in its own sandbox. The changelog has full notes for 2.2.4 and 2.2.5 (both 30 October); everything below was also checked against the commit log and source. CodeNomad side:origin/dev605820669.Headline: neither release changes a contract CodeNomad consumes. 2.2.4 adds opt-in artifacts (seven
/api/experimental/artifactsoperations, four tools, a plugin hook), renamable persistent terminals, and moves background-job recovery markers fromkvinto a newjobtable. 2.2.5 is a bug-fix release; its one schema change is thatcompaction.bufferaccepts a percentage such as"20%". The image tool contract adopted in #1209 (experimental_image_generate, on by default) is unchanged through 2.2.5, and still nothing writessession_part.GET /api/experimental/artifacts/providers,GET|POST /api/experimental/artifacts,GET|PATCH|DELETE /api/experimental/artifacts/{artifactID},GET /api/experimental/artifacts/{artifactID}/view/*(#60351). None removed in either release.GET /api/event, where thetypesfilter enum gainspersistent-pty.updatedandartifact.updated(94 → 96 types, none removed).PUT /api/experimental/persistent-pty/{ptyID}can also rename (title;nullclears it),sizebecomes optional, and a 501PtyFeatureUnsupportedErroris returned while an older terminal service can't rename (#60329).PersistentPty.Info(+userTitle, nullable, required) andPersistentPty.UpdateInput(sizeoptional, +title), are both additive.V2EventEncoded,Session.*,Form.*,Permission.*,Prompt*,Event.*,Location.*, PTY/Shell are byte-identical from 2.2.3 to 2.2.5.Config.InfoEncoded: 2.2.4 addsexperimental.artifacts(boolean, opt-in). 2.2.5 turnscompaction.bufferintoConfig.Compaction.Percent | integer(#60647).experimental.image_generate,experimental.media_blobandexperimental.schedulesare unchanged.compatibility/negotiate.ts(unchanged on origin/dev) holds on 2.2.3, 2.2.4 and 2.2.5.contractProfilelists only2.2.3as reviewed, so 2.2.4/2.2.5 are admitted through authenticated contract recognition.GET /api/configreturns the additive config fields above.experimental.artifacts.{providers,list,create,get,update,delete,view}, the artifact andPersistentPtyUpdatedtypes, andPtyFeatureUnsupportedError. It removescreatePtyClient/PtyConnectInputfrom@opencode/client/solid/pty, which CodeNomad doesn't import. 2.2.5 addsConfigCompactionPercent.artifactmodule andPersistentPty.Updated; 2.2.5 addsconfig/compactionPercent.effect/artifactandpromise/artifactandctx.experimental.artifact(transform,reload). 2.2.5 has no export changes.runtime-modules.tsis unchanged from v2.2.3 to v2.2.5.bun.locksha512 identical; publisheddependencies.effect4.0.6).@opencode/pty0.4.0 (stringopencode-pty 0.4.0in the Windows binary; 2.2.3:0.3.3).process-daemon-v0.4.0adds only terminal renaming (#60324): an additiverenamerequest andfeatures: ["rename"]with an unchangedPROTOCOL_VERSION. CodeNomad only lists persistent PTYs (worktree deletion guard) and readsstatus/cwd.LocationServiceMap,Form,Permission,Location,Job,Database,Session,Bus,Shell) and the members CodeNomad calls are unchanged. The changes are additive:Job.cancelSession(2.2.4),Permission.allows(2.2.5; never asks, used byeditto decide whether to quote file lines), andSession.removenow callsjobs.cancelSession. The Missions recurrence clock callsJob.get/start/cancel. Its Job metadata carries nosessionID, so deleting a session doesn't cancel it.20261030054400_job(2.2.4, #60491). It createsjob, copies everykvrowjob.background/%into it and deletes thosekvrows. 2.2.5 adds none.kvkeys (Missions, pruning receipts and claims), neverjob.background/*.jobtable, 0job.background/rows and no leftoverschedule:leaderlease.session_part: still not written.history.ts/projector.tsare unchanged from v2.2.3 to v2.2.5, the projector still only rewrites existing part rows, and every inspected 2.2.4/2.2.5 fixture DB has 0 rows. The forward risk from the 2.2.3 review stands (Recommendations).image-generate.tsis unchanged from v2.2.3 to v2.2.5. 2.2.4 refactors restart recovery into onerestartMessagebut keepsmetadata.source: "experimental_image_generate",jobID,state,pathand the<image id state>notice text. Design companion, activation, content and image settings pass natively on 2.2.4.da87c475a7): the loop now runs in every server process, includingopencode serve, and elects a leader through akvleaseschedule:leader(claimed at boot, released when there are no active schedules). Firing stays opt-in (experimental.schedules === true). CodeNomad uses neither OpenCode schedules nor that key; Missions recurrence uses its own storage and the Job service.persistent-pty.updatedandartifact.updatedreach CodeNomad's shared event relay. The relay routes generically (instance-events.ts), the 2.1.0 client's SSE reader doesn't validate types, and the UI handles neither type. The native relay suite passes on 2.2.4.bashruns asshellwith shell permissions, and the result carries a note (#60687). CodeNomad already groups and rendersbashandshellalike (message-part-grouping.ts:48,tool-call/utils.ts).read/editfailure texts are richer (#60688, #60689).compaction.buffermay be"N%". CodeNomad never reads or writescompaction.buffer. LiteLLM context errors now trigger compaction (#60692).Session.Message.*are byte-identical./loginhint withclaude auth loginin its errors (#60592); the guided setup (#60603) is OpenCode Desktop only. The provider ID (Provider.ID.claudeAgent) and its use of Claude Code's own login are unchanged, so CodeNomad'sclaude-agentquota reader (fix(usage): show Claude Agent quota from Claude Code's login #1214) is unaffected.127.0.0.1,localhost,::1toNO_PROXY/no_proxyfor itself and its children (#60441), so loopback traffic from daemon-hosted code, CodeNomad's plugins included, bypasses environment proxies. CodeNomad sets no proxy variables.packages/codemodeonly bumps its version). The Code Mode run-to-completion regression passes on 2.2.4:{ total: 2000, beforeAwait: 1000, count: 1000 }.@opencode/ai: oneaiobject for Promise and Effect (#60516; left out of the changelog by #60631). CodeNomad doesn't import@opencode/ai.routes/worktrees.ts, "Running persistent PTY blocks deletion: ") will therefore refuse more often for users who also open terminals in OpenCode Desktop. The behavior is correct, but the message names the PTY ID rather than the terminal's title.Verdict:
RECOMMENDED_OPENCODE_VERSION(runtime-support.ts), the reviewed-version check incontractProfile(compatibility/runtime.ts), the version texts in docs and help, and CI's qualification target. This is subject to the full native suite on the exact 2.2.5 CLI, run separately.session_partforward risk (unchanged) and the more frequent worktree-deletion refusal (UX).Not verified here:
test-recurring-simple-nativeABCDGELFWQN), which was interrupted by a server restart;kv→jobmigration with a real pending background marker: only the empty case ran, and upstreamjob.test.tscovers the copy;bashcall is stored asbashorshell(source suggests the model's name is kept; CodeNomad renders both);What users will notice
OpenCode 2.2.4
"experimental": { "artifacts": true }, agents can publish, update and serve HTML or static artifacts (artifact_create,artifact_read,artifact_update,artifact_delete) through a built-in local provider, which stores files under OpenCode's data folder, or a plugin-provided one.opencode serve, and only once when several OpenCode processes share a database. They stay off unlessexperimental.schedulesistrue.claude auth loginand connection checking. Error messages now sayclaude auth logininstead of/login.HTTP(S)_PROXY.OpenCode 2.2.5
"compaction": { "buffer": "20%" }keeps a share of each model's context free; token counts still work. Compaction no longer overfills models whose catalog input limit exceeds their context window, and LiteLLM context errors trigger compaction instead of stopping.bashgetsshell(with shell permissions) instead of an error.readnames the missing folder, andeditshows the closest lines whenoldStringisn't found.Follow-ups (outside this PR)
session_part(independent of this upgrade; 2.2.5 still writes no rows): make the directsession_message.data.contentreaders and the pruning transaction fail safe whensession_parthas rows for the target messages.userTitle ?? title(2.2.4+) and say it may be an OpenCode Desktop terminal.compaction.buffermust accept"N%"as well as a token count.Isolated Windows qualification
Base: dev
605820669; Node 25.2.1 (local; CI runs the pinned 24.20.0); exact official CLI 2.2.5; locked client/plugin 2.1.0;CODENOMAD_NATIVE_FIXTURE_PARENToutside the user profile.opencode v2.2.5) and legacy replacement (target2.2.5) install the new recommendation and pass.index.test.tsshutdown test timed out under full-suite load; 4/4 alone); runtime-support/transport/update 35/35; browseropencode-setup34/34; ten-locale help 31/31.