Skip to content

Commit 0f7ce53

Browse files
audit pending relationship rule boundaries
1 parent e210389 commit 0f7ce53

19 files changed

Lines changed: 136 additions & 109 deletions

frontend/app.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -759,9 +759,10 @@ function _buildEvidenceDimensions(dimensions){
759759
}
760760
h += '</div>';
761761
if (item.secondary) h += '<div class=evidence-secondary>次要方向:' + esc(item.secondary) + '</div>';
762-
let pending = item.pending_review || [];
763-
for (let k = 0; k < pending.length; k++){
764-
h += '<div class=evidence-pending>' + esc(pending[k].label) + ':' + esc(pending[k].value) + '(待复核规则)</div>';
762+
let context = item.structural_context || [];
763+
for (let k = 0; k < context.length; k++){
764+
let boundary = context[k].boundary || '仅作传统结构参考,不进入评分';
765+
h += '<div class=evidence-context><span>' + esc(context[k].label) + ':' + esc(context[k].value) + '</span><small>' + esc(boundary) + '</small></div>';
765766
}
766767
h += '</div>';
767768
}

frontend/style.css

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,10 +1214,11 @@ html.dark .tag-xi{background:#1a3b2a;color:#6ee7b7}
12141214
.evidence-signal{display:flex;justify-content:space-between;gap:8px;font-size:11px;min-width:0}
12151215
.evidence-signal span{color:var(--text-tertiary);overflow-wrap:anywhere}
12161216
.evidence-signal strong{color:var(--text);font-weight:600;white-space:nowrap}
1217-
.evidence-secondary,.evidence-pending{
1217+
.evidence-secondary,.evidence-context{
12181218
margin-top:7px;font-size:11px;color:var(--text-secondary);line-height:1.55;
12191219
}
1220-
.evidence-pending{color:var(--gold)}
1220+
.evidence-context{display:flex;flex-direction:column;gap:2px;color:var(--gold)}
1221+
.evidence-context small{color:var(--text-tertiary);font-size:10px}
12211222
.evidence-boundaries{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
12221223
.evidence-boundaries strong{font-size:11px;color:var(--text-secondary)}
12231224
.evidence-boundaries ul{margin:5px 0 0 17px}

references/advanced-techniques.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@
166166
### 关键应用
167167

168168
- **帝旺 = 禄地**:能量顶峰,也是物极必反点
169-
- **墓库**旺者为库(可开发),衰者为墓(被埋没)。需冲/刑打开
169+
- **墓库**旺者传统上可称“库”、衰者可称“墓”,但是否形成可用资源及刑冲作用,需结合透藏、旺衰和整体结构;不以冲/刑单独判定“打开”。
170170
- **绝处逢生**:日干/用神坐绝,但地支有合局解救 → 绝地反击
171171
- **长生逢冲**:喜神长生被冲 = 根基动摇;忌神长生被冲 = 阻其壮大(吉)
172172

references/calibration-notes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@
6363
| 2024 | 红鸾+伏吟+自刑 | ★★(新感情)| 分手 | 方向错 |
6464
| 2025 | 无感情触发 | 空窗 | 空窗 | 准确 |
6565
| 2026 | 天喜合动+偏财 | 异性缘增→可能恋爱 | 异性缘大增(进行中)| 进行中 |
66-
| 2029 | 桃花合入夫妻宫 | ★★★ | 待验证 | |
67-
| 2030 | 天喜+夫妻宫冲 | ★★★ | 待验证 | |
66+
| 2029 | 桃花合入夫妻宫 | ★★★ | 未来样本,尚未发生 | 不纳入已验证规则 |
67+
| 2030 | 天喜+夫妻宫冲 | ★★★ | 未来样本,尚未发生 | 不纳入已验证规则 |
6868

6969
**新增时序发现**:天喜合动不是瞬间触发,而是"先异性缘积累 → 后落地"。2026年5月验证了前半段。
7070

references/modern-vs-engine.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@
8686

8787
| | 权威观点 | 引擎现状 | 差距 |
8888
|---|---|---|---|
89-
| **陆致极** | "会合期"概念 — 生旺库的会合应期;墓库理论 — "墓"与"库"有区别 | 引擎有大运流年事件检测 | ⚠️ 缺少生辰库会合应期 |
89+
| **陆致极** | "会合期"概念 — 生旺库的会合应期;墓库理论 — "墓"与"库"有区别 | 引擎记录墓库六冲结构,但不自动推出开库应期 | ⚠️ 缺少经过验证的生辰库会合应期 |
9090
| **梁湘润** | 大运天干管前五年、地支管后五年;"上下五年分得清" | 引擎有大运权重(6:4) | ✅ 基本对齐 |
91-
| **陆致极** | 空亡的减凶与添凶作用 | 引擎已实现空亡降强度 | ✅ 基本对齐 |
91+
| **陆致极** | 空亡的减凶与添凶作用 | 部分事件保留空亡提示;具体减弱幅度仍按事件类型单独审计 | ⚠️ 不宣称统一降强度 |
9292

9393
### 差距
94-
- 缺少**墓库刑冲应期**冲开墓库是关键时间节点
94+
- 未启用未经验证的**墓库刑冲应期**目前只记录结构,不能把“冲开墓库”当作关键时间节点
9595

9696
---
9797

scripts/bazi_engine/body_use.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
"""宾主体用分析 + 墓库应期检测
1+
"""宾主体用分析 + 墓库结构提示
22
33
宾主体用: 段建业《段氏理象学》— 比劫/印/食伤为"体"(自身资源), 财/官为"用"(外部追求)
4-
墓库应期: 辰戌丑未逢冲为关键时间节点
4+
墓库关系: 只记录辰戌/丑未六冲,不能单独推出关键时间节点
55
"""
66

77
from dataclasses import dataclass
@@ -14,7 +14,7 @@ class BodyUseResult:
1414
body_count: int # 体神数量
1515
use_count: int # 用神数量
1616
balance_note: str # 体用平衡说明
17-
mu_ku_signals: list[str] # 墓库刑冲信号
17+
mu_ku_signals: list[str] # 墓库六冲结构提示
1818

1919
def to_dict(self) -> dict:
2020
return {
@@ -29,7 +29,7 @@ def to_dict(self) -> dict:
2929

3030
def analyze_body_use(pillars_data: list[dict], interactions: dict,
3131
luck_pillars: list, annual_scans) -> BodyUseResult:
32-
"""宾主体用分析 + 墓库应期检测"""
32+
"""宾主体用分析 + 墓库结构提示"""
3333
body = []
3434
use = []
3535

@@ -62,7 +62,7 @@ def analyze_body_use(pillars_data: list[dict], interactions: dict,
6262
else:
6363
balance_note = "体用配置偏单一,需结合大运流年看发展方向。"
6464

65-
# 墓库应期检测: 辰戌丑未逢冲
65+
# 墓库结构提示: 辰戌/丑未的实际六冲不自动升级为应期
6666
mu_ku = {"辰", "戌", "丑", "未"}
6767
mu_ku_signals = []
6868

@@ -72,7 +72,7 @@ def analyze_body_use(pillars_data: list[dict], interactions: dict,
7272
parts = inter.get("participants", [])
7373
if len(parts) == 2 and set(parts) <= mu_ku:
7474
mu_ku_signals.append(
75-
f"原局{'+'.join(parts)}冲→墓库逢冲,重大转机信号"
75+
f"原局{'+'.join(parts)}冲→墓库六冲结构参考,不单独判定转机"
7676
)
7777

7878
# 流年/大运逢墓库冲
@@ -81,7 +81,7 @@ def analyze_body_use(pillars_data: list[dict], interactions: dict,
8181
dn_b = scan.dayun_branch.value if scan.dayun_branch else ""
8282
if ln_b in mu_ku and dn_b and dn_b in mu_ku and ln_b != dn_b:
8383
mu_ku_signals.append(
84-
f"{scan.year}年流年{ln_b}冲大运{dn_b}墓库应期,关键转折年"
84+
f"{scan.year}年流年{ln_b}冲大运{dn_b}墓库六冲结构参考,不单独判定转折"
8585
)
8686

8787
return BodyUseResult(

scripts/bazi_engine/changsheng_analysis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def get_state_interpretation(state: str, branch: Dizhi, day_master: Tiangan) ->
7373
elif state == "帝旺":
7474
special = "【阳刃】能量顶峰亦最危险,物极必反,需防冲动"
7575
elif state == "墓":
76-
special = "【墓库】辰戌丑未,能量封存。旺为库(待开发资源),衰为墓(被埋没),需刑冲激发"
76+
special = "【墓库】辰戌丑未,传统上区分库与墓;是否形成可用资源及刑冲作用,需结合透藏、旺衰和整体结构"
7777
elif state == "绝":
7878
special = "【绝地】旧事物终结,等待新生。需看有无合局解救(绝处逢生)"
7979

scripts/bazi_engine/interactions.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ class MukuChongResult:
228228
tu_boost: int # 土气放大倍数
229229
zaqi_damaged: list[str] # 被损毁的杂气五行
230230
health_note: str # 健康影响
231-
wealth_note: str # 财运影响(墓库为财库时冲开=财变
231+
wealth_note: str # 财务主题备注(仅在已确认财库时保留
232232
note: str
233233

234234
def to_dict(self) -> dict:
@@ -257,8 +257,8 @@ def find_muku_chong(branches_and_labels: list[tuple[Dizhi, str]]) -> list[Intera
257257
inter_type="墓库六冲",
258258
participants=(bi, bj),
259259
pillar_labels=(branches_and_labels[i][1], branches_and_labels[j][1]),
260-
result="墓库关系待验",
261-
notes=[info["note"]],
260+
result="仅记录墓库六冲结构",
261+
notes=[info["note"], "不据此单独推断开库、财运或人生转折。"],
262262
))
263263
return results
264264

scripts/bazi_engine/liunian/calibration.py

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"""校准规则 — 十神出处 + 性格联动 + 信号合并 + 事件矛盾检查。"""
2-
from .._constants import chong_pair
32
from ..enums import Dizhi, Tiangan
43
from .signal import EventSignal
54
from .utils import _make_prediction
@@ -178,35 +177,15 @@ def _check_event_conflicts(events: list[EventSignal],
178177
"""事件矛盾检查:检测同一年内多个信号之间的冲突,修正强度和方向。
179178
180179
规则:
181-
- 桃花+空亡 → 强度-1,"浮桃花不落地"
182-
- 桃花+冲夫妻宫 → 方向变中性
180+
- 桃花+空亡只保留结构备注,不自动降低强度
183181
- 事业+伤官见官 → 同时输出上升/冲突两面
184182
- 财+比劫夺财 → 标注社交/感情消费
185-
- 婚嫁+冲夫妻宫 → 方向变中性
183+
- 日支六冲只作结构提示,不自动改变方向
186184
"""
187185
# 收集事件类别
188186
cats = {e.category for e in events}
189187
ev_map = {e.category: e for e in events}
190188

191-
# 检查流年是否冲夫妻宫(日支)
192-
chong_fuqi = (ln_dz == chong_pair(day_branch)) if day_branch else False
193-
194-
# 桃花+冲夫妻宫 → 中性
195-
if "桃花" in ev_map and chong_fuqi:
196-
e = ev_map["桃花"]
197-
if e.direction == "正面":
198-
e.direction = "中性"
199-
e.notes.append("流年冲夫妻宫→桃花机会与波动并存,感情节点期")
200-
if e.strength >= 2:
201-
e.strength -= 1
202-
203-
# 婚嫁+冲夫妻宫 → 中性
204-
if "婚嫁" in ev_map and chong_fuqi:
205-
e = ev_map["婚嫁"]
206-
if e.direction == "正面":
207-
e.direction = "中性"
208-
e.notes.append("婚年逢冲夫妻宫→婚姻建立可能伴随压力,需沟通")
209-
210189
# 桃花+财运同时出现 → 感情消费提示
211190
if "桃花" in cats and "财运" in cats:
212191
ev_map["桃花"].notes.append("桃花+财运同现→社交和感情消费增加")
@@ -222,12 +201,12 @@ def _check_event_conflicts(events: list[EventSignal],
222201
ev_map["健康"].notes.append("健康+事业同现→工作/学业压力可能影响身体")
223202

224203
# 桃花负面(分手型) + 婚嫁正面 → 婚嫁降级
225-
# 仅当桃花负面源于分手信号(冲夫妻宫/卯辰穿)才降级, 竞争型(劫财)不降
204+
# 仅当桃花负面明确来自卯辰穿时才降级;日支六冲本身不决定分手方向。
226205
if "桃花" in ev_map and "婚嫁" in ev_map:
227206
th = ev_map["桃花"]
228207
hj = ev_map["婚嫁"]
229208
th_trig = str(th.triggers)
230-
is_breakup_type = ("冲夫妻宫" in th_trig or "卯辰穿" in th_trig)
209+
is_breakup_type = "卯辰穿" in th_trig
231210
if th.direction == "负面" and hj.direction == "正面" and is_breakup_type:
232211
hj.direction = "中性"
233212
hj.strength = max(1, hj.strength - 1)

scripts/bazi_engine/liunian/events/caiyun.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
_has_branch_interaction,
99
_has_tiangan_wuhe,
1010
_is_ke_wx,
11-
_is_kongwang,
12-
_kongwang_branches,
1311
_make_prediction,
1412
_wealth_magnitude,
1513
get_caiku_branch,
@@ -89,10 +87,6 @@ def detect_caiyun_signals(ln_stem: Tiangan, ln_branch: Dizhi,
8987
if lu_cai and _has_branch_interaction(ln_branch, lu_cai, "六冲"):
9088
s.add(-2, "冲禄→预算调整主题")
9189

92-
kw_cy = _kongwang_branches(day_master, day_branch)
93-
if _is_kongwang(ln_branch, kw_cy) and is_cai:
94-
s.add(-1, "财星落空亡→财务信号待验")
95-
9690
if s.is_significant():
9791
magnitude = _wealth_magnitude(s.total, s.triggers())
9892
signals.append(EventSignal(

0 commit comments

Comments
 (0)