Track finance promise source diversity

This commit is contained in:
732642856
2026-06-28 00:05:29 +08:00
parent 4cd9b9e756
commit ce012d4587
3 changed files with 249 additions and 7 deletions
@@ -0,0 +1,192 @@
# Wealth Adjudicator Fourth-Pass Audit (2026-06-28)
> 目标:把 `wealth_promise_strength` 从“单一路径强弱标签”推进到“带来源结构的 promise folding engine”。
---
## 1. 本轮核心变化
前三轮我们已经完成:
1. `public_wealth_status` 行为护栏
2. `income_growth``public_wealth_status` 分流
3. `dhana_yogas -> wealth_promise_strength` 自动折叠
本轮继续往前走了一层:
**`wealth_promise_strength` 不再只返回**
- `level`
- `count`
而开始返回:
- `primary_source`
- `supporting_sources`
- `source_diversity`
当前输出结构变成:
```json
{
"level": "strong",
"primary_source": "dhana_lakshmi_hooks",
"supporting_sources": ["dhana", "lakshmi"],
"count": 2,
"source_diversity": 2
}
```
---
## 2. 为什么这一步重要
用户此前指出了一个非常关键的工程问题:
> “更多 = 更强”还不够,
> 还要区分“同一路径重复命中”与“多条独立财富路径共同命中”。
这轮正是在解决这个问题。
以前的 promise folding 更像:
- 有强格局 / 没有强格局
现在开始变成:
- 财富承诺有多强
- 它主要来自哪条路径
- 是单一来源,还是多来源交叉支持
这意味着我们第一次开始把“来源分散度”当成财富 promise 可信度的一部分。
---
## 3. 本轮回归边界
### 3.1 纯 Dhana 路径
输入:
- 两条 `Dhana Yoga`
-`Lakshmi`
当前自动折叠输出:
```json
{
"level": "strong",
"primary_source": "dhana_yogas",
"supporting_sources": ["dhana"],
"count": 2,
"source_diversity": 1
}
```
### 3.2 Dhana + Lakshmi 双路径
输入:
- 一条 `Dhana Yoga`
- 一条 `Lakshmi Yoga`
当前自动折叠输出:
```json
{
"level": "strong",
"primary_source": "dhana_lakshmi_hooks",
"supporting_sources": ["dhana", "lakshmi"],
"count": 2,
"source_diversity": 2
}
```
这个差别就是本轮真正新增的硬度。
---
## 4. 关键结论
### 4.1 Promise folding 已从“有无强信号”进入“来源结构化”
现在财富 promise 已经不只是一个粗粒度强弱值。
它开始回答:
-`Dhana` 一路在说话
- 还是 `Dhana + Lakshmi` 两路同时在说话
这对后面做二级权重非常关键。
### 4.2 `source_diversity` 比单纯 `count` 更值钱
`count = 3` 不一定比 `count = 2` 更强。
因为:
- 3 条都来自 `Dhana`
-`Dhana + Lakshmi + Yogi` 三路各 1 条
在解释可靠性上不是一回事。
本轮把这个结构性差异正式落入了主链。
### 4.3 这仍然是保守推进,不是一次性做胖
本轮没有硬接完整 `Yogi` 系统。
原因很明确:
- 当前主链没有结构化的 Yogi 输出
- 若强行接入,容易制造“看似高级、其实假结构”的问题
所以本轮只把:
- `Dhana`
- `Lakshmi`
两路先接实,并给 `Yogi` 留出下一轮的合理接入口。
---
## 5. 目前还没完成的部分
1. `Yogi` 还没有进入自动 promise folding
2. `primary_source` 目前仍是规则化字符串,不是更细颗粒的 source ranking
3. `source_diversity` 还没有真正反馈到 finance judgement 权重
4. `dominant label + secondary context` 仍未启动
---
## 6. 下一轮最值钱的动作
在当前节奏下,下一轮最值得做的是:
1.`Yogi` 接入一个**轻量但真实**的 promise hook
- 不重建整套 Yogi 系统
- 只接可结构化、可验证的正向财富支持信号
2.`source_diversity` 真正进入二级权重
3. 再决定是否需要从单标签推进到:
- `dominant label`
- `secondary context`
---
## 7. 本轮状态判断
本轮可以诚实宣称:
- 财富 adjudicator 已经不只会自动提取 promise 强弱
- 它开始区分 promise 来源的分散度与结构
- `Dhana``Lakshmi` 不再被揉成一个黑箱来源
但还不能宣称:
- `Yogi` 已正式进入自动 folding
- `source_diversity` 已经回写到最终裁决权重
更准确的说法是:
> 财富 adjudicator 已进入“promise source folding”第四阶段,
> 开始从“自动提取强弱”升级到“自动提取来源结构”,这为后续真正的二级权重与多标签裁决打下了地基。
+17 -6
View File
@@ -115,11 +115,18 @@ def _derive_wealth_promise_strength(modules: Dict[str, Any]) -> Optional[Dict[st
if not isinstance(yogas, list) or not yogas:
return None
strengths = [
str(row.get("strength", "")).lower()
for row in yogas
if isinstance(row, dict)
]
strengths = []
sources = set()
for row in yogas:
if not isinstance(row, dict):
continue
strengths.append(str(row.get("strength", "")).lower())
row_type = str(row.get("type", "")).lower()
if "lakshmi" in row_type:
sources.add("lakshmi")
elif "dhana" in row_type:
sources.add("dhana")
if any(level == "strong" for level in strengths):
level = "strong"
elif any(level == "moderate" for level in strengths):
@@ -127,10 +134,14 @@ def _derive_wealth_promise_strength(modules: Dict[str, Any]) -> Optional[Dict[st
else:
level = "weak"
supporting_sources = sorted(sources) or ["dhana"]
primary_source = "dhana_lakshmi_hooks" if len(supporting_sources) > 1 else "dhana_yogas"
return {
"level": level,
"source": "dhana_yogas",
"primary_source": primary_source,
"supporting_sources": supporting_sources,
"count": len(yogas),
"source_diversity": len(supporting_sources),
}
+40 -1
View File
@@ -113,9 +113,48 @@ def test_collect_strict_evidence_finance_derives_wealth_promise_from_dhana_yogas
present = strict["present_evidence"]
assert present["wealth_promise_strength"] == {
"level": "strong",
"source": "dhana_yogas",
"primary_source": "dhana_yogas",
"count": 2,
"source_diversity": 1,
"supporting_sources": ["dhana"],
}
assert strict["event_judgement"]["score"] == 100
assert strict["event_judgement"]["verdict"] == "moderate_probability_window"
assert strict["event_judgement"]["payout_label"] == "public_wealth_status"
def test_collect_strict_evidence_finance_combines_dhana_and_lakshmi_hooks() -> 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": "moderate"},
{"type": "Lakshmi Yoga", "strength": "strong"},
],
"summary": "Dhana/Lakshmi检测:共2个格局",
}
},
}
}
strict = _collect_strict_evidence("finance", result)
assert strict["present_evidence"]["wealth_promise_strength"] == {
"level": "strong",
"primary_source": "dhana_lakshmi_hooks",
"count": 2,
"source_diversity": 2,
"supporting_sources": ["dhana", "lakshmi"],
}