fix(rectification): keep targeted collect cards tappable after snapshot reread (BUG-669~671)
Independent Staging Quality Gate / validate (push) Successful in 25m6s
Independent Staging Quality Gate / publish (push) Successful in 2m9s

GET dropped the A–D card when the recast had no choice_frame, so a refresh left a disabled card and a collect-wait. Project from the persisted copy, rebuild the keep frame, and send a dead choice to repair-exit.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-13 21:50:35 +08:00
co-authored by Cursor
parent 3c75643b83
commit 192845ce2f
12 changed files with 426 additions and 11 deletions
@@ -0,0 +1,36 @@
# 进度 · 定向补事卡刷新后点不动(P0,2026-09-13
## 范围
- 工作树:`.worktrees/rectification-targeted-card-dead-20260913`(未改原仓脏工作区 `codex/minute-rectification-p0`
- 分支:`codex/rectification-targeted-card-dead-20260913` tracking `origin/staging` @ `3c75643b`(含任务书;代码基线仍是已部署的 `ab1ade59`
- 任务单:`docs/tasks/TASK-rectification-targeted-card-dead-20260913.md`
- BUG-669:GET 按持久化文案出定向卡
- BUG-670:承接焦点重建 `choice_frame`,禁止模型改写题干
- BUG-671`choice` 无卡时走 repair-exit,不画灰卡、不进采集等待
- 不改 `SCORE_DELTA`、确认门、区分题 `semantic_key` / `candidate_split_hash` 全等
- Skill 版本不变(10.0.25
## 完成
- T1`projectRectificationChoiceCard``targeted_collect` 四点选 schema 上直接投影,`:next` 同样出卡,`scoring: false``stop_label`「这题跳过」,不用计划层 frame,也不做 questionId 全等
- T2`buildMethodFollowupPlan` 承接 `collect_method_evidence` 定向存在题时用 `buildTargetedCollectExistenceFrame` 重建 frame,hint 为「照发服务端卡片,不要自己写题干。」
- T3`interviewChoiceCardUnavailable`;聊天把死卡当成 `unavailable` + 「接着问」;未答死卡不再以 disabled 点选画出
- T4`frontend/tests/rectification-targeted-card-live-20260913.test.ts`BUG-669671;场景 0d 加刷新仍可点 / 不得看得见点不动
## 验收(本机,未部署)
- `cd frontend && ./node_modules/.bin/tsc --noEmit`0 错
- `cd frontend && npm run lint`0 error / 120 warning(既有)
- 相关 TAP fail=0`rectification-targeted-card-live-20260913` + `rectification-targeted-collect-cards-20260913` + `rectification-question-ownership` + `rectification-v9-contracts` + `rectification-surface-state` + `rectification-choice-card`**82 / 82**(新文件 4/4
- 全量 `cd frontend && ./node_modules/.bin/tsx --test tests/*.test.ts tests/*.test.tsx`tests **3144**(≥ `ab1ade59` 实测 3139);pass 3139 / fail 5 / skipped 0。5 条失败均为并行 Docker 夹具:槽位超时或 `database migration failed``database-admin-identity`、admin customer reset、`rectification-pr4-database``rectification-v9-database` 两条),本单未改迁移/后台。
- `cd frontend && ./node_modules/.bin/next build --webpack`:退出 0`/``○ Static`。默认 Turbopack 仍不适配 worktree 外 `node_modules` 软链。standalone 复制 `rishi-ai-mcp/.cursor|.vscode` 有 EPERM 警告,不影响路由表。
- 首屏 `rootMainFiles` gzip-9**130934 B** vs `ab1ade59` 的 130872 B**+62 B / +0.047%**,±2% 内)
- 预检:`pre_work_check.py` 一次因 fragment_scan 90s / focused_tests 45s 超时失败;`remote_visibility=verified``external_engine_adapters_ok=true`。随后用主仓 `.venv` 跑 focused pytest(不含整机 fragment scan20 passed。
- 未做登录态真机场景 0d(无本地会话)
## 未做
- 未 commit / 未 push
- 未部署、未真机刷新走查
- 未执行 `TASK-rectification-tie-break-entry-fix-20260913.md`(按串行排在本单之后)
+1 -1
View File
@@ -182,7 +182,7 @@
| `TASK-rectification-tie-break-entry-fix-20260913.md` | — | 修复单:参考题入口只读 `window_scan` 标志位 → 两道答完后仍显示、再点弹「现在没有可答的参考题」;并按产品拍板改成点一次连出 D9+D10(BUG-666668 | 待执行 | `codex/rectification-tie-break-entry-fix-20260913` |
| `TASK-rectification-targeted-card-dead-20260913.md` | | **P0**:定向补事卡在快照投影里拿不到 `choice_card`(承接焦点分支不重建 `choice_frame`),卡片看得见点不动、流程停在采集等待态;模型还会把定向题改写成口述题(BUG-669~671)。先于 tie-break 修复单执行 | 待执行 | `codex/rectification-targeted-card-dead-20260913` |
| `TASK-rectification-targeted-card-dead-20260913.md` | `PROGRESS-rectification-targeted-card-dead-20260913.md` | **P0**:定向补事卡在快照投影里拿不到 `choice_card`(承接焦点分支不重建 `choice_frame`),卡片看得见点不动、流程停在采集等待态;模型还会把定向题改写成口述题(BUG-669~671)。先于 tie-break 修复单执行 | 待验收 | `codex/rectification-targeted-card-dead-20260913` |
## 命名与归档