Track finance promise source diversity
This commit is contained in:
@@ -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
@@ -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),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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"],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user