Files
Jyotisha/docs/tasks/TASK-consult-card-affliction-data-20261001.md
T

103 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK · 数据卡补「谁照谁、谁和谁同宫、燃烧」,瑜伽按领域分流(2026-10-01,三单之一)
- 基线:`origin/staging` `2d620fb4`
- 分支 / worktree:`codex/consult-card-affliction-data-20261001` / `.worktrees/consult-card-affliction-data-20261001`
- 范围:普通对话的引擎附加层(`scripts/consultation_native_layers.py`)+ 数据卡(`frontend/src/lib/consultation-evidence-card.ts`)+ golden 刷新。**提示词、清单、写作形状不在本单**(第二、三单)。生时校正面、报告面不动。
- 串行:本单 → `TASK-consult-affliction-reading-20261001`(读法与清单,依赖本单的新字段)→ `TASK-consult-no-presupposition-and-backtest-20261001`(写作形状与名人回测)。三单都改 `consultation-evidence-card.ts` 或其测试,必须按顺序,后一单以前一单推上 staging 的提交为基线。
- BUG 编号起点:`BUG-1154`,本单预留 1154~1159(开工时 `grep -o "BUG-1[0-9]\{3\}" docs/BUG_HISTORY.md | sort -u | tail -1` 核对,当前最大 1153;被占用就顺延,并通知后两单顺延)。
## 1. 事故实证
见 `docs/research/consult_affliction_audit_2026_10_01.md`。摘要:
- 读者盘(双鱼上升):9 宫主火星合罗睺、太阳是 6 宫主(功能凶星)、D12 的 9 宫有火星。模型写「父亲是有分量的标尺」「站得住,不是缺位」,与读者经历相反。
- 三位公开名人 13 份样稿里,11 份漏读关键信号,6 份读反,5 份与生平冲突(奥巴马父亲缺席、泰勒八次婚姻、泰勒终身重病)。
- 本单负责其中的 A 类与 E1/E2/E3 类根因:模型看不到的数据。
## 2. 根因(本单部分)
1. **卡上没有相位。** `baseNatal` 的 `PLANET_ROW_KEYS = sign/house/degree_in_sign/nakshatra/retrograde/status`;`domainSection` 的宫位只有 `sign/occupants/lords`。引擎在 `scripts/jyotish_engine.py` Step 5 算了 `report['modules']['aspects']`(`scripts/aspects.py` `calc_house_aspects`),但普通对话工作流响应里没有(golden `frontend/tests/fixtures/consult-evidence-card-golden.json` 中搜不到 `house_aspects` / `aspects_to`)。土星照太阳、火星照 7 宫这类最经典的受冲信号,模型无从得知。
2. **卡上没有燃烧。** 引擎 `jyotish_engine.py` 按度数写了 `planet['combust']`,投影没带。奥巴马 9 宫主水星距太阳约 10°,模型看不出。
3. **领域段只列被选中宫位的星。** 宫主或代表星和谁同宫,要模型自己从 base 里对,四份乔布斯答案都没对出「木星与计都同宫」。
4. **瑜伽不分领域。** `scripts/jyotish_api_server.py` 普通对话层 `build_raman_support_observations` 之后的 `modules['yogas']` 是同一份(奥巴马 8 条:Matrunasa、Bahu Puthra、Eka Puthra……),`EVIDENCE_CARD_SPECS` 里 career/wealth/general `yogas: true` 原样整份放进去;parents/children `yogas: false`。结果母亲、子女类瑜伽出现在财富卡,父母卡、子女卡反而没有;Sasa、落陷取消这类大格局也不在 8 条里。
5. **宫位选择缺口。** health `houses: [6, 8]` 缺命宫与 12 宫(住院);education `houses: [5, 9]` 缺 4 宫(正规学业);annual 卡看不到「土星行运压本命月亮」。
## 3. 决策记录(产品 2026-10-01 授权)
- **D1 三单串行、全领域一起修。** 产品选定,不只修父母。
- **D2 相位按 Parashari 整宫制。** 所有行星照第 7 宫;火星另照 4、8;木星另照 5、9;土星另照 3、10。罗睺、计都**不**给特殊相位(流派分歧大),它们的影响通过同宫体现。这与 `scripts/aspects.py` `SPECIAL_ASPECTS` 一致,不改引擎规则。
- **D3 卡仍然只抄不算。** 相位、燃烧、同宫的值必须由引擎给出或由已有字段做「选择」(同宫 = 同一 `house` 的行星集合,属于选择);卡里不得新写判断文字(不写「受冲」「凶」)。是否算受冲由第二单的清单教模型判断。
- **D4 父母卡带宫主与代表星的完整行。** 产品已同意父母修法 A~D;其中 B(相位)落在本单。
- **D5 健康卡加命宫、12 宫,学业卡加 4 宫。** 健康改名「健康」属于第二单(D 那边的口径),本单只改卡的取材。
- **D6 字符上限不放宽。** 单领域「契约 + 卡」≤ 12,000 字符的既有断言(`consult-evidence-card-20260927.test.ts`、`consult-evidence-card-v2-20260927.test.ts`)保持。超了先压缩格式(短数组),不得删已有字段,不得改断言。
## 4. 硬红线
1. `scripts/jyotish_api_server.py` 不得增长超过 4 行(只做薄注册,逻辑进 `consultation_native_layers.py`,每层用 `_guard`)。冻结测试 `tests/test_api_server_growth_contract.py` 必须过。
2. golden 必须由真实引擎重新生成(AGENTS §7.4),不得手改 JSON。
3. 不改相位、燃烧的引擎规则与容许度;不改功能吉凶分类(见 T5,只核对)。
4. 不改提示词、清单、`natalAnswerShapeBody`、`product-voice.ts`(属后两单)。
5. 任何既有断言改动写「原值 / 新值 / 原因」三栏。
## 5. 任务分解
### T1 引擎层:普通对话响应带上相位与燃烧(BUG-1154)
在 `scripts/consultation_native_layers.py` 新增 `build_graha_drishti(chart)`,由 `attach_native_consultation_layers` 挂到 `modules`(`_guard` 包裹,失败写 `blocked`,不影响其他层):
- `planets`: `{行星: {"aspects_houses": [被它照的宫号], "aspected_by": [照到它所在宫的行星]}}`,含罗睺、计都作为被照对象,不作为施照者(D2)。
- `houses`: `{"1": {"aspected_by": [...]}, ... "12": {...}}`。
- 行星燃烧:沿用引擎已有的 `combust` 字段,透传到普通对话的行星行(不重算)。
**验收**:Python 定向测试覆盖三位 golden 名人:奥巴马土星(1 宫)的 `aspects_houses` 含 3、7、10;太阳(7 宫)`aspected_by` 含 Saturn;水星 `combust = true`。`run_quality_gate.py --profile quick` 通过。
### T2 卡片 base:行星与宫位带相位、同宫、燃烧(BUG-1155)
- `base.natal.planets[行星]` 增加 `aspected_by`、`conjunct_with`(同 `house` 的其他行星,选择所得)、`combust`(只在 true 时出现,省字符)。
- `base.natal.houses[宫号]` 从字符串改为 `{sign, aspected_by}`,或另设 `base.natal.house_aspects`,二选一,以字符预算为准;改结构的话,所有读 `base.natal.houses` 的地方同步(`domainSection` 的 `sign` 读取)。
- 引擎没给相位层时,`meta.gaps` 记 `base.aspects`,不得补算。
**验收**:卡片合同测试新增断言:奥巴马卡太阳 `aspected_by` 含 Saturn、水星 `combust: true`;读者盘同构的 golden 场景(任一盘中宫主与罗睺同宫)`conjunct_with` 含 Rahu。12,000 字符断言全部通过。
### T3 父母、健康、学业、年运的取材(BUG-1156)
- 父母 `roles.mother/father` 每个条目增加 `lord_rows` 与 `significator_rows`:`{planet: {house, sign, status, functional, conjunct_with, aspected_by, combust?}}`。`functional` 从 base 的功能吉凶列表**选择**所得(benefic / malefic / neutral)。D12 同号宫再给该宫宫主在 D12 的星座(引擎已有 D12 行,选择所得)。
- health `houses` 改为 `[1, 6, 8, 12]`;education `houses` 改为 `[4, 5, 9]`。
- annual 卡带上「土星行运所在星座与本命月亮星座的宫距」:由 T1 在引擎侧给出 `saturn_from_moon_house`(1~12),卡只抄。
**验收**:三位名人 × 父母、健康、学业、年运卡快照更新(真实引擎 golden);乔布斯父母卡 `father.lord_rows.Venus.conjunct_with` 含 Rahu、`significator_rows.Sun.functional = malefic`;泰勒健康卡含 1 宫、12 宫;乔布斯年运卡 `saturn_from_moon_house = 1`(土星行运双鱼、本命月亮双鱼)。
### T4 瑜伽按领域分流(BUG-1157)
- 给瑜伽条目带上领域标签:先查引擎 / Raman 筛选是否已有类别字段;没有就在 `consultation_native_layers.py` 用**名称对照表**(固定表,不用正则猜)映射到 parents / children / siblings / wealth / career / general 等,表放 Python 一处,前端只按标签选择。
- 卡片:parents、children 打开 `yogas`,只收本领域标签;career / wealth / general 只收本领域与 general 标签。
- 查清 Sasa、Neecha Bhanga、Gajakesari 为什么不在 8 条里(Raman 筛选上限?规则引擎没跑?)。**只诊断并写进进度记录**;若是有意的置信度筛选,不得放宽(AGENTS §8.4),交产品决定。
**验收**:奥巴马财富卡、综合卡里不再有 Matrunasa / Puthra 类;父母卡含 Matru 类、子女卡含 Puthra 类。诊断结论写入进度记录。
### T5 功能吉凶核对(只核不改,BUG-1158 视结论决定是否占用)
泰勒盘(天蝎上升)引擎把火星(1、6 宫主)标 yogakaraka、太阳(10 宫主)标中性,与常见 BPHS 列表不同。查清引擎规则出处(文件、函数、引用的典籍或流派),写进进度记录。**不得改分类**;若确认是缺陷,登记 BUG-1158 为 `investigating`,交产品与占星顾问决定。
### T6 文档与记录
- `docs/BUG_HISTORY.md` 登记 BUG-1154~1157(以及视 T5 结论的 1158),关联 BUG-1133、BUG-1054。
- `CHANGELOG.md` 一条;Skill 无改动,写明不 bump。
- `docs/tasks/PROGRESS-consult-card-affliction-data-20261001.md`、`docs/tasks/README.md` 索引。
## 6. 让步顺序
T1、T2 不可让步。T3 的年运字段、T4 的大格局诊断可以挂 `blocked` 先交付,写进 `BLOCKED.md`。字符预算紧时,先压缩格式,再去掉 `combust: false`,绝不删已有字段。
## 7. 开工前置命令
```bash
git fetch origin --prune
git worktree add -b codex/consult-card-affliction-data-20261001 .worktrees/consult-card-affliction-data-20261001 origin/staging
cd .worktrees/consult-card-affliction-data-20261001
grep -o "BUG-1[0-9]\{3\}" docs/BUG_HISTORY.md | sort -u | tail -1
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45 # 涉及引擎层
```
验收口径:Python 定向 + quick 门;前端 `tsc --noEmit` 0、`npm run lint` 0 error、相关测试 fail=0、测试总数不低于基线、`next build` 后 `/` 仍 Static。