# 规范效力元治理 governed_by:D-014、D-020、D-077、D-081、D-110 本文效力:**已接受**(宪法性批准,见 §0) > 本文是本仓库唯一定义"一条规则在什么条件下可以阻断或授权"的文档。其他规范文档不重复定义效力语义,只在章节头用 `governed_by` 指向决策 ID,状态值统一到[决策日志 · 生效登记表](决策日志.md#effective-register)查询。 ## 0. 自指问题与宪法性批准 D-014 是元规则:它规定其他决策如何生效,因此不能援引任何上游决策来使自己生效。 解法是**宪法性批准**——由项目所有者直接批准,并公开声明这是本仓库唯一一条无上游依据的规则。 - decision_id:D-014 - 状态:已接受 - approved_by:Alan(项目所有者) - approved_at:2026-09-02 - effective_scope:`repo:AI辅助开发规范及工作流确定` 的全部规范文档与模板 - 上游依据:无(宪法性) 此后**所有**决策进入`试行`或`已接受`都必须援引本文的生效路径。采用本规范的其他项目需要各自完成一次同等的宪法性批准,本仓库的批准不自动覆盖它们。 ## 1. 效力状态语义 | 状态 | 对执行者的含义 | 可阻断 | 可授权 | 生效必需字段 | |---|---|---|---|---| | 提议 | 只可作为讨论材料引用 | 否 | 否 | decision_id、日期 | | 试行 | 在 effective_scope 内执行,每次执行须记录结果供复查 | 是(限 scope) | 是(限 scope) | + approved_by、approved_at、effective_scope、review_at、expiry | | 已接受 | 在 effective_scope 内无条件执行 | 是(限 scope) | 是(限 scope) | + approved_by、approved_at、effective_scope | | 已取代 | 不执行;只用于理解历史演变 | 否 | 否 | + superseded_by | | 已拒绝 | 不执行;记录为何不走这条路 | 否 | 否 | + rejected_at、理由 | | 已执行 | 一次性处置已执行完毕,不产生规则、不进生效登记表;只用于追溯做过什么 | 否 | 否 | + 执行记录指针(提交号、审计记录或发布号) | 缺少任一必需字段的决策**不视为已生效**,按`提议`处理。字段不能因"暂时未知"而省略;未知写 `unknown`,不适用写 `N/A + 理由`。 ## 2. 阻断与授权必须分开声明 一条规则的两种效力方向是独立的: - **blocks**:在条件不满足时阻止某个动作或状态转换(例:"CI 未通过不得进入 INTEGRATION_READY")。 - **grants**:允许执行者做本来不被允许的事(例:"AI 可在候选区写入记忆候选")。 `effective_scope` 必须分栏写明 `grants:` 与 `blocks:`,缺省栏为空集。 批准一条只含 `blocks` 的规则**不产生任何授权**。执行者不得从"某项检查已被批准为 Gate"推出"通过该 Gate 即被授权执行后续动作"——授权必须由独立的 `grants` 条目给出。 ## 3. 未标注规则的默认行为:分向降级 执行者遇到没有 `governed_by`、或 `governed_by` 指向的决策不在生效登记表中的命令式语句时: | 使用方向 | 是否允许 | |---|---| | 用它作为**拒绝**、暂停、要求补充证据或升级给人类的理由 | 允许 | | 用它作为**执行**动作、跳过检查、放宽条件或自我授权的理由 | 不允许 | 理由是风险不对称:错误阻断的代价是多问一次人;错误授权的代价可能是不可逆的数据或权限损害。默认值因此偏向保守。 推论:未标注规则不能被用来论证"某动作被允许",因此也不能被用来把空检查集解释成已通过(见 §4)。 本条不要求为仓库中每一句现存文字补标注。未标注即按上表处理。 ## 4. 空集合不可解释为通过 任何形如"全部 X 通过"、"适用的 X 均满足"的条件,当**生效 X 集合为空**时,判定结果是 `UNDETERMINED`,不是 `PASS`。 执行者遇到 `UNDETERMINED` 必须: 1. 记录哪个条件、哪个集合为空; 2. 停止该状态转换或动作; 3. 报告给有权责任人,由人决定是补齐规则、显式豁免,还是接受风险。 不得把 `UNDETERMINED` 静默计为通过,也不得因"当前项目没有定义 Gate"而认为该项目免于检查。 ## 5. 生效登记表是唯一效力源 [决策日志](决策日志.md#effective-register)中的**生效登记表**是查询"当前哪些规则可以阻断或授权"的唯一权威位置。 - 规范正文、模板、README、聊天结论和 AI 摘要均不构成效力声明。 - 正文中出现的状态值副本(如"(均为提议)")一律视为过期注释,以登记表为准。 - 章头 `governed_by` 只作来源追溯,不作效力声明;一条规则能否阻断或授权,只查登记表。 - 登记表为空或极短是正常状态,不等于"没有约束",见 §4。 ## 6. 试行到期 试行规则到达 `expiry` 后**自动失效,退回`提议`**:不再阻断,也不再授权。需要继续生效必须重新批准并写入新的 approved_at 与 expiry。 **历史不追溯**:依据该规则在其有效期内已经通过的 Gate 结果、已经形成的验收证据和已经完成的状态转换,不因规则到期而作废。到期只影响到期之后的判定。 `review_at` 早于 `expiry`,用于提醒复查;错过 `review_at` 不改变效力,错过 `expiry` 改变效力。 改登记表中已有的一行,按以下三条办: 1. **记账修改**:不改变该行 blocks 或 grants 覆盖的动作集合,也不改变其成立条件,只把会漂的数、失效的指针或一句表述换成等义的写法。可就地改,`approved_at`、`review_at`、`expiry` 不动。 2. **实质修改**:覆盖的动作集合有增减,或成立条件(含到期日)改变。须重新批准,写新的 `approved_at` 与 `expiry`,`试行`项同时写新的 `review_at`。判不出属哪一类的,按实质修改办。 3. **留痕**:两类都在该行「上游依据」格末尾写一句「修订:…」,写明改了哪几处、哪天裁、裁决方向变没变。 ## 7. 标注载体 | 位置 | 写什么 | 不写什么 | |---|---|---| | 规范文档章节头 | `governed_by:D-0xx、D-0yy`(只写 ID) | 不写状态值 | | 决策日志索引表 | 全部决策的 ID、日期、状态、决策内容、原因、验证方式 | — | | 决策日志生效登记表 | 仅`试行`/`已接受`的完整生效字段 | 不写提议 | 一个 decision_id 的状态值在整个仓库中只允许出现在生效登记表和索引表状态列。任何第三处副本都是缺陷。 本条的判据不限于状态值:**同一个计数或状态在正文中只允许有一处权威位置,其余位置要么引用它,要么显式声明为绑定该位置版本、与之机械对账的缓存。**据此,来源统计的证据计数在正文中只有一处([00 总览 §2](00-总览.md#component-evidence),已声明为[架构确定 §5.1](架构确定.md#component-stats) 的缓存);逐章的证据强度不在正文,在效力为零的[追溯账本](追溯账本.md)。 **本节是一种载体实现。** 其语义要求为:每条规则可追溯到唯一的效力声明位置,且状态值在全规范中只有一处副本。用章节头、结构化字段还是任务系统属性承载,由项目决定,见 [D-020 §9](09-跨工具通用性.md#relation-d014)。 ## 8. 效力冲突 1. 两条生效规则在同一 scope 内给出相反判定时,失败关闭:停止并报告,不由执行者挑选。 2. `blocks` 与 `grants` 冲突时,`blocks` 优先。 3. scope 重叠但粒度不同时,较窄 scope 的规则优先;粒度无法比较时按第 1 条处理。 4. 索引表状态与生效登记表不一致时,以生效登记表为准,并标记为待修复缺陷。 ## 9. 机械检查 本条只声明**语义要求**,不规定实现载体。 语义要求:效力标注必须可被机械校验,至少覆盖——引用的 decision_id 存在;生效登记项的必需字段齐全;`试行`项未超过 `expiry`;索引与生效登记一致;正文不存在第三处状态值副本;**每条规则在其追溯记录中有且只有一条对应项,编号一致**(追溯与规则分处两份文件时,这一项是它们之间唯一的硬约束)。 **不规定**用什么语言、扫描什么文件格式、在哪个环节运行。因为效力标注的载体本身随工具而变:入口文件可能是 `AGENTS.md`、其它工具约定的入口名、按路径匹配的规则目录、IDE 指令配置或任务系统字段。规定其中任何一种,都会把本规范焊死在一种工具上(D-020)。 一份针对 Markdown + Git 仓库的参考实现见[附录·载体实例](附录-载体实例/README.md)。**它不属于规范正文,不产生任何效力**,只用于证明该语义要求可被机械化,以及展示"载体绑定"具体长什么样。 任何此类校验都是 checker,不是 Gate——把它接成阻断需要单独的 Gate 决策(见 D-018)。 ## 10. 本决策的验证方式 用以下反例桌面推演,每条都应被上述条款挡住: | 反例 | 应触发的条款 | |---|---| | Agent 读到提议中的"AI 可自动写入记忆"并据此写入 | §1 提议不授权;§3 不可用于自我授权 | | Agent 读到提议中的"必须有验收证据"并拒绝把已完成任务收尾 | §3 允许拒绝方向——**本例中拒绝是允许的**,但须按 §4 报告而非静默阻断 | | 项目未定义任何 Gate,Agent 判定"生效 Gate 全部通过" | §4 UNDETERMINED | | 批准了一条 CI 阻断规则,Agent 据此认为自己获得了合并权限 | §2 blocks 不产生 grants | | 试行规则过期,Agent 追溯作废三个月前的验收 | §6 历史不追溯 | | 正文写"(已接受)"但登记表中该决策仍为提议 | §5、§8.4 以登记表为准并标缺陷 |