瀏覽 1.1.1 文件
1.1.1

附錄:.ait/config.json

目前 1.1.1 持久化 Repository 設定的完整約定,包含歸屬、預設值、生命週期寫入方、worktree 覆蓋項與恢復邊界。

適用對象: 開發者、維運與 Repository 所有者

約定與權威#

.ait/config.json 是 1.1.1 裡權威的、持久化的 Repository 設定。它儲存 儲存庫身份與路由、工作流程預設值、遠端註冊資訊、Task worktree 放置位置,以及 一小組由 AIT 託管的執行時提示。這一頁把目前支援的每個欄位和巢狀欄位都 列全。

有三個 JSON 面是相關的,但彼此不能互換:

權威與行為
.ait/config.json持久化的儲存庫級權威。AIT 從規範的 Repository 根目錄讀這個檔案。
.ait-worktree.json某個已物化 worktree 裡由 AIT 託管的疊加層。非 null 的疊加值只在那個 worktree 的生效執行時裡替換對應的根值。
ait config show --json經過預設值、推導、actor 檢測、遠端解析和 worktree 疊加之後的生效診斷投影。它不是這兩個檔案中任何一個的逐位元組呈現。

JSON 讀取器在改寫某個設定時,可能會把不認識的 key 原樣保留下來。保留並 不等於支援。別把任意 key 當成擴充套件點。

安全的修改邊界#

只要 1.1.1 提供了擁有某個值的那條命令,就用那條命令:

程式碼 · bash
ait config show --json
ait config set --workflow-mode solo_remote
ait config set --id-namespace-prefix W
ait config unset task-worktree-main-seed-ram-max-bytes
ait remote add origin https://server.example.invalid --default
ait doctor memory-root --json

ait config set 接受十項使用者持有的設定,ait config unset 接受八項可選 覆蓋項。儲存庫索引、Line 選擇器、遠端記錄、推匯出來的作用域、Plan 繫結的 內部細節、worktree 疊加層和等待提示,都不能透過 ait config set 寫。讓 擁有它們的那條 AIT 生命週期去寫。

如果確實要維護某個只能改檔案的高階值,就先停掉併發的 AIT 變更,留一份 可信副本,原子地寫入合法 JSON,驗證結果之後再繼續幹活。絕對不要照抄別的 Repository 的 repository_index、遠端對映或 worktree 疊加層。

有代表性的根檔案#

這份中性樣例只是展示常見形狀;它不是恢復用的模板。server 分配的索引、 遠端後設資料、各種路徑和身份,都必須來自這個 Repository 自己的生命週期。

程式碼 · json
{
  "repo_name": "sample-project",
  "default_line": "main",
  "current_line": "main",
  "default_remote": "origin",
  "repository_index": 42,
  "remotes": {
    "origin": {
      "remote_id": 1,
      "url": "https://server.example.invalid",
      "repo_name": "sample-project",
      "created_at": "2026-08-17T08:00:00Z"
    }
  },
  "id_namespace_prefix": "W",
  "policy_profile": "prototype",
  "default_author_mode": "ai_with_human_review",
  "workflow_mode": "solo_remote",
  "workflow_default_scope": "remote",
  "task_default_scope": "remote",
  "change_default_scope": "remote",
  "sprint": "on",
  "plan_task_binding": { "mode": "required" },
  "task_worktree": {
    "alias_root": ".ait-worktree-links",
    "main_seed_ram_max_bytes": 8589934592
  }
}

全新初始化#

ait init 會建立 repo_namedefault_linecurrent_line、一個為 null 的 default_remote、一個空的 id_namespace_prefixpolicy_profiledefault_author_modesprintplan_task_binding。在受支援的宿主上, 它還能記錄檢測到的 task_worktree.memory_root。可選的預設模型之後用 ait config set --default-model <model> 設定。

預設 Line 是 main。沒有明確給出 Repository 名時,用規範根目錄的目錄名。 全新的策略檔位是 prototypeteamrelease 之一;它必須和 .ait/policy.yaml 一致。

儲存庫身份與 Line 選擇#

欄位JSON 約定歸屬、預設與修改方式
repo_name非空字串。ait init 寫入。老儲存庫裡如果缺這個欄位,執行時回落到規範根目錄的目錄名。它不是遠端身份。
default_line非空的 Line 名字串。ait init 寫入;預設時回落到 main。改動由儲存庫初始化流程負責。
current_line非空的 Line 名字串。由 AIT 的 Line 操作維護,表示規範根上選中的 Line。預設時回落到 default_line
default_remote遠端名字串或 nullait remote add ... --default 寫入。非 null 的值必須對應 remotes 裡的某一項;預設表示沒有預設遠端。
repository_index無符號 32 位整數。由 server 分配,ait remote add 負責持久化。一旦存在,1.1.1 就拒絕用新傳回的索引替換它。沒有公開的 setter。
id_namespace_prefix只含 ASCII 字母或數字的字串;按大寫儲存。空值也合法。ait initait config set --id-namespace-prefixait config unset id-namespace-prefix。目前 server 名稱空間最多兩個字元;用空值,或者用客戶端和 server 都接受的值。

