fix(web): hold reverse-inference cards until acceptance event quality
Independent Staging Quality Gate / validate (push) Successful in 22m10s
Independent Staging Quality Gate / publish (push) Failing after 7m28s

Conflict probes were jumping after one dated event, so the interview asked
another domain before method collection. Spoken replies now follow the
stamped choice prompt instead of a topic denylist.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-25 23:53:42 +08:00
co-authored by Cursor
parent 37c5c8d356
commit 97b02aef5d
10 changed files with 346 additions and 59 deletions
@@ -243,6 +243,8 @@ test("usage completes or releases without hiding settlement failures", () => {
assert.match(run, /thinkingTokens: 8_192/);
assert.match(run, /activity.changed/);
assert.match(run, /if \(!answerText\.trim\(\)\) \{[\s\S]*composeRectificationTurnNarration/);
assert.match(run, /bindSpokenToOpenQuestion/);
assert.match(run, /openQuestionPromptFromToolResult/);
assert.doesNotMatch(run, /splitRectificationSpokenAndThinking/);
assert.match(run, /emit\(event: PublicStreamEvent\): Promise<void> \| void;/);
assert.match(run, /agentGenerationSettings\(options\.generationModel, \{[\s\S]*thinking: "enabled"/);
@@ -637,6 +639,8 @@ test("the Agent prompt cannot offer candidates while asking for more evidence",
assert.match(agent, /id 不是 adopt_representative 时不得调用 rectification-offer-candidates/);
assert.match(agent, /verify_adopted_time/);
assert.match(agent, /event_probe/);
assert.match(agent, /至少 3 件/);
assert.match(agent, /2 个领域/);
assert.match(agent, /selection_allowed 只表示可以采用代表性时间/);
const tools = readFileSync(
new URL("../src/mastra/rectification-v9-tools.ts", import.meta.url),