Archived
fix(loop-engine): carded 只跳过这一笔,不收拍 —— 配方尾部的笔从前永远不跑
同一份配方 `[project, card, project]` 在两种局面下行为相反:人还在填(quiet)时 card 被 quiet 过滤 `continue` 掉,**第三笔照跑**;人交回之后(非 quiet、carded) 走到 carded 分支 `stop: true` break 掉整条 do,**第三笔不跑**。 也就是说**唯一一个「人的答案已经在草稿里」的时刻,配方的后半截偏偏不执行**; 而人还没答完时它倒是跑了。写配方的人会很自然地写「铺格 → 发卡 → 收口整理」, 然后发现第三笔从来没生效过 —— 静默,没有痕。 「收拍」留给**真发出去了卡**那一次(两条带 stop 的 return 不动)。 配套一条装包 warn:card 后面还有 N 笔时说清它们什么时候跑 —— 顺序读起来像 「一拍连做」,实际要等人交回之后的那一拍。 auto-runner 3 测(carded 跑完 / 真发卡仍收拍 / quiet 与 carded 现在一致)+ static-audit 2 测。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -211,13 +211,22 @@ export function createAutoRunner(deps: AutoRunnerDeps): {
|
||||
* 不必再有一个「先 start」的礼仪:学不稳的礼仪就是死法(2026-08-02 已拆过一次)。
|
||||
*/
|
||||
if (context.carded) {
|
||||
/*
|
||||
* **只跳过这一笔,不收拍**(2026-08-29 终审 I3)。从前这里 `stop: true`,
|
||||
* 于是同一份配方 `[project, card, project]` 在两种局面下行为相反:
|
||||
* 人还在填(quiet)时 card 被上面那道 quiet 过滤 `continue` 掉 → **第三笔照跑**;
|
||||
* 人交回之后(非 quiet、carded)→ 走到这儿 break,**第三笔不跑**。
|
||||
* 也就是说唯一一个「人的答案已经在草稿里」的时刻,配方的后半截偏偏不执行 ——
|
||||
* 写配方的人会很自然地写「铺格 → 发卡 → 收口整理」,然后发现第三笔从来没生效过,
|
||||
* 而且静默、没有痕。**「收拍」该留给真发出去了卡那一次**(下面两条 return 带 stop)。
|
||||
*/
|
||||
await deps.memory.append({
|
||||
taskId: context.taskId,
|
||||
kind: 'observation',
|
||||
title: `这一步已经发过卡,不再发第二张`,
|
||||
detail: { auto: `${context.stepId}#${index + 1}`, internal: true },
|
||||
});
|
||||
return { wrote: 0, dropped: 0, stop: true };
|
||||
return { wrote: 0, dropped: 0 };
|
||||
}
|
||||
const basis = (action.basis ?? []).map((b) => ({ k: b.k, v: evalText(b.v, base) }));
|
||||
if (action.as === 'decide') {
|
||||
|
||||
Reference in New Issue
Block a user