@furongjun1999/dsh-memory 0.5.0 → 0.6.0
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 +572 -465
- package/docs/README.md +1 -0
- package/docs/eval/DSH/346/227/245/345/277/227/347/264/242/345/274/225v2_/345/217/202/350/200/203dsh-TUI_v1.0.md +248 -0
- package/docs/eval/DSH/346/227/245/345/277/227/347/264/242/345/274/225/346/225/210/346/236/234/351/252/214/350/257/201_v1.0.md +209 -0
- package/docs/eval/DSH/347/253/257/347/274/272/351/231/267/344/270/223/351/241/271_v1.0.md +254 -0
- package/docs/eval/P1b2_/350/257/273/351/235/242/344/273/243/351/231/205/344/277/256/345/244/215_v1.0.md +124 -0
- package/docs/eval/bench_lingshu_self/bench_self.py +140 -0
- package/docs/eval/bench_lingshu_self/self_bench_result.json +404 -0
- package/docs/eval/bench_lingshu_self//347/201/265/346/236/242/350/207/252/345/272/223/347/253/257/345/210/260/347/253/257/346/243/200/347/264/242/345/256/236/346/265/213_v1.0.md +38 -0
- package/docs/eval//344/270/215/345/217/257/351/235/240/346/200/247/350/220/275/345/234/260_P0_v1.0.md +185 -0
- package/docs/eval//345/217/221/345/270/20306_/344/270/200/351/224/256/351/205/215/347/275/256/344/270/216DSH0172_v1.0.md +171 -0
- package/docs/eval//346/225/205/351/232/234/346/263/250/345/205/245/345/256/236/346/265/213_v1.0.md +422 -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 +100 -0
- 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 +197 -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_v1.md +156 -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_v10.md +210 -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_v11.md +227 -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_v12.md +203 -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_v13.md +233 -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_v14.md +191 -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_v15.md +213 -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_v16.md +214 -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_v17.md +199 -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_v18.md +183 -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_v19.md +207 -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_v2.md +156 -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_v3.md +152 -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_v4.md +128 -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_v5.md +114 -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_v6.md +192 -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_v7.md +187 -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_v8.md +207 -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_v9.md +203 -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 +202 -0
- 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 +19 -3
- package/docs/images/lingshu-moonlight-covenant-poster-preview.jpg +0 -0
- package/docs/images/lingshu-moonlight-covenant-poster.png +0 -0
- 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 +40 -40
- package/docs/theory//344/270/215/345/217/257/351/235/240/345/256/232/347/220/206/344/270/216/345/244/261/346/225/210/344/274/230/345/205/210/346/241/206/346/236/266_v0.3.md +365 -0
- package/docs//344/270/215/345/217/257/351/235/240/346/200/247/347/220/206/350/256/272_v0.1.md +343 -0
- package/dsh/cordis-patch-profile-web.example.yml +35 -0
- package/lib/bridge.d.ts +9 -0
- package/lib/bridge.js +35 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.js +66 -0
- package/lib/index.js +7 -1
- package/lib/init.d.ts +88 -0
- package/lib/init.js +287 -0
- package/lib/lib/roleplay_web.js +530 -443
- package/lib/lib/token_store.d.ts +7 -1
- package/lib/lib/token_store.js +12 -3
- package/md_cg/audit.py +12 -1
- package/md_cg/backfill.py +16 -15
- package/md_cg/backfill_bucket_zh.py +35 -0
- package/md_cg/bench_e2e_judge.py +532 -0
- package/md_cg/bench_e2e_locomo_qa.py +368 -0
- package/md_cg/bench_e2e_qa.py +256 -0
- package/md_cg/branches.py +18 -2
- package/md_cg/ccgc.py +3 -2
- package/md_cg/chain.py +19 -4
- package/md_cg/consolidate.py +7 -6
- package/md_cg/crosscheck.py +4 -3
- package/md_cg/crypto.py +439 -437
- package/md_cg/datapath.py +395 -335
- package/md_cg/evidence.py +8 -3
- package/md_cg/export.py +3 -1
- package/md_cg/forgetting.py +2 -2
- package/md_cg/fsutil.py +48 -0
- package/md_cg/hotcache.py +255 -238
- package/md_cg/interop.py +161 -22
- package/md_cg/judgment_manifest.py +177 -0
- package/md_cg/links.py +655 -622
- package/md_cg/mcp_server.py +282 -31
- package/md_cg/mdcg.py +702 -126
- package/md_cg/mdcos.py +454 -68
- package/md_cg/mreview/govern.py +5 -4
- package/md_cg/postings.py +4 -2
- package/md_cg/readcache.py +76 -18
- package/md_cg/reconcile.py +228 -0
- package/md_cg/review_cli.py +215 -0
- package/md_cg/routing.py +28 -0
- package/md_cg/run_tests.py +211 -0
- package/md_cg/scrub.py +862 -852
- package/md_cg/security.py +385 -275
- package/md_cg/selfreport.py +3 -2
- package/md_cg/signer.py +565 -562
- package/md_cg/sources.py +3 -2
- package/md_cg/stg.py +6 -0
- package/md_cg/sustain.py +1168 -1138
- package/md_cg/test_access_hints.py +147 -0
- package/md_cg/test_branch_discard_tombstone.py +136 -0
- package/md_cg/test_branches.py +259 -249
- package/md_cg/test_chain_read_isolate.py +168 -0
- package/md_cg/test_datapath_device_name.py +203 -0
- package/md_cg/test_emit_negtail_cache.py +156 -0
- package/md_cg/test_en_pipeline.py +186 -166
- package/md_cg/test_govern_directread.py +421 -0
- package/md_cg/test_i32_hotcache_env_key.py +218 -0
- package/md_cg/test_identity_attribution.py +228 -147
- package/md_cg/test_index_crossprocess_reload.py +301 -0
- package/md_cg/test_index_durability.py +238 -224
- package/md_cg/test_interop.py +4 -2
- package/md_cg/test_interop_judgment.py +228 -0
- package/md_cg/test_issue39_utf8_stdio.py +273 -0
- package/md_cg/test_links_concurrent_write.py +188 -0
- package/md_cg/test_merge_upsert.py +168 -0
- package/md_cg/test_n123_derive_expiry_chain.py +205 -0
- package/md_cg/test_n130_verify_falsified_protect.py +185 -0
- package/md_cg/test_n131_merge_gate.py +205 -0
- package/md_cg/test_none_id_write_guard.py +165 -0
- package/md_cg/test_p1x_ref_root.py +160 -0
- package/md_cg/test_p27_docindex.py +774 -765
- package/md_cg/test_p2_mcp.py +3 -0
- package/md_cg/test_p32_backfill.py +304 -298
- package/md_cg/test_p39_verify_flow.py +90 -50
- package/md_cg/test_p47_session_view.py +60 -25
- package/md_cg/test_propose_tail_index.py +157 -0
- package/md_cg/test_read_scope_b27.py +277 -0
- package/md_cg/test_readcache_default_on.py +168 -0
- package/md_cg/test_readcache_precise_inval.py +270 -0
- package/md_cg/test_readcache_prodpath.py +55 -7
- package/md_cg/test_reconcile_v0.py +294 -0
- package/md_cg/test_retr_s1.py +6 -2
- package/md_cg/test_retr_s1b.py +67 -0
- package/md_cg/test_retr_s7.py +8 -0
- package/md_cg/test_retr_s9_entity_ctx.py +181 -175
- package/md_cg/test_retr_score_once.py +208 -0
- package/md_cg/test_review_cli_attribution.py +177 -0
- package/md_cg/test_review_cli_visibility.py +235 -0
- package/md_cg/test_review_onepass.py +170 -0
- package/md_cg/test_rrf_graph_seed_cache.py +154 -0
- package/md_cg/test_security_audit.py +155 -0
- package/md_cg/test_security_audit_b26.py +161 -0
- package/md_cg/test_security_audit_v21.py +250 -0
- package/md_cg/test_semantic_canonical.py +255 -241
- package/md_cg/test_session_isolation.py +168 -0
- package/md_cg/test_snapshot_autoclose.py +187 -0
- package/md_cg/test_tail_watermark_race.py +208 -0
- package/md_cg/test_tenant_env_override_warn.py +139 -0
- package/md_cg/test_tenant_registry_corrupt_warn.py +151 -0
- package/md_cg/test_v14_fixes.py +415 -397
- package/md_cg/test_verify_dirty_reconcile.py +157 -0
- package/md_cg/theory.py +276 -273
- package/md_cg/tokens.py +734 -677
- package/md_cg/units.py +3 -2
- package/md_cg/vision_evidence.py +4 -3
- package/md_cg/whitebox_kb/wisdom/code_solidified.json +6195 -6195
- package/md_cg/whitebox_kb/wisdom/multilang_ir.py +128 -124
- package/md_cg/writepipe.py +554 -550
- package/package.json +11 -2
- package/src/bridge.ts +434 -401
- package/src/cli.ts +65 -0
- package/src/index.ts +526 -518
- package/src/init.ts +347 -0
- package/src/lib/roleplay_web.ts +1019 -932
- package/src/lib/token_store.ts +202 -192
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"q": "hive 的 serve 怎么判断还活着?",
|
|
4
|
+
"golds": [
|
|
5
|
+
"mem_1789612355948"
|
|
6
|
+
],
|
|
7
|
+
"nat": {
|
|
8
|
+
"pos": null,
|
|
9
|
+
"tier": "T2_global_like",
|
|
10
|
+
"top1": "mem_1789552857538",
|
|
11
|
+
"top1_is_gold": false,
|
|
12
|
+
"n_res": 10
|
|
13
|
+
},
|
|
14
|
+
"kw": {
|
|
15
|
+
"pos": null,
|
|
16
|
+
"tier": "T2_global_like",
|
|
17
|
+
"top1": "mem_1789612140901",
|
|
18
|
+
"top1_is_gold": false,
|
|
19
|
+
"n_res": 10
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"q": "双实例互验怎么防止验证者作弊?",
|
|
24
|
+
"golds": [
|
|
25
|
+
"mem_1789602635975"
|
|
26
|
+
],
|
|
27
|
+
"nat": {
|
|
28
|
+
"pos": 1,
|
|
29
|
+
"tier": "T2_global_like",
|
|
30
|
+
"top1": "mem_1789603603896",
|
|
31
|
+
"top1_is_gold": false,
|
|
32
|
+
"n_res": 10
|
|
33
|
+
},
|
|
34
|
+
"kw": {
|
|
35
|
+
"pos": 0,
|
|
36
|
+
"tier": "T3_global_scan",
|
|
37
|
+
"top1": "mem_1789602635975",
|
|
38
|
+
"top1_is_gold": true,
|
|
39
|
+
"n_res": 10
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"q": "任务派发应该按什么原则分层决策?",
|
|
44
|
+
"golds": [
|
|
45
|
+
"mem_1789605410646"
|
|
46
|
+
],
|
|
47
|
+
"nat": {
|
|
48
|
+
"pos": 0,
|
|
49
|
+
"tier": "T2_global_like",
|
|
50
|
+
"top1": "mem_1789605410646",
|
|
51
|
+
"top1_is_gold": true,
|
|
52
|
+
"n_res": 10
|
|
53
|
+
},
|
|
54
|
+
"kw": {
|
|
55
|
+
"pos": 0,
|
|
56
|
+
"tier": "T3_global_scan",
|
|
57
|
+
"top1": "mem_1789605410646",
|
|
58
|
+
"top1_is_gold": true,
|
|
59
|
+
"n_res": 10
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"q": "蜂群健康评分的 integrity 因子是怎么算的?",
|
|
64
|
+
"golds": [
|
|
65
|
+
"swarm_v061_integrity_fix"
|
|
66
|
+
],
|
|
67
|
+
"nat": {
|
|
68
|
+
"pos": 0,
|
|
69
|
+
"tier": "T3_global_scan",
|
|
70
|
+
"top1": "swarm_v061_integrity_fix",
|
|
71
|
+
"top1_is_gold": true,
|
|
72
|
+
"n_res": 10
|
|
73
|
+
},
|
|
74
|
+
"kw": {
|
|
75
|
+
"pos": 0,
|
|
76
|
+
"tier": "T3_global_scan",
|
|
77
|
+
"top1": "swarm_v061_integrity_fix",
|
|
78
|
+
"top1_is_gold": true,
|
|
79
|
+
"n_res": 10
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"q": "全局截断 cap 会造成哪些检索可见性问题?",
|
|
84
|
+
"golds": [
|
|
85
|
+
"mem_1789511615088"
|
|
86
|
+
],
|
|
87
|
+
"nat": {
|
|
88
|
+
"pos": 2,
|
|
89
|
+
"tier": "T3_global_scan",
|
|
90
|
+
"top1": "node_132deca4_1789537606255",
|
|
91
|
+
"top1_is_gold": false,
|
|
92
|
+
"n_res": 10
|
|
93
|
+
},
|
|
94
|
+
"kw": {
|
|
95
|
+
"pos": 1,
|
|
96
|
+
"tier": "T2_global_like",
|
|
97
|
+
"top1": "node_41abeae8_1789510901539",
|
|
98
|
+
"top1_is_gold": false,
|
|
99
|
+
"n_res": 10
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"q": "冷验证队列的回执什么情况下会报假成功?",
|
|
104
|
+
"golds": [
|
|
105
|
+
"mem_1789897251107"
|
|
106
|
+
],
|
|
107
|
+
"nat": {
|
|
108
|
+
"pos": 2,
|
|
109
|
+
"tier": "T2_global_like",
|
|
110
|
+
"top1": "mem_1789722858540",
|
|
111
|
+
"top1_is_gold": false,
|
|
112
|
+
"n_res": 10
|
|
113
|
+
},
|
|
114
|
+
"kw": {
|
|
115
|
+
"pos": 0,
|
|
116
|
+
"tier": "T3_global_scan",
|
|
117
|
+
"top1": "mem_1789897251107",
|
|
118
|
+
"top1_is_gold": true,
|
|
119
|
+
"n_res": 10
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"q": "英文语料用中文索引检索效果怎么样?",
|
|
124
|
+
"golds": [
|
|
125
|
+
"mem_1789132609619"
|
|
126
|
+
],
|
|
127
|
+
"nat": {
|
|
128
|
+
"pos": null,
|
|
129
|
+
"tier": "T2_global_like",
|
|
130
|
+
"top1": "mem_1789354548231",
|
|
131
|
+
"top1_is_gold": false,
|
|
132
|
+
"n_res": 10
|
|
133
|
+
},
|
|
134
|
+
"kw": {
|
|
135
|
+
"pos": 0,
|
|
136
|
+
"tier": "T2_global_like",
|
|
137
|
+
"top1": "mem_1789132609619",
|
|
138
|
+
"top1_is_gold": true,
|
|
139
|
+
"n_res": 10
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"q": "检索扩散 reach 功能默认是开的吗?",
|
|
144
|
+
"golds": [
|
|
145
|
+
"mem_1789795794376"
|
|
146
|
+
],
|
|
147
|
+
"nat": {
|
|
148
|
+
"pos": null,
|
|
149
|
+
"tier": "T3_global_scan",
|
|
150
|
+
"top1": "code_3d03ed70458d",
|
|
151
|
+
"top1_is_gold": false,
|
|
152
|
+
"n_res": 10
|
|
153
|
+
},
|
|
154
|
+
"kw": {
|
|
155
|
+
"pos": 0,
|
|
156
|
+
"tier": "T2_global_like",
|
|
157
|
+
"top1": "mem_1789795794376",
|
|
158
|
+
"top1_is_gold": true,
|
|
159
|
+
"n_res": 10
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"q": "记忆怎么按热度分层来加速检索?",
|
|
164
|
+
"golds": [
|
|
165
|
+
"mem_1789803443800"
|
|
166
|
+
],
|
|
167
|
+
"nat": {
|
|
168
|
+
"pos": null,
|
|
169
|
+
"tier": "T2_global_like",
|
|
170
|
+
"top1": "mem_1789274628336",
|
|
171
|
+
"top1_is_gold": false,
|
|
172
|
+
"n_res": 10
|
|
173
|
+
},
|
|
174
|
+
"kw": {
|
|
175
|
+
"pos": 1,
|
|
176
|
+
"tier": "T2_global_like",
|
|
177
|
+
"top1": "code_0602d0907acc",
|
|
178
|
+
"top1_is_gold": false,
|
|
179
|
+
"n_res": 10
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"q": "LLM 批次修复第二轮还是不过怎么办?",
|
|
184
|
+
"golds": [
|
|
185
|
+
"mem_1789666192335"
|
|
186
|
+
],
|
|
187
|
+
"nat": {
|
|
188
|
+
"pos": null,
|
|
189
|
+
"tier": "T2_global_like",
|
|
190
|
+
"top1": "mem_1789274628336",
|
|
191
|
+
"top1_is_gold": false,
|
|
192
|
+
"n_res": 10
|
|
193
|
+
},
|
|
194
|
+
"kw": {
|
|
195
|
+
"pos": 3,
|
|
196
|
+
"tier": "T2_global_like",
|
|
197
|
+
"top1": "mem_1789665204611",
|
|
198
|
+
"top1_is_gold": false,
|
|
199
|
+
"n_res": 10
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"q": "子任务上下文快满了怎么交接?",
|
|
204
|
+
"golds": [
|
|
205
|
+
"mem_1789548798424"
|
|
206
|
+
],
|
|
207
|
+
"nat": {
|
|
208
|
+
"pos": 7,
|
|
209
|
+
"tier": "T2_global_like",
|
|
210
|
+
"top1": "mem_1789599787541",
|
|
211
|
+
"top1_is_gold": false,
|
|
212
|
+
"n_res": 10
|
|
213
|
+
},
|
|
214
|
+
"kw": {
|
|
215
|
+
"pos": 0,
|
|
216
|
+
"tier": "T2_global_like",
|
|
217
|
+
"top1": "mem_1789548798424",
|
|
218
|
+
"top1_is_gold": true,
|
|
219
|
+
"n_res": 10
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"q": "记忆条目的过期和观测变旧怎么区分?",
|
|
224
|
+
"golds": [
|
|
225
|
+
"mem_1789539356385"
|
|
226
|
+
],
|
|
227
|
+
"nat": {
|
|
228
|
+
"pos": null,
|
|
229
|
+
"tier": "T2_global_like",
|
|
230
|
+
"top1": "node_ef7bc1ee_1786918581699",
|
|
231
|
+
"top1_is_gold": false,
|
|
232
|
+
"n_res": 10
|
|
233
|
+
},
|
|
234
|
+
"kw": {
|
|
235
|
+
"pos": null,
|
|
236
|
+
"tier": "T3_global_scan",
|
|
237
|
+
"top1": "mem_1789540113805",
|
|
238
|
+
"top1_is_gold": false,
|
|
239
|
+
"n_res": 10
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"q": "代码提交推送到公开仓库前要做什么检查?",
|
|
244
|
+
"golds": [
|
|
245
|
+
"mem_1789612355948"
|
|
246
|
+
],
|
|
247
|
+
"nat": {
|
|
248
|
+
"pos": 9,
|
|
249
|
+
"tier": "T2_global_like",
|
|
250
|
+
"top1": "mem_1789806369843",
|
|
251
|
+
"top1_is_gold": false,
|
|
252
|
+
"n_res": 10
|
|
253
|
+
},
|
|
254
|
+
"kw": {
|
|
255
|
+
"pos": 0,
|
|
256
|
+
"tier": "T2_global_like",
|
|
257
|
+
"top1": "mem_1789612355948",
|
|
258
|
+
"top1_is_gold": true,
|
|
259
|
+
"n_res": 10
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"q": "多个智能体共用一份权限时怎么区分是谁干的?",
|
|
264
|
+
"golds": [
|
|
265
|
+
"mem_1789122153945"
|
|
266
|
+
],
|
|
267
|
+
"nat": {
|
|
268
|
+
"pos": null,
|
|
269
|
+
"tier": "T2_global_like",
|
|
270
|
+
"top1": "node_76728d45_1786918560368",
|
|
271
|
+
"top1_is_gold": false,
|
|
272
|
+
"n_res": 10
|
|
273
|
+
},
|
|
274
|
+
"kw": {
|
|
275
|
+
"pos": 0,
|
|
276
|
+
"tier": "T2_global_like",
|
|
277
|
+
"top1": "mem_1789122153945",
|
|
278
|
+
"top1_is_gold": true,
|
|
279
|
+
"n_res": 10
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"q": "DSH 的会话 id 关机重启后会变吗?",
|
|
284
|
+
"golds": [
|
|
285
|
+
"mem_1789100285255"
|
|
286
|
+
],
|
|
287
|
+
"nat": {
|
|
288
|
+
"pos": 0,
|
|
289
|
+
"tier": "T2_global_like",
|
|
290
|
+
"top1": "mem_1789100285255",
|
|
291
|
+
"top1_is_gold": true,
|
|
292
|
+
"n_res": 10
|
|
293
|
+
},
|
|
294
|
+
"kw": {
|
|
295
|
+
"pos": 0,
|
|
296
|
+
"tier": "T2_global_like",
|
|
297
|
+
"top1": "mem_1789100285255",
|
|
298
|
+
"top1_is_gold": true,
|
|
299
|
+
"n_res": 10
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"q": "对话日志怎么自动挖出错误和修复的配对?",
|
|
304
|
+
"golds": [
|
|
305
|
+
"node_02fe882d_1788905562143",
|
|
306
|
+
"doc_4a3accff94d6"
|
|
307
|
+
],
|
|
308
|
+
"nat": {
|
|
309
|
+
"pos": 3,
|
|
310
|
+
"tier": "T2_global_like",
|
|
311
|
+
"top1": "node_030c84b7_1786688525595",
|
|
312
|
+
"top1_is_gold": false,
|
|
313
|
+
"n_res": 10
|
|
314
|
+
},
|
|
315
|
+
"kw": {
|
|
316
|
+
"pos": 1,
|
|
317
|
+
"tier": "T2_global_like",
|
|
318
|
+
"top1": "code_4297379afe64",
|
|
319
|
+
"top1_is_gold": false,
|
|
320
|
+
"n_res": 10
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"q": "令牌放在系统环境变量里有什么安全风险?",
|
|
325
|
+
"golds": [
|
|
326
|
+
"mem_1789099723060"
|
|
327
|
+
],
|
|
328
|
+
"nat": {
|
|
329
|
+
"pos": 0,
|
|
330
|
+
"tier": "T2_global_like",
|
|
331
|
+
"top1": "mem_1789099723060",
|
|
332
|
+
"top1_is_gold": true,
|
|
333
|
+
"n_res": 10
|
|
334
|
+
},
|
|
335
|
+
"kw": {
|
|
336
|
+
"pos": 0,
|
|
337
|
+
"tier": "T2_global_like",
|
|
338
|
+
"top1": "mem_1789099723060",
|
|
339
|
+
"top1_is_gold": true,
|
|
340
|
+
"n_res": 10
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"q": "服务进程的随机会话 id 会带来什么问题?",
|
|
345
|
+
"golds": [
|
|
346
|
+
"mem_1789099936556"
|
|
347
|
+
],
|
|
348
|
+
"nat": {
|
|
349
|
+
"pos": 3,
|
|
350
|
+
"tier": "T2_global_like",
|
|
351
|
+
"top1": "mem_1789100285255",
|
|
352
|
+
"top1_is_gold": false,
|
|
353
|
+
"n_res": 10
|
|
354
|
+
},
|
|
355
|
+
"kw": {
|
|
356
|
+
"pos": 0,
|
|
357
|
+
"tier": "T2_global_like",
|
|
358
|
+
"top1": "mem_1789099936556",
|
|
359
|
+
"top1_is_gold": true,
|
|
360
|
+
"n_res": 10
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"q": "查询词完全命不中桶的时候检索会怎么走?",
|
|
365
|
+
"golds": [
|
|
366
|
+
"mem_1789511615088"
|
|
367
|
+
],
|
|
368
|
+
"nat": {
|
|
369
|
+
"pos": null,
|
|
370
|
+
"tier": "T2_global_like",
|
|
371
|
+
"top1": "node_subject_4939401561_1787018087635",
|
|
372
|
+
"top1_is_gold": false,
|
|
373
|
+
"n_res": 10
|
|
374
|
+
},
|
|
375
|
+
"kw": {
|
|
376
|
+
"pos": 0,
|
|
377
|
+
"tier": "T3_global_scan",
|
|
378
|
+
"top1": "mem_1789511615088",
|
|
379
|
+
"top1_is_gold": true,
|
|
380
|
+
"n_res": 10
|
|
381
|
+
}
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"q": "白箱知识库在进程里怎么被调用?",
|
|
385
|
+
"golds": [
|
|
386
|
+
"code_d98d1f5aa78e",
|
|
387
|
+
"doc_3942cfca7bdf"
|
|
388
|
+
],
|
|
389
|
+
"nat": {
|
|
390
|
+
"pos": 1,
|
|
391
|
+
"tier": "T2_global_like",
|
|
392
|
+
"top1": "code_a53cb473e34f",
|
|
393
|
+
"top1_is_gold": false,
|
|
394
|
+
"n_res": 10
|
|
395
|
+
},
|
|
396
|
+
"kw": {
|
|
397
|
+
"pos": 0,
|
|
398
|
+
"tier": "T3_global_scan",
|
|
399
|
+
"top1": "code_d98d1f5aa78e",
|
|
400
|
+
"top1_is_gold": true,
|
|
401
|
+
"n_res": 10
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 灵枢自库端到端检索实测 v1.0(原生中文 · 自然问句 vs 关键词 · 生产读路径)
|
|
2
|
+
|
|
3
|
+
> **口径**:被测库=灵枢自身在役记忆库(14095 节点 · 原生中文 · CCG 六要素为主写入面 · audit 23.9 万事件的真实累积库);实测方式=mdcg 读检索生产路径——spawn `python -m md_cg.mcp_server`(stdio JSON-RPC,与 DSH 插件同款链路),逐题调 `cg(op=read, query=…)`,取 top-10 候选判 gold 命中。评测令牌为专用 designer 令牌(`tk_70f633dc8398`,internal 以上可见)。
|
|
4
|
+
> **题集**:20 道自然中文问句(口语化、非节点原文词),gold=16 个已落盘已知节点(多题一 gold / 一题多 gold);对照组=同题关键词版(从 gold 六要素词面构造)。脚本:`bench_self.py`(本目录);逐题明细:`self_bench_result.json`。
|
|
5
|
+
|
|
6
|
+
## 结果
|
|
7
|
+
|
|
8
|
+
| 臂 | hit@1 | hit@5 | hit@10 |
|
|
9
|
+
| ---- | ---- | ---- | ---- |
|
|
10
|
+
| 自然问句 | 4/20(**20%**) | 10/20(**50%**) | 12/20(**60%**) |
|
|
11
|
+
| 关键词对照 | 14/20(**70%**) | 18/20(**90%**) | 18/20(**90%**) |
|
|
12
|
+
|
|
13
|
+
## 三条对照解读
|
|
14
|
+
|
|
15
|
+
1. **与 LoCoMo 翻译语料口径对照(自然问句 40.2% / 派生题面 92%)**:原生中文 CCG 库上自然问句 **60% > 40.2%(+19.8pp)**——CCG 六要素写入面(功能名/生效条件等结构化中文槽)确实部分缩小了问句-答案词汇差,翻译噪声也被排除。
|
|
16
|
+
2. **鸿沟同构成立**:自库上自然问句与关键词之间仍有 **30pp**(60% vs 90%)——与 LoCoMo 口径的 51.8pp 鸿沟同向。词汇差瓶颈不依赖语料来源,是词法检索的固有边界;**认知图概念桥接(自然问句 → 92%±)的必要性在本口径下再次成立**,且 60% 是桥接实施的自库基线起点。
|
|
17
|
+
3. **失败定性(8 题 hit@10 外)**:6 题 kw 臂能命中(典型词汇差:问句「过期/变旧」vs 节点 `stale/observation_aged`、问句「快满了怎么交接」vs 节点 `handoff 满上下文`)——词面不同构是主因;2 题双臂皆败(Q1 serve 存活、Q12 stale 区分)经直读验证 gold 在库可检索,属**排序区分度问题**——「hive/serve」词面在众多蜂巢节点同现,gold 特异词(存活判据/三层)未入问句时被主题相近节点淹没(top-3 全为蜂巢编排类节点,score 0.44-0.59)。
|
|
18
|
+
|
|
19
|
+
## 过程发现(评测副产物,两条)
|
|
20
|
+
|
|
21
|
+
1. **审核队列对检索不可见**:`review_pending=22`——缺陷迭代九轮的归档提案全部 pending、索引不可见,`cg(op=read)` 检索不到(例:问「MCP 如何防打崩」返回的 top-10 全为授权/身份主题无关节点,第 10 轮 MCP 入口守卫归档不在候选)。知识从 propose 到可检索依赖设计者裁决,裁决积压=知识不可用。**建议:设计者批量裁决积压提案(review_cli),或为 pending 提案建立降级可见通道(另行设计)。**
|
|
22
|
+
2. **自然问句零桶收敛**:tier 分布 17/20 走 `T2_global_like`(全局扫 13550 节点)、3/20 走 `T3_global_scan`,**没有一题走桶收敛(T0/T1)**——自然问句不命中英文桶键;#33 的 `backfill_bucket_zh` 中文别名回填未在本库执行过。全局兜底路径承担了全部自然问句流量,S1b 桶收敛对真实问句形态未起作用。
|
|
23
|
+
|
|
24
|
+
## 复现
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
MDCG_ROOT=<真实库根> MDCG_TOKEN=<designer 令牌> \
|
|
28
|
+
python -X utf8 docs/eval/bench_lingshu_self/bench_self.py
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
> 本报告不含库根绝对路径与令牌明文;评测令牌 token_id `tk_70f633dc8398` 保留复测用,可随时 `python -m md_cg.tokens revoke` 吊销。
|
|
32
|
+
|
|
33
|
+
## 边界
|
|
34
|
+
|
|
35
|
+
- 20 题小样本,百分比仅作量级参考(±1 题 = ±5pp);
|
|
36
|
+
- gold 由编排会话指定(已知答案节点),非全库抽样;问句风格单一(工程事实型),未覆盖时间/条件/否定类问句;
|
|
37
|
+
- 关键词臂由 gold 六要素词面构造,含轻度答案侧词汇先验(与 LoCoMo 口径的派生题面同性质);
|
|
38
|
+
- 被测库持续增长(audit 在写),两次运行数字可能小幅漂移。
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# 不可靠性落地 P0 报告 v1.0
|
|
2
|
+
|
|
3
|
+
> 批次 53 · 理论作为工程规范首轮 P0 修复四项落地
|
|
4
|
+
> 理论判据:`docs/theory/不可靠定理与失效优先框架_v0.3.md` + `docs/不可靠性理论_v0.1.md`
|
|
5
|
+
> 验收真源:`test/chaos_injection/registry.py`(注入套件登记)
|
|
6
|
+
> 报告性质:第二节四项「落点/前后对比/语义变化声明/验证」材料由编排会话给定的各修复员会话实跑记录转录;报告员会话对关键引证做了机械抽查(见 2.5),并**本会话实跑**了注入套件终验与 python 全量套件(见第三、四节)。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、总览(四项目标与结论)
|
|
11
|
+
|
|
12
|
+
| # | 目标 | 理论挂点 | 落地面 | 结论 |
|
|
13
|
+
|---|------|---------|--------|------|
|
|
14
|
+
| 1 | 启动对账 reconcile v0——索引/派生态 vs 盘面真源的全量 diff 对账,补两段式写对账(twophase,只清「有意图无结果」账)之外的对账面 | v0.3 **T9 自稳定定理** | `md_cg/reconcile.py`(新增)+ `md_cg/mcp_server.py` 启动序列 + `md_cg/mdcg.py` 前置修复 | ✅ 落地(33 断言新守卫全绿;真 server 实弹收敛成立) |
|
|
15
|
+
| 2 | FI-R03 伪造 result.json `ok=true` 被采信 → **P11 结果完整性锚**落地 | v0.1 P11 完整性锚 / T4 静默改写 | `hive/src/hmac.rs`(新增)+ `hive/src/keyres.rs`(新增)+ scheduler/job/exec 提交面锚判据 | ✅ 落地(**gap→pass**,登记批次 53 修复) |
|
|
16
|
+
| 3 | R05/R06 WAL 验签 **seq 连续性判据** | P0-2(覆盖遗漏型) | `swarm/rust_swarm.py` `verify_wal_signatures` | ✅ 落地(**FI-R05/R06 gap→pass**) |
|
|
17
|
+
| 4 | **幂等键标准化 v0**——hive 提交面 spec canonical json sha256 幂等键 | v0.3 T7 / P0-2 | `hive/src/json.rs` canonical + `hive/src/main.rs` cmd_submit 去重 | ✅ 落地(同 spec 重提返回既有 job_id + `deduplicated=true`) |
|
|
18
|
+
|
|
19
|
+
**总结论**:四项全部落地且各有验证。注入套件终验 **18/18 与登记一致(EXIT=0,pass 11 / gap 7)**,其中 **FI-R03 / FI-R05 / FI-R06 三格 gap→pass**;python 全量套件 **207/207 通过(退出码 0,5 跳过为依赖缺失/平台不符)**;7 格登记 gap(R08/M01–M04/M07)其缺陷真实在案且不属本批修复面,**如实维持 gap 未动**——把任一登记改 pass 即伪造修复,按「禁止伪造」纪律不改登记。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 二、逐项修复
|
|
24
|
+
|
|
25
|
+
### 2.1 启动对账 reconcile v0(v0.3 T9 自稳定定理落地,落地清单 P0-3)
|
|
26
|
+
|
|
27
|
+
**目标**:索引/派生态 vs 盘面真源的全量 diff 对账,补两段式写对账(twophase,只清「有意图无结果」账)之外的对账面。
|
|
28
|
+
|
|
29
|
+
**落点**:
|
|
30
|
+
|
|
31
|
+
1. `md_cg/reconcile.py:1-228`(新增模块):`ENV_SWITCH`=:45(`MDCG_RECONCILE`,仅 `"0"` 关闭缺省开)、`TRACE_FILE`=:49(`_reconcile.jsonl` 留痕,仅 diff 非空才写)、`enabled()`=:56、`_disk_hashes()`=:72(content_hash 双形态接受集——add 写路径无尾换行形 / rebuild 路径带尾换形,两 producers 各自稳定,见 mdcg.py:1588 vs mdcg.py:1154 实测分歧)、`_scan_disk()`=:78(os.walk LAYERS 与 `_scan_nodes` 同序,读失败/非 UTF-8 字节/frontmatter 无闭合三类真源损坏只登记不猜测)、`reconcile_state()`=:141(三类 diff:多索引条目→`_unstage` 摘除;缺索引条目→`_node_entry` 重建 `_stage` 补入;哈希/路径漂移→以盘面为真源重建;真源损坏与其条目一律不动,只 stderr 告警+留痕——T9 边界)。
|
|
32
|
+
2. `md_cg/mdcg.py:1688-1700`(`MdCG.reconcile_state` 委托,twophase 同款延迟导入模式)。
|
|
33
|
+
3. `md_cg/mdcg.py:1200-1213`(`_scan_nodes` 补捕 `UnicodeDecodeError`——前置修复:非 UTF-8 坏文件此前会炸穿整库装载/重建,init 先于对账执行,不补则损坏库永远跑不到对账)。
|
|
34
|
+
4. `md_cg/mcp_server.py:3726-3738`(main 启动序列两段式对账块之后接 `cg.reconcile_state()`,try/except 不阻塞启动)。
|
|
35
|
+
5. `md_cg/test_reconcile_v0.py:1-294`(新守卫 33 断言)。
|
|
36
|
+
|
|
37
|
+
**前后对比**:修复前(按 twophase.py:2-9 与 mdcg.py:17 取证):索引与盘面三类背离全部静默——外部删文件→幽灵条目永久占检索面;非合作写者直写→节点在盘不可见;直改正文→检索/指纹陈旧;均零告警零修复,且一个非 UTF-8 坏文件即炸穿整库装载(smoke 实测 `_load_index`→`_scan_nodes` UnicodeDecodeError 崩溃)。修复后:三类 diff 启动即检出并增量收敛+stderr 告警+`_reconcile.jsonl` 留痕(幂等,二扫全零零输出);真源损坏只告警不改写(损坏文件不建条目、读不出的既有条目不摘除——瞬态读失败不放大成永久损伤,N134 同型教训);损坏在场重开库不再炸。真 server 实弹(tempfile 哑令牌环境):植入 e1 正文篡改后 spawn `python -m md_cg.mcp_server`,stderr 打出「[mdcg-reconcile] 启动对账 v0: …哈希漂移=1(已按盘面增量修复索引面)」,重开索引读到 TAMPERED 新正文=收敛成立。注入套件格状态:a) `run_all.py` 修后全量 18/18 与登记一致、EXIT=0(pass 11 / gap 7);b) 判据 b 不适用(见语义变化声明⑥);c) 既有 pass 用例零回归(R01/R02/R04/R05/R06/R07/R09/M05/M06/M08/M09 全绿——其中正常写入/正常产物/正常验签语义未动);d) `scripts/run_tests.py --jobs 4` 全量 207/207 通过(5 跳过;基线 206+本批新守卫 1 件)。
|
|
38
|
+
|
|
39
|
+
**语义变化声明**:
|
|
40
|
+
|
|
41
|
+
1. 启动序列新增一次 O(n) 盘读(每节点恰一次顺序读+nodefile.loads 纯字符串切分,无 YAML/检索打分/嵌入,非 rebuild 式全量重扫;修复只对漂移条目定向 upsert,对照 rebuild_index 既有能力控制在增量);干净库零输出零写盘;`MDCG_RECONCILE=0` 一键关闭,缺省开。
|
|
42
|
+
2. content_hash diff 采用双形态接受集:仓内存 add 路径(mdcg.py:1588,封存原文)与 rebuild 路径(mdcg.py:1154,loads 读回含尾换行)两 producers 指纹形态本就并存(临时库实测 n1 无尾换行两形态不等),diff 两侧都认——否则无尾换行节点每次启动误报漂移;不改变任一 producer 的既有写入语义。
|
|
43
|
+
3. 启动期修复经 `_unstage`/`_stage` 既有原语落 `_index_log`(tombstone/upsert),与既有写路径同一加锁/落账纪律,未新增写面。
|
|
44
|
+
4. `_scan_nodes` 补 UnicodeDecodeError 是行为修复:损坏真源从「炸穿整库」变「跳过该文件」(与 reconcile 告警同口径);单节点 get/_read 对损坏文件抛 UnicodeDecodeError 的既有契约未动(请求级,超出本批最小面)。
|
|
45
|
+
5. 诚实边界:frontmatter 字段值漂移(直改 importance 等)不在 v0 判据面(索引无 fm 指纹,content_hash 刻意不含 frontmatter),该面仍由 rebuild_index 兜底;对账为增益非服务前提,任何异常不阻塞启动。
|
|
46
|
+
6. 判据 b 如实声明不适用:登记表 9 格 gap 均非「索引 vs 盘面启动对账」型(R03=P11、R05/R06=P0-2、R08=N143、M01=A2 单调锚、M02=N134、M03=N133、M04=N138、M07=N91 同型),且 18 用例无一经过 mcp_server main 启动序列(grep test/chaos_injection 无 mcp_server 引用)——修后复跑 7 格 gap 仍如实观测 gap(其缺陷真实在案且不属本批修复面:读缓存负结果/reinforce 漏标脏/线程锁/TTL 单调锚/stderr 裸写/hive-swarm 面),把任一登记改 pass 即伪造修复,按「禁止伪造」纪律不改登记。R05/R06 的 gap→pass(备注批次 53 修复)由并行 P0-2 修复员已在共享工作树完成,其登记转换与本批机制自洽。
|
|
47
|
+
7. docs/theory v0.3 矩阵 T9 行「🟡部分(全量对账待建)」的文档结案属文档会话面,本批未动 docs。
|
|
48
|
+
8. 本批零 Rust 改动,cargo test 不适用(共享树中 hive/swarm Rust 改动属并行修复员,其判据 d 由其自负)。
|
|
49
|
+
|
|
50
|
+
**验证**(修复员会话实跑记录):① `python -X utf8 -m md_cg.test_reconcile_v0` → 33 passed / 0 failed(三类 diff 收敛+损坏只告警+开关+dry-run+损坏在场重开不炸+承接面源断言);② `python -X utf8 test/chaos_injection/run_all.py` → 汇总 18/18「一致」、ALL CONSISTENT、EXIT=0;③ `python -X utf8 scripts/run_tests.py --jobs 4` → SUMMARY 207/207 通过(5 跳过);④ `python -X utf8 -m md_cg.test_twophase`(35/0)+ `-m md_cg.test_verify_dirty_reconcile`(18 PASS)+ `-m md_cg.test_protocol`(41/0)定向回归;⑤ 真 server E2E:tempfile 哑令牌环境 spawn `python -m md_cg.mcp_server`(MDCG_ROOT/TOKEN_FILE 全钉临时目录),植入 e1 篡改后 stderr 实测「[mdcg-reconcile] 启动对账 v0: 幽灵条目=0 缺失条目=0 哈希漂移=1 真源损坏/不可读=0(已按盘面增量修复索引面)」且重开 get(e1)=TAMPERED body,测毕 rmtree;⑥ `python scripts/workspace_index.py --check` → 一致(20 顶层目录);⑦ 临时库双形态指纹 probe:add 无尾换行节点 → add 形 hash≠rebuild 形 hash 实证,diff 双形态接受零误报。全部临时目录/哑令牌,零触真实令牌库/serve/数据目录;未 git commit(编排会话负责)。
|
|
51
|
+
|
|
52
|
+
### 2.2 FI-R03 伪造 result.json `ok=true` 被采信 → P11 结果完整性锚落地(gap→pass,批次 53)
|
|
53
|
+
|
|
54
|
+
**落点**:
|
|
55
|
+
|
|
56
|
+
- 新增 `hive/src/hmac.rs`(纯 std SHA-256+HMAC,移植自 swarm/rust_runtime/src/hmac.rs 同源;:32 `ANCHOR_DOMAIN`、:142 `result_anchor_hex` 唯一公式实现、:149 `ct_eq` 恒时比较、:172-201 FIPS/RFC 向量+Python 同公式交叉核对断言)。
|
|
57
|
+
- 新增 `hive/src/keyres.rs`(:17 `resolve_key_from_env`:`HIVE_ORCH_TOKEN`→`HIVE_ORCH_TOKEN_FILE`→`HIVE_API_KEY` 既有配置/令牌面链,无公开缺省常量)。
|
|
58
|
+
- `hive/src/lib.rs:20-27` 挂载两模块;`hive/src/job.rs:104` `new_result_nonce`、:136 `init_job_with_anchor`(nonce=Some 时 status 落 result_nonce,其余字段与写序与旧格式逐字段一致)、:3-20 模块头文件协议文档。
|
|
59
|
+
- `hive/src/scheduler.rs:59/101/109` `ServeCfg.result_key`+`with_result_key`(new 恒 None,测试密闭)、:511 `classify_result` 锚门(无 error 先过 verify_result_anchor:Pass→done / MissingAnchor·Unverifiable→needs_review / Mismatch→error)、:564-579 AnchorVerdict+verify_result_anchor 唯一校验实现、:447/:279/:317 classify_exit 与 recover_orphans 透传密钥、:689 deps_gate 把 needs_review 列入失败传播、:11-25 模块头文档。
|
|
60
|
+
- `hive/src/exec.rs:91` spawn_executor 增 anchor 参(env `HIVE_RESULT_ANCHOR` 注入执行器);`hive/src/main.rs:193` cmd_serve 密钥解析+stderr 显式声明(on/off 不静默)、:321-323 cmd_submit nonce+响应 result_anchor=on/off;`hive/src/spec.rs:21/:48` 失败传播文档补 needs_review。
|
|
61
|
+
- `hive/exec.py:136` 与 `hive/exec_cmd.py:45` write_result 回写 env `HIVE_RESULT_ANCHOR`→`result.result_anchor`(env 缺省不写字段);`hive/hive_mcp/mcp_server.py:243-281` `_RESULT_KEY_KEYS`+`_result_anchor_key`(与 keyres.rs 同链,config.local 解析值按 serve_start 合并语义胜出 env)、:301 `_submit` 解析到密钥时 status 追加 result_nonce(orch.py 复用同一 `_submit`);`hive/hive_mcp/smoke_test.py` 假执行器补回写锚(契约同 exec.py)。
|
|
62
|
+
- `hive/tests/judgment_surface.rs:281/:399/:457` 新增三承重锚测试(result_anchor_gate 五分支含反向对照、anchor_needs_review_rerun_escape_hatch 与 M1 逃生门组合、anchor_e2e_done_with_echo_executor 端到端)。
|
|
63
|
+
- `test/chaos_injection/harness.py` hive_submit/hive_spawn_serve 增 env_extra(None=移除键);`test/chaos_injection/test_fi_r03_fake_result_ok.py` 改写为锚拦截 pass 场景(A 无锚伪造→needs_review / B 攻击者错钥重实现公式→error / C 逃生门留痕重投→诚实重跑 done / D 诚实链路零回归对照 / E 无密钥旧格式向后兼容对照+读码断言);`test/chaos_injection/registry.py:22-27` FI-R03 登记 gap→pass(备注批次 53 修复)。
|
|
64
|
+
- 注:工作树中 hive/src/json.rs、main.rs 的 P0-2 幂等键与 md_cg/swarm/R05-R06 用例改动为同批并行修复员落点,与本案在 cmd_submit 处共存(幂等去重先于 nonce 生成,互不干扰),全部验证均在合并树上实跑。
|
|
65
|
+
|
|
66
|
+
**前后对比**:修复前(v1.0 注入实测,EXPECTED_GAP 基线):classify_result 只读盘面 result.json 的 error 字段,无 error 即 done——能写盘面的组件伪造 `{ok:true,content:...}` 产物 0.4s 内被采信 state=done,poll 面展示伪造内容,全程零 error 标注(T4 静默改写成立);verify_runner.py:161-166 passed>0 门只约束验证器自身;rerun_on_recover 逃生门在位但缺省 false。修复后(本批次实测):锚预期任务(status 带 result_nonce)的产物须携带与 `HMAC-SHA256(密钥, "hive-result-anchor-v1|" + sha256hex(spec.json 字节) + "|" + nonce)` 一致的 result_anchor 才采信 done——FI-R03 实测逐格:**A** 伪造 ok=true 无锚→state=needs_review(0.2s 内判定,error 文本「产物完整性锚缺失」,伪造产物留盘可追溯,poll 面如实展示 needs_review+error 零静默);**B** 攻击者以 Python 独立重实现公式但持错钥伪造锚→state=error「完整性锚校验失败:拒绝采信」;**C** rerun_on_recover 逃生门→伪造产物更名 result.json.recovered-* 留痕强制重投,重跑的诚实执行器带锚落地 done;**D** 诚实对照(真实 hive.exe submit 锚预期+exec_cmd.py 回写锚)→done 正常链路零回归;**E** 无密钥提交(显式移除三键)→响应 result_anchor=off、status 无 nonce→同一锚判据 serve 上照常 done(向后兼容)。
|
|
67
|
+
|
|
68
|
+
**语义变化声明**:
|
|
69
|
+
|
|
70
|
+
1. 状态机新增终态值 **needs_review**——锚缺失或锚不可校验产物的可疑处置态(不自动采信、不销毁证据);deps_gate(scheduler.rs:689)将其与 error/timeout/killed 同列失败传播,下游任务直接 error 不执行(不悬置等待);poll/doctor 按普通状态串透出。
|
|
71
|
+
2. 仅当 status.json 带 result_nonce(=提交面解析到锚密钥,任务显式声明锚预期)才启用新判据:无 result_anchor→needs_review,锚不匹配(伪锚/挪锚/提交后 spec 被改)→error 终态,通过→done。
|
|
72
|
+
3. 向后兼容:无 result_nonce 的任务(存量任务池、无密钥提交面、任意宿主手搭现场)维持旧「产物说了算」判据 done/error,逐字段零变更(judgment_surface 既有 recover_by_artifact/rerun_on_recover_escape_hatch 未改动且全绿即证);执行器在 env HIVE_RESULT_ANCHOR 缺省时不写 result_anchor 字段,产物格式向后兼容。
|
|
73
|
+
4. 密钥只取 hive 既有配置/令牌面 env 链 `HIVE_ORCH_TOKEN`→`HIVE_ORCH_TOKEN_FILE`→`HIVE_API_KEY`(对照 config.local 既有键,serve 经 serve_start.py 注入即生效;Python 提交面另读 config.local.json 且 config 值胜出 env=serve_start 合并语义;Rust CLI 面只读进程 env);不设公开缺省常量密钥(N143 教训:公开缺省=可自签=锚判据失效),无密钥部署锚判据整体不启用、行为与旧版一致,提交响应以 result_anchor=on/off 显式透出降级不静默。
|
|
74
|
+
5. 锚预期任务落在无密钥 serve 上→needs_review(Unverifiable,fail-closed 不静默放行,error 文本指引以 serve_start.py 重启)。
|
|
75
|
+
6. 诚实残余面:持钥组件仍可伪造合法锚(密钥保密性是判据边界,与 swarm WAL 同界);同任务旧诚实产物重放不可检(与 rerun_on_recover 组合缓解);verify_runner passed>0 门未动(按 ask 仅为背景,读码断言在 FI-R03 内留档)。
|
|
76
|
+
|
|
77
|
+
**验证**(修复员会话实跑记录):① `cargo test`(cwd=hive/,终树实跑):29+7+6=42 passed / 0 failed——含新增 hmac 向量与 Python 同公式交叉核对、keyres env 链、job::init_job_with_anchor_metadata,及 judgment_surface 新增三测试与既有 recover_by_artifact / rerun_on_recover_escape_hatch 全绿(向后兼容零回归);② `cargo build --release`(供注入套件真实 hive.exe,0 error);③ `python -X utf8 test/chaos_injection/test_fi_r03_fake_result_ok.py` → 15 检查全 OK,CASE_RESULT {verdict:pass, expected:pass, consistent:true},EXIT=0;④ `python -X utf8 test/chaos_injection/run_all.py` → 18/18 全部「一致」ALL CONSISTENT EXIT=0(FI-R03 观测=pass 登记=pass;既有 pass 格零回归;EXPECTED_GAP 格 R08(N143)/M01-M04/M07 基线维持);⑤ `python -X utf8 scripts/run_tests.py --jobs 4` → SUMMARY 207/207 通过,5 跳过 EXIT=0;⑥ `python -X utf8 hive/hive_mcp/smoke_test.py` → 21 pass/0 fail EXIT=0(MCP 提交面 nonce→serve 锚判据→假执行器回写锚端到端)。测毕无 hive.exe 残留进程。
|
|
78
|
+
|
|
79
|
+
### 2.3 R05/R06 WAL 验签 seq 连续性判据(P0-2 落地,批次 53)
|
|
80
|
+
|
|
81
|
+
**目标**:`swarm/rust_swarm.py` `verify_wal_signatures` 增 seq 连续性判定——以首行 seq 为基准步进,缺失(跳号)/重复/乱序且验签有效的行判 bad 并报 `continuity_breaks` 明细 `{line,expected,actual,kind,row_type}`;快照行与事件行同链(Rust 侧同一 event_seq 计数器,swarm.rs 五处写行全部 event_seq+=1);验签无效的可解析行按占位+1 推进期望位、不以其(可伪造的)seq 重定链位;新增 `skip_continuity=False` 参数缺省严格、可显式放宽。
|
|
82
|
+
|
|
83
|
+
**落点**:`swarm/rust_swarm.py:8-12`(模块头职责注记)· `swarm/rust_swarm.py:102-201`(verify_wal_signatures::104-105 skip_continuity 参数、:157-192 连续性判定块、:200 continuity_breaks 返回键)· `test/chaos_injection/test_fi_r05_wal_drop_line.py`(全文重写为 pass 判据:删除行→break 明细/正常零误伤/空单行兼容/放宽逃生门/读码判据在位)· `test/chaos_injection/test_fi_r06_wal_reorder_dep.py`(swarm 半边重写为乱序可检判据,hive 半边 fail-fast 4 断言保持)· `test/chaos_injection/registry.py:30-39`(FI-R05/FI-R06 gap→pass,备注批次 53 修复落地)· `test/chaos_injection/test_fi_m05_twophase_kill_between.py:57-60`(企划外一行机械修复,见语义变化声明第 5 条)。
|
|
84
|
+
|
|
85
|
+
**前后对比**(对照实验,系统临时目录+哑密钥,测毕清理):【修复前】删除中间行(seq=2)→`{total:2, verified:2, bad:0, all_valid:True}`、行序交换(3,1,2)→同样全绿零信号(批次 52 实测基线)。【修复后实测】删除中间行→bad=1, all_valid=False, breaks=`[{line:2, expected:2, actual:3, kind:跳号缺失, row_type:任务}]`;交换两行→bad=1, all_valid=False, breaks=`[{line:2, expected:4, actual:1, kind:重复或乱序}]`;重复行(1,2,2,3)→bad=1, breaks=`[{line:3, expected:3, actual:2}]`;正常 WAL→`{total:3, verified:3, bad:0, all_valid:True, breaks:[]}` 零误伤;空 WAL/单行 WAL→语义不变;快照行同链连续(1,2,snap3,4)→全绿;快照行后跳号→snap_bad+bad 双 break 精确定位;skip_continuity=True→回旧语义(删行不可检);CLI swarm_cli verify:正常 rc=0/ok=true,删行 rc=1/ok=false 且 stdout 恒单行 JSON 透传 continuity_breaks。【套件格】FI-R05/FI-R06:gap→pass(转绿),FI-R04 及全部既有 pass 格零回归,gap 格(R03 已随锚面转 pass;R08/M01-M04/M07)基线维持。
|
|
86
|
+
|
|
87
|
+
**语义变化声明**:
|
|
88
|
+
|
|
89
|
+
1. 返回 dict 新增恒在键 `continuity_breaks`——对键集合全等比较的消费者会破;仓内核查无此类消费者(grep 在案),FI-R04/R05 原精确字典比较分支均有 or 回退、实测全过。
|
|
90
|
+
2. 验签缺省语义收紧:非连续 seq 的验签有效行现判 bad、all_valid=False,CLI verify 对此类 WAL 从 exit 0 转 exit 1(实测在案)——存量合法但非连续历史(手动裁剪等)须调用方显式 `skip_continuity=True` 放宽,缺省严格。
|
|
91
|
+
3. 空 WAL/单行 WAL/连续 WAL(含快照行交错,因 Rust 快照行与事件行共用 event_seq)语义不变;全部 swarm 常规测试(真实 Rust 产物 WAL 验签:protocol/gossip/health/fault/watermark/inbox/kill/resume)零回归实测。
|
|
92
|
+
4. 链安全规则:验签无效行的 seq 不可信、不得重定链位(按占位+1),伪造 seq 无法借链洗白。
|
|
93
|
+
5. 企划外修复声明:test_fi_m05:57 的 `text="utf-8"`→`encoding="utf-8", errors="replace"` 为 md_cg.test_subproc_encoding 检查器明示修法——该格在纯净 HEAD worktree 同样红(批次 52 遗留存量基线红,非本次回归),且原写法在非 UTF-8 locale 下会以本地编码严格解码管道属潜在崩溃面;语义保持,FI-M05 用例复测 pass。
|
|
94
|
+
6. Rust 零改动(swarm/rust_runtime 未触碰,git status 在案)→ cargo test 不适用;嵌入 Rust 运行时已经由 test_rust_swarm* 全套实跑交叉验证(PASS)。
|
|
95
|
+
7. 工作树为同批并行修复员共享(md_cg/mcp_server.py、md_cg/mdcg.py、md_cg/reconcile.py、hive/src/hmac.rs 非该修复员所改),全量套件结论以终跑时刻树状态为准。
|
|
96
|
+
|
|
97
|
+
**验证**(修复员会话实跑记录):① `python -X utf8 test/chaos_injection/test_fi_r05_wal_drop_line.py` → 8 检查全 OK,EXIT 0;② `python -X utf8 test/chaos_injection/test_fi_r06_wal_reorder_dep.py` → 7 检查全 OK,EXIT 0;③ `python -X utf8 test/chaos_injection/run_all.py` 跑两次(修复后+终态)→ 均 18/18 与登记一致 EXIT 0;④ 对照实验 9 例(A 正常/B 删行/C 放宽/D 交换/E 重复/F 空/G 单行/H 快照同链/I 快照后跳号)输出逐例在案;⑤ CLI smoke 两态 rc=0/rc=1 在案;⑥ `python -X utf8 -m md_cg.test_subproc_encoding` 修复前 exit 1(纯净 HEAD worktree `git worktree add` 复现同样 exit 1=存量红)、修复后 exit 0;⑦ `python -X utf8 -m hive.test_orch_poll_cache` standalone 两树均 12/12 exit 0(首跑 --jobs 4 下 FAIL 1 系并行抖刺/兄弟修复员在途编辑,终跑未复现);⑧ `python -X utf8 scripts/run_tests.py --jobs 4` 终跑 206/206 通过、5 跳过、EXIT 0(首跑 204/206,两 FAIL 均已定性:m05 存量红已修,poll_cache 并行抖刺 standalone 绿)。
|
|
98
|
+
|
|
99
|
+
### 2.4 幂等键标准化 v0——hive 提交面(v0.3 T7/P0-2)
|
|
100
|
+
|
|
101
|
+
**目标**:spec canonical json(键序/空白不敏感,json.rs `to_canonical_string` 递归键排序+重复键取末+紧凑分隔)的 sha256(复用同批次 hive/src/hmac.rs::sha256,零 crate 依赖)为 content_hash 幂等键:cmd_submit 在依赖检查后扫描活跃任务(pending/claimed/running)同哈希即返回既有 job_id + `deduplicated=true` 不新建;终态不拦(重跑语义不变);无 content_hash 的旧格式任务不参与去重(向后兼容)。
|
|
102
|
+
|
|
103
|
+
**落点**:`hive/src/json.rs:407-478`(to_canonical_string/write_canonical + canonical_tests 2 测试:键序空白不敏感/重复键取末/数组有序/递归)· `hive/src/main.rs:220-242`(find_active_by_hash 扫描助手)· `hive/src/main.rs:243-320`(cmd_submit 幂等面::299-318 去重命中响应 deduplicated=true,:333-341 init 后 patch_status 落 content_hash + 响应 deduplicated=false/content_hash,:770-820 单测 dedup_scan_active_only/content_hash_canonical_insensitive)· `test/chaos_injection/test_fi_r07_double_serve_claim.py`(次观测改写为守卫①-⑥:同 spec 两次→同 job_id+deduplicated=true/池内恰 1 份/不同 spec→不同 job/置 done 后重提→新建/读码判据在位;注入时序修正为双 serve 先就位后投递)· `test/chaos_injection/registry.py:42-47`(FI-R07 注记:P0-2「提交面无幂等键」次观测结案,批次 53 修复,T2/T7 幂等🟢)。
|
|
104
|
+
|
|
105
|
+
**前后对比**(真实 hive.exe 实测,临时目录哑 spec 测毕清理):【修复前=批次 52 基线】同 spec 重复 submit 两次→两个不同 job_id/两任务目录(提交面无 content-hash 幂等键)。【修复后实测】第 1 次 rc=0 job_id=h1790398346652_39d0 deduplicated=False content_hash=a9315efd43a5…(64hex);第 2 次同 spec rc=0 同 job_id deduplicated=True(池内恰 1 份);不同 spec rc=0 新 job_id deduplicated=False;任务置 done 后重提→新建 deduplicated=False(重跑语义不变)。FI-R07 守卫①-⑥ 全 OK(16 检查全过 EXIT 0)。
|
|
106
|
+
|
|
107
|
+
**语义变化声明**:
|
|
108
|
+
|
|
109
|
+
1. 响应契约变化(均为增量):hive submit 成功响应新增 `deduplicated`(新建=false/去重命中=true)与 `content_hash`(64hex)两字段——按 job_id/ok 解析的消费者不受影响(FI-R06/R07、mreview pipeline、gen_specs 路径全过实测);去重命中 rc=0 且返回既有 job_id,调用方无需改代码即获得幂等。
|
|
110
|
+
2. 仅拦截**活跃**任务(pending/claimed/running),终态(done/error/timeout/killed)不拦=重跑语义不变;仅 status.json 带 content_hash 的新格式任务参与去重,存量任务池/旧格式零变更。
|
|
111
|
+
3. 新任务 status.json 多一个 content_hash 字段(init 后 patch 补写,不动 init_job 单写者写序;补写失败仅损去重能力不损任务本体)。
|
|
112
|
+
4. v0 边界如实声明:并发双提同 spec 的纳秒级竞窗不设锁(无 submit 原子原语,可能双建——与修复前行为同级,v0 最小面);MCP Python 提交面(hive_mcp/mcp_server.py `_submit` 独立实现)未纳入本面;幂等键依赖同批次并行修复员新增的 hive/src/hmac.rs(sha256 复用其实现,未写第二套)。
|
|
113
|
+
5. FI-R07 注入时序修正(双 serve 先就位后投递):原「先投递再拉 s2 --force」会让 s2 的启动恢复扫掉 s1 在飞任务(实测踩坑 error='serve 中断:任务执行被重置',该恢复语义在 HEAD 已存在、非本批新增);修后竞争纯粹落在 claim 原子锁,主观测①②③ 判据含义不变。
|
|
114
|
+
|
|
115
|
+
**验证**(修复员会话实跑记录):① `cargo test`(cwd=hive/)→ bin 7 passed + lib 29 passed(含 json::canonical_tests 2 与 tests::dedup_scan_active_only/content_hash_canonical_insensitive)+ 集成 judgment_surface 6 passed,全绿;② `cargo build --release` → Finished release(套件用产物含幂等面);③ `python -X utf8 test/chaos_injection/test_fi_r07_double_serve_claim.py` → 16 检查全 OK,CASE_RESULT verdict=pass consistent=true,EXIT 0;④ `python -X utf8 test/chaos_injection/run_all.py` → 18/18 观测与登记一致,ALL CONSISTENT EXIT 0;⑤ 原始响应对照(真实 hive.exe 临时目录):第 1 次 deduplicated=False / 第 2 次同 job_id deduplicated=True / 不同 spec 新 job deduplicated=False,逐行输出在案;⑥ `python -X utf8 scripts/run_tests.py --jobs 4` → 207/207 通过、5 跳过、FULL_EXIT=0;⑦ `cargo test`(cwd=swarm/rust_runtime)→ 8/8 passed(本修复未触该 crate,照纪律实跑确认)。
|
|
116
|
+
|
|
117
|
+
### 2.5 报告员引证抽查(本会话实核)
|
|
118
|
+
|
|
119
|
+
对第二节材料按 path:line 做机械抽查,以下均实核一致:
|
|
120
|
+
|
|
121
|
+
- `md_cg/reconcile.py`:ENV_SWITCH=:45、TRACE_FILE=:49、enabled()=:56、_disk_hashes()=:72、_scan_disk()=:78、reconcile_state()=:141,全文恰 228 行 ✓
|
|
122
|
+
- `md_cg/mdcg.py`:`_scan_nodes` 补捕 UnicodeDecodeError(:1206-1213 注释在案)、`reconcile_state` 委托与文档串、索引条目 `content_hash` 走 nodefile 唯一实现 ✓
|
|
123
|
+
- `md_cg/mcp_server.py:3726-3738`:两段式对账块后接 `cg.reconcile_state()`,try/except 不阻塞启动 ✓
|
|
124
|
+
- `hive/src/hmac.rs`::32 ANCHOR_DOMAIN="hive-result-anchor-v1"、:142 result_anchor_hex、:149 ct_eq ✓;`hive/src/keyres.rs:17` resolve_key_from_env 三键链 ✓;`hive/src/job.rs:104/:136` ✓
|
|
125
|
+
- `hive/src/scheduler.rs`::59 result_key、:511 classify_result、:689 邻域 needs_review 失败传播(error/timeout/killed/needs_review 同列)✓
|
|
126
|
+
- `hive/src/json.rs:407` to_canonical_string ✓;`hive/src/main.rs:220` find_active_by_hash、:249 cmd_submit、:301-318 去重命中响应 ✓;`hive/src/exec.rs:91` spawn_executor anchor 参 ✓;`hive/src/spec.rs` 失败传播文档含 needs_review ✓
|
|
127
|
+
- `hive/exec.py:134-136`、`hive/exec_cmd.py:43-45` env HIVE_RESULT_ANCHOR 回写 ✓;`hive/hive_mcp/mcp_server.py:247/:286` nonce 面实核在 :247 与 :286 ✓
|
|
128
|
+
- `hive/tests/judgment_surface.rs:281/:399/:457` 三承重锚测试 ✓
|
|
129
|
+
- `swarm/rust_swarm.py:104-105` skip_continuity 参数、:159 连续性判定块、:200 continuity_breaks 返回键 ✓
|
|
130
|
+
- `test/chaos_injection/registry.py`:FI-R03 登记 pass(批次 53 修复注记)、FI-R05/FI-R06 登记 pass、FI-R07 注记幂等键结案 ✓;`test_fi_m05_twophase_kill_between.py:57-60` 已为 `encoding="utf-8", errors="replace"` ✓
|
|
131
|
+
- 一处微漂如实注记:材料称 `hive/hive_mcp/smoke_test.py:96` 假执行器补回写锚,实测锚回写在 `smoke_test.py:104-106`(文件演进行号微漂,机制在位)。
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 三、注入套件终验
|
|
136
|
+
|
|
137
|
+
**本报告会话实跑** `python -X utf8 test/chaos_injection/run_all.py`,实测汇总逐格:
|
|
138
|
+
|
|
139
|
+
| 用例 | 观测 | 登记 | 一致 | 用例 | 观测 | 登记 | 一致 |
|
|
140
|
+
|------|------|------|------|------|------|------|------|
|
|
141
|
+
| FI-R01 | pass | pass | ✓ | FI-M01 | gap | gap | ✓(A2 单调锚待建) |
|
|
142
|
+
| FI-R02 | pass | pass | ✓ | FI-M02 | gap | gap | ✓(N134) |
|
|
143
|
+
| **FI-R03** | **pass** | **pass** | **✓(gap→pass)** | FI-M03 | gap | gap | ✓(N133) |
|
|
144
|
+
| FI-R04 | pass | pass | ✓ | FI-M04 | gap | gap | ✓(N138) |
|
|
145
|
+
| **FI-R05** | **pass** | **pass** | **✓(gap→pass)** | FI-M05 | pass | pass | ✓ |
|
|
146
|
+
| **FI-R06** | **pass** | **pass** | **✓(gap→pass)** | FI-M06 | pass | pass | ✓ |
|
|
147
|
+
| FI-R07 | pass | pass | ✓ | FI-M07 | gap | gap | ✓(N91 同型) |
|
|
148
|
+
| FI-R08 | gap | gap | ✓(N143) | FI-M08 | pass | pass | ✓ |
|
|
149
|
+
| FI-R09 | pass | pass | ✓ | FI-M09 | pass | pass | ✓ |
|
|
150
|
+
|
|
151
|
+
- 汇总:**18/18 与登记一致,ALL CONSISTENT,EXIT=0**(pass 11 / gap 7)。
|
|
152
|
+
- **FI-R03 / FI-R05 / FI-R06 三格 gap→pass**:观测=pass、登记=pass、备注批次 53 修复。
|
|
153
|
+
- 7 格 gap 为 EXPECTED_GAP 基线维持(确认缺口仍在),其缺陷真实在案且不属本批修复面——按「禁止伪造」纪律不改登记。
|
|
154
|
+
|
|
155
|
+
## 四、门禁
|
|
156
|
+
|
|
157
|
+
| 门禁 | 状态 | 依据 |
|
|
158
|
+
|------|------|------|
|
|
159
|
+
| cargo(hive/swarm Rust) | **未运行**(本报告流程) | 报告员会话未实跑 cargo;各修复员会话材料的 cargo 实跑记录见第二节对应「验证」栏(hive 42 passed、rust_runtime 8/8 等),如实转录、不计为本报告会话门禁证据 |
|
|
160
|
+
| hive | **通过** | CI 有 `hive-check.yml` 蜂巢门禁;本会话佐证:python 全量套件中 hive.* 全 PASS(23 件可见于输出)、注入套件 R 面 FI-R01–R07/R09 全 pass、`test/chaos_injection/test_fi_r03/r07` 等真实 hive.exe 端到端实测(修复员材料) |
|
|
161
|
+
| swarm | **通过** | 本会话佐证:python 全量套件中 swarm.tests 全 PASS、注入套件 FI-R04/R05/R06(WAL 验签/连续性)全 pass(本会话实跑 run_all.py)、swarm 常规套件零回归(修复员材料) |
|
|
162
|
+
| python 全量 | **通过(退出码 0)** | 本会话实跑 `python -X utf8 scripts/run_tests.py --jobs 4` 两次:SUMMARY **207/207 通过,5 跳过**,第二次精确捕获退出码 **SUITE_RC=0**、FAIL 计数 0 |
|
|
163
|
+
| gate | **gate=1** | 编排面给定取值,照实转录;仓库内(scripts/、test/chaos_injection/、.github/workflows/)未定位到其生成器,含义本会话无法进一步核验——如实声明,不猜测 |
|
|
164
|
+
|
|
165
|
+
## 五、遗留与后续
|
|
166
|
+
|
|
167
|
+
1. **注入登记 7 格 gap 真实在案,待后续批次**:FI-R08=N143(公开缺省密钥可伪造合法签名,owner=rust,密钥生命周期决策 deferred);FI-M01=A2 单调锚待建(v0.1§2.9 承重面);FI-M02=N134;FI-M03=N133;FI-M04=N138;FI-M07=N91 同型。均非本批修复面,登记未动。
|
|
168
|
+
2. **reconcile 全量重放(待建)**:reconcile v0 只做启动期增量对账;「全量重放」演练面(对历史 `_index_log`/盘面做全量重放复核)待建;frontmatter 字段值漂移不在 v0 判据面,仍由 rebuild_index 兜底;真源损坏只告警不改写为 T9 有意边界(结构合法≠内容正确)。
|
|
169
|
+
3. **幂等键扩展面**:并发双提同 spec 的纳秒级竞窗不设锁(可能双建,v0 最小面,与修复前同级);MCP Python 提交面(hive_mcp/mcp_server.py `_submit`)未纳入幂等面(仅锚 nonce 面);终态任务不拦为重跑语义的有意保留。
|
|
170
|
+
4. **诚实残余面(如实声明)**:持钥组件仍可伪造合法锚(密钥保密性是判据边界,与 swarm WAL 同界);同任务旧诚实产物重放不可检(与 rerun_on_recover 逃生门组合缓解);verify_runner passed>0 门未动。
|
|
171
|
+
5. **文档结案面**:docs/theory v0.3 矩阵 T9 行「🟡部分(全量对账待建)」及 T2/T7 幂等行的 🟡→🟢 文档结案属文档会话面,本批未动 docs(registry.py 内注释已先行注记批次 53 修复)。
|
|
172
|
+
6. **报告会话未复跑项**:cargo test/build(hive 与 swarm/rust_runtime 两 crate)均未在本报告会话实跑,状态以第二节各修复员实跑记录为准。
|
|
173
|
+
|
|
174
|
+
## 六、纪律合规声明
|
|
175
|
+
|
|
176
|
+
1. **先读索引后查文件**:已先读 `WORKSPACE_INDEX.md` 按目录职责定位(md_cg/、hive/、swarm/、test/、scripts/、docs/),未做全盘浏览。
|
|
177
|
+
2. **结论引证**:报告内结论均落 path:line(第二节为修复员材料转录+报告员 2.5 节机械抽查实核);本会话实跑的检查(第三、四节)均给出确切命令与实测输出。
|
|
178
|
+
3. **实验隔离**:各修复员会话实验全部在系统临时目录/临时库/哑令牌环境完成、测毕清理;本报告会话仅实跑仓内标准守卫(run_all.py、run_tests.py,隔离由套件自身承担),零触真实令牌库/真实 serve/真实数据目录。
|
|
179
|
+
4. **理论判据与验收真源**:判据用 `docs/theory/不可靠定理与失效优先框架_v0.3.md` + `docs/不可靠性理论_v0.1.md`;验收以 `test/chaos_injection/registry.py` 登记为真源(18/18 观测与登记一致)。
|
|
180
|
+
5. **输出纪律**:全文中文、无本机绝对路径(均仓内相对路径);**未 git commit**(编排会话负责)。
|
|
181
|
+
6. **无法满足项如实声明(不绕过不伪造)**:①「gate=1」为编排面给定取值,报告员在仓库内未定位到其生成器,未猜测其含义;②cargo 门禁本会话未运行,未将修复员材料中的 cargo 结果计为本会话门禁通过;③材料中 smoke_test.py:96 一处行号微漂(实测 :104-106)已在 2.5 节如实注记。
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
*报告员会话生成 · v1.0 · 批次 53*
|