Repository navigation
docs(opencode): add reasoning capability validation procedure - #577
Conversation
Record the live investigation of the neutral reasoning field against OpenCode 2.0.30 and the USAi gateway: OpenCode omits the field as an unsupported legacy setting and the gateway exposes no reasoning signal, so the field stays absent for every model. No script and no data. Co-authored-by: OpenCode Agent <[email protected]>
Co-authored-by: OpenCode Agent <[email protected]>
Record that OpenCode 2.0.30 drops the reasoning model setting, mark the mapping row as not applied, and capture the owner decision to keep reasoning absent for every model. Co-authored-by: OpenCode Agent <[email protected]>
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: request changes — a54f752cc776c7afe03bf2d0072fd8841a49ca5d
Must fix before merge: 1. Keep unsuccessful or unobserved reasoning indeterminate; it cannot substantiate known-unsupported metadata.
-
Major —
integrations/isolation/acq-kits/opencode/docs/reasoning-validation.md:139–141(publication at:160–162): Missing telemetry plus failed arithmetic qualifies a target as “Does not reason,” while the on-switch positive control runs on a different model. A reasoning-capable target with thinking disabled by default, suppressed telemetry, or wrong answers can therefore receivereasoning: falseonce a consumer needs it. Retain indeterminate/absent unless target-specific evidence establishes unsupported capability; successful reporting on another model cannot establish that.Evidence — confirmed: The classification permits this case; ADR 0006 defines
falseas known-unsupported, and the document's own limits say reporting does not establish internal reasoning.
Not verified: Live gateway/model behavior and the author's unattached raw probes; local Python validation blocked by missing packages. Exact-head CI passes, but does not exercise this procedure.
Assisted-by: OpenCode [GPT 6.1 Sol Latest Guardrails Defaultv2] skill:change-review
…et-specific evidence Co-authored-by: OpenCode Agent <[email protected]>
|
🤖: AI agent (First Mate), posting on behalf of @mogul. Reply to the review at Fixed in |
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: request changes — 09ddedef32d1e5787db4e72ab5848104e32cf06d
Must fix before merge: 1. Do not treat rejection of a reasoning parameter as proof that reasoning capability is unsupported.
Prior finding: the missing-telemetry/failed-arithmetic path to false is resolved in 09ddede; those observations now stay indeterminate.
-
Major —
integrations/isolation/acq-kits/opencode/docs/reasoning-validation.md:147–151(publication at:182–185): The replacement rule accepts an error naming a reasoning parameter as unsupported for the target as evidence forreasoning: false. That establishes unsupported request syntax/control, not unsupported reasoning capability: a reasoning-capable model can reject a parameter, effort value, or endpoint while reasoning through its supported API. A consumer needing the distinction could therefore still publish an incorrect known-unsupported value. Remove this example and explicitly keep parameter/value/endpoint rejections indeterminate unless the response states that the target's reasoning capability itself is unsupported. Align the ADR's evidence rule with that distinction.Evidence — confirmed rule mismatch, not a live gateway reproduction: The classification explicitly permits this evidence. OpenAI's model documentation calls GPT-5 Pro a reasoning model but limits it to the Responses API and
reasoning.effort: high; request-control support and capability are distinct.
Not verified: Live gateway behavior, author's unattached raw probes, and OpenCode V2 docs (HTTP 403). Exact-head CI passes; a duplicate title job was cancelled before any steps, not a demonstrated lint failure. CI does not exercise this procedure.
Assisted-by: OpenCode [GPT 6.1 Sol Latest Guardrails Defaultv2] skill:change-review
…ontrol rejection Co-authored-by: OpenCode Agent <[email protected]>
…ure pointer Co-authored-by: OpenCode Agent <[email protected]>
|
🤖: AI agent (First Mate), posting on behalf of @mogul. Reply to the review at Fixed in |
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: approve — b2c3c2575178b0c5019e7a3e4e9559b22fd0fa6d
Must fix before merge: none.
Prior findings:
- Resolved in 09ddede, retained at this head: Missing telemetry, failed arithmetic and another model's control cannot establish
reasoning: false; these remain indeterminate/absent. - Resolved in b2c3c25:
integrations/isolation/acq-kits/opencode/docs/reasoning-validation.md:148–170now explicitly distinguishes unsupported capability from parameter/value/endpoint rejection. Publication at:181–192, ADR 0006's evidence/amendment rules, the kit README and the image procedure preserve that distinction. Confirmed by tracing the current documentation, not by live gateway reproduction.
No new findings. This approves the documentation change, not publication of any reasoning value; the current decision keeps the field absent.
Not verified: Live gateway/OpenCode behavior, the author's unattached raw probes, and end-to-end procedure execution; OpenCode V2 configuration docs returned HTTP 403. Exact-head CI passes but does not execute this procedure.
Assisted-by: OpenCode [GPT 6.1 Sol Latest Guardrails Defaultv2] skill:change-review
🤖: AI agent (First Mate), AI-assisted change (OpenCode). Human review required before merge.
Summary
Adds
integrations/isolation/acq-kits/opencode/docs/reasoning-validation.md: the separate procedure ADR 0006 requires beforereasoningmay be published, plus the result of running its design experiment live on OpenCode 2.0.30. The finding is "not verifiable here / recommend the field stay absent for all models". No script, no data, no schema or catalog change, no capability value.Key findings (details and limits are in the doc):
reasoningsetting as an unsupported legacy setting and omits it (logged as a normalization warning). Request, variants, events and usage were identical for absent,trueandfalse.model#low|medium|highvariants work and sendreasoning_effortregardless of the field.reasoning_tokensfor the four models examined. Hidden thinking shows only as token accounting, which differs per family, and the effort and disable switches tried had no observable effect, so there is no usable control on any model. Every model is therefore indeterminate and the field stays absent: a null observation or a control working only on another model cannot establishfalse, which needs an explicit target-specific gateway or vendor statement that the model's reasoning capability itself is unsupported (a rejected parameter, effort value or endpoint is not one);trueneeds target-specific positive evidence.reasoningto OpenCodereasoning) is a no-op on the pinned version. ADR 0006 is now amended (see below).Issues
Before / After
Verification
Run live (sandbox with OpenCode 2.0.30, gateway reached through the sandbox proxy):
claude-sonnet-5.5,gpt-6-astra,gemini-3.5-flash,gpt_5_2_default_v2, withllama_4_maverickonce: baseline,reasoning_effortlow/high/none andthinking: disabled(the last two on two models only).--standalone) plus 1 smoke run.--thinking, and variants.Not run: OpenCode 1.x, any model other than those listed, repeat runs beyond single digits, cost and latency measurement, the Quickstart projection. The procedure itself was not executed end to end (its steps were exercised piecemeal).
Checks (re-run after the amendment):
make validatepasses; markdownlint (.github/linters/run-markdownlint.mjs) passes; pytest 779 passed; ruff reports only pre-existing findings in unrelated files; pre-commit secret scan passes. Raw notes were kept in a gitignored scratch directory and are not in the PR.Owner decision and ADR 0006 amendment
The owner of the epic accepted keeping
reasoningabsent for every model (2026-11-04). A second commit amendsintegrations/isolation/docs/decisions/0006-neutral-model-capability-metadata.mdwith a dated Amendment section (status staysproposed, history not rewritten):reasoningnow reads "not applied on 2.0.30": OpenCode 2.0.30 drops the field with the warningomitted unsupported legacy setting; variants do not depend on it.reasoningnow points toreasoning-validation.mdand states the decision rule: no value is published; revisit only if a future OpenCode or gateway exposes an observable control.render-provider-config.mjsstill emits a supplied booleanreasoning(and its tests assert that). Nothing is emitted today because the catalog and snapshots carry noreasoning. Harmless on 2.0.30 beyond one logged warning per model; OpenCode 1.x behavior was not tested. Code and tests were deliberately not changed.Still docs only: no schema, catalog, renderer or script change.
Merge Guard
Docs only. Human review required. Do not merge as authority for publishing any
reasoningvalue; ADR 0006 is stillproposed.Rollback
Revert the commits on this branch (docs only).
Security Impact
No credential exposure. The API key was read only through the environment variable placeholder by OpenCode and by throwaway local scripts that did not print, log or store it, and no environment dump was run. The document contains no key, no transcripts and no non-public hostnames. No change to authentication, data handling or attack surface.