审核通过与否读基座数;「重做」不再被指向 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
+9
View File
@@ -1825,6 +1825,9 @@ export declare const AI_TAG_LABEL: Readonly<Record<AiTag, string>>;
/** 决策卡:分支条件选择表;含自定义收尾项 */
export declare const decisionCardSchema: z.ZodObject<{
k: z.ZodLiteral<"decision">;
variant: z.ZodOptional<z.ZodEnum<{
review: "review";
}>>;
ask: z.ZodString;
basis: z.ZodArray<z.ZodObject<{
k: z.ZodString;
@@ -1937,6 +1940,9 @@ export declare const ratingCardSchema: z.ZodObject<{
export type RatingCard = z.infer<typeof ratingCardSchema>;
export declare const chatCardSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
k: z.ZodLiteral<"decision">;
variant: z.ZodOptional<z.ZodEnum<{
review: "review";
}>>;
ask: z.ZodString;
basis: z.ZodArray<z.ZodObject<{
k: z.ZodString;
@@ -2070,6 +2076,9 @@ export declare const chatMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
at: z.ZodISODateTime;
}, z.core.$strip>, z.ZodObject<{
k: z.ZodLiteral<"decision">;
variant: z.ZodOptional<z.ZodEnum<{
review: "review";
}>>;
ask: z.ZodString;
basis: z.ZodArray<z.ZodObject<{
k: z.ZodString;
+5
View File
@@ -204,6 +204,7 @@ export declare const planStepSchema: z.ZodObject<{
doneWhen: z.ZodOptional<z.ZodString>;
cardVariant: z.ZodOptional<z.ZodEnum<{
data: "data";
review: "review";
}>>;
}, z.core.$strip>;
export type PlanStep = z.infer<typeof planStepSchema>;
@@ -267,6 +268,7 @@ export declare const loopModelSchema: z.ZodObject<{
doneWhen: z.ZodOptional<z.ZodString>;
cardVariant: z.ZodOptional<z.ZodEnum<{
data: "data";
review: "review";
}>>;
}, z.core.$strip>>>;
phases: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -324,6 +326,7 @@ export declare const businessModelSchema: z.ZodObject<{
doneWhen: z.ZodOptional<z.ZodString>;
cardVariant: z.ZodOptional<z.ZodEnum<{
data: "data";
review: "review";
}>>;
}, z.core.$strip>>>;
phases: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -390,6 +393,7 @@ export declare const manifestAssetsSchema: z.ZodObject<{
doneWhen: z.ZodOptional<z.ZodString>;
cardVariant: z.ZodOptional<z.ZodEnum<{
data: "data";
review: "review";
}>>;
}, z.core.$strip>>>;
phases: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -667,6 +671,7 @@ export declare const activityManifestSchema: z.ZodObject<{
doneWhen: z.ZodOptional<z.ZodString>;
cardVariant: z.ZodOptional<z.ZodEnum<{
data: "data";
review: "review";
}>>;
}, z.core.$strip>>>;
phases: z.ZodOptional<z.ZodArray<z.ZodObject<{