6119469069
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>
3.7 KiB
3.7 KiB
PROGRESS · BUG-535 文档 charts 上限绑定 CHART_IDS(2026-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/ chartenum、PythonCHART_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:0npm 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。