策略、溯源與本地評審人預設值#

欄位JSON 約定歸屬、預設與修改方式
policy_profileprototypeteamreleaseait init 選定;它必須等於 .ait/policy.yaml 裡的策略 ID。別隻改一邊。
default_author_modehuman_onlyhuman_with_ai_assistai_with_human_reviewai_only_experimentalait initait config setait config unset。預設時解析為 ai_with_human_review
default_model存在時為非空字串。ait config set --default-modelait config unset default-model 會刪掉它。預設時報告為 null。
user_name存在時為非空字串。ait config setunset。這是必需評審或自動功能性 Task 評審所用的唯一設定身份。
user_email存在時為非空字串。ait config setunset。用於非 Task 評審的 actor 身份展示面。
task_review布林值:true 表示必需;false 表示自動。ait config set --task-review requiredait config set --task-review automatic 會把這個詞轉成上面的布林值。預設時解析為自動。

生效的 actor 也可能來自 AIT_NATIVE_ACTOR。所以 ait config show --json 顯示出來的生效值,可能和存下來的身份欄位不一樣。

工作流程預設的聯動#

設整套預設,別單獨去改它下面那些從屬欄位:

workflow_mode儲存的作用域值
solo_localworkflow_default_scopetask_default_scopechange_default_scope 都是 local
solo_remoteworkflow_default_scopetask_default_scopechange_default_scope 都是 remote

ait config set --workflow-mode <value> 會寫 workflow_mode 和那三個作用域 欄位。除非同一條命令裡帶了 --sprint off,否則它還會寫 sprint: "on"plan_task_binding.mode: "required"

欄位JSON 約定歸屬、預設與修改方式
workflow_modesolo_localsolo_remoteteam_remoteait config set --workflow-mode。預設或不自洽時,生效投影由各作用域和 Plan 繫結推導得出,可能報成 custom
workflow_default_scopelocalremote由工作流程預設寫入。預設時解析為 local
task_default_scopelocalremote由工作流程預設寫入。預設時繼承 workflow_default_scope
change_default_scopelocalremote由工作流程預設寫入。預設時繼承 workflow_default_scope
sprintonoffait initait config set --sprint。只要它存在,它就是 Plan 繫結的生效權威。
plan_task_binding.modeoffadvisorystrictrequired目前的公開寫入方在 sprint 開啟時寫 required,關閉時寫 off。如果 sprint 預設,就由這個物件提供生效模式;兩者都預設時,1.1.1 會預置 required

改這些預設值,不會搬動或改寫已有的 Task、Change、Plan 繫結或 worktree。 已經開始的工作,按它開始時記錄下來的那份約定走完。

遠端對映#

remotes 是一個以本地遠端名為 key 的物件。它的公開寫入方是 ait remote add

欄位JSON 約定歸屬與行為
remoteskey 為非空遠端名的物件。預設表示沒有註冊過遠端。每個 value 都必須是物件。
remotes.<name>.remote_id有符號整數。AIT 分配下一個本地序號。老條目沒有這個欄位時,按它在對映中確定性的序號讀取,但目前寫入都會帶上它。
remotes.<name>.url非空字串。傳給 ait remote add 的必填 server 基礎 URL。
remotes.<name>.repo_name非空字串,或預設。AIT 記錄用於 server 註冊的規範 Repository 目錄名。
remotes.<name>.created_atRFC 3339 時間戳字串。AIT 記錄註冊時間。老記錄可能沒有。

遠端 URL 可能暴露內網拓撲。它是路由資料,不是憑據。認證 token 屬於程序的 機密邊界,不該放在這個檔案裡。

task_worktree 物件與 AIT_RAM#

欄位JSON 約定歸屬、預設與修改方式
task_worktree物件或 nullait init 可以補上檢測到的 memory root 資料。預設時仍然允許宿主探測和回落到持久磁碟。
task_worktree.memory_root.kindmacos_ram_volumelinux_memory_rootwindows_ramdisk必須和宿主一致,也要和 ait doctor memory-root --json 期望的證明一致。
task_worktree.memory_root.root非空路徑字串。記憶體支撐的根目錄。由維運維護;用絕對路徑,診斷和恢復時才不會有歧義。
task_worktree.memory_root.volume_name非空字串,或預設。僅 macOS 用的卷標。其他 kind 會忽略它。macOS 上預設時,AIT 可以從掛載點的 basename 推導。
task_worktree.memory_root.sector_count正整數,或預設。macOS RAM 盤容量,以 512 位元組扇區計。預設時用 16,777,216 個扇區,正好 8 GiB。其他 kind 會忽略它。
task_worktree.ephemeral_root非空路徑字串,或預設。只能改檔案的 Task 執行時根目錄。相對路徑從規範的 Repository 根解析。預設時,只要有可用的有效 memory root,就據此推導執行時位置。
task_worktree.alias_root非空路徑字串,或預設。ait config set --task-worktree-alias-root;相對路徑從 Repository 根解析。預設時用 .ait-worktree-links
task_worktree.main_seed_ram_max_bytes非負整數,或預設。ait config setait config unset task-worktree-main-seed-ram-max-bytes。預設表示沒有設定 Snapshot 大小的截斷線;它不代表實體記憶體無上限。

