审核通过与否读基座数;「重做」不再被指向 finish;审核卡摆成验收工单(W05 1.4.7)

用户两报:①「我上一步明确要求重做了,怎么会继续向下推进」②「验收工单弹出的是需要你定,明显不对」。

①病根两处合谋:人两次答 custom:重做一次,模型把一模一样的问法又发了一遍被闸拦下;而拒回的话
不分答案一律说「照这个选择把结论落进台账那面旗,再 finish」—— 对通过是对的,对重做是把模型往错路上推,
它照办写了 review_approved_total = 1,而 S4 的哨兵读的正是这面模型自写的旗(被叫的那一方自己记账,A6 那一课)。
- 基座新读数 decision_last / decision_<值>_total(按 card-reply 数);S4 哨兵改读 decision_last = "approve",
  人最后一次真点了通过才开门;静态审认这几个名字。
- 拒回 / 观察 / 事实行三处同一段 chosenGuidance 按答案分岔:custom: 不是通过 —— 按他写的改、换问法重发、
  不许写通过旗、不许 finish;选项值指回说明书那一档。
- S4 剧本驳回分支明写不许写旗、ask 开头必须写明这一轮改了什么(字面一样的卡会被吞)。
②平台的验收工单是终局,中间审核只能靠决策卡循环 —— 但不该穿「需要你定」的衣服:契约 decisionCard.variant:'review',
  PlanStep.cardVariant 扩到 'review',cards.decide 带 itemId,引擎按剧本决定;对话区摆成「工单 · 验收 / 审核」。
2106 测 / typecheck / lint / depcruise 绿;api-report 已刷;CONTRACT.md 同步。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
This commit is contained in:
xcs
2026-08-27 14:46:45 +08:00
co-authored by Claude Fable 5
parent 94e66d5a58
commit 75553371b0
15 changed files with 154 additions and 26 deletions
+7
View File
@@ -520,6 +520,13 @@ const chatBase = { id: cardIdSchema, at: z.iso.datetime() };
export const decisionCardSchema = z.object({
...chatBase,
k: z.literal('decision'),
/**
* **审核卡**(2026-08-27 用户:「验收工单弹出的是需要你定,明显不对,需要是验收工单」):
* 平台的验收工单是终局(`submit` 一单只发一次,交出去就是放行),中间那道「审核 → 驳回 → 修订 → 再审」
* 只能用决策卡循环 —— 但它不该穿着「需要你定」的衣服。`review` = 按验收工单的样子摆
* (工单 · 验收 / 通过 · 驳回),机制仍是决策卡。由剧本 `cardVariant` 声明、引擎决定,不靠模型抄。
*/
variant: z.enum(['review']).optional(),
ask: z.string(),
basis: basisSchema,
recommend: z.string().optional(),
+3 -2
View File
@@ -160,13 +160,14 @@ export const planStepSchema = z.object({
*/
doneWhen: z.string().optional(),
/**
* **这一步派的执行工单是数据工单**(2026-08-27)—— 由剧本声明、引擎决定,不靠模型抄卡骨架。
* **这一步派的卡穿哪副面孔**(2026-08-27)—— 由剧本声明、引擎决定,不靠模型抄卡骨架。
* `data` = 执行工单摆成数据工单;`review` = 决策卡摆成验收工单(中间审核,可循环;终局验收仍是 submit)。
*
* 起因:说明书的卡骨架里写着 `"variant":"data"`,模型抄卡时把它丢了(看着像元数据),
* 对话区于是照旧摆「执行工单」。与 `view` 同一条道理:这一步派的是什么单,是写剧本时就定死的事,
* 归活动声明、不归模型临场发挥;模型写不写都一样。
*/
cardVariant: z.enum(['data']).optional(),
cardVariant: z.enum(['data', 'review']).optional(),
});
export type PlanStep = z.infer<typeof planStepSchema>;