docs(tasks): report/chart blank columns — Kranti, Ashtakavarga house table, ascendant nakshatra, varga dignity, duplicate charts
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
1af3488093
commit
3bbc2daab1
@@ -412,3 +412,4 @@
|
||||
| `TASK-yoga-lunar-node-consistency-20261002.md` | `PROGRESS-yoga-lunar-node-consistency-20261002.md` | 月亮前后有星格(Sunaphaa/Anaphaa/Duradhara)计入罗睺计都、孤立格(Kemadruma)不计,泰勒/齐达内卡上同时出现互相矛盾的格局;统一为只计五颗真行星 | **已并入** `TASK-upstream-sync4-20261002.md` T5(交付见 `PROGRESS-upstream-sync4-20261002.md`,`f3ed9509` + `0a4e6d0a`,BUG-1187) | 原分支未使用;在 `codex/upstream-sync4-20261002` 交付 |
|
||||
| `TASK-upstream-sync4-20261002.md` | `PROGRESS-upstream-sync4-20261002.md` | 上游同步第四轮(对照 yinduzhanxing `0a6696c5`):婚姻计数删关系次数断语、双重过运相位错一宫、Shadbala 四处计算错、格局列表截断与空回退、月亮/太阳类格局只计五星(吸收月亮单)、Arudha 只留 jaimini 一个来源、定位星循环与未标定概率;BUG 从 1183 起 | **待验收**(子代理直接执行完毕,未推送;追加 F3 太阳最低要求;BUG-1183~1191) | 分支 `codex/upstream-sync4-20261002` |
|
||||
| `TASK-upstream-sync5-20261002.md` | `PROGRESS-upstream-sync5-20261002.md` | 上游同步第五轮:Narayana 默认 K.N. Rao、Chara Karaka 罗睺、燃烧统一、八分法净化、Yogini、诅咒格措辞、Budha-Aditya、Badhaka;生时校正至少 4 件事 3 个领域 | **待验收**(PM 移植 U2–U8 + 子代理 U8 后续 / R1 / 冻结 / 评测 / 回测第七轮,未推送;U1 延后;分数不变不升 scoring-11,policy v3 → v4;BUG-1192~1198) | 分支 `codex/upstream-sync5-20261002` |
|
||||
| `TASK-report-chart-blank-columns-20261003.md` | `PROGRESS-report-chart-blank-columns-20261003.md` | 报告/星盘页空列:Kranti 删列、八分法宫位表 SAV 标错(实为含上升 386)补三列、上升补星宿、分盘庙旺接引擎十档(有限推翻 BUG-1076/1099 三档)、报告末尾重复分盘去重(BUG-1199~1203);待领取 |
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
# TASK · 报告与星盘页的「空列」:Kranti、八分法宫位表、上升星宿、分盘庙旺、重复分盘(2026-10-03)
|
||||
|
||||
- 基线:`origin/staging` `1af34880`
|
||||
- 分支 / worktree:`codex/report-chart-blank-columns-20261003` / `.worktrees/report-chart-blank-columns-20261003`
|
||||
- 模式:任务书模式(执行方实现,Claude 验收)
|
||||
- BUG 编号起点:**BUG-1199**(开工时 `grep -o "^## BUG-[0-9]*" docs/BUG_HISTORY.md | sort -t- -k2 -n | tail -1` 核对;若已被占用顺延)
|
||||
- 串行:本单不改 `page.tsx`;改 `scripts/pl9_reader_export.py` / `scripts/ashtakavarga.py` / `chart-view-mapper.ts` 的在途分支若有,先合者优先,后者 rebase。
|
||||
|
||||
## 事故实证(产品 10-01 staging 真机截图,行号以符号为准)
|
||||
|
||||
| # | 位置 | 现象 |
|
||||
|---|---|---|
|
||||
| E1 | 报告「Declination / Kranti / Speed」 | Kranti 列七行全 `-` |
|
||||
| E2 | 报告「Ashtakavarga 完整宫位分数」 | 「BAV/承接」「Full with 上升」两列全 `-`;「SAV」列 12 宫合计 **386** |
|
||||
| E3 | 报告末尾「分盘核对」 | 正文开头「本命与分盘北印度图盘」已画过的 D1、D2… 又画一遍;该段在目录外、未套卡片样式 |
|
||||
| E4 | `/chart` D1 表上升行 | 星宿 / 宿主 / pada 全 `—`(狮子 14°32′,应为 Purva Phalguni 第 1 足、宿主金星) |
|
||||
| E5 | `/chart` D9 表「庙旺」列 | 只有入旺 / 自宫 / 落陷有字,其余全 `—`(如太阳在金牛=敌宫、月亮在摩羯=中性) |
|
||||
|
||||
## 根因
|
||||
|
||||
- **E1**:`pl9_reader_export.py` p33 表读 `strengths.kranti_local.planets[*].kranti_degrees`,全仓无任何 producer;`jyotish_engine.py` 的 materials `kranti` 自己写着 `missing_in_local / blocked`、"no independent Kranti producer is registered"。表照样留了这一列。
|
||||
- **E2(含数字标错)**:`ashtakavarga.py::_map_to_houses_values(full_sav, …)` 只写 `sign` + `sav_score`,而传入的是 `full_sav = sav + lagna_sav`(337 + 49 = 386)。reader 表 `row.get('sav') or row.get('sav_score')` 取到的是**含上升合计**却标成 SAV;`bav` / `full_with_lagna` 字段不存在 → 两列 `-`。同页上方「SAV score」表是 337 口径,两表互相矛盾。
|
||||
- **E3**:`personal-report-page.tsx` 在 Markdown 正文后无条件挂 `ReportCalculationCharts`;正文的 ```jyotish-chart 围栏已画全部分盘。`report-export-blocks.ts::buildReportExportBlocks` 已按 `chartIds` 去重,页面没用同一规则。
|
||||
- **E4**:`jyotish_engine.py::compute_chart_data` 给九曜按 `nak_span` 算了 `nakshatra / nakshatra_pada / nakshatra_lord`,`result["ascendant"]` 漏了这三项;`chart-view-mapper.ts::ascendantRow` 按约定"引擎不给就留空"。
|
||||
- **E5**:BUG-1076 / BUG-1099 有意只做三档(`chart-view-varga.ts::vargaDignity`,前端自带一份表)。引擎在 Vimsopaka 路径已有完整判定:`_get_dignity_level(planet, varga_sign, varga_deg, _build_dignity_context(vdata))`,星盘页没接。
|
||||
|
||||
## 决策记录(产品 2026-10-03 拍板)
|
||||
|
||||
1. **Kranti 列删除**。不按古典公式补算:无 PL9 原值可对照,Declination 列已是真实赤纬。引擎内部 materials 的 `kranti: blocked` 审计口径与 `full_report_quality_gate.py` 的 `RESTRICTED_MATERIAL_IDS` **不动**。
|
||||
2. **八分法宫位表三列都给真数**:宫位 · 星座 · SAV(不含上升,合计 337)· 上升 BAV(合计 49)· 含上升合计(386),末尾加合计行。
|
||||
3. **分盘表庙旺接引擎完整十档**,与 D1「状态」列同一口径(`DIGNITY_LABELS` 同文)。**本条有限推翻 BUG-1076「三档庙旺」与 BUG-1099「三档庙旺保留」**:三档是当时的范围收口,不是红线;BUG-1099 的能力声明规则(列可用性看有效来源、不看命中)继续有效。前端那份 `vargaDignity` 自算表随之删除(不留第二套判定)。
|
||||
4. **报告末尾「分盘核对」去重**:页面与导出用同一条去重规则,正文已画过的盘不再画;新报告该段整体消失,老报告缺哪张补哪张。「分盘对出生时间敏感,不单独增加结论的确定性」这句挪到正文「本命与分盘北印度图盘」标题下(中英两版)。
|
||||
5. **上升补星宿 / pada / 宿主**:与九曜同一公式,属漏算,不是推断。上升「状态」列维持 `—`。
|
||||
|
||||
## 硬红线
|
||||
|
||||
1. `house_scores_full[*].sav_score` 的**语义与数值不变**(生时校正 `minute_rectification_feature_facts_v4.py`、`dynamic_rectification_fact_priority.py`、`active_rectification_event_engine.py` 在读它)。只能新增字段。
|
||||
2. `scripts/jyotish_api_server.py` 不增长(`tests/test_api_server_growth_contract.py`);分盘庙旺的标注写在独立模块或 `divisional_charts_extended.py` 输出里,主文件最多改一行调用。
|
||||
3. 不改 Kranti 的 blocked 状态、不新增任何 Kranti 数值。
|
||||
4. `page.tsx` 不增长;不加 spinner / 骨架;不改 DB 结构。
|
||||
5. 合同测试 fixture 必须来自真实引擎输出(golden 重录要写重录命令)。
|
||||
6. 改既有断言写「原值 / 新值 / 原因」三栏(预计涉及:`chart-varga-table.test.tsx` 的「自宫」→ `入庙(Own Sign)`、`chart-view-varga-dignity.test.ts`、`test_chart_page_vedic_tables_contract.py`、报告 golden 表头)。
|
||||
7. 示例只用公开名人或虚构盘,不得用截图里的出生资料。
|
||||
|
||||
## 任务分解
|
||||
|
||||
### T1 · 报告 p33 表删 Kranti 列(BUG-1199)
|
||||
- `pl9_reader_export.py`:表头改 `| Planet | Degree | Declination | Speed |`,标题改 `### p33 Declination / Speed`;同步 `pl9_reader_english_terms.py` 对应条目(无则不加)。
|
||||
- 验收:Python 定向测试断言新报告 Markdown 不含 `Kranti` 列头、四列齐全;`full_report_quality_gate` 原有用例全绿。
|
||||
|
||||
### T2 · 八分法宫位表三列真数(BUG-1200)
|
||||
- `ashtakavarga.py::_map_to_houses_values` 增字段 `sav`(不含上升)、`lagna_bav`、`full_with_lagna`,保留 `sav_score`(= 含上升,红线 1)。上升 BAV 取 `lagna_sav`(`bav_results['Lagna']`)。
|
||||
- `pl9_reader_export.py` p53 表:`| House | Sign | SAV | Lagna BAV | SAV + Lagna |`,末行合计;中文版表头经现有中英术语表走「宫位 · 星座 · SAV · 上升 BAV · 含上升合计」(以 reader 现有的中文投影机制为准,不得出现「Full with 上升」这种半翻译)。
|
||||
- 验收:测试断言每行 `sav + lagna_bav == full_with_lagna`;合计行 SAV = 337、全表合计 = `sav.full_total_with_lagna`;该表 SAV 列与上方「Sign | SAV score」表按星座逐格相等;`sav_score` 旧值逐宫不变(对基线快照)。
|
||||
|
||||
### T3 · 星盘页上升补星宿(BUG-1201)
|
||||
- `compute_chart_data` 的 `result["ascendant"]` 加 `nakshatra / nakshatra_pada / nakshatra_lord`,公式与九曜同一(共用一个小函数,不复制三行)。
|
||||
- `_build_api_chart_cache_payload` 的 `cache_schema_version` 4 → 5,否则旧缓存永远没有这三项。**开工先 grep 所有对 chart 结果做哈希 / 指纹的地方**(报告 `result_binding`、天空封面指纹等,见 BUG-693/694),确认加字段不会让历史报告 / 历史校正打不开或被判过期;有影响就写进进度记录并停下来问。
|
||||
- 前端 `ascendantRow` 不改逻辑,只更新注释。
|
||||
- 验收:golden `frontend/tests/fixtures/chart-view-golden.json` 用真实引擎重录(写命令);断言上升行三列有值且与按经度独立计算一致;Python 测试覆盖星宿边界(13°20′ 整倍数两侧)。
|
||||
|
||||
### T4 · 分盘庙旺接引擎十档(BUG-1202)
|
||||
- Python:`/api/varga_full` 每张分盘每颗星加 `dignity_level`(`EXALTED / MOOLATRIKONA / OWN_SIGN / GREAT_FRIEND / FRIEND / NEUTRAL / ENEMY / GREAT_ENEMY / DEBILITATED / NEECHA_BHANGA`),算法即 Vimsopaka 路径的 `_get_dignity_level(pn, sign, deg_in_sign, _build_dignity_context(vdata))`,抽成一个函数两处共用。
|
||||
- 前端:`chartViewVargaSchema.dignity` 枚举扩到十档;标签与 D1「状态」列同文(引擎 `DIGNITY_LABELS`);删除 `vargaDignity` 与 `vedic-chart-tables.json` 里只为它服务的表(若别处仍用则保留并在进度记录说明)。旧缓存 / 旧模块快照无 `dignity_level` 时按 BUG-1099 规则**整列不渲染**,不得前端自算兜底。
|
||||
- 验收:golden 重录;D9 行断言至少覆盖一颗入敌、一颗中性、一颗入旺、一颗自宫;Python 合同测试断言 `/api/varga_full` 的 `dignity_level` 与 Vimsopaka 输入逐星一致;无 `dignity_level` 的旧 payload 渲染时无庙旺列。
|
||||
|
||||
### T5 · 报告末尾分盘去重 + 提示前移(BUG-1203)
|
||||
- 把 `buildReportExportBlocks` 里"正文围栏已画过的分盘 id"抽成共享函数;`ReportCalculationCharts` 只画不在其中的盘,全被覆盖时整段不渲染。
|
||||
- `pl9_reader_export.py` 在 `### p6-p17 本命与分盘北印度图盘` 下加那句提示;英文版走术语表(沿用现 `COPY.en.note` 文案)。`report-calculation-charts.tsx` 的 `COPY.note` 随之删除。
|
||||
- 验收:新报告 fixture(围栏齐全)→ 页面无「分盘核对」段;老报告 fixture(无围栏)→ 该段照旧出现;导出结果与修前逐字节一致;中英两版正文 p6-p17 标题下各有一句提示。
|
||||
- `frontend/DESIGN.md` 同提交更新(报告图盘只在正文出现一次)。
|
||||
|
||||
## 让步顺序(时间不够时从下往上砍,必须写进进度记录)
|
||||
|
||||
T5 的「提示前移」→ T4 的删前端旧表(保留但不再调用)→ T3 的缓存 bump(改成写清"新排盘才有")。T1、T2 不可让步(T2 是数字标错)。
|
||||
|
||||
## 门禁
|
||||
|
||||
- Python:`.venv/bin/python -m pytest tests/<相关文件>`;`run_quality_gate.py --profile quick`;`test_api_server_growth_contract.py`。
|
||||
- 前端:`tsc --noEmit` 0;`npm run lint` 0 error;`npm test` 失败名单与基线逐名一致、总数不降;`next build` 后 `/` Static;首屏 gzip ±2%。
|
||||
- 部署后:`/api/health` 的 `deployment.gitCommit` = 合入 SHA;真机清单写 `docs/testing/report-chart-blank-columns-20261003.md`(报告重新生成一份看 E1–E3;`/chart` 看 E4–E5;打开一份旧报告和一份旧校正确认能打开)。
|
||||
|
||||
## 开工前置命令
|
||||
|
||||
```bash
|
||||
cd /workspace/Jyotisha && git status -sb | head -1
|
||||
git fetch origin --prune
|
||||
git worktree add -b codex/report-chart-blank-columns-20261003 .worktrees/report-chart-blank-columns-20261003 origin/staging
|
||||
grep -o "^## BUG-[0-9]*" docs/BUG_HISTORY.md | sed 's/.*-//' | sort -n | tail -1 # 期望 1198
|
||||
grep -n "BUG-1076\|BUG-1099" docs/BUG_HISTORY.md # 读完两条旧记录
|
||||
```
|
||||
|
||||
## 记录
|
||||
|
||||
`docs/BUG_HISTORY.md`(BUG-1199~1203,E5 关联 BUG-1076/1099 并写明推翻范围)、`CHANGELOG.md`、`frontend/DESIGN.md`、`docs/tasks/PROGRESS-report-chart-blank-columns-20261003.md`、`docs/tasks/README.md` 状态板一行。
|
||||
Reference in New Issue
Block a user