fix(rectification): show choice-card prompt instead of hiding it
Independent Staging Quality Gate / validate (push) Successful in 9m18s
Independent Staging Quality Gate / publish (push) Successful in 6m59s

BUG-401 hid the legend to avoid duplicating Agent copy. After the
question contract, the Agent only leads in, so the persisted stem
must be visible on the card.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-28 09:10:56 +08:00
parent 912ad34303
commit 4bf074b2bf
3 changed files with 20 additions and 3 deletions
+16
View File
@@ -6188,3 +6188,19 @@
- 复发自:BUG-403(动态四选项合同未贯穿 Python/排序)、BUG-404Focus 与口语问题仍可分裂)
- 修复版本:10.0.13
## BUG-406 | 点选题干只在无障碍 legend 里,卡片上看不到
- 状态:resolved
- 首次发现:2026-08-28
- 最近更新:2026-08-28
- 影响面:`rectification-choice-card`、GET `choice_card.prompt`、生时纠正 Agent 口语
- 用户现象:区分阶段出现 A/B/C/D,气泡只说“请看下面的选项”,卡片上方没有年份和事件家族;用户看不到要核对的是哪一类经历。
- 触发条件:服务器已持久化 `choice_card.prompt``年份 · 事件家族`),Agent 按 P0 只写承接句、不复述题干。
- 根因:BUG-401 把卡片 legend 设为 `sr-only`,当时题干由 Agent 正文展示。BUG-405 改为正文只做承接、题干以 Focus/卡片为真源,但没有取消 `sr-only`,题干两边都不出现。
- 修复:卡片 legend 恢复为可见题干,与 GET `choice_card.prompt` 同一份文案。不改 Skill `10.0.13`
- 验证:`frontend/tests/rectification-agentic-entry.test.ts` 锁定可见 `<legend>{props.card.prompt}</legend>`,禁止 `sr-only`
- 防复发:有点选卡时题干必须在卡片上可见。Agent 承接句不得替代卡片题干。不得再把 `choice_card.prompt` 藏进 `sr-only`
- 相关记录:BUG-400、BUG-401、BUG-405
- 复发自:BUG-401(卡片隐藏题干)叠加 BUG-405(正文不再复述题干)
- 修复版本:待发布
@@ -42,7 +42,7 @@ export function RectificationChoiceCard(props: RectificationChoiceCardProps) {
aria-label={props.card.scoring ? "校正判断" : "盘外核对"}
>
<fieldset className="birth-time-choice-question" disabled={props.pending || props.disabled || Boolean(selectedKey)}>
<legend className="sr-only">{props.card.prompt}</legend>
<legend>{props.card.prompt}</legend>
{props.card.why ? <p className="rectification-choice-why">{props.card.why}</p> : null}
<div className="birth-time-primary-choices">
{primary.map((option, index) => (
@@ -667,8 +667,9 @@ test("the Agent prompt cannot offer candidates while asking for more evidence",
assert.doesNotMatch(tools, /offer_selection/);
});
test("choice cards keep the question accessible without repeating it visually", () => {
assert.match(choiceCardComponent, /<legend className="sr-only">\{props\.card\.prompt\}<\/legend>/);
test("choice cards render the persisted prompt as the visible question stem", () => {
assert.match(choiceCardComponent, /<legend>\{props\.card\.prompt\}<\/legend>/);
assert.doesNotMatch(choiceCardComponent, /<legend className="sr-only">\{props\.card\.prompt\}<\/legend>/);
});
test("adopted time offers a consultation handoff without unique-minute copy", () => {