# SPEC · 依据驱动的提示优化器(架构基线 v0.8) > **一页纸规格**。实现、文档、验收一律从这一页派生;与本页冲突的旧文档(DELIVERY / PROMPT-OPTIMIZATION 等)自动降级为历史记录。 ## 0‴ 【跨越信息终极鸿沟】ask 机制(2026/09/19 定稿 · 本版核心) **病根**:以前遇到定不下来的点,就把它归为「自由度」,由工作 AI 按"最保守"的理解自己拍板。但**信息不会凭空出现**——原话越短,自由度越多;而用户其实是有想法的(忘了说/懒得说/不知道这也要说)。一连串"最保守"的猜测叠起来,成品与用户预期**必然**大相径庭。这是信息熵的问题,靠读文件、看上下文、猜原话都**不可能**解决。 **解法**:**把自由度交给用户**——工作 AI 开工前用 **DSH 内置的 ask**(提问/选项)功能一次问完,问完再动手。插件由此从"单向传话"变成**有回路的领导**:员工能问,老板能补。 | 关卡 | 规则 | | --- | --- | | **只说要问,不教怎么问** | ask 条款**只有一句话**:定不下来、又会影响结果的地方别自己猜——先问用户(最多 N 条,一次问完)。**怎么问、拿到答案怎么做,是员工自己的事**(这才是员工与老板的真实关系) | | **一条一件事** | 一条只问一件事;**不许替每种答案预写方案**(第一版产物里"选 A 就…选 B 就…"的分支文字占到七成) | | **正文照旧写全** | **0.4.4 的优化内容是主角**:正文照旧写全,只把那几个要问的点留空;不许因为要问就把要求说明省掉(曾出现"只剩提问、正文没了") | | **没有问题** | 也要写一行(同行或下一行)「无」——**整段缺失=不合格**;但"决定成品形态的那些没定"不许拿「无」了事 | | **条目预算** | 普通 ≤1 / 高级 ≤3 / 极端 ≤5(`/runs.askGate`:hasSection / items / limit / over,**只留痕不裁剪**) | | **占比守卫** | ask 相关文字(前置+后置+极端档收窄句)占系统提示 **≤20%**(单测断言:主角必须是正文) | | **优先于 0.4.4** | 该段优先于正文所有指令(含「按最保守的理解写下去」);极端档 0.4.4 正文本身**逐字节保留** | | **收尾自检** | 三档都要在命令末尾要求工作 AI **自己收尾**:用最短的方式验一遍(跑一次看报错/截图或打开看画面/按逻辑核对关键点),把**实际看到的结果**写进交付;不要长篇自证、不要反复跑调试。**治"我只没办法验证,只能让你看看"** | **验证**:`verify-ask-contract.cjs`(三档都带、只说要问、正文不许缩水、收尾自检在位、占比 ≤20%);`verify-ask-live.cjs` 实机 6/6 批(模糊原话 5/5 都发起了提问;明确原话写「无」;提问每条 36–99 字;正文未被挤掉:极端 783 字 / 高级 295–417 字)。 **度量口径(吃过两次亏)**:产物侧只数**能可靠识别的东西**——标题行 +「以编号开头且含问号」的行。按"ask 段落"切分的两版解析器在空行/内联写法上连续误判,**测不准的指标不许上**。 **验证**:`verify-ask-contract.cjs`(三档都带、四要素齐全、预算与闸门一致、极端档正文逐字节保留);`verify-ask-live.cjs` 实机 **6/6**——两句模糊原话 × 三档都产出 ask 段且条目在预算内,一句完全明确的原话显式写"无"。 **为什么这是"底层"而不是"加一条提示"**:它改的是**信息流的方向**——以前只能"用户→工作 AI"单向传话,现在补上了"工作 AI→用户"的回路;而这条回路正是文档里反复出现的失败(成品与预期不符、来回返工)的**唯一**根治路径。 ## 0⁗ 【能力事实】实测,不猜(2026/09/19 定稿) **病根**:工作 AI 手里**没有一句"我这条会话现在到底能做什么"的实测事实**。它唯一的证据是自己那一次尝试,而三种失败在它眼里长得**一模一样**:① 真被拒(受限档:`Program 'msedge.exe' failed to run: Access is denied`);② **假失败·异步落盘**(浏览器启动器 106ms 就返回,截图 0.3–1s 后才出现 → 立刻查 = `NOFILE`);③ **假失败·参数被吞**(已开着的浏览器实例接管,回一句中文「…会话中打开。」)。后果实证:会话 `04ade894` 06:54 受限档下被真拒,**07:05 用户切到 danger-full-access**,07:24 它仍在汇报「本机沙箱禁止启动浏览器」——中间 18 分钟**一次都没重测**;`4cd41964` 在已是全权的会话里还去申请提权,拿到 `sandbox escalation … is not strictly wider` 这条**读起来像"你没被授权"、实际意思是"你已在最高档"**的错误。另一边,工具说明里那段受限档警告(命名管道 EPERM、ConstrainedLanguage、`.NET/Add-Type`、提权审批)的判据是 `escalationModes.length > 0`(`dsh-tool-pwsh/lib/index.js:229`,只要配了部署默认档就为真),**与当前档位无关**——全权会话里它全是假话,却比那句"不限制文件修改"长得多。 **解法(与任务无关的通用机制)**:插件注册 `ctx.systemPrompt.context`(order 118,紧接 APPROVAL_POLICY),给**每个会话每次装配**注入一段**实测事实**—— | 部分 | 内容 | 来源 | | --- | --- | --- | | **事实** | 权限档 + 审批策略(`never` = **没有任何操作需要审批**,不是"没有权限") | `sandboxPolicy.resolve({session})` · `approval.effectivePolicy(session)`,零成本、**读不到就写 unknown(不猜)** | | **通道实测** | `子进程` / `视觉截图(无头浏览器)` / `外部工具服务器` 三通道 ✓✗ +**原始原因** | 经 `ctx.shell` 按**该会话自己的沙箱策略**执行;✗ 带原文(`Access is denied` / `denied` / `exit N`) | | **通用规则** | 【失败不是结论】"被拒/做不到"只能由**当场复测**确认;档位或环境变过,旧结论作废;能自动验证的(截图/编译/断言/跑一遍)**不许交给用户** | 纯规则,不含任何领域知识 | **实测(同一台机器、同一分钟,`/capability?sessionId=…&probe=1&mode=…` 可复核)**: | 档位 | 子进程 | 视觉截图 | 注入文本里的原始原因 | | --- | --- | --- | --- | | danger-full-access | ✓ | **✓(msedge.exe 1s 出图 3797B)** | —(并附"受限档警告不适用"一句) | | workspace-write | ✓ | **✗** | `Program 'msedge.exe' failed to run: Access is denied` | | read-only | ✓(**受限语言模式:.NET/Add-Type/COM 不可用**) | **✗** | crashpad `file_io_win.cc` 创建文件被拒 | **为什么这是"底层"而不是"给浏览器写个补丁"**:注入的是**通道状态**,不是某件事的配方——换环境只是换通道(Godot MCP 没连上 → 外部工具服务器 ✗;换了机器 → 视觉截图 ✗/✓),机制不变。它同时消掉了两个方向的错话:全权档不再"以为自己没权限",受限档也不再"以为自己什么都能干"。 **工程约束**:探测**不阻塞装配**(首次渲染 <20ms 返回,结果下一步补上;单测断言);缓存 key = **档位**(切档必然重测——病根就是"切档后不重测");TTL 10 分钟;探测脚本自带三个坑的解法(私有 `--user-data-dir` + 软件渲染 + **轮询等落盘**);注册失败只留痕、绝不拖垮插件。 **验证**:`verify-capability-facts.cjs`(**25 项全过**:三个坑在脚本里、读不到服务写 unknown、装配 <20ms 不阻塞、full-access 才出现"不适用"句、受限档如实 ✗ 且带原始原因、切档换 key 重测、受限语言模式如实标注、无会话不注入、order 落在 115/120 之间);实机 `/capability` 三档对照见上表。 ## 0⁵ 【交付门】机器替员工验(2026/09/19 定稿) **病根(会话日志可复核 · `session-7df19a05`)**:工作会话在 **workspace-write** 档下交付前两次尝试真机截图,两次都是 `SHOT_MISSING` + `Program 'msedge.exe' failed to run: Access is denied`——**它从没见过自己的产物**;随后退回静态检查(标签平衡 / 19 个 script 块 / 0 处外链)并写下 **"Everything is verified."**。而那两个文件里有:三层着色器拼装 bug(`#version` 从未拼上 → 拼上后不在第一行 → 片元专用导数混进顶点着色器)与一个画布 0×0 的必现黑屏。结论:**员工验不了,也不能只有它自己验。** **机制(与任务无关)**:任何被 `present` 的**网页类交付物**(`.html/.htm/.xhtml/.svg`)落盘后,插件在**宿主侧**(不在会话沙箱里——受限档下会话里 msedge 被拒,宿主侧照跑)用真机 CDP 打开一次: | 采什么 | 怎么采 | 判据 | | --- | --- | --- | | 页面自己的致命覆盖层文案 | 约定 id(`fatalTitle`/`fatalMsg`/`fatalDetail`…)可见性 + 文案 | 含"失败/错误/无法/异常/超时/不支持/丢失" → `fatal-overlay` | | JS 异常 / `console.error` | `Runtime.exceptionThrown` / `consoleAPICalled` | 有异常 → `page-error` | | 画布后备缓冲尺寸 | `canvas.width/height` | ≤8 → `blank-canvas-0`(CSS 尺寸再正常也不显示任何东西) | | **帧内**中心像素 | **rAF 里** `readPixels`(帧外读永远是 0) | mean<2 且 max<8 → `blank-canvas` | | 现场截图 | `Page.captureScreenshot` | 人可复核 | **采样策略(实测踩过的坑)**:**不许一看到覆盖层就判死**——`mbt-m1a2-sep-v3.fixed.html` 在 2s 时 DOM 里还挂着上一次尝试的"初始化失败",45s 时已在 165fps 跑场景。所以只在"确实好了"(画布有尺寸且帧内非全黑)时**提前收工**,否则跑满预算(默认 20s),按**最后一次**采样判;同时记录"曾经出现过覆盖层后自愈"(`recovered`)。也不用 `--virtual-time-budget`:它把定时器按虚拟时间快进,页面自己的 watchdog 会在真实渲染完成前触发,把好页面判成"初始化超时"。 **出口**:结论写成**机器裁决**(不是模型自述)存进 `/gate`(含截图路径、画布尺寸、像素、异常);硬失败(`fatal-overlay`/`page-error`/`blank-canvas`/`blank-canvas-0`)时把**实测证据**当返工指令回注该会话的下一轮(`sessionController.prompt(mode:'queue')`),**同一交付物同一版本只回注一次**(防抖),可用 `/gate?rework=0` 关。 **实测验收(`/gate?run=1&path=…` 可复核)**: | 样本 | 判定 | 用时 | | --- | --- | --- | | `mbt-m1a2-sep-v3.html`(未修,三层拼装坑) | **fatal-overlay**(原文含 `[scene.vs] ERROR: 0:3: 'layout' : syntax error`) | 21s | | `tank.html`(未修,画布 0×0) | **blank-canvas-0** | 21s | | `mbt-m1a2-sep-v3.fixed.html` | **ok** | **4.0s**(好页面提前收工) | | `tank.fixed.html` | **ok** | 4.0s | | `present` → 事件自动触发(好件 / 对照件) | **ok 3.2s / blank-canvas-0 21s**,对照件 `注入=injected`(返工指令进会话队列,已用 `/queued/remove` 撤回) | — | **验证**:`verify-delivery-gate.cjs` **30/30**(必现坏一个不漏;好页面零误判——暗场景/无画布/加载中文案都不判死;采样在 rAF 内;返工只在该发时发、同版本不重复、开关关掉真的一条不发)。 ## 0″ 基础定稿(2026/09/19:**基线回到 0.4.4**) 老板定稿:**0.4.4 的提示词策略是综合效果最好的版本**,基线回到它;上下文机制与只读工具保持现状(那是这一轮之前刚修好的部分)。**档位 = 三套策略**: | 档位 | 策略 | 可验证判据 | | --- | --- | --- | | **普通** basic | **只做语言层**:改病句/错别字/标点、把指代落到具体对象、理顺逻辑语序,让工作 AI 看懂用户原意;**原意、范围、篇幅都不变**,不新增任何要求 | ≤1.5× 原话;不含"完整、具体的要求说明"这类补全措辞 | | **高级** advanced | **0.4.4 需求补全的中间态**:仍写成需求说明,但只补**三样**(对象/结果/边界);不写用法细目、范围清单、验收章节、流程 | 含 v5 正文 +「本档只补三样」收口条款;≤2.5× | | **极端** extreme | **0.4.4 的极端档策略原样**(`STRATEGY_V5_SYSTEM`,一字不改) | **chat 形态下与 0.4.4 输出逐字节相同**(`verify-tier-strategies.cjs`);PTC 形态只多一行"够用即止" | **不变的另三样**:① 上下文机制(W1b:范围只由 UI 决定、只降详细度不改范围、解析不到不注入、旁观者声明);② 只读工具(read/glob/grep + 先侦察 + 依据索引 + 两栏膨胀闸门);③ 默认下游形态 PTC。 **交付形态只投影两行**(组织方式 + 篇幅)——唯一允许 `delivery` 改变的地方(铁律 6);剥掉这两行后 chat 与 ptc 逐字节相同(`verify-tier-strategies.cjs` 断言)。 > **v0.6 增补(F1–F7)= 一次实测纠偏**:同题四代对照(`evidence/generations-ab.json`)显示,v0.5 把 15–42 字的原话膨胀成 **725–3390 字**(0.4.x 的 2.5×、0.1.1 的 3×),产物从"一条命令"变成"一份带小标题/判据章节/不许做的事章节的规格文档";而项目自己的**形态量尺**却给 v0.5 打了 +6.93(优于 0.1.1 的 +1.93)——**指标与结果背离**。用户体感:"绝大部分情况不如不优化"。F1–F7 七道闸门保留为**普通/高级档的护栏**(极端档按 0.4.4 原样,不受其约束)。 ## 0′ F1–F7:七道闸门(v0.6,现适用于普通/高级档) | # | 闸门 | 规则 | | --- | --- | --- | | **F1** | 缺口闸门 | **先判"原话够不够用"**:够用(对象清楚、动作清楚)→ 只做语言层修复,**产物 ≈ 原话,不加任何新要求**;不够用 → 只补**缺的那几类**,每类**最多一句**。取消"每类都要补"。 | | **F2** | 约束闸门 | **默认零新增约束**;只允许用户明说的、或本次**实际读到**的;全文硬约束 **≤3 条**;**禁止把"注意"升级成"禁令"**(用户说"不要预览其他文件",就写"不要预览其他文件",不许写成"不得读取/列出/引用任何已有文件")。 | | **F3** | 身份闸门 | 产物是**老板的命令**:禁止小标题与分节文档化(用户自己用了除外);**禁止自述**("我读到/我未读到/按 X 理解")→ 不确定写成给下游的指令:"先确认 X 再动手,不要假设"。 | | **F4** | 判据收敛 | 默认 **0 条**;最多在句子里带**一句**"用户会亲自看的那个现象";**不单列**"验收判据/核对点"章节,不写"每条改动配一个锚点"。 | | **F5** | 出处收敛 | 出处只在**改既有代码**时写(那时才有 `路径:位置` 可引);从零构建类任务**不写**"依据/出处"章节。 | | **F6** | 膨胀预算 | 档位改名为**膨胀预算**:普通 **≤1.5×**、高级 **≤2.5×**、极端 **≤4×** 原话(并有绝对上限 1600 字)。宿主**只留痕不裁剪**(`/runs.lengthGate`:rawChars / limit / chars / ratio / over)——裁剪要靠契约,动刀会制造半截命令(踩过的坑)。 | | **F7** | 验收换轨 | 形态量尺(ptcScore)**降为回归护栏**,并在脚本头写明它曾与结果背离;验收只看**一次交付可用率**(`/outcome` + 迷你窗按钮),基线是**原话**。 | **基线原则**:**"不优化"是一等公民**——任何改动必须证明"比原话更好",否则回退。**动态试题**见 §7′。 ## 0 目的(唯一) 把用户在**真实会话里的一句原话**,优化成一条**带依据的执行指令**:让下游(v4.1-flash:不主动、不猜、一次做完)**每一步都踩在依据上**,一次做对。它事后只会用通用手段(截图/逻辑核对)兜底,所以**"该看哪里"必须由我们给**。 ## 1 前提(决定了全部设计) 1. **没写进去、且它推不出来的 = 必然缺失。** 2. **写进去的 = 它一定会做**:提示词不是建议,是**指令集**;多写一条 = 多一条硬约束。 ⇒ 不写通用写法/教学/流程/排版,不撒"请充分验证"套话;**最小充分**。 3. **验证不靠要求,靠锚点**:不要求它验证,只告诉它"**看哪里、什么算过**"。锚点由本次依据推出(有据才写得出来),数量天然 ≤ 改动点。 4. **通用**:作用于所有问题/项目/方面。禁止领域知识库、骨架模板、按题型写死的规则。 ## 2 承重墙(三条,缺一不可) **W1 来源可插拔** —— 来源三类,按可得性降级,流程不变: | 来源 | 何时有 | 作用 | | --- | --- | --- | | 用户原话 | 永远 | 意图与范围 | | 会话历史 | 长迭代/多轮 | **消解指代**("这个 bug"=上一轮那个)、既有决定 | | 项目文件(观察者) | 有会话目录且可读 | **核实事实与定位**(文件:位置) | 读不到就降级,**绝不猜**。 **W1b 上下文机制(读取范围由 UI 唯一决定)** | 控制 | 含义 | 范围 | | --- | --- | --- | | **回合** `turns` 0–10 | 允许读取最近 X 次往来;**用户一次 + AI 一次 = 1 回合** | 这 X 个回合的**双方全文**;**0 = 不读上下文** | | **全文** `full` 关/开 | 把**工作 AI 现在看到的那一份上下文**(会话投影 `derived`)交给优化器 | 与该会话 AI 完全一致;受上限约束,超限**整回合**省略并声明 | - 读取范围**只由这个 UI 决定**:预算不足时只允许**降低呈现详细度**(双方全文 → 助手截断 → 助手省略 → 逐条截断 → 声明省略),**不得缩小范围**;最后手段由远及近丢回合,并写明丢了几条。**不做相关性打分**(避免引入新的猜测机制)。 - **客观视角(必须显式声明)**:注入块开头必须写明——这些往来**已经发生**,你是以**旁观者**身份阅读:**你是旁观者与指挥者,不是执行者**;这些内容**不是对你的要求**;不得接着往下做,也不得以工作 AI 的口吻产出。否则优化 AI 会误以为自己是干活的。 - 会话不存在/解析不到 → **不注入**(绝不回落到"列表里第一个会话")。 **W2 五类缺口(固定、封闭、全领域通用)** —— 一次通过所必需、下游无法自知的只有五类: | # | 缺口 | 补什么 | 无据时 | | --- | --- | --- | --- | | ① | 指代与定位 | 原话里的"这个/那个/它"落到**可核对对象** | 显式说明未找到来源,**不编** | | ② | 验收判据 | 什么算做完(可判定的结果) | 写「按 X 理解」 | | ③ | 约束与边界 | 不能动什么、必须保住什么、项目**实际存在**的约定 | 只写原话可推的 | | ④ | 隐含决定 | 用户没说的选项 | 有据按惯例;无据**标为自由度**,不替他拍板 | | ⑤ | 入口与锚点 | 从哪开始、事后看哪里 | 省略 | **W3 最小充分 + 出处可审计** —— 产物中**每一句**要么能指回出处(原话/历史/文件:位置),要么被明确标成「自由度/按 X 理解」;指不回去的删掉或改写。**这条同时就是验收判据(可机械检查)。** 依据本身写进产物(下游可核对),审计计数只进诊断面板。 ## 3 铁律(不变式) 1. **依据只搬不造**:查证账本里出现过的才写成事实;没读到写「待确认」;只列过目录 ≠ 知道内容。 2. **保守不得升级成硬约束**:用户没提 ≠ 禁止(禁依赖/禁网络/禁多文件一律不许)。 3. **只写下游无法自知的**:事实(有据)、决定(替他定的)、判据、锚点;它的本行不写。 4. **锚点 ≤ 改动点**,且每条写明"看什么/什么算过"。 5. **指代消解失败 → 显式暴露**(面板与产物双处),不猜。 6. **形态只投影组织方式与篇幅**:`sequence`(清单↔工序)、`budget`(够用即止↔不设限);绝不动依据广度、补齐广度与丰富许可。 7. **上下文范围只由 UI 决定**(回合 0–10/全文 关·开);压缩只能降详细度,不得改范围。 8. **上下文一律以旁观者视角呈现**,且注入块必须显式声明"你不是执行者"。 ## 4 四档定义(档位 = **依据预算**,不是文风) | 档位 | 依据来源 | 补齐广度 | 产物形态 | 明确不做 | | --- | --- | --- | --- | --- | | **关闭** | — | — | 原话原样透传 | 不介入(干净对话/对照用) | | **普通** | 原话(+上下文:按 W1b 开关) | 只补 ①定位 ②判据 | 一条干净可执行的要求/清单 1–3 条 | 不读文件、不做多轮推断 | | **高级** | + 项目文件(按需读、克制) | 五类全补(无据处标自由度) | 条目化指令(每条可核对)+锚点 | 不深读、不丰富 | | **极端** | + 深读交叉核对 | 五类全补 + **每条改动带出处** | 条目+出处+入口+锚点;允许正向丰富(须有据、方向一致) | 不写工序、不写教学 | 轴映射(沿用字段名,语义重锚): - **与档位解耦的三样**:上下文开关(W1b)、模型、reasoning effort。档位只管**依据预算**(来源广度 + 补齐广度)。 - `grounding` 依据来源广度:`none` / `read` / `deep` - `depth` **补齐广度**:`precise`(①定位②判据)/`grounded`(五类)/`exhaustive`(五类+逐条出处)——现 `phased` 的"阶段"语义取消 - `enrich` 正向丰富许可:仅极端档;仍须有据 - `sequence` / `budget`:由交付形态投影(**PTC 默认** = `unordered` + `single-pass`) ## 5 机制适配(现有机制 → 新定位) | 机制 | 定位 | 说明 | | --- | --- | --- | | 身份层 `resolveRunContext` | 保留·升级 | 依据定位的唯一入口(会话/目录/历史);解析不到 → 依据降级,不猜 | | 观察者 `renderObserverBlock` | **改语义** | 定位为**指代消解首选来源**("这个 bug"=上一轮那个);范围严格照 W1b(UI 唯一控制,压缩只降详细度);注入块声明旁观者身份;会话解析不到则**不注入**(去掉"回落第一个会话"的隐式路径) | | 只读工具(read/glob/grep)+工具循环 | **改语义** | 用途=核实与定位(读该读的),不是逛项目;工具根=会话 cwd | | 证据账本 `renderEvidenceLedger` | **改语义** | "项目简介" → **依据索引**:只留与本次原话相关的条目(文件:位置 + 一行结论) | | 交付形态(PTC 默认/对话式/自动) | 保留 | 只投影 sequence/budget(铁律 6) | | 优化权限(审查/自动) | 保留 | 人机闸门,与架构无关 | | 策略开关(v6/v5/…) | 保留 | 对照与止血通道;v6 内核按本规格重写 | | 模型 + reasoning effort | 保留 | 优化器自身算力 | | 历史模式 + 回合数 | 保留 | 即 W1b 的范围控制(UI 唯一控制点);四档共用,不受档位影响 | | 每会话状态 `perSession` | 保留 | 不同会话不同预算/权限 | | 收件人契约 + 转交语闸门 | 保留 | 产出物只对工作 AI 说话 | | 输出预算 + 停顿看门狗 | 保留 | 防半截命令 | | 诊断 `/runs`、SSE、`toolLoopDebug` | **扩** | 新增:依据清单(本次来源条目)+ 出处审计计数(验收数据源) | | UI/i18n/探针 | 保留 | 文案随语义更新 | | **砍** | — | 教排版/流程的段落、把字数当目标、验证套话、任何领域写死的知识 | ## 6 流水线与降级 `原话 → ①身份 → ②来源采集 → ③依据整理 → ④五类补齐 → ⑤最小充分产出 → ⑥闸门(收件人剥离/审查·自动)` | 失效情形 | 行为 | | --- | --- | | 无 sessionId / 会话不存在 | 只用原话+历史;不派工具、不注入观察者;**产物不写任何事实段** | | 有会话但无 cwd / 读不到文件 | 同高级档流程,但事实以「待确认」呈现 | | 无历史(首轮/回合=0/全文=关) | 指代按原话字面落到具体对象;不臆测上文 | | 上下文超预算 | 范围不变,只降详细度(截断 → 省略助手 → 逐条截断);最后手段由远及近丢回合并声明 | | 工具不可用 | 退化为纯原话+历史的补齐(=普通/高级档) | | 档位=关闭 | 不介入 | ## 7 验收与非目标 **验收(三者缺一不可)** 1. **出处审计**:任一产物逐条拆解 → 每条标出处或自由度;**无出处条目数 = 缺陷数**。 2. **同题对照**:长迭代里一句「修复这个 bug」,跑"无观察者 vs 有观察者",人判是否**精准打击**(无观察者不得乱猜)。 3. **一次交付可用率**(北极星,人工一键记录:成了/要返工)。 **非目标**:领域知识库、骨架/模板库、按题型写死的规则、字数指标、验证套话、为单题调参。 > 现状说明:0.4.6-beta.6 是实现**过渡态**。落地顺序遵循"**先砍后加**":先删形式教学与套话,再换内核(依据索引/相关回合选择/出处审计),外壳机制全部沿用。