# 任务书 · 首页加载失败可恢复性与 BUG-936 收口(2026-09-22) ## 0. 基线与已有任务关系 - 基线 commit:`1bc6a954c597e2817fe72bfedad93119ab19a527`;执行方开工前 fetch 并重核最新 `origin/staging`。 - 执行分支:`codex/home-bootstrap-reliability-20260922`;工作树:`.worktrees/home-bootstrap-reliability-20260922`。 - 既有 `docs/tasks/TASK-first-paint-dead-screen-fallback-20260917.md` 已定义 BUG-936 的首屏内联 fallback 方案。本单不是另起炉灶:若该任务尚未合入,执行方应直接按其未完成项执行并以本单产品验收为准;若已合入,禁止重复添加第二套 fallback。 - 本单与 `/chart` 数据真值任务独立;不要用首页 bootstrap 改动掩盖星盘 API 问题。 - 本单与人物选择器都涉及首页装配时,优先完成并合入本单的 bundle 无关 fallback,再开始 `TASK-chat-subject-picker-20260922.md` 的首页接线;执行方不得同时修改 `page.tsx` 或同一 loading/reveal 符号。 ## 1. 事故实证 BUG-936(`docs/BUG_HISTORY.md`)记录:iPhone Safari 可能永久停在“正在载入账户 / 同步个人资料与对话记录”。已确认 `/api/account`、`/api/sessions`、`/api/models` 等接口返回 200;预渲染 HTML 本身包含加载屏;4 秒揭幕、8 秒 bootstrap timeout 和 401 处理全部在可能未执行的客户端 bundle 中。只要 chunk 未加载、解析失败、旧缓存损坏或 hydrate 失败,CSS 转圈会无限继续。 现有任务书已确认:根 layout 需要与 bundle 无关的内联经典脚本;不能自动刷新;本仓自有后行断言需移除,但不能声称因此解决所有 Safari 版本兼容问题。 ## 2. 根因与边界 本单负责的是“首屏失败时用户没有恢复出口和诊断”的确定性缺陷;具体设备 iOS 版本、chunk、缓存或内容拦截器根因仍需 staging/真人分流,不得提前编造。正常接口速度不是本单的优化目标。 ## 3. 决策记录 - 首屏必须在 JS 未执行、关键 chunk 失败或 hydrate 超时时给出可读失败状态和“重新加载”动作。 - 兜底必须与主 bundle 无关:内联、经典 `