@furongjun1999/dsh-memory 0.7.0 → 0.7.2

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.
Files changed (78) hide show
  1. package/README.md +8 -6
  2. package/codebuddy/CODEBUDDY.md +5 -5
  3. package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +223 -0
  4. package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.1.md +340 -0
  5. package/docs/eval/issue50_/345/205/203/346/225/260/346/215/256/351/200/217/344/274/240/344/270/216/345/205/234/345/272/225_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +437 -0
  6. package/docs/eval/issue50_/345/215/212/351/207/215/345/244/215/345/276/205/345/256/232/345/244/215/346/240/270_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +488 -0
  7. package/docs/eval/issue50_/345/276/205/345/256/232/345/244/215/346/240/270/345/205/245/351/230/237_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +428 -0
  8. package/docs/eval/issue50_/350/257/273/351/235/242/344/277/235/346/212/244/345/217/252/350/256/244/346/230/276/345/274/217/346/235/245/346/272/220_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +271 -0
  9. package/docs/eval/issue50_/351/207/215/350/246/201/345/272/246/345/220/214/346/272/220/344/270/216/344/277/235/346/212/244/350/257/255/344/271/211_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +306 -0
  10. package/docs/eval/issue51_/344/270/200/351/224/256/345/256/211/350/243/205/345/244/261/350/264/245_/345/275/222/345/261/236/345/210/244/345/256/232_v1.0.md +58 -0
  11. package/docs/eval/issue52_/346/235/241/344/273/266/345/205/210/350/241/214/344/270/216/346/210/252/346/226/255/345/217/257/350/247/202/346/265/213_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +360 -0
  12. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/241/346/241/243/344/275/215/345/215/225/344/270/200/345/205/245/345/217/243_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +651 -0
  13. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/242/345/217/230/346/233/264/345/215/225/344/270/216/345/233/236/346/273/232/345/216/237/350/257/255_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +439 -0
  14. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/243/345/207/206/345/205/245/350/257/273/346/225/260_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +1337 -0
  15. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/244/346/224/266/345/256/230/344/270/216/345/205/250/351/223/276/351/252/214/346/224/266_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +1817 -0
  16. package/docs/eval//345/217/221/345/270/20309_/346/243/200/347/264/242/351/235/242/344/270/211/346/211/271/346/224/266/345/217/243_v1.0.md +66 -0
  17. package/docs/eval//345/217/221/345/270/20310_/350/257/273/351/235/242/346/215/237/345/235/217UTF8/345/256/266/346/227/217/346/224/266/345/217/243_v1.0.md +71 -0
  18. package/docs/eval//347/254/2543/345/261/202stg/347/273/223/346/236/204/347/264/242/345/274/225_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +250 -0
  19. 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 +25 -25
  20. package/docs/plans/stg/346/235/241/344/273/266/345/214/226/344/270/216/347/273/223/346/236/204/347/264/242/345/274/225_/350/256/276/350/256/241_v0.1.md +124 -0
  21. package/docs/plans//350/256/260/345/277/206/350/207/252/345/244/204/347/220/206/344/270/211/346/241/243/350/207/252/346/262/273_/350/256/276/350/256/241_v0.2.md +207 -0
  22. package/docs//345/267/245/344/275/234/347/272/252/345/276/213_/350/256/244/347/237/245/345/233/276/346/235/241/347/233/256_v1.1.json +4 -4
  23. package/md_cg/admission.py +718 -0
  24. package/md_cg/autonomy_modes.py +642 -0
  25. package/md_cg/bench6_arms.py +10 -6
  26. package/md_cg/census.py +2 -1
  27. package/md_cg/consistency.py +133 -8
  28. package/md_cg/forgetting.py +38 -6
  29. package/md_cg/freshness.py +17 -1
  30. package/md_cg/lifecycle.py +30 -2
  31. package/md_cg/mcp_server.py +63 -7
  32. package/md_cg/mdcg.py +157 -31
  33. package/md_cg/mdcos.py +675 -19
  34. package/md_cg/mreview/locate.py +1 -1
  35. package/md_cg/protect.py +79 -4
  36. package/md_cg/provenance.py +1 -1
  37. package/md_cg/review_cli.py +31 -2
  38. package/md_cg/rollback.py +420 -0
  39. package/md_cg/rollback_cli.py +104 -0
  40. package/md_cg/routing.py +10 -1
  41. package/md_cg/stg.py +400 -50
  42. package/md_cg/stgidx.py +281 -0
  43. package/md_cg/test_autonomy_admission.py +1098 -0
  44. package/md_cg/test_autonomy_modes.py +1972 -0
  45. package/md_cg/test_b1_auto_id_multiproc.py +7 -0
  46. package/md_cg/test_b1b2_write_face.py +7 -0
  47. package/md_cg/test_b3_merge_keeps_content.py +7 -0
  48. package/md_cg/test_cons200_scan_selection.py +791 -0
  49. package/md_cg/test_corrupt_utf8_read_surfaces.py +451 -0
  50. package/md_cg/test_generation_guard.py +15 -9
  51. package/md_cg/test_health_corrupt_utf8.py +37 -0
  52. package/md_cg/test_i50a_half_dup_defer.py +408 -0
  53. package/md_cg/test_i50b_defer_to_review_queue.py +545 -0
  54. package/md_cg/test_i50c_meta_passthrough.py +608 -0
  55. package/md_cg/test_i50d_importance_source.py +531 -0
  56. package/md_cg/test_i50e_readside_protection.py +656 -0
  57. package/md_cg/test_index_crossprocess_reload.py +39 -24
  58. package/md_cg/test_issue39_utf8_stdio.py +9 -1
  59. package/md_cg/test_issue52_scan_condition_first.py +677 -0
  60. package/md_cg/test_issue53_cipher_health_hash.py +385 -0
  61. package/md_cg/test_linkref.py +7 -0
  62. package/md_cg/test_mode_parity.py +1393 -0
  63. package/md_cg/test_mutation_rollback.py +805 -0
  64. package/md_cg/test_n204_n205_n226_n227_n228_n229_exit_gates.py +1 -1
  65. package/md_cg/test_n214_n215_n221_n222_write_face_gates.py +7 -0
  66. package/md_cg/test_p2_mcp.py +8 -0
  67. package/md_cg/test_p9_forget_protect.py +7 -0
  68. package/md_cg/test_p9c_dedup_hints.py +7 -0
  69. package/md_cg/test_policy_required_ccg.py +5 -1
  70. package/md_cg/test_protocol.py +7 -0
  71. package/md_cg/test_stgidx_index_parity.py +1020 -0
  72. package/md_cg/test_writelimit.py +36 -9
  73. package/md_cg/test_writepipe.py +5 -2
  74. package/md_cg/weights.py +15 -1
  75. package/md_cg/writepipe.py +101 -2
  76. package/package.json +1 -1
  77. package/skills/plugin.json +1 -1
  78. package/zcode/AGENTS.md +5 -5
