附录:策略与忽略规则
用确切接受的字段和匹配规则,在 .ait/policy.yaml 里配置 1.0.0 的接纳要求,在 .aitignore 里配置仓库可见性。
适用人群: Repository 所有者、开发者与 coding agent
仓库策略与忽略规则#
这一页说明位于仓库根目录、控制接纳要求和文件系统可见性的两个文本文件。 它们解决的是不同的问题:.ait/policy.yaml 决定需要哪些证据; .aitignore 决定 AIT 能看到哪些工作区路径。
.ait/policy.yaml#
ait init 会用仅所有者可读写的权限创建这个文件。它的 policy_id 必须 和 .ait/config.json.policy_profile 一致。1.0.0 支持的策略 ID 有 prototype、team 和 release。
version: 1
policy_id: prototype
defaults:
require_attestation: true
require_tests: true
require_lint: false
require_security_scan: false
require_license_scan: false
require_ai_provenance: false
require_code_review_summary: false
class_overrides:
- when:
content_class: docs_only
set:
require_tests: false
require_lint: false
require_security_scan: false
require_license_scan: false根字段与要求字段#
| 字段 | 类型与含义 |
|---|---|
version | 整数 1。 |
policy_id | prototype、team 或 release 之一;必须等于 Repository 的策略档位。 |
defaults | 必填映射,包含各项基线要求开关。 |
class_overrides | 可选的有序列表,存放按条件生效的部分覆盖项。空列表也合法。 |
每个要求项的值都是确切的 YAML 布尔值:
| 要求项 | 所控制的证据 |
|---|---|
require_attestation | 需要一份已接纳的 attestation。 |
require_tests | 测试证据必须通过。 |
require_lint | Lint 证据必须通过。 |
require_security_scan | 安全扫描证据必须通过。 |
require_license_scan | 许可证扫描证据必须通过。 |
require_ai_provenance | 需要 AI 溯源证据。 |
require_code_review_summary | 需要一份代码评审摘要。 |
覆盖项的 set 映射里接受的也是这同样的七个名字。defaults 必须七个都 写全;set 是部分的,只改它写到的那几个字段。
覆盖项选择器#
class_overrides[] 的每一条都要求有非空的 when 映射和非空的 set 映射。when 接受下面这两个选择器中的一个或两个:
| 选择器 | 可取值 |
|---|---|
content_class | docs_only、code_change |
author_class | human_only、ai_related |
覆盖项按文件里的先后顺序求值。条件要写明确,别让几条互相重叠、结果取决 于排序的条目混在一起。
生成的档位基线#
三个生成出来的档位都要求 attestation 和测试,并且把 AI 溯源和代码评审 摘要这两项要求关掉。它们其余的默认值是:
| 档位 | Lint | 安全扫描 | 许可证扫描 |
|---|---|---|---|
prototype | false | false | false |
team | true | false | false |
release | true | true | true |
生成的「仅文档」覆盖项会把测试、lint、安全扫描和许可证扫描都关掉。改动 生成的策略就等于改动接纳策略;要和对应的档位设置一起评审。
YAML 接受规则#
- 用空格,别用 tab,缩进按两个空格一级。
- 用确切的小写
true和false。 - 重复字段和未知字段一律校验失败。
version、policy_id、defaults以及任何覆盖项映射,都要保持在上面 示例的确切嵌套层级上。- 1.0.0 里首次远程注册只接纳确切的
prototype基线,以及它完整的 「仅文档」覆盖项。注册新 Repository 之前先选好这个档位。本地配置的team和release档位,在受支持的本地用途下仍然是有效的策略文件。
.aitignore#
.aitignore 是一份按行组织的仓库可见性约定。它作用于工作区检查,以及 status、Snapshot 和 Plan 在文件系统发现阶段会考虑的那些文件。它是对 AIT 内置排除规则的补充,不是替代。
# Generated outputs
dist/
*.tmp
# Keep one fixture visible
!fixtures/expected.tmp
# Literal leading markers
\#notes.txt
\!important.txt规则语法#
| 形式 | 行为 |
|---|---|
| 空行 | 忽略。 |
# comment | 忽略。 |
\#name | 匹配开头是字面量 # 的名字。 |
!pattern | 取消前面的匹配,让该路径重新可见。 |
\!name | 匹配开头是字面量 ! 的名字。 |
./path | 开头的 ./ 会被去掉。 |
/path | 锚定到 Repository 根。 |
path/ | 只匹配目录的规则。 |
name | 不含斜杠时,在任意深度上匹配这个 basename。 |
* | 匹配一个路径段内的任意字符序列。 |
? | 匹配一个路径段内的单个字符。 |
规则从上往下求值,最后一条命中的规则说了算。其他正则字符按字面量处理; 字符类语法不在 1.0.0 的匹配器范围内。.aitignore 自身始终可见,这样它 的效果才能被记录和评审。
忽略规则改变的是可见性,不是归属或删除。它不会抹掉已有的 Snapshot,不 构成存放机密的许可,也不会让某个生成目录变得可以放心提交。
验证#
改完这两个文件中的任何一个之后,先做只读检查,再开始正常干活:
ait config show --json
ait status
ait diff做远程注册时,要等策略和 Patchset CI 目录都就绪之后,再真正执行 ait remote add;它的校验才是权威的。