Strengthen finance adjudication promise scoring

This commit is contained in:
732642856
2026-06-27 23:44:56 +08:00
parent dd0828a455
commit 5a16357fde
3 changed files with 176 additions and 1 deletions
@@ -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 真正入分阶段”,
> 并开始具备区分收益爆发与公众财富身份的裁决能力。
+9 -1
View File
@@ -149,12 +149,15 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s
if route == "finance": if route == "finance":
score = 0 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 += 15 if present.get("d2_hora") else 0
score += 10 if present.get("d10_dasamsa") else 0 score += 10 if present.get("d10_dasamsa") else 0
score += 10 if present.get("shadbala") 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("ashtakavarga_house_scores") else 0
score += 10 if present.get("vimshottari_current") else 0 score += 10 if present.get("vimshottari_current") else 0
score += 10 if present.get("narayana_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( score += max(
_convergence_score(present.get("wealth_convergence")), _convergence_score(present.get("wealth_convergence")),
_convergence_score(present.get("gains_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: else:
verdict = "insufficient_evidence" verdict = "insufficient_evidence"
payout_label = None 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" payout_label = "public_wealth_status"
return { return {
"event_family": "finance", "event_family": "finance",
+38
View File
@@ -42,3 +42,41 @@ def test_finance_public_wealth_label_can_lift_visible_wealth_cases() -> None:
assert judgement["score"] == 60 assert judgement["score"] == 60
assert judgement["verdict"] == "moderate_probability_window" assert judgement["verdict"] == "moderate_probability_window"
assert judgement["payout_label"] == "public_wealth_status" 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"