diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 80e0e38c..069bd3e2 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -409,4 +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)不计,泰勒/齐达内卡上同时出现互相矛盾的格局;统一为只计五颗真行星 | **待领取**(须在上游 v2 移植合入后) | 分支 `codex/yoga-lunar-node-consistency-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 | 分支 `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` | diff --git a/docs/tasks/TASK-upstream-sync4-20261002.md b/docs/tasks/TASK-upstream-sync4-20261002.md new file mode 100644 index 00000000..5ec5305e --- /dev/null +++ b/docs/tasks/TASK-upstream-sync4-20261002.md @@ -0,0 +1,110 @@ +# TASK · 上游同步第四轮:婚姻断语、过运相位、Shadbala、格局列表、月亮/太阳类格局、Arudha 单一来源、定位星循环(2026-10-02) + +- 基线:`origin/staging` @ `588282c2`(已含功能吉凶 v2 `57782aea`…`51f3f47b`,BUG-1158/1180~1182;**本单不重复做功能吉凶**)。 +- 上游参照:`/workspace/yinduzhanxing` `origin/main` @ `0a6696c5`。只按下表逐处移植,不整文件覆盖。 +- 分支 / worktree:`codex/upstream-sync4-20261002` / `.worktrees/upstream-sync4-20261002` +- 依据:`docs/research/engine_model_gap_and_astrologer_questions_2026_10_02.md`(Claude 10-02 全项目梳理)+ 同日对上游 `0a6696c5` 的逐项比对(32 项中上游真正修好 4 项,其余见 §7「不在本单」)。 +- **并单与串行**:本单 **吸收** `TASK-yoga-lunar-node-consistency-20261002.md`(作为 T5,原单不再单独派发)。同一天改 `references/yoga_rules.json`、`scripts/jyotish_engine.py`、`scripts/jyotish_api_server.py` 的其他任务书须排在本单合入之后。 +- BUG 编号:开工时核对 `docs/BUG_HISTORY.md` 最大号(本单写作时为 BUG-1182),从 **BUG-1183** 起顺延。 + +## 1. 事故实证(行号按符号定位,开工时以符号为准) + +| 项 | 我方位置(`origin/staging`) | 现象 | 上游修复 | +| --- | --- | --- | --- | +| A 婚姻计数断语 | `scripts/marriage_counting.py` `_interpret_marriage_count`、`_marriage_recommendations`;消费方 `scripts/jyotish_api_server.py` `_derived_marriage_evidence`(count ≤ 1 记 `positive`) | 输出「一次终身关系,忠诚度较高」「两段重要关系,可能再婚」「第一段关系由吉星主导,质量较好」等确定性事件断语;`marriagecount` 在前端 `consultation-workflow.ts` `domainDetailsKeys` 白名单里,`projectDomainEvidence` 会把 `conclusion` 投给模型 | `0afa2780`:改成只描述几何指数,删全部关系次数与质量断语 | +| B 双重过运相位错一宫 | `scripts/jyotish_engine.py` `_check_pac`:`((t_house - p_house + 12) % 12) == offset` | 宫距从 0 起数却与 1 起数的相位号比:土星 7 宫相位判到第 8 宫,木星 5/9 判成 6/10,火星 4/8 判成 5/9。BUG-1060/1061 审计同一命令时没查到这一行 | `2dd6062a`(09-24):`% 12) + 1 == offset` | +| C Shadbala 四处计算错 | `scripts/shadbala.py`:Ayana 南北判断用 `raw_tropical`(可溢出 360°);`_calendar_lords` 用 `ceil(jd+1)%7` 求星期(在儒略日正午换日)且把星期序号当时主序号;Surya Siddhanta 平黄经每 7 天对齐一次星期、整数截断丢掉不足一日的运动;Chesta 中点跨 0° 算错 | 时力、动力分量错,影响行星强弱排名 | `0afa2780`:`north = tropical < 180`;民用星期按日期算并查 `_HORA_ORDER`;平运动连续计时、去掉 desantara 二次修正;新增 `chesta_from_longitudes` 短弧中点 | +| D 格局列表截断与空列表回退 | `scripts/jyotish_api_server.py` `_detect_yogas` 末尾 `return yogas[:10]`;`_chart_from_full_reading` 里 `normalized['yogas'] = chart.get('yogas') or yoga_module.get('yogas') or …` | 超过 10 条的格局被丢;已评估为空的列表被旧预览「复活」 | `e9beae6b`:去掉 `[:10]`;按「字段存在」而非「真值」取第一份列表 | +| E 月亮类 / 太阳类格局数罗计 | `references/yoga_rules.json` `bvr_002/003/004`(Sunapha/Anapha/Durudhara)、`bvr_016/017/018`(Vesi/Vosi/Ubhayachara)只排除日或月;`kemadruma_yoga` 计罗计;`scripts/yoga_expansion.py` `detect_kemadruma` 不计 | 同一张盘同时出现「月亮孤立」与「月亮有星」(泰勒、齐达内);太阳第 2 宫只有计都也判 Vesi 成立 | `2dd6062a`:bvr_002~004、016~018 只数五星;10 条重复规则进 `RETIRED_RULE_IDS`。**上游 Kemadruma 仍计罗计**(见决策 3) | +| F Arudha 宫号当星座号 | `scripts/yogas_doshas.py` `calc_arudha_lagna`、`calc_upapada_lagna`:`lord_idx = lord_house - 1` 把「第几宫」当白羊起算的星座序号,且无 1/7 宫例外 | 同一张盘 AL 与 `jaimini.calc_arudha_padas` 不同(虚构巨蟹盘:本函数 6 宫,jaimini 9 宫) | `0afa2780`:宫号→星座换算;补 1/7 例外(**从落点数第 10**,与我方 `jaimini` 的「从源宫数」不同,见决策 4) | +| G 定位星循环与未标定概率 | `scripts/jyotish_engine.py` 定位星链「最终定位星」段(多星互换循环时硬选一颗);Dasa 收敛段写死 `probability = '85-92%' / '75-85%' / '50-65%' / '+15-20%'` | 报告 PL9 表展示错误的「最终定位星」;无标定依据的概率进报告 | `e9beae6b`:`final_dispositor_from_chain`(仅自循环为终点,多星循环写 `Cycle: A -> B -> A`);`probability = None` + `probability_basis` | + +## 2. 根因 + +上一轮同步(sync3)只对照到上游 `db8cdf4a`(09-27),并且是挑选移植:09-24 `2dd6062a` 的过运相位与格局规则、09-29 以后的 `eaa180b5`(婚姻计数第一刀)、10-02 的 `e9beae6b`(除功能吉凶外的部分)与 `0afa2780` 都没有吸收。B 项在 BUG-1060/1061 审计双重过运时漏查:那两次只核对了目标取值与跨层配对,没有核对相位判定本身。 + +## 3. 决策记录(产品 2026-10-02 授权) + +1. 本单移植 A~G 七项;**不搬**上游 `career_analysis.py` / `assertion_policy.py`(我方普通对话不调用,事业卡已带 D10/A10/AL/AmK/功能吉凶,产品已定「不猜行业、问用户」)、上游新增的约 20 个技法脚本、PyJHora 抓取与回放脚本(AGPL 边界)、`nakshatra_dasha` / `pancha_pakshi` 修复(产品不调用)。 +2. A 项:婚姻计数在我方产品里**只保留几何指数**,文案用中文中性表述(例:「关系几何指数 N:方法里的星座距离,不代表婚姻或关系的次数」);`_derived_marriage_evidence` 一律记 `neutral`,不再按次数判 `positive`。 +3. E 项:沿用原月亮单已定口径——**经典定义只计火、水、木、金、土五星**(BPHS 月亮瑜伽章、Phaladeepika、B.V. Raman《Three Hundred Important Combinations》第 2–5 条),Kemadruma 两处(规则版与 `detect_kemadruma`)也只计五星,因此**与上游 Kemadruma 计罗计不同**,进度记录里写明并告知上游。太阳类 Vesi/Vosi/Ubhayachara 同样只计五星(排除月亮与罗计)。Kemadruma 的角宫解除条件不动,只在进度记录列出两处差异。执行方须引原文出处并核对 PyJHora 的实现;出处与此不符则停下报告。 +4. F 项:产品口径是「多余入口宁可删除也不修」。先查 `yogas_doshas` 的 AL/UL 是否出现在任何用户可见面(报告、原始附录、数据卡、星盘页、接口响应)。**AL/UL 只留一个来源 `jaimini.calc_arudha_padas`**:可见则改成取 jaimini 的值,不可见则删除并行计算。1/7 宫例外从哪里数(源宫 / 落点)是占星师清单第 5 题,**本单不改 jaimini 的现行口径**,也不移植上游「从落点数」。 +5. C 项:只移植算法修正与对应回归测试;上游把 Mercury/Venus 互换输入的 profile 改名为「历史对照、无 Raman 出处」的元数据也一并搬(只改描述,不改默认 profile)。太阳最低要求 5.0 → 6.5(清单 F3)**不在本单**,归引擎硬 bug 组。 +6. 打分语义变化按 BUG-1181 先例办理:任一项让生时校正同输入出不同分,就把 `scripts/rectification/scoring_service.py` `ALGORITHM_VERSION` 升到 `rectification-v5-matrix-scoring-11`,记忆化 golden 新写 v3 文件、v1/v2 冻结不动,校正研究记录按 ERR-110 重新冻结。「日期窗合同」已按代数判断(≥ 9),本次升版不需要迁移。 + +## 4. 硬红线 + +1. `scripts/jyotish_api_server.py` 只做 D 项的 bugfix 级改动,`tests/test_api_server_growth_contract.py` 必须通过;新逻辑不进主文件。 +2. 不得复制上游 AGPL 相关代码(PyJHora 抓取 / 回放、`*_pyjhora_*` 脚本);本单涉及的上游改动均为上游自写代码,移植时在提交说明里写上游提交号。 +3. 不改除 E 项列明规则以外的任何格局成立条件;不改功能吉凶(v2 刚合入);不改 Narayana、岁差、罗计投射相位(占星师清单第 3、2、7 题)。 +4. golden 必须由真实引擎生成(`JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 PYTHONHASHSEED=0`,见 BUG-1060 防复发);改既有断言写「原值 / 新值 / 原因」三栏,不得静默弱化。 +5. 生时校正 v5 77 例评测任一格下降 > 1 个百分点:停下,回退造成下降的那一项,报产品。 +6. 升评分版本后必须验证历史校正 Case 仍能打开(BUG-621 教训),并跑 `tests/test_rectification_engine_memoization.py` 全文件。 +7. 不改数据库结构、不动 `.gitea/workflows/**`、不提升 `main`、不 push 代码分支(交 Claude 验收后由 Claude 推 staging)。 + +## 5. 任务分解 + +每项一个提交,提交说明含上游提交号与 BUG 号。 + +### T1 · 婚姻计数只留几何指数(A) +- 改 `marriage_counting.py` 两个函数按决策 2;`_derived_marriage_evidence` 改 `neutral`。 +- 检查个人报告(`scripts/pl9_reader_export.py` 及全读报告)是否展示这些断语,展示则一并改为中性。 +- **验收**:`rg "再婚|段关系|第一段|终身关系|忠诚度" scripts/marriage_counting.py` 无命中;虚构盘(1990-06-15 10:30 北京)`/api/consultation_workflow` 婚恋主题证据里的婚姻计数条目只有几何指数且 sentiment 为 neutral;在进度记录里写明该条目是否实际出现在模型视图(用 `toModelOutput` 实测);新增回归测试锁禁句。 + +### T2 · 双重过运相位改为 1 起数(B) +- `_check_pac` 一处 `+ 1`;罗计仍投 5/7/9(不改,清单第 7 题)。 +- **验收**:新测试覆盖土星 3/7/10、木星 5/7/9、火星 4/7/8 各一例正、反向;`tests/test_double_transit_d9_targets.py` 通过;`tests/fixtures/double_transit_d1_cl_golden.json` 与数据卡 golden 按采集脚本重生成,进度记录给出变化条目数与三栏说明;BUG 记录关联 BUG-1060/1061 并写明当时为何没拦住。 + +### T3 · Shadbala 四处计算修正(C) +- 先确认产品各面(星盘页、报告、数据卡、生时校正)实际调用哪条 Shadbala 入口,只改可达路径;移植上游对应测试:`test_shadbala_ayana_wrap`、`test_shadbala_hora_civil_weekday`、`test_shadbala_mean_motion_continuity`、`test_chesta_circular_midpoint`(去掉其中依赖 PyJHora 原始抓取的部分)。 +- **验收**:移植测试全过;两张虚构盘改前 / 改后七星 rupa 与排名对照表写进进度记录;Shadbala 相关既有测试通过或按三栏说明更新。 + +### T4 · 格局列表不截断、不回退(D) +- `_detect_yogas` 去掉 `[:10]`;`_chart_from_full_reading` 的 `normalized['yogas']` 改为按「是 list」取第一份(顺序:`yoga_module.yogas` → `yoga_module.detected_yogas` → `chart.yogas`,与上游一致);全文件再搜一遍同类 `or` 链取格局列表的写法,一并列进进度记录。 +- **验收**:新测试:12 条格局全部返回;`yoga_module.yogas = []` 时不回退到 `chart.yogas`;growth contract 通过;数据卡卡长若因格局变多超出 BUG-1175 的上限,按既有截断规则处理并在进度记录说明。 + +### T5 · 月亮类、太阳类格局只计五星(E,吸收原月亮单) +- `bvr_002/003/004`、`bvr_016/017/018`、`kemadruma_yoga`、`detect_kemadruma` 统一只计五星;同名重复规则参照上游 `RETIRED_RULE_IDS` 退役(规则留在文件里、不参与检测),退役清单逐条写进进度记录。 +- **验收**:泰勒、齐达内盘不再同时出现 Kemadruma 与 Sunapha/Anapha;反例「计都单独在月亮后一宫」不成格、正例「土星在同位」成格;太阳类同理(计都单独在太阳第 2 宫不成 Vesi);名人回测 golden 用 capture 脚本重生成;出处与 PyJHora 核对写进进度记录;列出与上游 Kemadruma 的差异供告知上游。 + +### T6 · Arudha 只留一个来源(F) +- 按决策 4 查清可见面,再改为取 `jaimini.calc_arudha_padas` 或删除并行计算。 +- **验收**:两张虚构盘上,报告、原始附录、数据卡、接口响应中的 AL/UL 全部与 `jaimini` 一致;新测试锁定「只有一个来源」(例如 `yogas_doshas` 的 AL/UL 等于 jaimini 的值,或该字段已不存在)。 + +### T7 · 定位星循环与去掉未标定概率(G) +- 移植 `final_dispositor_from_chain`;Dasa 收敛段 `probability` 改 `None` 并加 `probability_basis`。 +- **验收**:火星金星互换的虚构盘,报告 PL9 定位星表显示 `Cycle: …` 而非硬选一颗;任何报告输出里不再出现「85-92%」一类概率;报告 golden 重生成并给出差异摘要。 + +### T8 · 生时校正影响、回测与记录 +- 跑 `tests/test_rectification_engine_memoization.py`;分数变化则按决策 6 升 scoring-11、写 v3 golden。 +- 跑 v5 77 例评测,改前 / 改后逐格对照表写进进度记录(红线 5)。 +- 验证历史校正 Case 可打开(红线 6)。 +- 有模型凭据时跑名人生平回测(72 份),对比 BUG-1182 收口后的基线;没有凭据写成环境缺口并进 `BLOCKED.md`。 +- `docs/BUG_HISTORY.md`(从 BUG-1183 起)、`CHANGELOG.md`、`docs/tasks/PROGRESS-upstream-sync4-20261002.md`;在 `docs/tasks/README.md` 状态板把本单与原月亮单两行更新。 + +## 6. 让步顺序 + +时间不够时按此顺序保留:T1 → T4 → T2 → T5 → T3 → T6 → T7 → T8 的回测部分。T8 的记忆化与 v5 评测不可让步:只要合入了会改分数的项,就必须做。v5 评测触红线 5 时,先回退 T3,再回退 T5,逐项复测。 + +## 7. 不在本单(另行处理) + +- 占星师清单(`engine_model_gap_and_astrologer_questions_2026_10_02.md` §6,27 题):Narayana 起法、岁差统一(含上游已把 `transit_trigger` 默认改 Raman)、罗计相位、落陷取消、Arudha 例外数法、天蝎/水瓶主星(上游 `yoga_engine` 已默认单主)、Kemadruma 解除条件等。 +- 两边都还在的硬 bug:太阳 Shadbala 最低要求 5.0(应 6.5)、8 星制 PiK 排位与罗睺反算、`neechabhanga_lord_exalted` 永不成立、`curse_yoga_detector` 的「过早死亡风险」措辞、校正事件精度一律写 day——归「引擎硬 bug」任务书。 +- 普通对话喂料补漏(查询路径丢 hit、精度闸、末段子运、摘要删日期等)——另一份任务书,排在本单之后。 + +## 8. 开工前置命令 + +```bash +cd /workspace/Jyotisha +git status -sb | head -1 +git fetch origin --prune +git worktree add -b codex/upstream-sync4-20261002 .worktrees/upstream-sync4-20261002 origin/staging +cd .worktrees/upstream-sync4-20261002 +git log -1 --oneline # 应 ≥ 588282c2 +git -C /workspace/yinduzhanxing fetch origin && git -C /workspace/yinduzhanxing log -1 --oneline origin/main # 0a6696c5 或更新;更新则先比对新增提交 +grep -oE "^## BUG-[0-9]+" docs/BUG_HISTORY.md | sort -t- -k2 -n | tail -1 +python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45 +.venv/bin/python scripts/run_quality_gate.py --profile quick # 记基线 +``` + +上游代码一律用 `git -C /workspace/yinduzhanxing show 0a6696c5:` 或 `git show <提交> -- ` 读取,不在上游工作树里做任何改动。 diff --git a/docs/tasks/TASK-yoga-lunar-node-consistency-20261002.md b/docs/tasks/TASK-yoga-lunar-node-consistency-20261002.md index 317f2e39..14026ab1 100644 --- a/docs/tasks/TASK-yoga-lunar-node-consistency-20261002.md +++ b/docs/tasks/TASK-yoga-lunar-node-consistency-20261002.md @@ -1,5 +1,7 @@ # TASK · 月亮前后有星格与孤立格对罗睺计都口径不一,同一张盘上出现互相矛盾的格局(2026-10-02) +> **2026-10-02 已并入 `TASK-upstream-sync4-20261002.md` T5(扩到太阳类格局),本单不再单独派发。**以下内容保留作 T5 的依据。 + - 基线:开工时的 `origin/staging`(须在 `codex/consult-upstream-functional-v2-20261002` 合入之后开工,二者都改瑜伽链路) - 分支 / worktree:`codex/yoga-lunar-node-consistency-20261002` / `.worktrees/yoga-lunar-node-consistency-20261002` - 范围:`references/yoga_rules.json` 中月亮类规则、`scripts/yoga_expansion.py` `detect_kemadruma`;只统一罗睺计都的计法,不改其他成立条件。该规则文件与上游 skill(yinduzhanxing)同源,修完把差异告知上游维护者。