From fe833b35769a21e5ec57a984ef1c63bfc4d53bca Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Thu, 8 Oct 2026 14:13:39 +0800 Subject: [PATCH] docs(tasks): special lagnas native fix (staging regression) and full-data report completion brief Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8 --- docs/BUG_HISTORY.md | 1 + docs/tasks/README.md | 4 +- .../TASK-report-full-data-fix-20261008.md | 84 +++++++++++++++++++ .../TASK-special-lagnas-native-20261008.md | 44 ++++++++++ 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 docs/tasks/TASK-report-full-data-fix-20261008.md create mode 100644 docs/tasks/TASK-special-lagnas-native-20261008.md diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 663a9d2b..cb063165 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -16999,6 +16999,7 @@ - 相关记录:BUG-1190 - 复发自:无 - 修复版本:本分支 `4b9c0198` +- 验收补记(Claude,2026-10-08):生产与 staging 镜像只装 `requirements.txt`,不含 PyJHora(AGPL,只能作外部对照)。屏蔽 `jhora` 导入后,乔布斯盘 `Hora_Lagna`、`Ghati_Lagna`、`Sree_Lagna`、`Indu_Lagna`、`Pranapada_Lagna` 全部 `blocked`(`pyjhora_unavailable`)。即 staging `2df6ee72` 上这些点不显示。sync6 验收机装了 PyJHora,没看出。修复单 `docs/tasks/TASK-special-lagnas-native-20261008.md`(原生实现,PyJHora 只作冻结对照答案)。状态应视为 regressed,待修复单关闭。 ## BUG-1269 | 导入引擎时的岁差引导盖掉调用方已选的模式 diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 74df38f6..ac7106d5 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -201,7 +201,8 @@ | 任务书 | 进度 | 主题 | 状态 | 落点 | | --- | --- | --- | --- | --- | -| `TASK-report-full-data-edition-20261007.md` | — | **报告改为完整数据版、删除阅读版**:网站阅读版中文 7.6 万字符 vs 上游 `pl9_ai_density` 97 万;移植原始数据附录 / 清理器 / 时间补充,中英文;我方报告口径(BUG-1199~1229)全部保持;旧报告仍可打开;排在 sync6 之后 | 待领取 | — | +| `TASK-report-full-data-edition-20261007.md` | — | **报告改为完整数据版、删除阅读版**:网站阅读版中文 7.6 万字符 vs 上游 `pl9_ai_density` 97 万;移植原始数据附录 / 清理器 / 时间补充,中英文;我方报告口径(BUG-1199~1229)全部保持;旧报告仍可打开;排在 sync6 之后 | 未合入(分支 `06028759`,验收未通过,见 fix-20261008) | — | +| `TASK-report-full-data-fix-20261008.md` | — | **完整数据版补齐**(同分支 `06028759` 继续):中文只有上游 19%(9.9 万 vs 52.6 万字);产品允许移植上游解释生成器并逐条核口径;年运表接我方字段;英文必须交付才上线;其他 7 种大运另开单 | 待领取 | — | | `TASK-report-reader-main-fix-20260925.md` | `PROGRESS-report-reader-main-fix-20260925.md` | **读者版修复**:真实年主比较、分字段绑定与未来返照;保留 Bhava Bala 和标题,隔离报告/聊天规则 | 已验收(Claude 09-25:年运表逐年填齐且不同、Bhava Bala 保留、泄漏 0) | `4d801e53`(已部署,health 核对一致) | | `TASK-report-reader-main-20260924.md` | `PROGRESS-report-reader-main-20260924.md` | **报告正文换上游读者版 reader_main + KP / Muntha 计算缺陷 + 投影截断(BUG-1026/1027/1028)**:正文一直是上游审计版(读者版 09-09 才出、从未同步),本仓又自加「结论等级规则」/英文段/异常原文;投影黑名单不认 PL9 词汇且截断半句、删表留说明;KP args `vars()` 拷贝为空恒失败;Muntha 漏合 `birth_asc_sign_idx` → Year Lord 恒火星。产品拍板接入读者版、旧报告不回填。 | 部分通过(Claude 09-25:读者版切换、泄漏 0 命中、KP 已修;年运 Year Lord/Muntha 全为「-」P1、投影误删 Bhava Bala P2 → 修复单) | `3c2f7bd5`(已部署) | | `TASK-report-reader-actions-20260924.md` | — | **报告操作收敛**:列表只留「查看报告」;阅读页删「下载原始附录」「打印」,导出改图标按钮;导出对话框 ≥860 居中、窄屏仍贴底(修订 chapter-export D9/D10)。产品变更,不开 BUG 号 | 基本通过(Claude 09-24:入口收敛、图标、≥860 居中均符合;原始附录三文件因执行方权限未删、PROGRESS/清单未写 → 并入修复单) | `f125fae0`(未部署) | @@ -314,6 +315,7 @@ | `TASK-rectification-probe-supply-research-20260913.md` | — | 研究单:六题后引擎在剩余候选上再出带年月题的四种放宽规则,20 例公开 AA 数据离线量收益,有收益才立实现单 | 已合入(离线测量,不改线上) | `b063c668` | | `TASK-rectification-refresh-r3-r4-20260913.md` | `PROGRESS-rectification-refresh-r3-r4-20260913.md` | 刷新阶段 R3(MIN_BOUNDARY_DAYS 45→30)+ R4(pratyantar 与 D9/D10 上升 Narayana);首轮出题不变。即使放宽仍有 0 题例子,定向补事另线保留(BUG-664/665) | 已实现 `ab1ade59`,已部署;2026-09-13 验收通过(实现单由执行方自拟,无产品决策记录段;收益口径见研究文档) | `codex/rectification-refresh-r3-r4-20260913` | | `TASK-upstream-sync6-20261007.md` | [PROGRESS-upstream-sync6-20261007.md](PROGRESS-upstream-sync6-20261007.md) | **上游同步第六轮(`23be1807`)**:10-05 五个计算修正一行未合——D5/D6/D8/D11 映射(乔布斯盘四张分盘星座全不同)、Vimsopaka 权重、Yogini 顺序与出生余额、Panchadhikari 宫位参照、Narayana 并列、特殊上升、出生秒数、Neecha Bhanga 两条件、首段大运子运、岁差被覆盖;逐项对照原书核实;最先做 | 已验收(门禁补修 `2df6ee72`,已部署 staging) | [PROGRESS-upstream-sync6-20261007.md](PROGRESS-upstream-sync6-20261007.md) | +| `TASK-special-lagnas-native-20261008.md` | — | **特殊上升点原生计算(线上缺陷)**:sync6 U6 运行时调 PyJHora,生产镜像没有 PyJHora → staging 上 Hora/Ghati/Sree/Indu/Pranapada 全 blocked;原生实现、PyJHora 只作冻结对照、快速门禁止运行时 import jhora;最先做 | 待领取 | — | | `TASK-sync6-gate-red-20261007.md` | — | **sync6 后门禁仍红**:run 3213 快速门已过,「Frontend and database tests」开跑 20 秒后日志中断、15 分钟后判失败,后续步骤 failure 0 秒;疑运行机掉线;先 Re-run,红则本机带 Docker 跑 `CI=1 npm test` 对照 `0ed45a4b` | 已完成(Re-run 通过,BUG-1271,部署 `2df6ee72`) | — | | `TASK-rectification-tie-break-entry-fix-20260913.md` | `PROGRESS-rectification-tie-break-entry-fix-20260913.md` | 修复单:参考题入口只读 `window_scan` 标志位 → 两道答完后仍显示、再点弹「现在没有可答的参考题」;并按产品拍板改成点一次连出 D9+D10(BUG-666~668,Skill 10.0.26) | 已合入(无独立验收记录) | `99127601`(BUG-666~668 resolved;已部署 staging,run 2589) | diff --git a/docs/tasks/TASK-report-full-data-fix-20261008.md b/docs/tasks/TASK-report-full-data-fix-20261008.md new file mode 100644 index 00000000..aa5e78b6 --- /dev/null +++ b/docs/tasks/TASK-report-full-data-fix-20261008.md @@ -0,0 +1,84 @@ +# TASK · 完整数据版报告补齐:解释内容、年运表、英文(2026-10-08) + +- 分支:继续在 `codex/report-full-data-edition-20261007`(远端 `06028759`)上做,不另开分支。 +- 基线:`06028759`;合入前 rebase 到 `origin/staging`,并且排在 `TASK-special-lagnas-native-20261008` 之后。 +- 上游参照:`/workspace/yinduzhanxing` `origin/main` @ `23be1807`。 +- BUG 编号:本分支已用到 BUG-1272;特殊上升点修复单从 1273 起。本单开工时核对最大号,再顺延。 +- 原任务书 `TASK-report-full-data-edition-20261007.md` 仍有效,本单只改写其中红线 1,并补任务。 + +## 1. 验收实证(Claude,2026-10-08,Linux,乔布斯盘,Lahiri) + +| 项 | 本分支 | 上游完整数据版 | +| --- | --- | --- | +| 中文正文(按字符,不含标题行) | 99,354 | 526,133 | +| 上游有、本分支没有的章节 | 75 节,合计约 36.6 万字 | — | +| 生成耗时(本机 Linux) | 12.5 秒(排盘 2.1 秒) | 34 秒 | + +缺得最多的部分: + +| 缺的内容 | 约字数 | 上游从哪里来 | +| --- | --- | --- | +| 每段大运主运 + 子运解释(9 段) | 22 万 | `scripts/professional_parity_closure.py` 的 `build_dasha_interpretation_pack`、`build_vimshottari_dasha_report_pack` | +| Mudda / Patyayini 年运表、Patyayini 结束日期表 | 6.5 万 | 我方年运资料包**已有** `mudda_dasha`、`patyayini_dasha`,渲染器没认出字段名 | +| Sthira、Drig、Shoola、Navamsha、Niryaana Shoola、Lagna Kendradi 等大运 | 5 万 | 另开一单(见决策 4) | +| 生命周期年度返照、年度北印度图盘、月返照、八年总览 | 1.9 万 | 部分在我方年运资料包里,逐项核对 | +| Sahams、Raman Sahams、Tajika 呈现 / Condition / 格局对照、Tripataki | 0.6 万 | 我方年运资料包有 `sahams`、`tajika_yogas` | +| 宫主逐宫解释、Dosha 逐项事实与解释、年度结果解释 | 0.5 万 | `build_bhavesh_interpretation_pack`、`build_dosha_remedy_pack`、`build_graha_interpretation_pack`、`build_yoga_interpretation_pack` | +| 开篇「重点」 | — | 本分支是固定三句核对清单;上游按当前大运和宫主写 | + +其他问题: + +- 译名错误:「六维力量 / Bhava **年龄状态** 摘要」(Bala 被当成 Baladi 的年龄状态);「Natal / KP Ruling **行星s**」。 +- 英文清理后仍有汉字(BUG-1272),接口不给英文。 +- 生成按钮仍写「大约 10–30 秒」「中英两版」。 + +## 2. 根因 + +原任务书红线 1 写的是「不得因为移植上游渲染器,就把上游的计算函数一起带进来」。执行方照办,于是凡是数据要由上游 `professional_parity_closure.py` 生成的章节都空着。这条红线是 Claude 写得太宽:解释内容是「模板文字 + 已算好的盘面数值」,不是天文计算。 + +## 3. 决策记录(产品 2026-10-08) + +1. **允许移植上游的解释内容生成器**:`build_dasha_interpretation_pack`、`build_vimshottari_dasha_report_pack`、`build_graha_interpretation_pack`、`build_bhavesh_interpretation_pack`、`build_dosha_remedy_pack`、`build_yoga_interpretation_pack`,以及它们依赖的模板函数。**本条改写原任务书红线 1**,执行方据此可以搬,不得以原红线拒做。 +2. 搬过来的模板要**逐条核对口径**(见红线 2)。 +3. **英文做好之前不上线**:完整数据版的英文必须交付(清理后全文无汉字)才合入 staging。在此之前线上继续用现有的阅读版,中英文都在。 +4. Sthira、Drig、Shoola、Navamsha、Niryaana Shoola、Lagna Kendradi、Chara 等大运**另开一单,放后面**。上游有原生模块(`sthira_dasha.py`、`drig_dasha.py`、`shoola_dasha.py`、`navamsha_dasha.py`、`lagna_kendradi*.py`),我方没有。本单不做,报告里这些章节不出现,不写占位。 +5. 补完之后由 Claude 验收,通过再合入。 + +## 4. 硬红线 + +1. **数值只用我方引擎**。搬过来的生成器只读我方资料包里已经算好的字段;生成器里凡是自己做天文或大运计算的部分(例如 `build_dasha_master_pack` 里的 PyJHora 回放、`sthira` / `niryaana_shoola` 调用、`*_pyjhora_*` 档)不搬。运行时不得导入 `jhora`。 +2. **模板口径核对**,以下写法一律改写或删除,并为每条加测试(对中英文全文断言): + - 不断言死亡、寿命长短、疾病诊断、离婚、流产、不孕(AGENTS B4);上游模板里的 death / 疾病 / guarantee / 必然 / 一定会 逐条检查; + - 落陷取消不叫 Raja Yoga(BUG-1205); + - 不写「再婚」「几段关系」(sync4 T1,BUG-1183);不写早夭、过早死亡(sync5,BUG-1192~1198); + - 功能吉凶按我方功能吉凶 v2(BUG-1174~1182);模板里自带的吉凶判断与我方层冲突时,以我方为准; + - 大运解释不得把「主题」写成必然事件,要写成「这段时间可能突出」的口吻(原书模板改写)。 +3. 原任务书的红线 2(我方报告口径)、红线 3(泄漏检查)、红线 4(不启用视位置 / 拟合偏移)继续有效。`customer_timing_supplement` 仍不搬。 +4. 英文:四张盘(乔布斯、奥巴马、虚构盘,再加一张公开 AA 盘替代泰勒)全文无汉字;术语只增不减,不能靠删段落凑「无汉字」。 +5. 隐私:只用公开名人盘与虚构盘。 + +## 5. 任务分解 + +| # | 内容 | 验收标准 | +| --- | --- | --- | +| T1 | 移植决策 1 的生成器,接到完整数据版 | 乔布斯盘「大运解释」「行星解释」「宫主逐宫」「Dosha 逐项」「瑜伽解释」都出现;红线 2 每条一个测试 | +| T2 | 年运:把我方 `annual_tajika_pack` 的 `mudda_dasha`、`patyayini_dasha`、`sahams`、`tajika_yogas`、`monthly_windows`、`solar_return` 接到上游对应章节 | 列表对照:上游每个年运章节要么出现,要么写进缺口清单并说明缺哪个字段 | +| T3 | 开篇「重点」按上游逻辑写:当前三级大运 + 事业 / 财富 / 婚恋三宫的宫主落宫、尊贵、功能吉凶(取我方功能吉凶层) | 乔布斯盘「重点」含当前 MD / AD / PD 与三宫宫主行 | +| T4 | 英文 BUG-1272 | 四张盘英文全文汉字数为 0;中英章节数一致 | +| T5 | 译名 | 修掉「Bhava 年龄状态」「KP Ruling 行星s」;加测试:中文版不得出现「英文单词 + 汉字 + s」这类半译词(正则扫) | +| T6 | 生成按钮文案 | 按 staging 部署后实测生成时长改写(对照 `frontend/docs/VOICE.md`);有英文后保留「中英两版」 | +| T7 | 覆盖度报告 | 对上游 `23be1807` 同盘导出逐节比对,进度记录列「已有 / 本单不做(附决策号)/ 缺字段」三栏;除决策 4 的大运外,「缺字段」不得超过 10 节 | +| T8 | 测试与门禁 | 在 **Linux 或门禁同等环境**跑:快速门全过(Windows 上 `test_consultation_native_layers` 的既有失败不能作为放行依据)、Python 全量失败名单 ⊆ 基线、`npm test` 失败名单与基线相同、`next build` `/` Static、gzip ±2% | +| T9 | 记录 | `docs/BUG_HISTORY.md`(BUG-1272 更新与新编号)、`CHANGELOG.md`、进度记录、`docs/testing/` 真机清单(生成、旧报告打开、中英切换、跳章节、导出) | + +## 6. 让步顺序 + +T6 → T3 → T2 中的月返照 / 八年总览。T1、T4、红线 1–2 不让步。 + +## 7. 开工前置命令 + +```bash +git fetch origin --prune +git worktree add .worktrees/report-full-data-edition-20261007 codex/report-full-data-edition-20261007 # 已有就直接进 +grep -o "^## BUG-[0-9]*" docs/BUG_HISTORY.md | sed 's/## BUG-//' | sort -n | tail -1 +``` diff --git a/docs/tasks/TASK-special-lagnas-native-20261008.md b/docs/tasks/TASK-special-lagnas-native-20261008.md new file mode 100644 index 00000000..cbd3bf36 --- /dev/null +++ b/docs/tasks/TASK-special-lagnas-native-20261008.md @@ -0,0 +1,44 @@ +# TASK · 特殊上升点改为本仓原生计算,不依赖 PyJHora(2026-10-08) + +- 基线:`origin/staging` @ `c04786f7`(已部署代码 `2df6ee72`)。 +- 分支 / worktree:`codex/special-lagnas-native-20261008` / `.worktrees/special-lagnas-native-20261008` +- 串行顺序:**最先做**,它是线上缺陷。报告补充单 `TASK-report-full-data-fix-20261008` 合入前 rebase 到本单之后。 +- BUG 编号:开工时核对 `docs/BUG_HISTORY.md` 最大号(写作时 BUG-1271;报告分支上已有 BUG-1272,未合入,本单从 1273 起)。 + +## 1. 事故实证 + +sync6 的 U6(BUG-1265,`4b9c0198`)把 Bhava / Hora / Ghati / Vighati / Sree / Indu / Pranapada / Varnada 上升改成「有经纬度时调用 PyJHora」(`scripts/special_lagnas.py` 的 `calculate_pyjhora_special_lagnas`)。 + +- 生产与 staging 镜像只装 `requirements.txt`(`deploy/railway-api.Dockerfile`),里面没有 PyJHora;PyJHora 写在 `requirements-reference-engines.txt`,注释是「AGPL-3.0,只能作为外部对照」。 +- Claude 在本机屏蔽 `jhora` 导入后跑乔布斯盘的 `cmd_full_reading`:`Hora_Lagna`、`Ghati_Lagna`、`Sree_Lagna`、`Indu_Lagna`、`Pranapada_Lagna` 全部是 `{"status": "blocked", "reason": "pyjhora_unavailable:no jhora"}`。 +- 所以 staging 部署 `2df6ee72` 后,这些点从「算错」(Hora 与 Ghati 同为双鱼 17.81°)变成「没有」。报告的特殊上升表与对话卡受影响;生时校正打分仍用原公式,不受影响。 +- sync6 验收(Claude)用的机器装了 PyJHora,所以和上游对上了。门禁的 `.venv` 也不装 PyJHora,但 `tests/test_special_lagnas_birth_instant.py` 不在快速门里,没拦住。 + +## 2. 根因 + +运行时代码依赖了一个按许可证不能进生产的库;验收环境与生产依赖不一致。 + +## 3. 决策记录 + +产品 2026-10-08 已知悉;这是对 sync6 的修复,不需要另行授权。PyJHora 只能用来生成对照答案,不能出现在运行时路径上。 + +## 4. 硬红线 + +1. `scripts/` 里被 `cmd_full_reading`、报告、对话卡调用的代码不得导入 `jhora`。 +2. 对照答案(PyJHora 4.8.7 的输出)离线生成后冻结成 fixture,并写明生成命令;测试只读 fixture,不导入 `jhora`。 +3. 公式按本仓 `references/` 或原书写出处(BPHS 第 4 章特殊上升;Sree / Indu 的出处写清)。找不到出处的点写 `blocked`,不自拟。 +4. 生时校正打分不改(仍用原 Hora / Ghati 公式),不升算法身份。 +5. 隐私:只用公开名人盘和虚构盘。 + +## 5. 任务分解 + +| # | 内容 | 验收标准 | +| --- | --- | --- | +| T1 | 原生实现上述 8 个点(日出时刻用 Swiss Ephemeris,按出生地经纬度和岁差) | 乔布斯、奥巴马、虚构盘三张盘、6 种岁差中至少 Lahiri 与 Raman:与 PyJHora 冻结答案相差 ≤ 0.01°;Hora ≠ Ghati | +| T2 | 去掉运行时的 PyJHora 调用;`calculate_pyjhora_special_lagnas` 若保留,只给研究脚本用,并改名注明 | 新测试:屏蔽 `jhora` 导入后跑 `cmd_full_reading`,8 个点都是 `computed`,`source` 不含 `pyjhora` | +| T3 | 防复发:在快速门里加一条测试,扫描运行时调用链(`cmd_full_reading` 与报告、对话卡的入口)用到的模块,出现 `import jhora` / `from jhora` 即失败 | 测试进 `scripts/run_quality_gate.py` 的 quick 档 | +| T4 | 记录 | `docs/BUG_HISTORY.md` 新编号,关联 BUG-1265(复发类型:验收环境与生产不一致);`CHANGELOG.md`;进度记录;状态板 | + +## 6. 验收口径 + +ruff、py_compile、快速门、Python 全量失败名单 ⊆ 基线(Linux 基线 62)、`npm test` 失败名单与基线相同。**验收必须在没有 PyJHora 的环境里跑一次**(门禁 `.venv` 即是)。部署后核对 `/api/health` 的 `deployment.gitCommit`、`/login` 200、未登录 `/api/account` 401。