From 5a16357fde935683428a5b43233c8ac61550f8ca Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sat, 27 Jun 2026 23:44:56 +0800 Subject: [PATCH] Strengthen finance adjudication promise scoring --- ...djudicator_second_pass_audit_2026_06_27.md | 129 ++++++++++++++++++ mcp_server.py | 10 +- tests/test_mcp_strict_workflow_finance.py | 38 ++++++ 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 docs/research/wealth_adjudicator_second_pass_audit_2026_06_27.md diff --git a/docs/research/wealth_adjudicator_second_pass_audit_2026_06_27.md b/docs/research/wealth_adjudicator_second_pass_audit_2026_06_27.md new file mode 100644 index 00000000..bc77c477 --- /dev/null +++ b/docs/research/wealth_adjudicator_second_pass_audit_2026_06_27.md @@ -0,0 +1,129 @@ +# Wealth Adjudicator Second-Pass Audit (2026-06-27) + +> 目标:在第一轮 `public_wealth_status` 护栏落地后,继续修复财富裁决器的两个核心问题: +> 1. `wealth promise strength` 没有入分 +> 2. `income_growth` 与 `public_wealth_status` 仍会互相吞并 + +--- + +## 1. 本轮修复点 + +本轮没有继续扩新标签,而是只做两件事: + +1. **把 `wealth_promise_strength` 接入 finance adjudicator 显式计分** + - `strong` -> `+20` + - `moderate` -> `+10` +2. **增加 `income_growth` 优先分流** + - 当 `gains_convergence` 很强 + - 且 `wealth/career` 公众财富信号不够强 + - 则优先落 `income_growth` + +这意味着财富裁决器不再只看: + +- `wealth_convergence` +- `gains_convergence` +- `career_convergence` +- `dual dasha` + +而开始把“本命财富 promise”当成正式入分项。 + +--- + +## 2. 新增回归边界 + +本轮新增并跑通两条主仓回归测试: + +1. `Britney-like` + 目标:当收益爆发明显高于公众财富身份信号时,应更偏 `income_growth` +2. `Rihanna-like` + 目标:当 `wealth promise strength = strong` 时,允许从第一轮的 under-lift 状态被抬升到更合理的 `public_wealth_status` + +--- + +## 3. Before / After + +| case | first-pass outcome | second-pass outcome | change | +|---|---|---|---| +| Britney-like breakout income growth | `moderate_probability_window` + `public_wealth_status` | `moderate_probability_window` + `income_growth` | 修复了标签误吸收,收益爆发不再被误说成公众财富身份 | +| Rihanna-like commercial empire visibility | `weak_window_needs_confirmation` 或依赖外层 workaround | `moderate_probability_window` + `public_wealth_status` | 通过 `wealth_promise_strength` 显式入分,终于能把强财富 promise 兑现到标签层 | + +--- + +## 4. 关键结论 + +### 4.1 `wealth promise strength` 已经从“解释层概念”进入“裁决层分数” + +这是本轮最值钱的变化。 + +之前: + +- `Lakshmi / Dhana / Yogi` 模板更多停留在解释和研究文档里 +- finance adjudicator 不真的把它们当分数 + +现在: + +- `wealth_promise_strength` 已成为显式计分输入 + +虽然它还不是最终形态,但财富裁决器已经开始真正吸收本仓现成的财富 promise 资产。 + +### 4.2 `income_growth` 和 `public_wealth_status` 第一次开始分家 + +第一轮护栏虽然堵住了“弱窗口乱贴公众财富标签”,但 `Britney-like` 仍会被误贴成 `public_wealth_status`。 + +第二轮后: + +- `Britney-like` -> `income_growth` +- `Rihanna-like` -> `public_wealth_status` + +这说明财富 adjudicator 不再把所有“财富变好”都说成同一种事。 + +### 4.3 `Rihanna-like` 终于从“强样本漏判”进入“可校准命中” + +第一轮里最刺眼的问题是: + +- `Rihanna` 这种 textbook 级商业财富样本 +- 竟然还抬不起来 + +现在这条样本第一次被 `wealth promise strength` 正式救活。 +这说明问题的确不是“标签词库不够”,而是 promise 分没进来。 + +--- + +## 5. 当前仍未完成的部分 + +本轮虽然把骨架往前推了一截,但还没有结束: + +1. `wealth_promise_strength` 现在还是一个抽象输入,尚未从完整 `full-reading.modules.yogas_doshas + template hooks` 自动汇总 +2. `Lakshmi / Dhana / Yogi` 还没有全部自动折叠成统一 promise 指标 +3. `liquidity_cashout` 依然没有建立独立 uplift 逻辑 +4. `public_wealth_status` 与 `asset_accumulation` 还没有完全分开 + +--- + +## 6. 下一轮最值钱的动作 + +下一轮不该再泛泛讨论“财富准不准”,而应直接做这三件事: + +1. 从 `full-reading.modules.yogas_doshas.dhana_yogas` 自动提取 `wealth_promise_strength` +2. 把 `lakshmi_dhana_activation_chain` / `yogi_asc_tight_orb_wealth` 接成真实 promise hook,而不是手工传入 +3. 增加 `asset_accumulation` vs `public_wealth_status` 的回归样本 + +--- + +## 7. 本轮状态判断 + +本轮可以诚实宣称: + +- 财务裁决器已经不再只是 convergence + dasha 的薄聚合器 +- 本命财富 promise 已开始进入显式计分 +- `income_growth` 与 `public_wealth_status` 已出现第一层真实分流 + +但还不能宣称: + +- 财富 adjudicator 已经完整封顶 +- Lakshmi / Dhana / Yogi 已经全部自动闭环进裁决器 + +更准确的说法是: + +> 财富 adjudicator 已经从“行为护栏阶段”进入“财富 promise 真正入分阶段”, +> 并开始具备区分收益爆发与公众财富身份的裁决能力。 diff --git a/mcp_server.py b/mcp_server.py index 3eebce2f..e2c050d2 100644 --- a/mcp_server.py +++ b/mcp_server.py @@ -149,12 +149,15 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s if route == "finance": score = 0 + wealth_promise = present.get("wealth_promise_strength") + wealth_promise_level = wealth_promise.get("level") if isinstance(wealth_promise, dict) else None score += 15 if present.get("d2_hora") else 0 score += 10 if present.get("d10_dasamsa") else 0 score += 10 if present.get("shadbala") else 0 score += 10 if present.get("ashtakavarga_house_scores") else 0 score += 10 if present.get("vimshottari_current") else 0 score += 10 if present.get("narayana_current") else 0 + score += 20 if wealth_promise_level == "strong" else 10 if wealth_promise_level == "moderate" else 0 score += max( _convergence_score(present.get("wealth_convergence")), _convergence_score(present.get("gains_convergence")), @@ -186,7 +189,12 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s else: verdict = "insufficient_evidence" payout_label = None - if public_wealth_lift and score >= 60: + gains_score = _convergence_score(present.get("gains_convergence")) + wealth_score = _convergence_score(present.get("wealth_convergence")) + career_score = _convergence_score(present.get("career_convergence")) + if gains_score >= 60 and wealth_score < 40 and career_score < 40: + payout_label = "income_growth" + elif public_wealth_lift and score >= 60: payout_label = "public_wealth_status" return { "event_family": "finance", diff --git a/tests/test_mcp_strict_workflow_finance.py b/tests/test_mcp_strict_workflow_finance.py index 8322b209..5e0f6e68 100644 --- a/tests/test_mcp_strict_workflow_finance.py +++ b/tests/test_mcp_strict_workflow_finance.py @@ -42,3 +42,41 @@ def test_finance_public_wealth_label_can_lift_visible_wealth_cases() -> None: assert judgement["score"] == 60 assert judgement["verdict"] == "moderate_probability_window" assert judgement["payout_label"] == "public_wealth_status" + + +def test_finance_prefers_income_growth_when_gains_outrun_public_status_signals() -> None: + judgement = _derive_event_judgement( + "finance", + { + "wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"}, + "gains_convergence": {"convergence_level": "L3", "probability": "50-65%"}, + "vimshottari_current": {"mahadasha": "Venus", "antardasha": "Moon"}, + "narayana_current": {"sign": "Gemini", "lord": "Mercury"}, + }, + [], + ) + + assert judgement["event_family"] == "finance" + assert judgement["score"] == 80 + assert judgement["verdict"] == "moderate_probability_window" + assert judgement["payout_label"] == "income_growth" + + +def test_finance_strong_wealth_promise_can_unlock_public_wealth_status() -> None: + judgement = _derive_event_judgement( + "finance", + { + "wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"}, + "gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"}, + "career_convergence": {"convergence_level": "L1", "probability": "+15-20%"}, + "vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"}, + "narayana_current": {"sign": "Taurus", "lord": "Venus"}, + "wealth_promise_strength": {"level": "strong", "source": "dhana_yogas"}, + }, + [], + ) + + assert judgement["event_family"] == "finance" + assert judgement["score"] == 60 + assert judgement["verdict"] == "moderate_probability_window" + assert judgement["payout_label"] == "public_wealth_status"