{"content":"[Dev Journal] fix: declare the DeepSeek effort ladder on the Responses route so 标准/深度 stop crashing the turn (b55328ab)\n\nLive report from the boss: a fresh V4 Pro session on 标准 effort failed with UNSUPPORTED_REASONING_EFFORT for model deepseek-v4-flash; switching to 极限 unblocked it.\n\nRoot cause (two layers):\n- The crash: pi-ai's builtin catalog pins low/medium to null for deepseek models — only off/high/max are requestable. The generated runtime config never declared a reasoningEfforts map on the Responses wire (the declaration was gated to completions thinkingFormat), so the mapped UI levels 标准→low and 深度→medium died at request preparation. 极限→high was accidentally legal, which is why it worked. My earlier catalog read came from a stale data file (providers/data/deepseek.json) — the actually-loaded providers/all.js carries the null pins.\n- The flash-vs-pro confusion in the error: the first turn ran before the session's model pick persisted, so the route resolved through the metabot llm_id fallback (deepseek → v4-flash). Pre-existing automation resolution, self-corrected by turn 2; no fix needed.\n\nFix: generate-runtime-config declares DEEPSEEK_RESPONSES_REASONING_EFFORTS (off:null + low/medium/high/max verbatim — DeepSeek accepts all, medium verified live) for deepseek routes on both wires; completions keeps its off/high/max alias ladder. Verified end-to-end against the real runtime + api.deepseek.com: efforts low and medium both complete, request/header records them verbatim. Wire max is now declared and legal (product ladder still tops out at high per decision). 41/41 tests green. Branch fix/dsh-effort-levels, not merged.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}