# 进度 · 咨询第 0 步 required 修复单(2026-09-17) 工作树:`.worktrees/consult-followup-tool-contract-fix-20260917` 分支:`codex/consult-followup-tool-contract-fix-20260917` 基线:`origin/staging` @ `b51e7aff`(含 §2b:`gpt-5.6-luna` 接受 required,T2 第一优先) 合入提交:`8b11ae7d` ## 任务状态 | 任务 | 状态 | 说明 | | --- | --- | --- | | T2 / BUG-938 识别 Mastra `error` 块 | 完成 | 先做。`consumeAttempt` 遇 `error` 立即结束 attempt,内部码 `thinking_tool_choice_unsupported` / `provider_error`,公开码 `calculation_failed`,不进合同 retry | | T1 / BUG-937 第 0 步撤回 required | 完成 | `activeTools` + `toolChoice: "auto"`。跨供应商防护;§2b 反证该模型接受 required,不推翻 T1 | | T3 记录 | 完成 | BUG-937/938、BUG-923 防复发改写、CHANGELOG、本文件、README、走查清单 | | T4 部署后取证 | 环境缺口 | 无登录态 / 无模型凭据 / 无 VPS。清单在 `docs/testing/consult-followup-tool-contract-fix-20260917.md` | 未改 `page.tsx`、Python、Skill、`contractReady()`。 ## 断言三栏 | 位置 | 原值 | 新值 | 原因 | | --- | --- | --- | --- | | `consultationNatalPrepareStep` 第 0 步 `toolChoice` | `"required"` | `"auto"` | BUG-282 至少一个 thinking 供应商拒收 required;BUG-937 | | `consultationWindowPrepareStep` 第 0 步 `toolChoice` | `"required"` | `"auto"` | 同上 | ## 测试 | 项 | 结果 | | --- | --- | | `tsc --noEmit` | 0 错 | | `npm run lint` | 0 error(118 warning,未动) | | `consultation-workflow-contract` | 含新契约 `prepareStep never sends required or named toolChoice` **绿** | | `agent-observability` | `provider_error` / `thinking_tool_choice_unsupported` 原样落日志 **绿** | | BUG-938 两条假流 | 隔离跑 **2 passed**(公开码 `calculation_failed`、无 `loading-method`、retry 不调用、`onError` 内部码)。整文件 `consultation-agentic-runtime.test.ts` 因 Windows `EPERM` skill symlink 无法加载,Linux 门禁不受影响 | | 全量 `npm test` | 本机 Windows **2541 / pass 2374 / fail 152 / skip 15**。失败以 Docker、`G:\G:\...` 双盘符 ENOENT、skill `EPERM` symlink 为主。任务点名的契约测试不在新增红里 | | `next build` | 本单未改客户端 bundle,gzip 预期 0。本机未重量(Windows worktree 构建常撞 skill symlink `EPERM`) | | Python | 未改 | ## §2b 同日 `gpt-5.6-luna` 本命路线接受过 `required`。T2 仍是第一优先:其它失败必须能从 `[consult-provider-error]` 看见原文。T1 保留,因为模型可切换,BUG-282 已实证过拒收。