GPT-5.6-sol: optional tool parameters are exposed as required (file writes fail) #1149
Replies: 6 comments
|
Dependency-level tracker created upstream: earendil-works/pi#8105 |
|
Verified on GPT-5.6-sol after switching the session's tool presentation from native function calling to PTC / Code Mode: file creation and writing now succeed. Isolation evidence: the filesystem backend, sandbox policy, canonical tool runtime, and the Why the workaround works: in Code Mode the model sees only the outer Workaround: use PTC / Code Mode for GPT-5.6-sol until native optional-parameter handling is fixed. This is a workaround and diagnostic signal, not the root fix, and sandbox escalation validation ( Dependency-level tracker: earendil-works/pi#8105 |
|
补充一组绕过 DSH 的直接边界探针,以及对当前根因描述的修正。 结论摘要当前 Discussion 和关联的
因此,更准确的直接触发因素不是“DSH 把 optional 标成 required”,而是:
直接探针我绕过 DSH,直接向本机 CC Switch 的 Anthropic Messages 入口发送了以下工具 Schema: {
"type": "object",
"properties": {
"required_value": { "type": "string" },
"optional_text": { "type": "string" },
"optional_mode": {
"type": "string",
"enum": ["alpha", "beta"]
}
},
"required": ["required_value"]
}Prompt 明确要求: 链路为: 最终返回: {
"required_value": "ok",
"optional_text": "",
"optional_mode": "alpha"
}即 optional string 被填成 {
"sandbox_permissions": "workspace-write",
"justification": ""
}Nullable 对照实验将两个 optional 字段改成: {
"optional_text": {
"oneOf": [{ "type": "string" }, { "type": "null" }]
},
"optional_mode": {
"oneOf": [
{ "type": "string", "enum": ["alpha", "beta"] },
{ "type": "null" }
]
}
}同一路由返回: {
"required_value": "ok",
"optional_text": null,
"optional_mode": null
}这证明 nullable 能让当前 Codex 路径表达“未提供”,但 DSH 当前的 escalation 参数只接受 string,因此仍需要一侧做归一化。 与
|
|
感谢补充这组直接边界探针和 nullable 对照实验——这比仅仅观察 DSH 内部现象更有说服力。 我们同意修正措辞:DSH 的 canonical tool schema 确实只把真正必填的字段放进 你的复现链路(DSH pi-ai anthropic-messages → CC Switch 3.19.2 → Codex Responses)没有经过 pi-ai 的 接下来我们会:
在归因到 |
|
I agree with the denial-bound direction described above. I think the key invariant should be: model output is a request, not authorization. A model-supplied sandbox_permissions value should never be sufficient by itself to enter an approval/escalation path. For a robust model-agnostic design, I would bind escalation eligibility to a real prior denial for the exact operation, with the eligibility scoped to the session, tool, normalized command/operation, workdir or target path, and effective sandbox mode. Ideally that eligibility should also be short-lived and single-use, so parallel or unrelated tool calls cannot inherit it. One compatibility detail I would favor: if escalation fields arrive without valid denial evidence, treat them as non-authoritative metadata and execute the call at the standing privilege instead of failing it. If wider access is genuinely required, the normal execution will produce the denial that makes a retry eligible. Suggested regression coverage: speculative escalation fields do not elevate or fail a permitted call This would fix the current GPT-5.6 behavior without introducing any model-specific logic and would strengthen the sandbox contract for future models as well. |
|
Adding a cross-path datapoint to the isolation work above (which we agree with — the refined framing that the Codex side materializes declared-but-optional top-level properties matches what we see from the schema side). We ran the same model — GPT-5.6-sol on a ChatGPT-subscription OAuth login — through a different path: pi2dsh's built-in OpenAI-Codex route on a stock
So on this path the failure mode of this thread does not reproduce: nothing forced the optional parameters into the call, and nothing rejected the call for omitting them. Evidence (arg keys, call id, verdict): Scope notes, honestly: this is a single-run datapoint from a different transport configuration, so it does not refute the root-cause analysis for the |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
GPT-5.6-sol via
openai-codex-responsestreats optional tool parameters as required, so everywrite/bashcall must submitsandbox_permissionsandjustification, which then fail validation. See root cause below.Dependency-level tracker
earendil-works/pi#8105
All reactions