修复策划回答身份绑定与迟到恢复结果覆盖
Project CI / Repository checks (pull_request) Successful in 2m48s
Project CI / Backend tests (pull_request) Successful in 6m28s
Project CI / Native shell tests (pull_request) Failing after 13m45s
Project CI / Frontend tests (pull_request) Successful in 44m47s

在既有回合锁内核对问题与会话身份,保留已完成回合重放。
前端回答携带卡片问题标识,hydrate 写回前检查请求序列和项目路径。
补充后端与界面回归测试,同步技术合同与项目决策。
This commit is contained in:
2026-09-08 13:25:24 +00:00
parent 8d03b73582
commit 14d76419b8
5 changed files with 298 additions and 25 deletions
@@ -324,6 +324,10 @@ V2 决定状态使用 `confirmed | assumption_pending | prototype_pending`:`as
`input` 冻结为 `option`、`freeform`、`direct_draft`、`revision` 四种用户意图:
回答当前问题时,客户端必须携带被回答卡片的 `questionId`(自由文本回答同样携带),后端保留该身份,在既有回合项目锁内比较 Session ID 和当前 question ID,再开始新回合。过期或缺失的问题身份不推进回合;已完成的 `clientTurnId` 仍可重放,失败回合沿用原输入重试,修订等非问答意图不要求问题身份。此处只核对用户提交的目标,不增加恢复门禁、Provider 调用或模型输出字段。
前端 hydrate 返回后,必须在任何成功或空结果状态写回前同时比较请求序列和当前项目路径;迟到结果直接丢弃,不等待或重试。历史对话探测沿用自己的加载版本与项目路径检查。
```json
{
"kind": "option",