Archived
chore(contracts): loop-engine port 快照与 CONTRACT.md 同步(配方专用两个旗 + caseKey)
契约变更四步: ① depcruise 反查下游 —— `no dependency violations`;`draftWrite` / `writable` 的调用方 逐个查过(engines 三处、turn-runner 两处、auto-runner 两处),新增字段全是可选, 老调用方一个字不用改; ② CONTRACT.md 已同步(近变一节写明两个旗各治什么、跳过的行不许被 prune 撤, 以及同批三条不变量:配方只认 liveStep / submit 与模型同一条处置 / 办不下去发卡交人); ③ 本快照单独说明:`TaskDataGateway.draftWrite` 增 `skipUnchanged`、`skipExisting` 两个 可选入参与可选出参 `skipped`;`writable` 增可选 `caseKey`。**非破坏性**; ④ 无破坏性变更,不需要三步弃用。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -38,6 +38,12 @@ export type TaskDataGateway = {
|
||||
object: string;
|
||||
label: string;
|
||||
keys: string[];
|
||||
/**
|
||||
* 单标识列(`declarations.ledger[].caseKey`)—— **摆给人看的行标识要去掉这一段**
|
||||
* (2026-08-25 柴浩:「COV-…/CU-0142-01 只保留斜杠右边」):人正在这一单里看,
|
||||
* 单号是脚下的地面,不是区分行的信息。基座那一侧同款做法见 `rowLabel`。
|
||||
*/
|
||||
caseKey?: string | undefined;
|
||||
fields: Array<{
|
||||
name: string;
|
||||
label: string;
|
||||
@@ -56,8 +62,23 @@ export type TaskDataGateway = {
|
||||
object: string;
|
||||
key: Record<string, string | number>;
|
||||
patch: Record<string, unknown>;
|
||||
/**
|
||||
* **值没变就别落笔**(2026-08-29 终审 I2)—— 配方每一拍都把同一张表重投一遍,
|
||||
* 而草稿层的 upsert 尾巴上有 `landed_at = null`(「再写一笔就不再是已落地」)。
|
||||
* 照写的话:数据工单确认入库之后,下一拍配方一重跑,那些行的「已落地」记号就被**悄悄擦掉**,
|
||||
* 整单放行时会被再写一遍正式表、再抛一遍 data 事件 —— 而承诺是「整单放行不再写它、不抛事件」。
|
||||
* 模型那一路不传这个旗:它的「空转写」要被看见(如实回 `changed:false`),行为一个字不变。
|
||||
*/
|
||||
skipUnchanged?: boolean | undefined;
|
||||
/**
|
||||
* **「只建不改」的表碰到已在库的键:跳过,不拒**(2026-08-29 终审 I2)。
|
||||
* 那句拒回是写给模型看的(「别再写它,用 drop 把骨架撤掉」)—— 摆到人面前毫无意义,
|
||||
* 而配方抛出去就是永久停单。对配方来说「这颗料已经在库了」是**常态**,不是错。
|
||||
*/
|
||||
skipExisting?: boolean | undefined;
|
||||
}): Promise<{
|
||||
changed: boolean;
|
||||
skipped?: boolean;
|
||||
}>;
|
||||
/**
|
||||
* **撤掉本单草稿层的一行** —— 写错了得有退路。
|
||||
|
||||
Reference in New Issue
Block a user