Files
Jyotisha/docs/tasks/PROGRESS-report-chart-cap-20260904.md
T
Jesse_Chen 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

3.7 KiB
Raw Blame History

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_IDSCHART_IDS 去掉 D1 派生。
  • 终稿 safeParseServerReportDocument 失败时,generation_failed 增加 parsePaths: [{path, code}]。只记路径与 zod/guard 代号,不记 message、不记正文或 hash 值。
  • JSON Schema maxItems / chart enum、Python CHART_IDSlen(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.146.9.15 的合同副本 冻结包,仍是历史 v1 三盘;未改

测试

  • 9 张全枚举文档过 safeParseServerReportDocument
  • 超过 CHART_IDS.lengthtoo_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 --noEmit0
  • npm run lint0 error / 74 warning(既有,未动)
  • 定向:personal-report-contract + personal-report-generation-v2 + personal-report-api110 pass / 0 fail(含新增 9 图 parse、五主题 READY、超限 too_big、parsePaths 日志)
  • .venv/bin/python -m pytest tests/test_personal_report_contract.py40 pass(含 test_v2_accepts_full_chart_ids_set
  • 全量 npm testDocker 库测争用超时(database-* 与部分会起 Postgres 的套件),与既有环境缺口同类;与本单无关
  • next build:本单未改 UI/路由,未跑;任务 3 部署后用 health SHA 验收

让步

无。JSON Schema 的 maxItems 只能写数字,用合同测试把它锁到 CHART_IDS.length