Repository navigation
chore: refresh the pin to upstream v2.0.32 - #465
Merged
Merged
Conversation
…er than reserves, and the dcid rows read as wire fragments
…nsure options say the saved env wins after startup
2 of 4 tasks
This was referenced Oct 17, 2026
Closed
Merged
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.
The SDK's OpenAPI pin moves from opencode v2.0.29 to v2.0.32 (
843a6c514e606b436a7fe713422ace0a93ad3d61). It goes throughspec/SNAPSHOT.md's refresh procedure: a reviewedrefresh-specreceipt,--apply, curation, onegenerate.ExperimentalClientgainsCreateVoiceSessionAsync. No existing public member is removed or renamed.Part of #462. This is REFRESH-232 PR B; it builds on PR A (#459), without which generation crashes on
VoiceWebRTCTransportInput.dcid.The receipt
experimental.voice.session; none are removed or changed.001-restore-sse-payloadsstill applies, and its preimages are retained.routes.ts,api.ts,server-process.ts,service-config.ts,terminal-pane.tsx, fourpackage.jsonfiles (Bun stays at 1.4.2), and two service tests.refresh-spec --verifyreproduces the accepted identity.Curation
Five rows, each with its reason:
operationNamesexperimental.voice.session→CreateVoiceSessionAsyncmodelOwnersVoice*→ExperimentalschemaNamesConfig.Model.Reasoningsupported=false→ConfigModelReasoningUnsupportedschemaNamessupported=true→ConfigModelReasoningSupportedschemaNamesbudget→ConfigModelReasoningBudgetConfigModelReasoningTrueBudgettools/generation-profile.txtselects the voice operation, so 141 operations are selected, 0 pending and 2 transport-owned, and the "incomplete" marker clears. The existingexperimentalgroup supplies the client and theOPENCODE001diagnostic, which the voice types carry like their siblings. Generation demanded no new descriptions, so there's no new curated summary.Maintainer decisions, 2026-10-18: the voice door's name and slice, the two arm names, and the budget name.
The public surface
The API baseline gains 176 lines and loses none: 16 new public types, plus five members on existing types.
ExperimentalClient.CreateVoiceSessionAsync(ExperimentalVoiceSessionRequest, OpenCodeRequestOptions?, CancellationToken);ConfigModelCapabilities.Reasoning(IConfigModelReasoning?) and.Temperature;ModelCapabilities.Temperature;ConfigModel.ReleaseDate.IConfigModelReasoning, withConfigModelReasoningUnsupported,ConfigModelReasoningSupported(Toggle,Effort,Budget),ConfigModelReasoningBudget(Min,Max) and theUnknownConfigModelReasoningcarrier.IVoiceTransportandIVoiceTransportInput, each with its WebRTC and WebSocket arms and its unknown carrier;VoiceWebRtcTransportInput.Dcidis the tri-stateOptional<double?>from feat(generator): an optional special number keeps its named literals through the tri-state wrapper #459.VoiceWebSocketTransport.ToString()prints("Token", RecordPrinter.Redact(Token)), becausetokenis on the upstream redaction floor.UnknownVoiceTransportalso masks its preserved payload, since an unknown arm may carry the same token. No other new member is credential-shaped.A widened existing suppression (maintainer-approved 2026-10-18)
VoiceWebSocketTransport.Urlis astringbecause upstream declaresurl: Schema.Stringwith noformat: uri. SoVoiceWebSocketTransportjoins the existing CA1056 brace list in.editorconfig, under the comment "The pinned OpenAPI schemas declare these wire members as plain strings without format: uri". It adds no new section, and the suppression ledger's aggregate stays ateditorconfig: 150. I edited the ledger snapshot's glob line by hand; it was not auto-accepted.Hand-written changes
Env precedence, wording only.
ServiceElection.OverlayAsyncstays, and its code is unchanged. At v2.0.32,packages/cli/src/server-process.ts:75runsObject.assign(process.env, config.env)on every service-mode start, after bootstrap. Its comment names Desktop launches as the motive. So:envat spawn;envwins for everything the service reads after startup.Three places now say exactly that:
OverlayAsync's summary, the publicOpenCodeServerEnsureOptions.EnvironmentXML doc, and theEnvironmentrow indocs/guide/connection-modes.md. The guide row also adds "set a key in one place". Keeping the overlay keeps the CLI's own spawn-time behaviour for the startup keys.The test harness's real-daemon guard refuses both 45278 (the new Windows default,
0xB0DEinservice-config.ts) and 49374 (kept by explicit configuration on the maintainer's machine). It is renamedRefuseRealDaemonPort, since it guards a port and doesn't reserve one.Canon:
docs/architecture/protocol-and-generation.mdnow namestools/generation-profile.txtas the selected-operation list. Admitting an upstream operation adds its id there, along with its naming and owner rows.CHANGELOG: two entries under
[Unreleased]:### ✨ Added: the pin, the voice door, and the reasoning, temperature and release-date members;### 🔧 Changes: the consumer-visible env-precedence change, as its own entry.The persistent-simulation fixture stays unchanged: its contract doesn't require a complete mirror of the server's config block.
Tests
dcidcontract rows (OpenCodeJsonContextTests), through the generated context:7.25, and"NaN","Infinity"and"-Infinity", each written back as the same JSON;"nan"refusal.EnsureServiceContextTests): both protected ports are refused with the full message, and the four neighbouring ports pass. The old 49374-only rule is a mutant that the 45278 row kills.dcidrows on net472. dev-01 compiles netstandard2.0 and net472 in the root Release build but cannot run net472.Budget (against #459's merge)
.editorconfig, the canon clause).spec/are exempt.Local check and review
verify-clonespassing;--help;generate --verifyandrefresh-spec --verifycurrent; Tools.Tests 2086/0; Sdk.Tests 2825/0 on net10.0 and on net11.0 (ServiceElection excluded; CI runs that pass).tools/generation-profile.txtin its scope, the coordinator's miss;dcidrows' shape (fragments, not a sentinel, and the refusal split out).Provenance: Generator lane / opencode dispatch harness (openai/gpt-6.1-sol-1m, review on gpt-6.1-sol-fast-1m), coordinated, reviewed and finished in Claude Code.