# PROGRESS · 报告与星盘页的「空列」(2026-10-03) - 任务书:`docs/tasks/TASK-report-chart-blank-columns-20261003.md`(`3bbc2daa`) - 基线:`origin/staging` `3bbc2daa`(任务书写的 `1af34880` + 任务书本身,代码相同) - 分支 / worktree:`codex/report-chart-blank-columns-20261003` / `.worktrees/report-chart-blank-columns-20261003` - 执行方式:产品 10-03 说「请你执行」,Claude 直接实现并独立验收。 - BUG:1199~1203(开工核对最大号 1198) ## 完成情况 | 任务 | 结果 | 要点 | | --- | --- | --- | | T1 Kranti 删列(BUG-1199) | 完成 | `pl9_reader_export.py` p33 表四列;materials `kranti: blocked` 与质量门 `RESTRICTED_MATERIAL_IDS` 未动 | | T2 八分法三列(BUG-1200) | 完成,**实现方式偏离任务书** | 见下「偏离」 | | T3 上升星宿(BUG-1201) | 完成 | `_nakshatra_fields` 九曜 / 计都 / 上升共用;`cache_schema_version` 4→5;指纹 / 绑定核查:只用出生资料(`report-birth-binding`、`secondary-page-data` 的 `profileFingerprint`),报告封面哈希是报告正文;均不受影响 | | T4 分盘十档庙旺(BUG-1202) | 完成 | `jyotish_engine.varga_dignity_level`(Vimsopaka 与 `/api/varga_full` 共用);新模块 `scripts/varga_dignity.py`,API 主文件只改一行(行数 10923 不变);前端删 `vargaDignity` 与四张表,旧缓存无等级整列隐藏 | | T5 末尾分盘去重 + 提示前移(BUG-1203) | 完成 | `fencedReportChartIds` 页面与导出共用;提示句由引擎写在 p6-p17 标题下(中英) | 未用让步顺序。 ## 偏离任务书:T2 不改 `ashtakavarga.py` 任务书写「`_map_to_houses_values` 增字段」。照做后快速门红 4 条(`test_rectification_validation_integrity_gate`)、`test_sealed_holdout_contract_freshness` 红 3 条:该文件在生时校正冻结身份里(ERR-110 同型;台账新增 ERR-115,是任务书本身的疏漏)。改为 reader 用 `sav.scores` 与 `bav.Lagna.bindus` 拆分,并要求逐宫 `SAV + 上升 BAV == house_scores_full.sav_score` 才填;`ashtakavarga.py` 已回到基线字节,门禁恢复全绿,无需重新冻结。红线 1(`sav_score` 不变)照样满足。 ## 既有断言改动(原值 / 新值 / 原因) | 位置 | 原值 | 新值 | 原因 | | --- | --- | --- | --- | | `frontend/tests/chart-varga-table.test.tsx` D1 逐字节基线 | 表 == `chart-d1-table-baseline.html` | 表 == 基线把上升行唯一一组「— — — —」换成「Uttara Phalguni / ☉ / 1 / —」;并断言基线里这样的全横杠行只有一处 | BUG-1201:上升三格现在有引擎值;其余逐字节不变 | | 同文件 D9 行 | `dignity == "own"` / `"debilitated"`;markup `>自宫<`、`>落陷<` | `"OWN_SIGN"` / `"DEBILITATED"`;markup `>入庙(Own Sign)<`、`>落陷(Debilitated)<`,另加入友 / 中性 / 入敌 / 极敌四行 | BUG-1202:十档引擎等级、D1 状态列措辞 | | 同文件「null 不关列」 | tbody 不含 `同位/入旺/自宫/落陷` | tbody 不含 `同位` 与 `(Exalted|Own Sign|Debilitated|Neutral)` | 同上,标签换了;断言强度不变 | | `frontend/tests/chart-view-varga-dignity.test.ts` | `vargaDignity` 三档优先级 8 条断言 | `vargaDignityLevel` 接受十档、拒绝旧三档值与非字符串;标签与 D1 措辞一致、键集合 = 十档 | 前端自算函数已删除(不留第二套判定) | | `tests/test_chart_page_vedic_tables_contract.py` | `test_tables_equal_engine_constants`、`test_every_planet_sign_pair_matches_engine_dignity_level`(钉三档表) | `test_dignity_labels_equal_engine_status_wording`(措辞表 = `DIGNITY_LABELS`,旧四表已不存在)+ `test_d9_projected_dignity_is_the_engine_level`(真实 TS mapper 投影 = 引擎等级,golden 覆盖入庙 / 落陷 / 中性 / 入敌 / 入友) | 同上 | golden:`frontend/tests/fixtures/chart-view-golden.json` 只新增字段(上升三项、每颗分盘星 `dignity_level`),原值零改动;重录方式写在 `sourceCommand`(`_nakshatra_fields(ascendant.lon)`、`annotate_varga_dignity` 作用于已存位置,即 `/api/chart`、`/api/varga_full` 现在的调用)。 报告大 fixture(`report-reader-main-fictional*.json`、`report-density-fictional-reader.json`)是 9 月真实输出,里面仍是旧表;前端没有断言碰这两张表,未重录(重录会混入其后大量无关引擎变化)。新表由 Python 测试现场渲染断言。 ## 验收 | 项 | 结果 | | --- | --- | | `tsc --noEmit` | 0 错 | | `npm run lint` | 0 error(126 warning 均为既有;改动文件单独跑 eslint 0 问题) | | `npm test`(Node 22) | 4927 项 / 失败 24;基线 `3bbc2daa` 4921 项 / 失败 24;失败清单逐名一致,全为无 Docker 的数据库 / 部署套件;新增 6 项 | | `next build` | 通过,`/` 为 `○ Static` | | 首屏 gzip(`index.html` 引用的 29 个脚本 / 样式 gzip-9 求和) | 基线 625,123 → 本分支 626,061,**+0.15%**。基线构建在最后 standalone 复制步因整机磁盘满(ENOSPC)退出,编译与页面生成已完成,`index.html` 与引用文件齐全,数字有效 | | Python 定向 | `test_report_chart_blank_columns`(新 12 项)、`test_chart_page_vedic_tables_contract`、`test_api_server_security`(新增 1 项)、`test_report_english_edition`、`test_report_reader_main`、`test_report_chart_block`、`test_ashtakavarga_invariants`、`test_api_server_growth_contract`、`test_rectification_validation_integrity_gate`、`test_sealed_holdout_contract_freshness` 全绿 | | 快速门 `run_quality_gate.py --profile quick` | Python 段 1047 passed / 1 skipped;最后一步 `npm test` 因上述 24 项无 Docker 失败而整体判红,与基线同 | | 既有红 | `test_dynamic_rectification_fact_priority::test_historical_event_priority_preserves_vimshottari_actor_difference` 在基线 `3bbc2daa` 同样失败(`selection_priority 0.0`),与本轮无关,未处理 | | Vimsopaka 抽函数 A/B | `PYTHONHASHSEED=0`,3 张虚构盘 `cmd_full_reading` 的 vimsopaka / varga_full / jaimini / 行星 / 上升(除新增星宿字段)基线与本分支逐字节相同 | ## 部署 推 staging `ae18952e`(快进,远端 SHA 核对一致)→ 门禁 + 部署完成:`/api/health` `deployment.gitCommit` = `apiGitCommit` = `ae18952e`;`/login` 200;未登录 `/api/account` 401。内部 health 的 `swisseph_available` 外网不可见,未核。 ## 环境缺口 - 无登录态与 Chrome:真机走查留给产品,清单 `docs/testing/report-chart-blank-columns-20261003.md`。 - 无 Docker:数据库 / 部署套件 24 项按基线逐名比对。 - 整机磁盘曾满(他会话占用):一次快速门因 `/tmp` 建不了目录全部 error(未计入结论),腾出自己的构建产物后重跑得到上表结果。