dsh-distillation-director 4.6.5

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/SKILL.md ADDED
@@ -0,0 +1,553 @@
1
+ ---
2
+ name: distillation-director
3
+ description: 把一本书蒸馏成一组可执行的 Agent 技能——三闸判态制(防线3忠实度/盲测路由/达尔文体检),只判态不打分,门禁零🔴。触发:用户说「拆书」「蒸馏这本书」「蒸馏 XX」「把 XX 书做成 skill」「按手册/按流水线蒸这本书」。流程:输入决策树→阶段0整书理解→阶段1提取→阶段1.5验证→阶段2构造→阶段3链接→阶段4测试→阶段5交付;红线词分级+LLM终裁,机器层¥0先行,L2.5 单本约 ¥20。NOT for 简单总结、书评、读后感、作者人设角色扮演(后者用 huashu-nuwa)。
4
+ ---
5
+
6
+ # 蒸馏操作手册 V4.6 · 升级版(三闸·门禁制)
7
+
8
+ > 本 SKILL.md = 《蒸馏操作手册》权威执行标准(2026-09-12 用户拍板)的技能化封装,正文含 §0–§16 基干 + §17(V4.2 增补)+ §18(V4.3 增补)+ §19(V4.4 增补)+ §20(V4.5 增补)+ **§21(V4.6 增补:强制门禁+执行合规八条)**;触发后全部执行。
9
+
10
+ > ⛔ **开工第一条命令(V4.6 强制 · 不可跳过)**:`python tools\gate_start.py --task <slug>` —— **未过之前不得调用任何子代理、不得 OCR、不得写任何产物**。进入任一阶段前须跑 `python tools\gate_stage.py --task <slug> --stage N`。详见 §21。
11
+
12
+ > 底本:《蒸馏操作手册V4.0-升级版.md》(2026-09-07);本版 = 基于《周期、估值与人性》L2.5 实测复盘(`投资蒸馏/三闸机器化/手册-v4.1-修订建议(周期估值与人性实测).md`)的 R1–R8 修订定稿(2026-09-12)。**状态:权威执行标准(2026-09-12 用户拍板切换,替换 V4.0;V4.0 转为历史档)。**
13
+ > 一句话改动(相对 V4.0 增量):红线词分级 + LLM 语义终裁、desc 补词与让位分离、提取器提示词模板固化(§3 附件)、提取代理分段落盘 + 超时判据改为「最后落盘时间戳」、d6 校验口径文档化、辅助脚本机器校验自检单、成本基准校准(L2.5 epub ≈¥20 级)+ 成本即时回填。
14
+ > 继承 V4.0 已验证件:机械层¥0先行、judge 输入瘦身、gate-blocked 挂起、防线3 机器扫描、L1/L2.5/L3 档位。**砍掉**:9维加权100分、三套分数并行、默认全量JSON落盘、d8 每技能全测。
15
+ > 执行强制性:未过门禁不得进下一阶段;gate-blocked/降级/豁免/轻量处理未经用户确认不得启用;独立 judge/复验默认独立子代理执行。
16
+
17
+ ## 0. 总纲
18
+
19
+ ### 0.1 触发
20
+ - 「蒸馏 XX / 拆书 / 把 XX 做成 skill」→ 走本手册
21
+ - 「对已有技能体检/完善/优化」→ 走达尔文体检(判态+修复,见 §5.3)
22
+
23
+ ### 0.2 模型分工(判态制)
24
+ | 任务 | 谁做 | 说明 |
25
+ |---|---|---|
26
+ | 主流程调度/OCR/拆分/构造/写文档 | 主会话 | 同 v3.0 |
27
+ | 机械层判态(¥0) | 本地脚本 | machine_precheck_v2 / defense3_impersonation_scan / blindtest_lexicon_mock_v1 / machine_layer_readycheck;只出 PASS/🔴/▲ 清单+证据行号,**不打分** |
28
+ | 语义层判态(最小域) | 子代理 judge | 只收机器证据包(KB 级),对 🔴 候选与语义残差出「必修清单」;不读 40KB 全文 |
29
+ | 实测 d8(簇抽) | 子代理真实执行 | 红线类必测1 + 主功能簇抽1;抽测样本同时过越界五查 |
30
+ | 交付盲复核(整书抽1-2) | 独立 judge | 整书交付时盲审:只给 SKILL 全文+机器证据包,**不给主会话结论**;出「同意/异议+理由」与 A/B/C 档位 |
31
+ | B 档数字分(按需) | 独立 judge | 仅对外汇报要具体分数时启用;默认不跑 |
32
+
33
+ ### 0.3 费用纪律
34
+ - 机械层零成本先行;judge 预算只覆盖语义窄域 + d8 簇抽 + 交付盲复核。
35
+ - 文字版 PDF 先跑 pymupdf;扫描版 150dpi + PaddleOCR 快扫,32B 只修问题页;避开计价高峰(周末/节假日全天低谷价)。
36
+ - **成本基准(V4.1 校准)**:L2.5 epub 文字版 ≈14 万字单本实测 ≈ **¥20.5**(2026-09-12《周期、估值与人性》:35 次 flash 子代理 + 机器层 ¥0)。估算公式**不再叠加安全倍数**(旧口径按代理次数×单价高估至 ¥30-55)。
37
+
38
+ ## 1. 输入决策树(同 v3.0)
39
+ PDF→pymupdf 查文本层;无文本→§2 OCR;视频/播客→先转稿;网络文章→抓取;个人经验→经验蒸馏另册。
40
+
41
+ ## 2. OCR 标准流程(扫描版,同 v3.0 §2)
42
+ 渲染150dpi → PaddleOCR-VL 快扫(并发6) → 清洗 <|LOC_数字|> → 乱码检测 → 32B 精修问题页 → 复查 → 抽查。参数同 v3.0。
43
+
44
+ ## 3. 阶段流程(门禁=零🔴)
45
+
46
+ ### 阶段0 骨架
47
+ - 产出 BOOK_OVERVIEW.md;门禁=用户确认骨架(主旨+章节结构+技能划分)。
48
+ ### 阶段1 提取
49
+ - 小书主会话直接读;大书 5 类提取器子代理分批(≤4/批)。产出 candidates/。门禁=候选池数量达标。
50
+ - **提取器提示词模板(V4.1 附件)**:一律复制 `三闸机器化/提取器提示词模板-v4.1.md`(统一格式行 + 引文硬纪律 5 条 + 宁少勿滥),禁止自造格式——消除「引文级联污染 / 候选错锚 / 输出格式不一」三类返工。
51
+ - **分段落盘(V4.1)**:提取代理**按小节分段落盘**到 notes_{band}.md,不得整文件一次性 write——主会话可轮询文件 mtime 观测进度、超时接管有依据、中途失败留部分产出。*引擎侧 write 增量(append)能力落地前,以「每写完一小节即重写该文件当前完整内容」近似;能力落地后改 append。*
52
+ ### 阶段1.5 验证
53
+ - 去重合并→verified.md;盲测机器词表初判→needs_llm 子集交 judge 结构化复核(判态:误路由/无锚/邻族抢单=🔴)。
54
+ ### 阶段2 构造
55
+ - 主会话写 R/I/A1/A2/E/B + 🔴CHECKPOINT + 输出结构 + 让位规则 + 医疗/危机边界。门禁=frontmatter 判态(d1 硬闸零🔴)。
56
+ - **desc 补词与让位分离(V4.1 纪律)**:判别词(触发场景/何时用)进 description 触发区;让位词(本技能转出哪些邻族技能)**只放 B1/A2/related**,禁止把邻族技能名写进 desc 触发词——否则喂词表造成邻族抢单(实测 T12 割肉曾 top=S1)。
57
+ ### 阶段3 链接 → INDEX.md / GLOSSARY.md。
58
+ ### 阶段4 测试
59
+ - test-prompts 每技能3条(应调用/诱饵/跨技能路由+医疗/危机)。判态见 §5.2。
60
+ ### 阶段5 交付
61
+ - DIGEST.md + 安装两工作区 + 四件套 + BOUNDARIES 协议 + SUPPLEMENT。门禁=三闸零🔴 + d8 口径达标 + 交付盲复核 A/B 档。
62
+
63
+ ## 4. 子代理调度与失败协议(同 v3.0 核心)
64
+ 1. 机械层先行(确定性项一律本地脚本,零LLM)。
65
+ 2. LLM judge 只跑语义窄域,单发小批,prompt 自包含+绝对路径+只读。
66
+ 3. 提取/OCR 并发 ≤4-5;小任务主会话直接做。
67
+ 4. 超时(V4.1):判据改为「**最后落盘时间戳距今 >25 分钟**」(替代「无产出 20-30 分钟」,配合 §3 阶段1 分段落盘,主会话轮询 notes 文件 mtime 判定)→询问一次→interrupt 重派1次或换通道→连续2次无产出=该闸 gate-blocked 挂起(不是主会话降级接盘),批量跳过继续,状态机交用户。
68
+ 5. 补闸只补语义窄域;机器层已放行项不返工。
69
+
70
+ ## 5. 验证三闸(判态制)
71
+
72
+ 每闸输出三态:**PASS / 🔴(必修)/ ▲(建议)**。门禁 = 三闸全部零🔴。▲ 由构造者登记、不强制回改;跨版本比较看「🔴数+▲数」单调下降,不做总分微调。
73
+
74
+ ### 5.1 防线3 忠实度核验(硬闸)
75
+ - 机器层(¥0):R 逐字 quote_precheck / 页锚 tv_rcheck / 池id pool_scan / 操作层冒充 defense3_impersonation_scan。命中=🔴 候选。
76
+ - 语义层(最小域):I 层主张↔池条目语义等价 / O 层立场光谱 / 冒充候选行终裁。judge 出必修清单。
77
+ - 复验分级:judge 报 🔴/▲;仅 🔴 需「修复→同 judge 复验」闭环,▲ 登记即可。
78
+
79
+ ### 5.2 盲测路由(硬闸)
80
+ - 机器词表初判 blindtest_lexicon_mock_v1 → needs_llm 子集交 judge 结构化复核。
81
+ - 判态:误路由(top1≠目标)=🔴;邻族抢单/无锚=🔴(除非证明免 LLM 机械 clear 且 top1=目标);判停红线(时点/买卖/医疗/危机)未判停=🔴。
82
+ - **红线词分级(V4.1)**:红线词分两表——「硬指令词」(点位/何时见底/买入价/帮我决定/现在该买该卖…单独出现即判红线)与「主题词」(买/卖/抄底/崩盘…单独出现**不**判红线)。**红线命中一律 needs_llm=True 交语义 judge 终裁,机器不直接 decline**——防框架提问(值不值得下注/够不够便宜)被主题词误拦。
83
+ - **危机词表(V4.1)**:判停危机红线词补「崩盘/要崩/股灾/撤出/全撤/躲一躲/恐慌性清仓/逃」家族(区别于中性「卖」),确保危机类红线可机械命中;decline 答复须含判停速查行 + 替代动作。
84
+
85
+ ### 5.3 达尔文体检(判态,替换 9 维打分)
86
+ - 机器层 machine_precheck_v2 出「逐维 PASS/🔴/▲ + 证据行号」,不打分不求和。
87
+ - 硬闸🔴(命中必修):见 §14 硬闸表。软闸▲(命中登记):见 §14 软闸表。
88
+ - 语义层只对 🔴 候选与语义残差出必修清单;机器已放行项不返工。
89
+ - 结论=A/B/C 档位(§13),不是 0-100 分。
90
+
91
+ ## 6. 打包插件(同 v3.0 §6)
92
+ plugin-build/<pkg>/ → tar 打包 → dsh.cmd plugin add → 补 bundles → 重启生效。
93
+
94
+ ## 7. 踩坑对照表(同 v3.0 §7,节选)
95
+ 子代理大并发卡死→≤4/批+超时;PaddleOCR 乱码→清洗+检测+32B;JS 模板反引号→数组 join 或写 py;judge 长任务卡死→机器层先行+gate-blocked;机器误把引文当 AI 腔→d7 豁免 R 段/引句。
96
+ - **合并/矩阵脚本机器校验自检单(V4.1)**:写合并/解析脚本自带三项——锚归一化(sNNN vs NNN)、格式多容错([技能=S1] / [待定] / 技能=待定…归一化)、引文命中三态(命中/错锚/无锚)。防候选格式不一、错锚漏检这类小 bug 重演。
97
+
98
+ ## 8. 检查清单(判态版)
99
+ - 开跑前:查文本层 / 建 books/<slug>/+PIPELINE_STATE / 定档位 L1/L2.5/L3。
100
+ - 每阶段后:更新 PIPELINE_STATE(阶段/门禁/结论三行)/ 门禁零🔴 / 快照。
101
+ - 交付前:四件套齐全 / 三闸 gates 记录零🔴 / d8 口径达标 / 交付盲复核 A/B 档 / 账本登记(agent数/波次/估算token/实际,无 meter 标「估算」)。
102
+ - **成本即时回填(V4.1)**:每次交付把 cost-meter 实测回填蒸馏报告/讨论记录,不让「估算作废」滞后(本册已按 ¥20.51 回填三处)。
103
+
104
+ ## 9. 版本管理(同 v3.0)
105
+ 无 git 时用 .work/snapshot.py 快照(保留5版);有 git 则 books/ 下 init+commit+revert。
106
+
107
+ ## 10. 档位与 d8 口径
108
+ | 档位 | 适用 | d8 口径 | 单本粗估 |
109
+ |---|---|---|---|
110
+ | L1 速读卡 | 背景书/历史书群 | **允许未测**(涉红线类仍测) | ¥2-5 |
111
+ | L2.5 体系卡(默认) | 承重墙书 | **必须簇抽**=红线类必测1(时点/买卖/医疗/危机/投资路由)+ 主功能簇抽1;抽测样本同时过越界五查 | ¥15-25(实测 epub ~14万字 ≈¥20.5) |
112
+ | L3 旗舰 | 反复读的书 | **全测** test-prompts | ¥10-20(估算) |
113
+
114
+ d8 结论三态:PASS(簇抽/全测通过且越界0)/ 未测(仅 L1)/ 未过(=🔴 硬闸)。抽题覆盖不足在报告如实披露,不虚标。
115
+
116
+ ## 11. 内容忠实度四防线(判态版)
117
+ | 防线 | 内容 | 判态 |
118
+ |---|---|---|
119
+ | 1 原文锚 | 无原文引用不进候选池 | 提取器 PASS/🔴 |
120
+ | 2 转述派生链 | R↔I 配对+操作层◈不冒充 | 构造自查 PASS/🔴 |
121
+ | 3 忠实度核验关 | 机器扫描+语义复核 | 见 §5.1 |
122
+ | 4 目录覆盖 | 每章零贡献须有理由 | PASS/▲ |
123
+
124
+ ## 12. 会话纪律与两态落盘
125
+ ### 12.1 人在场(默认)
126
+ - 一书一会话批次;会话重先开新会话;子代理只回摘要(≤3行)全文落文件。
127
+ - **落盘轻量**:每技能只落一条 gates-<slug>.json(结论+关键命中项内嵌+证据指针);machine-report 详细 JSON 就地保留在技能目录,不往 三闸机器化/ 归档、不同步。
128
+ ### 12.2 无人值守(用户不在场)
129
+ - 主会话主管按 L2.5 推进;门禁照常自动;judge 卡死→gate-blocked 挂起。
130
+ - **落盘全量**:才把 readycheck/machine-report/defense3 全量落盘到 三闸机器化/(同 v3.0 §13),作为自动续跑与事后仲裁依据。
131
+
132
+ ## 13. 三闸 gates 记录(单文件判态版)
133
+
134
+ 每技能一条 gates-<slug>.json,schema 如下(人在场默认形态):
135
+
136
+ {
137
+ "skill": "traversal-risk",
138
+ "档位": "L2.5",
139
+ "fidelity3": {"结论": "PASS", "🔴": 0, "▲": 0, "关键命中": [], "证据": "<技能目录>/quote-precheck.txt"},
140
+ "blindtest": {"结论": "PASS", "🔴": 0, "needs_llm": "3/12", "判停红线": "2/2", "证据": "blindtest-mock-v1.json"},
141
+ "darwin": {"结论": "PASS", "🔴": 0, "▲": 2, "关键命中": ["d4 分段检查点", "d7 回声"], "证据": "machine-report-traversal-risk.json"},
142
+ "d8": {"结论": "PASS", "口径": "簇抽 2/12", "越界": 0},
143
+ "交付盲复核": {"结论": "A 档·可交付", "理由": "零🔴,▲2 已登记"},
144
+ "总体": "过(零🔴)"
145
+ }
146
+
147
+ - 关键命中项**内嵌**进本条记录(不靠指针指向可能被清掉的中间文件);证据文件指针只指向「技能目录内就地保留」的原始产物。
148
+ - 仲裁唯一权威副本 = 本条记录 + 指针指向的证据文件。
149
+
150
+ ## 14. 判态规则(硬闸/软闸,替换 9 维权重表)
151
+
152
+ 判态按**后果**分硬软,不按权重数字(权重表已废除):
153
+
154
+ **硬闸🔴(命中必修)——直接影响可用性/忠实度/安全性:**
155
+ | 项 | 判🔴 条件 |
156
+ |---|---|
157
+ | 防线3 | R 引文逐字不符 / 页锚错 / 池id 悬空 / 操作层冒充(机器命中→judge 终裁) |
158
+ | 盲测 | 误路由 top1≠目标 / 判停失败(时点/买卖/医疗/危机未判停) |
159
+ | d1 结构 | name 非法 / description 缺 何时用+触发词(→不可路由) |
160
+ | d2 工作流 | R/I/E/B 缺段 / 步骤断链(→不可执行) |
161
+ | d5 可执行 | 无 🔴CHECKPOINT / 无输出结构 / 判停速查无正文实现 |
162
+ | d7 架构 | 判停/路由多副本口径漂移 / related_skills 指向不存在 slug |
163
+ | d8 实测 | 越界输出(时点/买卖/站队)/ 显著劣于基线 |
164
+
165
+ **软闸▲(命中登记,不强制回改)——影响打磨度,不影响可用:**
166
+ | 项 | 判▲ 条件 |
167
+ |---|---|
168
+ | d1 行文 | 空话尾巴 / 超长行 >260 字符 |
169
+ | d3 失败模式 | 失败闭环不完整 / 反例不足 |
170
+ | d4 检查点 | 复杂卡缺分段检查点(简单卡单一确认点可过) |
171
+ | d6 资源 | 章节锚缺省(不影响执行) |
172
+ | d9 反例 | 反例黑名单未列(不影响本技能执行) |
173
+
174
+ 门禁=零🔴;▲ 登记进 gates 记录与遗留节;跨版本比较看 🔴/▲ 数单调下降。
175
+
176
+ > **d6/d7 related_skills 校验口径(V4.1 附注)**:machine_precheck_v2 扫描范围 = 投资蒸馏树内 slug ∪ 宿主 skills 目录(v4.1 补丁已并入宿主目录扫描,彻底消除「引宿主 slug 被判实缺」占位噪音);跨家族/宿主引用在注释带「投资家族」字样仅作可读性约定,**不再是校验依赖**。
177
+
178
+ ## 15. 与 v3.0 的替换对照
179
+ | v3.0 | V4.0 | 作用保留 |
180
+ |---|---|---|
181
+ | §14 9维100分加权评分 | §14 硬闸/软闸判态 | triage/定位/比较/门禁全保留;砍掉求和排序与易错权重 |
182
+ | §15.2 三套分数并行 | §0.2 一条链+交付盲复核(A/B/C档) | 零成本初检+语义兜底+独立复核都在;砍掉三分数并存与口径差解释 |
183
+ | §13 默认全量JSON落盘 | §12 两态开关(人在场单文件/无人值守全量) | 审计靠「结论+内嵌命中+指针」;无人值守仍全量 |
184
+ | d8 每技能全测(权重23) | §10 簇抽默认(红线1+主功能1)+L3全测 | 真实调用验证+红线抓取保留(越界五查跟抽题走,不并入盲测) |
185
+ | 对外 0-100 数字分 | A/B/C 档位(B 档数字分按需) | 可交付裁决保留;具体数字为按需项 |
186
+
187
+ ## 16. V4.1 修订记录(相对 V4.0,R1–R8 全采纳)
188
+ | # | 修订项 | 正文落点 |
189
+ |---|---|---|
190
+ | R1 | 提取器提示词模板作为阶段1 附件(格式统一+引文硬纪律) | §3 阶段1 + 附件 `三闸机器化/提取器提示词模板-v4.1.md` |
191
+ | R2 | d6/d7 校验口径文档化(脚本扫宿主目录为主、注释约定为辅) | §14 附注 |
192
+ | R3 | 红线词分级 + 红线命中 needs_llm 语义终裁(防框架提问误拒)+ 危机词表扩充 | §5.2 |
193
+ | R4 | desc 补词与让位分离纪律 | §3 阶段2 |
194
+ | R5 | 提取代理分段落盘 + 超时判据改「最后落盘时间戳距今>25 分钟」 | §3 阶段1 + §4 |
195
+ | R6 | 合并/矩阵脚本「机器校验自检单」成文 | §7 |
196
+ | R7 | 成本基准校准:L2.5 epub ~14万字 ≈¥20.5(估算法不再加安全倍数) | §0.3 + §10 |
197
+ | R8 | 成本即时回填制度 | §8 |
198
+
199
+ > 详细依据见 `投资蒸馏/三闸机器化/手册-v4.1-修订建议(周期估值与人性实测).md`。**R5 的「分段落盘」引擎侧 write 增量(append)能力未落地前,以「每小节重写当前完整文件」近似,能力落地后升级。**
200
+
201
+ ---
202
+
203
+ ## 17. V4.2 增补:工程纪律与装机/上架(2026-09-12 实战固化 · 9 条)
204
+
205
+ > **为什么有这一节**:2026-09-12 的技能库改造链(去重收口 → 装机 → 封存回退 → 口径闭环 → BH-free 恢复)用一整天踩坑换出 9 条**工程纪律**。它们此前只散落在复盘与学习日志里,**不进制就会重复踩**(实证:同一天在同一个坑上踩了 3 次)。以下 9 条**对每一次蒸馏与每一次技能库改动强制生效**。
206
+ > 依据:`输出/今日会话复盘-2026-09-12.md` §五/§六/§九 | `输出/口径登记单-2026-09-12.md` | `deepseek harness/MEMORY/learnings.md` 第 7/8/9 类 | `输出/防坑体系方案-2026-09-12.md`。
207
+
208
+ ### 17.1 装机/上架专节(**装机不是拷文件**)
209
+
210
+ **装机四件套(缺一条即运行期出错)**:
211
+ 1. **引用落地**——把新件的 `related_skills`/正文让位句改成**宿主实际存在的 slug**(否则一装就产生新死链);
212
+ 2. **承接侧回改**——回改所有**指向它**的既有技能(让位句/边界句/编排表);
213
+ 3. **硬边界去重表**——写清"谁答什么"(例:谁答"够不够便宜"、谁答"有没有资格接");
214
+ 4. **计数文档同步**——所有写着"N 个活动技能"的文档一次性改齐。
215
+
216
+ **三前置(改运行环境前必做)**:① **逐字节快照**(如 `skills-snapshot-<日期>`);② **先 diff 出"会动哪些文件"** 再动手;③ **留"装机后"副本**(回退≠销毁)。
217
+
218
+ **封存回退标准动作**:`封存装机后完整状态 → 用装机前快照点对点覆盖 → 逐文件 MD5 与快照比对(差异 0/多余 0)→ 引擎加载器实测件数 → 复跑四道验收闸`。**只做①(放本体)不做②(覆盖承接侧)会重新产生死链;只撤一半同样留死链 —— 二者必须成对。**
219
+
220
+ ### 17.2 运行期可见性硬闸(**"写进去了" ≠ "运行期生效"**)
221
+
222
+ 凡新增/修订技能内容,**必须用引擎自己的加载器实测**,不得只查文件:
223
+ `件数` | `唯一名 N/N` | `解析告警 0` | `get()` 可取正文 | `description` 在运行期可见(**只有 description 对路由可见**;`invest.md` 等同事文件在运行期是**隐形**的,必须由 `SKILL.md` 留指针)。
224
+ 工具:`engine_skill_probe.mjs`/`engine_desc_probe.mjs`/`engine_desc_dump.mjs`/`skill_probe_generic.mjs`(可指定任意技能根)。
225
+
226
+ ### 17.3 批量改写脚本纪律(**脚本不是事务,但必须当事务写**)
227
+
228
+ - **幂等**:写入前判断"新文本是否已在";或让 old 串在替换后不再命中。
229
+ - **全有全无**:**先在内存里全部应用 → 跑完全部断言 → 才统一写盘**;任一断言失败即**整批拒写**(不得留半批写入)。
230
+ - **改完必跑**:`py_compile`(全部改动脚本)+ **YAML 实解析** + 口径检查;**列为交付前检查单固定项**。
231
+ - **限定作用域**:批量替换**禁止作用于 judge/证据文件**(改写证据文件=篡改核查记录)。
232
+
233
+ ### 17.4 口径变更登记单(**口径可以改,但不许悄悄改**)
234
+
235
+ **"口径差"先分三类性质,再谈修**:① **真口径分歧**(同一对象、不同算法给不同值);② **测量对象未声明**(同一算法、测了不同目录的同名文件);③ **证据时点不一致**(同一文件、修复前后的两个读数)。**不先分类就会把"没问题的东西"当缺陷修。**
236
+ 任何"检查脚本词表/期望值/度量方式"的改动都要**登记**+**逐行复核被改判项**。**取值一律用真解析器**(引擎/YAML),**正则只可用于诊断**;凡自写度量,必须跑一次"**全库 × 多口径对照矩阵**"暴露适用范围。
237
+ **模板**(登记到 `输出/口径登记单-<日期>.md`):`口径名 / 权威取值方式 / 出处 / 适用范围 / 已知偏差 / 弃用的旧口径与失效件数 / 生效日期`。
238
+
239
+ ### 17.5 盲测工装规范(**判官的报告先怀疑工装**)
240
+
241
+ - 喂给判官的目录**必须 `description` 全文、绝不截断**(曾把 desc 截到 260 字 → 判官读不到尾部条款 → 报了 3 条假"未收敛")。
242
+ - 判官输入**只给"运行时可见信息"**;**禁读**测试集/期望答案/源稿树/SKILL 正文。
243
+ - 判官报告里凡出现**"截断/不可核/看不到后半段"** → **先修工装再采信结论**;并区分"设计缺陷"与"工装缺陷",后者留痕。
244
+ - **探针的期望表必须与"当前运行态"同批更新**(状态变了而期望没变 → 每次自检都报假告警)。
245
+
246
+ ### 17.6 独立验证分层(四层,逐层加严)
247
+
248
+ `机器层(¥0,确定性)` → `语义 judge(防线3)` → **`路由盲测(desc 全文)`** → `边界重复度审计`。
249
+ **凡调过 `description`/边界条款/编排表,路由盲测为必跑项**;**改了触发词或让位句后,必须**重跑**(旧报告即刻过期)。
250
+
251
+ ### 17.7 同族"词面重叠"必须写**双向排除句**
252
+
253
+ 同一技能族内 desc 词面重合的,**两侧都要写**"谁答度量/谁答资格与动作/谁答心法姿态",并加**主诉判别句**(例:情绪/睡眠类主诉→心理件;纯动作主诉→纪律件;同现先定纪律再执行)。
254
+ **做法**:先用路由互斥扫描找"共现词多、无排除句"的对,**只给该分**的对补句,补完**复扫+复跑盲测**。
255
+
256
+ ### 17.8 收尾清单固定项(每本书/每批改动都要跑)
257
+
258
+ `final_acceptance`(四道验收闸)+ `yaml_check_all`(全库 frontmatter)+ `check_md_tables`(表格完整性)+ `check_script_sync`(脚本一致)+ `engine_*`(引擎口径可见性)+ **公平回归**(改前/改后零新增**扣分** fail)+ **快照刷新** + **`learnings.md` 追加**。
259
+
260
+ > ⚠️ **公平回归必须对齐路径形状**:机器层 `d6-c2/c3/c5` 靠 `skill_path` 里的 `skills` 段反推书册根——基线放进**不含 `skills` 段**的备份目录会**造出假性新增 fail**。基线要暂存到 `<tmp>/skills/<slug>/SKILL.md` 形状再跑。
261
+ > ⚠️ **fail 要分"扣分 fail"与"信息性 fail"**:`status=fail` 但 `deduct=0` 属信息性登记,**不算回归**。
262
+
263
+ ### 17.9 收尾脚本自带 UTF-8 输出保护(**假报警会让人误判"失败"**)
264
+
265
+ Python 脚本在 **GBK 控制台**下打印 `✔` 等字符会抛 `UnicodeEncodeError`,**退出码非 0 但前面所有检查其实已通过** → 属**假报警**。纪律:① 脚本内建 UTF-8 输出保护,**或**在收尾清单里写明先设 `$env:PYTHONIOENCODING='utf-8'`;② 凡"退出码非 0",先读输出判断是**真失败**还是**编码假报警**。
266
+ (同族:**读中文文件一律用 read 工具**,不要用 shell 直接打印 —— PowerShell 输出 UTF-8 内容会变 GBK 乱码。)
267
+
268
+ > **闭环规则(防手册腐烂)**:**每踩一个新坑,必须同批做两件事** —— ① 进《避坑手册》(现象/触发场景/立即处置/预防规则/自检命令/证据锚);② **可脚本化的同批加进收尾门禁**。否则不算处理完。
269
+
270
+ ---
271
+
272
+ ## 18. V4.3 增补:防坑体系与门禁(2026-09-13 实战固化 · 37 条 + 三件门禁)
273
+
274
+ > **定位**:§17 是"工程纪律 9 条",§18 是"**防坑体系与门禁**"。二者并立、不互相替代;**与 §0–§17 同等强制**。
275
+ > **为什么要有它**:2026-09-12~13 两天里,同一个人(AI)在 **37 个**不同的点上重复踩坑——教训写在哪里都不如写进**执行标准+可运行门禁**。
276
+
277
+ ### 18.1 门禁三件套(**命令级强制,非建议**)
278
+
279
+ | 门禁 | 命令 | 覆盖 | 退出码语义 |
280
+ |---|---|---|---|
281
+ | 开工前 | `python tools\preflight.py` | ①四道验收闸 ②YAML 全库(两线)③引擎加载器实测(件数/唯名/告警/封存态)④**mtime 巡检**(有没有被别的会话动过) | `0`=可开工;非 0=**先处理再开工** |
282
+ | 改后 | `python tools\postflight.py` | ①YAML ②desc ≤1024(官方解析器)**②-b 余量告警(<100 字,信息性不阻断)** ③表格完整性 ④脚本同步(插件↔权威 4/0/0)**④-b 打包产物新鲜度(解包级,发行类闸)** ⑤**机器层零新增 fail**(对基线 diff)⑥`py_compile` 全脚本 | `0`=**才算改完**;非 0=不得宣布完成 |
283
+ | 门禁自证 | `python tools\gate_selftest.py` | 三份"故意坏掉"的样本必须被检出、一份正样本必须放行 | `0`=门禁有效;非 0=**门禁本身要修** |
284
+ | 手册对账 | `python tools\pitfall_audit.py --check` | 条目 6 字段齐/**只读命令深跑(逐条比期望退出码)**/无命令条目=0/引用脚本全存在 | `0`=手册与工装一致;非 0=手册或工装需处置 |
285
+
286
+ **三防内建**:UTF-8 输出保护(消除"GBK 打印 ✔ 抛异常 → 假非零退出")|只读不写业务文件(唯一写入=首次基线)|统一 `期望/实测/判定` 格式。
287
+ **四不跑**(`pitfall_audit --check` 的分派):**写入型命令不自动跑**(列出并给理由)|**对照型命令不判 pass/fail**(`P-11`…`P-17` 是"证明坑存在"的实验,`P-13`/`P-16` **故意非零退出**)|**扫描器不自检**|**判官/证据文件不批量改**(`P-22`)。
288
+
289
+ ### 18.2 每本书的固定动作
290
+
291
+ - **开工三步**:① 读全局 AGENTS + 主 MEMORY ② **跑 `preflight.py`** ③ 看讨论记录末与 `PIPELINE_STATE`。
292
+ - **收尾必跑**:`postflight.py` **全绿**(含 ②-b 余量告警与 ④-b 打包新鲜度);任一红项不得写"已验证/已交付"。
293
+
294
+ ### 18.3 《蒸馏工程避坑手册》(37 条)
295
+
296
+ 全文(含每条 6 字段:现象/触发场景/立即处置/预防规则/自检命令/证据锚):
297
+ `蒸馏工作区\蒸馏工程避坑手册.md`。**37 条一句话索引**(正文 23 + 附录 A 14):
298
+
299
+ **P-01…P-23(工程与流程 / 环境 / 装机 / 元规则)**
300
+ P-01 "去重"只移文件不合并内容 → 让位路由指向不可加载技能 | P-02 `description` 内层写裸 ASCII 引号 → YAML 解析失败 | P-03 机器层基线路径缺 `.dsh\skills` 两段 → 假性新增 fail | P-04 机器工具口径缺陷(宿主技能恒 fail/原稿副本当实存) | P-05 审计正则漏族名+订正注记旧号二次计入 → 池编号假阳性 | P-06 把"看起来像缺陷"当缺陷 | P-07 批量脚本不幂等+失败留半批 | P-08 核验锚串字形不一致(全角/半角)→ 假阴性 | P-09 盲测工装截断被测字段 → 判官误报未收敛 | P-10 自写正则当度量 → 长度高估 | P-11 `$host` 是 PowerShell 只读变量 | P-12 pwsh 不支持 heredoc | P-13 `python -c` 带引号被吞 → 一律写脚本文件 | P-14 `Select-Object -First N` 截断上游 → 假 `exit 1` | P-15 `Get-Content` 读中文路径不牢 | P-16 GBK 控制台打印 `✔` 抛异常 → 假报警 | P-17 pwsh 打印 UTF-8 中文文件成乱码 | P-18 `Start-Process -ArgumentList` 引号被二次解析 | P-19 按命令行正则杀进程会误杀自己 | P-20 装机不是拷贝,是**四件套** | P-21 装机类改动缺回退点(快照+diff+MD5 复验) | P-22 批量替换未限定作用域 → 误改 judge/证据文件 | P-23 **元规则:工装伪影优先假设**(判官说"截断/不可核",先修工装)
301
+
302
+ **A-01…A-14(2026-09-13 新增)**
303
+ A-01 "某条线专用"的硬编码路径=工具报废 | A-02 扫描仪器的"空集陷阱"(只从标记段取词 → 无该段的件永不相配) | A-03 边界声明是**四态**不是两态(含 `共让位→X`) | A-04 判据词表漏一种写法=整族假警报 | A-05 共享词面有相反语义(共同认领 vs 共同否定) | A-06 **基线/工具副本都必须与正本同路径形状同深度** | A-07 守卫断言必须按**数据形态**分派(**含"行尾风格"**) | A-08 注释里的"惯例"没登记=**悬空口径**(等于免检) | A-09 补让位句必须与该件**既有触发词**逐词比对 | A-10 **改权威工具 ⇒ 同批同步副本+重建打包产物+双门复验** | **A-11 交判官前必须重新导出路由目录 + 目录自带「导出时刻」**(旧目录 ⇒ 2 条假阴性) | **A-12 复测期间不得在同一工作区并行试跑**(产物污染"完全独立"的主张) | **A-13 技能正文的运行期可见性:spill 截断省略的是「中段」**(口径 K-20;本库恰好 3 件 >50 KB) | **A-14 自报 vs 引擎观测:路由统计一律以引擎观测为准**(口径 K-21)
304
+
305
+ **§九 发行类(原 §7.3「待成条 9 项」的正式归属 · 2026-09-13 拍板)**
306
+ 判据="**这个坑会不会在收件人那里复现**":会 → 发行类。九项已逐项给"状态+归属+验收";三条新纪律:**① 版本联动**(改权威技能/工具 ⇒ `package.json` 版本同批升位+按新版本重建两个 tgz,**旧版本号文件保留供回溯**)**② 新鲜度入闸**(`postflight` ④-b 直接调解包级校验器;"权威改了但 tgz 没重打"从此是一次红灯)**③ 三方对齐**(权威 MD5 == 插件副本 MD5 == tgz 解包后 MD5)。
307
+ **§十 交付与台账纪律**:交付数字的**必填字段**(测的是哪棵树/口径编号/时刻)+ 台账声明的**三件套**(命令/输出/时刻)。
308
+
309
+ ### 18.4 闭环规则(防手册腐烂)
310
+
311
+ **每踩一个新坑,必须同批做两件事**:① 进《蒸馏工程避坑手册》(带**可粘贴的自检命令**与证据锚);② **可脚本化的同批加进 `tools\postflight.py`**。**只写进聊天或只写进 learnings 不算处理完。**
312
+ 对账:`python tools\pitfall_audit.py --check`(**已落地**;手册 §8.7)——扫描条目输出"6 字段齐否/有命令的/没命令的",并对**只读型**命令**真跑并比对期望退出码**(写入型列出跳过、对照型明确标注无 pass/fail)。
313
+
314
+ ### 18.5 写入型自检命令禁令(2026-09-13 事故固化成条 · 口径 V-11)
315
+
316
+ **任何"自检/验证"动作都不得覆盖交付文档**。凡脚本会写盘:① 输出路径必须**显式传参**,不得写死在脚本里;
317
+ ② 运行前先确认目标路径**不是** `输出/` 下的交付件;③ 已发生覆盖的,按"备份→恢复→改工具→登记"四步处理。
318
+ > 实例(真实事故):`machine_scan_edu.py` 原版写死输出路径且无条件写盘,一次"验证命令能否运行"把
319
+ > `输出/机器层-教育线-全量-2026-09-13.md` 从 7,425 B 覆盖成 3,523 B;已恢复并改为**必须显式传输出路径**,
320
+ > 且**覆盖前自动留底**到 `.work\overwrite-backup\`。
321
+ > **V-11 的第二半(时效要求)**:凡"以快照为唯一输入的判定"(把路由目录交给盲测判官),**快照必须在判定时刻之后重新生成**,且**目录必须自带「导出时刻」**——旧目录曾让判官产生 **2 条假阴性**(`A-11`)。
322
+
323
+ ### 18.6 与《全量执行单》的挂接
324
+
325
+ 《V3.1 全量执行单》"收尾固定项"已增补 **第 34–36 项**:34=`preflight` 开工前全绿;35=`postflight` 改后全绿(含 ②-b/④-b);36=门禁自证 `gate_selftest`(三坏全拦、一好放行)。
326
+
327
+ *蒸馏 V4.2 增补(§17)· 2026-09-12 · 权威执行标准的工程纪律部分:由"技能库改造链 + 装机/封存 + 口径闭环"实战固化 9 条。**与 §0–§16 同等强制**。*
328
+ *蒸馏 V4.1(升级版)· 2026-09-12 · 权威执行标准(用户拍板切换),基于 V4.0 +《周期、估值与人性》实测复盘 R1–R8;V4.0 转为历史档。*
329
+ *蒸馏 V4.3 增补(§18)· 2026-09-13 · **防坑体系与门禁**:四件门禁脚本(preflight/postflight/gate_selftest/**pitfall_audit --check**)+《蒸馏工程避坑手册》**37 条**+**§九 发行类**+**§十 交付与台账纪律**+闭环规则+写入型自检禁令(**V-11**)+时效要求。**与 §0–§17 同等强制**。*
330
+ *蒸馏 V4.3 补记(§18)· 2026-09-13 收口轮 · 新增 **A-11…A-14**(判官目录时效/复测并行污染/spill 只留首尾/自报 vs 引擎观测)、`postflight` 增 **②-b 余量告警**与 **④-b 打包产物新鲜度**、常驻工具本体加 **UTF-8 保护**(甲-A5 严格版)、`pitfall_audit --check` **深跑只读命令**。*
331
+
332
+ ## 19. V4.4 增补:判官工作流 v2 与副本治理(2026-09-13 午后 · 教育线批9–批13+W0 实战固化)
333
+
334
+ > 背景:教育线一天内连走批9→批13 五轮 desc 加固+ED10–ED14 五轮独立判官复判+「彻底方案 v2」的 W0(副本治理)/W1-a(规则清单机械抽取)。本节把**可泛化的工程经验**固化进手册;逐坑细节与自检命令见《蒸馏工程避坑手册》**v1.2(46 条)**的 A-15…A-23(§18.3 的续篇),两文互为表里:手册管"坑",本节管"流程"。
335
+
336
+ ### 19.1 判官/盲测工作流 v2(升级 §5.2/§17.5)
337
+
338
+ 1. **判官输入四自证**:① 导出时刻 ② 技能根最新 mtime(导出瞬间实测)③ 件数 ④ **批次标签+本批改动清单**(坑 A-20)。缺任一 ⇒ 判官按「不可自证」处置,相关结论**降级**;①②③由 `engine_desc_catalog.mjs` 三行头落实,④为其工装待办(§9.4 发-02)。
339
+ 2. **判官判据四类**(报告必须按类计数):**明文闭式**/**半闭**(有写法但判据不全,如"同一行为词"捕不到真近义)/**判据不可执行**(占位符、未绑定变量)/**关键事实不可自证**。
340
+ 3. **计数三档并报**(主判据/窄口径/宽口径),**跨轮计数不可直接相减**——判官判据每轮都在扩类,🔴 数变化可能是"存量升格"而非"回归";**归因纪律**:每轮 🔴 逐条归因到批次(本批引入/存量升格/判据扩类),禁止笼统报"变好/变坏"。
341
+ 4. **A-11 元教训(升级版)**:判官每说一句"我无法验证 X"=一张待办——**把 X 变成他手里就有的东西**(自证字段进工具输出,不进对判官的嘱托)。
342
+ 5. **迭代边界(停线/重启规则)**:绝对 🔴 递减但靶心逐轮漂移 ⇒ 边际收益递减,且每批自带守卫自伤风险。停线=把剩余缺口**登记为已知边界**不再追打;重启条件显式登记(如"判官报 🔴 回升"),**触发后先归因再判是否真回归**(判据扩类不算回归),不得自行改读规则、交用户拍板。
343
+ 6. **结构性问题"挪动"优先于"加句"**:同一条规则散在 N 件 desc ⇒ 就地补句既耗预算也治不了根;正确方向=判据层权威件(如 `dev-foundation-theory`)或路由权威件(W1/W3 的规则清单与第 23 件技能)。
344
+
345
+ ### 19.2 desc 路由工程铁律(六条;详条见避坑手册 A-09/A-21/A-22/A-23)
346
+
347
+ 1. **词面碰撞检查前置**:新增归属句前先跑双仪器+逐词比对该件既有触发词;**同词反向豁免句与主句同批落地**(拆两批=中间态硬矛盾)。
348
+ 2. **禁占位符**:desc 里每个"→ 某件"的落点必须**逐字可寻址**;无件认领 ⇒ 点名列档+显式程序(追问 → 兜底),或登记**有意不覆盖**(B-2 口径)。
349
+ 3. **优先级句必须成对**出现或显式声明覆盖域("两范围不相交"要写明)——单边"本句优先"=半冲突。
350
+ 4. **加句三问**:有预算吗(余 <100 必须先 replace 腾位,腾掉的原句归档不丢)?是结构问题吗(挪动优先)?归属对吗(判据层/路由权威/本件)?
351
+ 5. **desc 一律单行化**(单引号包裹):块标量会被最弱的消费方解析器吃成字面 `|`(A-15/A-16);新蒸馏的技能**从第一天**就按单行 desc 书写。
352
+ 6. **规则句必须可提取**:句式恒为「条件 → \`件名\`」;每批改 desc 同批产出/更新**路由规则清单**(W1 结构:`id / from / to / condition / priority / owner / source_quote` 逐字引用)——desc 是给人看的入口,清单是可机读的权威底账。
353
+
354
+ ### 19.3 发行与副本治理(四层副本模型;升级 §6/§9/§17.1)
355
+
356
+ 1. **四层副本模型**:源根(权威)→ 构建目录 → 安装实体 → 工作区装机。"改完源根"只是四分之一;教育线 W0 实测:源根走 13 轮硬化而 3 副本停在 11 天前。
357
+ 2. **版本戳+副本新鲜度闸**:源根逐件逐文件 sha256 成戳(`tools\make_edu_root_stamp.py`);登记副本逐一比对(`tools\check_copy_freshness.py`,缺/陈旧/白名单外多余即红)。**新副本接入=新闸登记**,且闸必须在第一次真写入上使用(A-17/A-19)。
358
+ 3. **同步器四步(守卫模板)**:写前 dry-run → 落盘 → 幂等复跑(必须 0 写盘)→ **独立闸复跑**。幂等只证"重复性"不证"正确性"——写错目标层时它会在错误宇宙里自洽(自伤 #6);误写内容**移隔离区非删除**。
359
+ 4. **宣称三层,一词不混**:**落盘**(文件已写+闸绿)/**载入**(用消费方真实代码路径端到端注册实测)/**在役**(宿主重扫实证)。不得自行重启引擎/宿主等在役层刷新。
360
+ 5. **与发行链的关系**:§6/§9/§17.1 的"版本联动+新鲜度入闸+三方对齐"管**送出去的**(tgz);本节管**跑起来的**(装机副本)。两链同闸哲学:**权威改了,任何下游没跟上都是红灯**。
361
+
362
+ ### 19.4 V4.4 修订记录
363
+
364
+ - **R1** 判官输入四自证+判据四类+计数三档并报+归因纪律(来源 ED10–ED14 五轮实测)。
365
+ - **R2** 停线/重启规则与"挪动优先"(来源 ED13/ED14 复盘与停线声明)。
366
+ - **R3** desc 路由六铁律+规则清单化(来源批9–批13+W1-a;A-21 检测器首跑即抓到第 2 处占位符 `dev-<年龄段>`=`dev-methods-check`,W2 批清零)。
367
+ - **R4** 副本治理四层模型+版本戳+新鲜度闸+同步器四步(来源 W0,含自伤 #6 全过程)。
368
+ - **R5** 宣称三层(落盘/载入/在役)。
369
+ - **R6** **包版本对齐规则**:本版起包版本 minor 对齐手册增补号——4.2.2 → **4.4.0**(§18 的 V4.3 内容当时并入 4.2.2 发行,4.3.x 跳过不用;两个旧版本 tgz 保留供回溯,A-10 口径不变)。
370
+ - **R7** H1 标题 V4.1 → V4.4(此前已落后 §17/§18 两轮增补)。
371
+
372
+ *蒸馏 V4.4 增补(§19)· 2026-09-13 午后 · **判官工作流 v2 与副本治理**:判官输入四自证/判据四类/三档并报+归因/停线重启规则/desc 路由六铁律+规则清单化/四层副本模型+版本戳+新鲜度闸+同步器四步/宣称三层。**与 §0–§18 同等强制**。*
373
+
374
+ ## 20. V4.5 增补:底账同代、判官输入工程与闸的升格秩序(2026-09-13 晚 · 教育线批14–批16+W5/ED15 实战固化)
375
+
376
+ > 背景:「彻底方案 v2」后半程——批14(11 件 24 处瘦身+A-21 清零)→批15(术语判据表 T-1…T-9)→批16(postflight ⑧ 四闸挂入)→W5(双仪器复扫+在役层实测+ED15 终判 **🔴7→0,停线维持**)。本节把当天实证的六类可泛化经验固化为强制条款;守卫自伤 #7/#8、判官三次派发链条均已如实登记(《避坑手册》A-07 第 8 形态等)。
377
+
378
+ ### 20.1 底账同代铁律(R8)
379
+ - 任何从源根**机械派生**的底账(规则清单、抽取 json、路由目录、缓存表)必须与源根**同批同代**:源根 desc 一变 ⇒ 同批重派生+重校验;跨批不重派=漂移隐患。
380
+ - 底账漂移**必须由独立闸抓、不能靠手气**:判据="底账中每条引用(quote/锚点)仍是源根的逐字子串"。教育线实证:批14 改 desc 后未重抽,validator 首跑 **44/66 红**当场抓住,同批重建后 **66/66** 回绿。
381
+ - 已固化:postflight ⑧ 第 4 闸 `rules-v1 底账同代`(66/66 quote 子串)——凡同类底账一律照此挂闸,闸红即"清单落后于源根",先重派生再收尾。
382
+
383
+ ### 20.2 守卫与脚本纪律(R9 = A-07 第 8 形态)
384
+ - 守卫断言必须**按数据形态分派**;第 8 形态:**新串与文件既有文本同文**(replace 的目标文本恰好等于该文件另一处既有文本)⇒ 命中态断言写「todo=旧1+新1/done=旧0+新2」,禁用"新串必须唯一"(批15 dev-young-adult「18-34 岁」与尾句同文实证)。
385
+ - **改任何权威工具/脚本,先语法自检再运行**:`.mjs` 先 `node --check`、`.py` 先 `py_compile`;手工编辑增删块导致的收括号丢失由语法自检当场拦(批16 吞括号实证,今日自伤 #8)。
386
+
387
+ ### 20.3 闸的升格秩序:先平账、后拧闸、再自证(R10)
388
+ 1. 新只读检查工装先**独立跑绿**(双根全净,如 A-21 占位符扫描双根 22+44 件);
389
+ 2. 再挂入 postflight 为 rc=0 闸(⑧ 教育线四闸:副本新鲜度 A-17/desc 占位符 A-21/引擎探针 22/22/**rules-v1 底账同代**);
390
+ 3. `gate_selftest` 复证门禁自身有效性不受影响(三坏全拦、一好放行);
391
+ 4. **闸数与文档计数同批同步**:postflight 结论行(现为"15 项检查·含⑧教育线四闸")+《避坑手册》§8.2 计数(现为"7 组 15 项")——改闸不改文档=悬空口径。
392
+
393
+ ### 20.4 判官输入工程(R11,ED15 第五节全盘固化)
394
+ - **载荷内联**:件名必带正文(desc/quote 逐字全文);只有件名+字数=**主会话输入准备失误**(ED15 ▲-1/▲-2 实证:判官拒臆测、拒以件名推断语义——拒判是纪律的正确执行,不是故障)。
395
+ - **派发前自检闸**(dispatcher 逐项打勾后才能发出):件名↔正文成对率 100%;哈希目标**绝对路径**在包内;判据表(或本片相关子集)在包内;上轮基线摘要 ≤1KB 且标注"仅供对照,不作预期";判官特权清单明列(建议:Get-FileHash 1 次+源根 SKILL.md Get-Item(mtime) 1 次)。
396
+ - **分段落盘强制**:判官第一条动作=把报告骨架(章节标题+每节一句结论)落盘,此后每完成一节追加落盘;失败模式从"全有全无"降为"至多丢一节"。
397
+ - **机械层 stdout 前置**:js-yaml 解析、validator 输出、引擎探针计数随包附上——判官从"推导者"改回"裁决者"(只做抽查+语义层),轮次预算降一个量级。
398
+ - **预算与分片**:提示内写明工具调用 ≤N、墙钟上限、70% 预算即停推导落盘已核部分;**输入包 ≤12KB/片**,超出即分片(语义判官×2+链与规则判官×1,主会话拼接各片报告)。
399
+ - **中断处置序**:长跑无落盘 → 发"分段落盘"定向推进 → 仍无产出 → interrupt → 复派;**复派精简的对象是输入包,不是任务简报**(ED15 二次派发实证:简报短了输入没短=重新付出全量成本)。
400
+ - **分栏记账**:判官输入链 ▲ 与被检对象 desc 层 ▲ **分栏登记**,不得混入同一栏目污染路由质量台账(ED15 ▲7 条中 0 条归因技能库本体)。
401
+
402
+ ### 20.5 时效链与哈希互证(R12,发-05 定案)
403
+ - 判官输入目录头自带七行:批次标签+本批改动+mtime 采集范围+防护声明+时效结论+件数双源+**源根版本戳摘要 sha256[:16]**(判官可 certutil/Get-FileHash 自行重算=**非时钟同源**第二来源;ED15 判官侧首测通过,`4390487c9e9f1dcf` 三源一致)。
404
+ - **边界声明(ED15 精确化)**:哈希补的是**数值转录层**第二来源,**不补时间真值层**(若采集 mtime 时出错,哈希会忠实锁定错误值)——每份判官报告继续携带此边界,直至补独立时间源(授权判官对源根 stat 一次即闭合)。
405
+ - 目录头加**批次溯源指针行**:现行目录文件名+其哈希+上一版目录文件名+其哈希——判官可追溯而不塞全史(解 ED15 ▲-6"累计改动未复述")。
406
+
407
+ ### 20.6 在役层三层排障序(R13)
408
+ - 症状(列表显示旧值/缺件/`|`)→ 按层定位,**禁止未定位先改文件**:①**磁盘态**(副本版本号、件数、desc 格式、mtime)→②**载入态**(全新 require+`apply(ctx)` 实测注册计数与 desc 内容)→③**在役态**(运行中进程的注册快照)。
409
+ - 磁盘态新+载入态新+仅运行进程旧 ⇒ **零文件改动**,处置=进程重载(会话/应用重启);实证:批14 后本会话目录仍显 13 件 `|`+缺 6 件,全新加载 22/22 全量且含批15 修复——"复发"多数是快照陈旧而非文件陈旧。
410
+
411
+ ### 20.7 并发会话共享文件纪律(R14)
412
+ - 多会话并行时共享长日志(讨论记录/台账)会互相撞 `edit`(file changed since read):**用 read 工具刷新末尾后立即定点追加**,锚点用当前末行原文;撞车即重读重试;**禁止 read(limit)+整体 write**(原有纪律不变)。
413
+ - 发现并行会话痕迹(尾部出现陌生小节)→ 在台账**交叉登记**其范围与前置条件(如:并行会话已完成第 23 件内容层、其装机前置="W5(ED15)收尾"),避免重复劳动与互踩。
414
+
415
+ ### 20.8 V4.5 修订记录
416
+ - **R8** 底账同代铁律+postflight ⑧ 四闸(11→15 项检查)。
417
+ - **R9** 守卫断言第 8 形态(新串与既有文本同文)+"改工具先语法自检"。
418
+ - **R10** 闸的升格秩序:先平账、后拧闸、再自证、计数同批同步。
419
+ - **R11** 判官输入工程八条:载荷内联/派发前自检闸/分段落盘强制/机械层 stdout 前置/预算与 ≤12KB 分片/中断处置序/复派精简输入包/分栏记账。
420
+ - **R12** 哈希互证入目录头+时效边界声明(哈希不补时间真值层)+批次溯源指针行。
421
+ - **R13** 在役层三层排障序(磁盘态→载入态→在役态;快照陈旧零文件改动)。
422
+ - **R14** 并发会话共享文件纪律(read 刷新后定点追加+交叉登记)。
423
+ - **R15** 包版本对齐(R6 规则):4.4.0 → **4.5.0**(双 tgz 同批重打包+双门复验)。
424
+ - **R16** H1 标题 V4.4 → V4.5。
425
+ - **候选修正(待用户拍板,未生效)**:停线规则①加归因限定——"判官报 🔴 回升**且含当批引入项**"才触发重启;纯判据扩类/存量升格记台账不触发(ED15 报告 §四建议)。
426
+
427
+ ## 21. V4.6 增补:强制门禁 —— 把"按手册执行"从自觉变成命令级拦截(2026-09-13 用户指令固化)
428
+
429
+ > **为什么有这一节**:2026-09-13 ADHD 专业线实战中,执行者**未读本手册全文(只看了 AGENTS 注入摘要)、未读《蒸馏工程避坑手册》46 条、自造提取器格式(官方模板一直在却没用)、跳过阶段0/1.5/4/5、未跑任何 ¥0 机器层脚本、误用已废除的 9 维打分口径**,导致三轮返工、且构造层的 over-claim 已流入输出。用户指令原话:**「做成门禁,让偷懒跑不通」**。
430
+ > 本节与 §0–§20 **同等强制**;它管的不是"知识",是**流程合规**。
431
+
432
+ ### 21.1 开工强制闸(命令级 · 不可跳过)
433
+
434
+ | 闸 | 命令 | 拦截什么(全部机器可校) | 退出码语义 |
435
+ |---|---|---|---|
436
+ | **开工自证闸** | `python tools\gate_start.py --task <slug>` | ①`read_receipt.json` 的 `manual_sha256` ≠ 当前手册哈希(=**未读或读了旧版**);②抄录条款 <12 条或有条款在手册中**逐字找不到**(="我读过"不可信);③`.work/<slug>/执行单.md` 不存在或形态不符;④`machine-layer-run.json` 不存在(=¥0 机器层未跑);⑤提取器 prompt 不含官方模板格式行(=自造格式) | 非 0 = **不得开工** |
437
+ | **阶段门禁闸** | `python tools\gate_stage.py --task <slug> [--stage N]` | 各阶段**产物缺失或内容不达标**;且**前阶段未过 ⇒ 后阶段命令直接拒绝**(阶段依赖链) | 非 0 = **不得进入该阶段** |
438
+ | **执行单逐项闸** | `python tools\gate_checklist.py --task <slug>` | 执行单 36 项**逐项**:①"完成日期"列非空(=V3.1 纪律 1 的"记证据"可机查);②登记于 `ARTIFACT_MAP` 的 27 项产物在任务目录 glob 到非空文件(自查表/独立 I/O/防线4/d8/账本等**历史上被跳过的尾段产物全在射程**);例外仅认执行单 §4 例外登记表("用户确认"非空)。产物名含 `<slug>` 自动替换;跨目录记录在 `.work/<slug>/checklist-roots.json` 声明(声明即登记)。校准用 `--report-only` | 非 0 = **不得宣称"执行单已完成/闸已过"** |
439
+ | **自动纳入** | `python tools\preflight.py` 第 ⑤ 项 | **活跃蒸馏任务**(`PIPELINE_STATE.md` 在 24h 内更新过)**自动纳入**;任一活跃任务未过上述三闸 ⇒ preflight 非零退出。**无需声明、无法手改规避** | 非 0 = 开工前门禁未过 |
440
+
441
+ ### 21.2 两条铁律
442
+
443
+ 1. **蒸馏任务的第一条命令必须是 `gate_start.py`**;未过之前**不得调用任何子代理、不得 OCR、不得写任何产物**(含 PIPELINE_STATE 之外的一切)。
444
+ 2. **进入任一阶段前必须跑 `gate_stage.py --stage N`**;它报红时,唯一合法动作是**回头补前置阶段**——不得"先做着后面再说",不得以"时间紧/用户催"为由跳过。
445
+
446
+ ### 21.3 阶段-产物-校验对照表(`gate_stage.py` 的实际判据)
447
+
448
+ | 阶段 | 必需产物 | 内容达标判据(空文件糊弄不过去) |
449
+ |---|---|---|
450
+ | **0-骨架** | `BOOK_OVERVIEW.md` | ≥3 个章节标题 + 含**「用户确认」标记**(§3 阶段0 门禁=用户确认骨架) |
451
+ | **1-提取** | `extractor-prompts/*`(须含官方模板格式行)+ `notes/` 或 `candidates/` | 官方格式条目(`### ` 行)合计 **≥5** |
452
+ | **1.5-验证** | `verified*.md` | 候选条目/表格行 **≥5** |
453
+ | **2-构造** | `skills/*/SKILL.md` | 含 **🔴CHECKPOINT**(§14 d5 硬闸:无 CHECKPOINT=🔴)+ 含**「何时不用/让位」**段 |
454
+ | **4-测试** | `test-prompts*.json` | **≥3 条**(应调用/诱饵/跨技能+医疗危机) |
455
+ | **5-交付** | `gates-<slug>.json` + `DIGEST*.md` | 三闸记录 + 四件套 |
456
+
457
+ ### 21.4 与既有闸的关系(分工,不重叠)
458
+
459
+ - `preflight`(§18.1)=**工作区健康**(四道验收闸/YAML 两线/引擎加载器/mtime 巡检);
460
+ - 本节 `gate_start` / `gate_stage` =**蒸馏流程合规**(手册读没读/执行单建没建/机器层跑没跑/阶段有没有跳);
461
+ - 两者在 `preflight` 第 ⑤ 项汇聚:**任一红即不得开工**。
462
+
463
+ ### 21.5 自伤登记(本节诞生原因,留痕供后来者对照)
464
+
465
+ | 违规 | 后果 |
466
+ |---|---|
467
+ | 未读本手册全文,只看了 AGENTS 摘要 ⇒ 以为"知道手册" | 跳过阶段0/1.5/4/5,缺失全部门禁 |
468
+ | 未读《避坑手册》46 条 | 重复踩工程坑;`pitfall_audit --check` 从未跑过 |
469
+ | 官方提取器模板存在却自造格式 | 提取笔记与官方格式不兼容 ⇒ 阶段1.5 机械去重**执行不了** |
470
+ | 未跑 ¥0 机器层(machine_precheck/defense3/blindtest_lexicon/readycheck) | 花了 9 个子代理做人工核验,仍漏项 |
471
+ | 误用**已废除**的 9 维打分口径(§5.3 明写"判态,替换 9 维打分…结论=A/B/C 档位,不是 0-100 分") | 门禁结论**不成立**,须按判态制重跑 |
472
+ | 构造层无独立核验(核验只覆盖提取笔记) | **over-claim 流入输出**("没有证据表明"被写成"无效"),由达尔文判官实测发现 |
473
+
474
+ ### 21.6 执行合规八条(用户指令「把这 8 招落实到插件」· 2026-09-13 晚)
475
+
476
+ > 模型如实声明"不能保证以后都按流程走"是**诚实且正确**的——技能=提示词级流程而非运行时强制,门禁只查"已产出的东西"(遗漏无产物、无属性可查)。本节把分散的执行合规条款收拢为八条,逐条写明**承接结构**(闸/手册节/行为规则)与**检查方式**;设计原则一条:**不依赖模型自觉,每条都有外部结构承接**。线A/B/C 与一切子代理任务同样适用。
477
+
478
+ | # | 条 | 强制要求(一句) | 承接结构 | 检查方式 |
479
+ |---|---|---|---|---|
480
+ | 1 | **主管制** | 主会话当主管、逐段对账;子代理只派刀尖任务,**禁止把整书打包给一个子代理自由发挥**;信落盘、不信转述 | §12(无人值守模式)+本节两闸须由主管在会话内执行 | 子代理回报 ≤3 行摘要+全文落文件;阶段放行以主管核对落盘产物为准 |
481
+ | 2 | **执行单制** | 开工复制全量执行单到 `.work/<书slug>/`,逐项记证据;偏离(降档/豁免/代核/轻量)停下经用户确认登记 | **gate_start 闸③(存在/形态)+gate_checklist 逐项闸(36 项证据+27 项产物)**+ V3.1 纪律 1/2 | `gate_start.py` 与 `gate_checklist.py` rc=0 |
482
+ | 3 | **闸前置制** | 机器层 ¥0 先行;每阶段收口 rc=0 才进下一阶段;无"先往下走回头补" | **gate_start 闸④⑤+gate_stage 阶段依赖链+preflight ⑤ 自动纳入** | 两闸+preflight rc=0 |
483
+ | 4 | **独立制** | 独立 judge/核验员默认独立子代理(未参与产出);机器命中不因 judge 翻案 | V3.1 纪律 3(行为规则层) | judge 子代理与产出者不同源;台账记录执行者 |
484
+ | 5 | **少做清单制** | 每阶段回报**固定含"我没做什么"**;缺节=汇报不合格退回重报 | gate_start 闸②(逐字抄录)防"没读装读";自曝漏项属行为规则层 | 回报含"少做清单"节+与落盘对账相符 |
485
+ | 6 | **落盘对账制** | 分段落盘+时间戳;阶段产物按固定模板落盘 | **gate_stage 产物+内容双达标**(空文件糊弄不过去,如阶段2 须含 🔴CHECKPOINT 与"何时不用"段) | `gate_stage.py` rc=0 |
486
+ | 7 | **一书一会话制** | 一本书=一个新会话;压缩后 ≈1MB 或 ≈2,000 帧即换会话(旧会话保留) | §12 纪律+`yieldfix.mjs verify` | 续跑前查体积两指标 |
487
+ | 8 | **可验证化制** | 每句"我无法验证 X"=登记待办,下一批把 X 变成手里就有的东西 | A-11 元教训+§20.4(派发前自检闸) | 台账待办栏销账记录 |
488
+
489
+ > 八条中 **2/3/6 已闸化**(gate_start/gate_stage/**gate_checklist**/preflight ⑤——第 2 条的"逐项证据+产物存在"由执行单逐项闸机查),**1/4/5/7/8 为行为规则层**(由主管制与台账承接)。任何一条失效=流程事故,按《避坑手册》对应 A 条登记。
490
+
491
+ *蒸馏 V4.6 增补(§21)· 2026-09-13 · **强制门禁**:`gate_start`(手册哈希+条款逐字抄录+执行单+机器层+模板)/`gate_stage`(阶段依赖链)/preflight ⑤ 自动纳入活跃任务。**与 §0–§20 同等强制**;包版本 4.5.0 → **4.6.0**(R6/R15 对齐规则)。*
492
+
493
+ *蒸馏 V4.6 修订(§21.6)· 2026-09-13 晚 · **执行合规八条对照**(用户指令「把这 8 招落实到插件」):主管制/执行单制/闸前置制/独立制/少做清单制/落盘对账制/一书一会话制/可验证化制——2/3/6 已闸化,1/4/5/7/8 行为规则层;包版本 4.6.0 → **4.6.1**(同增补内修订=patch 位)。**与 §0–§20 同等强制**。*
494
+
495
+ *蒸馏 V4.6 修订(§21.1/§21.6)· 2026-09-13 晚 · **执行单逐项闸建成**(用户拍板「现在做,我有时候不值守」):`tools\gate_checklist.py` 把八条第 2 条彻底闸化——36 项证据闸+27 项产物闸(射程=《最优解人生》事故跳过的全部尾段产物);挂入 preflight ⑤;`gate_selftest` 升四坏两好(自伤 #9=填充正则 `\s` 吞行间换行并行,自证当场拦)。产物映射与证据类豁免清单在脚本头**登记为口径**。包版本 4.6.1 → **4.6.2**。**与 §0–§20 同等强制**。*
496
+
497
+ *蒸馏 V4.6 修订(§21.1 工具链同步)· 2026-09-13 深夜 · **ADHD 专业线收官批:三处机器层工具缺陷修复同批入包**——① `defense3_impersonation_scan.py` 页锚**形态表化**(旧版写死投资线 `〔…(p7)〕` ⇒ 书籍线 `【…PDF pNNN】` 永不匹配 ⇒ **suspects 恒为 0、闸恒空转**;修后 `--selftest` 加 3 例正样本对照,10/10 过)② `blindtest_lexicon_mock_v1.py` **真实现 `--prompts`+`--skills-root` 成对开关+`--out`**(旧版开关只在 docstring、代码无条件用内嵌 fixture ⇒ 换书跑盲测产出**别的书的证据**)③ `machine_precheck_v2.py` 的 `d1-c3` **标记词家族匹配**(`何时用`/`何时不用`/`让位`/`缺省优先`;`触发词` 仍为独立必需项)。配套新仪器 `tools\verify_layer_quotes.py`(引文型附属文件的**引文回源**:省略号分段+归一化含 markdown 强调符+双源+空集拒跑)。三条坑入册《避坑手册》**v1.9(62 条)** A-36…A-39。包版本 4.6.2 → **4.6.3**(同增补内修订=patch 位)。**与 §0–§20 同等强制**。*
498
+
499
+ *蒸馏 V4.5 增补(§20)· 2026-09-13 晚 · **底账同代、判官输入工程与闸的升格秩序**:ED15 终判 🔴7→0(停线维持)当日实战固化。**与 §0–§19 同等强制**。*
500
+
501
+
502
+ ---
503
+
504
+ ## 22. V4.6.4 增补:判官要求固化 —— 「引文型附属文件」零问题检查表(2026-09-14 · ADHD 专业线收口批)
505
+
506
+ > **为什么有这一节**:一条专业线上,**六名独立判官**(C/E/F/G1/G2/G3)在同一套"引文型附属文件"上
507
+ > **推翻执行者仪器 6 次**——每次都不是内容出错,而是**执行者自己的尺子**:把多引用锚块当单引用(串书/丢页)、
508
+ > 区间锚只取首页、归一化漏 `『』`、跨页只拼不重叠、位置配对取错锚、计数只报两类。
509
+ > 每一次修正都由"判官说了执行者无法反驳的话"触发。**本节把这些要求从"经验"升级为"命令"**。
510
+ > **与 §0–§21 同等强制。**
511
+
512
+ ### 22.1 零问题机检闸(**rc=0 才算零问题**)
513
+
514
+ | 闸 | 命令 | 覆盖的判官要求(每条对应一次真实自伤) |
515
+ |---|---|---|
516
+ | **引文型附属文件零问题闸** | `python tools\gate_layer_quotes.py --task <slug> [--strict]` | **R1** 锚块全部可解析(缺书代号锚=**登记配额,只许减不许增**,A-51)|**R2** 引文全覆盖(无留白)|**R3** 分栏自洽(各栏之和=总数,A-42)|**R4** 归一化族齐全(`『』`/全半角/空白/强调符,A-04 家族)|**R5** **未命中零未处置**(每条必须归类,禁"未分类")|**R6** 判定用**行内锚并集**(A-49)|**R7** 空集拒跑(A-37)|**R8** 产物带 schema+口径全字段(A-46) |
517
+
518
+ `--strict`:把"长引文待复核"也视为红(交付前建议开)。
519
+
520
+ ### 22.2 判官要求的十条(写作与核验时的硬约束)
521
+
522
+ 1. **禁把"多引用锚块"当单引用**(A-48):一个 `【…】` 可含多引用(`…;AAP 第7章, PDF p112, p115, PDF p128`)⇒
523
+ **先按 `;` 切段 → 每段取最近书别名(无则继承前段)→ 页说明取第一个 `PDF` 之后**(`split('PDF')[-1]` 会丢前面页)。
524
+ 2. **锚的页说明必须区间感知**(A-44):`pN–pM`/`pN、pM` 都要展开;只取首页会把**已正确的区间锚**误判成"跨页未声明"。
525
+ 3. **归一化族必须齐全**(A-04 家族):`『』`/`“”`/`「」`、**全/半角括号**、空白、**markdown 强调符**(`*`/`_`/`` ` ``)
526
+ 一律先归一再比对——判官 G2 实测:**8 组仅靠前两步即可当场转正**。
527
+ 4. **比对必须声明窗口并穷举命中模式**(A-41/A-47):单页/**相邻页拼接**/**分段归页**/**页界重叠**;
528
+ **窗口未声明时不得给出「不存在」结论**。
529
+ 5. **"引文↔锚"不做位置配对**(A-49):判定问的是"这条引文在**这行声明的来源**里有没有原文",
530
+ 用**该行全部锚的 `(书,页)` 并集**;"它属于哪个锚"是**判官的定位工作**,不是判定前提。
531
+ 6. **取样一律用 `(书, 页)` 二元键并回显书代号**(A-45):按页号取会串书(实测 `[bark p128]` 被当成 AAP 第128页)。
532
+ 7. **`old` 串唯一性是执行前提**(A-43):批量改写必须先断言"该串在原位唯一",断言不过**整批拒写**;
533
+ dry-run 的"跳过率异常高"要当**结论**看(形态不支持自动改写),而不是去放宽参数。
534
+ 8. **计数必须给完整分栏**(A-42):任何分类计数都要让"各栏之和 = 总数"当场可验;
535
+ **配对/解析派生的计数不可跨版本相减**(A-46),只能作同版内相对诊断,**禁止当"缺陷数"对外报**。
536
+ 9. **缺书代号的锚不猜改**(A-51):只补"同行唯一书"可继承者;其余**登记配额(只许减不许增)**,
537
+ 核验时以**该文件头声明的来源书**作回退——**写错书代号比缺更糟**。
538
+ 10. **判官说"我无法验证 X"或"你的机器数不可信"⇒ 一张必办待办**(A-11 元教训):
539
+ 把 X 变成他手里就有的东西(自证字段进工具输出,不进对判官的嘱托)。
540
+
541
+ ### 22.3 结构性预防(**比事后回源更重要**)
542
+
543
+ > 本线的教训是:134 条"未命中"是**交付前才发现**的。真正的预防是**在构造期约束**——
544
+
545
+ - **附件引文必须逐字来自候选池条目**:装配器(如 `assemble_professional_layer.py`)在写盘前**必须断言**
546
+ "每条引文都是池条目「原文(逐字)」的逐字子串",否则**拒绝写入**(把问题挡在源头,而不是交付前回源发现)。
547
+ - **页锚在写入时就必须是"一引用一锚+书代号+页/区间"**:禁止写入"多引用块"与"缺书代号锚"。
548
+ - **构造期即跑** `gate_layer_quotes.py`(阶段2 收口处),而不是等到阶段5。
549
+
550
+ ### 22.4 门禁挂载
551
+
552
+ - 本闸已挂入 `tools\postflight.py` ⑧ 教育线闸组(第 5 闸);非 0 ⇒ **不得宣称"改完"**。
553
+ - 执行单已加 **第 37 项**(《V3.1全量执行单》模板同批更新),供后续每本书继承。
@@ -0,0 +1,3 @@
1
+ - insert:
2
+ - id: distillation-director
3
+ name: dsh-distillation-director