附錄:策略與忽略規則
用確切接受的欄位和匹配規則,在 .ait/policy.yaml 裡設定 1.1.1 的接納要求,在 .aitignore 裡設定儲存庫可見性。
適用對象: Repository 所有者、開發者與 coding agent
儲存庫策略與忽略規則#
這一頁說明位於儲存庫根目錄、控制接納要求和檔案系統可見性的兩個文字檔案。 它們解決的是不同的問題:.ait/policy.yaml 決定需要哪些證據; .aitignore 決定 AIT 能看到哪些工作區路徑。
.ait/policy.yaml#
ait init 會用僅所有者可讀寫的許可權建立這個檔案。它的 policy_id 必須 和 .ait/config.json.policy_profile 一致。1.1.1 支援的策略 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.1.1 裡首次遠端註冊只接納確切的
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.1.1 的匹配器範圍內。.aitignore 自身始終可見,這樣它 的效果才能被記錄和評審。
忽略規則改變的是可見性,不是歸屬或刪除。它不會抹掉已有的 Snapshot,不 構成存放機密的許可,也不會讓某個生成目錄變得可以放心提交。
驗證#
改完這兩個檔案中的任何一個之後,先做只讀檢查,再開始正常幹活:
ait config show --json
ait status
ait diff做遠端註冊時,要等策略和 Patchset CI 目錄都就緒之後,再真正執行 ait remote add;它的校驗才是權威的。