docs: acceptance of 0e4dd0f4..f125fae0 — gate red on 5 contract tests, fix brief
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f125fae0a0
commit
6dc6510c1b
@@ -117,8 +117,9 @@
|
||||
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-staging-gate-fix-20260924.md` | — | **修复单(阻塞 staging 部署)**:慢网首页 `0e4dd0f4` 起 5 条源码合同测试未跟上(硬跳转计数、重试 reload 正则、两处按已删语句切片)→ 门禁红,`0e4dd0f4..f125fae0` 全部未部署;另 page.tsx +9 行、订阅支付不刷新余额、原始附录三文件残留。只修测试与收尾,不改已验收行为;失败名单须与 `edc9c22c` 逐条一致 | 待领取(**最优先**) | — |
|
||||
| `TASK-people-archive-p1-20260924.md` | — | **星盘档案(多人物)P1**:每个档案 = 一个人(含本人),最多 5 人、无关系字段;标题旁人名 = 全局切换器(对话 / 星盘 / 星历 / 报告 / 档案页同一组件),星盘、星历、报告、今日星语、新建对话都跟当前人物走(推翻 BUG-1000 新对话固定本人);历史只显示当前人物;档案管理改侧栏 `/people` 页、设置删星盘资料;删人连带删对话与报告;取消「设为默认」/`activeChartId`(BUG-1030 错人)。他人资料改类型化列 + 与户主同级守卫,统一 `resolveSubjectBirth`;户主暂留 `profiles`。生时校正跟人与任意两人合盘留 P2。**同日四单全部合入后开工**,需 Docker 跑 test:db | 待领取 | — |
|
||||
| `TASK-home-slow-network-20260924.md` | — | **慢网首页半揭幕 + 账户与点数打开慢(BUG-1021/1022)**:8 秒硬超时包住多跳串行请求、超时不补拉,独立的会话列表 provider 晚到 → 正常首页+报错条、模型「暂不可用」、新建对话灰、重问称呼。产品 09-24 拍板:推翻 8 秒硬超时,等齐再揭幕,20 秒才出错误屏且重试为局部重请求(不整页刷新);账单面板删无用 `/api/account`、预取 chunk、套餐缓存。先于 chart-ephemeris T3 合入 | 待领取 | — |
|
||||
| `TASK-home-slow-network-20260924.md` | — | **慢网首页半揭幕 + 账户与点数打开慢(BUG-1021/1022)**:8 秒硬超时包住多跳串行请求、超时不补拉,独立的会话列表 provider 晚到 → 正常首页+报错条、模型「暂不可用」、新建对话灰、重问称呼。产品 09-24 拍板:推翻 8 秒硬超时,等齐再揭幕,20 秒才出错误屏且重试为局部重请求(不整页刷新);账单面板删无用 `/api/account`、预取 chunk、套餐缓存。先于 chart-ephemeris T3 合入 | 验收未通过(Claude 09-24:逻辑符合,但 5 条合同测试红致门禁红未部署 + page.tsx +9;修复单 staging-gate-fix) | `0e4dd0f4`/`2f53fa01`/`25e32fe6`(未部署) |
|
||||
| `TASK-secondary-new-chat-intent-20260923.md` | `PROGRESS-secondary-new-chat-intent-20260923.md` | **次级页「新建对话」落到最近一次对话**:`/chart` `/ephemeris` `/reports` 的侧栏没有 `controls`,「新建对话」只是 `href="/"` 的回首页链接;首页无参启动的落点是 `nextSessions[0]`(最近更新那条),只有最近一条是校正会话才改落空咨询。BUG-745 修过同一入口的「慢」,没修「回到哪」。产品 09-23 拍板:链接改 `/?new=1`,首页看到 `new` 就本地建空咨询并 `replaceState` 抹掉参数;`new` 胜过 `c` 与登录返回存根;沿用 BUG-989 不落库不写 `?c=`;页脚与品牌行的 `/` 不改;刷新无参 `/` 仍落最近对话属既有设计。红线:`/` 保持 Static、不得用 `useSearchParams`;解析与生成只在 `chat-session-url.ts` 一处。BUG-1015;执行中追加 D7:保留旧任务恢复但不抢新建落点。 | 已验收(Claude 09-24:tsc/lint/95 定向/全量失败名单同基线/Static/gzip 同基线;BUG-1015 resolved) | `8902e484`,含于已部署 `1420471a`;真机清单欠 |
|
||||
| `TASK-chat-message-authority-20260901.md` | — | 消息服务端权威化 | 已验收 | `b6989c3e`(BUG-464) |
|
||||
| `TASK-session-url-20260901.md` | — | 会话 URL 化 | 已验收 | `924f4202` |
|
||||
@@ -173,8 +174,8 @@
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-report-reader-main-20260924.md` | — | **报告正文换上游读者版 reader_main + KP / Muntha 计算缺陷 + 投影截断(BUG-1026/1027/1028)**:正文一直是上游审计版(读者版 09-09 才出、从未同步),本仓又自加「结论等级规则」/英文段/异常原文;投影黑名单不认 PL9 词汇且截断半句、删表留说明;KP args `vars()` 拷贝为空恒失败;Muntha 漏合 `birth_asc_sign_idx` → Year Lord 恒火星。产品拍板接入读者版、旧报告不回填。引擎类需 pre_work_check;排在 BUG-1020 fix 之后 | 待领取 | — |
|
||||
| `TASK-report-reader-actions-20260924.md` | — | **报告操作收敛**:列表只留「查看报告」;阅读页删「下载原始附录」「打印」,导出改图标按钮;导出对话框 ≥860 居中、窄屏仍贴底(修订 chapter-export D9/D10)。产品变更,不开 BUG 号 | 待领取 | — |
|
||||
| `TASK-report-chapter-export-fix-20260924.md` | `PROGRESS-report-chapter-export-20260924.md` | **CRLF图盘JSON残留(BUG-1020)**:旧剥离器只匹配LF;建议D5对错误围栏残留作有限例外,D13不构成该授权。 | 待领取(产品 09-24 批准 D5 有限例外 D14) | — |
|
||||
| `TASK-report-reader-actions-20260924.md` | — | **报告操作收敛**:列表只留「查看报告」;阅读页删「下载原始附录」「打印」,导出改图标按钮;导出对话框 ≥860 居中、窄屏仍贴底(修订 chapter-export D9/D10)。产品变更,不开 BUG 号 | 基本通过(Claude 09-24:入口收敛、图标、≥860 居中均符合;原始附录三文件因执行方权限未删、PROGRESS/清单未写 → 并入修复单) | `f125fae0`(未部署) |
|
||||
| `TASK-report-chapter-export-fix-20260924.md` | `PROGRESS-report-chapter-export-20260924.md` | **CRLF图盘JSON残留(BUG-1020)**:旧剥离器只匹配LF;建议D5对错误围栏残留作有限例外,D13不构成该授权。 | 代码已验收(Claude 09-24),待部署(被同批门禁红阻塞) | `fa8fef55`/`133aca49`(未部署) |
|
||||
| `TASK-report-chapter-export-20260924.md` | `PROGRESS-report-chapter-export-20260924.md` | **我的报告:分块导出 + 中文元信息 / 状态色 / 行内确认删除(BUG-1018/1019)**。旧整篇按钮由抽屉取代;常用 / 全部正文保持 D5 逐字节,所有组全选另附盘和核对表。后续产品裁决 D13:分盘必须带安全 SVG,有限替代原无 SVG 约束;JSON 围栏及内部字段仍禁。原生底部 dialog、760px、70%、860 两列、零额外请求、保留打印 / 原始附录。 | 已验收(Claude 09-24:同上;D13 SVG 与列表页删导出按钮均按产品口径;BUG-1018/1019 resolved;CRLF 见 fix 单) | `1420471a`(staging 已部署);真机清单欠 |
|
||||
| `TASK-report-density-20260922.md` | `PROGRESS-report-density-20260922.md` | **报告信息密度与原始附录(BUG-1003~1007)**:与源头仓 PL9 全量报告同资料实测:对照 847,632 字符 / 8,044 表格行,我方 309,357 / 1,478。缺口不在引擎——20 张分盘全表、KP 四表、Ashtakavarga 四类、Shadbala 六分量、Avastha、Sahams、年度都已算得出,但 `personal-report-contract.ts` 的 `REPORT_SECTION_KINDS` **没有表格类型**、`CHART_IDS` 只有 9 种,这些表在产品页报告里没有落脚字段。另测出对外原始附录泄漏 925 种 / 3,797 处工程标识符(`parameter_sensitive` 697、`cmd_full_reading` 68、`PyJHora`/`JHora` 35、`PL9` 页码 59),对照物同项为 0。**产品 2026-09-22 三点拍板**:层 1 按 8 组表 + 分盘扩到 16 张;层 2 原始附录直接给 C 端且先全显示;B 类大运族要显示。**决策记录已写明推翻 BUG-999 的两条红线**(专业参考不得作普通下载 fallback;`parameter_sensitive`/「参数敏感」命中整行剔除)——**仅限附录通道**,普通正文投影不动。硬红线:表格层服务端装配、writer 不得写表;对照物的替代大运族日期与 Shadbala 分量在源头仍未闭环(506 行 date mismatch、`production_tuning_allowed=false`),不得照搬升级。让步顺序与串行依赖(任务 3 → 任务 4 同改契约)见任务书 | **验收未通过**(2026-09-23):任务 1/2/4/5 通过;任务 3 事实表在普通报告里显示 447 个引擎键路径(P1);隐私门新增失败(任务书自身写入真实出生资料 BUG-1008 已清 HEAD,fixture 数值碰撞待登记);当时 BUG-1003~1007、PROGRESS、testing 清单缺失;F3 现已补前两项,testing 新建受工具边界阻塞仍缺。Node 22 前端 0 新增失败、`/` Static、gzip +0.007% | 实现 `bbd96d3b`(原 `f968cb21`,09-23 为清除 BUG-1008 重写历史;已在 staging,未部署);修复单 `TASK-report-density-fix-20260923.md` |
|
||||
| `TASK-report-density-fix-20260923.md` | `PROGRESS-report-density-20260922.md` | **报告密度验收修复单(BUG-1009/1010 + 补写 1003~1007)**:F1 事实表改成真正的表(逐组规定列,普通报告可见格 0 个引擎键 / 0 个下标 / 最多 2 位小数,`sourcePath` 保留供回查;主运年数不得填出生剩余年数);F2 按既有机制登记 fixture 的数值碰撞(已独立重跑确认是虚构输入);F3 补 Bug 历史 / PROGRESS / 真人清单并更正「未提交推送」;F4 两份清洗规则只留一份(Python 版漏第三方页码);F5 writer 写表拦截补测试与提示;F6 事实表可打印。硬红线:不得弱化隐私扫描、不得强推或重写 staging(历史清除由产品负责人决定);Sade Sati 三轮日期是原任务书错误、不在本单 | **已验收,F1–F6 全部通过**(2026-09-23,`a12f2c0d`):事实表 130 行 / 600 格 0 引擎键 0 下标、主运年数 18、隐私门转绿、两份规则逐字节一致、写表拦截变异测试红→绿;Node 22 前端 3,748 / 26(名单与基线一致)、Python 948/0。剩数据库测试 E2BIG 另开 fix2(BUG-1011) | `a12f2c0d`(门禁 run 6294 红,未部署);真人清单 `docs/testing/report-density-20260922.md` |
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# TASK · 修复单:慢网首页 5 条测试未跟上致门禁红 + page.tsx 增长 + 原始附录残留(2026-09-24)
|
||||
|
||||
## 基线与现状
|
||||
|
||||
- `origin/staging = f125fae0`。staging 线上仍是 `1420471a`:`0e4dd0f4`(慢网首页)之后的**所有代码提交都没部署**,包括 BUG-1020(`fa8fef55`/`133aca49`)与报告操作收敛(`f125fae0`)。
|
||||
- Claude 09-24 在 Linux / Node 20 独立验收(基线 `edc9c22c` vs `f125fae0`):tsc 0;lint 0 error(warning 119 → 121);`next build` 四路由标记与 gzip 130,932 B 与基线一致;**全量 3807 → 3809 条,失败 56 → 61,新增 5 条红**(下表),其余失败名单与基线逐条相同。门禁会跑同一套前端测试,因此判断门禁红、未发布镜像(Gitea API 匿名 401,run 号请产品在 Gitea 核对)。
|
||||
- 执行方 PROGRESS 记录了 `npm test` 89 条失败,但**没有与基线逐条比对**,新增的 5 条混在 Windows 环境失败里没被发现;BUG-1021/1022 被提前写成 resolved。
|
||||
- 分支 `codex/staging-gate-fix-20260924`。
|
||||
|
||||
## 新增 5 条失败(全部是源码合同断言没跟上实现,不是行为回归)
|
||||
|
||||
| 测试 | 文件 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| auth redirects stay hard document loads so stale session state cannot survive | `tests/chat-navigation-a11y-contract.test.ts` | 断言 `page.tsx` 中 `window.location` 硬跳转共 4 处,实现把「重试」从 `location.reload()` 改成局部重试(任务书 D2),现为 3 处 |
|
||||
| bootstrap failure retries with a hard reload because refresh cannot rerun client bootstrap | 同上 | 正则 `onClick={() => window.location.reload()}>重试</button>`;任务书 D2 **有意推翻**了该断言的前提(局部重试已能重跑 bootstrap) |
|
||||
| new chat keeps its local landing while a reserved older consultation recovers | `tests/new-chat-recovery.test.ts` | 按字符串切 `page.tsx` 源码,结束边界 `if (modelCatalogResult.unavailable)` 已被删除 → `missing source boundary`(我在 BUG-1015 验收时标注过的 P2 脆弱点,这次触发) |
|
||||
| ordinary home landing still activates and announces the reserved consultation | 同上 | 同上 |
|
||||
| tab-local pending ids drive strict bootstrap recovery before the global fallback | `tests/consultation-recovery.test.ts` | 切片起点 `let reservedConsultation: ConsultationStatus | null = null` 已改为 `= await activeStatusPromise` → 切出空串;另断言 `storedPending` 分支先于 `fetchActiveConsultationStatus`,实现改为并行预取 |
|
||||
|
||||
同类问题第五次(BUG-933/934/939/992 同型):执行方只跑定向测试,没跑全量并与基线逐条比对。
|
||||
|
||||
## 其它验收问题
|
||||
|
||||
1. **P2 红线违反**:`page.tsx` 1849 → 1858 行(+9),任务书红线 4「`page.tsx` 不得净增行」。主要来自「重试」内联的 5 行状态重置。
|
||||
2. **P2 行为**:`use-billing-panel.ts` 支付轮询成功后改为 `if (typeof payload.credits === "number") notifyBalanceChanged(payload.credits)`;`/api/payment/epay/status` 的 `credits` 是订单点数,**订阅类订单可能为空** → 不发余额事件 → 首页账户不刷新。`page.tsx` 的 `BALANCE_CHANGED_EVENT` 监听只调 `refreshAccount()`、不读传入值,所以应**无条件**通知。
|
||||
3. **报告操作收敛残留**(`f125fae0` 执行方删除权限被拒):`raw-appendix-download.tsx`、`app/api/reports/[reportId]/raw-appendix/route.ts`、`lib/personal-report-raw-appendix.ts` 已无入口但仍在;执行方也没能写 PROGRESS 与真机清单(工具拒绝写入)。
|
||||
4. 代码本身(慢网并行、20 秒错误屏、局部重试、不再半揭幕、账单预取与缓存、CRLF 正则)我逐行核对**符合任务书**,不需要改逻辑。
|
||||
|
||||
## 决策记录
|
||||
|
||||
- 本单只修测试与收尾,**不改任务书已批准的行为**(D2 局部重试、并行预取、20 秒阈值)。
|
||||
- 5 条断言按新行为改写,**不得删除测试**;`new-chat-recovery` 与 `consultation-recovery` 的源码切片改为**不依赖会被删改的具体语句**作边界:优先把被测逻辑抽到 `frontend/src/lib/` 纯函数直接调用;做不到时用稳定的注释锚点(如 `// bootstrap:recovery-begin` / `// bootstrap:recovery-end`)并在两处测试共用。
|
||||
- `chat-navigation-a11y-contract`:硬跳转计数改为 3,并**新增**断言「重试」调用 `reloadSessionList` 且不含 `location.reload`(行为锁,不是弱化)。
|
||||
- 原始附录三件套连同只测它们的测试一并删除(任务书 D2 已授权);`personal-report-raw-appendix.test.ts` 中仍有价值的投影断言若依赖 `cleanReaderAppendixMarkdown`,保留该 helper 所在模块,只删路由 / 组件 / release 函数。
|
||||
|
||||
## 硬红线
|
||||
|
||||
1. 失败清单必须与基线 `edc9c22c` **逐条一致**(56 条),新增 0;进度记录附对比命令与结果。
|
||||
2. 每条改动的断言写「原值 / 新值 / 原因」三栏;测试总数不低于 3809 − 被删文件的测试数,并列出删了哪些。
|
||||
3. `page.tsx` 行数 ≤ 1849(`edc9c22c` 基线);`Home()` 不新增 hook。
|
||||
4. 不改首页 / 账单 / 报告的已验收行为;不改数据库、workflow。
|
||||
|
||||
## 任务分解
|
||||
|
||||
- T1 修 5 条断言(抽纯函数或注释锚点)。验收:5 条转绿,`grep -n "modelCatalogResult.unavailable" frontend/tests` = 0。
|
||||
- T2 `page.tsx` 回到 ≤ 1849 行:重试处理抽到 `frontend/src/lib/` 或现有 hook。
|
||||
- T3 支付成功无条件 `notifyBalanceChanged`。验收:`billing-panel.test.ts` 新增订阅订单(`credits` 缺失)也触发余额事件。
|
||||
- T4 删除原始附录三件套与相关测试。验收:`git grep -n "raw-appendix\|RawAppendixDownload\|releaseRawReportAppendix" frontend/src` = 0。
|
||||
- T5 记录:`BUG_HISTORY` 中 BUG-1021/1022 状态保持 investigating 直到部署 health 核对;补 `docs/tasks/PROGRESS-report-reader-actions-20260924.md` 与 `docs/testing/report-reader-actions-20260924.md`(上一执行方未能写入);本单 PROGRESS。推 staging 后核对门禁绿与 `/api/health` 的 `gitCommit`。
|
||||
|
||||
## 开工前置命令
|
||||
|
||||
```bash
|
||||
git fetch origin --prune
|
||||
git worktree add -b codex/staging-gate-fix-20260924 .worktrees/staging-gate-fix-20260924 origin/staging
|
||||
git worktree add --detach .worktrees/gate-baseline-20260924 edc9c22c # 基线
|
||||
cd .worktrees/gate-baseline-20260924/frontend && npm test > /tmp/base.log 2>&1
|
||||
cd ../../staging-gate-fix-20260924/frontend && npm test > /tmp/head.log 2>&1
|
||||
diff <(grep '^not ok' /tmp/base.log | sed 's/^not ok [0-9]* - //;s/ # .*//' | sort) \
|
||||
<(grep '^not ok' /tmp/head.log | sed 's/^not ok [0-9]* - //;s/ # .*//' | sort)
|
||||
```
|
||||
|
||||
## BUG 编号
|
||||
|
||||
不新开号;沿用 BUG-1021 / 1022(首页 / 账单)与报告操作收敛的产品变更记录。
|
||||
Reference in New Issue
Block a user