docs: upstream sync 5 records — BUG-1192..1198, CHANGELOG, progress, backtest round 7

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-03 01:06:29 +08:00
co-authored by Claude Opus 5.5
parent 90dcafe71d
commit 8c55d4dcfb
5 changed files with 318 additions and 1 deletions
+10
View File
@@ -1,5 +1,15 @@
# 印度占星 Skill 更新日志
## 2026-10-02 — 生时校正至少要 4 件有年月的经历、覆盖 3 个方面才给时间范围;上游同步第五轮(燃烧、诅咒格措辞、Badhaka 等)
- 生时校正:以前 3 件有年月的经历、2 个方面(例如上学和工作)就会给出生时间范围;现在至少要 4 件、覆盖 3 个方面(例如再加一件搬家或感情)才开始给范围和选择题。还不够时,提示会写清楚还差几件、还缺哪类(例:「再来两件记得大概年月的事,其中至少一件不是上学或工作的,就能开始筛」),不再一律写「再来一件」(BUG-1193)。打分方法不变,算法版本不变;以前的校正记录照常打开。
- 行星燃烧(离太阳太近)的判断全站统一:月亮也判,逆行的行星用更小的容许度(例如逆行金星 8°),水星顺行由 12° 改为 14°(BUG-1195)。水星燃烧时,「日水合(Budha-Aditya)」格局仍会列出,但标为有条件、不再写成完整的吉格(BUG-1198)。
- 凶星合相(诅咒格)与 Rashi Tulya 的说明不再出现「过早死亡风险」「子女早夭」「母亲早逝」这类断语;亡灵格的「障碍宫」按上升星座取第 11 / 9 / 7 宫,不再一律算第 11 宫(BUG-1192 / 1197)。
- 8 星制 Chara Karaka 里罗睺按 30° 减度数排位(BUG-1194);Yogini 大运按出生月宿起运(BUG-1196);八分法新增三方净化、单宫主净化两层计算,原始分保留,暂不进报告与卡片。
- Narayana 默认版本(上游只改了命令行默认值)本轮不搬,产品直接调用的函数不受影响。
- 名人回测第七轮:父母题、禁句、纠正追问持平;事业题「不靠曝光」类读偏 9 → 13 / 18,未达通过线(8 位名人的卡与第六轮相同,属模型波动,与本轮改动无可证明的关联)。
- Skill 版本不变;不改数据库结构。
## 2026-10-02 — 上游同步第四轮:婚姻计数不再断言几段婚姻;双重过运相位、Shadbala、月亮类格局、Arudha 改正
- 婚姻计数法只给「关系几何指数」,明说它不代表婚姻或关系的次数;不再出现「一次终身关系」「可能再婚」「第一段关系质量较好」这类断语,婚恋证据里这一条不再记为利好(BUG-1183)。某些盘上这一项原来整段算不出来,已修(BUG-1184)。
+92
View File
@@ -16042,3 +16042,95 @@
- 防复发:同上。
- 相关记录:无。
- 修复版本:`codex/upstream-sync4-20261002`(未推送)。
## BUG-1192 | 亡灵格(Preta Yoga)把第 11 宫写死为 Badhaka 宫;诅咒格「家族影响」与一条格局效果写早夭 / 早逝
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/curse_yoga_detector.py`(`/api/yogas` 凶星合相层、健康主题证据「Curse-yoga-risk」的严重度);`references/yoga_rules.json` 母亲不利格的效果列表(格局卡、报告)。
- 现象:同一引擎里 Badhaka 宫有两套:`yoga_engine.YogaContext.is_badhaka` 按动 / 定 / 变取 11 / 9 / 7,`curse_yoga_detector` 的 Preta Yoga 加重宫位写死 `[8, 11, 6]` 并注释「11宫=Badhaka」;固定、双体上升的盘被按错误的宫位加重。诅咒格「家族影响」写「子女早夭」「家族血脉停止」,母亲不利格效果第三条是「母亲早逝」。
- 根因:诅咒格表是早期照讲稿抄的,没有调用引擎已有的 Badhaka 规则;措辞未经「不作确定性死亡预测」边界审查。上游 `b40c7fde`/`28f41912` 只改了 meaning 一列(本仓 `533c3a30`,见 BUG-1197)。
- 修复:`7fb165ec`。`yoga_engine.badhaka_house()` 成为唯一定义(变动 11、固定 9、双体 7、上升未知返回 None),`is_badhaka` 与诅咒格都调用它;Preta 两条的加重宫位改为占位符按上升展开,D9 用 D9 上升,上升未知时不加重。「家族影响」改为责任 / 传承主题并写明不能据此断定;母亲不利格删去「母亲早逝 / Early loss of mother」。
- 验证:`tests/test_curse_yoga_badhaka_house.py`(12 个上升全取对、上升未知不加重、两份诅咒格源码与实际输出无早夭 / 早逝 / 死亡风险字样);上游 `tests/test_badhaka_rules.py`(`765ff66c`)。前端两份报告阅读 fixture(`report-reader-main-fictional*.json`)是历史引擎输出,仍含「母亲早逝」,未重采。
- 防复发:新测试按正则扫源码与输出;同一规则只留一个函数。
- 相关记录:BUG-1197。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
## BUG-1193 | 生时校正交付门槛三处写 3 件 2 域、政策文件写 4 件 3 域(产品 10-02 定为 4 件 3 域)
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:生时校正何时出时间范围卡、何时开始出选择题;Python 决策回执 `gates.event_quality` / `domain_diversity`;采集轮「还差」文案。
- 现象:`references/rectification_policy.v1.json` 写 `minConfirmationEvents 4 / minConfirmationDomains 3`,但 `core/rectification-decision.ts` `MIN_STANDALONE_DATED_*`、`v9/evidence-model.ts` `MIN_ACCEPTANCE_*`、`core/types.ts` `MIN_TRAINING_EVENTS` 与 `scripts/rectification/decision_policy.py` `MIN_ACCEPTANCE_*` 都是 3 件 / 2 域(后者只数训练件)。3 件事、2 个领域就会给范围;采集文案永远说「再来一件……就能开始筛」。
- 根因:区间交付门槛与唯一分钟确认门槛分开定义,四处各写常数;政策文件只被确认门引用。
- 修复(产品决策 TASK-upstream-sync5 §2.2):`758fee95`。四处全部读政策文件同一对值,按「训练 + 留出」的全部带日期主经历计数;Python 回执的事件 / 领域门改数全部可计分经历,`POLICY_VERSION` v3 → v4(候选 UUID 命名空间随之变化);收敛判定与推断后的训练门同口径;采集缺口文案写准还差几件、还缺几个方面(VOICE.md 同步);遗留表单 `birth-time-life-events.tsx`(无引用方)文案同步。打分不变(77 例 A/B 逐分相同),`ALGORITHM_VERSION` 维持 scoring-10;记忆化 golden v3、v2 冻结。
- 验证:前端 30 个校正测试文件(夹具补到 4 件 3 域保持原场景,或改断言写三栏)、`tests/test_rectification_confirmation_and.py`、`test_rectification_engine_memoization.py`(v2 冻结 + 分数相等);npm test 失败名单与基线相同。
- 遗留(待产品):留出规则不变,第 3 个领域若只有一件常被留作 holdout,刚达标时实际参与打分的常是 2 个领域 3 件事。
- 防复发:门槛只在政策文件定义;`rectification-convergence-budget.test.ts` 断言常数与政策同源。
- 相关记录:BUG-647(训练门与留出解耦)、BUG-1048。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
## BUG-1194 | 8 星制 Chara Karaka 把罗睺按正向度数排位
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/jaimini.py` `calc_chara_karaka_8`(全读 Jaimini 模块、报告 Karaka 表)。生时校正只用 Arudha,不读 Karaka。
- 现象:罗睺参与 8 星制时按星座内正向度数排序,罗睺常被排错位。
- 根因:传统规则罗睺逆行,排位用 30° 减度数;旧代码未反转。上游 yinduzhanxing `197672e3`。
- 修复:`cb9d942b`(PM 移植):排位用有效度数,原始度数与 `rahu_reverse_applied` 同时保留。
- 验证:`tests/test_jaimini.py` 新用例。
- 防复发:同上。
- 相关记录:无。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
## BUG-1195 | 燃烧容许度全引擎不一致:不含月亮、不分顺逆行
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/jyotish_engine.py` `COMBUSTION_ORBS` / `is_combust`(全读行星表、普通对话数据卡的 graha drishti 层)、`scripts/pancha_mahapurusha.py`(五大人格格局燃烧取消)。
- 现象:水星容许度 12°(应顺行 14° / 逆行 12°),月亮不判燃烧,逆行行星与顺行同一容许度;五大人格模块另有一张表。
- 根因:两张表各自手写;上游 `080c286c`、`eaf6918b` 统一为顺 / 逆两列。
- 修复:`cf78d4ca`、`bdbff99a`(PM 移植,含普通对话层按逆行传参);`03d60e29` 测试锁两张表相等并在每个容许度边界上验证两个函数。
- 验证:`tests/test_consultation_native_layers.py`、`tests/test_combustion_orb_tables_agree.py`;名人回测 golden 只有一位逆行金星由燃烧改为不燃烧。
- 防复发:两表相等测试。
- 相关记录:BUG-1154(graha drishti 燃烧共用一个判断)。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
## BUG-1196 | Yogini Dasha 起运不按月宿
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/yogini_dasha.py`(全读条件大运、报告时间系统表)。
- 现象:起始 Yogini 不是按出生月宿 `(nakshatra + 3) mod 8` 取。
- 根因:上游 `cb7fe017` 已修。
- 修复:`5172620c`(PM 移植;上游对本仓不存在的测试文件的改动未带)。
- 验证:`tests/test_yogini_seed_profile.py`。
- 防复发:同上。
- 相关记录:无。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
## BUG-1197 | 诅咒格 / Rashi Tulya 的含义写「过早死亡风险」「死亡之神」等确定性断语
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/curse_yoga_detector.py`、`scripts/rashi_tulya_navamsa.py` 的 meaning 字段(凶星合相层、`orchestrator_bridge` 的 RTN 证据)。
- 现象:Yama / Preta Yoga 含义写「死亡之神 sitting」「过早死亡风险」「可触发危险疾病或事故」。
- 根因:照讲稿抄入,违反「不作确定性死亡预测」。上游 `b40c7fde`、`28f41912`。
- 修复:`533c3a30`、`9959e514`(PM 移植);同类残留(家族影响、Badhaka 写死)见 BUG-1192。
- 验证:`tests/test_curse_yoga_claim_boundary.py`、`tests/test_curse_yoga_badhaka_house.py`。
- 防复发:两条测试扫源码。
- 相关记录:BUG-1192。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
## BUG-1198 | 水星燃烧时 Budha-Aditya 仍按完整吉格输出
- 状态:resolved(分支验证;未部署)
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
- 影响面:`scripts/yoga_engine.py` 格局列表(报告、数据卡格局行)。
- 现象:日水合相即出 Budha-Aditya 全部吉效果,不看水星是否燃烧。
- 根因:上游 `994638f0` 已修(本仓只取 Budha-Aditya 一段)。
- 修复:`45d6dbf6`(PM 移植):水星燃烧时格局仍可见,`strength=conditional`、效果移到 `traditional_effects`、附 `combustion_witness`。
- 验证:`tests/test_budhaditya_combustion_gate.py`。
- 防复发:同上。
- 相关记录:BUG-1195。
- 修复版本:`codex/upstream-sync5-20261002`(未推送)。
@@ -0,0 +1,148 @@
# PROGRESS · 上游同步第五轮 + 生时校正 4 件 3 域(2026-10-02)
- 任务书:`docs/tasks/TASK-upstream-sync5-20261002.md`(`origin/staging` `677d40f9`)。
- 执行方式:产品授权直接执行。Claude(PM)先在本会话移植上游代码(U2–U8 各一或两个提交);子代理完成 U8 后续、R1、测试修复、记忆化 golden、研究记录重新冻结、评测、golden、回测与记录。只 commit,未 push。
- 分支 / worktree:`codex/upstream-sync5-20261002` / `.worktrees/upstream-sync5-20261002`,基线 `677d40f9`(代码同已部署 `3d0c3cdf`)。
- 上游参照:`/workspace/yinduzhanxing` `origin/main` `c593354f`(只读;未从上游复制文案,本地 ref 未改)。
- BUG 编号:开工核对 `origin/staging` 最大号 BUG-1191;本单 BUG-1192~1198(提交前再核对,未被占用)。
## 提交
| 提交 | 项 | 内容 | BUG |
| --- | --- | --- | --- |
| `cb9d942b`(PM) | U2 | 8 星制 Chara Karaka 罗睺按 30° 减度数排位(上游 `197672e3`) | 1194 |
| `bdbff99a`(PM) | U3 | 五大人格燃烧顺 / 逆行表(上游 `eaf6918b`) | 1195 |
| `533c3a30`、`9959e514`(PM) | U6 | 诅咒格 / Rashi Tulya 健康措辞 + 测试(上游 `b40c7fde`、`28f41912`) | 1197 |
| `765ff66c`(PM) | U8 | Badhaka 12 上升测试(上游 `6abfe983`) | 1192 |
| `cf78d4ca`(PM) | U3 | 全引擎燃烧表统一到 `COMBUSTION_ORBS` / `is_combust`,含月亮、逆行与普通对话层(上游 `080c286c`,改编) | 1195 |
| `5172620c`(PM) | U5 | Yogini 按月宿起运(上游 `cb7fe017`) | 1196 |
| `45d6dbf6`(PM) | U7 | 水星燃烧时 Budha-Aditya 降为有条件(上游 `994638f0` 只取此段) | 1198 |
| `54f6930b`、`67aa1b33`(PM) | U4 | 三方净化、单宫主净化(上游 `9531d1dc`、`868f1dad`) | — |
| `7fb165ec` | U8 后续 | 诅咒格 Badhaka 宫按上升取 11/9/7、删早夭 / 早逝措辞 | 1192 |
| `758fee95` | R1 | 生时校正交付门槛 4 件 3 域;政策 v4;记忆化 golden v3;30 个前端测试文件 + 4 个 Python 测试 | 1193 |
| `1029cbaa` | R1 / ERR-110 | 研究记录重新冻结(标签 `upstream_sync5_2026_10_02`) | 1193 |
| `917e18a0` | — | 普通对话回测 golden 重生成 | — |
| `03d60e29` | U3 后续 | 两张燃烧表相等测试 | 1195 |
| `90dcafe7` | R1 后续 | 隐私扫描按行号钉的两处碰撞保持原行 | 1193 |
| (本提交) | — | 记录:BUG 历史、CHANGELOG、本文件、任务索引、回测第七轮 | — |
## 逐项
### U1 Narayana 默认版本 —— **不搬**(产品延后)
上游 `acdc3551` 只改了 `scripts/cmd_narayana_dasha.py` 一行:`variant_profile` 默认值 `legacy_local` → `kn_rao`。本仓的 `cmd_narayana_dasha.py` 根本没有 `variant_profile` 开关(上游更早加入的 K.N. Rao profile 本仓未同步),生时校正(`event_probes`、`active_rectification_event_engine`)直接调 `narayana_dasha.calc_narayana_mahadasha` 等函数,也不经过这个命令入口;要「默认 K.N. Rao」得先整体移植 profile 机制,不是一行默认值;而「产品是否改用 K.N. Rao 版本」是占星师待裁决项(乙表),改函数默认会同时改生时校正打分。本轮不移植,留待占星师确认后单独立单(需过 v5 评测与历史可打开核对)。
### U2 Chara Karaka 罗睺(BUG-1194)
PM 移植。生时校正只用 `jaimini.calc_arudha_padas`,不读 Karaka;77 例 A/B 分数相同。
### U3 燃烧(BUG-1195)
- PM 移植两提交。全引擎现在两张表:`jyotish_engine.COMBUSTION_ORBS`(全读、普通对话 graha drishti 层)与 `pancha_mahapurusha.COMBUSTION_ORB`(上游形状)。数值相同;`03d60e29` 加测试锁两表相等,并在每个容许度边界验证两个函数。`scripts/validate_yoga_accuracy.py` 另有一张简化表(只顺行),是离线校验脚本,不在产品路径,未改。
- 普通对话卡上的变化:9 位回测名人中只有齐达内一颗逆行金星由燃烧改为不燃烧。
### U4 八分法净化 —— 函数已加,未接入输出
上游只新增 `calc_trikona_shodhana` / `calc_ekadhipatya_shodhana`(上游仓内也没有调用方)。本仓同样不接入报告、数据卡与生时校正,SAV 原值不变;函数可供后续调用。`scripts/ashtakavarga.py` 在生时校正冻结身份里,字节变化按 ERR-110 重新冻结。
### U5 Yogini(BUG-1196)、U6 诅咒格措辞(BUG-1197)、U7 Budha-Aditya(BUG-1198)
PM 移植;测试见各提交。U5 上游对本仓不存在的测试文件的改动未带;U7 上游同一 hunk 里其它卡片闸门字段来自别的提交,未带。
### U8 Badhaka(BUG-1192)
- 核对:本仓两处 Badhaka。`yoga_engine.YogaContext.is_badhaka` 已按动 / 定 / 变取 11 / 9 / 7(上游测试 `765ff66c` 通过);`curse_yoga_detector` 亡灵格(Preta Yoga 两条)加重宫位写死 `[8, 11, 6]`、注释「11宫=Badhaka」—— 记忆里说的「写死 11 并输出过早死亡风险」就是这里(「过早死亡风险」已由 U6 去掉)。
- 修复:`yoga_engine.badhaka_house()` 成为唯一定义,`is_badhaka` 与诅咒格都调它;Preta 两条的加重宫位改为按上升展开(D9 检测用 D9 上升;上升未知时 Badhaka 宫不参与加重,原 `is_badhaka` 对未知上升返回 7 宫,现在返回 False)。
- 死亡措辞 grep:`rg "过早死亡|死亡风险|早夭|早逝|夭折|血脉.*(中断|停止)|死亡之神" scripts references/*.json` 后剩余:诅咒格「家族影响」两条(子女早夭、家族血脉停止)→ 改为责任 / 传承主题;`references/yoga_rules.json` 母亲不利格效果「母亲早逝 / Early loss of mother」→ 删除。剩余命中只在 `scripts/misconceptions.py`、`scripts/case_validator.py`(李小龙案例笔记,供内部案例校验,不进用户输出)与 `references/*.md` 讲稿资料。前端两份报告阅读 fixture(`report-reader-main-fictional*.json`)是历史引擎输出,仍含「母亲早逝」,未重采(不影响线上)。
- 测试:`tests/test_curse_yoga_badhaka_house.py`(12 个上升、未知上升、源码与实际输出正则扫描)。
### R1 生时校正 4 件 3 域(BUG-1193)
**门槛位置(改前 → 改后)**
| 位置 | 改前 | 改后 |
| --- | --- | --- |
| `references/rectification_policy.v1.json` `minConfirmationEvents / minConfirmationDomains` | 4 / 3(只被确认门读) | 不变,成为唯一定义 |
| `frontend/src/lib/rectification-agentic/core/types.ts` `MIN_TRAINING_EVENTS = 3`(收敛判定,只数训练件) | 3 件 | 删除;新 `MIN_DATED_EVENTS / MIN_DATED_DOMAINS` 读政策文件;收敛判定数训练 + 留出,并加领域条件 |
| `core/rectification-decision.ts` `MIN_STANDALONE_DATED_EVENTS / DOMAINS`(区间交付门、出牌前「继续采集」) | 3 / 2 | = `MIN_DATED_*`(4 / 3) |
| `v9/evidence-model.ts` `MIN_ACCEPTANCE_EVENTS / DOMAINS` + `trainingScoreableGate`(训练门:何时开始出选择题、出卡) | 3 / 2,只数训练件 | = `MIN_DATED_*`,数训练 + 留出的全部带日期主经历 |
| `v9/decision-from-dossier.ts` 推断后 `trainingGateOpen` | 训练件 3 / 2 | 训练 + 留出 4 / 3 |
| `scripts/rectification/decision_policy.py` `MIN_ACCEPTANCE_EVENTS / DOMAINS`(回执 `event_quality` / `domain_diversity`,决定 `acceptance_allowed` / `selection_allowed`) | 3 / 2,只数训练件 | = `MIN_CONFIRMATION_*`(政策文件),数全部可计分经历;`POLICY_VERSION` v3 → v4 |
| 其它(未改,含义不同) | `case_holdout.py` / `split-holdout.ts` 第 4 件起留出 1 件;`candidate_contrast.MIN_DISCRIMINATOR_*`(区分题供给);研究脚本 `holdout_v5_build` 7 件 4 域(数据集入选标准);`minute_rectification_holdout_validator` 每例 3 件(固定协议) | — |
- **计数口径**:产品口径「至少 4 件事」按用户给出的带日期主经历算,包括被留作 holdout 的那一件(留出规则不变:第 4 件起留 1 件)。若改成只数训练件,用户要说 5 件才够。
- **遗留(待产品)**:留出规则优先把只有一件的领域留作 holdout,刚好 4 件 3 域时,实际参与打分的常是 2 个领域 3 件事。要不要改成「训练件也要 3 个领域」(等于要 5 件以上),请产品定。
- **打分不变**:77 例 v5 用 `score_candidates`(±10,分钟步长 2,冻结日期)A/B 逐分相同;记忆化 fixture 分数与 v2 golden 相同,只有回执变(`policy_version` v4、`event_quality.minimum` 3 → 4、`domain_diversity.minimum` 2 → 3 且 2 域不再通过、代表候选 UUID 随 policy 命名空间变、`feature_hash` 随 ERR-111 变)。按 BUG-1181 先例「同输入出不同分才升算法版本」,**不升 `rectification-v5-matrix-scoring-11`**;`ALGORITHM_VERSION` 仍 scoring-10,policy 身份 v4。记忆化 golden 按先例由 `write_golden` 写 v3,v2 冻结并按 sha256 钉住(新测试断言 v2 / v3 分数相同、只回执 policy 变)。
- **历史 Case 能否打开(BUG-621)**:算法版本与 Skill 版本都没变;policy 版本只参与「缓存分数是否可复用」与候选 UUID,旧结果按存储的身份只读打开、重新比较时按 v4 算。前端 `rectification-history-open` / `engine-version-cross-midnight` / `dated-algorithm-generation` 等测试全过(npm test 失败名单与基线相同)。未做浏览器级验证。
- **采集文案**:`preciseGapNarration` 不再一律「再来一件……就能开始筛」,按缺口写「再来两件记得大概年月的事,其中至少一件不是上学或工作的,就能开始筛」「再来四件……、至少涉及三个方面,就能开始筛」,只差一件时仍是「再来一件……」。保留「就能开始筛」字样(多处合同测试按它识别缺口句)。`VOICE.md` 第 293 行同步。`user-copy.ts` 的 `insufficientEventsGate` / `insufficientDomainsGate`(「再来一件……」)只被 `acceptanceGateNarration` 用,而该函数在 `answer-choice.ts` 只 import 未调用,未改(死代码,记一笔)。遗留表单 `components/birth-time-life-events.tsx`(无引用方)文案与校验同步为 4 条、3 个领域。Skill 文本里没有写 3 件 2 域(只有「propose_allowed 需要可评分事件≥4、领域≥3」),Skill 版本不变。
- **采集流程**:训练门(`trainingScoreableGate`)同时决定「继续口述采集」与「开始出选择题 / 出卡」,门槛抬到 4 / 3 后,采集线会一直问到 4 件 3 域(原 3 件 2 域就转选择题)。BUG-1048 是出题闸门最小间隔问题,与件数无关;BUG-647 的「holdout 不饿死训练」不变(4 件时训练仍 3 件)。
**测试三栏(摘要;逐条注释写在测试里)**
| 文件 | 用例 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- | --- |
| `rectification-convergence-budget` | insufficient standalone evidence keeps collecting | {2/2}→dated、{3/1}→domains | {3/3}→dated、{4/2}→domains | R1 门槛下方各取一格 |
| 同上 | standalone delivery floor(改名 shares the 4/3 policy…) | 3、2 | 4、3 且与政策同源 | R1 单一定义 |
| 同上 | dossier wiring | 3 条 career → insufficient_domains | 3 career + 1 relationship → insufficient_domains | 3 件会先落 insufficient_dated_events |
| `rectification-decide-next-action` | discrimination waits for…(改名 four dated events across three domains) | three.open=true、3 件出区分题 | false、继续采集;新增 4 件 2 域门关 | R1 |
| `rectification-decision-authority` | invariant 2 | 事件 [0,2,3] × 领域 [0,1,2] | 事件 [0,2,3,4] × 领域 [0,1,2,3],3 件 2 域也必须挡 | R1(测试更严) |
| `rectification-eight-method` | three dated events with one holdout… | holdoutCount=0 | 1(补第 4 件,训练仍 3) | R1 |
| `rectification-occupation-dated-answer` | raises the training gate by one career event | 训练 2 → 3 | 训练 + 留出 = 改前 + 1,holdout=1 | R1 按训练 + 留出计 |
| `rectification-probe-pool-exhausted` | T4 标题 | 「对照了 4 件经历」 | 「对照了 5 件经历」 | 夹具多一件第 3 域经历 |
| `rectification-collect-stall` | revision 5… | holdout `e-rel-start` | holdout `e-finance`、`e-rel-start` 断言为训练 | 夹具补第 3 域后单件域被留出 |
| `rectification-block-scan` | 题名 three dated events in two domains… | — | four dated events in three domains(断言不变) | R1 |
| `tests/test_rectification_confirmation_and.py` | four events two domains(改名 neither selects nor proposes) | selection_allowed=True | False,`domain_diversity` 不过、minimum 3 | R1 |
| `tests/test_rectification_relative_support.py`、`test_rectification_v5_services.py` | policy 版本 | v3 | v4 | R1 |
| `tests/test_rectification_engine_memoization.py` | 当前 golden | v2 | v3(v2 冻结 + 分数相等测试) | R1 回执变 |
其余 23 个前端文件只改夹具(补第 4 件 / 第 3 域,保持原场景),每处带「R1(BUG-1193)」注释;没有删断言。
## 生时校正评测(v5 77 例)
- `python3 scripts/research/holdout_v5_baseline.py --dataset v5 --out-dir <dir>`,改前在 `origin/staging` `677d40f9` 一次性 worktree、改后在本分支 `917e18a0` 一次性 worktree(引擎与 R1 全部改动之后)各跑一次:sweep / cluster_width / futile_collect 三段 JSON 逐字节相同(只差耗时),数字与第四轮 `a18f8d4e` 相同。
| 指标(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 |
红线(任一格下降 > 1 pp)未触发。
- **R1 对交付的影响**:评测按每例全部经历打分,不经过交付门,所以数字不随 R1 变。按数据集本身核算:77 例每例都有 ≥ 7 件、≥ 4 个领域的主经历,**给全经历时 0 / 77 被 4 件 3 域挡住**。若按经历发生先后逐件说出:旧门槛 3 件 2 域中位在第 3 件达到,新门槛中位在第 4 件;55 例只需多说 1 件,12 例多 2 件,2 例多 3 件,8 例要多 4–7 件(前几件集中在一两个领域,第 3 个领域出现得晚)。
- 另:77 例 `score_candidates` A/B(±10、冻结日期)逐分相同;reported offset 900 例 0 例变化、sealed holdout 20 例逐条相同(见重新冻结提交)。
## 普通对话 golden 与回测
- `consult-evidence-card-golden.json`、`consult-biography-backtest-golden.json` 用 capture 脚本各跑两次(`PYTHONHASHSEED=0`、缓存 TTL 0),逐字节相同。证据卡 golden 与提交版相同;回测 golden 只有齐达内逆行金星不再燃烧(graha drishti 四条路由各一处)。
- 名人回测第七轮:`docs/testing/consult-affliction-backtest-20261001.md`「改动后(第七轮,上游同步五)」。72 + 14 份全部读完。事业类型冲突 9 → 13 / 18(8 位名人卡未变,属模型波动);父母严重冲突 0、禁句 0、纠正追问 8 / 8、事业追问 6 / 6;对照组轻度误报 6 → 8、读反 2 → 5(都在健康开场)、1 份全篇两处请求。
## 门禁
| 项 | 结果 |
| --- | --- |
| 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(1,046 passed、1 skipped;在含记录的提交上跑) |
| 隐私扫描 `tests/test_repo_privacy_markers.py` | 通过(R1 改测试时一度把按行号钉住的两处碰撞挤下一行,`90dcafe7` 修回) |
| Python 全量(`pytest tests -n 4`) | 63 个失败,全部在开工基线 67 个之内;基线里 5 个(prashna 系列,依赖本机文件)本次通过。新增失败 0 |
| `tsc --noEmit` | 0 错 |
| `npm run lint` | 0 error(126 warnings) |
| `npm test`(Node 22) | 4,921 项,fail 24、cancelled 0;失败名单与同机 `origin/staging` 基线逐条相同(基线另有 1 条答题钟计时用例偶发失败);名字表只少 3 个改名用例(新名字都在) |
| `next build --webpack` | `/` 仍 `○ Static`;首屏 gzip 607,159 B,基线 607,110 B(+49 B,+0.008%) |
| 数据库套件 | 未跑(无 Docker;本单不改表结构、无迁移) |
## 上游未搬 / 不在本单
- U1 Narayana 默认(见上)。
- 任务书 §2.3 不搬:上游生时校正显式权重 / 行运锚点 / 双轨门、五大人格规则 profile、父母 / 事业盲测与现实校准合同。
- U7 同一 hunk 里上游其它卡片闸门字段(来自别的提交)。
- U4 两个函数不接入任何输出(上游同样未接)。
## 遗留 / 待产品
1. R1 计数口径:刚好 4 件 3 域时打分常只用 2 域 3 件(holdout 留走单件域)。是否要求训练件也 3 域。
2. `acceptanceGateNarration`(`user-copy.ts`)只 import 未调用,`insufficientEventsGate` / `insufficientDomainsGate` 两句仍写「再来一件」,属死代码;按「多余入口宁可删」可另开小单删除。
3. `report-reader-main-fictional*.json` 两份前端 fixture 是历史引擎输出,仍含「母亲早逝」;下次重采报告 fixture 时自然消失。
4. 名人回测事业类型冲突仍远高于通过线(13 / 18),需提示词或卡片单处理。
5. 真机:部署后在 staging 新建一次校正,只说 3 件(2 个方面),确认不出时间卡且提示写「还差……」;补到 4 件 3 个方面后出选择题 / 卡。历史校正记录能从列表打开。
+1 -1
View File
@@ -411,4 +411,4 @@
| —(产品要求子代理直接执行,无任务书;决策见进度记录) | `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(交付见 `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 个领域 | **执行中**(Claude 移植 + 子代理) | 分支 `codex/upstream-sync5-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` |
@@ -507,6 +507,73 @@ Bill Clinton 不在仓库案例库里,没有加;「父亲缺席」由 Obama
4. 父母题、请求数、禁句、纠正追问与第五轮持平。
5. 成本:72 份墙钟 1,320 s(并发 4),单份中位 57 s、最长 140 s;输入 4,095,439 token(缓存约 89%),输出 1,030,439(推理 939,077);查卡 10 次。
## 改动后(第七轮,上游同步五,2026-10-02)
- 进度:`docs/tasks/PROGRESS-upstream-sync5-20261002.md`(任务书 `TASK-upstream-sync5-20261002.md`)。本轮没有改提示词、清单或数据卡结构,改的是引擎:燃烧容许度分顺 / 逆行(BUG-1195)、Budha-Aditya 在水星燃烧时降为有条件(BUG-1198)、诅咒格措辞与 Badhaka 宫(BUG-1192 / 1197)、Chara Karaka 罗睺、Yogini 起运。
- golden:两份都用 capture 脚本重新生成,两次逐字节相同。证据卡 golden 与提交版逐字节相同;回测 golden 只有齐达内一处变化(逆行金星按逆行容许度 8° 不再燃烧,graha drishti 四条路由各一处)。其余 8 位名人的输入与第六轮实际使用的 golden 之间,只差第六轮已记的双重过运排序与婚姻卡第 7 宫去重。
- 命令同第五、六轮(`--repeats 2 --concurrency 4 --correction-domain parents,career …`);72 份 + 8 份父母纠正 + 6 份事业追问,失败 0,无补跑。
- 评分:72 份主答与 14 份追问逐份读完(分三组并行读,口径同第五、六轮,合并时统一)。父母题「这周做的事」预设父母在场一律记弱(第六轮只出现在琵雅芙,本轮梦露也有)。
| 名人 | 父母 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 | 「走的是扛事、经手麻烦的那一类路…被承认得晚」;有问 | 无(「不是靠一次机会直接换位子」记弱);有问,但全篇请用户说了两次 |
| Elizabeth Taylor | 「不是靠一次机会翻身」「前期偏吃力」(12 岁成名);有问 | 「经手、绕路、比预期晚,不会靠一次机会到顶」;有问 |
| Marilyn Monroe | 「指望一个机会把你整体推上去,这张盘上没有那个结构」;有问 | 「靠一次机会抬上去的可能性不大」;有问 |
| Judy Garland | 「这条线是硬做出来的,不是等出来的」(童星);有问 | 「公开落地这一层(被看见、名分)最费劲」;有问 |
| Édith Piaf | 无(「路主要靠跟人对接来打通」,行动预设报价结算,记弱);有问 | 「跳级的机会这张盘上没有」;有问 |
| Frida Kahlo | 无(「公开落地这一层:三格里最慢」记弱);有问 | 无(「亮出来、拿到手:这一层来得晚」记弱);有问 |
| George W. Bush | 无(「被看见…比接洽晚一拍」,临界记弱);有问 | 「靠自己一门本事换来实在的东西」「被看见得更晚」;有问 |
| Zinedine Zidane | 「认可来得比你的实际能力慢」;有问 | 「公开落地…这一层最慢」,行动「方案、报价、进度」;有问 |
格子说明:
- 父母:18 份没有一份把受冲的一方写成「在管、在安排、近」。梦露、琵雅芙各两份的行动预设父母在场,记弱。布什 r1、齐达内两份把「近处摩擦 / 不常在」写成现实,记误报(轻);布什、齐达内父母题 4 份出现「不常在」,都在「可能……也可能……」的范围句里,不另扣。
- 婚姻:奥巴马 r2 开场「落地的速度偏慢」、布什 r1 同类,记误报(轻);泰勒 r2「定下来这件事要的时间比别人长」(18 岁初婚、八次婚姻),记读反(轻)。
- 健康:乔布斯 r1「恢复的能力本身够用」、泰勒 r2「扛是扛得住」、嘉兰 r2「麻烦来得急、去得也快」、卡罗 r2「急性、外伤那一层不是主轴」,记读反(轻);布什、齐达内各两份把「恢复慢」类迹象写成现实,记误报(轻)。
- 请求数:71 / 72 份恰好一处请用户说一句(奥巴马事业 r2 两处);事业 18 份全部直接问做哪一行。禁句 0;脚本确定性检查禁句 0、性别代词 0。
### 纠正追问与事业追问(第七轮)
- 父母纠正 8 / 8:先认下、点名上一轮读偏的那句、只列对得上的几条、写明盘分不出「人不在」还是「人在但不管」。偏重残留同第六轮:奥巴马 r2「直接少了一块」、梦露 r2「这条线一直缺着人」、嘉兰 r2 开头定性「人不常在」、琵雅芙 r1「不再摇摆」。
- 事业追问 6 / 6 按真实职业读助力、阻力、时间,没有「盘早就显示」。残留记录不扣:奥巴马 r1「位置要用对抗换,所以来得晚」「说话这条线本命是弱的」,泰勒 r1「起步这段是偏吃力的」,齐达内两份「认可来得慢」且没有点名上一轮读偏的句子。
### 合计:第六轮 → 第七轮
| 项 | 第六轮 | 第七轮 | 通过线 | 达到 |
| --- | --- | --- | --- | --- |
| 事业行业 / 类型与生平冲突 | 9 / 18 | **13 / 18** | ≤ 1 / 18 | **否** |
| 事业段末问一句 | 17 / 18 | **18 / 18** | ≥ 16 / 18 | 是 |
| 严重冲突总数 | 9 / 72 | **13 / 72**(全在事业) | ≤ 5 / 72 | **否** |
| 父母严重冲突 | 0 | **0** | — | — |
| 对照组严重误报(事业以外) | 0 | **0** | 0 | 是 |
| 对照组轻度误报(Bush、Zidane) | 6 | **8**(Bush 父母 1、婚姻 1、健康 2;Zidane 父母 2、健康 2) | ≤ 2 | **否** |
| 读反 | 2(轻) | **5(轻;健康 4、婚姻 1)** | — | — |
| 禁句 | 0 | **0** | 0 | 是 |
| 全篇两处请求 | 0 | **1**(奥巴马事业 r2) | 每份一处 | **否** |
| 父母纠正追问 | 8 / 8 | **8 / 8** | — | — |
| 事业追问按真实职业读 | 6 / 6 | **6 / 6** | — | — |
### 读出来的东西(第七轮)
1. **事业类型冲突 9 → 13 / 18,不能归因到本轮引擎改动**:9 位名人里 8 位的卡与第六轮实际输入只差第六轮已记的双重过运结论先后与婚姻卡一行重复(事实相同),齐达内另有一颗逆行金星不再燃烧。推法仍是第五、六轮那一条:10 宫主或 A10 落 6 / 8 / 12 →「经手、绕路、来得晚」→「被看见最慢」「不是靠一次机会」。第四、五、六、七轮依次是 9、5、9、13,同一份卡上两次重复的波动就有这么大;结论同前两轮:要压到 ≤ 1 需要改卡上对 6 / 8 / 12 的公众性暗示或固定事业首段写法,属于提示词 / 卡片单,不在本单。
2. **读反 2 → 5、对照组轻度误报 6 → 8**:都是健康开场的「恢复力够用 / 扛得住」或把迹象写成现实,与第五、六轮第 3 条同类;健康卡本轮无变化。
3. 父母题、禁句、纠正追问与第六轮持平;事业追问 18 / 18 都问了做哪一行,但出现 1 份全篇两处请求。
4. 成本:72 份墙钟 1,293 s(并发 4),单份中位 60 s、最长 113 s;输入 4,098,004 token(缓存约 88%),输出 1,047,606(推理 952,579);查卡 9 次。
## 真机清单(给产品,staging 部署后)
每条都在新会话里问,档案不填性别;看三件事(10-02 口径):受冲时是不是写成「压力 / 距离的迹象 + 现实里可能的范围」而不是替你下结论、是不是只请你说一次实际情况、有没有预设处境。