Files
Jyotisha/docs/tasks/PROGRESS-sidebar-navigation-loop-20260919.md
T
2026-09-19 14:48:43 +08:00

61 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 执行与验收 · 侧栏导航注册循环(2026-09-19
## 授权、基线与范围
- 产品明确授权修复并 push staging,实施计划已批准;主代理负责诊断/验收/交付,子代理实施限定源码与测试。
- 基线 `origin/staging = 507ef959f519218d190574fa588fc7b92c60229b`;独立工作树 `.worktrees/sidebar-navigation-loop-20260919`,分支 `codex/sidebar-navigation-loop-20260919`。同 SHA 的 detached 基线工作树用于测试和构建比较,不改主检出、不 stash。
- 开工核对 Bug 最大号 970,本轮暂用 BUG-971,提交前再次检查编号冲突。
- 只拆分会话数据与侧栏注册订阅;保持单侧栏、单列表数据源、最新操作回调、卸载注销、inert 和客户端导航。无样式/文案、数据库、依赖、workflow、DNS、main 改动。不扩修 BUG-967 的 health 时序问题。
## 事故实证与根因
产品确认测试站三个入口刷新后仍不切页;看到的 `/api/ephemeris``AppSidebar` 的 pointerenter/pointerdown 数据预取,不代表导航成功。匿名三个页面和 RSC 均 200;线上 `d6fc4fb8` 与本轮基线的关键导航源码相同。
`Home -> useSessionList -> useSessionManagement(新 visibleSessions/回调) -> useHomeShellRegistration effect -> setRegistration -> 同一 context 通知 Home` 形成反馈。真实 React 最小运行原版 122 render / 118 注册 / 2 个 maximum-depth 告警(保护阈值主动终止);只稳定回调无效,数组与回调稳定对照 3/1/0。另在第 3 render 发 startTransition,循环直到第 301 render 主动停止才允许目标 commit;普通优先级与稳定数组对照均可正常提交。Next Link 实际通过 startTransition 导航。
这是新的共享外壳运行时缺陷,关联 BUG-927,不把本轮刷新无效强归为旧 BUG-965/967。旧 provider 测试只有源码正则,未执行 effects。
## 实施进度
- [x] 隔离基线与实施工作树、复用现有依赖(junction,不安装或升级)。
- [x] 注册订阅读写隔离与外壳消费调整(3 个源码文件,Home 状态与原注册 effect 未改)。
- [x] 真实 React 生命周期/transition 回归及反向验证。
- [x] 独立审查及可运行验收、完整测试/构建基线比较;Static/gzip/真人浏览器仍为明确缺口。
- [x] 本地提交修复 `2c92f6100eb982756424e6f48a38680032917c23`;文档换行修正 `2178135021756d20c323f8c45d63f07fdc768e1e`(保留历史,追加提交)。
- [x] **推送阻塞已解除:** 首次 push 认证失败;用户要求再次尝试后,同一命令成功,远端完整 SHA 核对为 `7e0037177d3babc9f8bb20b840dda8a060e37ace`,包含本轮全部修复。未改认证配置或借用凭据,首次失败原因未确定。
- [ ] 部署及登录态验收:成功推送后 health 仍为 `d6fc4fb8`Actions 匿名查询仍 401,尚未确认门禁/部署完成。
- [x] 失败后只读核对:远端仍 `a2bcdee006397e2417f2e42d30ca030dd41ec480`,测试站 health 仍 `d6fc4fb8b3838702c62f9d2a181609ffb3df2985`,不含本轮修复。需用户恢复本人 Gitea 写入认证后再推送;未读取或借用其他凭据。
独立审查确认 data value 不依赖 registration、registrar 保持稳定、shell 单独读取、children 原样透传;账户/session 真正变动仍能通知 Home 并发布最新闭包。新 host helper 只运行 React reconciler/effect,不模拟点击、几何或浏览器可访问性。可见分页 observer、SidebarTrigger 操作与完整 Next 浏览器仍列真人缺口,没有声称全覆盖。
## 验证记录
| 项目 | 基线 | 修复后 | 结论 |
| --- | --- | --- | --- |
| 全量前端测试 | 3481 tests / 3403 pass / 78 fail | 3486 tests / 3408 pass / 78 fail | 新增 5 个通过;78 个失败测试名/次数完全一致,非全绿 |
| TypeScript | webpack 类型检查完成 | 独立 `tsc --noEmit --incremental false` 0 错 | 通过 |
| 完整 lint | 未重跑(未触碰原 warnings | 0 error / 120 warningsexit 0 | 零 error 通过,未顺手修 warning |
| 生产构建 / 首页 Static / 首屏 gzip | 编译/类型完成,collect page data: Skill symlink EPERM | 同阶段同根因 EPERM(含共同 /api/birth-time-guide | 构建失败;Static/gzip 未验收 |
| 生命周期反向 | 新 4 条在旧源码 3 fail / 1 pass50 render 保护) | 4/4 pass | 证明能抓回归 |
| 主会话独立五文件定向 | 原四文件 60/60 | 65/65fail 0 | 通过 |
| staging 交付 / 部署 | 远端 a2bcdee0;线上 d6fc4fb8 | 重试 push 成功,远端核对 7e003717;线上仍 d6fc4fb8 | 代码已推送;部署未确认 |
- 全量逐项证据:[78 项失败对照](../testing/sidebar-navigation-baseline-failures-20260919.md)。全量与构建使用同一 node_modules、相同命令;不读取用户凭据,不改生产源码绕过 Windows 权限。
- 定向:`tsx --test tests/session-list-lifecycle.test.tsx tests/session-list-provider.test.ts tests/secondary-page-entry.test.ts tests/sidebar-contract.test.ts tests/account-dialog-inert-20260918.test.ts`
- 构建:`npm run build -- --webpack`。Next 16.3.1 编译与类型通过不等于构建通过。
- 推送前 fetch 得到 `a2bcdee006397e2417f2e42d30ca030dd41ec480`,相对初始基线仅 2 个文档提交、2 处文档文件变化,Bug 最大号仍 970;整合后代码测试基线不变。
- Gitea Actions runs 匿名只读 API 返回 401;未借用/搜寻其他账号凭据,门禁详情查询为环境缺口。
## 既有断言改动
| 原值 | 新值 | 原因 |
| --- | --- | --- |
| 既有断言全部保留 | 不修改任何旧断言;追加 1 条结构合同和 4 条生命周期测试 | 锁定订阅边界并执行真实 effect/transition,测试总数 +5;没有弱化或减少覆盖 |
## 环境边界
- 不使用真实用户 Cookie/凭据,不接管故障标签页;登录态完整 Next 点击验收待 `docs/testing/sidebar-navigation-loop-20260919.md`
- Windows 基线与修复树均复用相同 node_modules;为避免 Turbopack 外部 junction 限制,用相同 `npm run build -- --webpack` 对照,具体结果如实记录。
- 本会话此前 `pre_work_check.py` 远端 verified,但两条碎片扫描断言失败(镜像路径字面量与候选/残留统计边界),不属于本轮前端修复,不改断言掩盖失败。
- Skill 版本不变。