Archived
修:引擎作用域不得吸入他单事实 + 记录 G2 未分流的排查线索
任务视图铺到顶层的字段,原先取「该对象最新一行」—— 那一行很可能是**别的任务** 放行后的正式版记录。实测:NE555P 的打标读到了上一单 LM358DR 的情报 (historyDays 30 / 在产),被判成 Type A;修正后按自己的事实判成 Type B「重估后报」, 与 P-03 规则一致。 改为只铺**本任务自己写下的**草稿(读己之写),别人的事实仍在 `域.对象` 整表里、 要用得显式取。ledger 门面因此新增 `taskDrafts(taskId)` —— 与 `taskView` 的区别是 它只回我写过的那些行。 顺带记录:A1 已能 released 且节点实例正确落 terminal,但 G2 并行网关未起出 下游 A3 / A2;排查线索写进 PROGRESS.md 待办 1。 gates: tsc / eslint / depcruise(317 模块)/ 393 测试 全绿 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -140,10 +140,16 @@ export function wireEngines(deps: EngineWiringDeps): EngineWiring {
|
||||
offset: 0,
|
||||
});
|
||||
scope[`${address.domain}.${address.object}`] = page.rows;
|
||||
const latest = page.rows[page.rows.length - 1];
|
||||
if (latest === undefined) continue;
|
||||
for (const [field, value] of Object.entries(latest)) {
|
||||
// 空值不盖掉已有事实:没写进去的字段不该把起单入参抹成 undefined
|
||||
}
|
||||
|
||||
/*
|
||||
* 铺到顶层的只能是**这一单自己写下的**事实(草稿层 = 读己之写)。
|
||||
* 不能拿「该对象最新一行」来铺:那一行很可能是别的任务放行后的正式版记录,
|
||||
* 一铺就把别人的结论当成了自己的输入 —— 打标会照着上一单的情报出结果。
|
||||
* 别人的事实仍在 `域.对象` 整表里,要用得显式去取。
|
||||
*/
|
||||
for (const draft of await deps.ledger.taskDrafts(taskId)) {
|
||||
for (const [field, value] of Object.entries({ ...draft.key, ...draft.patch })) {
|
||||
if (value !== null && value !== undefined) scope[field] = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,6 +90,12 @@ export type LedgerService = {
|
||||
query(query: LedgerQuery): Promise<LedgerPage>;
|
||||
/** 任务视图 = 正式版 + 本任务草稿层 */
|
||||
taskView(taskId: TaskId, query: LedgerQuery): Promise<LedgerPage>;
|
||||
/**
|
||||
* **本任务自己写的**草稿条目(读己之写的读面)。
|
||||
* 与 `taskView` 的区别:那个是「正式版 + 我的草稿」的合并视图,
|
||||
* 这个只回我写过的那些行 —— 引擎求值要区分「这一单的事实」与「别人放行后的事实」。
|
||||
*/
|
||||
taskDrafts(taskId: TaskId): Promise<Array<{ domain: string; object: string; key: Record<string, unknown>; patch: Record<string, unknown> }>>;
|
||||
/** 落地预检第五项:数据冲突检查 */
|
||||
checkConflicts(taskId: TaskId): Promise<ConflictFinding[]>;
|
||||
discardDrafts(taskId: TaskId): Promise<void>;
|
||||
|
||||
@@ -204,6 +204,11 @@ export function createLedgerService(deps: LedgerServiceDeps): LedgerService {
|
||||
return { rows, total: rows.length };
|
||||
},
|
||||
|
||||
async taskDrafts(taskId) {
|
||||
const drafts = await deps.drafts.list(taskId);
|
||||
return drafts.map((d) => ({ domain: d.domain, object: d.object, key: d.key, patch: d.patch }));
|
||||
},
|
||||
|
||||
async checkConflicts(taskId) {
|
||||
const drafts = await deps.drafts.list(taskId);
|
||||
if (drafts.length === 0) return [];
|
||||
|
||||
Reference in New Issue
Block a user