@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,199 @@
|
|
|
1
|
+
# 缺陷挖掘报告 · 自主迭代 v17(hive 三轮深挖·三圈第二站)
|
|
2
|
+
|
|
3
|
+
- **日期**:2026-09-26(批次 49)
|
|
4
|
+
- **范围**(生效条件):第 17 轮 = hive 域三轮深挖第二站,四区复核(legacy / recent / orchexec / serverust)共 **36 条目**(confirmed 36 / rejected 0)→ 跨区重复冗余 **16 条**(N92/N89 各四区重复 ×3、N127/N90/清账台账各三区重复 ×2、N88/v8 N68/N91/N143 各两区重复 ×1)→ 独立条目 **20**(独立缺陷 **19** = 本轮新发现 7 项 **N141-N147**〔high 1 / medium 4 / low 2,其中 N141/N142 当场修复〕+ legacy 复测 12 项;另清账台账 1 条为非缺陷记录条)→ 本轮修复 **5 个补丁**(闭 6 项缺陷:N141/N92/N89/N9/N142/N88;并兑现 N127 最小止血与 v8 N70 写侧收口——全 Python 面、全 hive 域〔swarm 密钥面新发现 N143 留档未修,零 Rust/TS 改动〕)→ 遗留 **13 个开口**(medium 6 / low 7)+清账台账 low 2 项(N14/N18)续管+已修剔除/复测结案 5+rejected 0
|
|
5
|
+
- **编号口径**:v16 用至 N140(v16.md:5 核实「v15 用至 N129,本轮自 N130 续编」、其最大号 N140),本轮新发现自 **N141 续编**。**材料两区临时编号冲突及本报告会话统一裁决**(如实记录):材料中 recent 区新发现暂编 N141/N142/N143、orchexec 区新发现亦暂编 N141/N142/N143,同一编号被两区用于**不同**缺陷。裁决规则=①修复结果与守卫文件名/红场记录已锚定的 recent 区三项保留原名——**N141**(敏感名单缺口,F1 红场「复现 N141」、守卫 test_sensitive_read_names.py)与 **N142**(_save_children 固定 tmp,F5 明示「覆盖 N142+N88」、守卫 test_orch.py [N] 段)以及 **N143**(WAL 缺省密钥族——recent 区条目与 serverust 区 main.rs:276-280 新发现条目为同一缺陷族,两域材料合并归一);②orchexec 区三项冲突暂编顺延:原暂编 **N141**(exec_cmd 结果写面)→ **N144**、原暂编 **N142**(orch 子任务池)→ **N145**、原暂编 **N143**(scheduler timeout 标签背离)→ **N146**;③serverust 区无暂编新发现(serve_start CLI --config IndexError)→ **N147**。留档材料中「N141(exec_cmd)」「N142(orch 子任务池)」「N143(WAL…owner=rust)」「N143(timeout…owner=rust)」四条按上述裁决重编标注,全部重编在第三节逐项标注原暂编号,非暗改。
|
|
6
|
+
- **回归**:`python -X utf8 scripts/run_tests.py --jobs 4` 全量——**本会话实跑,`===== SUMMARY 204/204 通过,5 跳过(依赖缺失/平台不符) =====`,真实退出码 0**(204 = v16 终态 200 + 本轮 4 个新守卫文件:test_sensitive_read_names / test_stop_tree_kill / test_mcp_jobs_pool / test_verify_runner_counts,各计 1;F5 守卫以 test_orch.py [N] 段增量并入原文件计数——85→94 例);**五个守卫面本会话逐一实跑全绿**(16/0、11/0、15/0、12/0、94/0,第四节);**swarm cargo test 未运行**(Rust 面零改动——本会话 `git status --porcelain` 证实 swarm/ 与 hive/src/ 无改动,改动面仅 5 个 hive python 件 + 守卫);**npm test 未运行**(TS 面零改动——git status 证实 src/ 未动);**npm run gate 通过**(材料口径与本会话实跑一致:`VERDICT=PASS`,R4 非追踪件面 `非追踪=24,允许=24`——本轮 4 个新守卫文件在允许面内;R1/R2/R3 均 PASS,cogmap/链接/工作区索引三守卫亦通过)。
|
|
7
|
+
- **行号口径**:材料缺陷/修复行号为上游复核/修复会话时点快照;本会话五处修复落点逐一读核,行号微漂处双标——F1 生效条件注释材料口径 exec.py:947 → **读核现行 :948**、endswith 补点材料口径 :977-981 → **读核现行 :976-977**;F5 import tempfile 材料口径 orch.py:53 → **读核现行 :52**、模板函数材料口径 :270-312 → **读核现行 :269-310**、_save_children 接线材料口径 :315-323 → **读核现行 :313-320**、spec 写回接线材料口径 :681-686 → **读核现行 :683**;其余修复落点读核与材料口径吻合(第二节逐项双标,以读核为准)。
|
|
8
|
+
- **结构口径**(CCG 六要素):功能名(标题)/ 生效条件(范围与口径行)/ 子功能(第二~五节)/ 执行与验证方式(第四节:实跑命令与结果)/ 不适用条件(第七节:跳过与未运行项)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 一、执行摘要
|
|
13
|
+
|
|
14
|
+
本轮为 hive 域三轮深挖第二站:四区复核 36 条目(rejected 0),跨区去重后 19 独立缺陷(新 7 + legacy 复测 12)+ 1 清账台账,5 补丁闭合 6 项,遗留 13 开口。五个主题:
|
|
15
|
+
|
|
16
|
+
1. **hive 域历轮欠账两大项兑现(任务留档复测重点①②)**:N92——serve_start stop 段不杀进程树(v10 首报、v15 维持速收候选,至今零修复;nt 臂 taskkill 无 /T、unix 臂 os.kill 无 killpg,而 start :258 start_new_session 已单独成组)——修复补 nt 臂 `/T` 树杀 + unix 臂 `os.killpg(os.getpgid(pid),15)` 组杀,restart/rebuild 经 stop() 同获;unix 真实群杀行为 win32 本机不可动态验证,以 mock 接线验证 + 源断言 + 读码论证落地并如实标注。N89——jobs 池双源分叉(v2 N17 首报、四轮维持;MCP 面 _jobs_dir 只读进程 env,serve 面经 _jobs_from 让 config 键胜出,config 设 HIVE_JOBS_DIR 时 spawn 落 env/默认池而 serve 跑 config 池,任务永久 pending 且观测面全绿)——修复将 _jobs_dir 改经 serve_start._jobs_from 合并环境决策(与 serve 同一决策函数同一合并语义),spawn/poll/kill/doctor/restart 五面单点全修。
|
|
17
|
+
2. **N9 空跑全绿绕过「未验证不写入」(v2 首报、历轮零修复)**:verify_runner suite_ok 判定不要求 passed>0,套件 rc=0 且输出零计数时验证器空跑全绿以 pass 写 verdict——修复补 `and passed > 0` 门(--smoke 探针合计 7 不误伤,守卫实测)。
|
|
18
|
+
3. **N141 敏感名单缺口(本轮新发现 high,当场修)+ N127 最小止血兑现(任务复测重点③)**:_sensitive_read 名单不含 config.local.json 与 *.token,而编排子任务 workdir=编排者 CWD(orch.py:413,serve CWD=HIVE_DIR)使 scope 覆盖整个 hive/,敏感名单是默认部署最后一道闸且对两凭据文件洞开——修复纯名单两行级增量(精确名补 config.local.json、后缀族补 .token),批次 27 _worker_scope 语义零触碰;N127 全量收紧(workdir 改子任务 job_dir)涉 scope 语义专项维持 deferred。
|
|
19
|
+
4. **F5 一模板三收(N142 新发现 + N88 legacy + v8 N70 写侧残面)**:新增 orch._atomic_write_json(mkstemp 唯一名 + fsync + os.replace + PermissionError 递增重试 + FileNotFoundError 重建自愈,与 exec.write_result v10 N82 同款模板),_save_children 接线(消除固定共享 tmp `_children.json.tmp`+裸写+except 静默吞)与 main() spec 补全写回接线(消除裸 open("w") 截断覆盖)——N142 双写者撕裂/清单丢失与 N88 半截 spec 永久失败两档同闭,v8 N70 写侧不再静默。
|
|
20
|
+
5. **新发现留档 5 项 + 台账复核结案(任务复测重点④)**:N143(WAL 缺省密钥三处 fail-open,owner=rust,涉「缺省密钥从何而来」配置语义决策 deferred)、N144(exec_cmd 结果写面缺 v10 N82 三重加固,同仓双标,下一轮优先速收候选)、N145(orch 子任务池解析只读 env 不从 job_dir 推导,与 N89 同根不同消费点)、N146(scheduler timeout 分支标签与产物背离,读码论证)、N147(serve_start CLI --config 末参 IndexError 破坏单行 JSON 契约);v10 第五节 15 项台账逐项复核——已修 5 项(N82/N83/N84/v7 N58/N87)读核+守卫实跑在位结案、仍在位 low 项逐项复测属实(其中 N88/v8 N70 写侧本轮已修)。
|
|
21
|
+
|
|
22
|
+
**对输入口径的核验**:输入称「四区复核 confirmed 36 + 5 修复 + 留档未修 14 条」。本会话以 `git status --porcelain` / `git diff --numstat` + 五处落点读核核对:改动面 = **五个修复源文件**(hive/exec.py +8/-2〔F1〕、hive/hive_mcp/mcp_server.py +23/-2〔F3〕、hive/orch.py +54/-9〔F5〕、hive/serve_start.py +12/-3〔F2〕、hive/verify_runner.py +9/-3〔F4〕)+ **一份既有守卫增改**(hive/test_orch.py +110/-0,[N] 段新增)+ **四份新守卫**(hive/test_sensitive_read_names.py 165 行 / test_stop_tree_kill.py 213 行 / test_mcp_jobs_pool.py 171 行 / test_verify_runner_counts.py 160 行,均 untracked 新文件)——与五项修复一一对应;另有 `md_cg/whitebox_kb/wisdom/code_solidified.json`(+1/-2)为 v10-v16 报告已注明的先前会话遗留工作区变更,非本轮触点。条目账目:36 confirmed(legacy 7 / recent 7 / orchexec 15 / serverust 7)− 跨区冗余 16 = 20 独立条目,其中 19 独立缺陷(新 7 + legacy 复测 12)+ 1 清账台账(非缺陷记录条);19 − 6 修 = 13 开口,与材料留档 13 条缺陷逐条对应(另 1 条台账记录条不占缺陷数);rejected 四区数组均为空(0 条证伪)。五项修复由上游修复会话完成,本报告会话未修改任何源文件,仅读核 + 守卫/门禁实跑。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 二、修复清单(5 项,逐项 where / 缺陷面 / 修复 / 攻击前后对比 / 守卫)
|
|
27
|
+
|
|
28
|
+
### F1(N141,high,本轮新发现当场修;并兑现 N127 最小止血——任务复测重点③)worker 敏感名单缺 config.local.json 与 *.token:编排子代理一句话即可外发部署凭据
|
|
29
|
+
|
|
30
|
+
- **where**:材料口径 `hive/exec.py:941-945`(_SENSITIVE_FILE_NAMES 精确名补 config.local.json)、`:977-981`(后缀族 endswith 补 .token)、`:947`(生效条件注释同步);**本会话读核现行**::941-945 元组含 `"config.local.json"`(:944)、:976-977 `name.endswith((…, ".token"))`、:948 生效条件注释(含「精确命中 _SENSITIVE_FILE_NAMES(含 config.local.json——N141,批次 49)」与「.token 后缀族——N141 补部署令牌文件」)、:971-975 N141 病灶注释(行号微漂处双标,以读核为准)。对照留档 hive/orch.py:413(子任务 workdir=CWD)、hive/serve_start.py:37(DEFAULT_CONFIG=config.local.json)、hive/orch.py:309(orch.token 产物)。守卫 `hive/test_sensitive_read_names.py`(新文件,165 行)。
|
|
31
|
+
- **缺陷面**:_sensitive_read 敏感名单缺 config.local.json 与 *.token 两类,且 read_file 通道 PII 脱敏(exec.py:1184)与 context_files 通道(exec.py:373 仅 _sensitive_read 一道,无 PII 层)双通道内容脱敏均有缺口——worker 可读范围覆盖 hive/config.local.json(serve 部署配置、api_key 所在,serve_start 文档明文支持字符串直值形态且被 .gitignore 排除=凭据类文件定性成立)并全文外发。联合可达链:orch.py:413 与 mcp_server.py:381 均设 workdir=os.getcwd(),spawn_executor(hive/src/exec.rs:87-96)不设 current_dir → 执行器继承 serve CWD,serve_start 以 cwd=HIVE_DIR 拉起 → 编排面子任务 scope 即含整个 hive/;HIVE_READ_ROOTS 缺省=放开,仅剩 _sensitive_read 一道闸。
|
|
32
|
+
- **修复**:纯名单两行级增量——①_SENSITIVE_FILE_NAMES 元组插入 "config.local.json"(经 :956-959 精确名分支命中);②:976-977 endswith 元组补 ".token"(orch.token/designer.token 等部署令牌文件命中)。批次 27 _worker_scope 语义零触碰(diff 仅 +1 名单项、+1 后缀项、注释同步);N127 的最小止血项就此了结,全量 scope 收紧仍按裁定 deferred。本缺陷无平台分臂,匹配为斜杠归一+endswith 纯字符串运算,Windows 动态验证即覆盖 unix 语义。未 git commit。
|
|
33
|
+
- **攻击前后对比**:修复前(红场 11 fail,哑密钥临时区实弹复现)——子代理/编排者对 config.local.json 与 orch.token 调 _sensitive_read 均返回 None 放行——tool_read_file(scope_roots=None 与 worker scope 覆盖两种路径)均 ok=True 全文回显哑 api_key/哑令牌;_context_block 通道同样以 `<context>` 明文拼进 prompt 随 user 消息发往外部网关。默认部署 orch.py:413 workdir=CWD 使 scope 覆盖整个 hive/,敏感名单是唯一闸且对两者洞开。修复后(绿场 16 pass/0 fail)——_sensitive_read 对两类文件名返回非 None 原因串(「敏感凭据文件(config.local.json)」/「密钥/环境凭据文件(orch.token)」),read_file 返回 ok=False 拒读且明文不进结果,context_files 通道替换为 skipped="敏感凭据拒读" 标注块;config.json/token.txt 不误伤,id_rsa/prod.env/server.pem 既有族照常命中。
|
|
34
|
+
- **守卫**:`hive/test_sensitive_read_names.py`(复刻 test_worker_scope.py 风格;哑密钥临时区 tempfile.mkdtemp、测毕 rmtree、HIVE_READ_ROOTS 弹出防干扰、绝不触真实令牌库/真实 serve):[A] 单元面 _sensitive_read 两类文件名非 None×4;[B] 实弹 read_file 编排者路径+worker scope 内路径明文不回显×4;[C] 实弹 _context_block skipped 标注不漏正文×3;[D] 零回归不误伤+既有族×5。**本会话实跑:`python -X utf8 -m hive.test_sensitive_read_names` → 「结果: 16 pass / 0 fail」EXIT=0**。
|
|
35
|
+
- **verified_by**:①红场 python -X utf8 -m hive.test_sensitive_read_names → 11 fail/5 pass EXIT=1(复现 N141,与留档第一手复测一致;红证需旧码本会话未重跑,守卫未回退);②修复后同命令 → 16 pass/0 fail EXIT=0(**本会话实跑一致**);③相关既有测试 8 件全绿 EXIT=0(材料口径:hive.test_exec_tools 87/0、hive.test_worker_scope 9/0、hive.test_exec_empty_response 12/0、hive.test_orch 85→94/0、hive.test_orch_int_args 13/0、hive.test_serve_entry ALL OK、hive.test_wm_progress 49/0、hive.test_exec_cmd ALL_PASS);④git diff hive/exec.py 核对净改动最小。
|
|
36
|
+
|
|
37
|
+
### F2(N92,medium,v10 首报→v15 速收候选→本轮第三轮复测后修——任务复测重点①)serve stop 段只杀单进程:执行器树成孤儿持凭据继续外呼
|
|
38
|
+
|
|
39
|
+
- **where**:材料口径 `hive/serve_start.py:208-226`(stop 段:nt 臂 :215 补 /T 树杀;unix 臂 :223-224 补 os.killpg);killpg 前提在位未用即 :258 start_new_session=(os.name != "nt")(serve=会话/进程组长);同仓 rust 先例 hive/src/exec.rs:63-81 kill_tree(taskkill /PID /T /F + 守卫 kill_tree_kills_grandchildren)。**本会话读核现行**::195 生效条件注释(含「按 os.name 用 taskkill /PID … /T /F(树杀,N92 批次 49——check=True)或 os.killpg(os.getpgid(pid), 15)(N92——serve 即进程组长,组杀覆盖 worker 树;unix 真实群杀行为 win 上不可动态验证,见 test_stop_tree_kill.py 诚实边界)」)、:209-217 nt 臂 `["taskkill", "/PID", str(pid), "/T", "/F"]`、:218-223 unix 臂 `os.killpg(os.getpgid(pid), 15)`、:219-222 病灶注释(getpgid 顺带兜 pid 复用)——全部在位。守卫 `hive/test_stop_tree_kill.py`(新文件,213 行)。
|
|
40
|
+
- **缺陷面**:stop/restart/rebuild 的 stop 段不杀进程树——nt 臂 taskkill /PID 无 /T、unix 臂 os.kill(pid,15) 无 killpg,而 start 以 start_new_session 已单独成组。执行器是 serve 直接子进程(scheduler.rs:393 spawn_executor),强杀后成孤儿继续跑:在自身 timeout_s 窗口内以 serve 配置凭据继续外呼、晚落 result.json 与新 serve recover_orphans(scheduler.rs:236 running 标 error)重投并发同 job,形成 state=error+result.ok=true 矛盾终态;同时是 N142 双写者对撞的前置发生器。
|
|
41
|
+
- **修复**:stop 段两处最小增量——①nt 臂任务列表补 "/T"(树杀,/T /F 形态与同仓 rust 先例一致);②unix 臂 os.kill(pid,15) 改 os.killpg(os.getpgid(pid),15)(start() 以 start_new_session=True 拉起故 serve 即组长,组杀覆盖 worker 全组;getpgid 按 pid 现查组而非沿用心跳旧号,兼兜 pid 复用)。restart/rebuild 经 stop() 同获树杀;:195 生效条件注释同步(含 unix 诚实边界标注)。
|
|
42
|
+
- **攻击前后对比**:修复前(红场 6 fail,哑父子进程树实弹复现,非真实 serve)——running 任务存在时 --stop/--restart/--rebuild 触发 stop 段 taskkill /PID 父 /F → rc=0 父死,但哑子进程(模拟 worker)存活成孤儿(A3 子 pid stop 后仍存活);顺手实证两个伴生事实:taskkill /T 对已死父 pid 是 no-op(树杀只认活根)、旧代码 unix 臂在 win 实测报「停止失败 pid=424242: [WinError 87]」(B1)。修复后(绿场 11 pass/0 fail)——stop() 后父与子都死(树杀成立,A3 转绿);unix 臂接线验证 killpg(getpgid(pid),15) 恰调一次。**诚实边界**:unix 臂真实群杀行为 win32 本机不可动态验证——以 mock 接线验证(B1-B3)+ 源断言(C2/C3 killpg 与 start_new_session 前提在位)+ 读码论证落地,全修须 unix 机实跑方可报全修。
|
|
43
|
+
- **守卫**:`hive/test_stop_tree_kill.py`(哑父子进程树+手工心跳+补丁 EXE=python 映像名放行身份层,绝不触真实 serve):[A] nt 实弹面——哑父 spawn 哑子,stop() 后父与子都须死(A0-A3,旧代码 A3 红=孤儿成立);[B] unix 臂接线(mock os.name=posix + create=True 打桩 getpgid/killpg——win32 的 os 无此二者)——killpg(getpgid(pid),15) 恰调一次且 ok(B1-B3,旧代码全红);[C] 源断言——nt 臂 /T 在位/unix 臂 killpg 在位/start_new_session 前提在位/exec.rs 先例未漂移(C1-C4)。守卫自清理不依赖被测代码(父死后对已记录子 pid 追加直杀),绿场跑后无 sleep(300) 哑进程残留。**本会话实跑:`python -X utf8 -m hive.test_stop_tree_kill` → 「结果: 11 pass / 0 fail」EXIT=0**。
|
|
44
|
+
- **verified_by**:①红场同命令 → 5 pass/6 fail EXIT=1(A3 孤儿、B1 WinError 87、C1/C2 源断言红;本会话未重跑红证,守卫未回退);②修复后 11 pass/0 fail EXIT=0(**本会话实跑一致**);③残留复核:Get-CimInstance 过滤 sleep(300) 哑进程 → 空(材料口径);④相关既有测试 4 件全绿(hive.test_serve_entry ALL OK——含 serve_start 源接线断言、hive.test_console_window、hive.test_sensitive_read_names 16/0、md_cg.test_v14_fixes 59/0,材料口径;其中 test_sensitive_read_names 本会话实跑一致);⑤git diff hive/serve_start.py 核对净改动(stop 段两处+注释)。
|
|
45
|
+
|
|
46
|
+
### F3(N89,medium,v2 N17 首报→四轮维持→本轮修——任务复测重点②)jobs 池双源分叉:spawn 落 env 池而 serve 跑 config 池,任务永久 pending 且观测面全绿
|
|
47
|
+
|
|
48
|
+
- **where**:材料口径 `hive/hive_mcp/mcp_server.py:84-113`(_jobs_dir:单源 env 裸读改经 serve_start._jobs_from 合并环境决策);对照 hive/serve_start.py:47-50(_jobs_from 纯函数)、:231/:236(start 合并环境、config 键胜出)、:371-381(_lifecycle_jobs 宽容语义);复用 mcp_server.py:64-81 _load_local_config 现成包装。**本会话读核现行**::84 生效条件注释(含「经 serve_start._jobs_from({**os.environ, **(load_config(CONFIG_LOCAL)[0] or {})}) 求值(N89 批次 49:与 serve_start.start :231/:236 同一决策函数同一合并语义)」)、:85-109 _jobs_dir 实现(:95-105 serve_start 不可导入时 except 分支退回旧 env/默认口径 fail-soft、:106-107 `cfg, _err = _load_local_config(); d = serve_start._jobs_from({**os.environ, **(cfg or {})})`)、:86-93 docstring 病灶注释(「历史缺陷(v2 N17 首报,四轮维持)」)——全部在位。守卫 `hive/test_mcp_jobs_pool.py`(新文件,171 行)。
|
|
49
|
+
- **缺陷面**:jobs 池双源分叉——MCP 面 _jobs_dir() 只读进程 env 的 HIVE_JOBS_DIR,serve_start 经 _jobs_from({**os.environ, **config}) 让 config 键胜出。config.local.json 设 HIVE_JOBS_DIR(合法配置面)且 MCP 进程 env 未设同名键时:hive_spawn 任务写 env/默认池、serve 跑 config 池——任务永久 pending 无人领取,poll/doctor 五观测面与实况全面相悖;_ensure_serve 的 setdefault(env 层补写)不构成补救(:231 config 键覆盖 env)。
|
|
50
|
+
- **修复**:一行级处方落地——_jobs_dir 主体改 `cfg,_err=_load_local_config(); d=serve_start._jobs_from({**os.environ, **(cfg or {})})`,与 serve_start.start 同一决策函数、同一合并语义;config 缺失/解析失败时 cfg={} 自然回落 env/模块默认(与 _lifecycle_jobs「stop 不因 config 笔误而停不掉」同宽容度);serve_start 不可导入时 except 分支退回旧 env/默认口径(fail-soft 不崩 JSON-RPC 协议面,stderr 留痕)。spawn/poll/kill/doctor/restart 五面同走 _jobs_dir,单点修复即全修;_ensure_serve:196/_t_restart:519 的 setdefault 与 config 键的关系由「补不上」变「天然一致」。本缺陷无平台分臂,纯路径决策函数。未 git commit。
|
|
51
|
+
- **攻击前后对比**:修复前(红场 4 fail,临时双池+哑 key 动态对照)——config.local.json 设 HIVE_JOBS_DIR=serve 池且 MCP 进程 env 未设时:serve 侧决策=serve 池(A0 实测),MCP 面 _jobs_dir()=默认仓池 hive/jobs(A1 实测分叉)→ hive_spawn ok=True 但任务落错池永无人领取;env 设另一池时 MCP 面=env 池同样与 serve 的 config 池分叉(B2 实测)。修复后(绿场 15 pass/0 fail)——两面同池(A1/B2 转绿),config 键对 MCP 进程 env 同样胜出(B1),config 无该键/缺失/坏 JSON 三态回落行为与旧码逐位一致(C1/E1/E2)。
|
|
52
|
+
- **守卫**:`hive/test_mcp_jobs_pool.py`(临时 config+哑 key+临时双池 mkdtemp,HIVE_CONFIG 钉临时文件,只控 HIVE_CONFIG/HIVE_JOBS_DIR 两键其余真实 env 保持,绝不触真实池/真实 serve——_jobs_dir 是纯路径决策点不拉起任何进程):[A] 分叉复现——serve 侧决策式 vs MCP _jobs_dir 须同池(A0/A1,旧码 A1 红);[B] 优先级——config 键胜过 MCP env(B1/B2,旧码 B2 红);[C] 零回归三态——config 无该键→env 池、HIVE_CONFIG 不存在→默认池、坏 JSON→fail-soft 默认池(C1/D1/E1/E2 修前修后均绿);[D] 源断言——_jobs_from/_load_local_config 进入决策体(D1/D3)+ 五工具面同走 _jobs_dir(D2×5)。每场景 importlib 装载全新 mcp_server 实例(CONFIG_LOCAL 为 import 时固化的模块常量)。**本会话实跑:`python -X utf8 -m hive.test_mcp_jobs_pool` → 「结果: 15 pass / 0 fail」EXIT=0**。
|
|
53
|
+
- **verified_by**:①红场同命令 → 11 pass/4 fail EXIT=1(A1/B2 分叉实测、D1/D3 源断言红;本会话未重跑红证);②修复后 15 pass/0 fail EXIT=0(**本会话实跑一致**);③相关既有测试 9 件全绿(材料口径:hive.test_mcp_entry_guard、hive.test_serve_entry、hive.test_console_window、hive.test_orch_poll_cache 12/0、hive.test_orch_int_args 13/0、hive.test_exec_tools 87/0、hive.test_sensitive_read_names 16/0、hive.test_stop_tree_kill 11/0、md_cg.test_v14_fixes 59/0);④临时区残留核检:本轮三前缀 rmtree 清零;另发现上一会话留档探针遗留临时目录一件(哑 key config+poolB,其「测毕清理」漏删)已按纪律移除并复核 ALL_CLEAN(材料口径,本会话未另行验证临时区);⑤git diff hive/hive_mcp/mcp_server.py 核对净改动。
|
|
54
|
+
|
|
55
|
+
### F4(N9,medium,v2 首报→历轮零修复→本轮修)验证器空跑全绿:suite_ok 不要求 passed>0,未验证代码获得 pass 凭证
|
|
56
|
+
|
|
57
|
+
- **where**:材料口径 `hive/verify_runner.py:165-167`(suite_ok 判定式补 and passed > 0;原 :160);对照 :52-69(_parse_counts 无命中→(0,0))、:77-85(_compose_semantics)、:152-157(--smoke 探针 3 passed/4 passed 合计 7)。**本会话读核现行**::161-164 N9 病灶注释(「N9(批次 49,2026-09-26):补 passed > 0 门——rc=0 不等于『跑了』……旧判定空跑全绿以 pass 写 verdict,绕过『未验证不写入』。passed>0 = 至少解析到一条真实计数(--smoke 探针合计 7,不误伤)」)、:165-166 `suite_ok = (rc_cargo == 0 and rc_py == 0 and failed == 0 and passed > 0)`——在位。main 生效条件注释 :99-101 同步(材料口径)。守卫 `hive/test_verify_runner_counts.py`(新文件,160 行)。
|
|
58
|
+
- **缺陷面**:suite_ok 判定 `rc_cargo == 0 and rc_py == 0 and failed == 0` 不要求 passed>0——套件 rc=0 且输出无计数命中时 _parse_counts 得 (0,0) 判 suite_ok=True,验证器空跑全绿并以 pass 写 verdict——「未验证不写入」第 5 条语义被空跑绕过,未经任何真实验证的代码获得凭证。触发无需攻击者:上游 run_tests.py 输出措辞漂移或套件静默退出 0 即成立。
|
|
59
|
+
- **修复**:一处判定式增量——suite_ok 补 `and passed > 0`(至少解析到一条真实计数);--smoke 探针合计 passed=7 不误伤(守卫 [C] 实测);_compose_semantics/_parse_counts 零改动(failure_reason=suite_failed 语义自然承接新 False 臂);仅注释同步,无平台分臂(纯函数+判定式)。
|
|
60
|
+
- **攻击前后对比**:修复前(红场 4 fail,桩 _run 注入哑输出端到端复现)——双套件静默退出 0 且零计数 → passed=0/failed=0 判 suite_ok=True,main 真跑落盘 verdict.json 实测 verdict="pass"、valid=true、failure_reason=null——验证器空跑全绿入库(B2/B3/B4 红)。修复后(绿场 12 pass/0 fail)——同一空跑形态 → verdict="fail"、valid=false、failure_reason="suite_failed"、passed=0 如实入库;冒烟形态(3 passed/4 passed)→ verdict=pass 过门不误伤;run_tests rc=1 失败形态照旧 fail(零回归)。
|
|
61
|
+
- **守卫**:`hive/test_verify_runner_counts.py`(REPO 钉临时区+frozen 手工哑凭证+_run 桩注入哑输出,绝不跑真 cargo/run_tests、不触真实 hive/interop/;断言桩全 ok 隔离出纯套件面,make_verdict/sanity/shape 保留真门禁):[A] _parse_counts 单元×4(空串 (0,0)/smoke 合计 7/cargo 形态/SUMMARY 形态);[B] 空跑端到端——vr.main 真跑落盘 verdict.json 须 fail+valid=false+suite_failed+passed=0(B1-B5,旧码 B2/B3/B4 红);[C] 冒烟形态对照 verdict=pass(修前修后均绿);[D] rc=1 失败零回归;[E] 源断言判定式含 passed > 0(跨行括号形态亦命中)。守卫退出 rmtree。**本会话实跑:`python -X utf8 -m hive.test_verify_runner_counts` → 「结果: 12 pass / 0 fail」EXIT=0**。
|
|
62
|
+
- **verified_by**:①红场同命令 → 8 pass/4 fail EXIT=1(B2 verdict='pass' passed=0、B3 valid=True、B4 reason=None——空跑绕过实证;本会话未重跑红证);②修复后 12 pass/0 fail EXIT=0(**本会话实跑一致**);③相关既有测试 2 件全绿(材料口径:md_cg.test_p39_verify_flow 11/0——真 runner --smoke 子进程端到端证明补门不误伤冒烟链、md_cg.test_interop_judgment 37/0);④残留复核:仓 hive/interop 无守卫产物、临时区已清(材料口径);⑤git diff hive/verify_runner.py 核对净改动(判定式+两处注释)。
|
|
63
|
+
|
|
64
|
+
### F5(N142,medium,本轮新发现当场修 + N88,low,v10 首报维持 + v8 N70 写侧残面收口——一模板三收)orch 原子写:children 清单固定共享 tmp 对撞撕裂、spec 补全裸写截断覆盖
|
|
65
|
+
|
|
66
|
+
- **where**:材料口径 `hive/orch.py:53`(新增 import tempfile)、`:270-312`(新增 _atomic_write_json 模板函数,exec.py:104-156 write_result 同款)、`:315-323`(_save_children 接线+失败 log 留痕)、`:681-686`(main 内 spec 补全写回接线);对照 exec.py:104-156(v10 N82 先例)与留档 :637 旧裸写。**本会话读核现行**::52 `import tempfile`、:269 生效条件注释(「tempfile.mkstemp(prefix=<basename>., suffix=".tmp", dir=path 同目录) 建唯一临时文件……Windows replace 撞读者瞬态句柄(PermissionError)按 10ms×递增重试至多 50 次,replace 撞 FileNotFoundError(tmp 被瞬态消费/清理)时重建唯一名重写再试;任一重试耗尽才向外抛;finally best-effort 清理仍存在的 tmp(成功路径零残留)。与 exec.write_result 同一模板(v10 N82 先例,K1 并发压测守卫在位)」)、:270-310 _atomic_write_json 实现、:313 生效条件注释(N142 批次 49 + v8 N70 写侧残面收口)、:314-320 _save_children 接线(:316 经模板、:317-320 失败 log 留痕)、:683 spec 写回 `_atomic_write_json(os.path.join(job_dir, "spec.json"), spec)`(行号微漂处双标,以读核为准)。守卫 `hive/test_orch.py` [N] 段新增(+110 行)。
|
|
67
|
+
- **缺陷面**:①N142——_save_children 固定 tmp 名 `_children.json.tmp`+裸 open("w"):双编排者对撞(rust 重投双执行者形态落到编排 job,即 N92 孤儿+recover_orphans 重投并存)同一 tmp 时 Windows 实况为撕裂 JSON 被 os.replace 落盘或 replace PermissionError 被 except OSError 静默吞(子任务清单丢失);接管者 _load_children 对坏 JSON 回落 [] 全量重复派发。②N88——main() spec 补全写回裸 open("w")+json.dump 覆盖写非原子:写中途 OSError 被仅 log 继续跑,盘面半截 spec 且旧完整任务契约已毁(open("w") 打开瞬间即 truncate);rust claimed 无产物重投(scheduler.rs:12-13)读同一坏 spec→read_spec JSONDecodeError 永久失败。③v8 N70 写侧——_save_children except OSError: pass 静默吞零留痕。
|
|
68
|
+
- **修复**:一处模板接线覆盖三档——①新增 orch._atomic_write_json(path,payload):mkstemp 唯一临时名(同目录保 rename 原子性、随机后缀防共享名对撞)+fsync+os.replace,PermissionError 按 10ms×递增重试至多 50 次(Windows 读者瞬态句柄),FileNotFoundError 重建唯一名重写自愈,重试耗尽才外抛,finally best-effort 清 tmp(成功路径零残留);②_save_children 改经该模板——固定共享 tmp+裸写消除,except OSError: pass 改 _ex.log 留痕(清单丢失→接管者重复派发,必须可查);③main 内 spec 补全写回改经该模板(失败仍 log 后继续,原语义不变,仅写法原子化)。顺带 test_orch.py 补测毕清理(历史累积哑目录 77 个已清+防再累积,材料口径)。无平台分臂:mkstemp/os.replace 跨平台,PermissionError 重试臂在 unix 恒不触发(rename(2) 原子性读码既定)。未 git commit。
|
|
69
|
+
- **攻击前后对比**:修复前(红场 [N] 段 7 fail,注入式对撞实验)——双写者对撞:replace 首撞 PermissionError(读者瞬态句柄)被 except OSError: pass 静默吞,目标清单保旧值=新写者清单丢失;tmp 被瞬态消费(FileNotFoundError)同样吞掉保旧值;replace 锁死耗尽后零留痕;spec 补全裸写——写中途异常(磁盘满注入)旧完整 spec 被截断毁,rust 重投读坏 spec 永久失败。修复后(绿场 94 pass/0 fail)——PermissionError→重试落新清单(N2);tmp 扑空→重建唯一名重写自愈(N3);耗尽→log 留痕+目标保旧完整态不撕裂(N4/N4b);spec 写中途异常→fail-fast 外抛且旧完整态未毁(N5a/N5b)。
|
|
70
|
+
- **守卫**:`hive/test_orch.py` 新增 [N] 段(对撞注入/OSError 注入确定性红):N1 成功路径零 tmp 残留对照;N2 replace 首撞 PermissionError 注入→目标须=新清单;N3 unlink(src)+FileNotFoundError 注入→须重建自愈;N4 replace 恒 PermissionError+sleep 桩→耗尽后 log.txt 须含「子任务清单落盘失败」(不再静默);N4b 耗尽后目标=旧完整态(fail-safe);N5a/N5b json.dump 磁盘满注入直测 _atomic_write_json→外抛且旧 spec 完整;N6/N7 源断言 spec 写回经 _atomic_write_json、裸 open(w) 移除。**本会话实跑:`python -X utf8 -m hive.test_orch` → 「=== orchestration tests: 94 passed, 0 failed ===」EXIT=0**。
|
|
71
|
+
- **verified_by**:①红场 python -X utf8 -m hive.test_orch → 86 passed/7 failed([N] 段全红,A-L 既有面不受扰;本会话未重跑红证,守卫未回退);②修复后 94 passed/0 failed EXIT=0(N5 拆 a/b 后总数 94;**本会话实跑一致**);③相关既有测试 6 件全绿(材料口径:hive.test_orch_int_args 13/0、hive.test_orch_poll_cache 12/0、hive.test_exec_cmd ALL_PASS、hive.test_wm_traversal 10/0、hive.test_wm_progress 49/0、hive.test_exec_empty_response 12/0);④残留复核:orch_n142_*/orch_m5_*/hive_orch_test_* 三前缀临时区清零(材料口径);⑤git diff hive/orch.py 核对净改动(+import tempfile、+模板函数、两处接线、注释同步)。
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 三、发现明细(四区 confirmed 36 / rejected 0;去重后 19 独立缺陷 + 清账台账 1)
|
|
76
|
+
|
|
77
|
+
以下每项「证据要点」为上游复核/修复会话的读码+实跑(材料原文;攻击复现均在系统临时目录/临时库/哑令牌/哑密钥/DUMMY 哑数据环境,测毕清理);标注★者本报告会话另做了现行代码读核(修复项落点/留档项在位性)或守卫/门禁实跑。legacy 项标注原轮次与复测轮数;本轮新发现 N141-N147 中 N144/N145/N146 为本报告会话对材料两区冲突暂编号的统一裁决(编号口径行,逐项标注原暂编号)。
|
|
78
|
+
|
|
79
|
+
### 新发现 7 项(N141-N147;★=本轮已修并经本会话守卫实跑)
|
|
80
|
+
|
|
81
|
+
| #(原暂编号) | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
|
|
82
|
+
|---|------|--------|----------|----------|------|
|
|
83
|
+
| N141(recent 区 N141 保留;serverust 区 legacy 条目同面互证)★ | hive/exec.py:941-973(联合可达:hive/orch.py:413 + hive/hive_mcp/mcp_server.py:381) | **high** | _sensitive_read 敏感名单缺 config.local.json 与 *.token,且双通道内容脱敏均有缺口——worker 可读范围覆盖 hive/config.local.json 并全文外发:任何能调 hive_spawn/编排者模型的客户端派「读取并回显 config.local.json」任务即触发,无需特殊前提(HIVE_READ_ROOTS 缺省=放开,仅剩 _sensitive_read 一道闸) | 读码:名单无 config.local.json/.token;族匹配与扩展名匹配均不命中;scope 链=orch.py:413 与 mcp_server.py:381 均设 workdir=os.getcwd()→spawn_executor 不设 current_dir 继承 serve CWD=HIVE_DIR→orch 面子任务 scope 含整个 hive/。本会话临时区实跑(哑密钥,测毕清理):_sensitive_read 对哑 config.local.json/orch.token/designer.token/gw.token→None(可读);_worker_scope 含 workdir 根、_under=True;哑 config 过 _context_block 无 skipped 标注全文在块内;tool_read_file sk- 哑密钥被脱敏(pii_redacted=True)但点分哑密钥原样出;_redact_pii 对智谱点分/+86/连字符/中文邻接手机号全不命中。诚实边界:本部署 config.local.json 三键均为 {env}/{file} 间接形态(只列键名未读值),当前文件未存明文密钥但存网关 URL 与密钥文件指针,且 serve_start 文档明文支持字符串直值形态、文件被 .gitignore 排除=凭据类文件定性成立 | **已修**(F1,本会话守卫实跑 16/0) |
|
|
84
|
+
| N142(recent 区 N142 保留)★ | hive/orch.py:271-274(同族 :637 spec 裸写) | medium | _save_children 固定 tmp 名 `_children.json.tmp`+裸 open("w"):双编排者对撞同一 tmp 时 Windows 实况为撕裂 JSON 被 os.replace 落盘或 replace PermissionError 被 except OSError 静默吞(子任务清单丢失);接管者 _load_children 对坏 JSON 回落 [] 全量重复派发;spec.json 补全写回(:637)同为裸覆盖写 | 本会话临时区动态复现(镜像 _save_children 写序的双写者实验):写者 A open(tmp,"w") 写半截→写者 B 同名 open("w") 截断整写→B 的 os.replace 因 A 握句柄 PermissionError(=except OSError 静默吞、B 清单丢失)→A 续写后 replace 落盘撕裂 JSON(json.load 失败=True);_load_children 对撕裂文件返回 [](回落确证)。读码对照修复模板 exec.py:128 mkstemp。双编排者全链路实跑未做(需真实 serve 重投链),机制由文件级复现+代码路径闭合,如实区分 | **已修**(F5,本会话守卫实跑 94/0) |
|
|
85
|
+
| N143(recent 区 N143 + serverust 区新发现条目同族合并) | swarm/swarm_cli.py:93 + swarm/rust_swarm.py:24/:38 + swarm/rust_runtime/src/main.rs:276-280 | medium | WAL 缺省密钥三处 fail-open+两口径分叉(owner=rust):rust 配置缺 shared_secret 键时 unwrap_or 回落硬编码公开常量「蜂群默认密钥」;swarm_cli.py:93 `cfg_in.get("shared_secret","")` 把空串显式传入写透 swarm.json——Python API 缺省=公开常量、CLI 缺省=空串两口径分叉,空串照签 HMAC;缺省部署下审计签名对任何读过源码者可伪造,verify 全绿;诚实边界注释只声明明文落盘未声明缺省公开/空密钥 | 上游实测(系统临时区):make_swarm_config 缺省=「蜂群默认密钥」(==DEFAULT_SECRET);按 swarm.rs 在线写入格式自签 WAL,「蜂群默认密钥」与空串密钥经 verify_wal_signatures 均 verified=2/2 all_valid=True,对照错密钥 all_valid=False bad=1(fail-closed 正常,防线本体完好缺口仅缺省密钥面);swarm/rust_runtime cargo test 8/8 绿(原子化修复完好,残余在密钥缺省面) | 留档(owner=rust;「缺省密钥从何而来」=fail-closed 拒启动 vs 首启随机生成落盘,配置语义决策 deferred,见第五节) |
|
|
86
|
+
| N144(orchexec 区原暂编 N141,冲突顺延) | hive/exec_cmd.py:40-48 + :52-57 + :266-269 | medium | 确定性分支 result 写面缺失 v10 N82 三重加固——_write_result 用固定共享临时名 p+".tmp" 且 os.replace 无重试,_fail 直写无「成功终态不覆写」守卫,main 顶层 except 兜底接 _fail;同仓 exec.py 已有全套(write_result:104-156 mkstemp+双异常重试、write_error_result:160-181 成功守卫),同仓双标成立 | 动态复现两段(系统临时区哑目录):①双进程各以 _write_result 确切写法连写 30 次 2MB payload:writer0 FAILS=29 / writer1 FAILS=28,全部 PermissionError [WinError 32](共享 tmp 路径)外逃;②端到端经真实 main():预置 result={ok:true,"PRE-SUCCESS-TERMINAL"}+spec 使 run_cmd 自然抛 AttributeError→main _fail 落 error 覆写已落地成功终态,rc=3,success_survived=False;③对照同场景 exec.py write_error_result 返回 False 且成功终态保留。守卫缺口:hive/test_exec_cmd.py 9 例无任何并发/对撞用例 | 留档(修法=移植 exec.py N82 三件套方向明确,下一轮优先速收候选;红守卫=并发写对撞+成功终态覆写注入,落 test_exec_cmd.py 现有 9 例面) |
|
|
87
|
+
| N145(orchexec 区原暂编 N142,冲突顺延) | hive/orch.py:433 + :618 + hive/hive_mcp/mcp_server.py:85-88(缺陷时点) | medium | 编排器子任务池解析只读进程 env(_hm._jobs_dir()),不从自身 job_dir 父目录推导——main.rs:50-64 default_jobs 只读 env/argv 不回写 env、exec.rs spawn_executor 无 .envs() 注入,故 `hive serve --jobs <自定义池>`(CLI 文档化用法,此路径 env 无 HIVE_JOBS_DIR)拉起的 serve,其编排者全部子任务提交进默认池而非本 serve 实跑池,编排者 poll 也盯错池恒报执行中直至轮次耗尽 | 动态复现(临时双池):orch._CFG.job_dir=池B/hOrchX、env HIVE_JOBS_DIR=池A,monkeypatch _submit 捕获落点→_spawn 落池A(env 池)=True、编排者自身池 dirname(job_dir)=池B=True、DIVERGED=True;最小修法验证:dirname(_CFG["job_dir"])==真实池成立(编排者天然知池真源)。与 N89 同根(池解析链)但消费点(orch 提交+卡片视图)、触发路径(CLI --jobs 而非 config 键)与修法均不同;F3 修复后 MCP 面 _jobs_dir 已与 serve 合并环境收敛,但 orch 侧「env 缺键即落默认池」的推导缺口仍在(--jobs 路径 env/config 均无键) | 留档(建议随池真源语义决策同带评估:dirname(_CFG["job_dir"]) 推导 vs 池真源显式登记,见第五节) |
|
|
88
|
+
| N146(orchexec 区原暂编 N143,冲突顺延) | hive/src/scheduler.rs:436-441(对照 :422-427/:257/:295) | low | 超时强杀分支 kill_tree 后无条件 final_state="timeout",不查产物——classify_exit(正常退出)与 recover_orphans 均「产物说了算」,唯 timeout(及 kill)分丝始终不看 result.json;执行器在最后心跳间隔内已原子写完 result.json(ok=true) 但进程尚在退出尾段被杀时,落成 status=timeout + result.ok=true 矛盾终态——hive_poll/orch._card 报假失败(可能无谓重跑),wm.py cmd_snapshot 按 result.ok 判成功,同一 job 两消费面结论相反 | 读码论证(窗口亚秒级、时序不可控,未做窗口内动态复现,如实标注):timeout 分支无 classify_result 调用,对照正常退出/recover_orphans 皆经 classify_result(:475 唯一实现),模块头自承「产物说了算……单一实现」;产物写为原子替换故无半截产物问题,纯标签与产物背离,评 low | 留档(修法明确:timeout/kill 分支终态前先 classify_result,有产物按产物定态;需 rust 侧守卫,owner=rust) |
|
|
89
|
+
| N147(serverust 区新发现,无暂编) | hive/serve_start.py:420-422 | low | CLI --config 为末参时 args[i+1] 未捕获 IndexError——未捕获异常 EXIT=1、stdout 无任何输出(非单行 JSON),破坏 serve_start 机器面契约(文件头「打印只发生在 CLI 入口 emit」);同族 start() 内 os.makedirs/open(_serve.log) 的 OSError 亦未捕获(仅 Popen 有 try)——读码确认 | 上游实弹:python hive/serve_start.py --config → EXIT=1、stdout 空串、traceback 落 stderr 含 IndexError(细节修正:候选原文称 traceback 上 stdout 不确——实测落 stderr,stdout 是空而非 JSON,契约破坏本质不变);对照正常路径 stdout 末行为单行 JSON。库层调用方 mcp_server.py:197-202 有 try 兜底不经此路径 | 留档(一行级 try 兜底,low 可随时搭车) |
|
|
90
|
+
|
|
91
|
+
### legacy 复测 12 项(confirmed;多区独立复核互为佐证——N92/N89 各四区、N127/N90 各三区、N88/v8 N68/N91 各两区、其余一区)
|
|
92
|
+
|
|
93
|
+
| # | where(缺陷时点) | 严重度 | 问题摘要(原轮次→复测轮数) | 证据要点 | 状态 |
|
|
94
|
+
|---|------|--------|----------|----------|------|
|
|
95
|
+
| v10 N92★ | hive/serve_start.py:209-214(缺陷时点;rust 先例 hive/src/exec.rs:63-81) | medium | 【v10 首报→v15 维持速收候选→本轮第 3 次记录→已修】stop 段只杀 serve 单进程:nt 臂 taskkill /PID 无 /T、unix os.kill(pid,15) 无 killpg,而 start :258 start_new_session 已单独成组——执行器树成孤儿持凭据继续外呼、晚落产物成矛盾终态,且新 serve recover_orphans 重投与孤儿并发同 job。四区独立复测全部证实(legacy/recent/orchexec/serverust) | 四区复测形态汇总:哑父子/三代进程树实弹(系统临时区,非真实 serve)——taskkill /PID 父 /F → rc=0 父亡、子/孙存活=孤儿成立;对照 /T /F → 树杀成立;serverust 区全链路实弹(临时池+哑密钥 config+假执行器拉孙进程)start→stop→serve 存活=False 而执行器/孙存活=True、兜底 /T /F 清场、hive cargo test 8 项全绿含 kill_tree_kills_grandchildren。unix killpg 臂 win 本机不可动态验证如实标注(读码论证:start_new_session=True 使 serve 为会话首进程,killpg(getpgid(pid),15) 可整组回收)。本轮 F2 修复(第二节) | **已修**(F2,本会话守卫实跑 11/0) |
|
|
96
|
+
| v2 N89★ | hive/hive_mcp/mcp_server.py:85-88(缺陷时点;对照 serve_start.py:47-50/:231/:236) | medium | 【v2 N17 首报→v10/v15 维持→本轮第 4 次记录→已修】jobs 池双源分叉:MCP 面 _jobs_dir 只读进程 env,serve 经 _jobs_from 让 config 键胜出——config 设 HIVE_JOBS_DIR 且 MCP env 未设时 spawn 落 env/默认池、serve 跑 config 池,任务永久 pending 且观测面全绿。四区独立复测全部证实 | 四区复测形态汇总:临时双池+哑 config 动态对照 DIVERGED=True(legacy/recent/orchexec 三区一致);serverust 区函数级实测并 inspect.getsource 证实 _t_spawn/_t_poll/_t_kill/_t_doctor/_t_restart 五面全走 _jobs_dir;向进程 env 注入同名键后两面收敛(证明分叉唯一来源是解析链不同)。复测流程附注(材料如实留痕):首轮探针 env 未设时哑 job 曾落真实默认池两件,已核 spec.model=dummy-model 属本会话产物并当轮删除,池面恢复;补跑已钉临时池。本轮 F3 修复(第二节) | **已修**(F3,本会话守卫实跑 15/0) |
|
|
97
|
+
| v2 N9★ | hive/verify_runner.py:159-160(缺陷时点;_parse_counts :52-69、_compose_semantics :77-85) | medium | 【v2 首报→历轮零修复(git log 近三笔均非 passed 门)→本轮修】suite_ok 不要求 passed>0:套件 rc=0 且输出无计数命中时 passed=0/failed=0 判 suite_ok=True,验证器空跑全绿并以 pass 写 verdict——「未验证不写入」第 5 条被空跑绕过 | 读核 :160 判定式 passed 算出后不参与判定;直调实测 _parse_counts('')→(0,0)、_parse_counts('build completed; tests ran silently')→(0,0)、空跑组合→suite_ok=True、_compose_semantics(True,True)→('pass',True,True,None);git log -- hive/verify_runner.py 近三笔(bb33750 v13 SUMMARY 正则/030947c 第8轮 iter_id 白名单/d2dc6bd #37)均非 passed 门修复——历轮无修复属实。本轮 F4 修复(第二节) | **已修**(F4,本会话守卫实跑 12/0) |
|
|
98
|
+
| v15 N127(最小止血已修,全量收紧留档) | hive/orch.py:413 + hive/serve_start.py:257 + hive/src/exec.rs:87-96 + hive/exec.py:1019-1032/:941-944 | medium | 【v15 新发现留档→本轮复测】编排子任务 workdir=编排者 CWD(serve CWD=HIVE_DIR)整根进读白名单:兄弟任务产物与 config.local.json/*.token 均在子代理可读面;P1-6 名单原不含这两类凭据。最小止血(凭据两文件挡闸)经 F1 落地;全量收紧(workdir 改子任务 job_dir)涉批次 27 读白名单语义,维持 deferred 待 scope 语义专项 | 三区复测(legacy/orchexec/serverust):_worker_scope(child_job,{workdir:假HIVE_DIR}) 含假 HIVE_DIR(D0=True);_sensitive_read 对假 config.local.json 与假 hive_orch.token 均返回 None(D2/D3,名单缺口实测);tool_read_file 以该 scope 读假 config.local.json ok=true 哑 key 明文回显(D1)、读兄弟 result.json ok=true(D4);对照 id_rsa 路径 _sensitive_read 拒(D5,既有族仍生效)。部署姿态盘面(只读键名形态不读值):本部署三键均为间接形态、hive/ 下 glob *.token 为空——直读仅得路径,但三形态支持直值且路径本身泄露,缓解非豁免。本会话读核 orch.py:413 与 exec.py:1019-1032 原状(scope 面未动),F1 已闭凭据两文件闸(exec.py:944/:976-977 读核在位) | **止血已修**(F1)+全量收紧留档(scope 语义专项,见第五节) |
|
|
99
|
+
| v8 N68 | hive/orch.py:417-420 + hive/exec.py:760/:791 | medium | 【v8 首报→历轮 deferred 维持→本轮再证(第 4 轮成立口径)】_spawn 白名单键 mdcg_root 对非空值原样透传无路径约束——serve env 未设 MDCG_ROOT 时 spec 值即 MdCGSecure 建图根,任意可写目录被初始化图结构的写原语;越出「worker 只写自家 job 目录」位置约束。MCP 面 SPAWN_ALLOWED_KEYS 同放行 | 两区复测(recent/orchexec):读核 orch.py:417-420 键组含 "mdcg_root" 原样入 sub spec、exec.py:760 `root = os.environ.get("MDCG_ROOT")… or (mdcg_root or "")` 兜底放行、:791 MdCGSecure(root,principal);本轮升级于候选纯读码——动态确认透传半段(orch._spawn 传 mdcg_root=临时区不存在路径,monkeypatch _submit 捕获 spec→原样入 spec 且无任何 isdir/白名单校验=True)。图结构写实测沿 v8 材料口径未重做,如实标注;权限边界仍是库层令牌(can_admin=False,exec.py:786-788) | 留档(修复需语义决策:移除键 vs 根白名单,历轮 deferred 口径不变,见第五节) |
|
|
100
|
+
| v8 N69 | hive/exec.py:363-392(对照 :423-450 与 tool_read_file:1117-1194) | medium | 【v8 首报→v15 半修复(敏感拒读+skipped 标注)→本轮残面复测】context_files 通道仅 _sensitive_read 一道(:373),read_file 的 scope 白名单、HIVE_READ_ROOTS、PII 脱敏三道防线对该通道零生效——非凭据文件全文原样进 user 消息发往外部网关,PII 不脱敏 | 本会话动态复测(临时哑数据,测毕删除):build_messages(context_files=[哑兄弟 result(含 MARKER+email+手机号)])→user 消息块内 MARKER=True、email 原文在=True、手机原文在=True、skipped 标注=False——对照 tool_read_file 同内容经 _redact_pii(pii_redacted=True)。读码 _context_block:364-419 仅 :373 一道检查。凭据名单命中者已被 v15 半修复拦住(本轮 F1 又补 config.local.json/.token 两项,通道拒读面随之扩大);残面=非凭据文件的 scope/PII 防线缺失与 _context_block 补 _redact_pii 低危可搭车项 | 留档(通道 scope 管控涉 scope 语义专项 deferred;_context_block 补 _redact_pii 一调用为低危搭车项,见第五节) |
|
|
101
|
+
| v10 N90 | hive/hive_mcp/mcp_server.py:294-315(:302-304 注释自认缺口刻意保留)+ :417-429/:454-460(缺陷时点行号) | low | 【v10 首报→v10 守卫半修复(server 不崩)→本轮第 3 次记录】单个顶层非 dict 的 result.json 打崩 hive_poll/doctor 整面:_result_view 对 list 调 .get 抛 AttributeError,条目级无 try 隔离;_rpc 工具层兜底保证 server 不死但该观测调用整面失败——观测盲区恰在最需要诊断的时刻 | 三区复测(legacy/recent/orchexec/serverust):临时池坏 job result.json 写成 [1,2,3]/[1,2,3] 形态后 _t_poll({}) 抛 AttributeError: 'list' object has no attribute 'get'(列表面整体失败)、单查同抛、经 _rpc 返回 ok=False error(server 不死);移除坏件→poll/doctor 恢复 ok=true。读核 :302-304「非 dict 形态(病态 result.json)不拷贝——后续 r.get 抛 AttributeError 与旧逐次解析口径一致」缺口系刻意保留属实(v10 处置线索=条目级 try 降级+_result_view 容错,原样在位未落地) | 留档(severity low 本轮让位于 5 个 medium/high;v10 处置线索原样在位) |
|
|
102
|
+
| v10 N91 | hive/serve_start.py:64-65(load_config :92-97) | low | 【v10 首报→本轮第 3 次记录】resolve() 对 str 直值空串原样返回(空串/纯空白不拒),load_config 只把 None 记 bad——空串键不触发 fail fast 且静默进 merged 覆盖宿主同名 env;{"env":…} 形态空值回落 None 被拒,两形态不对称,serve 带残缺 env 上岗,与文件头「解析失败的键 fail fast 拒绝拉起」承诺相悖 | 两区复测(orchexec/serverust):resolve('') 返回 ''(非 None 不进 bad 名单)、resolve(' ')===' ';哑 config {"HIVE_WORKERS":"","HIVE_JOBS_DIR":" "} 经 load_config 返回 err=None 且空白键静默进 merged、{**宿主真值, **config} 覆盖生效=True;对照组 {"env":"未设变量"} resolve=None 被记 bad 整份拒收——不对称实测成立。附注:空白 HIVE_JOBS_DIR 因 _jobs_from 的 strip() 回落默认池不落空白路径池,残缺上岗风险落在其余 env 键 | 留档(一行级修复:str 形态 or None 与 env 形态对称;low 可随时搭车) |
|
|
103
|
+
| v8 N70(写侧本轮已修,读侧残面留档) | hive/orch.py:254-265(读侧)+ :269-276(写侧,缺陷时点) | low | 【v8 首报→本轮复测→写侧已修】写侧——_save_children except OSError: pass 静默吞+固定 tmp 名:清单丢失静默、接管者重复派发不可见(F5 已收口为 log 留痕);读侧独立残面——_load_children 吞 OSError/ValueError 返回 [](损坏静默视为无子任务,接管者 max_subtasks 从 0 重计放行重复派发),「损坏应告警而非视为无子任务」语义仍独立留此专项(N87 装载顺序修复不覆盖此处,不构成重复报) | 本会话动态复测(临时 job_dir,测毕删除):把 _children.json 路径置为目录使 open 必抛 OSError→_save_children 无异常无留痕(静默吞成立,缺陷时点状态)、_load_children 返回 [](损坏静默视为无子任务成立)。本会话读核现行 :265 except (OSError, ValueError): return [] 在位(读侧未动);写侧 :314-320 已改经 F5 模板+log 留痕(读核在位) | **写侧已修**(F5)+读侧残面留档(见第五节) |
|
|
104
|
+
| v10 N85 | hive/verify_runner.py:112 + md_cg/interop.py:316 | low | 【v10 首报→本轮再证】iter_id 白名单 regex [A-Za-z0-9_.-]{1,80} 放行 '.'/'..'/'...' 纯点串——frozen_fp/out_fp 拼接越级;姊妹入口 md_cg/interop.py:316 同一 regex 未同步收紧(v10 处方=排除纯点串,未落地) | 本会话动态验证:re.fullmatch(r"[A-Za-z0-9_.-]{1,80}", '..')=True、'.'=True、'...'=True;读码两入口 regex 逐字一致未变。攻击前提:读步文件不存在则诚实 rc 退出、写步需上游先有同名文件才成写越级——low 加固项维持 | 留档(处方=排除纯点串两入口同步收紧;low 加固可随轮顺收) |
|
|
105
|
+
| v10 N86 | hive/exec.py:980-997(:993)+ :1008-1015 | low | 【v10 首报→本轮再证】_redact_pii 手机号单一模式 r"\b1[3-9]\d{9}\b"——+86 前缀/分隔符/中文邻接形态全漏;_redact_deep 仅递归值不触 dict 键名;read_file 与 lingshu_cg 返回体的概率防线缺口未扩(点分密钥不脱敏面已并入 N141/F1 证据) | 本会话动态复测:裸 11 位→脱敏;+8613812345678→泄漏;138-1234-5678→泄漏;电 13812345678 话→泄漏(CJK 邻接无 \b);_redact_deep({"13812345678":"x"})→键名未脱敏。读码 :993/:986-988/:1008-1015 与 v10 时点逐位一致;:976-979 注释自认「正则脱敏是概率防线」 | 留档(正则集 v1 扩类即修;概率防线 low 维持,可随轮顺收) |
|
|
106
|
+
|
|
107
|
+
### 清账台账小节(非缺陷记录条,1 条——三区台账合并;v10 第五节 15 项复核结案)
|
|
108
|
+
|
|
109
|
+
| 条目 | 内容 | 状态 |
|
|
110
|
+
|------|------|------|
|
|
111
|
+
| hive 域历轮留档清账总表(legacy 区清账汇总条 + recent 区 legacy 复测台账 + orchexec 区已修 5 项合并复测,三区合并为一条) | **已修 13 项次**逐处读核全部在位(不重复报):N82→v15(exec.py:104-156 write_result mkstemp 唯一名+FileNotFoundError 重试,docstring 明标 v10 N82);N83→v15(wm.py:146-158 artifacts 预检前置+:203-208 失败 rmtree 重抛);N84→v13(scripts/bootstrap_loop.py:285-295 坏条目 status=failed+stats 计数);N87→v15(orch.py:607-621 两阶段 update);v7 N58→v14(mcp_server.py:254-274 _cached_json (mtime_ns,size));v2 N5/N11→030947c(verify_runner.py:106-115 白名单);v2 N6→030947c+v15;v2 N7→v10 F2(exec.py _empty_turn 三调用点);v2 N8→v10 F5+第10轮(exec.py:1019-1028 单串包裹);v2 N10→030947c+v15(wm cmd_snapshot 提交链失败还原 HEAD);v2 N13→v10 F3(orch.py:423-431 _int_arg);v2 N16→v10 F1(mcp_server.py req/params 非 dict 两层守卫)。**v10 第五节已修 5 项复测结案**(守卫实跑:hive.test_exec_tools 87/0 含 K1 并发写读压测、hive.test_wm_progress 49/0、hive.test_orch_poll_cache 12/0;N84/N87 源码读核在位)。**仍在位 low 项**逐项第一手复测全中(临时目录/哑 DUMMY 数据,测毕清理):v8 N68/N70、N85/N86/N91 已单列上表;N14——result.job_id='con' 过校验(只拦 ./../:/\)→cmd_snapshot 裸抛 NotADirectoryError [WinError 267] 非 WmError+CLI 面 wm.py:423 只捕 WmError→stderr Traceback+stdout 非单行 JSON;N18——_t_spawn timeout_s=-5/-999999 直通 spec_defaults 违反 schema 承诺 5..3600、'600s' 抛 ValueError 由 _rpc 包成单条错误响应进程不崩、负值下游 float() 传 urlopen timeout 任务必败——均 low 续管。**对抗面核清**(读码复核):wm.py artifacts 预检 per-path 与按 basename 落盘的同名覆盖缺口确实存在但边角,台账「不立项」维持;write_result mkstemp 0600 权限位仅 POSIX 多用户形态相关,本部署 win32+同用户不构成缺口;write_error_result 拒覆写读核在位——上述无缺陷结论均为读码复核,未做并发压测,如实区分。**v16 零 hive 改动核实**:git show --stat 98fdfbb \| grep -c "hive/"=0(六修复源文件全 md_cg 域),全部现状即上轮复测原状。**清理**:上游会话全部探针临时目录/哑进程终验残留 0,并清出上轮遗留 3 个哑数据临时目录;未触真实令牌库/真实 serve/真实 jobs 池 | 留档备查(不占缺陷数;N14/N18 两项 low 无独立修复面,续管) |
|
|
112
|
+
|
|
113
|
+
### 证伪/剔除(rejected)
|
|
114
|
+
|
|
115
|
+
四区复核 rejected 数组均为空——**本轮 0 条证伪**(与 v15 的 2 条、v16 的 0 条不同,本轮同样无证伪项,如实记录)。已修剔除:无新剔除项——v10 第五节已修 5 项(N82/N83/N84/v7 N58/N87)复测在位计入清账台账小节,不另立剔除;历轮已修清单(第 10/12/14/15 轮)未再报。
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 四、验证(门禁结果)
|
|
120
|
+
|
|
121
|
+
以下「本会话实跑」均为本报告写作会话在仓库根目录实际运行(第一手);「材料口径」为上游复核/修复/门禁会话已跑、本会话未重跑(如实区分):
|
|
122
|
+
|
|
123
|
+
| 命令 | 结果 | 来源 |
|
|
124
|
+
|------|------|------|
|
|
125
|
+
| `python -X utf8 scripts/run_tests.py --jobs 4`(全量) | `===== SUMMARY 204/204 通过,5 跳过(依赖缺失/平台不符) =====`——**本会话实跑,真实退出码 0**;204 = v16 终态 200 + 本轮 4 个新守卫文件(各计 1;F5 守卫以 test_orch.py [N] 段并入原文件计数 85→94 例),与材料门禁口径逐字一致 | **本会话实跑** |
|
|
126
|
+
| `python -X utf8 -m hive.test_sensitive_read_names` | 「结果: 16 pass / 0 fail」EXIT=0——与材料修后 16/0 一致(材料红证修前 11 fail/5 pass,本会话未重跑红证,守卫未回退) | **本会话实跑** |
|
|
127
|
+
| `python -X utf8 -m hive.test_stop_tree_kill` | 「结果: 11 pass / 0 fail」EXIT=0——与材料修后 11/0 一致(材料红证修前 5 pass/6 fail) | **本会话实跑** |
|
|
128
|
+
| `python -X utf8 -m hive.test_mcp_jobs_pool` | 「结果: 15 pass / 0 fail」EXIT=0——与材料修后 15/0 一致(材料红证修前 11 pass/4 fail) | **本会话实跑** |
|
|
129
|
+
| `python -X utf8 -m hive.test_verify_runner_counts` | 「结果: 12 pass / 0 fail」EXIT=0——与材料修后 12/0 一致(材料红证修前 8 pass/4 fail) | **本会话实跑** |
|
|
130
|
+
| `python -X utf8 -m hive.test_orch` | 「=== orchestration tests: 94 passed, 0 failed ===」EXIT=0——含 [N] 段(N142/N88 原子写),与材料修后 94/0 一致(材料红证修前 86 passed/7 failed) | **本会话实跑** |
|
|
131
|
+
| `npm run gate` | **通过(本会话实跑)**:`VERDICT=PASS`、FAIL 规则数=0;R1 凭据/密钥面 PASS、R2 私有数据面 PASS、R3 隐私文本 PASS、`R4 非追踪件面;非追踪=24,允许=24`(本轮 4 个新守卫文件在允许面内——与 v16 的 R4 命中形态不同,如实记录);后续 cogmap check 通过(cg 36 op / stg 4 op / whitebox 6 action / mdcg_* 31 个)、受管 md 链接检查 227 条全可达、工作区索引与仓库一致(追踪 1941 件)、纪律渲染 9/9 目标一致——与材料「npm run gate:通过」口径一致 | **本会话实跑** |
|
|
132
|
+
| swarm cargo test | **未运行**——Rust 面零改动(本会话 `git status --porcelain` 证实 swarm/ 与 hive/src/ 无改动,改动面仅 hive/ 的 python 件与守卫),与材料口径一致(N143/N146 两项 rust 面缺陷本轮均留档未修) | 双方一致 |
|
|
133
|
+
| npm test | **未运行**——TS 面零改动(git status 证实 src/ 未动),与材料口径一致 | 双方一致 |
|
|
134
|
+
|
|
135
|
+
**上游会话已运行、本会话未重跑的验证**(材料原文,如实区分):五项修复的守卫红证(修前各一跑,红绿数字见第二节各 verified_by 行——红证需旧码,守卫未回退不可重跑);F1 的既有回归八件套、F2 的回归四件套(含 hive cargo test 8 项全绿含 kill_tree_kills_grandchildren 与 Get-CimInstance 哑进程残留复核)、F3 的回归九件套与临时区残留核检(含上一会话遗留探针目录一件移除)、F4 的回归两件套(test_p39_verify_flow 11/0、test_interop_judgment 37/0)、F5 的回归六件套与三前缀临时区清零;四区复核全部攻击复现(第三节证据要点——哑进程树/临时池/哑密钥/双写者对撞注入等形态,测毕清理)。
|
|
136
|
+
|
|
137
|
+
**git 工作树核对**(本会话 `git status --porcelain` / `git diff --numstat` + 五处落点读核):改动面 = **五个修复源文件**(hive/exec.py +8/-2、hive/hive_mcp/mcp_server.py +23/-2、hive/orch.py +54/-9、hive/serve_start.py +12/-3、hive/verify_runner.py +9/-3)+ **一份既有守卫增改**(hive/test_orch.py +110/-0)+ **四份常驻新守卫**(untracked 新文件,165/213/171/160 行)——与五项修复一一对应。另有 `md_cg/whitebox_kb/wisdom/code_solidified.json`(+1/-2)为 v10-v16 报告已注明的先前会话遗留工作区变更,非本轮触点。未做任何 commit。
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 五、遗留清单(13 个开口:medium 6 / low 7;+ 清账台账 low 2 项续管 + rejected 0)
|
|
142
|
+
|
|
143
|
+
### 留档项(13 项,材料「留档未修」清单;★=本会话抽查读核在位性)
|
|
144
|
+
|
|
145
|
+
| # | where(缺陷时点) | 严重度 | 问题 | 留档理由 / 处置建议(材料口径) |
|
|
146
|
+
|---|------|------|------|------------------------------|
|
|
147
|
+
| v15 N127(全量收紧)★ | hive/orch.py:413 + hive/serve_start.py:257 + hive/src/exec.rs:87-96 + hive/exec.py:1019-1032 | medium | 编排子任务 workdir=编排者 CWD 使 scope 覆盖整个 hive/——凭据两文件已由 F1 止血挡闸,兄弟任务产物与任意非凭据文件泄露面仍在(本会话留档动态复测:_worker_scope 含 workdir 根=True、兄弟 result 可读 MARKER 命中;读核 :413/:1019-1032 原状) | 涉批次 27 读白名单语义须 **scope 语义专项裁定**,全量收紧明确 deferred(任务纪律④);专项时一并覆盖 v8 N69 的通道 scope 管控面 |
|
|
148
|
+
| v8 N68 | hive/orch.py:417-420 + hive/exec.py:760/:791 | medium | _spawn 白名单键 mdcg_root 对非空值原样透传无路径约束——任意可写目录被初始化图结构的写原语(MCP 面 SPAWN_ALLOWED_KEYS 同放行) | 修复需语义决策(移除键 vs 根白名单),历轮 deferred 口径不变——**大设计决策项**(认知图落点语义专项) |
|
|
149
|
+
| v8 N69 | hive/exec.py:363-392 | medium | context_files 通道仅 _sensitive_read 一道,scope/READ_ROOTS/PII 三防线零生效(凭据名单命中者已被 v15 半修复+F1 扩面拦住) | 通道 scope 管控涉 scope 语义专项 deferred;_context_block 补 _redact_pii 一调用为低危可搭车项(建议随 N141 同族轮顺带),不单列目标 |
|
|
150
|
+
| N143(WAL 缺省密钥族,owner=rust) | swarm/swarm_cli.py:93 + swarm/rust_swarm.py:24/:38 + swarm/rust_runtime/src/main.rs:276-280 | medium | 密钥缺省三处 fail-open(Rust unwrap_or 回落公开常量/CLI 空串显式传入/Python API 默认常量)且两口径分叉——缺省部署下审计签名可伪造;错密钥验签正常 fail-closed(防线本体完好,缺口仅缺省密钥面) | **大设计决策项**:「缺省密钥从何而来」=fail-closed 拒启动 vs 首启随机生成落盘,配置语义决策 deferred(任务纪律④);诚实边界注释应一并补声明 |
|
|
151
|
+
| N144(exec_cmd 结果写面,原暂编 N141) | hive/exec_cmd.py:40-48/:52-57/:266-269 | medium | 确定性分支 result 写面缺 v10 N82 三重加固(固定共享 .tmp/replace 无重试/_fail 无成功终态守卫),同仓 exec.py:104-181 已有全套(同仓双标) | 修法=移植 exec.py N82 三件套方向明确,**下一轮优先速收候选**(红守卫=并发写对撞+成功终态覆写注入,落 hive/test_exec_cmd.py 现有 9 例面);本轮 5 名额已满让位 |
|
|
152
|
+
| N145(orch 子任务池,原暂编 N142) | hive/orch.py:433 + :618 + mcp_server.py 池解析链 | medium | 编排器子任务池解析只读进程 env 不从 job_dir 父目录推导——`hive serve --jobs <池>` 路径(env/config 均无键)下子任务全落默认错池,编排 job 以子任务失败/超时收口 | 与 N89(已修)同根不同消费点;最小修法 dirname(_CFG["job_dir"]) 推导已留档验证——建议随**池真源语义决策**(env/config/job_dir 三源优先级统一)同带评估,不占单列名额 |
|
|
153
|
+
| N146(timeout 标签背离,原暂编 N143,owner=rust) | hive/src/scheduler.rs:436-441 | low | timeout/kill 分支 kill_tree 后无条件 final_state="timeout" 不查产物——毫秒窗口落 status=timeout+result.ok=true 矛盾终态,同一 job 两消费面结论相反 | 修法明确(终态前先 classify_result)但窗口亚秒不可控且需 rust 侧守卫,severity low 本轮让位;owner=rust |
|
|
154
|
+
| N90 | hive/hive_mcp/mcp_server.py:294-315 + :417-429/:454-460 | low | 单个顶层非 dict 的 result.json 打崩 hive_poll/doctor 整面(server 不死但观测面全盲;:302-304 注释自认缺口刻意保留) | 修法=条目级 try 降级+_result_view 容错(v10 处置线索原样在位);low 可随时搭车 |
|
|
155
|
+
| N91 | hive/serve_start.py:64-65 | low | resolve() 对 str 直值空串原样返回不 fail-fast,静默覆盖宿主同名 env | 一行级修复(str 形态 or None 与 env 形态对称);low 可随时搭车 |
|
|
156
|
+
| N147 | hive/serve_start.py:420-422 | low | CLI --config 末参 IndexError 破坏单行 JSON 机器面契约(stdout 空串、traceback 落 stderr) | 一行级 try 兜底;low 搭车项 |
|
|
157
|
+
| N85 | hive/verify_runner.py:112 + md_cg/interop.py:316 | low | iter_id 白名单 regex 放行 '.'/'..'/'...' 纯点串致拼接越级(读步文件不存在诚实 rc 退出、写步需上游先有同名文件) | 处方=排除纯点串,两入口同步收紧;low 加固项维持 |
|
|
158
|
+
| N86 | hive/exec.py:980-997 + :1008-1015 | low | _redact_pii 手机号单一 \b 模式漏 +86/分隔符/中文邻接变体;_redact_deep 仅递归值不触键名 | 正则集 v1 扩类即修;概率防线 low 维持 |
|
|
159
|
+
| v8 N70(读侧残面) | hive/orch.py:254-265 | low | _load_children 吞 OSError/ValueError 回 []——清单损坏静默视为无子任务,接管者重复派发不可见(写侧已由 F5 收口为 log 留痕) | 读侧「损坏应告警而非视为无子任务」语义独立留此专项;low 可随轮顺收 |
|
|
160
|
+
|
|
161
|
+
### 大设计决策项处置建议(分诊汇总)
|
|
162
|
+
|
|
163
|
+
**优先级建议**(据材料处置线索汇总):
|
|
164
|
+
1. **下一轮速收批次(修复方向明确、低风险、有先例可对照)**:N144(移植 exec.py N82 三件套,exec_cmd 同仓双标收口——最优先)→ N147(--config try 兜底)→ N91(resolve 空串 fail-fast)→ N90(条目级 try+_result_view 容错)→ N85(排除纯点串两入口)→ N86(正则扩类)→ v8 N70 读侧(损坏告警)。七项可单轮清空,建议按「写面加固族(N144)→ 机器面契约族(N147/N91/N90)→ 输入校验/防线族(N85/N86/N70 读侧)」分批。
|
|
165
|
+
2. **需先设计决策后代码(v8.md:175 先例口径)**:N143 WAL 缺省密钥语义(fail-closed vs 首启随机落盘——owner=rust,须与诚实边界注释同步);N145/N89 池真源语义(env/config/job_dir 三源优先级统一——F3 已闭 MCP/serve 两面,orch 侧推导待拍板);N127/v8 N69 scope 语义专项(workdir 收紧与 context_files 通道管控一并裁定);v8 N68 mdcg_root 语义(移除键 vs 根白名单);N146 timeout 终态分类(owner=rust,需亚秒窗口守卫方案)。
|
|
166
|
+
3. **交叠提示**:N144 与 v10 N82 同模板(exec.py:104-156 先例在位)移植即修;N145 与 N143 WAL 项同属「缺省供给面」决策,宜同一轮拍板口径;N127/v8 N69/v8 N68 三项同涉编排面 spec 语义,宜同一专项内设计。
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 六、纪律合规声明
|
|
171
|
+
|
|
172
|
+
1. **定位先读索引**:本报告写作前已读 WORKSPACE_INDEX.md(按职责定位 hive/ =「蜂巢并发引擎——worker 池调度,文件协议即接口」、swarm/ =「蜂群运行时——WAL-HMAC」、docs/eval 为历轮报告所在),未做全盘浏览。
|
|
173
|
+
2. **结论引证**:所有修复与缺陷均引 path:line(材料口径为上游会话时点快照行号;本会话五处修复落点读核,行号微漂处双标——F1 生效注释材料 :947 读核现行 :948、endswith 补点材料 :977-981 读核现行 :976-977;F5 import tempfile 材料 :53 读核现行 :52、模板函数材料 :270-312 读核现行 :269-310、_save_children 接线材料 :315-323 读核现行 :313-320、spec 写回材料 :681-686 读核现行 :683,以读核值为准);第三节证据要点摘自任务输入的四区复核材料(上游会话读码+实跑);第四节八项守卫/门禁 + git 核对为本会话第一手命令与输出;五处修复落点读核(exec.py:941-948/:971-977、serve_start.py:195/:209-223、mcp_server.py:84-109、verify_runner.py:161-166、orch.py:52/:269-320/:683)与材料「在位」结论一致;留档缺陷抽查读核(N127 orch.py:413/exec.py:1019-1032、v8 N70 读侧 orch.py:265、F5 写侧 :314-320)与材料「在位/未修」结论一致。
|
|
174
|
+
3. **编号续编与冲突裁决声明**:v16 用至 N140(v16.md:5 核实),本轮自 N141 续编。材料两区临时编号冲突(recent 区 N141/N142/N143 与 orchexec 区 N141/N142/N143 各指不同缺陷)由本报告会话统一裁决:修复结果与守卫锚定的 recent 区 N141/N142 保留、N143 与 serverust 区同族条目合并归一;orchexec 区三项顺延 N144/N145/N146;serverust 区新条目编 N147——全部重编在第三节逐项标注原暂编号,非暗改;留档材料中「N141(exec_cmd)」「N142(orch 子任务池)」「N143(WAL…owner=rust)」「N143(timeout…owner=rust)」四条已按裁决重编对应(N144/N145/N143/N146)。
|
|
175
|
+
4. **安全测试纪律合规**:材料全部攻击复现均在系统临时目录/临时库/哑令牌/哑密钥/DUMMY 哑数据/哑进程树形态(HIVE_JOBS_DIR/HIVE_CONFIG/HIVE_READ_ROOTS 全指向临时或哑值,绝不触真实令牌库/真实 serve/真实 jobs 池/真实数据目录)进行且测毕清理(材料逐项声明,本报告照录;含上轮遗留探针目录一件与更早遗留哑目录 77 个的顺带清理);四个新守卫+test_orch.py [N] 段自带 tempfile 临时环境+finally rmtree 清理;本报告会话仅运行守卫与门禁(自含临时环境)与读码,未触任何真实凭据/数据根、未修改任何源文件、未启动任何真实 serve。
|
|
176
|
+
5. **已修项勿重复报**:第 10 轮(MCP 入口三层守卫/exec 空包三通道/wm progress 防穿越/read_roots 单串切分)、第 12 轮(CLI 条件卡透传/异常面/验签 UTF-8/WAL 原子化/embed 倒置修正)、第 14 轮(_poll 解析缓存)、第 15 轮(exec context_files 敏感拒读+skipped 标注/exec write_result mkstemp 唯一名+write_error_result 拒覆写/wm staging 预检前置+失败清理/orch children 装载两阶段 update)已修清单未再报;v10 第五节已修 5 项(N82/N83/N84/v7 N58/N87)复测在位计入清账台账小节不立项;本轮 5 修中 N92/N89/N9 为历轮留档首修、N141/N142 为本轮新发现首修、N88/v8 N70 写侧为 F5 顺带收口,均非重复修复。
|
|
177
|
+
6. **如实记录**:四区 rejected 数组均为空(0 条证伪)如实声明;unix killpg 臂(N92/F2)win32 本机不可动态验证以 mock 接线+源断言+读码论证落地并如实标注;N143/N142 双编排者全链路实跑未做(需真实 serve 重投链,机制由文件级复现+代码路径闭合)如实区分;N146 窗口内动态复现未做(亚秒级时序不可控,读码论证)如实标注;N147 traceback 落点候选原文不确处(stdout→stderr)已按实弹修正且契约破坏本质不变照录;N89 复测流程中哑 job 曾落真实默认池两件的处置(核实属本会话产物并当轮删除)如实留痕;v8 N68 图结构写实测沿 v8 材料口径未重做、N14/N18 台账项无独立修复面续管——均按材料原样记录,无一升格。
|
|
178
|
+
7. **隐私脱敏**:全文只写仓库相对路径;材料与本会话输出的本机绝对路径(gate 输出的本机盘符路径、系统临时区路径、用户目录、后台日志路径)一律转录为「仓库根/系统临时区/临时区/哑值」等占位描述;哑令牌/哑密钥字面量以形态描述或材料自带的 DUMMY/dummy 形态替代(如 dummy-model、DUMMY_ 前缀、「蜂群默认密钥」为源码内公开常量名非真实凭据),不录任何真实凭据;本部署 config.local.json 三键仅列键名与键形态({env}/{file} 间接形态),未读未录任何值。
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 七、跳过项及原因
|
|
183
|
+
|
|
184
|
+
- **swarm cargo test 未运行**:Rust 面零改动(本会话 git status 证实 swarm/ 与 hive/src/ 无改动,改动面仅 hive/ 的 python 件与守卫)——材料与本会话口径一致;本轮两项 rust 面缺陷(N143 WAL 密钥、N146 timeout 分类)均留档未修,cargo 不适用(上游复测会话曾实跑 swarm/rust_runtime cargo test 8/8 绿与 hive cargo test 8 项全绿,均为材料口径)。
|
|
185
|
+
- **npm test 未运行**:TS 面零改动(git status 证实 src/ 未动)——材料与本会话口径一致。
|
|
186
|
+
- **五项修复的守卫红证未重跑**:红证需旧码回退,多轮未提交改动的工作树上不可行(守卫未回退)——以红绿数字材料口径(第二节各 verified_by 行:11 fail/5 pass、5 pass/6 fail、11 pass/4 fail、8 pass/4 fail、86 passed/7 failed)+ 本会话五守卫绿态实跑 + 五处落点读核 + 全量 204/204 替代佐证,如实标注。
|
|
187
|
+
- **四区复核的攻击复现未在本会话重跑**:全部动态复现(哑进程树/临时池/哑密钥 config/双写者对撞/端到端 _fail 覆写/注入式 OSError 注入)为上游会话执行且逐项声明清理(第三节证据要点来源均标注为材料原文);本会话以五处修复落点读核 + 留档项在位性抽查读核(N127/v8 N70 两处)+ 六组守卫/门禁实跑替代,未重跑任何攻击场景。
|
|
188
|
+
- **N92 unix killpg 臂的真实群杀行为未动态验证**:win32 本机不可行——以 mock 接线验证(B1-B3)+ 源断言(C2/C3)+ 读码论证(start_new_session=True 使 serve 为会话首进程)落地,守卫诚实边界注释同步;全修须 unix 机实跑后方可报全修,如实标注。
|
|
189
|
+
- **N142/N143 的双编排者全链路实跑未做**:需真实 serve 重投链(N92 孤儿+recover_orphans 并存形态)——机制由文件级对撞复现+代码路径闭合(N142)与三处读核+自签 WAL 实测(N143)佐证,如实区分读码与动态证据。
|
|
190
|
+
- **N146 的窗口内动态复现未做**:timeout 线前后毫秒级窗口时序不可控——读码论证(timeout 分支无 classify_result、其余三分支皆经)如实标注为论证而非实测。
|
|
191
|
+
- **N145 的全链路复现未做**:`hive serve --jobs` 真实拉起链需真实 serve——以 monkeypatch _submit 捕获落点的函数级复现+dirname 推导验证替代,如实标注。
|
|
192
|
+
- **13 项留档未修**:分诊与处置建议见第五节;本报告会话为报告撰写会话,不做修复。
|
|
193
|
+
- **git 未提交**:commit 需任务方指令;工作树保持五源文件补丁 + 一份守卫增改 + 四常驻守卫新增原状(及一件 v10-v16 已注明归属的先前会话 wisdom json 变更)。
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
*报告依据:任务输入的第 17 轮材料(四区复核 36 confirmed / 0 rejected 明细及证据〔legacy 7 / recent 7 / orchexec 15 / serverust 7,两区临时编号冲突原文〕、五项修复的 where/缺陷面/修复/攻击前后对比/守卫/verified_by、留档未修 14 条〔13 缺陷 + 1 台账记录条〕、门禁结果);本报告会话的第一手核验:WORKSPACE_INDEX.md 读核、五处修复落盘读核(现行行号锚点:exec.py :941-948/:971-979、serve_start.py :195/:209-223、mcp_server.py :84-109、verify_runner.py :161-166、orch.py :52/:269-320/:683,均带 N141/N92/N89/N9/N142+N88 病灶注释)、六组守卫/门禁实跑全绿(16/0、11/0、15/0、12/0、94/0、全量 204/204 通过 5 跳过真实退出码 0)、npm run gate 实跑 PASS(R4 非追踪=24 允许=24)、git 工作树核对(numstat 与五文件五修复对应 + 一件先前遗留 json)、留档缺陷在位性抽查读核(N127/v8 N70)、报告脱敏机械复查。*
|
|
198
|
+
|
|
199
|
+
*自查双清单:①材料覆盖——四区 36 条目全部入文(legacy 7 / recent 7 / orchexec 15 / serverust 7;rejected 0 如实声明),跨区冗余 16 条合并说明(N92/N89 各四区、N127/N90/台账各三区、N88/v8 N68/N91/N143 各两区),去重后 19 独立缺陷 = 新 N141-N147 共 7(high 1/medium 4/low 2,两区冲突编号统一裁决并逐项标注原暂编号)+ legacy 复测 12 项(均标注原轮次与复测轮数:N92 第 3 次、N89 第 4 次、N9 历轮零修复后首修、N127/N88/N90/N91/N85/N86/v8 N68/N69/N70 各按原档),数目吻合;清账台账 1 条单列(含 v10 第五节 15 项复核结案与 N14/N18 续管),不占缺陷数;5 补丁逐项六要素齐全(where 双标/缺陷面/修复/攻击前后对比/守卫/verified_by)且修复与第三/五节状态联动(19 − 6 修 = 13 开口与材料留档 13 条缺陷逐条对应无多无少);任务留档复测重点①-④全部有结论(执行摘要主题 1/3/5:①N92 已修、②N89 已修、③N127 止血已修+全量 deferred、④v10 第五节 15 项已修 5 项结案+仍在位项逐项复测);门禁四项(python 204/204 通过/cargo 未运行/npm test 未运行/gate 通过)与跳过原因一一对应;材料与本会话一致处逐项注明一致、不一致处(行号微漂 5 处、N147 traceback 落点)双标以读核/实弹为准。②纪律——全部结论引 path:line 或注明材料来源,本会话第一手实跑命令与输出在第四节(全量 204/204 真实退出码 0、五守卫绿态数字、gate PASS 与 R4 允许面、git numstat、五落点+两留档抽查读核),未跑项(cargo/npm test/守卫红证/攻击复现/unix killpg 真实群杀/双编排者全链路/N146 窗口/N145 全链路/提交后 gate)无一冒充为已跑;新发现续编 N141-N147 与两区冲突裁决显式声明而非暗改;行号微漂五处双标以读核为准;历轮已修清单(第 10/12/14/15 轮 + v10 第五节 5 项)无一重复报;全文无本机绝对路径、无真实 key/token/密钥字面量(「蜂群默认密钥」为源码公开常量名已注明),上游会话哑 job 落真实默认池两件的处置如实留痕,本会话未 commit、未触碰真实令牌库/serve/数据根、未修改任何源文件。*
|