docs: progress, bug history, changelog for consult card affliction data

TASK-consult-card-affliction-data-20261001 T5/T6: BUG-1154~1159 (1158 functional
classification source, investigating; 1159 yoga list is the packet candidate
set, investigating), progress record with size table, T4 diagnosis and T5
findings, BLOCKED entry, task index status.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-01 23:59:23 +08:00
co-authored by Claude Opus 5.5
parent 19802a4874
commit 4c8889027f
5 changed files with 249 additions and 1 deletions
+7
View File
@@ -1,5 +1,12 @@
# BLOCKED
## TASK-consult-card-affliction-data:大格局进不了数据卡、功能吉凶出处待定(2026-10-01)
- 状态:blocked(交产品决定;本单只诊断,见 `docs/tasks/PROGRESS-consult-card-affliction-data-20261001.md` T4 / T5 段)
- BUG-1159:Sasa、落陷取消、Gajakesari 不在任何 Raman 支持包里,检测到也只进 `ungoverned_detected`;规则引擎只在 `chart.yogas` 为空时才跑。要上卡需产品决定是否扩大治理范围(AGENTS §8.4:不得自行放宽),以及是否改 `jyotish_api_server.py` 的检测条件。卡上已加 `hits` 作缓解。
- BUG-1158:`functional_benefics.py` 把除日月外的命主一律标 yogakaraka、角宫主一律中性,模块无典籍出处;按哪派改交产品与占星顾问。
- 环境缺口:无项目 `.venv`,Python 用本机 3.13.5;快速门内部 `npm test` 走系统 Node 20(70 条失败),前端全量另用 Node 22 跑,24 条数据库 / 部署失败与基线逐条同名(无 Docker);无模型凭据,读新卡后的真实回答留第三单回测。
## BUG-1128:JS 在每次部署后仍要重新下载(`supportsImmutableAssets` 自托管不生效,2026-09-30)
- 状态:blocked(TASK-home-first-load-20260930 T4 验证不成立,配置未改)
+7
View File
@@ -1,5 +1,12 @@
# 印度占星 Skill 更新日志
## 2026-10-01 — 普通对话的数据卡看得到「谁照谁、谁和谁同宫、燃烧」,瑜伽按领域分
- 数据卡每颗星带上被哪些星照到、和谁同宫、是否燃烧;各领域选中的宫带上被哪些星照到(BUG-1154、BUG-1155)。
- 父母卡给母亲、父亲各自的宫主与代表星完整一行(宫位、星座、旺弱、功能吉凶、同宫、被照、燃烧),D12 同号宫加宫主及其所在星座;健康卡加 1 宫、12 宫,学业卡加 4 宫;年运卡标出行运土星在本命月亮起第几宫(BUG-1156)。
- 瑜伽按领域分:父母卡只收母亲类、子女卡只收子女类,财富、事业、综合卡不再出现母亲、子女类;卡上标明哪些是这张盘真正命中的(BUG-1157、BUG-1159)。
- 只改引擎附加层与数据卡,不改提示词与写法(后两单)。Skill 版本不变;不改数据库结构。
## 2026-10-01 — staging 用固定验证码登录新邮箱,不再要求设置密码
- 测试环境(staging)选「验证码登录」,输入固定验证码后直接进入首页,不再停在「设置登录密码」(BUG-1152)。「注册账号」仍会设置密码。
+90
View File
@@ -15514,3 +15514,93 @@
- 相关记录:BUG-1121、BUG-1122。
- 复发自:无
- 修复版本:`codex/staging-otp-skip-password-20261001`。
## BUG-1154 | 普通对话的引擎输出没有「谁照谁」和燃烧
- 状态:resolved(代码 + 真实引擎测试;未部署)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`scripts/consultation_native_layers.py`(新增 `build_graha_drishti`)、`scripts/jyotish_engine.py`(燃烧规则提成 `COMBUSTION_ORBS` / `is_combust`)、`frontend/src/mastra/consultation-workflow.ts` 投影白名单。
- 现象:父母、婚姻、健康类回答读了旺弱,没读受冲:土星照太阳、火星照 7 宫、9 宫主距太阳 10° 燃烧这类信号模型一次没提(排查记录 `docs/research/consult_affliction_audit_2026_10_01.md`)。
- 触发条件:任何普通对话。
- 根因:完整报告在 `jyotish_engine` Step 5 用 `aspects.calc_house_aspects` 算了相位、在 Shadbala 块按度数写了 `planet['combust']`;普通对话工作流走的是另一条排盘路径,响应里既没有相位层也没有 `combust` 字段,投影白名单也没有这两个键。
- 修复:`build_graha_drishti` 用 `aspects.calc_house_aspects` 算七颗行星的整宫相位(所有行星照第 7 宫,火星另照 4、8,木星另照 5、9,土星另照 3、10;罗睺、计都只作被照对象),输出每颗星 `aspects_houses` / `aspected_by`、每个宫 `aspected_by`;燃烧调用引擎同一条规则 `jyotish_engine.is_combust`(原地提取,容许度与比较不变)。挂在 `chart.consultation_native_layers.graha_drishti`,`_guard` 包裹,失败只记 `blocked`。投影新增 `graha_drishti` 白名单。`jyotish_api_server.py` 未改动。
- 验证:`tests/test_consultation_native_layers.py` 新增 3 条:三张公开盘逐星逐宫与 `calc_house_aspects` 直接调用一致、燃烧与 `is_combust` 一致、罗睺计都不施照;奥巴马土星(1 宫)照 3/7/10、太阳 `aspected_by` 含 Saturn、水星 `combust = true`;燃烧规则容许度与边界不变。golden 重生后除新键外与旧 golden 逐值一致(0 处差异)。
- 防复发:同上测试;数据卡测试(BUG-1155)逐值对照引擎层。
- 相关记录:BUG-1054(同一投影白名单曾挡掉嵌套键)、BUG-1133
- 复发自:无
- 修复版本:`19802a48`(分支 `codex/consult-card-affliction-data-20261001`,未推送、未部署)
## BUG-1155 | 数据卡没有相位、同宫、燃烧
- 状态:resolved(代码 + golden 测试;未部署)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`frontend/src/lib/consultation-evidence-card.ts` `baseNatal`、`domainSection`。
- 现象:卡上行星只有星座、宫位、度数、星宿、逆行、旺弱;宫位只有星座、落星、宫主。四份乔布斯答案都没对出「木星与计都同宫」,模型看不到谁照谁。
- 触发条件:任何普通对话。
- 根因:`PLANET_ROW_KEYS` 不含相位与燃烧;领域段只列被选中宫位的星,宫主与谁同宫要模型自己去 base 里对。
- 修复:`base.natal.planets[行星]` 增加 `aspected_by`(引擎值)、`conjunct_with`(同 `house` 的其他行星,选择所得)、`combust`(只在 true 时出现);两个列表空时不出现。宫位相位放在领域段的宫位行 `houses[N].aspected_by`(选中的宫才有),没有放进 base(字符预算,见 PROGRESS)。引擎没给相位层时 `meta.gaps` 记 `base.aspects`,不补算。字符预算按任务书 D6 先压缩格式:`antardashas_in_mahadasha` 改为 `[主星, 起, 止]` 短数组,D9 行的 `vargottama` 只在 true 时出现;12,000 字符断言一条未改。
- 验证:新增 `frontend/tests/consult-card-affliction-data-20261001.test.ts`:三张盘逐星对照引擎层(aspected_by / combust / conjunct_with);奥巴马太阳 `aspected_by` 含 Saturn、水星 `combust: true`;乔布斯 9 宫主金星 `conjunct_with` 含 Rahu;领域宫位行 `aspected_by` 逐宫对照;相位层缺失时记缺口不补算;压缩后的子运与 D9 行逐值对照引擎。`consult-evidence-card-v2-20260927.test.ts` 的 D9 行断言按三栏改写(PROGRESS)。三个 12,000 字符断言全过,最大 11,918(泰勒年运,含清单)。
- 防复发:同上。
- 相关记录:BUG-1154、BUG-1133
- 复发自:无
- 修复版本:`19802a48`(分支 `codex/consult-card-affliction-data-20261001`,未推送、未部署)
## BUG-1156 | 父母卡缺宫主与代表星的完整行;健康卡缺 1、12 宫,学业卡缺 4 宫;年运卡看不到土星压月亮
- 状态:resolved(代码 + golden 测试;未部署)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`EVIDENCE_CARD_SPECS.health` / `education`、parents `roles`、annual `slow_transits`;`consultation_native_layers.build_slow_transits`。
- 现象:乔布斯父母答案没读出 9 宫主金星合罗睺、太阳是功能凶星;泰勒健康答案说「两颗星没有受损」(命主在 4 宫与 8 宫主同宫、月亮在 12 宫受土星照,卡上没有 1、12 宫);乔布斯学业卡看不到 4 宫罗睺;年运卡看不到「土星行运压本命月亮」。
- 触发条件:parents / health / education / annual 领域。
- 根因:roles 只给宫主与代表星的名字;health `houses: [6, 8]`、education `houses: [5, 9]`;引擎行运层没有「土星距本命月亮第几宫」。
- 修复:roles 每个条目加 `lord_rows`、`significator_rows`:`{house, sign, status, functional, conjunct_with, aspected_by, combust?}`,`functional` 按该星在引擎功能吉/凶/中性哪张列表里选择(标签 benefic / malefic / neutral 进 `EVIDENCE_CARD_LABELS`);D12 同号宫加 `lord` 与 `lord_sign`(该宫宫主在 D12 的星座,读自 D12 行)。health `[1, 6, 8, 12]`,education `[4, 5, 9]`。引擎 `slow_transits.saturn_from_moon_house`(行运土星星座距本命月亮星座的整宫宫距),年运卡原样抄。
- 验证:新增测试:三张盘 roles 逐字段对照 base 行与功能列表;乔布斯父亲 `lord_rows.Venus.conjunct_with` 含 Rahu、`significator_rows.Sun.functional = malefic`;泰勒健康卡含 1、12 宫;乔布斯学业卡 4 宫落星含 Rahu;乔布斯年运卡 `saturn_from_moon_house = 1`(行运土星双鱼、本命月亮双鱼);Python 侧三张盘宫距逐个核算。
- 防复发:同上。
- 相关记录:BUG-1133、BUG-1155
- 复发自:无
- 修复版本:`19802a48`(分支 `codex/consult-card-affliction-data-20261001`,未推送、未部署)
## BUG-1157 | 瑜伽不分领域:母亲、子女类瑜伽进了财富卡,父母卡、子女卡反而没有
- 状态:resolved(分流;大格局缺席另见 BUG-1159)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`scripts/consultation_native_layers.py`(新增 `build_yoga_domains`、`YOGA_PACKET_DOMAINS`)、`EVIDENCE_CARD_SPECS`(`yogaTags`)、卡片 yogas 段、`onCard("yogas")`。
- 现象:奥巴马 8 条瑜伽(Matrunasa、Bahu Puthra、Eka Puthra……)原样进财富卡、综合卡;父母卡、子女卡 `yogas: false`。
- 触发条件:career / wealth / general 卡(及 golden 的 family 路由)。
- 根因:`modules.yogas` 是 Raman 支持包按路由筛出的规则清单,一份给所有卡;卡上没有领域标签。
- 修复:标签取自管辖该规则的 Raman 包(固定表 `YOGA_PACKET_DOMAINS`:Nabhasa/Chandra 批 = general、wealth_core = wealth、spouse = marriage、children = children、mother = parents、sibling_core = siblings),按 `rule_id` 对照,不按名字猜;新层 `yoga_domains` 同时带筛选自己的 `hit`。卡片:parents、children 打开 yogas,只收本领域;career 收 career + general,wealth 收 wealth + general,general 只收 general。yogas 段改为 `{names, hits, claim_boundaries}`(`hits` = 引擎筛选命中的名字;原 `count` 是全量计数,与分流后的名单对不上,去掉)。完整清单仍可一次查阅,所以带标签分流的卡不再把 `yogas` 从可补查列表里拿掉(断言三栏见 PROGRESS)。
- 验证:新增测试:annual 路由(20 条全包)下三张盘五个领域的 names / hits 逐条对照引擎层;奥巴马财富、综合卡没有 Matru / Puthra 类,父母卡全是 Matru 类且 hits = Matrunasa,子女卡全是 Puthra 类;标签层缺失时记 `<domain>.yoga_domains` 缺口并退回原清单。Python 侧逐条对照包成员。
- 防复发:同上。
- 相关记录:BUG-1159
- 复发自:无
- 修复版本:`19802a48`(分支 `codex/consult-card-affliction-data-20261001`,未推送、未部署)
## BUG-1158 | 功能吉凶层把命主一律标成 yogakaraka,10 宫主太阳在天蝎上升标中性
- 状态:investigating(只核不改,交产品与占星顾问决定)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`scripts/functional_benefics.py` `derive_functional_benefic_malefic`(`SOURCE = strict_functional_benefic_malefic_v1`,2026-06-28 `09817b96` 引入);所有读功能吉凶的地方(数据卡、Technique Audit、报告)。
- 现象:泰勒盘(天蝎上升)火星(1、6 宫主)标 yogakaraka、太阳(10 宫主)标中性;同一规则下奥巴马(摩羯上升)土星(1、2 宫主)、乔布斯(处女上升)水星(1、10 宫主)也是 yogakaraka。
- 触发条件:任何非日月作命主的上升。
- 根因(已核实代码,未定是否缺陷):规则把 1 宫同时算作三方宫和角宫,`owns_trine and owns_kendra` 对命主恒成立,所以除日月外的命主都进 yogakarakas(也进 benefics);角宫主一律归中性,没有「凶星主角宫转吉」的处理,天蝎上升的太阳因此是中性;6 宫主与命主同星时按「含 1 宫不算凶」处理。模块没有引用典籍或流派出处。常见 BPHS 列表的 yogakaraka 指同时主一个角宫和一个三方宫且不含命宫的行星(天蝎上升无),天蝎上升的功能吉星常列太阳、月亮、木星。
- 修复:未改(任务书红线 3)。
- 验证:无。
- 防复发:待决定。
- 相关记录:BUG-1156(父母卡的 `functional` 取自这一层)
- 复发自:无
- 修复版本:无
## BUG-1159 | 数据卡瑜伽清单是规则候选全集,大格局(Sasa、落陷取消、Gajakesari)进不来
- 状态:investigating(`hits` 已上卡作缓解;检测完整度与治理范围交产品决定)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`scripts/jyotish_api_server.py` 普通对话层 yogas 块(`if not compact:` 分支)、`scripts/raman_support_observations.py` `sieve_yogas_for_routes`。
- 现象:卡上的瑜伽名字大多不是这张盘成立的瑜伽;奥巴马盘引擎能检测出 Sasa、Neechabhanga Raja,乔布斯与泰勒能检测出 Gajakesari,都不在卡上。
- 触发条件:任何带 yogas 的卡。
- 根因(已核实):一,`modules.yogas.yogas` = Raman 包成员规则的「命中 + 未命中」全集(`hits + misses`),卡只抄名字不抄 `hit`,未命中的规则看上去像成立的瑜伽(乔布斯 family 路由 8 条全是未命中)。二,Sasa / Neecha Bhanga / Gajakesari 不在任何 Raman 包里,检测到也只进 `ungoverned_detected`,不进 `modules.yogas`。三,规则引擎(`yoga_engine.detect_yogas`)只在 `chart.yogas` 为空时才跑;乔布斯、泰勒的排盘结果自带 1~2 条扩展瑜伽,于是完整检测根本没跑,乔布斯盘本可命中的 Matrunasa 也成了未命中。
- 修复:本轮只做卡侧缓解:yogas 段加 `hits`(引擎 `hit` 原值)。第二、三条属治理范围与检测路径,任务书要求只诊断、不得放宽(AGENTS §8.4),未改。
- 验证:诊断脚本对三张公开盘直接调用 `yoga_expansion.detect_all_yogas` + `yoga_engine.detect_yogas`(PROGRESS T4 段)。
- 防复发:待决定。
- 相关记录:BUG-1157
- 复发自:无
- 修复版本:缓解随 `codex/consult-card-affliction-data-20261001`;其余无
@@ -0,0 +1,144 @@
# PROGRESS · 数据卡补相位、同宫、燃烧,瑜伽按领域分流(2026-10-01,三单之一)
- 任务书:`docs/tasks/TASK-consult-card-affliction-data-20261001.md`(origin/staging `9b937c4a`)
- 执行:Claude fork 子代理(直接执行模式,产品授权)
- 分支 / worktree:`codex/consult-card-affliction-data-20261001` / `.worktrees/consult-card-affliction-data-20261001`,基线 `9b937c4a`(任务书写的 `2d620fb4` 之后只多了任务书与排查记录两个文档提交)
- BUG 编号:开工核对最大 BUG-1153;本单用 1154~1159(1158 = T5 核对结论,1159 = T4 诊断中查出的瑜伽清单问题)
- 代码提交:`19802a48`(文档另一提交)
- 预检:`python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45` 全部 ok;已读 `docs/research/pre_work_error_ledger.md`
## 环境
- 无项目 `.venv`(仓内 `.venv` 是悬空软链),Python 一律用本机 `python3` 3.13.5(user site 带 pyswisseph)。
- Node 22.14(`/exec-daemon/node`)跑前端;`frontend/node_modules` 用 `cp -al` 硬链接副本(真目录,Turbopack 可构建,已 gitignore,未提交)。
- 快速门内部的 `npm test` 步骤走系统 Node 20,70 条失败(Node 22 才支持的模块 mock 等);前端全量另用 Node 22 跑,结论以 Node 22 为准。
- 无 Docker:24 条数据库 / 部署套件失败,与基线逐条同名。
- 无模型凭据:模型读卡后的真实回答不在本单验收范围(第三单名人回测)。
## 交付门
| 项 | 基线 `9b937c4a` | 本分支 |
| --- | --- | --- |
| `tsc --noEmit` | 0 错 | 0 错 |
| `npm run lint` | 0 error / 126 warning | 0 error / 126 warning |
| `npm test`(Node 22,提交后终跑) | 4,868(pass 4,803 / fail 24 / skip 41 / cancelled 0) | 4,878(pass 4,813 / fail 24 / skip 41 / cancelled 0) |
| 失败名单 | 24 条,全是数据库 / 部署类 | 与基线逐条同名(`comm` 无差) |
| 测试名单 | — | 缺 0、新增 10(全部来自新文件) |
| `next build` | `/` ○ Static | `/` ○ Static |
| 首屏 gzip(`index.html` 引用 29 个脚本 gzip-9 求和) | 566,193 B | 566,193 B(0%) |
| Python 定向 `tests/test_consultation_native_layers.py` | 7 | 12 passed |
| 快速门 Python 段 | — | 1,041 passed / 1 skipped(含新增 5 条;快速门整体因内部 Node 20 的 `npm test` 退出 1,见环境) |
| `tests/test_api_server_growth_contract.py` | — | 通过(`jyotish_api_server.py` 0 行改动) |
时序抖动:`consult-evidence-lookup-20260927.test.ts`「a lookup does not reset the answer clock」在中间一次全量跑里报 `empty_answer` ≠ `answer_truncated`(70 秒假时钟下的竞态),同分支其余两次全量跑通过、单文件连跑 3 次 15/15 通过;本单没有改答题钟或该测试的任何依赖。
## 实现
| 任务 | 落点 |
| --- | --- |
| T1 引擎层(BUG-1154) | `scripts/consultation_native_layers.py` 新增 `build_graha_drishti`:七颗行星调 `aspects.calc_house_aspects`,输出 `planets[星].aspects_houses / aspected_by / combust`、`houses[N].aspected_by`;罗睺、计都只作被照对象。燃烧:把完整报告 Step 5 Shadbala 块里的内联规则提成 `jyotish_engine.COMBUSTION_ORBS` + `is_combust()`(容许度、比较式原样),完整报告与本层都调它。`_guard` 包裹 |
| T1 附带(T3 年运字段) | `build_slow_transits` 增加 `saturn_from_moon_house`(行运土星星座距本命月亮星座的整宫宫距) |
| T4 引擎侧(BUG-1157) | 新增 `build_yoga_domains` 与固定表 `YOGA_PACKET_DOMAINS`(按 Raman 包文件,用 `rule_id` 对照),每条带 `name / hit / domain` |
| 投影 | `frontend/src/mastra/consultation-workflow.ts`:`graha_drishti`、`yoga_domains` 进本命投影各自白名单;行运白名单加 `saturn_from_moon_house` |
| T2 卡片 base(BUG-1155) | `consultation-evidence-card.ts` `baseNatal`:行星行加 `aspected_by`、`conjunct_with`(同 `house` 选择)、`combust`(仅 true);相位层缺失记 `base.aspects`。领域段宫位行加 `aspected_by` |
| T3(BUG-1156) | parents roles 加 `lord_rows` / `significator_rows`;D12 同号宫加 `lord`、`lord_sign`;health `[1, 6, 8, 12]`、education `[4, 5, 9]`;年运卡抄 `saturn_from_moon_house` |
| T4 卡片 | 规格新增 `yogaTags`;parents、children 打开 yogas;yogas 段 `{names, hits, claim_boundaries}` |
| golden | `JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 PYTHONHASHSEED=0 python3 scripts/research/capture_consult_evidence_card_golden.py` 重生;去掉新键后与旧 golden 逐值比对 0 处差异 |
| 测试 | 新文件 `frontend/tests/consult-card-affliction-data-20261001.test.ts`(10 条);`tests/test_consultation_native_layers.py` 新增 5 条 |
## 与任务书的偏差(请验收时逐条判断)
1. **相位层挂在 `chart.consultation_native_layers.graha_drishti`,不在 `chart.modules`。** 该模块的既有约定是不写 `modules`(主题报告按 `modules` 数量计 `full_reading_module_count`,不能动),所有本地附加层都在这里,投影也从这里读。
2. **燃烧不是「透传」。** 普通对话的排盘路径根本没有 `combust` 字段(golden 三张盘行星行都没有)。做法是把完整报告的内联规则原地提成函数,两处共用;没有写回 `chart.planets` 行(不改既有输出),值放在相位层里。
3. **宫位相位放在领域段的宫位行,没放 base。** 两种 base 方案都试过:base `house_aspects`(空宫省略)时乔布斯 timing 卡「契约+卡」12,005 > 12,000;放进 `base.natal.houses` 更大。领域宫位行只给本领域选中的宫,读宫时就在手边。代价:某领域没选的宫,卡上看不到它被谁照(落了星的宫可从落星的 `aspected_by` 读到)。
4. **为守住 12,000 字符,压缩了两处既有格式(任务书 D6「先压缩格式」):** `antardashas_in_mahadasha` 从 `{lord,start,end}` 改为 `[主星, 起, 止]`;D9 行的 `vargottama` 只在 true 时出现。新增的 `aspected_by`、`conjunct_with` 空时不出现,`combust` 只在 true 时出现。没有删任何字段的信息。
5. **yogas 段去掉 `count`、加 `hits`。** 原 `count` 是引擎全量条数,分流后与名单对不上;`hits` 是引擎 `hit` 原值,见 T4 诊断第一条。
6. **`functional` 标签** benefic / malefic / neutral 由卡写,进 `EVIDENCE_CARD_LABELS`(同「母亲 / 父亲」的先例)。D12 宫主用卡内 `SIGN_LORDS` 常量(与 `scripts/functional_benefics.py` 同一张表)。
7. **T4 验收「子女卡含 Puthra 类」**:golden 的 family 路由与 annual 路由都有子女包,测试用 annual 路由(20 条全包)对五个领域逐条核对。这些名字大多是**未命中**的规则候选,不是成立的瑜伽,见下。
## 改动的既有断言(原值 / 新值 / 原因)
| 文件 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `consult-evidence-card-20260927.test.ts`「the card names what else…」 | career 卡 `supplementable_sections` 不含 `yogas`(false) | 含(true) | T4:卡上只放本领域标签的瑜伽,完整清单仍只能一次查阅拿到 |
| 同文件「every card value is…」白名单 | `EVIDENCE_CARD_LABELS` 四条 | 同一来源多 benefic / malefic / neutral,断言本身不变 | T3 父母卡宫主与代表星行的功能吉凶 |
| `consult-evidence-card-v2-20260927.test.ts`「every base section carries the engine's D9 summary」 | 每行 deepEqual `pick(row, [d9_sign, d9_dignity, vargottama])` | `vargottama` 为 false 时期望里去掉该键;另加一条断言卡上 `vargottama === true` 与引擎一致 | D6 字符预算 |
三个 12,000 字符断言(`consult-evidence-card-20260927`、`consult-evidence-card-v2-20260927`、`consult-condensed-checklist-20260927`)一条未改。
## 卡片体量(字符,`JSON.stringify` 长度;golden 三张盘)
「契约+卡」= 工具返回去掉 `methodology`(`consult-evidence-card-v2` 的口径);「含清单」= 整个返回(`consult-condensed-checklist` 的口径)。annual / timing 用各自路由的 golden,其余领域用 family 路由。
| 盘 / 领域 | 契约+卡 基线 | 本分支 | 差 | 含清单 基线 | 本分支 | 差 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 乔布斯 / career | 7,358 | 7,233 | -125 | 9,989 | 9,864 | -125 |
| 乔布斯 / marriage | 7,904 | 7,941 | +37 | 10,612 | 10,649 | +37 |
| 乔布斯 / wealth | 7,378 | 7,385 | +7 | 9,950 | 9,957 | +7 |
| 乔布斯 / health | 7,206 | 7,412 | +206 | 10,993 | 11,199 | +206 |
| 乔布斯 / education | 6,329 | 6,477 | +148 | 8,368 | 8,516 | +148 |
| 乔布斯 / migration | 6,270 | 6,330 | +60 | 8,309 | 8,369 | +60 |
| 乔布斯 / family | 6,352 | 6,424 | +72 | 8,388 | 8,460 | +72 |
| 乔布斯 / parents | 6,518 | 7,379 | +861 | 8,555 | 9,416 | +861 |
| 乔布斯 / children | 6,152 | 6,321 | +169 | 8,190 | 8,359 | +169 |
| 乔布斯 / annual | 9,514 | 9,751 | +237 | 11,550 | 11,787 | +237 |
| 乔布斯 / timing | 8,552 | 8,555 | +3 | 11,471 | 11,474 | +3 |
| 乔布斯 / general | 7,911 | 7,859 | -52 | 9,948 | 9,896 | -52 |
| 奥巴马 / career | 7,299 | 7,120 | -179 | 9,930 | 9,751 | -179 |
| 奥巴马 / marriage | 7,653 | 7,662 | +9 | 10,361 | 10,370 | +9 |
| 奥巴马 / wealth | 7,462 | 7,398 | -64 | 10,034 | 9,970 | -64 |
| 奥巴马 / health | 7,134 | 7,319 | +185 | 10,921 | 11,106 | +185 |
| 奥巴马 / education | 6,380 | 6,456 | +76 | 8,419 | 8,495 | +76 |
| 奥巴马 / migration | 6,318 | 6,320 | +2 | 8,357 | 8,359 | +2 |
| 奥巴马 / family | 6,373 | 6,396 | +23 | 8,409 | 8,432 | +23 |
| 奥巴马 / parents | 6,549 | 7,398 | +849 | 8,586 | 9,435 | +849 |
| 奥巴马 / children | 6,188 | 6,311 | +123 | 8,226 | 8,349 | +123 |
| 奥巴马 / annual | 9,355 | 9,501 | +146 | 11,391 | 11,537 | +146 |
| 奥巴马 / timing | 8,629 | 8,577 | -52 | 11,548 | 11,496 | -52 |
| 奥巴马 / general | 7,894 | 7,799 | -95 | 9,931 | 9,836 | -95 |
| 泰勒 / career | 7,244 | 7,167 | -77 | 9,875 | 9,798 | -77 |
| 泰勒 / marriage | 7,970 | 8,064 | +94 | 10,678 | 10,772 | +94 |
| 泰勒 / wealth | 7,432 | 7,466 | +34 | 10,004 | 10,038 | +34 |
| 泰勒 / health | 7,090 | 7,333 | +243 | 10,877 | 11,120 | +243 |
| 泰勒 / education | 6,334 | 6,527 | +193 | 8,373 | 8,566 | +193 |
| 泰勒 / migration | 6,291 | 6,369 | +78 | 8,330 | 8,408 | +78 |
| 泰勒 / family | 6,356 | 6,469 | +113 | 8,392 | 8,505 | +113 |
| 泰勒 / parents | 6,518 | 7,364 | +846 | 8,555 | 9,401 | +846 |
| 泰勒 / children | 6,142 | 6,362 | +220 | 8,180 | 8,400 | +220 |
| 泰勒 / annual | 9,623 | 9,882 | +259 | 11,659 | 11,918 | +259 |
| 泰勒 / timing | 8,568 | 8,604 | +36 | 11,487 | 11,523 | +36 |
| 泰勒 / general | 7,811 | 7,800 | -11 | 9,848 | 9,837 | -11 |
最大值:契约+卡 9,882(上限 12,000);含清单 11,918(elizabeth_taylor/annual,上限 12,000,余量 82)。
**提醒第二单**:年运「含清单」只剩 82 字符(泰勒),timing 约 480。第二单若给年运、时运加中文清单,必须先在卡或清单上再省,或由产品重新定 12,000 的口径。
## T4 诊断:Sasa、落陷取消、Gajakesari 为什么不在卡上
对三张公开盘直接调用 `yoga_expansion.detect_all_yogas` + `yoga_engine.detect_yogas`(即 `_compute_yogas_api` 的两个检测器):
| 盘 | 检测器能出的大格局(节选) | 卡上 yogas(family 路由) | 其中命中 |
| --- | --- | --- | --- |
| 乔布斯 | Gajakesari、Raja Yoga 多条、Matrunasa、Saraswati、Amala(49 条) | 8 条母亲 / 子女 / 兄弟规则 | 0 |
| 奥巴马 | Sasa、Neechabhanga Raja、Budhaditya、Matrunasa(60 条) | 同 8 条 | Matrunasa |
| 泰勒 | Gajakesari、Hamsa (Trikona)、Saraswati、Eka / Bahu Puthra(61 条) | 同 8 条 | 0 |
三层原因(代码已核实,BUG-1159):
1. **卡上的名字是「规则候选」,不是「成立的瑜伽」。** `modules.yogas.yogas` = Raman 支持包里本路由成员规则的 `hits + misses`(`raman_support_observations.sieve_yogas_for_routes`),卡原来只抄名字不抄 `hit`。乔布斯 family 路由 8 条全部未命中,模型却看到 8 个瑜伽名。本单在卡上加了 `hits`。
2. **大格局不在任何 Raman 包里。** Sasa / Neecha Bhanga / Gajakesari 即使被检测到,也只进 `raman_support.yogas.ungoverned_detected`,不进 `modules.yogas`。这是「只放 governed_support_only_candidate_ready 的规则」的治理筛选,按任务书与 AGENTS §8.4 不放宽。
3. **规则引擎只在 `chart.yogas` 为空时才跑。** `jyotish_api_server.py` 普通对话 yogas 块:`chart.yogas` 有内容就直接用它,`if not compact:` 才调 `_compute_yogas_api`。乔布斯、泰勒的排盘结果自带 1~2 条扩展瑜伽(Amala、Saraswati / Kemadruma),于是完整检测没跑,乔布斯本可命中的 Matrunasa 也成了未命中;奥巴马 `chart.yogas` 为空,检测才跑,所以只有他有命中。命中与否取决于一个不相关的条件。
不是 Raman 筛选的条数上限(筛选没有上限,family 路由正好 3 个包 8 条规则)。第 2、3 条要改都涉及治理范围或 `jyotish_api_server.py`,交产品决定(BLOCKED.md)。
## T5 核对:功能吉凶分类的出处(只核不改,BUG-1158 investigating)
- 出处:`scripts/functional_benefics.py` `derive_functional_benefic_malefic`,`SOURCE = "strict_functional_benefic_malefic_v1"`,2026-06-28 `09817b96`「Bridge functional benefic malefic layer」引入;模块里没有引用任何典籍、流派或参考文件。
- 规则:三方宫 {1,5,9}、角宫 {1,4,7,10}、难宫 {3,6,8,11,12};同时主三方与角宫(日月除外)→ yogakaraka 且吉;只主三方 → 吉;主难宫且不含 1 宫 → 凶;其余(含只主角宫)→ 中性;8 宫主是日月时免凶。
- 由此:1 宫同时算三方和角宫,**除日月外的命主一律是 yogakaraka**(泰勒火星 1+6、奥巴马土星 1+2、乔布斯水星 1+10);**角宫主一律中性**,没有「凶星主角宫转吉」,天蝎上升的太阳(10 宫主)因此是中性;火星同时主 6 宫,因含 1 宫不算凶。
- 与常见 BPHS 列表的差别:yogakaraka 通常指同时主一个角宫与一个三方宫、且不靠命宫的行星(天蝎上升没有);天蝎上升常列功能吉星为太阳、月亮、木星。是否算缺陷、按哪派改,交产品与占星顾问;本单未改分类,父母卡的 `functional` 原样取自这一层。
## 未做 / 交给后两单
- 提示词(`frontend/src/mastra/index.ts` 的数据卡说明)还没讲新字段(`aspected_by`、`conjunct_with`、`combust`、`lord_rows`、`hits`、`saturn_from_moon_house`、子运短数组)——属第二单(读法与清单)。
- 模型读新卡后的真实回答、名人回测——第三单。
+1 -1
View File
@@ -403,6 +403,6 @@
| `TASK-consult-answer-clock-20261001.md` | `PROGRESS-consult-answer-clock-20261001.md` | 普通对话答题时钟 70 s 容不下推理模型(v4-pro 77 s),无出生分钟路线只受 110 s 工具钟管;产品定 5 分钟防卡死(BUG-1142) | **已实现,待 Claude 验收**(直接执行) | 分支 `codex/consult-answer-clock-20261001` |
| `TASK-consult-timeline-no-plan-20261001.md` | `PROGRESS-consult-timeline-no-plan-20261001.md` | 普通对话进度栏提前打勾:回答提纲在算盘前就作为四行步骤显示并全部打勾(BUG-1145);产品选 B 去掉提纲行,只显示真实步骤 | **实现完成,待 Claude 验收**(直接执行) | 分支 `codex/consult-timeline-no-plan-20261001` |
| `TASK-staging-otp-skip-password-20261001.md` | `PROGRESS-staging-otp-skip-password-20261001.md` | staging 新邮箱用固定验证码登录后被强制设置密码,测试者误以为要密码登录;产品选「测试通道验证码登录跳过设置密码」,生产不变(BUG-1152) | **已实现推 staging**(Claude 直接执行),真机清单 `docs/testing/staging-otp-skip-password-20261001.md` | 分支 `codex/staging-otp-skip-password-20261001` |
| `TASK-consult-card-affliction-data-20261001.md` | `PROGRESS-consult-card-affliction-data-20261001.md` | 普通对话「盘上有信号、模型没认出」三单之一:数据卡补相位(谁照谁)、同宫、燃烧,父母卡带宫主与代表星完整行,健康卡加 1/12 宫、学业卡加 4 宫,瑜伽按领域分流(预留 BUG-1154~1159);排查记录 `docs/research/consult_affliction_audit_2026_10_01.md` | **待领取**;三单串行第一 | 分支 `codex/consult-card-affliction-data-20261001` |
| `TASK-consult-card-affliction-data-20261001.md` | `PROGRESS-consult-card-affliction-data-20261001.md` | 普通对话「盘上有信号、模型没认出」三单之一:数据卡补相位(谁照谁)、同宫、燃烧,父母卡带宫主与代表星完整行,健康卡加 1/12 宫、学业卡加 4 宫,瑜伽按领域分流(预留 BUG-1154~1159);排查记录 `docs/research/consult_affliction_audit_2026_10_01.md` | **已实现待验收**(Claude 子代理直接执行,BUG-1154~1159;未推送);三单串行第一 | 分支 `codex/consult-card-affliction-data-20261001` |
| `TASK-consult-affliction-reading-20261001.md` | `PROGRESS-consult-affliction-reading-20261001.md` | 三单之二:全领域「先看受冲、再看旺弱」通用读法,补齐父母/子女/学业/迁居/家庭/年运/综合/健康中文清单,健康改名「健康」先讲体质底子(预留 BUG-1160~1166) | **待领取**;依赖第一单上 staging | 分支 `codex/consult-affliction-reading-20261001` |
| `TASK-consult-no-presupposition-and-backtest-20261001.md` | `PROGRESS-consult-no-presupposition-backtest-20261001.md` | 三单之三:写作形状去掉「对象在场」预设、受冲时请用户确认、删被照抄的「逆行」示例、用户纠正时不辩护;建立名人生平回测作为普通对话提示词改动的固定验收(预留 BUG-1167~1172) | **待领取**;依赖第二单上 staging;回测需模型 key | 分支 `codex/consult-no-presupposition-backtest-20261001` |