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

6.3 KiB
Raw Blame History

执行与验收 · 侧栏导航注册循环(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/ephemerisAppSidebar 的 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。

实施进度

  • 隔离基线与实施工作树、复用现有依赖(junction,不安装或升级)。
  • 注册订阅读写隔离与外壳消费调整(3 个源码文件,Home 状态与原注册 effect 未改)。
  • 真实 React 生命周期/transition 回归及反向验证。
  • 独立审查及可运行验收、完整测试/构建基线比较;Static/gzip/真人浏览器仍为明确缺口。
  • 本地提交修复 2c92f6100eb982756424e6f48a38680032917c23;文档换行修正 2178135021756d20c323f8c45d63f07fdc768e1e(保留历史,追加提交)。
  • 推送阻塞已解除: 首次 push 认证失败;用户要求再次尝试后,同一命令成功,远端完整 SHA 核对为 7e0037177d3babc9f8bb20b840dda8a060e37ace,包含本轮全部修复。未改认证配置或借用凭据,首次失败原因未确定。
  • 部署及登录态验收:成功推送后 health 仍为 d6fc4fb8Actions 匿名查询仍 401,尚未确认门禁/部署完成。
  • 失败后只读核对:远端仍 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 项失败对照。全量与构建使用同一 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 版本不变。