数据工单由剧本声明、引擎决定 —— 不靠模型抄卡骨架(W05 1.4.3)

用户:「右边 AI 聊天框里这个数据工单怎么又显示的执行工单?」查实:说明书骨架里
`"variant":"data"` 与 `gateLedgers` 并排写着,模型抄卡时 gateLedgers 抄到了、variant 丢了
(看着像元数据)。靠模型抄一个标记本来就靠不住。

改成与 `view` 同一条道理:这一步派的是什么单,写剧本时就定死 ——
- 契约 `PlanStep.cardVariant: 'data'`;活动在 S0d_p08_master / S0d_p10_document 两步上声明;
- `cards.issue` 入参多一项可选 `itemId`(turn-runner 从 human 动作带下来;引擎自发的验收/兜底卡没有项);
- 组装层按 itemId 查剧本,`stepVariant ?? 卡上写的` —— 模型写不写都一样。
在跑那一单的卡已就地补上 variant(payload),刷新即见「数据工单」。
2102 测 / 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 13:51:14 +08:00
co-authored by Claude Fable 5
parent ffa1ef1076
commit b98ec75a89
10 changed files with 59 additions and 4 deletions
+8
View File
@@ -159,6 +159,14 @@ export const planStepSchema = z.object({
* 该改判同一步写下的计数列。
*/
doneWhen: z.string().optional(),
/**
* **这一步派的执行工单是数据工单**(2026-08-27)—— 由剧本声明、引擎决定,不靠模型抄卡骨架。
*
* 起因:说明书的卡骨架里写着 `"variant":"data"`,模型抄卡时把它丢了(看着像元数据),
* 对话区于是照旧摆「执行工单」。与 `view` 同一条道理:这一步派的是什么单,是写剧本时就定死的事,
* 归活动声明、不归模型临场发挥;模型写不写都一样。
*/
cardVariant: z.enum(['data']).optional(),
});
export type PlanStep = z.infer<typeof planStepSchema>;