2.6 KiB
2.6 KiB
PROGRESS · 账户弹窗 inert + 校正快照不再静默(2026-09-18)
工作树:.worktrees/account-dialog-inert-20260918
分支:codex/account-dialog-inert-20260918
基线:origin/staging @ e760b1d6(任务书写 1061514f,开工时 staging 已快进到此)
合入提交:824ecff0
任务书:docs/tasks/TASK-account-dialog-inert-20260918.md
任务状态
| 任务 | 状态 | 说明 |
|---|---|---|
| 3.1 BUG-968 弹窗移出 inert | 完成 | 选 (a) createPortal(..., document.body)。账户弹窗与 onboarding 付费墙都挂到 document.body。SidebarInset 的 inert={modalOpen} 保留,移动端抽屉分支不动。 |
| 3.2.1 GET 非 200 记 warn | 完成 | warnRectificationCaseGet:401/400/409/404/503 及 supabase 配置失败都打 JSON(event / case_id / status / code / reason),不含用户资料。 |
| 3.2.2 客户端失败不静默 | 完成 | loadCaseSnapshot 非 2xx / 网络错误写入 snapshotFailure;校正面「这一问还没读到。」+「重新读取」。hydrate 带 failure.status。refreshRectificationCase 失败走 composer notice。Abort 不当失败。 |
| 3.2.3 确定性回复带题干 | 完成 | 下一题是可渲染选择题时,persistApplied 与 persistCollectDenialTurn 用 composeCollectSpokenAssistantText 追加题干并随流发出。口述采集仍只 stream ack(BUG-525)。attachQuestionsToTurns 去重。 |
方案选择(3.1)
选 (a) createPortal 到 document.body,不选 (b) 把节点交给 AppShell。
原因:现有 overlay 的 DOM、焦点圈禁(overlayRef + keepFocusWithin)、Esc 关闭都不用改;不必扩展 registerShellControls。SSR 走 typeof document === "undefined" 的原树,现有 renderToString 合同继续看见 dialog。
让步
无。3.1 与 3.2 的 1→2→3 都做完。BUG-969 快照失败的根因仍未由线上日志证实,状态写 mitigated,不得写 resolved。
测试
| 项 | 结果 |
|---|---|
tsc --noEmit |
0 错 |
npm run lint |
0 error / 120 warning(未顺手修 warning) |
| 定向 | account-dialog-inert-20260918 4/4;overlay / surface-state / surface-contract / collect-stall / question-in-message / membership / sidebar-contract / a11y / home-shell-growth / answer-choice 全绿 |
全量 npm test |
3480 条,3402 绿,78 红。失败清单是 Windows 无 Docker / skill symlink EPERM / Unix 部署脚本,与本机近期口径一致;新增 4 条全绿,被改过的 discriminator 断言已按三栏改完。Linux 门禁基线仍是 31 红。 |
Home() 冻结 |
useState / useRef 未增长 |