docs: upstream sync 4 — BUG-1183~1191, CHANGELOG, progress, task index, backtest round 6

Progress lists the delivery per item, F3 locations, the ERR-110 re-freeze
without a version bump (scores unchanged), the v5 evaluation (byte-identical
at a18f8d4e, bc9b9f89 and 0176cb30), upstream commits after 0a6696c5 not
taken and why, the Kemadruma difference from upstream, and open questions.
Backtest round 6 (86 answers read and scored): parents / requests / banned
phrases unchanged; career type conflict 5 -> 9 / 18, still failing the line.

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-02 15:09:51 +08:00
co-authored by Claude Opus 5.5
parent b53f56b6fd
commit ae74706e40
5 changed files with 380 additions and 2 deletions
+120
View File
@@ -15922,3 +15922,123 @@
- 相关记录:BUG-1164、BUG-1165、BUG-1177、BUG-1176。
- 复发自:BUG-1165(示例读法被照抄)。BUG-1165 的合同测试只白名单了「逆行」一词,没有检查示例括号里「宫位 → 行为」的读法,所以未拦住。
- 修复版本:`codex/consult-upstream-functional-v2-20261002`(未推送)。
## BUG-1183 | 婚姻计数法输出「一次终身关系,忠诚度较高」「两段重要关系,可能再婚」等确定性关系断语,婚恋证据按次数记 positive
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/marriage_counting.py` `_interpret_marriage_count`、`_marriage_recommendations`、`note`;`scripts/jyotish_api_server.py` `_derived_marriage_evidence`(`Marriage-counting` 条目)与婚恋裁决「对象筛选」轴;全读 `modules.marriage_counting`(PL9 导出包原样带出)。
- 现象:全读与 `/api/thematic_report` 婚恋主题里,婚姻计数条目写「婚姻/认真关系数量:N」「解读:一次终身关系,忠诚度较高」「第一段关系由吉星主导,质量较好」等;计数 ≤ 1 时 sentiment 记 `positive`,details 带 `marriage_count` 与 D9 质量评级(「婚姻稳定」「强烈建议婚前咨询」),后者还被拼进裁决文字。
- 触发条件:任一张能算出 D1 第 7 宫主与其 D9 落点的盘。
- 根因:方法把「从 A 数到 B 的星座距离」直接当成关系次数,并按次数给出先后、质量、忠诚度断语;消费方再按次数给情绪分。上游 yinduzhanxing `0afa2780` 已改为只描述几何指数。
- 修复(TASK-upstream-sync4-20261002 T1,决策 2,文案为我方中文,不搬上游原文):解读改为「关系几何指数 N:……是这个方法里的星座距离,不代表婚姻或关系的次数」,同星座 / 对冲只说位置关系;建议改为对所有指数相同的三句中性说明;`note` 改为几何口径;结果新增 `geometric_index`(`marriage_count` 兼容保留、同值)。`Marriage-counting` 证据一律 `neutral`,details 只有 `geometric_index`;裁决「对象筛选」轴不再读 D9 质量评级。
- 验证:`tests/test_marriage_counting_geometry_only.py`(12 个指数逐一检查禁句与同一套建议);`tests/test_api_server_security.py::test_marriage_counting_evidence_is_neutral_geometry_index_only`(虚构盘 1990-06-15 10:30 北京,neutral、只有几何指数、婚恋主题全文无禁句)。`rg "再婚|段关系|第一段|终身关系|忠诚度" scripts/marriage_counting.py` 无命中。模型视图实测:普通对话 `/api/consultation_workflow` 婚恋路由的主题证据来自 `reused_chart_modules`(`full_reading_used: false`),本条目根本不出现,`toModelOutput` 后的模型视图里也没有(见进度记录 T1)。
- 防复发:上述两条测试锁禁句与 sentiment。遗留:`_assess_d9_marriage_quality` 的评级文字(「婚姻稳定」等)仍在全读原始模块里,未进证据条目,进度记录列为待产品决定。
- 相关记录:BUG-1184。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1184 | 婚姻计数遇到「7 宫主与定位星同星座」时抛 UnboundLocalError,模块整段缺失;Parivartana 判定实际判的是合相
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/marriage_counting.py` `marriage_counting_method`、`_check_parivartana`;全读 `modules.marriage_counting`(异常被 `cmd_full_reading` 吞进 `errors`,模块缺失)。
- 现象:虚构输入「金星为 7 宫主、金星与火星同在白羊」时,旧代码在写 Parivartana 警告时引用尚未赋值的 `distance`,抛 `UnboundLocalError`。
- 触发条件:7 宫主落在他人星座,且该星座主星与它同星座(合相),且传入了宫位数据(全读总会传)。
- 根因:两处。一,距离在 Parivartana 段之后才计算,警告里先用了它;交换后的重算结果随后又被覆盖。二,`_check_parivartana` 比较的是「定位星与 7 宫主是否同星座」,这是合相,不是互换。
- 修复:距离在 Parivartana 段之前算出,交换重算结果生效;互换判定改为「定位星落在 7 宫主掌管的星座」。
- 验证:`tests/test_marriage_counting_geometry_only.py::test_real_parivartana_does_not_crash_and_conjunction_is_not_exchange`(真互换不崩、指数按交换后星座;合相不再判互换);旧代码在同一输入上复现 `UnboundLocalError`。
- 防复发:同上测试。
- 相关记录:BUG-1183。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1185 | 双重过运相位按 0 起数比 1 起数的相位号,整体错一宫;修正后结果顺序随 PYTHONHASHSEED 变化
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/jyotish_engine.py` `_check_pac`、`cmd_double_transit_pac`;全读 / 报告的 `double_transit_pac`,普通对话数据卡的双重过运结论(`scripts/consultation_native_layers.py`)。
- 现象:土星 7 宫相位判到第 8 宫,木星 5/9 判成 6/10,火星 4/8 判成 5/9。三张公开 AA 盘 × 12 宫的 D1 / 月亮上升层:578 个叶子条目里 413 个变化,36 行统计全部变化,同层双重过运从 0 处变为 D1 15 处、CL 6 处。
- 触发条件:任何一次双重过运计算。
- 根因:`((t_house - p_house + 12) % 12) == offset` 的宫距从 0 起,而相位号从 1 起。BUG-1060 / 1061 审计同一命令时只核对了目标取值与跨层配对,没有核对相位判定本身,所以没拦住;当时的 golden 是在错误相位下采的,等于把错一宫锁成了标准答案。上游 yinduzhanxing `2dd6062a`(09-24)已修。第二处:修正后同层重叠第一次出现,而重叠与跨层配对的循环遍历 Python 集合,结果列表顺序随 `PYTHONHASHSEED` 变(seed 1、2 下 golden 测试失败)。
- 修复:`42d1582f`(Claude 移植上游一行 `+ 1`);`db5a0509` 五处循环改为按名字排序遍历。罗计仍投 5/7/9(占星师清单第 7 题,未改)。
- 验证:`tests/test_double_transit_pac_aspect_count.py`(土 3/7/10、木 5/7/9、火 4/7/8 正反例);`tests/fixtures/double_transit_d1_cl_golden.json` 用测试自带 `--capture`(`PYTHONHASHSEED=0`、缓存 TTL 0)重采,seed 0/1/2/5 下都通过;`tests/test_double_transit_cross_layer_pairing.py` 三处断言按三栏更新(乔布斯 7 宫摘要改为 D1 层优先、第 9 宫反例换成乔布斯 9 宫、同宫命中集合重算)。
- 防复发:相位计数测试;golden 不再依赖哈希顺序。
- 相关记录:BUG-1060、BUG-1061、ERR-111。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1186 | API 格局列表截到前 10 条;已评估为空的格局模块被旧排盘预览「复活」
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/jyotish_api_server.py` `_detect_yogas`、`_chart_from_full_reading`。
- 现象:超过 10 条的格局被丢;`modules.yoga.yogas = []`(已评估、确实无格局)时取到 `chart.yogas` 的旧预览。
- 根因:`return yogas[:10]`;`chart.get('yogas') or yoga_module.get('yogas') or …` 按真值而不是「字段存在」取第一份列表,且预览排在完整模块前面。上游 yinduzhanxing `e9beae6b` 已修。
- 修复:`96767418`(Claude 移植):不截断;按「是 list」依次取 `yoga_module.yogas` → `yoga_module.detected_yogas` → `chart.yogas`。同文件另三处取格局的 `or` 写法(`_compute_thematic_report` 的 `full_modules.get('yoga') or collect(...)`、`enriched['yogas']` 两处拼接)是拼接或补算,不是「预览顶替已评估结果」,未改,列进进度记录。
- 验证:`tests/test_api_yoga_list_presence.py`(12 条全返回;空列表不回退;顺序)。两个方法都不读 handler 状态,测试以 unbound 方式调用,未新增 `JyotishAPIHandler.__new__`;growth contract 通过。
- 防复发:同上。
- 相关记录:BUG-1174、BUG-1175。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1187 | 月亮类 / 太阳类格局把罗睺计都算作「有星」,同一张盘同时出现「月亮孤立」与「月亮有星」
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`references/yoga_rules.json` `bvr_002/003/004`(Sunaphaa / Anaphaa / Duradhara)、`bvr_016/017/018`(Vesi / Vosi / Ubhayachara)、`kemadruma_yoga`;`scripts/yoga_engine.py` `RETIRED_RULE_IDS`;`scripts/yoga_expansion.py` `detect_kemadruma`(本来就只计五星)。
- 现象:泰勒、齐达内盘排盘预览有 Kemadruma,规则引擎同时判 Anaphaa 等;太阳第 2 宫只有计都也判 Vesi。
- 根因:规则只排除日或月,未排除罗计;`kemadruma_yoga` 计罗计而 `detect_kemadruma` 不计。经典定义只计火水木金土:BPHS 第 37 章第 7–10 颂(Sunapha / Anapha / Duradhara:「a Grah other than Sūrya」)、第 11–13 颂(Kemadruma)、第 38 章第 1 颂(Vesi / Vosi / Ubhayachari:「Barring Candr, if a Grah among Mangal etc.」),B.V. Raman《Three Hundred Important Combinations》第 2–5 条。PyJHora 4.8.7 `yoga.py` 的同名函数用 `SUN_TO_KETU`,计入罗计,且 Sunaphaa / Anaphaa 在太阳同宫时整格不成立——与经典不符,按决策 3 不跟。
- 修复:`f3ed9509`(Claude 移植上游 `2dd6062a` 六条规则 + 我方 Kemadruma 也不计罗计 + 六条同名重复规则退役);`0a4e6d0a` 补回移植时丢掉的六条规则 `combo_template_en`(英文版报告这几格没有组合说明),Kemadruma 组合文字改为「月亮1/2/12宫无火水木金土(太阳与罗计不计),且Lagna角宫仅月亮」。角宫解除条件未动。
- 验证:`tests/test_lunar_solar_yogas_count_five_planets.py`、`tests/test_lunar_solar_yoga_templates_kemadruma_nodes.py`(计都单独在月亮后一宫不成 Sunaphaa 且不解除 Kemadruma,规则版与 `detect_kemadruma` 一致;土星在同位则相反;英文组合文字齐全)。名人回测 golden 重生成后:泰勒、齐达内卡上的格局命中只有 Vosi / Ubhayachara,Anaphaa 不再命中,Kemadruma 不在任何一张卡上,卡面不再矛盾。
- 遗留:`chart.yogas` 预览(`_detect_yogas` → `yoga_expansion.detect_kemadruma`,无角宫解除)对泰勒、齐达内仍给 Kemadruma,且同名出现两条;规则版带角宫解除、对这两张盘不成立。两套 Kemadruma 定义的差别(角宫解除)是占星师清单待答项,未改。
- 相关记录:BUG-1174、BUG-1175。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1188 | Shadbala 四处计算错:Ayana 南北用未取模经度、时主在儒略日正午换日、平运动按周对齐且截断、Chesta 中点跨 0° 出错
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/shadbala.py` `_ayana_bala`、`_calendar_lords`、`_surya_mean_longitude`、`calc_chesta_bala_precise`;全读 / 报告 / 星盘页 / 数据卡的 Shadbala 时力、动力分量与排名。生时校正打分只用 Sthana / Drik / Naisargika 三个分量,不受影响(见下)。
- 现象:两张虚构盘改前改后:盘 A 金星 9.37 → 8.37 Rupa、火星 5.37 → 6.56,排名第 3、4 位互换;盘 B 金星 7.19 → 7.61,排名第 2、3 位互换(逐星表在进度记录)。V.P. Jain 公布值对照:容差内 34 → 36 项。
- 根因:见标题四条。上游 yinduzhanxing `0afa2780` 已修。
- 修复:`08376cf0`(Claude 移植算法修正与四条上游测试;存档 PyJHora Kala 对照测试按上游改法写三栏)。
- 验证:`tests/test_shadbala_ayana_wrap.py`、`test_shadbala_hora_civil_weekday.py`、`test_shadbala_mean_motion_continuity.py`、`test_chesta_circular_midpoint.py`;`tests/test_vp_jain_shadbala_benchmark.py` 三栏更新(火星 / 木星 / 土星 Chesta 进容差,金星 27.23 → 30.03 出容差)。生时校正:记忆化 golden v2 分数不变,v5 77 例评测与 `a18f8d4e` 逐字节相同,reported offset 900 例 0 例变化,故不升算法版本;因 `scripts/shadbala.py` 在冻结打分身份里,研究记录按 ERR-110 重新冻结(标签 `upstream_sync4_2026_10_02`)。
- 防复发:四条移植测试。
- 相关记录:BUG-1189、ERR-110、ERR-111。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1189 | Shadbala 太阳最低要求写成 5.0 Rupa,BPHS 是 6.5(390 Virupa)
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/shadbala.py` `MIN_REQUIRED`(我方代码里唯一一张最低要求表;`.get(pname, 5.0)` 的 5.0 是未知天体的默认值,vendored jyotishganit / dashaflow 的表已是 6.5);太阳的 `ishta_bala_pct` 与强弱档(数据卡 `shadbala.Sun.level`、报告 Shadbala 表)。
- 现象:太阳的「达标百分比」虚高约 30%,强弱档高一档。名人回测 9 位全部降一档(例:充足 → 略弱、强 → 充足、略弱 → 弱)。
- 根因:表抄错。BPHS 第 27 章(Evaluation of Strengths)第 32–33 颂:「390, 360, 300, 420, 390, 330 and 300 Virupas are the Shad Bal Pindas, needed for Sūrya etc. to be considered strong」。上游 yinduzhanxing `0a6696c5` 仍是 5.0,需告知上游。
- 修复:`09c0efc2`,代码注释引原颂。产品 2026-10-02 追加授权(原任务书写「不在本单」,已由产品改为本分支修)。
- 验证:`tests/test_shadbala_sun_minimum_bphs.py`(整表等于原颂 Virupa / 60;太阳 ishta 百分比按 6.5 计)。生时校正打分不读最低要求,分数不变。
- 防复发:同上测试。
- 相关记录:BUG-1188。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1190 | Arudha Lagna / Upapada 有三个并行算法,同一张盘给出不同星座
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/yogas_doshas.py`(全读 `modules.yogas_doshas`,接口响应与 PL9 导出包原样带出);`scripts/special_lagnas.py` 与全读 `modules.special_lagnas` 的 `Arudha_Lagna` / `Upapada_Lagna`(报告特殊上升点表、PL9 文字、`orchestrator_bridge`);`scripts/jyotish_engine.py` `_calc_transit_multi_reference` 的 AL 参考点。数据卡与生时校正本来就用 `jaimini.calc_arudha_padas`。
- 现象:虚构盘 1990-06-15 10:30 北京:jaimini AL 白羊、UL 处女;`yogas_doshas` 给 AL 狮子、UL 摩羯;过运多参考点表给 AL 双子。1990-06-15 00:30 北京(命主在第 4 位):jaimini AL 射手,`special_lagnas` 给双子。
- 根因:`yogas_doshas` 把「第几宫」当白羊起算的星座序号且无 1/7 例外;`special_lagnas` 的 1/7 例外「从落点数第 10」(上游口径),jaimini「从源宫数第 10」,命主在源宫第 4 / 10 位时两者不同;过运参考点把「上升度数 + 12 宫主度数」当 AL。
- 修复(决策 4:三处都可见,改为取 jaimini 的值;jaimini 现行口径不改,上游「从落点数」不移植):删除 `yogas_doshas.calc_arudha_lagna / calc_upapada_lagna` 与 `special_lagnas.calculate_arudha_lagna / calculate_upapada_lagna`(及其 CLI 参数);`yogas_doshas` 的两个字段、全读 `special_lagnas.Arudha_Lagna / Upapada_Lagna`、过运参考点的 AL 都从 `jaimini.calc_arudha_padas` 取。
- 验证:`tests/test_arudha_single_source.py`(10:30、00:30、02:30 三张虚构盘上四处 AL / UL 全等于 jaimini;并行函数已不存在)。
- 遗留:`special_lagnas` 的 A10(Karma Pada)仍用「从落点数」的例外,与 jaimini A10 在同类盘上不同;不在决策 4 范围,进度记录列为待产品决定。
- 相关记录:无。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1191 | 定位星链多星互换时硬选一颗「最终定位星」;Dasa 收敛写死无标定的概率
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/jyotish_engine.py` 全读 `final_dispositors`(PL9 定位星表)、`_calc_dasa_convergence`。
- 现象:火星金星互换时,表上只写其中一颗为最终定位星;报告出现「85-92%」「75-85%」等概率。
- 根因:取「最后一个不重复元素」当终点;概率是写死的经验值,没有标定依据。上游 yinduzhanxing `e9beae6b` 已修。
- 修复:`bc9b9f89`(Claude 移植 `final_dispositor_from_chain`:只有自循环才有终点,多星循环写 `Cycle: A -> B -> A`;`probability = None` 并加 `probability_basis`)。
- 验证:`tests/test_dispositor_cycle_resolution.py`。
- 防复发:同上。
- 相关记录:无。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
@@ -0,0 +1,180 @@
# PROGRESS · 上游同步第四轮(2026-10-02)
- 任务书:`docs/tasks/TASK-upstream-sync4-20261002.md`(`origin/staging` `a18f8d4e`);吸收 `TASK-yoga-lunar-node-consistency-20261002.md`(T5)。
- 执行方式:产品负责人要求子代理直接执行。Claude(PM)已按产品授权先移植 5 项上游代码(各一提交),子代理完成其余各项、测试、评测、回测与记录。只 commit,未 push。
- 分支 / worktree:`codex/upstream-sync4-20261002` / `.worktrees/upstream-sync4-20261002`,基线 `a18f8d4e`。
- 上游参照:`/workspace/yinduzhanxing` `origin/main` `0a6696c5`(只读,未复制上游文案)。
- BUG 编号:开工核对 `origin/staging` 最大号 BUG-1182;本单 BUG-1183~1191。
## 追加决策(产品 2026-10-02,任务书之后)
- **F3 本分支一起修**:太阳 Shadbala 最低要求 5.0 → 6.5 Rupa(BPHS 第 27 章第 32–33 颂,390 Virupa)。原任务书 §3 决策 5 与 §7 写「不在本单」,以本条为准。
## 提交
| 提交 | 内容 | BUG |
| --- | --- | --- |
| `42d1582f`(PM) | T2 双重过运相位 1 起数 + 新测试 | 1185 |
| `f3ed9509`(PM) | T5 月亮 / 太阳类格局只计五星、Kemadruma 不计罗计、6 条重复规则退役 + 测试 | 1187 |
| `96767418`(PM) | T4 格局列表不截断、按「是 list」取 | 1186 |
| `08376cf0`(PM) | T3 Shadbala 四处修正 + 4 条上游测试;存档 Kala 测试三栏 | 1188 |
| `bc9b9f89`(PM) | T7 定位星循环、概率改 None | 1191 |
| `ba97fd59` | T1 婚姻计数只留几何指数;Parivartana 崩溃与误判 | 1183、1184 |
| `3522e85d` | T4 回归测试 | 1186 |
| `db55aef1` | T6 AL / UL 只留 jaimini 一个来源 | 1190 |
| `09c0efc2` | F3 太阳最低要求 6.5 | 1189 |
| `0a4e6d0a` | T5 补回丢掉的英文组合文字;Kemadruma 文字;节点测试 | 1187 |
| `0176cb30` | V.P. Jain 基准与双重过运 golden 三栏更新 | 1185、1188 |
| `db5a0509` | 双重过运结果按名字排序(哈希顺序);跨层测试三栏 | 1185 |
| `5731b0af` | 研究记录按 ERR-110 重新冻结(不升算法版本) | 1188、1189 |
| `79efaf83` | 普通对话两份 golden 重生成 | — |
| `8ae4cef7` | 婚姻卡去掉第 7 宫「(对宫主)」重复行,守 12,000 字符预算 | 1185 |
| `26d4c204` | 确认门测试读新冻结记录 | — |
| `b53f56b6` | 新测试 ruff 修整 | — |
| (本提交) | 记录:BUG 历史、CHANGELOG、本文件、任务索引、回测第六轮 | — |
## T1 婚姻计数(BUG-1183 / 1184)
- 改动:`_interpret_marriage_count` 只写「关系几何指数 N:……不代表婚姻或关系的次数」与同星座 / 对冲两句位置描述;`_marriage_recommendations` 对所有指数给同一套三句中性说明;`note` 改几何口径;新增 `geometric_index`(`marriage_count` 兼容保留)。`_derived_marriage_evidence` 一律 `neutral`,details 只有 `geometric_index`。裁决「对象筛选」轴原来读 `details.d9_marriage_quality.quality_rating`,details 不再带它,这一行读法一并删除(多余入口删除)。
- 顺带修复(BUG-1184):距离在 Parivartana 段之前算出(旧代码有交换时 `UnboundLocalError`,模块缺失);互换判定改为「定位星落在 7 宫主掌管的星座」(旧判定实际是合相)。合相与定位星在一般盘里不罕见,旧代码在这类盘上整个模块丢失。
- 验收:`rg "再婚|段关系|第一段|终身关系|忠诚度" scripts/marriage_counting.py` 无命中。个人报告:`scripts/pl9_reader_export.py` 不渲染婚姻计数;全读的 PL9 导出包原样带 `modules.marriage_counting`,文字已是中性。
- **模型视图实测**:虚构盘 1990-06-15 10:30 北京,`/api/consultation_workflow` 婚恋路由(研究 runner 同一 handler,VedAstro 拦截)→ 婚恋主题证据 5 条(D1-7th-house、Spouse-status-yoga、DK-UL-Dasha timing、Romantic-activation、Relationship-formation),来源 `reused_chart_modules`、`full_reading_used: false`,**婚姻计数条目不出现**;经 `scripts/research/project_consult_model_context.ts`(`toModelOutput`)投影后的模型视图里也没有「Marriage-counting」「关系几何指数」。条目只在 `/api/thematic_report`(走全读)出现,已由新测试锁 `neutral` 与几何口径。
- 遗留(待产品):`_assess_d9_marriage_quality` 的评级文字(「婚姻稳定」「强烈建议婚前咨询」等)仍在全读原始模块与 PL9 导出包里,不进证据条目;是否同样只留结构事实,任务书未授权,未改。
## T2 双重过运(BUG-1185)
- 移植一行 `+ 1` 后,D1 / 月亮上升 golden(三张公开 AA 盘 × 12 宫)用测试自带 `--capture` 重采:578 个叶子条目里 413 个变化,36 行统计全部变化,同层双重过运 D1 0 → 15 处、CL 0 → 6 处。
- 重采后发现:同层重叠第一次出现,而 `cmd_double_transit_pac` 的重叠与跨层循环遍历集合,结果顺序随 `PYTHONHASHSEED` 变(seed 1、2 下 golden 测试失败,seed 3 通过)。五处循环改为排序遍历后重采,seed 0/1/2/5 都通过。
- `tests/test_double_transit_cross_layer_pairing.py` 三栏:
| 断言 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| 乔布斯 7 宫摘要 | 「⚠️ 跨层间接」开头 | 「⚠️ D1 层 Double Transit 激活」开头 | 木星 9 宫相位落到 D1 7 宫,D1 层自身成立,摘要 D1 优先;跨层条目仍在 |
| 第 9 宫不与无关 D9 目标配对 | 泰勒 9 宫(木星在 D1 9宫、土星在 Mars_D9) | 乔布斯 9 宫(土星在 D1 9宫、木星在 Mercury_D9) | 相位修正后泰勒那组命中不同时出现;换同结构公开盘,断言不变 |
| 同宫命中集合 | 泰勒 6、12;乔布斯 2、6、7 | 奥巴马 12;泰勒 3、5、7、9、11;乔布斯 1、3、5、7 | 相位从 1 数,命中宫整体平移 |
- BUG-1060 / 1061 为何没拦住:那两次只核对目标取值与跨层配对,D1 / CL golden 是在错误相位下采的,把错一宫锁成了标准答案。
- 数据卡:婚姻卡第 7 宫行因修正而增多,泰勒婚姻轮模型视图 11,984 → 12,040,超出 12,000 字符预算(`consult-condensed-checklist-20260927` size)。第 7 宫的事件宫主与对宫主是同一颗星,每个命中都重复两行;卡改为保留「(宫主)」行、去掉其「(对宫主)」重复行(卡上只放引擎原值,「nothing rewritten」合同仍成立),预算断言未改(BUG-1155 先例)。`consult-evidence-card-v2-20260927` 的 house_7 断言三栏写在测试注释。乔布斯婚姻轮 11,980,距预算 20 字,下次往卡上加字段需先看这一格。
## T3 Shadbala(BUG-1188)与 F3(BUG-1189)
- 可达路径:全读 `modules.shadbala`(报告、星盘页、数据卡 `shadbala.<星>.level`)都经 `scripts/shadbala.py` `calc_shadbala`;生时校正打分只用 `shadbala_sthana_drik_naisargika_*` 规则(`scripts/rectification/scoring_service.py`),T3 改的是 Kala / Chesta,F3 改的是最低要求,都不进打分。
- F3 位置:`scripts/shadbala.py` `MIN_REQUIRED` 是我方代码里**唯一**一张最低要求表;同文件 `MIN_REQUIRED.get(pname, 5.0)` 的 5.0 是未知天体默认值,不是 BPHS 表;`references/open_source_sources/jyotishganit/.../constants.py` `MIN_REQUIRED_SHADBALA` 与 `references/open_source_sources/dashaflow/shadbala.py` `REQUIRED_SHADBALA` 是 vendored 参照,已是 6.5,未动。代码注释引原颂。**上游 `0a6696c5` 仍是 5.0,需告知上游。**
- 两张虚构盘改前(`a18f8d4e`)/ 改后(T3 + F3),Rupa、排名、Kala、Chesta、达标百分比 / 档:
盘 A(1990-06-15 10:30 北京,lahiri):排名 日 水 金 木 土 火 月 → 日 水 木 金 土 火 月
| 星 | Rupa 前 → 后 | 排名 | Kala | Chesta | 达标 / 档 |
| --- | --- | --- | --- | --- | --- |
| 太阳 | 10.99 → 10.99 | 1 → 1 | 205.42 → 205.42 | 119.58 → 119.58 | 219.7% 极强 → 169.0% 极强 |
| 月亮 | 5.25 → 5.25 | 7 → 7 | 12.74 → 12.74 | −50.9 → −50.9 | 87.5% 略弱 → 不变 |
| 火星 | 5.37 → 6.56 | 6 → 6 | 7.83 → 78.69 | 31.39 → 31.61 | 107.5% 充足 → 131.1% 强 |
| 水星 | 9.40 → 9.38 | 2 → 2 | 不变 | 16.23 → 15.12 | 134.2% → 134.0% 强 |
| 木星 | 8.97 → 8.97 | 4 → 3 | 不变 | 8.29 → 7.99 | 138.0% → 137.9% 强 |
| 金星 | 9.37 → 8.37 | 3 → 4 | 293.83 → 233.83 | 21.08 → 20.74 | 170.4% → 152.1% 极强 |
| 土星 | 6.70 → 6.70 | 5 → 5 | 不变 | 50.63 → 50.93 | 134.0% → 134.1% 强 |
盘 B(1985-03-10 04:00 上海,lahiri):排名 火 日 金 土 木 水 月 → 火 金 日 土 木 水 月
| 星 | Rupa 前 → 后 | 排名 | Kala | Chesta | 达标 / 档 |
| --- | --- | --- | --- | --- | --- |
| 太阳 | 7.56 → 7.56 | 2 → 3 | 不变 | 不变 | 151.1% 极强 → 116.3% 充足(F3) |
| 月亮 | 5.38 → 5.38 | 7 → 7 | 不变 | 不变 | 89.7% 略弱 → 不变 |
| 火星 | 9.71 → 9.67 | 1 → 1 | 不变 | 16.70 → 14.85 | 194.1% → 193.5% 极强 |
| 水星 | 6.28 → 6.44 | 6 → 6 | 不变 | 18.07 → 27.28 | 89.8% → 92.0% 略弱 |
| 木星 | 6.69 → 6.73 | 5 → 5 | 不变 | 10.86 → 13.27 | 102.9% → 103.5% 充足 |
| 金星 | 7.19 → 7.61 | 3 → 2 | 85.87 → 107.75 | 49.61 → 52.45 | 130.8% → 138.3% 强 |
| 土星 | 7.14 → 7.18 | 4 → 4 | 不变 | 36.62 → 39.10 | 142.8% → 143.6% 强 |
(排名按达标百分比排,所以盘 B 太阳 Rupa 不变、F3 后排名下降。月亮 Chesta 为负是既有行为,不在本单。)
- `tests/test_vp_jain_shadbala_benchmark.py` 三栏:容差内 34 → 36、变体 8 → 6;Chesta 火星 19.25 → 21.08、木星 11.23 → 8.86、土星 6.78 → 4.34 进入 ±1 Virupa,金星 27.23 → 30.03 离开(公布 28.18),水星 18.08 → 27.14 仍差 1.62。
- 名人回测 9 位的太阳档全部降一档(例:乔布斯、奥巴马、泰勒、嘉兰 充足 → 略弱;梦露、卡罗、布什、齐达内 强 → 充足;琵雅芙 略弱 → 弱)。
## T4 格局列表(BUG-1186)
- 新测试 `tests/test_api_yoga_list_presence.py`:12 条全返回;`yoga_module.yogas = []` 不回退到 `chart.yogas`;`detected_yogas` 第二、`chart.yogas` 最后。两个方法不读 handler 状态,以 unbound 方式调用,未新增 `JyotishAPIHandler.__new__`;growth contract 通过。
- 同文件其余取格局列表的 `or` 写法(未改,理由:都是补算或拼接,不是「旧预览顶替已评估结果」):`_compute_thematic_report` `yogas = full_modules.get('yoga') or collect('yogas', …)`(模块为空才补算);`enriched['yogas'] = chart.get('yogas') or []` 后再拼 `extended_yogas` / `yogas.yogas`(两段相加)。
- 数据卡:格局变多没有触发 BUG-1175 的上限;卡长变化见 T2。
## T5 月亮 / 太阳类格局(BUG-1187)
- 出处核对:BPHS 第 37 章第 7–10 颂(Sunaph / Anaph / Duradhar:「a Grah other than Sūrya」)、第 11–13 颂(Kema Drum:「Excluding Sūrya, should there be no Grah with Candr, or in the 2nd and/or 12th from Candr, or in a Kendr from Lagn」)、第 38 章第 1 颂(Vesi / Vosi / Ubhayachari:「Barring Candr, if a Grah among Mangal etc.」——明说「火星等」,即五星);B.V. Raman《Three Hundred Important Combinations》第 2–5 条。与决策 3 一致,未停。
- PyJHora 4.8.7(本机 `jhora/horoscope/chart/yoga.py`):`sunaphaa_yoga` / `anaphaa_yoga` 统计包括罗计在内的所有星,且太阳在该宫时整格不成立;`kemadruma_yoga` 用 `SUN_TO_KETU`(计罗计);`vesi_yoga` / `vosi_yoga` 同样计罗计。与经典口径不同,按决策 3 不跟。
- 退役规则(`scripts/yoga_engine.py` `RETIRED_RULE_IDS`,规则留在文件里、不参与检测):`voshi_yoga`、`veshi_yoga`、`ubhayachari_yoga`、`anapha_yoga`、`sunapha_yoga`、`durudhura_yoga`(与 `bvr_002/003/004/016/017/018` 同名重复)。上游另外 4 条退役不在本单范围,未取。
- 移植遗漏补修:PM 移植时六条 BVR 规则的 `combo_template_en` 丢了(英文版这几格没有组合说明),已补回;Kemadruma 中文 / 英文组合文字改为写明「太阳与罗计不计」。
- **与上游 Kemadruma 的差异(告知上游)**:一,上游 `kemadruma_yoga` 规则仍计罗计(`ky1` 只允许日月),我方只计五星;二,我方 `yoga_expansion.detect_kemadruma` 只看月亮 2 / 12 宫、无角宫解除,规则版看 1 / 2 / 12 宫且有「角宫只有月亮」条件,两处定义不同(角宫解除条件是占星师清单题,本单未动)。
- 卡面核对(名人回测 golden):泰勒、齐达内的格局命中只剩 Vosi / Ubhayachara,Anaphaa 不再命中,Kemadruma 不在任何一张卡上——**卡面不再同时出现 Kemadruma 与 Anaphaa**。残留:`chart.yogas` 预览(`_detect_yogas` → `detect_kemadruma`,无角宫解除)对这两张盘仍给 Kemadruma,而且同名两条(`extended` 一条、无类别一条);预览不进卡。卡罗的 Sunaphaa 由不成立变为成立(旧规则「太阳在月亮第 2 宫则整格不成立」,新规则太阳不计、有五星即成立,符合 BPHS 原文)。
## T6 Arudha 单一来源(BUG-1190)
- 可见面排查:`yogas_doshas` 的 AL / UL 在全读 `modules.yogas_doshas`(接口响应、PL9 导出包 `advanced_systems.yogas_doshas`)里原样可见;另查出两个并行来源也可见:`special_lagnas` 的 `Arudha_Lagna` / `Upapada_Lagna`(报告特殊上升点表、PL9 文字多处、`orchestrator_bridge`),过运多参考点表的 AL。数据卡(`arudha_padas.padas`)与生时校正本来就用 jaimini。
- 处理(决策 4):三处都改为取 `jaimini.calc_arudha_padas`;`yogas_doshas.calc_arudha_lagna / calc_upapada_lagna`、`special_lagnas.calculate_arudha_lagna / calculate_upapada_lagna`(及 CLI 参数)删除。jaimini 的「从源宫数」不变,上游「从落点数」未移植。
- 两张虚构盘(1990-06-15 10:30 北京;1985-03-10 04:00 上海):jaimini AL 白羊 / 处女、UL 处女 / 宝瓶;改前 `yogas_doshas` AL 狮子 / 双鱼、UL 摩羯 / 狮子,过运参考点 AL 双子 / 天秤;改后四处全等。另用 1990-06-15 00:30、02:30(命主 / 12 宫主在源宫第 4 位,旧 `special_lagnas` 例外数法会给双子而 jaimini 给射手)锁住 `special_lagnas`。
- 遗留(待产品):`special_lagnas` 的 A10(Karma Pada)仍用「从落点数」的例外,与 jaimini A10 在同类盘上不同;不在决策 4(只说 AL / UL)范围。
## T7(BUG-1191)
- PM 已移植;`rg "85-92%|75-85%|50-65%|\+15-20%" scripts` 无命中。报告 golden 无需重生成(报告模板不渲染这两处字段的变化,相关测试全过)。
## T8 生时校正影响
- **分数没有变,不升算法版本**(决策 6 只在分数变化时升):
- `tests/test_rectification_engine_memoization.py` 全文件通过;与 v2 golden 逐字段比:候选分数、决策回执全同,只有 `feature_hash` 与三个候选的 `fingerprints.shadbala` / `static` 变(Shadbala 数值变了,指纹随之变;打分只读 Sthana / Drik / Naisargika)。
- v5 77 例评测(`python3 scripts/research/holdout_v5_baseline.py --dataset v5`,`PYTHONHASHSEED=0`、缓存 TTL 0,各在一次性 worktree):`a18f8d4e`、PM 移植后 `bc9b9f89`、本分支全部引擎改动后 `0176cb30` 三次的 sweep / cluster_width / futile_collect 结果逐字节相同(合并文件只差耗时)。`0176cb30` 之后的引擎改动只有双重过运排序(`db5a0509`),不进打分。
- reported offset 900 例:0 例变化;sealed holdout 20 例:逐条相同。
- **研究记录按 ERR-110 重新冻结**:`scripts/shadbala.py` 在 dataset `frozen_scoring.files` 里,字节一变完整性门禁 13 条失败(快速门里的 `test_rectification_validation_integrity_gate.py` 等)。按先例新标签 `upstream_sync4_2026_10_02`:先 `--freeze` 再重放,`functional_v2` 记录移到 `previous_*`、逐字节保留;`references/rectification_sealed_holdout.v1.json` 更新当前身份;前端 `rectification-confirmation-gate.test.ts` 读新路径(三栏写在测试里)。
- 历史 Case 能否打开(BUG-621):本单未升算法版本、未改 Skill 版本,历史结果的身份与读取路径不变,不需要只读回退;未做浏览器级验证(无登录态),列入真机清单可选项。
- 生时校正测试:Python 全量里所有 `rectification` 相关测试与基线同名(见门禁);前端 `rectification-*` 测试全过。
| 指标(v5 77 例) | ±10 | ±30 | ±60 |
| --- | --- | --- | --- |
| 先验头名 前 / 后 | 0.1818 / 0.1818 | 0.0909 / 0.0909 | 0.0779 / 0.0779 |
| 六题回放头名 前 / 后 | 0.6364 / 0.6364 | 0.4935 / 0.4935 | 0.3117 / 0.3117 |
| 线上区间回放头名 前 / 后 | 0.6623 / 0.6623 | 0.5584 / 0.5584 | 0.4026 / 0.4026 |
| 覆盖 前 / 后 | 0.987 / 0.987 | 0.987 / 0.987 | 0.987 / 0.987 |
| 中位宽度(线上回放)前 / 后 | 13 / 13 | 33 / 33 | 65 / 65 |
红线 5(任一格下降 > 1 pp)未触发,不需要逐项回退复测。
## 普通对话 golden 与回测
- `frontend/tests/fixtures/consult-evidence-card-golden.json`、`consult-biography-backtest-golden.json` 用 capture 脚本各跑两次,逐字节相同。与 `a18f8d4e` 的差异只在:格局命中与名字(T5)、双重过运结论 / 活跃宫 / 第 7 宫摘要(T2 与排序)、太阳 Shadbala 最低要求 / 百分比 / 档(F3)。
- 名人回测第六轮:`docs/testing/consult-affliction-backtest-20261001.md`「改动后(第六轮,上游同步四)」。回测跑的是排序修正之前那一版 golden(只差双重过运结论的先后顺序)与去重之前的婚姻卡(第 7 宫多一行重复),内容事实相同。
## 门禁
| 项 | 结果 |
| --- | --- |
| ruff(门禁清单 5 个文件)、`py_compile scripts/*.py jyotish_vedic/*.py mcp_server.py`、隐私扫描 | 通过 |
| `run_quality_gate.py --profile quick --skip-yoga-logic --skip-frontend-runtime` | failures [],exit 0 |
| Python 全量(`pytest tests -n 4`) | 62 条失败,全部在开工前基线 67 条名单内;基线里 5 条 prashna 产物测试本次通过(测试自己重写 `references/oracle/prashna_*` 产物所致,产物已还原、未提交) |
| `tsc --noEmit` | 0 |
| `npm run lint` | 0 error(126 warning) |
| `npm test` | tests 4,921(基线 4,911)、fail 24、cancelled 0;失败名单与基线 24 条逐条相同 |
| `next build` | 通过,`/` 为 `○ Static`;本单改的前端代码只有服务端数据卡(`consultation-evidence-card.ts`),未量首屏 gzip |
## 上游 `0a6696c5` 之后的提交(未取,原因)
| 提交 | 内容 | 未取原因 |
| --- | --- | --- |
| `3bc2908a`、`6f638ea2`、`4d2630ae` | 上游 API 新增「共享引擎运行合同」端点与省略输入报告 | 上游自身的 API 合同,我方产品不调用;且会给 `jyotish_api_server.py` 加处理分支(增长冻结) |
| `b1d721ca` | 解读缓存失效测试 | 上游缓存机制,我方没有对应结构 |
| `190c256a` | 上游阻塞优化审计文档 | 纯上游文档 |
| `b40c7fde`、`28f41912` | 诅咒格局(curse yoga)健康措辞收边 + 测试 | 任务书 §7 已归「引擎硬 bug」任务书(`curse_yoga_detector` 的「过早死亡风险」措辞),不在本单 |
| `acdc3551` | Narayana 默认改为「有出处约束」的 profile | 占星师清单第 2 题(Narayana 起法),任务书硬红线 3 不改 |
| `197672e3` | 8 星制 Chara Karaka 罗睺度数反算 | 任务书 §7 已归「引擎硬 bug」任务书(8 星制 PiK 排位与罗睺反算) |
## 告知上游
1. 太阳 Shadbala 最低要求仍是 5.0(`scripts/shadbala.py` `MIN_REQUIRED`),BPHS 第 27 章第 32–33 颂为 390 Virupa = 6.5 Rupa。
2. `kemadruma_yoga` 规则仍计罗计;经典(BPHS 第 37 章第 11–13 颂、Raman 第 5 条)只计五星。
3. 我方 `special_lagnas` 曾与上游同为「从落点数」的 1/7 例外,已统一到 jaimini「从源宫数」(AL / UL);A10 未改。
## 开放问题(交产品)
1. 事业「不靠曝光」类读偏:第六轮 9 / 18,第五轮 5 / 18(见回测文档);与本单改动无可证明的关联,但太阳档 9 位全降一档,建议产品下一单从卡上「落 6 / 8 / 12」字段着手(第五轮读出来的第 2 条)。
2. D9 婚姻质量评级文字是否也只留结构事实(T1 遗留)。
3. `special_lagnas` A10 的例外数法(T6 遗留)。
4. 两套 Kemadruma 定义(预览无角宫解除、规则有)与预览里同名两条(T5 遗留)。
5. 乔布斯婚姻轮模型视图 11,980 / 12,000(T2)。
+2 -2
View File
@@ -409,5 +409,5 @@
| `TASK-consult-no-presupposition-and-backtest-20261001.md` | `PROGRESS-consult-no-presupposition-backtest-20261001.md` | 三单之三:写作形状去掉「对象在场」预设、受冲时请用户确认、删被照抄的「逆行」示例、用户纠正时不辩护;建立名人生平回测作为普通对话提示词改动的固定验收(预留 BUG-1167~1172) | **已实现待验收**(Claude 子代理直接执行,BUG-1164~1168;未推送);基于第二单分支 + staging;名人回测已跑改动后:严重冲突 39→19、禁句 7→0、纠正追问 8/8,对照组误报 1→15;产品 10-02 改「迹象 + 范围」口径(`066558a6`)后第二轮:严重 15/72、误报 6(轻)、排查 5 份 8/10、新增名人严重 6/32、事业 12/18,修订通过线仍只有禁句达到;含产品 10-02 年运 / 时运字数口径(第二单 blocker 解除) | 分支 `codex/consult-no-presupposition-backtest-20261001` |
| `TASK-consult-career-yoga-functional-20261002.md` | `PROGRESS-consult-career-yoga-functional-20261002.md` | 三单回测遗留三项:事业题按星的本性看行业、按名声信号看公众/幕后;开场守「只说迹象」;功能吉凶改 BPHS 第 34 章对照表(推翻 v1 公式,命主不再一律 yogakaraka);瑜伽检测不跳过;大格局以「传统格局,本站未验证」上卡(产品授权放宽 §8.4 仅限此栏)(BUG-1174 起) | **已实现待验收**(Claude 子代理直接执行,BUG-1174~1177;未推送);产品 10-02 二次决定后:yogakaraka 窄修已合入(生时校正评测逐项不变),BPHS 全表留 T1 分支待顾问;事业改「不猜行业,问用户」;第四轮回测请问一句 18/18 达到、行业 / 类型冲突 9/18 与严重 12/72 未达;上游 e9beae6b 移植因权限未做 | 分支 `codex/consult-career-yoga-functional-20261002` |
| —(产品要求子代理直接执行,无任务书;决策见进度记录) | `PROGRESS-consult-upstream-functional-v2-20261002.md` | 上游功能吉凶 profile v2(`57782aea`)收尾:生时校正算法身份升 scoring-10、「日期窗合同」改按代数判断(新迁移只改函数体)、记忆化 golden 新增 v2、校正研究记录重新冻结并把 `functional_benefics.py` 补进冻结身份;普通对话 golden 重生成;第四轮残留(事业落宫翻成幕后、受冲母亲写成在管、逆行写成拖、两处请求);第五轮名人回测(BUG-1180~1182,BUG-1158 → resolved) | **已实现待验收**(Claude 子代理直接执行;未推送):门禁 tsc 0 / lint 0 error / npm test 失败名单与基线同名 / test:db 与基线同名 / build `/` Static;第五轮:父母严重冲突 3 → 0、禁句 0、每份一问,事业类型冲突 5/18 与对照组轻度误报 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 | 分支 `codex/yoga-lunar-node-consistency-20261002` |
| `TASK-upstream-sync4-20261002.md` | `PROGRESS-upstream-sync4-20261002.md` | 上游同步第四轮(对照 yinduzhanxing `0a6696c5`):婚姻计数删关系次数断语、双重过运相位错一宫、Shadbala 四处计算错、格局列表截断与空回退、月亮/太阳类格局只计五星(吸收月亮单)、Arudha 只留 jaimini 一个来源、定位星循环与未标定概率;BUG 从 1183 起 | **待领取** | 分支 `codex/upstream-sync4-20261002` |
| `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` |
@@ -439,6 +439,74 @@ Bill Clinton 不在仓库案例库里,没有加;「父亲缺席」由 Obama
4. **功能吉凶 v2 上卡后没有出现新的读法问题**:答案里引用功能吉凶的句子按新分组写(例:天蝎上升「太阳是功能吉星」),没有拿功能吉星抵消受冲。
5. 成本:72 份墙钟 3,965 s(含 4 份网络超时各约 2,600 s,并发 4),补跑 4 份 102 s;成功份单份中位 65 s、最长 127 s;输入 3,886,002 + 259,413 token(缓存约 86%),输出 1,022,726 + 54,358(推理 933,005 + 48,785);查卡 9 次。
## 改动后(第六轮,上游同步四,2026-10-02)
- 进度:`docs/tasks/PROGRESS-upstream-sync4-20261002.md`(任务书 `TASK-upstream-sync4-20261002.md`)。本轮没有改提示词或清单,改的是引擎与数据卡:月亮 / 太阳类格局只计五星(BUG-1187)、双重过运相位从 1 数(BUG-1185)、Shadbala 四处修正与太阳最低要求 6.5(BUG-1188 / 1189)、婚姻计数只留几何指数(BUG-1183,普通对话卡上本来没有这一条)。
- golden:两份都用 capture 脚本重新生成,两次逐字节相同。卡上可见的变化:格局命中(例:泰勒、齐达内 Anaphaa 不再命中,卡罗 Sunaphaa 成立)、双重过运结论与活跃宫、9 位太阳 Shadbala 档全部降一档。回测用的是双重过运排序修正之前、婚姻卡第 7 宫去重之前的那一版(只差结论先后与一行重复,事实相同)。
- 命令同第五轮(`--repeats 2 --concurrency 4 --correction-domain parents,career --correction … --correction-texts …`);72 份 + 8 份父母纠正 + 6 份事业追问,失败 0,无补跑。
- 评分:Claude 逐份阅读全部 86 份,口径同第五轮。
| 名人 | 父母 r1 / r2 | 婚姻 r1 / r2 | 健康 r1 / r2 | 事业 r1 / r2 |
| --- | --- | --- | --- | --- |
| Steve Jobs | 通过 / 通过 | 通过 / 通过 | 通过 / 通过(弱) | 严重冲突 / 严重冲突 |
| Barack Obama | 通过(弱) / 通过 | 通过 / 通过 | 通过 / 误报(轻) | 严重冲突 / 通过(弱) |
| Elizabeth Taylor | 通过 / 通过 | 通过 / 通过(弱) | 读反(轻) / 通过(弱) | 严重冲突 / 通过(弱) |
| Marilyn Monroe | 通过 / 通过 | 通过(弱) / 通过(弱) | 通过 / 通过 | 严重冲突 / 严重冲突 |
| Judy Garland | 通过 / 通过 | 通过 / 通过 | 通过(弱) / 通过 | 严重冲突 / 通过 |
| Édith Piaf | 通过(弱) / 通过(弱) | 通过 / 通过 | 通过 / 通过(弱) | 通过(弱) / 通过 |
| Frida Kahlo | 通过 / 通过 | 通过 / 通过 | 通过 / 读反(轻) | 通过(弱) / 通过(弱) |
| George W. Bush(对照) | 通过 / 误报(轻) | 误报(轻) / 通过 | 通过 / 误报(轻) | 严重冲突 / 通过(弱) |
| Zinedine Zidane(对照) | 误报(轻) / 通过 | 通过(弱) / 通过 | 误报(轻) / 误报(轻) | 通过(弱) / 严重冲突 |
事业逐份(行业 / 类型冲突原句):
| 名人 | r1 | r2 |
| --- | --- | --- |
| Steve Jobs | 「高度不由曝光决定」「公开落地、被外人看见:这一层最贵…来得晚」;有问 | 「名分和认可这一环…来得偏晚」「上限卡在名分和认可上」;有问 |
| Barack Obama | 「重心在自己产出的东西上…不是别人给的头衔」(按 5 宫猜成创作 / 教学类);有问 | 无(「替别人收尾」作为一种可能、「比同行走得晚」记弱;AL 落 10 宫读成被看见有落点);只问「是哪一种」+「按你的实际工作再看」,没有直接问做哪一行 |
| Elizabeth Taylor | 「落地:签下来、被看见这一类要往后等」;有问 | 无(「自己把一件事做深,再靠合作放大」记弱);有问 |
| Marilyn Monroe | 「事业主线是经手具体的事、跟别人手上的资源打交道」「分量…一件一件经手攒出来的」;有问 | 「是靠接住别人不愿碰的事换来的」「高度不体现在名声先到」;有问 |
| Judy Garland | 「把难缠的事接过来…不是靠一次机会跳上去」「从别人不愿碰的事你做完里长出来」;有问 | 无;有问 |
| Édith Piaf | 无(「名头是慢慢加上去的」记弱;行动「给对方方案、报价」预设职业形态);有问 | 无(「撑力的重心在位置和名声上」);有问 |
| Frida Kahlo | 无(「推力来自持续经营,不来自一次跃升」记弱);有问 | 无(「客户、渠道、作品…不是一次性的认可」记弱);有问 |
| George W. Bush | 「名分比实干来得晚」「不是靠一次亮相」「被看见:最慢的一层」;有问 | 无(「落点在进账和议价上」记弱;「被看见这一块不会缺」);有问 |
| Zinedine Zidane | 无(「别人认你…不是从场合上来;也可能只是你不太往外说」作范围,记弱);有问 | 「吃饭的本事落在说得清、写得清、算得清、教得会这一路」「名头、位置、被看见…最慢」;有问 |
格子说明:
- 父母:18 份没有一份把受冲的一方写成「在管、在安排、近」;奥巴马 r1 结尾「父亲这条线的支撑信号比母亲那条更集中一些」偏向错的一边,记弱;琵雅芙两份的行动「写下他们原话一句」「挑一件你正在替父母兜着的事」预设父母在场,记弱(第五轮同类残留)。布什 r2「妈妈这条的信号是近处的摩擦多…一个偏向靠近了容易磨」、齐达内 r1「哪一块是真断的、哪一块只是表达不顺」,记误报(轻)。
- 婚姻:布什 r1「靠近不难,后来推进的节奏往往比事情本身慢」(相识三个月成婚),记误报(轻);梦露两份「心动来得晚、能接触的人不多」「婚姻这条线也偏慢」作开场结论,记弱。
- 健康:泰勒 r1「压力不在会不会出大事」「体力的储备在深层是够的」「要的不是担心,是管理」,卡罗 r2「论力气这两颗不弱」「偏攒出来的…而不是突然一下」(车祸、小儿麻痹),记读反(轻);奥巴马 r2「信号出来得晚…等你感觉到的时候已经持续一段时间」、布什 r2「睡够、有留白的时候,你的状态差别很大」、齐达内 r1「累过之后不容易马上缓过来」、齐达内 r2「节奏偏慢、恢复要靠时间的底色」直陈现实,记误报(轻)(奥巴马健康是对照项,不计入 Bush / Zidane 对照组)。
- 请求数:72 份每份恰好一处请用户说一句;事业 18 份里 17 份直接问做哪一行(奥巴马 r2 只问「是哪一种」)。
### 纠正追问与事业追问(第六轮)
- 父母纠正 8 / 8:先认下、点名上一轮读偏的那句(多是把「人在、只是话少」与「不在身边」并列得一样重,或把宫主有力当成支撑)、只列对得上的几条、写明盘分不出「人不在」还是「人在但不管」。残留偏重同第五轮:奥巴马 r2「这条线在位置上就不接上」,嘉兰两份「盘上并没有给你留出余地」「这条线本来就偏在缺席这一边」,琵雅芙 r1「计都…断开、不介入、各过各的最直接的信号」。
- 事业追问 6 / 6 按真实职业读助力、阻力、时间,没有「盘早就显示」。齐达内 r1 仍写「别人认你认的是你做出来的东西,不是在场合上认识你」(运动员语境下偏),r2「行业的评价比你的实力慢」,记录不扣分。
### 合计:第五轮 → 第六轮
| 项 | 第五轮 | 第六轮 | 通过线 | 达到 |
| --- | --- | --- | --- | --- |
| 事业行业 / 类型与生平冲突 | 5 / 18 | **9 / 18** | ≤ 1 / 18 | **否** |
| 事业段末问一句 | 17 / 18 | **17 / 18** | ≥ 16 / 18 | 是 |
| 严重冲突总数 | 5 / 72 | **9 / 72**(全在事业) | ≤ 5 / 72 | **否** |
| 父母严重冲突 | 0 | **0** | — | — |
| 对照组严重误报(事业以外) | 0 | **0** | 0 | 是 |
| 对照组轻度误报(Bush、Zidane) | 4 | **6**(Bush 父母、婚姻、健康各 1;Zidane 父母 1、健康 2) | ≤ 2 | **否** |
| 读反 | 3(轻) | **2(轻,都在健康)** | — | — |
| 禁句 | 0 | **0** | 0 | 是 |
| 全篇两处请求 | 0 | **0** | 每份一处 | 是 |
| 父母纠正追问 | 8 / 8 | **8 / 8** | — | — |
| 事业追问按真实职业读 | 6 / 6 | **6 / 6** | — | — |
### 读出来的东西(第六轮)
1. **事业类型冲突 5 → 9 / 18,回到第四轮水平**:推法与第五轮第 2 条相同——10 宫主或 A10 落 6 / 8 / 12 →「经手、绕路、来得晚」→「名分 / 被看见最慢」「不靠曝光」,同义词又换了一批(「高度不由曝光决定」「名分比实干来得晚」「接住别人不愿碰的事」)。本轮没有改提示词与清单;卡上与事业相关的变化只有格局命中、双重过运结论和太阳 Shadbala 档(9 位全降一档)。核对 18 份事业答案:明说「太阳偏弱」的 8 份里只有 3 份是严重冲突,严重冲突的 9 份里只有 3 份提到太阳偏弱,看不出太阳降档是主因;两次重复的样本量下 5 ↔ 9 落在同一推法的波动范围内,不能归因到本单。结论同第五轮:要压到 ≤ 1,需要从卡上「落 6 / 8 / 12」对公众性的暗示着手,或由产品定事业首段固定为「力量 / 阻力 / 时间」三个小标题。
2. **对照组轻度误报 4 → 6**:都是把「迹象」写成一句现实结论(恢复慢、推进慢、哪一块真断),与第五轮第 3 条同类;健康对照项占 3 份。
3. **卡面格局不再自相矛盾**:泰勒、齐达内卡上已没有 Kemadruma 与 Anaphaa 并存;答案里引用格局的句子只用命中的 Vosi / Ubhayachara,没有出现「月亮孤立」类描述。
4. 父母题、请求数、禁句、纠正追问与第五轮持平。
5. 成本:72 份墙钟 1,320 s(并发 4),单份中位 57 s、最长 140 s;输入 4,095,439 token(缓存约 89%),输出 1,030,439(推理 939,077);查卡 10 次。
## 真机清单(给产品,staging 部署后)
每条都在新会话里问,档案不填性别;看三件事(10-02 口径):受冲时是不是写成「压力 / 距离的迹象 + 现实里可能的范围」而不是替你下结论、是不是只请你说一次实际情况、有没有预设处境。