Auto-derive finance promise strength

This commit is contained in:
732642856
2026-06-27 23:53:53 +08:00
parent 5a16357fde
commit 4cd9b9e756
3 changed files with 230 additions and 1 deletions
@@ -0,0 +1,163 @@
# Wealth Adjudicator Third-Pass Audit (2026-06-27)
> 目标:把 `wealth_promise_strength` 从“手工喂入的测试字段”推进到“可由仓内真源自动折叠”的真实裁决输入。
---
## 1. 本轮完成了什么
本轮没有新增财富标签,也没有继续扩 promise 来源。
只完成了一件关键工作:
**让 `strict_workflow -> _collect_strict_evidence("finance")` 能从**
- `full-reading.modules.yogas_doshas.dhana_yogas`
**自动折叠出**
- `wealth_promise_strength`
当前折叠规则非常克制:
- 至少一条 `strong` Dhana Yoga -> `level = strong`
- 否则至少一条 `moderate` Dhana Yoga -> `level = moderate`
- 否则 -> `weak`
- 没有 `dhana_yogas` -> `None`
并产出结构:
```json
{
"level": "strong",
"source": "dhana_yogas",
"count": 2
}
```
---
## 2. 为什么这一步值钱
前两轮虽然已经把财富裁决器推进到:
- `public_wealth_status` 行为护栏
- `income_growth` vs `public_wealth_status` 分流
- `wealth_promise_strength` 显式入分
但那时还有一个明显的工程短板:
> `wealth_promise_strength` 还是手工喂进去的,不是真正来自 skill 自己的知识资产。
本轮之后,这个短板第一次被抹平了一部分。
也就是说,财富裁决器已经开始从仓内现成的财富真源里,自己长出 promise 分。
---
## 3. 回归结果
### 3.1 自动 promise 折叠验证
使用含有:
- `D2`
- `D10`
- `Shadbala`
- `Ashtakavarga`
- `Vimshottari + Narayana`
- `wealth/gains/career convergence`
- `dhana_yogas = [strong, moderate]`
的 finance strict evidence 场景,当前返回:
- `present_evidence.wealth_promise_strength = {"level":"strong","source":"dhana_yogas","count":2}`
- `event_judgement.score = 100`
- `event_judgement.verdict = moderate_probability_window`
- `event_judgement.payout_label = public_wealth_status`
### 3.2 这里最重要的不是满分,而是“满分仍被压在 moderate”
这个现象其实是好的,而不是坏的。
它说明当前财富裁决器的边界依旧保持保守:
- 即便完整证据场景把分数顶满
- 也不会因为 finance score 很高就直接升级到过满承诺
这和项目当前的真实边界是一致的:
> 我们在提升财富裁决器的结构成熟度,
> 但还没有宣布“精确财富应期已全球封顶”。
---
## 4. 当前状态相较前两轮的提升
### 第一轮
- 加护栏
- 堵住弱窗口乱贴 `public_wealth_status`
### 第二轮
- `wealth_promise_strength` 显式入分
- `income_growth``public_wealth_status` 开始分家
### 第三轮(本轮)
- `wealth_promise_strength` 不再只是手工输入
- 它开始从仓里的 `dhana_yogas` 自动生成
所以本轮的本质是:
> 财富 adjudicator 从“能接收 promise 分”进一步走到了“能自己从真源提 promise 分”。
---
## 5. 仍未完成的部分
这轮虽然很值钱,但还没有到终局:
1. `wealth_promise_strength` 目前只吸收了 `dhana_yogas`
2. `lakshmi_dhana_activation_chain` 还没有自动接入
3. `yogi_asc_tight_orb_wealth` 还没有自动接入
4. `asset_accumulation` vs `public_wealth_status` 还没有专门回归样本
5. `dominant label + secondary context` 还没建立
---
## 6. 下一轮最值钱的动作
如果继续按 ROI 排序,下一轮最值钱的是:
1.`lakshmi_dhana_activation_chain` 接成第二个自动 promise hook
2.`yogi_asc_tight_orb_wealth` 接成第三个自动 promise hook
3. 然后再看是否需要从单标签走向:
- `dominant label`
- `secondary context`
这样我们就能处理你前面提到的下一类样本:
- 收益爆发很强
- 同时公众事业可见度也不低
而不是只能二选一硬切。
---
## 7. 本轮状态判断
本轮可以诚实宣称:
- 财富 adjudicator 已经开始自动吸收仓内 `Dhana Yoga` 真源
- `wealth_promise_strength` 已从手工测试输入升级为自动折叠输入
- 当前保守边界仍在,没有因为自动 promise 折叠就开始乱给高承诺
但还不能宣称:
- 全部财富 promise 资产已自动闭环
- `Lakshmi / Yogi / Dhana` 三路来源都已折叠完成
更准确的说法是:
> 财富 adjudicator 已进入“自动 promise 折叠”的第三阶段,
> 现在不再只是规则聚合器,而开始真正从 skill 自己的财富知识资产中抽取裁决分数。
+27
View File
@@ -108,6 +108,32 @@ def _convergence_score(convergence: Any) -> int:
return mapping.get(level, 0)
def _derive_wealth_promise_strength(modules: Dict[str, Any]) -> Optional[Dict[str, Any]]:
yogas_doshas = modules.get("yogas_doshas") if isinstance(modules, dict) else {}
dhana = yogas_doshas.get("dhana_yogas") if isinstance(yogas_doshas, dict) else {}
yogas = dhana.get("yogas") if isinstance(dhana, dict) else None
if not isinstance(yogas, list) or not yogas:
return None
strengths = [
str(row.get("strength", "")).lower()
for row in yogas
if isinstance(row, dict)
]
if any(level == "strong" for level in strengths):
level = "strong"
elif any(level == "moderate" for level in strengths):
level = "moderate"
else:
level = "weak"
return {
"level": level,
"source": "dhana_yogas",
"count": len(yogas),
}
def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[str]) -> Dict[str, Any]:
if route == "relationship":
score = 0
@@ -290,6 +316,7 @@ def _collect_strict_evidence(route: str, result: Dict[str, Any]) -> Dict[str, An
"wealth_convergence": domain_activations.get("wealth_family"),
"gains_convergence": domain_activations.get("gains_wishes"),
"career_convergence": domain_activations.get("career_status"),
"wealth_promise_strength": _derive_wealth_promise_strength(modules),
}
missing = [key for key, value in present.items() if key not in {
"gains_convergence", "career_convergence"
+40 -1
View File
@@ -3,7 +3,7 @@
from __future__ import annotations
from mcp_server import _derive_event_judgement
from mcp_server import _collect_strict_evidence, _derive_event_judgement
def test_finance_public_wealth_label_requires_at_least_moderate_window() -> None:
@@ -80,3 +80,42 @@ def test_finance_strong_wealth_promise_can_unlock_public_wealth_status() -> None
assert judgement["score"] == 60
assert judgement["verdict"] == "moderate_probability_window"
assert judgement["payout_label"] == "public_wealth_status"
def test_collect_strict_evidence_finance_derives_wealth_promise_from_dhana_yogas() -> None:
result = {
"modules": {
"varga_full": {"D2_Hora": {"summary": "ok"}, "D10_Dasamsa": {"summary": "ok"}},
"shadbala": {"planets": {"Venus": {"total_rupa": 8.2}}},
"ashtakavarga": {"house_scores": {"2": 31, "11": 36}},
"dasha": {"current_dasha": {"mahadasha": "Venus", "antardasha": "Mercury"}},
"narayana_dasha": {"current_dasha": {"sign": "Taurus", "lord": "Venus"}},
"dasa_convergence": {
"domain_activations": {
"wealth_family": {"convergence_level": "L1", "probability": "+15-20%"},
"gains_wishes": {"convergence_level": "L1", "probability": "+15-20%"},
"career_status": {"convergence_level": "L1", "probability": "+15-20%"},
}
},
"yogas_doshas": {
"dhana_yogas": {
"yogas": [
{"type": "Dhana Yoga", "strength": "strong"},
{"type": "Dhana Yoga", "strength": "moderate"},
],
"summary": "Dhana Yoga检测:共2个格局",
}
},
}
}
strict = _collect_strict_evidence("finance", result)
present = strict["present_evidence"]
assert present["wealth_promise_strength"] == {
"level": "strong",
"source": "dhana_yogas",
"count": 2,
}
assert strict["event_judgement"]["score"] == 100
assert strict["event_judgement"]["verdict"] == "moderate_probability_window"
assert strict["event_judgement"]["payout_label"] == "public_wealth_status"