Files
Jyotisha/docs/tasks/TASK-consult-prep-parallel-fix-20261014.md
T

3.7 KiB
Raw Blame History

TASK · 发问准备并行修复单(issue #62,第 1 次打回)

  • 日期:2026-10-14
  • 原任务书:docs/tasks/TASK-consult-prep-parallel-20261013.md
  • 被验 SHA:a0e223e20cebcce3479accb60f6aec44d1caadda(codex/consult-prep-parallel-20261013)
  • 执行方:Grok,同一分支续做(先 merge 最新 origin/staging,不改写已推历史)
  • BUG 编号:沿用 BUG-1337~1339

1. 验收结论:业务逻辑通过;前端全量多出 3 条真失败

检查 结果 证据
开关全关时的顺序 通过 turn-prep.ts 串行分支与原 route.ts 的 401→423→400→503→404→409→409→503 逐条同序
开关开时 通过 删号判定仍最先返回、在任何写库扣点之前;审核结论在 beforeReserve 内等齐,被拦不 reserve
readVersion 缓存 通过 只缓存成功结果,invalidateLanguageModelCatalog 同时清;默认 TTL 0
tsc / lint 通过 0 错 / 0 error
前端全量 npm test(与 staging 逐名比对) 未通过:新增 3 条 见下
  1. frontend/tests/chat-session-authority.test.ts「consult POST on a rectification session is 409, a missing id is 404」:第 65 行在 route.ts 源码里找 /if \(!chatSession\) \{[\s\S]*status: 404/——这段判定挪进了 frontend/src/lib/consult/turn-prep.ts(sessionMissing()),断言没跟着挪。
  2. frontend/tests/consultation-workflow-contract.test.ts「consultation plans are server-owned and bounded」:第 160 行找 /beforeReserve: \(\{ consultationMode \}\) => createConsultationPlan\(\{/,第 161 行找 reserve: () => reserveConsultationModel(——两处都改成了 async 函数体。
  3. frontend/tests/runtime-sources-no-test-imports.test.ts:frontend/scripts/research/consult-prep-parallel-ab.mts 第 9 行从 ../../tests/support/stub-server-only.mjs 导入。web 镜像不复制 frontend/tests,推上 staging 后镜像构建会失败(BUG-1140;#58 刚因同一形状打回过一次)。

原任务书 §5 第 7 条已经列出要先 grep 的源码文本断言;这次漏的两条不在那份清单里,但属于同一类(AGENTS.md §7.8)。

2. 修法要求

  1. 1、2 两条:按 §7.3 写「原值 / 新值 / 原因」三栏改断言,意图不得放宽:
    • 1:改为在 turn-prep.ts 里锁「查不到会话 → 404」「类型不是 consultation → 409 session_not_consultation」,并保留第 70 行那条「不得合并成一个判断」的反向断言(针对新文件)。
    • 2:改为锁「beforeReserve 里调用 createConsultationPlan」「beforeReserve 在 reserve 之前」「reserve 调用 reserveConsultationModel」,允许 async 写法,但不得只查函数名存在。
  2. 第 3 条:把 consult-prep-parallel-ab.mts 挪到 frontend/tests/ 下(文件名不得以 .test.ts / .test.tsx 结尾),导入改相对路径;同步改 PROGRESS 与 docs/testing/consult-prep-parallel-ab-20261013.md 里的命令路径。frontend/scripts/research/ 下其它新增文件同样检查。
  3. 再 grep 一遍 route.ts 被挪走 / 改写的语句在 frontend/tests、tests 里还有没有按源码文本断言的:grep -rn "chatSession\.session_type\|getUser()\|refuseWhenAccountDeletionPending\|resolveSessionLanguageModel(\|reserveConsultationModel(\|createConsultationPlan(" frontend/tests tests,命中的逐条确认。
  4. 业务代码不改;三个开关默认值不变。

3. 验收标准

  • 前端全量 npm test 失败清单与 staging 基线逐名相同(本机另有 Docker 类失败,以基线为准);
  • git diff a0e223e2..<新 SHA> -- frontend/src 为空。

4. 让步顺序

无。第 1 次打回。