@furongjun1999/dsh-memory 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -47
- package/codebuddy/CODEBUDDY.md +6 -6
- package/docs/README.md +148 -144
- package/docs/discipline/harnesses.yaml +16 -8
- package/docs/discipline/templates/zcode-user.md.tmpl +49 -0
- package/docs/eval/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_/345/205/255/345/256/266/350/256/260/345/277/206/347/263/273/347/273/237/345/220/214/345/260/272/345/256/236/346/265/213_v3.1.md +340 -0
- package/docs/eval/N225_/347/264/242/345/274/225/346/227/245/345/277/227/351/235/236/345/257/271/350/261/241/350/243/205/350/275/275/351/235/242/347/261/273/345/236/213/351/227/270_v1.0.md +2 -2
- package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +1 -1
- package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.1.md +1 -1
- package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/344/270/216/351/224/256/347/261/273/345/236/213/351/227/270_v1.1.md +1 -1
- package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/345/212/240/350/275/275/344/270/216/345/207/255/346/215/256/346/230/216/346/226/207/351/230/237/345/210/227_v1.0.md +2 -2
- package/docs/eval/issue50_/345/205/203/346/225/260/346/215/256/351/200/217/344/274/240/344/270/216/345/205/234/345/272/225_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +5 -5
- package/docs/eval/issue50_/345/215/212/351/207/215/345/244/215/345/276/205/345/256/232/345/244/215/346/240/270_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +9 -9
- package/docs/eval/issue50_/345/276/205/345/256/232/345/244/215/346/240/270/345/205/245/351/230/237_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +4 -4
- package/docs/eval/issue50_/351/207/215/350/246/201/345/272/246/345/220/214/346/272/220/344/270/216/344/277/235/346/212/244/350/257/255/344/271/211_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +1 -1
- package/docs/eval/issue51_/344/270/200/351/224/256/345/256/211/350/243/205/345/244/261/350/264/245_/345/275/222/345/261/236/345/210/244/345/256/232_v1.0.md +1 -1
- package/docs/eval/issue52_/346/235/241/344/273/266/345/205/210/350/241/214/344/270/216/346/210/252/346/226/255/345/217/257/350/247/202/346/265/213_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +3 -3
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/242/345/217/230/346/233/264/345/215/225/344/270/216/345/233/236/346/273/232/345/216/237/350/257/255_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +3 -3
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/243/345/207/206/345/205/245/350/257/273/346/225/260_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +7 -7
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/200/346/211/271_/346/216/245/347/272/277/344/270/216/347/255/211/344/273/267/345/217/230/346/215/242_v1.0.md +2 -2
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/211/346/211/271_/351/227/250/347/246/201/350/275/254/346/255/243/344/270/216/350/260/203/345/272/246/346/255/242/350/241/200/344/270/216/351/227/250/346/216/247/346/224/266/345/217/243_v1.0.md +1 -1
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/272/214/346/211/271_/344/276/235/350/265/226/351/200/217/344/274/240/344/270/216/345/257/271/346/213/215/345/217/243/345/276/204/344/270/216/350/264/237/347/274/223/345/255/230_v1.0.md +7 -7
- package/docs/eval//345/207/272/350/264/247/351/235/242/345/206/222/347/203/237_/350/277/233/350/264/247/351/227/250/347/246/201_v1.0.md +10 -10
- package/docs/eval//345/217/221/345/270/20307_/345/244/226/351/203/250/346/212/245/345/221/212/345/233/233/346/211/271/344/277/256/345/244/215/344/270/216/346/217/222/344/273/266/351/235/242/345/212/240/345/233/272_v1.0.md +4 -0
- package/docs/eval//345/217/221/345/270/20308_/350/207/252/350/277/255/344/273/243/344/270/216/347/235/241/347/234/240_/345/233/276/346/243/200/347/264/242/350/267/257/344/270/216/346/235/203/351/207/215_v1.0.md +1 -1
- package/docs/eval//345/217/221/345/270/20311_/345/244/226/346/212/245/345/205/255/350/277/236/344/277/256/344/270/216/344/270/226/347/225/214/346/250/241/345/236/213/345/272/225/345/272/247_v1.0.md +91 -0
- package/docs/eval//345/275/222/344/270/200/345/261/202/347/274/272/347/234/201/347/277/273/345/205/263_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +2 -2
- package/docs/eval//347/224/250/346/210/267/350/243/201/345/206/263/345/244/204/347/275/256_/347/254/254/344/270/200/346/211/271_v1.0.md +195 -0
- package/docs/eval//347/224/250/346/210/267/350/243/201/345/206/263/345/244/204/347/275/256_/347/254/254/344/272/214/346/211/271B6_/346/234/254/346/234/272/350/267/257/345/276/204/347/233/270/345/257/271/345/214/226_v1.0.md +78 -0
- package/docs/eval//347/253/257/345/210/260/347/253/257LoCoMoQA/345/220/214/345/217/243/345/276/204/345/257/271/347/205/247_v1.0.md +1 -1
- package/docs/eval//347/253/257/345/210/260/347/253/257/345/271/262/346/211/260/346/261/240/350/257/204/346/265/213_/347/241/256/345/256/232/346/200/247/350/243/201/345/206/263vsLLM_judge_v1.1.md +3 -3
- package/docs/eval//347/254/2543/345/261/202stg/347/273/223/346/236/204/347/264/242/345/274/225_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +1 -1
- package/docs/eval//347/274/226/347/240/201/351/235/242/345/211/215/347/275/256_/345/205/245/345/217/243/350/207/252/344/277/235/350/257/201UTF8/344/270/216/346/226/207/346/234/254open/345/256/210/345/215/253_v1.0.md +1 -1
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v26.md +196 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v27.md +259 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v28.md +217 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v29.md +270 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v30.md +231 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v31.md +281 -0
- package/docs/hive//345/256/211/345/205/250/345/256/241/350/256/241/345/256/236/351/224/232_v0.1.md +1 -1
- package/docs/hive//350/234/202/345/267/242M6_ingest/345/256/236/346/226/275/350/256/241/345/210/222_v0.1.md +1 -1
- package/docs/hive//350/234/202/345/267/242/345/217/214/345/256/236/344/276/213/344/272/222/351/252/214_/350/256/276/350/256/241/345/256/232/347/250/277.md +1 -1
- package/docs/hive//350/234/202/345/267/242/350/256/276/350/256/241_/347/220/206/350/256/272/345/257/271/351/275/220_v0.1.md +17 -17
- package/docs/hive//350/234/202/345/267/242/350/277/255/344/273/243_/345/256/217/350/247/202/344/270/216/347/276/244/344/275/223/350/260/203/345/272/246_v0.1.md +1 -1
- package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.10.md +2 -2
- package/docs/mdcg//345/212/237/350/203/275/350/260/203/347/224/250/346/230/240/345/260/204/350/241/250_v0.1.md +42 -41
- package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +29 -8
- package/docs/mdcg//347/235/241/347/234/240/345/221/250/346/234/237_/350/277/220/347/273/264/345/211/215/346/217/220/344/270/216/347/273/264/346/212/244/346/214/207/345/215/227_v1.0.md +71 -1
- package/docs/plans//345/205/250/344/270/255/346/226/207/347/274/226/347/240/201/344/270/216/350/234/202/345/267/242/344/273/273/345/212/241/346/240/207/350/257/206/345/245/221/347/272/246_v2.0.md +1 -1
- package/docs/plans//345/244/232/344/270/273/344/275/223/344/270/226/347/225/214/346/250/241/345/236/213_/345/257/271/351/275/220/350/257/204/344/274/260/344/270/216/350/220/275/345/234/260/350/256/276/350/256/241_v0.1.md +141 -0
- package/docs/plans//347/235/241/347/234/240/344/270/216/350/207/252/350/277/255/344/273/243_/345/212/237/350/203/275/344/274/230/345/214/226/350/256/276/350/256/241_v0.4.md +2 -2
- package/docs/plans//350/257/255/344/271/211/346/227/266/347/251/272/345/233/276/350/241/245/345/205/250_/344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_/350/256/276/350/256/241_v0.1.md +107 -0
- package/docs//345/267/245/344/275/234/347/272/252/345/276/213_/350/256/244/347/237/245/345/233/276/346/235/241/347/233/256_v1.1.json +6 -5
- package/docs//347/247/244_/350/256/260/345/277/206/347/263/273/347/273/237/350/257/204/346/265/213/350/247/204/350/214/203_v2.1.md +225 -0
- package/dsh/cordis-patch-profile-web.example.yml +2 -2
- package/lib/bridge.js +9 -0
- package/lib/hooks.d.ts +8 -1
- package/lib/hooks.js +94 -32
- package/lib/lib/hook_audit.d.ts +55 -0
- package/lib/lib/hook_audit.js +208 -0
- package/lib/lib/mutual.js +5 -1
- package/lib/lib/roleplay_web.js +17 -2
- package/md_cg/auditview.py +248 -0
- package/md_cg/bench_e2e_judge.py +4 -2
- package/md_cg/branches.py +29 -3
- package/md_cg/consistency.py +38 -13
- package/md_cg/datapath.py +38 -11
- package/md_cg/forgetting.py +15 -2
- package/md_cg/freshness.py +32 -11
- package/md_cg/ghostref.py +130 -0
- package/md_cg/judgment_manifest.py +7 -0
- package/md_cg/mcp_server.py +58 -1
- package/md_cg/mdcg.py +4923 -4822
- package/md_cg/mdcos.py +31 -12
- package/md_cg/nodefile.py +77 -13
- package/md_cg/readcache.py +29 -4
- package/md_cg/selfreport.py +12 -3
- package/md_cg/sleep.py +129 -13
- package/md_cg/sources.py +1 -1
- package/md_cg/state_events.py +131 -0
- package/md_cg/sustain.py +1436 -1436
- package/md_cg/test_auditview.py +277 -0
- package/md_cg/test_autonomy_modes.py +2 -1
- package/md_cg/test_boot_openblas_guard.py +197 -0
- package/md_cg/test_ccg_form_parity.py +95 -4
- package/md_cg/test_cons200_scan_selection.py +4 -2
- package/md_cg/test_datapath_device_name.py +62 -3
- package/md_cg/test_generation_guard.py +5 -2
- package/md_cg/test_ghostref.py +182 -0
- package/md_cg/test_interop.py +1 -1
- package/md_cg/test_issue52_scan_condition_first.py +1 -1
- package/md_cg/test_lock.py +16 -7
- package/md_cg/test_m3_h9_semantic_guard.py +1 -1
- package/md_cg/test_n230_dirty_replay.py +375 -375
- package/md_cg/test_n238_body_text_parity.py +156 -0
- package/md_cg/test_n276_probe_hoist.py +199 -0
- package/md_cg/test_p4_freshness.py +95 -1
- package/md_cg/test_policy_required_ccg.py +3 -1
- package/md_cg/test_readcache_prodpath.py +66 -0
- package/md_cg/test_sleep.py +58 -1
- package/md_cg/test_sleep_p1.py +218 -2
- package/md_cg/test_state_events.py +178 -0
- package/md_cg/test_time_core_lint.py +8 -1
- package/md_cg/test_writepipe.py +8 -5
- package/md_cg/tokens.py +11 -2
- package/md_cg/writepipe.py +76 -0
- package/package.json +2 -2
- package/skills/plugin.json +1 -1
- package/src/bridge.ts +9 -0
- package/src/hooks.ts +576 -517
- package/src/lib/hook_audit.ts +243 -0
- package/src/lib/mutual.ts +5 -1
- package/src/lib/roleplay_web.ts +17 -2
- package/zcode/AGENTS.md +6 -6
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""幽灵引用检查器(A2 落地):短语层标记 + id 层降级告警——**只标记、不拒收**。
|
|
3
|
+
|
|
4
|
+
背景(多主体世界模型对齐 v0.1 §2 L1「转引不得升级」):CD-WHALE-01(鲸娘语料
|
|
5
|
+
731 轮)发现 C 的现实形态是**自然语言回指**(「上次的香薰蜡烛」「明明讲过的那
|
|
6
|
+
件事」)——被引对象在库里没有任何记录,引用悬空且无任何防线(探针读数:
|
|
7
|
+
短语层零痕迹、id 层「目标晚于自身」零告警)。本模块补两条**标记级**防线:
|
|
8
|
+
|
|
9
|
+
① 短语层:正文以回指短语(「上次的」「之前说的」「明明讲过」)指代一个
|
|
10
|
+
在句内**无可解析出处**(句内无库内 id)的对象时,产出幽灵引用短语清单
|
|
11
|
+
——写入链把它落 `fm.uncertain_refs` 并在出口告警;**不拒收**(回指是
|
|
12
|
+
现实写作的常态,拒收会把正常记忆挡在门外;标记让「不确定」可被后续
|
|
13
|
+
裁决与检索看见)。
|
|
14
|
+
② id 层:正文引用了一个库内目标,但本文档声明的生效起点(valid_from /
|
|
15
|
+
effective_from)**早于**目标创建时刻——「引用了当时尚不存在的目标」。
|
|
16
|
+
产出 late_refs 告警清单;同样**不改建边判定、不拒收**。
|
|
17
|
+
|
|
18
|
+
判据边界(如实):
|
|
19
|
+
· 句级判定:短语所在**句子**([。!?;\n] 为界)内无库内 id ⇒ 幽灵;
|
|
20
|
+
跨句引用(一句短语、邻句 id)不消解标记——保守方向是「宁标勿漏」。
|
|
21
|
+
· 仅写链(MCP op=write)路径生效(与 linkref 同界);库层直调 cg.add
|
|
22
|
+
不经检测。
|
|
23
|
+
· 短语表保守(明确的时间/人称回指词),**不含**「那条/那根」这类泛指示词
|
|
24
|
+
(误报率高,标记面宁可窄);误报后果 = fm 多一个标记。
|
|
25
|
+
· 检测面**不查源节点 id 形态**(不同于 linkref 的 is_linkable_source
|
|
26
|
+
门槛):标记是**内容属性**——无论节点 id 是否合规,正文里的无出处回指
|
|
27
|
+
都值得标记;建边是**图属性**,才需要形态门槛(防图污染)。两者有意
|
|
28
|
+
不同界。**late 面例外**:它消费 linkref 解析出的 targets,源 id 不合
|
|
29
|
+
形态 ⇒ 无 targets ⇒ late 静默不查(与 linkref 同界,2026-10-05 复核
|
|
30
|
+
info-④ 登记)。
|
|
31
|
+
"""
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
import re
|
|
35
|
+
|
|
36
|
+
__all__ = ["PHRASES", "SENTENCE_SPLIT_RE", "find_ghost_phrases", "late_targets",
|
|
37
|
+
"check"]
|
|
38
|
+
|
|
39
|
+
#: 回指短语表(时间回指 + 人称回指;CD-WHALE-01 发现 C 的词形采样,
|
|
40
|
+
#: 对齐评估 v0.1 §2 L1 的「上次的/之前的/明明讲过」三例)。
|
|
41
|
+
PHRASES = (
|
|
42
|
+
"上次的", "上次说", "上次买", "上次那", "上次提",
|
|
43
|
+
"之前的", "之前说", "之前买", "之前那", "之前提",
|
|
44
|
+
"明明讲过", "明明说过", "明明说", "明明提",
|
|
45
|
+
"刚才说", "刚才的", "前述的", "先前说", "早先的",
|
|
46
|
+
"你说的", "我说过的", "你提过的",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
#: 句界(句级判定的切分面)。保留句子文本、丢弃界符。
|
|
50
|
+
SENTENCE_SPLIT_RE = re.compile(r"[。!?;\n]+")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def find_ghost_phrases(text, known=None) -> list:
|
|
54
|
+
"""短语层检测:返回**无可解析出处**的回指短语列表(去重保序)。
|
|
55
|
+
|
|
56
|
+
known —— 库内节点 id 集合(白名单)。句内含形态合法**且在册**的 id 即
|
|
57
|
+
视为「有出处」(该句非幽灵);传 None 时降级为只判形态(保守少报)。
|
|
58
|
+
"""
|
|
59
|
+
if not text:
|
|
60
|
+
return []
|
|
61
|
+
from . import linkref
|
|
62
|
+
out = []
|
|
63
|
+
seen = set()
|
|
64
|
+
for sent in SENTENCE_SPLIT_RE.split(str(text)):
|
|
65
|
+
hits = [p for p in PHRASES if p in sent]
|
|
66
|
+
if not hits:
|
|
67
|
+
continue
|
|
68
|
+
# 句内子串去重(最长优先):「明明说过」同时命中「明明说过」与
|
|
69
|
+
# 「明明说」——同一现象的一个更长粒度标记即可(复核 info-2:
|
|
70
|
+
# 冗余双标记挤占 cap 16)。跨句不去重(不同句各自独立)。
|
|
71
|
+
hits = [p for p in hits
|
|
72
|
+
if not any(p != q and p in q for q in hits)]
|
|
73
|
+
# 句内是否有可解析出处:id 形态命中 + (调用方给了 known 时)在册。
|
|
74
|
+
refs = linkref.extract_refs(sent, known=known)
|
|
75
|
+
if refs:
|
|
76
|
+
continue
|
|
77
|
+
for p in hits:
|
|
78
|
+
if p not in seen:
|
|
79
|
+
seen.add(p)
|
|
80
|
+
out.append(p)
|
|
81
|
+
return out
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def late_targets(cg, targets, own_from) -> list:
|
|
85
|
+
"""id 层检测:目标创建时刻晚于本文档声明的生效起点 ⇒「目标晚于自身」。
|
|
86
|
+
|
|
87
|
+
targets —— linkref 解析出的引用目标 id 列表(ctx["linkref_targets"])。
|
|
88
|
+
own_from —— 本文档声明的生效起点(valid_from / effective_from);缺省
|
|
89
|
+
None 表示未声明时间轴,此时不做检查(写入 created_at=now,
|
|
90
|
+
「目标晚于自身」结构上不可能)。
|
|
91
|
+
|
|
92
|
+
返回 [{target, target_created, own_from}](cap 10,保序)。
|
|
93
|
+
"""
|
|
94
|
+
if own_from is None or not targets:
|
|
95
|
+
return []
|
|
96
|
+
try:
|
|
97
|
+
own = float(own_from)
|
|
98
|
+
except (TypeError, ValueError):
|
|
99
|
+
return []
|
|
100
|
+
nodes = (getattr(cg, "index", None) or {}).get("nodes") or {}
|
|
101
|
+
out = []
|
|
102
|
+
for tid in targets:
|
|
103
|
+
tid = str(tid)
|
|
104
|
+
e = nodes.get(tid) or {}
|
|
105
|
+
tc = e.get("created_at")
|
|
106
|
+
if tc is None:
|
|
107
|
+
rec = cg.get(tid) or {}
|
|
108
|
+
tc = ((rec.get("frontmatter")) or {}).get("created_at")
|
|
109
|
+
try:
|
|
110
|
+
tc = float(tc)
|
|
111
|
+
except (TypeError, ValueError):
|
|
112
|
+
continue
|
|
113
|
+
if tc > own:
|
|
114
|
+
out.append({"target": tid, "target_created": tc, "own_from": own})
|
|
115
|
+
if len(out) >= 10:
|
|
116
|
+
break
|
|
117
|
+
return out
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# 生效条件:总是返回 {"ghost_phrases": [...], "late_refs": [...]} 两键 dict(各可为空列表);
|
|
121
|
+
# 内部对 text 做短语层检测(known 取 cg 索引键集合),对 ctx 已解析的 linkref 目标做 id 层检测;
|
|
122
|
+
# 不做任何落盘/短路(纯读)。
|
|
123
|
+
def check(cg, text, linkref_targets=None, own_from=None) -> dict:
|
|
124
|
+
"""组合检测(纯读,无副作用):供写入链闸调用。"""
|
|
125
|
+
nodes = (getattr(cg, "index", None) or {}).get("nodes") or {}
|
|
126
|
+
known = set(nodes.keys())
|
|
127
|
+
return {
|
|
128
|
+
"ghost_phrases": find_ghost_phrases(text, known=known),
|
|
129
|
+
"late_refs": late_targets(cg, linkref_targets or [], own_from),
|
|
130
|
+
}
|
|
@@ -33,6 +33,7 @@ hive serve 心跳)用的是 `scripts/judgment_manifest.py`,两侧 PATTERNS
|
|
|
33
33
|
md_cg/test_*.py Python 侧测试套件
|
|
34
34
|
compiler/tests/*.py compiler 测试
|
|
35
35
|
swarm/tests/*.py swarm 测试
|
|
36
|
+
test/{hive_exec,hive_wm}_test.py test/ 侧逐文件裁决可收件(A6;精确名冻结)
|
|
36
37
|
|
|
37
38
|
安装态(出货包)只有 `md_cg/test_*.py` 一组可得——其余组命中数为 0,
|
|
38
39
|
`missing_patterns` 显式随清单与冻结凭证落盘(不静默少算);A3 两侧必须在
|
|
@@ -55,6 +56,12 @@ PATTERNS = [
|
|
|
55
56
|
("md_cg", "test_*.py"),
|
|
56
57
|
("compiler/tests", "*.py"),
|
|
57
58
|
("swarm/tests", "*.py"),
|
|
59
|
+
# test/(A6,2026-10-05):与 scripts/ 版逐字同步——test/ 侧逐文件裁决可收件的
|
|
60
|
+
# 精确名冻结(未过裁决的件不进判据面)。批次99 补收:chaos 套件的陈旧登记已
|
|
61
|
+
# 同步(FI-M04 读码代理断言改 AST 语义判据 + 去锁定点变异自证)。
|
|
62
|
+
("test", "hive_exec_test.py"),
|
|
63
|
+
("test", "hive_wm_test.py"),
|
|
64
|
+
("test/chaos_injection", "run_all.py"),
|
|
58
65
|
]
|
|
59
66
|
|
|
60
67
|
|
package/md_cg/mcp_server.py
CHANGED
|
@@ -59,6 +59,26 @@ from utf8_boot import ensure_utf8 # noqa: E402
|
|
|
59
59
|
ensure_utf8(__file__)
|
|
60
60
|
|
|
61
61
|
|
|
62
|
+
# ------------------------------------------- 入口自保证 OpenBLAS 线程数(2026-10-05)
|
|
63
|
+
# 根因(返修取证):numpy(md_cg 可选依赖,经 whitebox_kb 系列模块加载)在**导入期**
|
|
64
|
+
# 由 OpenBLAS 按线程数(默认 = 核数)申请每线程缓冲——本机 32 核实测单进程
|
|
65
|
+
# `import numpy` 的**全机提交内存**增量 0.73 GiB。启动链上的代校验
|
|
66
|
+
# (verify_delegations → 导入含 numpy 的目标模块,见 main)把这笔分配带到
|
|
67
|
+
# **服务应答之前**:机器提交内存吃紧、或**多进程同启**(并行测试套件 / 多会话
|
|
68
|
+
# 并存 / 常驻扫描)时,OpenBLAS 重试 10 次后放弃并 exit(1)——进程在 initialize
|
|
69
|
+
# 应答前死亡,桥侧只见「握手失败 / 插件激活失败」,子进程 stderr 里的
|
|
70
|
+
# `OpenBLAS error: Memory allocation still failed after 10 retries` 是唯一线索。
|
|
71
|
+
# 实测(本机,2026-10-05;随提交内存压力波动):12 个并发 `import numpy` 默认
|
|
72
|
+
# 4~9/12 失败(两轮独立读数,stderr 同上),置本值后 0/12(两轮);单进程提交
|
|
73
|
+
# 增量 0.73 → 0.013 GiB(4 线程 0.100 GiB)。md_cg 现有数值面是向量点积/范数/
|
|
74
|
+
# 小矩阵,单线程对其**无已观测的性能意义**(⚠ 未做基准实测,出现 BLAS 密集路径
|
|
75
|
+
# 须在性能轮复测)。显式设值优先,只填空缺/空白(仓库口径:空白视为未设置)。
|
|
76
|
+
# 位置钉死:必须在 numpy 可被导入之前——模块级,早于 main() 的代校验;
|
|
77
|
+
# 且晚于 ensure_utf8(其重启形态经 env 继承本值,两条保证互不干扰)。
|
|
78
|
+
if not (os.environ.get("OPENBLAS_NUM_THREADS") or "").strip():
|
|
79
|
+
os.environ["OPENBLAS_NUM_THREADS"] = "1"
|
|
80
|
+
|
|
81
|
+
|
|
62
82
|
# SERVER_VERSION 从包根 package.json 动态读取(issue #42:硬编码 0.1.0 与发布
|
|
63
83
|
# 版本脱节,握手自报假版本);读不到(文件缺失/损坏/裁剪)回落保底值不阻塞启动。
|
|
64
84
|
# v21-R1(2026-09-28):**回落必须覆盖全形态**——修前只捉 (OSError, ValueError)
|
|
@@ -593,6 +613,8 @@ KERNEL_TOOLS = [
|
|
|
593
613
|
"建议能力名(不执行,由调用方决定);op=read:召回/检索/按 id 取"
|
|
594
614
|
"(长内容自动截断 2000 行 / 50KB,返回 truncated+next_offset,"
|
|
595
615
|
"续读传 offset=next_offset,不静默丢内容);"
|
|
616
|
+
"op=audit:证据审计视图(只读组装,需 node_id;返回"
|
|
617
|
+
"现值/出处链/两存备择/盲区/退役史五面;路线 C);"
|
|
596
618
|
"op=write:写入前按 content_kind 审核(ACCEPT 落盘 / REJECT 进负记忆 / "
|
|
597
619
|
"DEFER 进审核队列)+ 节点间冲突检测(三级决策:情绪→反思→递归反思;"
|
|
598
620
|
"consistency=false 可关,on_conflict=reject|defer|record);"
|
|
@@ -712,7 +734,7 @@ KERNEL_TOOLS = [
|
|
|
712
734
|
"scrub|predict|causal|"
|
|
713
735
|
"forget|goal|task|recent|info|index_code|index_doc|ref|whitebox|"
|
|
714
736
|
"theory|link|session|ingest|export|maintain|consolidate|"
|
|
715
|
-
"insight|ccg|status|edges|help", True),
|
|
737
|
+
"insight|ccg|status|edges|audit|help", True),
|
|
716
738
|
ccg=_p("object", "CCG 六要素编译器入参:{action, node_id, dialog, marks, "
|
|
717
739
|
"slots, strict_spans, role, verdict, verifier, compiled_by, "
|
|
718
740
|
"evidence, slot_corrections, model, jobs, blocking, wait_s, "
|
|
@@ -782,6 +804,13 @@ KERNEL_TOOLS = [
|
|
|
782
804
|
depth=_p("integer", "consistency:递归反思深度上限"),
|
|
783
805
|
condition_space=_p("object", "条件空间"),
|
|
784
806
|
verification_basis=_p("string", "验证基底"),
|
|
807
|
+
# A1 补接(2026-10-05,路线 C 动工时经 audit 现值面发现写链漏传后
|
|
808
|
+
# 一并补齐的三处接线之一):检验强度(与验证基底正交的裁决力分级)。
|
|
809
|
+
check_strength=_p("string", "检验强度:hoop|smoking_gun|doubly_decisive"
|
|
810
|
+
"(与 verification_basis 正交的裁决力分级;"
|
|
811
|
+
"覆写既有节点时默认继承)"),
|
|
812
|
+
# 路线 C(2026-10-05):audit 的截断上限。
|
|
813
|
+
cap=_p("integer", "audit:各面截断上限(1–64,缺省 8)"),
|
|
785
814
|
non_applicable_conditions=_p("array", "不适用条件"),
|
|
786
815
|
context=_p("object", "当前情境"),
|
|
787
816
|
k=_p("integer", "返回条数(sustain pool_bench 亦用)"),
|
|
@@ -2337,6 +2366,26 @@ def _cg_dispatch(cg, a):
|
|
|
2337
2366
|
"reason": q2.get("reason"), **refindex.ref_fields(n)}
|
|
2338
2367
|
for n, s, q2 in res]}
|
|
2339
2368
|
|
|
2369
|
+
if op == "audit":
|
|
2370
|
+
# 路线 C(2026-10-05,多主体世界模型对齐 v0.1 §4):证据审计面——
|
|
2371
|
+
# 只读组装器(md_cg/auditview.py),零写路径改动。node_id 类型闸与
|
|
2372
|
+
# read 面同口径(类型错 ⇒ 结构化 error,不静默降级);截断参数用
|
|
2373
|
+
# `cap`(**故意不用 view/limit 等既有名**——view 已被 roleviews 占用,
|
|
2374
|
+
# 设计稿复核修订的命名约束)。
|
|
2375
|
+
_nid = a.get("node_id")
|
|
2376
|
+
if not isinstance(_nid, str) or not _nid.strip():
|
|
2377
|
+
return {"ok": False, "error": "node_id_not_str",
|
|
2378
|
+
"node_id": _nid, "got_type": type(_nid).__name__,
|
|
2379
|
+
"hint": "audit 需字符串 node_id(证据审计视图按节点组装);"
|
|
2380
|
+
"要按关键词检索请改用 query(read)"}
|
|
2381
|
+
from . import auditview
|
|
2382
|
+
_cap = a.get("cap")
|
|
2383
|
+
try:
|
|
2384
|
+
_cap = int(_cap) if _cap is not None else auditview.DEFAULT_CAP
|
|
2385
|
+
except (TypeError, ValueError):
|
|
2386
|
+
_cap = auditview.DEFAULT_CAP
|
|
2387
|
+
return auditview.build(cg, _nid, cap=max(1, min(64, _cap)))
|
|
2388
|
+
|
|
2340
2389
|
if op == "write":
|
|
2341
2390
|
# 写入路径拦截器链(Pi 钩子化移植,writepipe.py):六道闸以扩展
|
|
2342
2391
|
# 形态注册于 writepipe.default_pipeline(),次序/启停不再硬编码于
|
|
@@ -3341,6 +3390,9 @@ def _dispatch(cg, name, args):
|
|
|
3341
3390
|
role=a.get("role"), tags=a.get("tags"),
|
|
3342
3391
|
condition_space=a.get("condition_space"),
|
|
3343
3392
|
verification_basis=a.get("verification_basis"),
|
|
3393
|
+
# A1 补接(2026-10-05):检验强度同族透传(remember_gated 内部
|
|
3394
|
+
# add(**kw) 直达;此前声明在 gated 分支静默丢弃)。
|
|
3395
|
+
check_strength=a.get("check_strength"),
|
|
3344
3396
|
non_applicable_conditions=a.get("non_applicable_conditions"),
|
|
3345
3397
|
importance_hint=hint, override=bool(a.get("override")),
|
|
3346
3398
|
consistency=bool(a.get("consistency", True)),
|
|
@@ -3390,6 +3442,9 @@ def _dispatch(cg, name, args):
|
|
|
3390
3442
|
_meta = {k: a[k] for k in
|
|
3391
3443
|
("tags", "condition_space", "verification_basis",
|
|
3392
3444
|
"non_applicable_conditions", "derived_from", "relation",
|
|
3445
|
+
# A1 补接(2026-10-05):检验强度入复现 meta——与
|
|
3446
|
+
# writepipe._AUTONOMY_META_KEYS 同款(两条路径元数据等价)。
|
|
3447
|
+
"check_strength",
|
|
3393
3448
|
"role", "importance") if a.get(k) is not None}
|
|
3394
3449
|
# 直写面的裁决参数(本分支的 add 会自己跑冲突闸):随单落进复现 meta,
|
|
3395
3450
|
# 否则「确认后落盘」与「直接落盘」两条路径的判据不等价。
|
|
@@ -3416,6 +3471,8 @@ def _dispatch(cg, name, args):
|
|
|
3416
3471
|
condition_space=a.get("condition_space"),
|
|
3417
3472
|
importance=float(a.get("importance", 0.5)),
|
|
3418
3473
|
verification_basis=a.get("verification_basis"),
|
|
3474
|
+
# A1 补接(2026-10-05):检验强度透传(同 B2)。
|
|
3475
|
+
check_strength=a.get("check_strength"),
|
|
3419
3476
|
non_applicable_conditions=a.get("non_applicable_conditions"),
|
|
3420
3477
|
override=bool(a.get("override")),
|
|
3421
3478
|
consistency=bool(a.get("consistency", True)),
|