記憶體放置是在建立新的 Task worktree 時評估的。嚴格大於所設定 main seed 上限 的 Snapshot,會走 Repository 內部的持久儲存。除此之外,AIT 能用就用經過 校驗的受支援 RAM 根,用不了就回落到 Repository 內部的持久儲存。完整的 隔離、容量和恢復行為見 並行 Task 隔離

由 AIT 託管的執行欄位#

欄位JSON 約定歸屬、預設與行為
worktree_name非空字串,或預設。AIT 會臨時把規範根繫結到某個活動的受管 worktree,並在清理時解除繫結。別手改它。
workflow_ready_poll_seconds數字。AIT 從最近的遠端歷史裡學出一個取整後的就緒等待估計值。為正的生效值會被夾到 5 到 900 秒之間;0 表示嘗試過引導但沒有可用樣本。預設表示沒有快取的估計值。
workflow_land_poll_seconds數字。同樣是 AIT 持有的估計值,用於遠端 Land 完成。它有同樣的 5 到 900 秒生效邊界和 0 引導標記。

這些等待值只是給使用者反饋用的提示,不是就緒、策略或超時方面的權威。刪掉 或改掉它們,並不會讓某個操作完成。

已有檔案裡的相容欄位#

這些欄位可以留在升級過來的儲存庫裡。這裡寫出來是為了讓備份或審計看得懂; 別把它們加進全新的 1.1.1 檔案。

欄位JSON 約定目前 1.1.1 裡的含義
repo_id早期的不透明字串。保留的相容資料。目前 server 的路由身份是 repository_index;不得用 repo_id 來選定遠端權威。
snapshot_binary_db_storage已有的標量值。目前執行時一律使用 Binary DB layout 1,忽略這個選擇器的取值。不寫它,儲存行為完全一樣。
plan_binary_db_storage已有的標量值。對 Plan 權威同樣是固定的 layout 1 行為。
remote_sync_binary_db_storage已有的標量值。對遠端同步權威同樣是固定的 layout 1 行為。
plan_task_binding_mode早期的標量模式。只被一條有界的相容路徑使用。目前設定讀寫的是 plan_task_binding.mode;別把這個標量加進新檔案。

完整的 worktree 疊加層#

AIT 會在受管 worktree 裡建立 .ait-worktree.json,並把其中每個非 null 的 值疊加到根設定之上,只對那個 worktree 生效。Task worktree 會用到下面這些 欄位:

欄位JSON 約定含義
worktree_name非空字串。穩定的、AIT 持有的物化名稱和清理身份。
current_line非空的 Line 名字串。在這個 worktree 裡選中的 Task 功能 Line。
repo_root絕對路徑字串。規範的 Repository 根,它的 .ait 權威透過受管連結共享出來。
workspace_root絕對路徑字串。物理 worktree 根。它可以和麵向使用者的別名路徑不同。
created_atRFC 3339 時間戳字串。物化時間。
materialized_snapshot_idSnapshot ID 字串,或預設。目前恢復進這個 worktree 的 Snapshot;AIT 會在 restore 和 rebase 操作之後更新它。

這個疊加層是歸屬後設資料,不是可搬運的使用者畫像。別複製它、別編輯它,也別 把受管的 .ait 連結換成另一個權威。

驗證、備份與恢復#

做完一次受支援的改動之後,把生效投影和相關子系統都驗一遍:

程式碼 · bash
ait config show --json
ait remote list --json
ait status --json
ait doctor memory-root --json

備份整個 .ait 權威,不要只備份 config.json。這個檔案裡有 server 分配 的儲存庫索引和遠端路由,把本地權威重新接回已有的異地副本要靠它們。分享 診斷資訊之前,先把 server URL、本地路徑、姓名和郵箱地址脫敏掉。這個檔案 裡不應該出現密碼、bearer token 或整合用的機密。

萬一本地權威丟了,別指望對著一個同名的已有 server Repository 跑 ait remote add 就能重新掛上。作為已儲存本地權威的一部分,先恢復可信的 repository_indexdefault_remoteremotes 路由資料,用 ait config show --jsonait repo show --remote origin --json 驗證, 然後先預覽 ait remote recover-head --remote origin,再考慮加 --apply。如果確切的已儲存路由恢復不了,就停下來,別去造一個替代權威。

相關#

版本權威

對照 1.1.1 原始碼逐條核對

這一頁是公開文件,不是第二份產品契約。要確認發布權威,請以確切的原始碼和分發契約為準。

所屬元件 Snapshot
  • ait-coreSNP-ED7593DBF982
  • ait-serverSNP-0CCD7DD2A077
  • ait-runnerSNP-35C9C133D2EE
  • ait-pythonSNP-756C731A4CC0
  • ait-nodeSNP-55E90D0A81F1