fix(rectification): simplify delivery card and guard double turns (BUG-595, BUG-596)
Independent Staging Quality Gate / validate (push) Successful in 25m9s
Independent Staging Quality Gate / publish (push) Successful in 37m19s

Make the range card row-select, drop the composer 先这样 control and adopt status bar, keep delivery copy to three sentences with a folded verification report, and skip a second no-message agent run after a terminal delivery turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-08 19:56:48 +08:00
co-authored by Cursor
parent 6368ebba0f
commit 7e3b6cdc7a
60 changed files with 1561 additions and 1105 deletions
@@ -694,13 +694,14 @@ test("last structured choice emits the adoption range and persists the same narr
assert.equal(applied.nextAction.type, "ready_to_adopt");
assert.equal(applied.nextAction.can_adopt, true);
assert.match(applied.narration, /05:\d{2}/);
// 旧:/代表分钟/ 锁「范围是 X,代表分钟 X」。单分钟区间会把同一时刻念两遍。
// 新:单分钟说「眼下更站得住的是 HH:MM」;跨分钟范围仍可说代表分钟。
assert.match(applied.narration, /眼下更站得住的是|代表分钟/);
// 原值: 「眼下更站得住的是|代表分钟」+ adoptCue
// 新值: 三句交付(这次给出的范围 / 排盘用 / 对照经历 / 边界句)
// 原因: BUG-595 决策 4
assert.match(applied.narration, /这次给出的范围|排盘用/);
assert.equal(containsBoundarySemantics(applied.narration), true);
assert.match(applied.narration, /我按你说的经历认真分析过了/);
assert.doesNotMatch(applied.narration, /方法1|Technique Audit/);
const turn = accounting.calls.find((call) => call.fn === "append_agentic_rectification_turn");
assert.match(String(turn?.args.p_assistant_message ?? ""), /我按你说的经历认真分析过了/);
assert.match(String(turn?.args.p_assistant_message ?? ""), /这次给出的范围|排盘用/);
});
test("clicking A applies the choice without invoking a language model", async () => {