Merge origin/staging into consultation family-contract fix.
Independent Staging Quality Gate / validate (push) Successful in 11m16s
Independent Staging Quality Gate / publish (push) Successful in 34m6s

Keep BUG-628 collect-chip history and add BUG-630 natal homepage contract fix.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-09 22:49:14 +08:00
co-authored by Cursor
11 changed files with 171 additions and 64 deletions
@@ -116,9 +116,9 @@ test("cases current_question remains the submit contract, not a visual slot", ()
const wrap = chat.slice(chat.indexOf("className=\"composer-wrap\""), chat.indexOf("className=\"composer-footer\""));
assert.doesNotMatch(wrap, /rectification-collect-stop/);
assert.doesNotMatch(wrap, /CHOICE_STOP_LABEL/);
// 旧:输入框上方两个 44px 次要按钮「没有」「记不清」(BUG-605
// 新:同一组按钮挂在问题气泡 afterAnswer 里,composer 不再托管
// 原因:BUG-618;不得复用 rectification-step-state
// 旧:口述采集挂「没有」「记不清」芯片BUG-605 / BUG-618
// 新:芯片全部去掉;打字「没有 / 记不清」仍走短路
// 原因:BUG-628,用户一致差评
assert.doesNotMatch(wrap, /rectification-collect-replies/);
assert.doesNotMatch(wrap, /rectification-collect-reply/);
assert.doesNotMatch(wrap, /send\("message", "没有"\)/);
@@ -127,18 +127,18 @@ test("cases current_question remains the submit contract, not a visual slot", ()
chat.indexOf("const afterAnswer = question"),
chat.indexOf("key={message.renderKey}"),
);
assert.match(afterAnswer, /CollectSpokenReplies/);
assert.match(afterAnswer, /send\("message", text\)/);
assert.match(chat, /function CollectSpokenReplies/);
assert.match(chat, /rectification-collect-replies/);
assert.match(chat, /rectification-collect-reply/);
assert.match(chat, /onChoose\("没有"\)/);
assert.match(chat, /onChoose\("记不清"\)/);
assert.match(chat, />[\s\n]*没有[\s\n]*</);
assert.match(chat, />[\s\n]*记不清[\s\n]*</);
assert.match(chat, /liveQuestion && question.kind === "collect_spoken"/);
assert.doesNotMatch(afterAnswer, /CollectSpokenReplies/);
assert.doesNotMatch(afterAnswer, /shouldShowCollectSpokenReplies/);
assert.doesNotMatch(chat, /function CollectSpokenReplies/);
assert.doesNotMatch(chat, /rectification-collect-replies/);
assert.doesNotMatch(chat, /rectification-collect-reply/);
assert.doesNotMatch(chat, /onChoose\("没有"\)/);
assert.doesNotMatch(chat, /onChoose\("记不清"\)/);
assert.doesNotMatch(chat, />[\s\n]*没有[\s\n]*</);
assert.doesNotMatch(chat, />[\s\n]*记不清[\s\n]*</);
const styles = readFileSync(new URL("../src/app/globals.css", import.meta.url), "utf8");
assert.match(styles, /\.rectification-collect-reply \{[\s\S]*min-height:\s*44px/);
assert.doesNotMatch(styles, /\.rectification-collect-replies/);
assert.doesNotMatch(styles, /\.rectification-collect-reply/);
assert.equal(parseRectificationChoiceCard(COLLECT_GET_QUESTION), null);
});