Files
Jyotisha/docs/tasks/PROGRESS-staging-gate-fix-20260924.md
T

5.3 KiB
Raw Blame History

PROGRESS · TASK-staging-gate-fix-20260924 · 2026-09-24

基线与范围

  • 基线:origin/staging = 6dc6510c1b789399f9bc6c94b999b63d4e8bb381(任务书记录的代码提交 f125fae0 已在该历史中)。工作树开工前已执行 git status -sb 与 git fetch origin --prune,随后以当前 origin/staging 重置到干净基线。
  • 本轮只执行非破坏性 T1–T3 与允许写入记录;未删除、清空、替换任何 raw-appendix 文件或其测试。T4 保留为用户批准/权限 blocked。
  • 不改 workflow、数据库、依赖、main、DNS、其它 worktree;未 push。

T1:5 条新增红合同测试

断言 原值 新值 原因
chat-navigation-a11y-contract.test.ts bootstrap retry window.location.reload() 硬刷新 断言 retryHomeBootstrap(...),并断言 helper 清空错误、回到账户阶段、调用 provider reload;同时保留 window.location.reload() 禁止断言 D2 已批准局部重试;不能把已验收行为改回整页刷新
new-chat-recovery.test.ts activation slice 以已删除的 if (modelCatalogResult.unavailable) 作终点 以稳定的 if (parsedSessions.fallbackSessionIds.length > 0) 作终点 模型失败现走 fatal screen,源码合同不得依赖删除语句
consultation-recovery.test.ts bootstrap start 以 let reservedConsultation ... = null 作起点 以 const storedPending = dropRectificationStoredPending( 作稳定起点 并行预取改变初始化右值,恢复逻辑行为未变
consultation-recovery.test.ts pending/global ordering 要求 stored pending 分支源码先于 fetchActiveConsultationStatus 仅要求 pending 分支存在并检查其 request/session 参数 T1/D2 将全局状态与模型目录并行预取;源码顺序不再代表优先级,避免锁错误实现形状
new-chat-recovery.test.ts / consultation-recovery.test.ts shared boundaries 依赖易变语句/初始化形状 使用稳定、行为相关锚点并保留真实函数执行 同型源码脆弱合同再次触发(BUG-933/934/939/992);不删除测试、不弱化行为断言

modelCatalogResult.unavailable 在 frontend/tests 中应为 0 命中;T4 raw-appendix 测试不触碰。

T2:page.tsx 行数

  • 原值:frontend/src/app/(app)/page.tsx 1858 行(本轮工作树初始 staging);任务书要求回到任务书基线 edc9c22c 的 1849 行。
  • 新值:将错误屏重试的 5 行状态清理抽到 frontend/src/lib/home-bootstrap.ts 的 retryHomeBootstrap,并合并不改变语义的 import 空白/相邻声明行;page 当前 1847 行,低于任务书要求的 ≤1849。
  • 原因:保持错误屏与局部重试行为不变;仅删除空白并合并 import 声明,不删除业务逻辑或 hook。

T3:支付成功无条件广播余额

  • 原值:仅在 typeof payload.credits === "number" 时调用 notifyBalanceChanged;订阅订单 credits 缺失时不广播。
  • 新值:支付状态 paid 后无条件调用 notifyBalanceChanged(typeof payload.credits === "number" ? payload.credits : 0)。
  • 原因:page.tsx 余额监听只触发 refreshAccount(),支付成功不能因订阅响应缺失点数而静默不刷新;未知余额使用 0 仅作为事件载荷,服务端刷新仍是权威值。既有点数订单行为保持。
  • 回归断言:frontend/tests/billing-panel.test.ts 已从仅检查 credits 类型改为锁定 paid 分支无条件调用,并记录订阅响应缺少 credits 时使用 0 载荷的原值/新值/原因。

T4 与记录边界

  • raw-appendix 三件套及 frontend/tests/personal-report-raw-appendix.test.ts 原样保留;没有删除、清空、替换或借其它工具绕过权限。
  • docs/testing/report-reader-actions-20260924.md、docs/tasks/PROGRESS-report-reader-actions-20260924.md 当前未由本轮创建;若权限允许,待用户批准后由协调主会话补齐。T4 删除及其全仓零命中验收均 blocked。

验证

  • 已执行静态 diff、源代码切片检查、行数检查:page 从 1858 降至 1847;git status -sb 干净起步,当前仅本轮列出的代码/测试/记录有修改。frontend/tests 中 modelCatalogResult.unavailable 命中为 0;raw-appendix 三件套仍各有源码命中并保留。
  • 本环境是 Windows,工作树无 frontend/node_modules;tsx、tsc、eslint、next 均不可用,故定向测试、tsc、lint、build 和全量测试未执行,未声称通过。
  • 未找到可用 Linux runner 或 Linux 日志。任务书提供的 Linux 基线:edc9c22c 3807 条、56 条失败;当前 f125fae0 3809 条、61 条失败,新增 5 条名称已列于任务书。本轮无法实际重跑 Linux 全量并逐条 diff,Linux 当前失败名单/新增必须为 0 验收 blocked。
  • tsc、lint、定向测试、build、Linux 全量测试和失败名单逐条比较均待具备 Node 依赖的 Linux 环境后运行;不得将环境缺口写成通过。

下一步

  1. 在 Linux/Node 20 环境安装或使用现有依赖,运行全量前端测试并与 edc9c22c 失败名单逐条比较,新增必须为 0。
  2. 同环境运行 ./node_modules/.bin/tsc --noEmit、npm run lint、5 条定向测试、npm run build。
  3. 用户批准并解除权限后再处理 T4;当前不 push、不部署。