@@ -0,0 +1,124 @@
1
+ # stg 条件化与结构索引 · 设计 v0.1
2
+
3
+ > 立约动因(2026-10-03):issue #52 判定成立并已在在役库复现(`stg.timeline(session=…)` 默认口径
4
+ > count=25 且全为 `code_*`,条件命中的 204 条——含 15 条 `mem_*`——被排除在扫描面之外)。
5
+ > 使用者当场定性与裁定:「**这又是理论和工程脱节**」「这个节点数限额是我自己提的……当时提的
6
+ > 还附带了条件,遇到更多的检索节点,应该要**建立索引**,**明确检索条件**,和**不适用条件**,
7
+ > 而**不是扩大节点数**」。
8
+ >
9
+ > 本稿=该裁定的第 3 层落地设计(第 1、2 层「条件先行 + 截断可观测」另批实施中)。
10
+ > 约束继承:`max_scan` 数值不得调大、不得默认全量;「倒排只可作候选内加速」(检索路径契约 §7)
11
+ > 同样适用于本稿——stg 索引只做**条件维的收敛**,不替代认知路径。
12
+
13
+ ## 一、背景与定性
14
+
15
+ **#52 的工程事实**(已实证):`md_cg/stg.py::_scan` 按 `list(index["nodes"].items())[:max_scan]`
16
+ 在**条件过滤之前**做 id 字典序切片——限额被实现成「静默砍尾巴」,使用者当年附带的三件事
17
+ (建立索引 / 明确检索条件 / 明确不适用条件)**一件未落地**。
18
+
19
+ **定性(「理论/工程脱节」的第 n 次现身,同族形态谱)**:
20
+
21
+ | # | 理论(已设计) | 工程(实际) | 处置 |
22
+ |---|---|---|---|
23
+ | 1 | S1–S6 逐级收敛(检索路径契约) | 认知结构入库但检索不调用(审计五偏差) | 已修(门控接线 issue #25 / C-8) |
24
+ | 2 | 六要素全要素为检索面服务 | 验证方式/不适用条件两行未进默认检索 | 已修(0.7.0 §5.4) |
25
+ | 3 | 限额=「该建索引/细化条件」的压力信号 | 限额=字典序切片(本项 #52) | **本稿 + 第 1、2 层** |
26
+
27
+ 共同主线(审计原文):「认知结构被实现成『数据结构』而不是『计算路径』」;本项的变体是
28
+ 「**设计约束被实现成实现细节**」——5000 的语义是「超限该收敛」,工程把语义丢了、只剩数字。
29
+
30
+ ## 二、第 1、2 层(另批,不属本稿)
31
+
32
+ 条件过滤先于截断(「明确检索条件」落到实现)、截断可观测(`truncated` + 提示 + 近期优先兜底)。
33
+ 本稿设计以「第 1 层路径(全量快照遍历 + 条件过滤)」为**正确性基线**:索引路径必须与它逐位一致。
34
+
35
+ ## 三、第 3 层设计(本稿主体)
36
+
37
+ ### 3.1 目标形态
38
+
39
+ 契约 §2 在 stg 三接口上的落地:「触碰节点数从 N(全库) 降到 域内 ∩ 条件匹配 ∩ 邻域」——
40
+ 查询条件(session / layer / time_window)经**结构化倒排直取子集**,不再逐条遍历快照。
41
+
42
+ ### 3.2 索引形态(主案:装载期内存倒排 + 写路径增量维护)
43
+
44
+ **主案**:不改任何磁盘格式,索引是**内存派生结构**:
45
+
46
+ - **构建**:`MdCG._load_index()` 完成后的首次 stg 访问时,一次 O(N) 快照流生成三张表:
47
+ - `by_session: {sid | None: [ids]}`(`None` = 无会话归属,即 `unassigned` 兜底桶);
48
+ - `by_layer: {layer: [ids]}`;
49
+ - `by_time: [(t, id)]`(有序,`t` 经既有 `trust.epoch_seconds` 归一;无有效时间戳的进 `_untimed`)。
50
+ - **维护**:与既有桶计数**同一写钩**(`_set_index_entry` / `_remove_index_entry` 处增量增删)。
51
+ - **不变量**:三张表恒为快照 keys 的划分(同源维护);任一表缺失/代际不符 ⇒ **回退第 1 层全量遍历**
52
+ (安全降级且**可观测**,与 postings「宁可慢,不可丢召回」同纪律)。
53
+ - **跨进程**:各进程装载时自建,无共享过期问题;多实例内存各持一份(1.7 万节点 ≈ 三张小表,可接受)。
54
+
55
+ **备选(记录不采纳理由)**:
56
+ - *快照内倒排*(`_index.json` 加段):改最核心文件的 schema,装载/校验/compact/rebuild 全链兼容负担大;
57
+ - *独立文件*(走 postings 的指纹+重建模式):引入跨进程过期面与重建时机问题,而本索引的源数据
58
+ (快照字段)本就在内存——独立文件无增益。
59
+
60
+ ### 3.3 读侧直取
61
+
62
+ - `timeline(session=X)`:`by_session[X]`(+ 既有的「x 会话不匹配」过滤语义逐位不变)→ 子集走既有排序链;
63
+ - `anchors(time_window)`:`by_time` 区间截取(二分)→ 子集;
64
+ - `consistency(layer)`:`by_layer[l]`;
65
+ - 截断语义与第 1、2 层完全一致(`truncated` / 近期优先)——索引只改「取数面」,不改「语义面」。
66
+
67
+ ### 3.4 条件资格进 stg(「明确不适用条件」)
68
+
69
+ - 复用 read 面唯一单点 `judge_qualification`:对 stg 返回条目做资格判定(生效条件命中 /
70
+ 不适用条件拒绝 / 无从判定),结果随返回体带出(`qualification` 字段,语义与 read 面同口径)。
71
+ - **首验形态:只上报不过滤**(行为零变化,`MDCG_STG_QUALIFY=1` 显式开);
72
+ **次验形态(硬过滤,与 read 面同权)另立裁定**——因为 stg 的语义是「遍历视图」而非「召回 top-k」,
73
+ 过滤改变视图完整性,需设计者拍板。
74
+
75
+ ### 3.5 flag 与回退(契约 §4 纪律)
76
+
77
+ - `MDCG_STG_INDEX=1` 显式开;默认关时=第 1 层路径。
78
+ - **两条路径结果逐位一致**为等价性准入判据(同 postings 的「候选内加速、召回与全表一致」先例)。
79
+ - 收敛读数(`meta` 分阶段计数:子集大小 vs 全量 N)供编外复核逐项核对。
80
+
81
+ ### 3.6 与既有机制的关系
82
+
83
+ - **postings(词法 bigram)**:正交可叠加——词法先收词、stg 索引收条件维;
84
+ - **桶(routing.bucket_dir,域级)**:正交;`route_key` 的 `observation_position` 一档与 layer/session 不同维;
85
+ - **refindex(`_refindex.json`)**:形态参考,非复用对象。
86
+
87
+ ## 四、验收判据
88
+
89
+ 1. **等价性**:flag 开/关,三接口返回体(除 `meta` 计数)逐位一致(快照对比);
90
+ 2. **收敛性**:`meta` 读数显示「实际遍历/触碰」从 N 降到子集(目标 ≤ 条件命中量级);
91
+ 3. **不劣化**:既有 stg 套件 + 第 1、2 层新守卫全绿;在役对照(timeline(session) 的 count 与条目集)不改;
92
+ 4. **可观测**:索引命中/回退(表缺失/代际不符)均有 `meta` 计数与 reason;
93
+ 5. **守卫与定点变异**:索引增删钩、回退路径、等价性各有断言与变异自证。
94
+
95
+ ## 五、边界(不做的事)
96
+
97
+ - 不改默认启用(先 flag,逐项验证,再讨论默认开启);不改 `max_scan` 数值与第 1、2 层语义;
98
+ - 不做 FTS 替代、不引入第二套时间/条件解析(复用 `trust.epoch_seconds` / `_view_session` / `judge_qualification` 单点);
99
+ - 不动写入侧磁盘语义(索引是内存派生 + 同钩维护)。
100
+
101
+ ## 六、待签收点(请逐条裁决)
102
+
103
+ 1. **索引形态主案**=装载期内存倒排 + 写路径增量(备选两案的驳回理由见 §3.2)——可否?
104
+ 2. **路径等价为唯一准入**:flag 开/关逐位一致才准入——可否?
105
+ 3. **资格判定首验只上报不过滤**(`MDCG_STG_QUALIFY`),硬过滤另立裁定——可否?
106
+ 4. **`unassigned` 语义**:无会话节点在会话视图下**保持现状**(仅在 `session="*"` 等视图可见),索引化不得改变——确认?
107
+ 5. **同族归属**:`consistency.check` 的 `MAX_SCAN=200` 选面(字典序前 200 → 应改相关性/条件预筛)是否纳入本线第二实现批?
108
+
109
+ ## 七、排期
110
+
111
+ 设计稿签收 → 实施批(工作流:探针 → 实现 + 守卫 → 独立复核 → 容器双栈)→ 默认开关讨论 →
112
+ 随下次发版披露(若有默认面变化)。
113
+
114
+ ## 八、签收记录
115
+
116
+ **2026-10-03 使用者签收**(原话:「同意此次设计。我们开始实施,来进行实测」):
117
+
118
+ - 待签收点 1(索引形态主案=装载期内存倒排 + 写路径增量维护):**同意**;
119
+ - 待签收点 2(flag 开/关路径逐位等价为唯一准入):**同意**;
120
+ - 待签收点 3(资格判定首验只上报不过滤,`MDCG_STG_QUALIFY`;硬过滤另立裁定):**同意**;
121
+ - 待签收点 4(`unassigned` 语义保持现状,索引化不得改变):**确认**;
122
+ - 待签收点 5(同族 `consistency.check` 的 `MAX_SCAN=200` 选面):**纳入本线第二实现批**(主体批不含;批间独立复核)。
123
+ - **附加要求:实施后须实测**——在役库上的路径等价读数与遍历面收敛读数(本批报告中的「实测」节)。
124
+
@@ -0,0 +1,207 @@
1
+ # 灵枢记忆自处理三档自治 · 设计 v0.2(已签收 · 冻结)
2
+
3
+ > **状态:已签收(规格冻结)**——五条裁定已于 2026-10-01 由使用者签收(§〇.2)
4
+ > **本稿不改一行代码、不动任何数据**;落码属下一阶段,需另行开工(§十三)
5
+ > **前置**:issue #50 的两项修复(§八)——不落地则「变更确认」档在用户通道上没有输入
6
+ > **相邻**:`docs/plans/睡眠与自迭代_功能优化设计_v0.4.md` 的九步台账是本设计「计划模式」的**现存形态**
7
+
8
+ ## 〇 一句话
9
+
10
+ 把「**灵枢自己怎么处理自己的记忆**」收成三档可选的自治态度(计划 / 变更确认 / 完全访问),
11
+ **把确认覆盖面补齐到删除·改写·合并**(今天恰好缺这三样),
12
+ 并给出**升档的机检准入读数**——先证明判断可信,再放权。
13
+
14
+ ## 〇.1 三档定义(使用者原话,不得改写)
15
+
16
+ | 档 | 定义(原话) |
17
+ |---|---|
18
+ | **计划模式** | 严格自己制定计划,让灵枢按照计划处理记忆。 |
19
+ | **变更确认** | 对记忆进行变更(删除、改写、合并)时进行确认。 |
20
+ | **完全访问** | 完全交给灵枢自己处理,不过问用户。 |
21
+
22
+ **主客关系**(同日裁定,为权重依据):**灵枢本体是那个"学生"**,使用者与编排方是它的**教师与家长**;
23
+ 其他使用者可能取「朋友」(想少写作业)或「老板」(只求产出)的立场——
24
+ **纪律与判据面上判断权在我们,只在易用性与产出面上采纳后两类立场**。
25
+
26
+ ## 〇.2 五条裁定(使用者 2026-10-01 签收,本稿据此冻结)
27
+
28
+ | # | 裁决点 | 裁定 |
29
+ |---|---|---|
30
+ | ① | **默认档位** | **变更确认** |
31
+ | ② | **变更确认的覆盖面** | **改写 · 删除 · 合并**(三类全含) |
32
+ | ③ | **准入读数的时间窗** | **长期记忆 30 天 / 短期记忆 3 天**(映射见 §七) |
33
+ | ④ | **确认队列** | **复用既有审核队列**(不新建第二套) |
34
+ | ⑤ | **升降档** | **升档 = 计划式确认**(必须写计划、由用户确认);**降档 = 自动执行** |
35
+
36
+ > 口径说明(编排侧读法,若有偏差以使用者为准):第⑤条的"升档人工"其**具体形态就是把升档这件事走一遍计划模式**——先写一份计划(它拿更高自治要做什么、在什么范围内、看什么读数),交使用者确认后才升;降档不需要任何人点头,读数跌破门槛即自动回落并告警。
37
+
38
+ ## 一 对象面:记忆变更动作的完整分类(一手证据,非推断)
39
+
40
+ 「确认什么」必须先穷举「能改什么」。按落点普查(只读 grep,非测试文件)分五类:
41
+
42
+ | 类 | 动作 | 落点(仓内相对路径:行) | 可回滚 | 今天有无前置确认 |
43
+ |---|---|---|---|---|
44
+ | **A** | 新增节点 | 门控写入 `ACCEPT` → `MdCG.add`;不入库的出口是提案 | 新增天然可回滚(软删) | 无(入提案队列仅在非 ACCEPT 出口) |
45
+ | **B** | **合并**(新内容并入既有节点) | `forgetting.reinforce`(`md_cg/forgetting.py:456`,写回在 `:524`)+ `writelimit.converge_into` | 部分:前像无快照;聚合行可按标记剥离 | **无**(普通节点);受保护节点要 `override`+快照 |
46
+ | **C** | **改写**(既有节点就地改) | 同 id 覆写(`cg(op=write, node_id=…)`)=改写;`_write_node` 直调点:`backfill`×8、`consolidate:642/848/891`、`ccgc:837/926`、`crosscheck:675/971`、`evolution:407`;**层迁移 + 删旧文件** `consolidate.py:891/893`;CCG 行 upsert | 否(除受保护节点) | **无** |
47
+ | **D** | **删除** | 软删(节点移入 `trash/`+删除清单,可审计,`md_cg/mcp_server.py:324`);**丢弃**(`forgetting.assess` 的丢弃分支 → 只留痕不落节点,`forgetting.py:411` `record_drop`);断面裁剪 `forgetting.py:756 _prune`;去污染实改(缺省关) | 软删是;丢弃否(仅日志留全文);裁剪否 | **无** |
48
+ | **E** | 权重与生命周期 | `freshness.recalc(..., apply=False)`(`md_cg/freshness.py:302`)、`weights`、`lifecycle.stamp`(`md_cg/lifecycle.py:52` 四态单向降级轴) | 是:`freshness.rollback`(`:428`)及各模块 `rollback` | 无(但改的是分数,破坏性最低) |
49
+
50
+ ## 二 现状:确认覆盖面与破坏性强度**倒置**
51
+
52
+ 1. **确认形态只长在批量维护上**:`consolidate`/`crosscheck`/`ccgc`/`trust`/`autonomy` 全是"**先出报表、再落盘**"(落盘参数 `apply` 缺省为假;如 `consolidate.py:970/1130/1411`、`crosscheck.py:738`)。这是设计对的地方。
53
+ 2. **热写入路径上破坏性最强的三个动作没有确认**:合并与改写由 `forgetting.reinforce` **就地把既有节点改写**(改 frontmatter + 追加聚合行),丢弃只留痕不落节点;对**普通节点**全无前置确认,只有 importance ≥ 0.70 的受保护节点要 `override` + 快照(`protect.py:32` → `_protected_history/<id>/<时间戳>.md` + `_protected_audit.jsonl`)。
54
+ 3. **热路径上唯一形似确认的机制是 `DEFER → 审核队列`**(`writepipe.py:260/325` `moved_to="review_queue"`、`mdcos.propose` `mdcos.py:2016/4284`,裁决通道 `scripts/review_cli.py` 的 accept/reject/edit/merge/noop)——但它**只覆盖 A(新增提案),不覆盖对既有记忆的 B/C/D**。
55
+ 4. **缺省档位事实上已经是「完全访问」**:自愈开、自整理开、自演化关、去污染实改关(`md_cg/sustain.py:88-89`);睡眠合并缺省 `auto`、去污染实改缺省关(`md_cg/sleep.py:84` 表)。它已经在跑,而且跑在判断力最弱的那条通道上(§八)。
56
+
57
+ **结论**:**破坏性最强的地方最没有确认,确认形态反而只覆盖批量维护与新增提案。** 本设计的主要工作就是把这个倒置掰回来。
58
+
59
+ ## 三 设计:三档语义 × 动作面(裁决矩阵 · 已冻结)
60
+
61
+ 「允许=自动执行」「确认=先出变更单、经裁定后才落」「禁止=fail-closed 拒并给 hint」。
62
+
63
+ | 动作 | 计划模式 | **变更确认(默认档)** | 完全访问 |
64
+ |---|---|---|---|
65
+ | **A 新增** | 允许(须命中计划中的步骤) | 允许 | 允许 |
66
+ | **B 合并** | 允许(须命中计划步骤) | **需确认** | 允许 |
67
+ | **C 改写** | **需确认** | **需确认** | 允许 |
68
+ | **D 删除** | **需确认** | **需确认** | 允许 |
69
+ | **E 权重/生命周期** | 允许(须命中计划步骤) | 允许(分数类不阻塞) | 允许 |
70
+
71
+ 三条硬约束:
72
+
73
+ - **单一入口**:档位是**一个** env 键(`MDCG_AUTONOMY=plan|confirm|full`,缺省 `confirm`),由**一处**判据函数读取与解释;不得各模块各读一份(沿用 sleep 的 §4.7 "env 表单一真源" 纪律)。
74
+ - **纯加严**:任一档都不得放宽既有判据——档位只在既有裁决**通过之后**决定该动作是"立即落"还是"出变更单",**不参与资格判定**(资格仍归 `forgetting.assess` 与写入闸门)。
75
+ - **计划外零变更**:计划模式下任何未在计划里的变更 = fail-closed 报错(带可执行 hint),不静默跳过。
76
+
77
+ ## 四 变更确认档:**复用既有审核队列(裁定④)**
78
+
79
+ - **队列复用**:直接复用既有审核队列与裁决通道(提案入口 `mdcos.propose`;裁决 `scripts/review_cli.py` / `cg(op=review, decision=accept|reject|edit|merge|noop)`)。**不新建第二套队列**——两套队列=两套台账、两处口径。
80
+ - **两类条目共用一个队列**,靠 **类型字段**区分:`kind="proposal"`(原有:新写入未获 ACCEPT 的提案)与 `kind="mutation"`(本设计新增:对既有记忆的 B/C/D 变更单)。裁决通道与统计口径共用。
81
+ - **变更单**(每张含):动作类(B/C/D)· 目标节点 id 与路径 · **前像**(可回滚句柄)· **后像**(将要写成的样子)· 影响面(边/索引/聚合行)· 回滚命令 · 提议者与理由。
82
+ - **回滚原语(已有,需通用化)**:
83
+ - 受保护节点:`_protected_history/<id>/<时间戳>.md` + `_protected_audit.jsonl`(`protect.py:32-33`)——**把这一对从"仅受保护节点"推广为"一切 C/D/B 动作"**;
84
+ - 软删:`trash/` + 删除清单,可 restore(`mcp_server.py:324`);
85
+ - 合并:聚合行自带 `- 【聚合 …】` 前缀(`forgetting.py:84` `AGG_MARK`、`:380`),可按前缀**定向剥离**回退到合并前正文;
86
+ - 分数类:各模块既有 `rollback`(`freshness.py:428` 等)。
87
+
88
+ ## 五 计划模式(我们制定计划,灵枢照计划执行)
89
+
90
+ - **形态已在**:睡眠周期的九步显式台账(`md_cg/sleep.py:596-612`,明文"不许悄悄跳过、不许改名",未接线步显式标注 `未接线`;`STEPS` 顺序即台账顺序)。这是"照计划做、可审计"的**现成骨架**。
91
+ - **本档增量**:把计划从**硬编码序列**变成**输入**——一份显式计划(步骤 · 每步允许的动作类 · 预期读数 · 是否允许落盘),灵枢逐条执行并逐步入台账;**计划由我们(教师/家长)制定**,它不自行增删步骤。
92
+ - **与睡眠周期的关系**:睡眠周期 = 一份**内置默认计划**(缺省计划:九步、周期 3600s、窗口 23:00–07:00、窗口外只记账不迭代);本档不改它,只让"计划可替换/可签收"。
93
+ - **同时是升档的载体**(裁定⑤):升档本身走本档——先出计划、经确认、再升。
94
+
95
+ ## 六 完全访问
96
+
97
+ - **语义**:A–E 全自动,不过问使用者。
98
+ - **准入**:必须**先满足 R1–R4**(§七);不满足时该档**不可选中**(fail-closed 并在启动面报"缺哪一条读数",不静默降级)。
99
+ - **义务(与自由对等)**:①一切破坏性动作**先留前像**(§四);②当日"改了什么 / 丢了什么 / 拒了什么"必须**可一眼查**(§九)。
100
+ - **升档程序**(裁定⑤):写计划 → 使用者确认 → 生效;**降档自动**。
101
+
102
+ ## 七 放权阶梯与准入读数(可机检 · 窗口按裁定③)
103
+
104
+ 三档是**阶梯**不是并列选项:**先证明判断可信,再放权**。四条读数:
105
+
106
+ | 读数 | 判据(机检) | 数据面 | **窗口(裁定③)** | 门槛 |
107
+ |---|---|---|---|---|
108
+ | **R1 判断非退化** | verdict 分布**非常量**:DROP/MERGE/DEFER 各自出现过,且单一 verdict 占比 < 90% | `_forgetting.jsonl`(`forgetting.py:80`)+ `forgetting.summary`(`:606`) | **长期 30 天** | 占比 <90% |
109
+ | **R2 会说"不"** | 负记忆两层有**近期**新增 | `rejected/` 与 `unresolved/` 层节点计数与最近 `created_at` | **短期 3 天**(另看 30 天总量 ≥1) | 3 天内各 ≥1(长期总量各 ≥1) |
110
+ | **R3 破坏可逆且"回过"** | 存在**实测回滚记录**(不是"理论上可回滚") | `_protected_history/`、`trash/`+删除清单、各模块 rollback 台账 | **长期 30 天** | 30 天内 ≥1 次真实回滚 |
111
+ | **R4 判断收敛** | 确认档下**驳回率**(reject/edit ÷ 全部裁定)随时间下降 | `review decisions`(`review_cli stats`) | **长期 30 天**内取 3 个 10 天子窗 | 逐窗下降且 < 20% |
112
+
113
+ **窗口口径(编排侧读法,偏差以使用者为准)**:**短期 3 天**="它最近还在不在行使判断"的**活性**读数(R2);**长期 30 天**="判断有没有在变好、破坏是否可逆"的**能力与收敛**读数(R1/R3/R4)。
114
+
115
+ - **升降档(裁定⑤)**:**升档=计划式确认**(写计划 + 使用者确认);**降档=自动执行**——读数跌破门槛即自动回落到变更确认档,并在启动面告警。
116
+ - **读数即断言**:R1–R4 做成常驻断言(`conformance`/`census` 家族,只告警不改数据),随时可答"它今天够格吗"。
117
+
118
+ ## 八 与 issue #50 的关系:本设计的**前置**
119
+
120
+ #50 复核在隔离沙箱实测到:用户消息通道上栅门的"半重复 → 待定复核"分支**结构性不可达**(重要性下限与外部来源权重基线恰好相等 ⇒ 恒过),实际退化成"精确重复丢弃 + ≥0.85 合并,否则新增"。
121
+
122
+ > **那条消失的 `DEFER`,正是"变更确认"这一档在用户通道上的实现体。**
123
+
124
+ 所以本设计有**两项前置**(属 #50 修复面):
125
+ ① 让"半重复"不再依赖重要性判定(或让重要性下限严格高于来源基线);
126
+ ② 保护线(≥0.70"不可遗忘")只由**显式声明**取得,启发式不得自行签发。
127
+ **在这两项落地前,变更确认档在用户通道上没有输入**——所有半重复都会直接变成新节点,队列里永远没有可确认的东西。
128
+
129
+ ### §八.1 实测更正(2026-10-01,改前基线 · 原判据被证伪)
130
+
131
+ 派发前按设计纪律做了**改前基线**(隔离沙箱写入后直读 frontmatter),结论是 §八 第②条**原判据不成立**,据实更正:
132
+
133
+ | 输入 | 审计面 reason | 裁决用重要度 | 落盘 frontmatter |
134
+ |---|---|---|---|
135
+ | 用户消息 · 显式 0.6 | 重要度 0.60≥0.3 | 0.6(hint) | importance=0.6,protected=None |
136
+ | 用户消息 · **不给** hint(全新) | **「重要度 0.84≥0.7(触发不可遗忘保护)」** | 0.837(启发式) | **importance=0.5,protected=None** |
137
+ | 工具输出 · 不给 hint | **「重要度 0.71≥0.7(触发不可遗忘保护)」** | 0.711(启发式) | **importance=0.5,protected=None** |
138
+ | 用户消息 · 显式 0.9 | 重要度 0.90≥0.7 | 0.9(hint) | **importance=0.9,protected=True** |
139
+
140
+ 1. **保护线实际只由显式声明取得**——启发式算出高分也**不落盘、不给保护**(落默认 0.5)。故「启发式自签保护」**不成立**,§八② 作废。
141
+ 2. 真正的缺陷换成了:**审计面文案会声称未发生的事**——启发式路径下 reason 写「触发不可遗忘保护」,而节点无保护位、重要度仍是默认 0.5;**裁决用的重要度与落盘记的重要度不同源**。属「汇报不实」,处置待使用者裁定(建议:文案只在真的落盘保护时出现;裁决用与落盘记的重要度同源或双记)。
142
+
143
+ **§八 第①条不受影响**,仍为落码第 1 步。
144
+
145
+ ### §八.2 实测更正之二(2026-10-01 · 第①条落码后复核去向面)
146
+
147
+ 第①条(半重复 → DEFER)已落地并通过改前/改后对拍(3 行变 / 5 行不变 / 0 越界;对拍见修复报告),编排侧复核**去向面**时发现一处**必须在落码前解决**的空缺:
148
+
149
+ - **遗忘闸门的 DEFER 没有复核入口**:`md_cg/mdcos.py:3717-3723` 对非 DROP 的裁决只写一行留痕(`node_id/layer/verdict/reason/importance/entropy/actor`,**不含正文**),**不调用任何入队入口**;对比 DROP 分支有 `forgetting.record_drop`(`mdcos.py:3702-3714`,留全文 + trace_id)。**审核队列里的条目来自另一条链**——审计/策略闸(`writepipe.py:260/325` 的 `moved_to="review_queue"`),与遗忘闸门不是同一条路。
150
+ - **后果**:第①条**单独**落地,会把半重复从「落成一个近似重复节点」改成「**不落盘、且正文不进队列**」——原文只留在会话/recent 时间线,而"待定复核"没有收件箱。**那等于把"噪声"缺陷换成"静默不记"缺陷**,正是本设计要消灭的那一类。
151
+ - **对 §十三 的次序修正**:第①条**必须与「遗忘 DEFER → 复核队列」接线同批落地**,否则不得单独落。该接线填的正是 §四(裁定④"复用既有审核队列")在这条路径上的空缺,且须自带守卫(DEFER 入队且带原文 / 裁定 accept 可落盘 / reject 不落盘 / 审计闸已入队的路径**不重复入队**)。
152
+ - **附带(既有守卫的编码问题)**:`md_cg/test_writelimit.py:123-127`(E 节"knowledge 不聚合不限流")把「半重复→ACCEPT」一并钉死在断言里,第①条落地后必然转红。经读码确认,该断言的**意图是层豁免**(限流器未介入),**编码**却依赖遗忘闸门的旧裁决——须按标题意图重写判据(改为「gate 里无 `limiter` 键」)并另加一条钉住新行为。**改的是断言编码,不是断言意图**,且须在提交信息里写明。
153
+
154
+ ### §八.3 落码登记(2026-10-01/02,三批 issue50-a/b/c 的裁定与结果)
155
+
156
+ | 项 | 裁定 | 落点 |
157
+ |---|---|---|
158
+ | ① 半重复→DEFER | 已落 | `md_cg/forgetting.py` 分支④删重要度合取 |
159
+ | 遗忘 DEFER→复核队列(带原文) | 已落(同批) | `md_cg/mdcos.py` DEFER 出口接 `propose`;限流 DEFER 不入队;payload_hash 幂等防重 |
160
+ | E1 重编码 / **H 夹具** | 已落(断言意图不变) | `md_cg/test_writelimit.py` E 节判据换「gate 无 `limiter` 键」+E2 钉新行为;H 节夹具改 `gated=False` 直造存量(四条断言一字未动) |
161
+ | F1 元数据透传 | 已落(使用者裁定扩面) | DEFER 分支 `propose(…, **kw)` 透传 tags/condition_space/verification_basis/non_applicable_conditions/derived_from/relation;accept 回写走**既有映射通道**(`review_decide` 未改);fm 逐键对拍白名单外差异=0 |
162
+ | F2 `node_id=None` | 已落(使用者裁定收口) | 兜底 `forgetting._prefeed_id(content)`(内容派生),兜底事实写返回体 `proposed_id_fallback`(非静默) |
163
+ | `defer_reason` 落 accept 后 fm | **使用者裁定接受**(登记) | 溯源语义:该节点曾因半重复待定、经确认落盘 |
164
+ | 越权层 DEFER → `AccessDenied` | **使用者裁定接受**(登记) | 由「静默返回」改 fail-closed,仅发生在 DEFER 入队路径 |
165
+ | 偶发红归因 | **定案,与本设计无关** | `scripts.test_utf8_boot_guard` 的 `E2E-HIVE-OK` c5 判据被**在役 serve 心跳**打假红(`_serve.json` 每 tick 改写=`poll_ms` 默认 400ms,原子写+伴生 `_serve.tmp<pid>`;早先转述的"每 ~20s"为采样伪影、已订正,心跳相位与采样周期耦合;最小复现 3 轮红 1);修法=`_pool_listing` 排除 `_serve*`(单点,判据强度不变),修后同型条件 3/3 绿 |
166
+ | **issue50-d 重要度同源三件套** | **使用者裁定"做"(2026-10-02)** | ①落盘=裁决值+fm 新增 `importance_source`(hint/heuristic,进索引条目);②自动保护**只认显式声明**(启发式过线只落分不打位,`add()` 既有调用方零回归由 source 缺省 None 构造保证);③保护分支文案按 `imp["from"]` 分叉。**F 组假设链验证(使用者"重要度↔因果推理"归因)**:主相关分 `_score` 不消费 importance,但终排破序(`-score,-importance,id`)、freshness 刷新档(≥0.7→+0.01)、兜底池序、RRF 破序、`_tier_of` 分层**都消费落盘值**——启发式恒落 0.5 使"重要度→排序→下游使用"链在**落盘点**断开;本批修复后该链接通。残余两项登记:`prefeed(write=True)` 同族第二落点未改;`protect.is_protected` 读面按分自动保护会把启发式 0.7x 认作"重要性保护"(保护语义面,待使用者裁定) |
167
+ | **issue50-e 读面保护只认显式来源** | **使用者裁定"让读面也只认显式来源"(2026-10-02)** | 上表残余第二项收口:`protect.is_protected` 按分分支加**来源资格闸**——`imp >= AUTO_PROTECT_IMPORTANCE and (_src is None or _src == "hint")`。三条边界:①键缺省(None)=存量节点(既有 `add(importance=…)` 直写、维护路径调分从未有该键)⇒按分保护**一字不变**(零回归,守卫 B 组锚定);②`"hint"`=显式声明⇒语义不变(写侧对 hint 过线本就打位,按分分支只是其无位形态兜底);③`"heuristic"` 及其它显式来源⇒机器推断的分不构成不可遗忘依据。层保护/`fm.protected` 位/`is_immutable` 一律不动;扩散面(遗忘与搬迁闸、scrub 净化与 confidence 校准 skip、`stats.auto_by_importance` 盘点)同闸生效;启发式的软用途(落盘、排序、freshness 刷新、兜底池序)不受本闸影响。**使用者语义确认**:读面只信「有来源依据的判断」而非转述——本条即该语义在保护面的落地。守卫 53/53+3 定点变异(heuristic 也认→11 红、缺省也判不认→10 红、来源闸整支删除→10 红) |
168
+
169
+
170
+ ## 九 可观测面(家长要的那一眼)
171
+
172
+ 三问做成一条只读读数(挂巡检,不动数据):
173
+
174
+ 1. **它今天拒绝过吗**——`rejected/` 层新增数;
175
+ 2. **它不确定过吗**——`unresolved/` 层新增数 + `_forgetting.jsonl` 中 `DEFER` 计数;
176
+ 3. **它改了什么、被确认过吗**——变更单台账(§四)的 生成/裁定/驳回/回滚 四个计数。
177
+
178
+ ## 十 不适用条件与边界(本稿**不做**的事)
179
+
180
+ - 不做前端/插件 UI,不改 DSH 桥接,不动检索面读数(本设计不改任何打分与召回行为)。
181
+ - **不解决跨进程互斥**:常驻循环按 `(根, 名字)` 进程内唯一,多实例并发是既有缺口,另项。
182
+ - `_sleep.jsonl` 无轮转、断面裁剪不保留前像,均**另项**登记,不在本轮。
183
+ - **不给"判断是否可信"贴 LLM 评分**:R1–R4 一律机检(可复算、可对拍),人只看读数。
184
+ - 不改 `writelimit`(它是文档化设计,只在其**之后**加确认,不重排判据)。
185
+
186
+ ## 十一 验收判据(落码时)
187
+
188
+ - 每档一只守卫(`md_cg/test_autonomy_modes.py` 类)+ **定点变异自证**(注入"档位不生效"必红);
189
+ - **不动面对拍**:切档前后的**非破坏性动作**(A/E)逐位不变;
190
+ - 回滚实测:每种破坏性动作各演一次"落 → 回滚 → 逐字节比对前像";
191
+ - 准入读数 R1–R4 各有独立断言与一组"门槛刚过/刚不过"的边界用例(含窗口边界:3 天 / 30 天各一条)。
192
+
193
+ ## 十二 裁定面(已并入 §〇.2)
194
+
195
+ 五条裁决点已全部签收,内容见 §〇.2;本稿据此冻结,后续变更走新版本号。
196
+
197
+ ## 十三 落码顺序(待使用者开工)
198
+
199
+ 1. **#50 前置其一:半重复 → DEFER**(§八①)**+「遗忘 DEFER → 复核队列」接线**(§八.2)——**两者必须同批落**:单独落①会把"噪声"换成"静默不记";同批另须按标题意图重编码 `test_writelimit.py` 的 E 节断言(§八.2 附带);
200
+ 2. 档位**单一入口** + 缺省 `confirm`(§三);
201
+ 3. 变更单与**回滚原语通用化**(§四);
202
+ 4. R1–R4 **断言与窗口**(§七);
203
+ 5. 每档**守卫 + 定点变异自证**、不动面对拍、回滚演练(§十一)。
204
+
205
+ ---
206
+
207
+ **本稿的证据面全部来自仓内只读普查**(grep + 读码,非测试文件),未写入任何数据、未改任何码。
@@ -11,7 +11,7 @@
11
11
  "reject": []
12
12
  },
13
13
  "_comment": "identity负责端口分流; negative只否决明确域外; 无//注释(标准JSON)",
14
- "content": "工作纪律集: 4条方法论(理论先行/全面处理/白箱方法/根因) + 3条执行(验证/双副本/兜底) + 1条思考(中文思考/协作模式分级) + 1条保密(敏感信息隔离) + 3条图像线(选源护栏/历史查询优先/算法权威唯一) + 1条协作(访谈澄清:先问清再动手) + 1条合规(内容政策合规:公开产物过内容政策+隐私双清单) + 2条执行调度与运行环境(命令执行统一走python/UTF-8: 显式encoding+PYTHONUTF8=1, 规避GBK, 全仓文本与路径一律UTF-8(无BOM, 中文可进路径), 不做控制台兼容(取用走python); 任务派发统一走蜂巢: 任何执行性任务经蜂巢spawn/submit执行并留痕, agent本体只做编排, L1出口=产物落点为只读判定(不改仓库/外部状态)可直跑须留痕) + 1条记忆闭环(任务收尾归档:每次任务执行完只将核心修改(内容/原因/位置/验证结论)按CCG六要素(功能名/生效条件/子功能/执行/验证方式/不适用条件)成文存入灵枢记忆, 不写中间过程; text 类缺要素即被写入闸门拒并当场返回缺失清单) + 1条信息获取(工作区索引优先: 查工作区文件先读 WORKSPACE_INDEX.md(仓根, 由 scripts/workspace_index.py 从 git 追踪面管线生成), 尚无则先跑 --write 生成再读, 不以重复全盘浏览代替; 索引是会陈化的手工件, 故须管线生成+机械守卫, 否则退化为误导源)",
14
+ "content": "工作纪律集: 4条方法论(理论先行/全面处理/白箱方法/根因) + 3条执行(验证/双副本/兜底) + 1条思考(中文思考/协作模式分级) + 1条保密(敏感信息隔离) + 3条图像线(选源护栏/历史查询优先/算法权威唯一) + 1条协作(访谈澄清:先问清再动手) + 1条合规(内容政策合规:公开产物过内容政策+隐私双清单) + 2条执行调度与运行环境(命令执行统一走python/UTF-8: 显式encoding+PYTHONUTF8=1, 规避GBK, 全仓文本与路径一律UTF-8(无BOM, 中文可进路径), 不做控制台兼容(取用走python); 任务派发统一走蜂巢(zcode端的工作流工具为等效蜂巢工具——使用者2026-10-04裁定; 蜂巢功能完全完善之前可优先使用zcode工作流): 任何执行性任务经蜂巢spawn/submit执行并留痕, agent本体只做编排, L1出口=产物落点为只读判定(不改仓库/外部状态)可直跑须留痕) + 1条记忆闭环(任务收尾归档:每次任务执行完只将核心修改(内容/原因/位置/验证结论)按CCG六要素(功能名/生效条件/子功能/执行/验证方式/不适用条件)成文存入灵枢记忆, 不写中间过程; text 类缺要素即被写入闸门拒并当场返回缺失清单) + 1条信息获取(工作区索引优先: 查工作区文件先读 WORKSPACE_INDEX.md(仓根, 由 scripts/workspace_index.py 从 git 追踪面管线生成), 尚无则先跑 --write 生成再读, 不以重复全盘浏览代替; 索引是会陈化的手工件, 故须管线生成+机械守卫, 否则退化为误导源)",
15
15
  "execution": {
16
16
  "how": "按identity(端口)+任务类型路由到对应纪律"
17
17
  },
@@ -403,7 +403,7 @@
403
403
  {
404
404
  "id": "discipline_hive_dispatch",
405
405
  "semantic": "17.任务派发统一走蜂巢",
406
- "content": "任何执行性任务(跑脚本/测试、批量处理、探索盘点、文本加工、多智能体协作)一律经蜂巢派发执行: agent本体只做编排(拆spec→submit/spawn→poll收result→汇总), 宿主自带subagent/team/Task不是等价通道. 原理: ①执行留痕(spec/status/result落盘可追溯, 会话结束不蒸发); ②统一调度面(worker池/心跳/超时强杀/kill/崩溃恢复); ③dogfooding(自家引擎高频实战打磨, 打破「宿主顺手→跳过→永不打磨」死循环); ④判定成本归零(无例外通道, 杜绝「以为只是探索」滑移). ⑤[2026-09-17 A+C修订] 新增L1出口: 判据外置为产物落点(非「任务简单」的主观感受)——不改仓库/外部状态的本地只读命令属L1直跑(须留痕), 改仓库/外部状态(写文件/git/推远端)必派发. 原理: 层级归属不可由执行者独占自我声明(智能论PROP-DECISION-LAYER-003分层原则第4条「层级归属可被验证单元复核」), 判据须机械可核、豁免须可见. ⑥[2026-09-17 使用者确认] L1留痕粒度=按任务(一个任务一条, 不逐命令逐行); L1层级归属的复核者=使用者+GitHub使用者(坐实分层原则第4条「复核者」位).",
406
+ "content": "任何执行性任务(跑脚本/测试、批量处理、探索盘点、文本加工、多智能体协作)一律经蜂巢派发执行: agent本体只做编排(拆spec→submit/spawn→poll收result→汇总), 宿主自带subagent/team/Task不是等价通道; zcode端的工作流工具为等效蜂巢工具(使用者2026-10-04裁定)——在蜂巢功能完全完善之前, zcode端可优先使用zcode工作流处理. 原理: ①执行留痕(spec/status/result落盘可追溯, 会话结束不蒸发); ②统一调度面(worker池/心跳/超时强杀/kill/崩溃恢复); ③dogfooding(自家引擎高频实战打磨, 打破「宿主顺手→跳过→永不打磨」死循环); ④判定成本归零(无例外通道, 杜绝「以为只是探索」滑移). ⑤[2026-09-17 A+C修订] 新增L1出口: 判据外置为产物落点(非「任务简单」的主观感受)——不改仓库/外部状态的本地只读命令属L1直跑(须留痕), 改仓库/外部状态(写文件/git/推远端)必派发. 原理: 层级归属不可由执行者独占自我声明(智能论PROP-DECISION-LAYER-003分层原则第4条「层级归属可被验证单元复核」), 判据须机械可核、豁免须可见. ⑥[2026-09-17 使用者确认] L1留痕粒度=按任务(一个任务一条, 不逐命令逐行); L1层级归属的复核者=使用者+GitHub使用者(坐实分层原则第4条「复核者」位).",
407
407
  "conditions": {
408
408
  "apply": [
409
409
  "执行性任务",
@@ -423,10 +423,10 @@
423
423
  ]
424
424
  },
425
425
  "execution": {
426
- "how": "任务→按产物落点判据定层级(不改仓库/外部状态的只读判定=L1直跑并按任务留痕一条(复核者=使用者+GitHub使用者); 改状态=必派发, 不得自我豁免)→拆spec(LLM委托型=默认exec.py: model+user_prompt+context_files; 确定性执行=自定义worker, 契约「读spec.json写result.json」)→hive_spawn/CLI submit→poll→汇总; 兜底情形须声明「蜂巢不可用, 兜底降级」"
426
+ "how": "任务→按产物落点判据定层级(不改仓库/外部状态的只读判定=L1直跑并按任务留痕一条(复核者=使用者+GitHub使用者); 改状态=必派发, 不得自我豁免)→拆spec(LLM委托型=默认exec.py: model+user_prompt+context_files; 确定性执行=自定义worker, 契约「读spec.json写result.json」)→hive_spawn/CLI submit(zcode端: 工作流工具为等效蜂巢工具——使用者2026-10-04裁定; 蜂巢功能完全完善之前, zcode端可优先使用zcode工作流处理; 留痕以工作流脚本与运行记录为凭)→poll→汇总; 兜底情形须声明「蜂巢不可用, 兜底降级」"
427
427
  },
428
428
  "response": {
429
- "direct": "按工作纪律第17条: 任务派发统一走蜂巢——任何执行性任务经蜂巢 spawn/submit 执行并留痕(spec/status/result), agent本体只做编排; 宿主自带subagent/team不是等价通道, 兜底须声明。L1只读判定(产物落点=不改仓库/外部状态)可直跑, 须输出「L1 直跑:<命令> — 风险/频次/可逆性」留痕。"
429
+ "direct": "按工作纪律第17条: 任务派发统一走蜂巢——任何执行性任务经蜂巢 spawn/submit 执行并留痕(spec/status/result), agent本体只做编排; 宿主自带subagent/team不是等价通道(zcode端的工作流工具为等效蜂巢工具——使用者2026-10-04裁定; 蜂巢功能完全完善之前, zcode端可优先使用zcode工作流处理), 兜底须声明。L1只读判定(产物落点=不改仓库/外部状态)可直跑, 须输出「L1 直跑:<命令> — 风险/频次/可逆性」留痕。"
430
430
  }
431
431
  },
432
432
  {