Files
Jyotisha/docs/tasks/PROGRESS-report-chart-cap-20260904.md
T
Jesse_ChenandCursor 6119469069 fix(report): bind v2 chart cap to CHART_IDS.length
Five-theme personal_full assembled nine charts after health vargas landed, but the document schema still capped at six. Bind the count to the enum, align JSON/Python contracts, and log final-parse paths without values.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 21:33:27 +08:00

60 lines
3.7 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.
# PROGRESS · BUG-535 文档 charts 上限绑定 CHART_IDS2026-09-04
工作树:`/Users/jesse/Downloads/Copse/astrology/.worktrees/report-chart-cap-20260904`
分支:`codex/report-chart-cap-20260904`
基线:任务书写 `e674cd38`;开工 `origin/staging` HEAD 为 `d2955c62`(含本任务书 `40387ff9`)。
任务书:仓库根 `TASK-report-chart-cap-20260904.md`
未改 `.gitea/workflows/**`,不提升 main,未放宽字段级校验,未改 v1 `charts.max(3)`
| 任务 | 状态 | BUG |
| --- | --- | --- |
| 1 上限绑定 + 消费点核对 + 回归 | 完成 | BUG-535 |
| 2 终稿 parse path 日志 | 完成 | BUG-535 |
| 3 部署后真实 personal_full | 待 health SHA 对齐后做 | BUG-535 |
## 实现要点
- v2 文档 `charts.max(CHART_IDS.length)`,单一真源,不写裸数字 9。
- 装配侧 `assembleReportDocumentV2` 的允许分盘集合改为 `new Set(CHART_IDS)``DOCUMENT_VARGA_CHART_IDS``CHART_IDS` 去掉 `D1` 派生。
- 终稿 `safeParseServerReportDocument` 失败时,`generation_failed` 增加 `parsePaths: [{path, code}]`。只记路径与 zod/guard 代号,不记 `message`、不记正文或 hash 值。
- JSON Schema `maxItems` / chart `enum`、Python `CHART_IDS``len(CHART_IDS)` 与 TS 对齐(合同三份真源)。冻结 skill 包 `6.9.14` / `6.9.15` 未动。
## 消费点核对(红线 3
| 点 | 结论 |
| --- | --- |
| `personal-report-contract.ts` `z.enum(CHART_IDS)` + `charts.max` | 上限已绑定 `CHART_IDS.length`;枚举本来就是 9 个 |
| `REQUIRED_THEME_CHARTS` | 按主题要哪些分盘,不是张数上限;未改 |
| `personal-report-generation.ts` `DOCUMENT_VARGA_CHART_IDS` | 已改为从 `CHART_IDS` 去掉 D1 |
| 同文件装配 `Set([...])` | 已改为 `Set(CHART_IDS)` |
| `canonicalDocumentVargaChartId` 正则 | 引擎别名提取,不是计数上限;当前覆盖 D2/D6/D8/D9/D10/D11/D24/D30 |
| `report-evidence-bundle-v2.ts` `charts.max(24)` | bundle 上限 24,大于文档 9,无脱节 |
| `personal-report-document-view.tsx` | 按数组渲染,无硬编码 6 |
| `personal-report-route-core.ts` `themes.max(6)` | 主题数不是分盘数 |
| `report-theme-evidence-plan.ts` health `chartIds` | 证据计划,不是文档张数 |
| `contracts/personal-report/report-document.v2.schema.json` | 原 `maxItems: 6` 且 enum 缺 D6/D8/D30;已对齐,测试锁 `maxItems === CHART_IDS.length` |
| `scripts/personal_report_contract.py` | 原 enum 6 个、硬编码 `else 6`;已 `len(CHART_IDS)` 且补 D6/D8/D30 |
| `skills/.../6.9.14``6.9.15` 的合同副本 | 冻结包,仍是历史 v1 三盘;未改 |
## 测试
- 9 张全枚举文档过 `safeParseServerReportDocument`
- 超过 `CHART_IDS.length``too_big`
- 四主题既有用例不回归
- 五主题(含 health)分章管线 READY,文档 charts 正好 9 张、blocked 为空
- `final_parse_rejected` 日志含 `thematicNarrative.0.title` / `too_big`,不含超长标题正文
- Python `test_v2_accepts_full_chart_ids_set`
## 门禁输出
- `./node_modules/.bin/tsc --noEmit`0
- `npm run lint`0 error / 74 warning(既有,未动)
- 定向:`personal-report-contract` + `personal-report-generation-v2` + `personal-report-api`**110 pass / 0 fail**(含新增 9 图 parse、五主题 READY、超限 too_big、parsePaths 日志)
- `.venv/bin/python -m pytest tests/test_personal_report_contract.py`**40 pass**(含 `test_v2_accepts_full_chart_ids_set`
- 全量 `npm test`Docker 库测争用超时(`database-*` 与部分会起 Postgres 的套件),与既有环境缺口同类;与本单无关
- `next build`:本单未改 UI/路由,未跑;任务 3 部署后用 health SHA 验收
## 让步
无。JSON Schema 的 `maxItems` 只能写数字,用合同测试把它锁到 `CHART_IDS.length`