跳转至
ACTIVE

Agents · Repository Partition · 仓库分区铁律(v4 · file_claims 协议)

核心原则:K-thread.file_claims 协议 · 写权限属于 K-thread(常驻基础设施线程)· U-thread 通过 occupies 字段临时占用 K-thread · 同一时刻同一 K-thread 只能被一个 U-thread 占用 · 不同 K-thread 不冲突即可并发(突破 v3 "目录独占")

v4 关键变化(2026-05-26 · 配合 ADR-AIOS-06 v0.3 落地): - 权限单元从"目录"升级到 K-thread.file_claims(细到文件级) - 隔离从"目录级互斥"升级到 文件级 conflict avoidance(同一目录不同文件可同时跑) - 全栈 10 进程写权限对齐:P5-backend-csharp / P6-dsp-algo / P7-pysidecar / P_contracts 各自独立写权限矩阵 - P_contracts 仅 ClaudeB 写(沿用 ADR-AIOS-01 v3 决议 · 契约一致性) - 越权检测从"author + 路径 grep"升级到 commit-msg 三元组 hook 校验([occupies=] 与 K-thread.file_claims 子集匹配) - lock 协议废弃 · 由 K-thread state 状态机替代(sleeping/running/extending)

关联: - ADR-AIOS-06 v0.3 · OS 化模型决议 - agents/Roster.md v4 · 9 CPU 实例 + 主战场表 - agents/Process-Model.md · K-thread / U-thread 概念 - agents/Commit-Convention.md · 三元组规范 + git hook - PCB.md · 进程总览(各 PROCESS.md 含 file_claims)


1. v3 → v4 模型升级(权限单元)

1.1 v3 模型(已升级)

权限单元 = 目录(粗粒度)
ClaudeA → frontend_vue3/(全程独占整个目录)
ClaudeB → backend_csharp/ + dsp_algo/ + contracts/(独占 3 个目录)
冲突检测 = git author + 路径 grep

问题:同一目录不同文件不能并发(如 frontend_vue3/stages/xitune/X.vuefrontend_vue3/stages/xilink/Y.vue 实际无冲突,但 v3 不允许两个 CPU 同时改)。

1.2 v4 模型(当前)

权限单元 = K-thread.file_claims(细粒度 · 文件级)
P3.K5-stage-toolbar.file_claims = [stages/xitune/toolbar/*, components/shell/StageBar.vue]
                                  ↑ 这是写权限的最小单位

U-thread 通过 occupies 占用 K-thread:
  P3.U2-tuning-mode-ui.occupies = [P3.K5, P3.K7, P0.K-shared-types]
  → 占用期间这 3 个 K-thread state: sleeping → running
  → 期间任何其他 U-thread 想改 P3.K5 的 file_claims 必须等

冲突检测 = commit-msg 三元组 hook 校验
  [occupies=K_a+K_b+...] 必须 ⊆ U-thread.occupies
  [files=...]            必须 ⊆ ∪(K-thread.file_claims for K in occupies)

优势: - 同进程不同 K-thread 的 U-thread 可并发(如 P3.U-x 占 K3 + P3.U-y 占 K7 → 同时跑给两个 CPU) - 跨进程 K-thread 锁清晰(P3.U2 占 P0.K-shared-types · 期间 P2.U-x 想改 types/widget.ts 必须等) - 文件级冲突检测 · 不再误报"同目录冲突"


2. 全栈 10 进程写权限矩阵(v0.3 对齐)

完整 K-thread.file_claims 列表:见各进程 processes/<pid>/PROCESS.md · 本表只列进程级写权限主战场 + 副战场。

2.1 业务代码进程(04_development/)

进程 物理目录 主战场 CPU(可写) 副战场 CPU(可写) 只读 CPU 备注
P0-xishell(daemon) frontend_vue3/components/shell/ + frontend_vue3/stores/ + frontend_vue3/shared/ ClaudeA ClaudeC(机动) ClaudeB / ClaudeD / Cline-Worker / Copilot-Worker / Continue-Worker 9 K-thread(K1-K6 + K-shared-types/contracts/test-aux)
P1-xilink(user-process) frontend_vue3/stages/xilink/ ClaudeA ClaudeC(机动) ClaudeB / ClaudeD / 其他 7 K-thread
P2-xiforge(user-process) frontend_vue3/stages/xiforge/ ClaudeB ClaudeA(协作)/ ClaudeC ClaudeD / 其他 7 K-thread
P3-xitune(user-process) frontend_vue3/stages/xitune/ ClaudeC ClaudeA(机动) ClaudeB / ClaudeD / 其他 7 K-thread
P4-xitest(user-process) frontend_vue3/stages/xitest/ ClaudeD ClaudeC(机动) ClaudeA / ClaudeB / 其他 6 K-thread
P5-backend-csharp(daemon) backend_csharp/ ClaudeB Copilot-Worker(work-copilot · refresh-link) ClaudeA / ClaudeC / ClaudeD / 其他 9 K-thread(controllers / services / models / websocket / routes / interop / aiagent / extensions / data-persistence)
P6-dsp-algo(daemon) dsp_algo/ ClaudeB ClaudeC(部分 modules) ClaudeA / ClaudeD / 其他 6 K-thread(framework / modules / platform / include / build-system / config)
P7-pysidecar(daemon) pysidecar/ ClaudeB(兼管) ClaudeD(维护 scripts/) ClaudeA / ClaudeC / 其他 3 K-thread(analyzer / reporter / scripts)
P_contracts(daemon) 04_development/contracts/protocol-v1.md ClaudeB(写独占) (无副战场 · 沿用 ADR-AIOS-01 v3) 所有其他 CPU(只读) 1 K-thread(K1-protocol-v1 · ⚠️ Day 5 EOD HARD-DEADLINE)

2.2 调度元数据进程(06_docs/site-build/)

进程 / 路径 写权限 副写权限 只读
P_arch(arch-event 容器)· 40-aios/processes/P_arch/ Cline-AIOS ClaudeB / ClaudeA(被派发 U-thread 时) 其他
40-aios/PCB.md / RUNQ.md / INDEX.md Cline-AIOS - 其他
40-aios/KANBAN-archive-v6.md (只读历史 · 无写权限) - 全员
40-aios/ADR/ Cline-AIOS(终审) ClaudeB(草拟) 其他
40-aios/agents/ Cline-AIOS - 其他
40-aios/Human-*.md / index.md Cline-AIOS - 其他
40-aios/processes/<pid>/PROCESS.md Cline-AIOS(维护 K-thread / U-thread state) - 业务 CPU(只读 · 被派发时引用)
40-aios/processes/<pid>/user_threads/<U>/STEP.md Cline-AIOS(派发提示词时写) - 接收派发的业务 CPU(只读)
30-frontend-vue3/active/ archive/ (历史 · 6 个月 redirect 期不写) - 全员只读(等价 INDEX.md §2 映射)
02-products/ 03-platform/ ..../*.md Cline-AIOS ClaudeB(架构相关) 其他
mkdocs.yml / scripts/aios-*.ps1 Cline-AIOS - 其他
backup/* 分支 Continue-Worker - 其他

2.3 P_contracts 写独占说明(沿用 ADR-AIOS-01 v3)

  • 唯一写权限:ClaudeB(B1 §1-§3 / B2 §4-§6 / B3 §7-§9 / B4 freeze + tag · 后续 protocol-v2 也是 ClaudeB)
  • 只读权限:所有其他 CPU(ClaudeA/C/D / Cline-Worker / Copilot-Worker / Continue-Worker)
  • 理由:
  • 契约一致性(单线写避免协议分裂)
  • ADR-AIOS-01 v3 决议保留(跨栈职能解耦核心铁律)
  • ⚠️ Day 5 EOD HARD-DEADLINE · 多 CPU 写会导致 freeze 时机失控
  • 副战场说明:没有副战场(P5/P6/P7 都允许副战场 CPU 临时介入 · 但 P_contracts 例外 · 这是它独立提升为 daemon 的根本原因)

3. file_claims 协议详细规则

3.1 file_claims 声明位置

  • 每个 K-thread 在所属 processes/<pid>/PROCESS.mdkernel_threads[].file_claims 字段声明
  • 例:
    kernel_threads:
      - kid: P3.K5
        name: stage-toolbar
        state: sleeping
        file_claims:
          - frontend_vue3/src/stages/xitune/toolbar/*
          - frontend_vue3/src/components/shell/StageBar.vue   # via shellSlots bridge
    

3.2 U-thread occupies 子集匹配

派发 U-thread 时必须满足:

∀ f ∈ U-thread.files
  ∃ K ∈ U-thread.occupies
    f ∈ K.file_claims (glob 匹配)

且 ∀ K ∈ U-thread.occupies
  K.state == sleeping  (RUNQ Step 3 校验)

3.3 共享区(shared/)的并发协议

shared/types/ shared/contracts/ shared/test-aux/ 由 P0 daemon 持有 K-thread: - P0.K-shared-types.file_claims = [frontend_vue3/src/shared/types/*] - P0.K-shared-contracts.file_claims = [frontend_vue3/src/shared/contracts/*] - P0.K-shared-test-aux.file_claims = [frontend_vue3/src/shared/test-aux/*]

任何进程都可读 · 但写需要进 RUNQ 显式占用 P0.K-shared-* · 同一时刻只能一个 U-thread 写。

例: - P3.U2.occupies = [P3.K5, P3.K7, P0.K-shared-types] → 写期间 P0.K-shared-types running - 同期 P2.U-x.occupies = [P2.K7, P0.K-shared-types] → ❌ 阻塞(P0.K-shared-types 已 running) - 同期 P2.U-y.occupies = [P2.K7] → ✅ 可并发(K-thread 不冲突)

3.4 跨进程 K-thread 锁

跨进程引用通过 shared_resources.via 显式声明:

shared_resources:
  - via: P0.K-shared-types
    files: [types/xmlTuning.ts, types/tuningMode.ts]
  - via: P_contracts.K1-protocol-v1
    files: [contracts/protocol-v1.md]   # 跨栈契约引用 · 通常只读

写权限规则: - via 指向他进程的 K-thread → 必须把该 K-thread 加入本 U-thread 的 occupies(并参与 RUNQ Step 3 校验) - 没有 via 声明的跨进程文件引用 → 越权(commit-msg hook 检测)


4. K-thread 状态机(替代 v3 lock 协议)

state 含义 触发
sleeping 空闲 · 无 U-thread 占用 默认初始 + U-thread zombie 释放后
running 正被某 U-thread 占用 RUNQ 派发 U-thread 时(Step 5)
extending 架构升级中(file_claims 范围扩展) ADR 触发 K-thread 扩展(罕见 · 例如 P3.K7 加入新 store)

4.1 状态变更触发

触发事件 K-thread state 变化
RUNQ 派发 U-thread sleeping → running(per K in U.occupies)
U-thread 完成最后 commit · [step=N/M] 中 N==M running → sleeping(commit-msg hook 触发)
ADR 决议扩展 K-thread.file_claims sleeping → extending → sleeping(扩展完后)
K-thread 扩展期间禁止派发依赖它的 U-thread RUNQ Step 3 把 extending 视同 running 阻塞

4.2 PCB 中的可视化

详见 PCB.md §2 K-thread 占用快照(当前 running 的 K-thread)。


5. 越权检测与 git hook 校验

5.1 commit-msg 三元组规范回顾

<type>(<pid>.U<N>/<thread-name>): <subject>

[step=<N>/<M>] [pid=<P>] [uid=U<N>] [occupies=K<a>+K<b>+...] [files=<f1>,<f2>,...]
[ipc=<channel>|none]

详见 agents/Commit-Convention.md

5.2 越权检测规则(commit-msg hook 自动校验)

越权类型 检测规则 处置
files 不在 occupies 的 file_claims 并集中 files ∩ (∪ K.file_claims for K in occupies) ≠ files hook 拒绝 commit + 报错"越权:files 超出 K-thread.file_claims 范围"
occupies 中某 K-thread state ≠ running 检查 processes/<pid>/PROCESS.md 中各 K state hook 拒绝 commit + 报错"K-thread 未在派发态 · 你不该 commit"
U-thread state ≠ running 检查 processes/<pid>/PROCESS.md 中 U state hook 拒绝 commit + 报错"U-thread 未派发或已 zombie"
跨进程 K-thread 引用未声明 shared_resources.via files 跨进程目录但无 via hook 警告(7 天宽限期)+ 后续硬拒
CPU author 与主战场表不匹配且无 trailer git author 不在主/副战场 · 无 [need: <CPU>] trailer hook 警告 + AIOS 在 standup 时仲裁
CPU 在 PROMPT 路径下改 STEP.md(自改提示词) 路径 grep processes/<pid>/user_threads/.../STEP.md + author ≠ Cline-AIOS hook 拒绝 + revert + AIOS 重派
Cline-AIOS 改业务代码(04_development/ 任何路径) author == Cline-AIOS + 路径在 04_development hook 拒绝(除非 emergency hotfix · 必须 ADR 备案)

5.3 7 天宽限期

ADR-AIOS-06 落地后 7 天内 · 旧格式 commit 仅 warning · 不硬拒。期间业务 CPU 适应新规范。 2026-06-02 起 · commit-msg hook 进入 strict mode · 所有违规硬拒。

5.4 兜底:AIOS 每日 standup 跑 audit 脚本

powershell -NoProfile -ExecutionPolicy Bypass -File scripts\aios-standup-fetch.ps1

(详见 T16 升级后的脚本)· 输出过去 24h 内的: - ✅ 合规 commit 数 / 越权 commit 数(警告级) - ❌ 硬越权(commit 已被 hook 拒绝但仍 push 的 · 罕见) - ⚠️ 缺三元组的 commit(7 天宽限期内)


6. 边界情形(灰色地带 · v4 重写)

6.1 ClaudeA 发现 P5 backend 有 bug

错误:自己 stash + 跨进程改 P5.K 文件(越权 · file_claims 不在 ClaudeA 主战场) ✅ 正确*:在 commit message 里写 trailer [need: ClaudeB] P5.K5 bug at <file>:<line> → AIOS 在 standup 派 P5.U-bugfix-NN 给 ClaudeB

6.2 ClaudeB 想加一个前端组件

错误:自己改 frontend_vue3/(P0-P4 主战场是 ClaudeA/C) ✅ 正确:写 P_contracts.U-protocol-vN 草稿 + 在 P2/P3 PROCESS.md 起新 U-thread 行 → AIOS 派 ClaudeA/ClaudeC 实施

6.3 ClaudeB 闲置时

  • 不要跨进程写前端
  • 正确做法(沿用 v3 提前铺路 · 升级到进程化语言):
  • 提前完成 P_contracts.U-thread(B2/B3)给 ClaudeA 下下个 phase 用
  • 提前完成 P5.U-source-sink-api(Week 3 末 HARD-DEADLINE)
  • 接 AIOS 派的 P_arch.ADR-NN 草稿任务

6.4 紧急生产 hotfix 跨多进程

例外协议: - 人类(你)在 standup 标 🔴 EMERGENCY-CROSS-PROCESS - AIOS 临时授权(或亲自跑)跨界改动 · 临时降级 commit-msg hook - 修复后 24 小时内补 ADR(P_arch/ADR-AIOS-NN-emergency-hotfix-YYYY-MM-DD/)说明跨界原因 + 受影响 K-thread

6.5 多 CPU 同时改不同 K-thread(v4 新增)

允许(v3 不允许 · v4 鼓励): - ClaudeA 改 P3.K3-right-dock(file_claims 在 stages/xitune/right/) - ClaudeC 同时改 P3.K7-stores(file_claims 在 stores/) - → 同进程不同 K-thread · 不冲突 · RUNQ Step 3 都 sleeping · 双派发

6.6 K-thread.file_claims 扩展(架构升级)

例:ADR-04 P0 决议把 widget 注册表加入 P2.K7 的 file_claims。 流程: 1. ADR-AIOS-04 §X 写明 K-thread.file_claims 扩展范围 2. AIOS 把 P2.K7.state: sleeping → extending(锁定) 3. 派 U-thread(P2.U3-widget-registry)修改 PROCESS.md(扩展 file_claims)+ 实施代码 4. U-thread zombie 后 P2.K7.state: extending → sleeping(释放) 5. PCB.md / INDEX.md 同步更新


7. 物理隔离(资源层 · v4 更新)

CPU 物理 端口 进程
ClaudeA(CLI #1) claude code 终端 #1 5173(vite dev) pnpm dev in frontend_vue3/
ClaudeB(CLI #2) claude code 终端 #2 5000(dotnet) dotnet run in backend_csharp/
ClaudeC(CLI #3) claude code 终端 #3 (按需) 测试 / 机动任务
ClaudeD(CLI #4) claude code 终端 #4 (按需) 测试 / P4 / P7 维护
Cline-Worker Claude Code in work-cline/ 5174 / 5001(独立) 独立 worktree · 主力 sync 任务
Copilot-Worker Copilot 终端 in work-copilot/ 5175 / 5002(独立) refresh-link 收尾
Continue-Worker Continue 插件 in work-continue/ 8000(mkdocs) 文档同步 + 备份
Cline-AIOS VSCode 插件本会话 -(只读 04_*) 调度内核 · 不跑 dev server
Copilot 内联 VSCode 行内补全 -(IDE 内嵌) 人类打字时灰字

9 个端口互不冲突(并发域 A 用同一仓库不同终端 · 并发域 B 用独立 worktree 端口分配)。

v4 简化:每个 CPU 只跑自己主战场进程对应的 dev server(如 ClaudeB 全程不跑 vite · ClaudeA 全程不跑 dotnet)。


8. 验证脚本(升级 v3 · 待 T16 集成到 aios-standup-fetch.ps1)

8.1 越权检测(file_claims 协议)

# 1. 检查 commit message 三元组合规率(过去 24h)
git log --since="24 hours ago" --pretty=format:"%h %an %s%n%b" \
  | grep -E "^\[(step|pid|uid|occupies|files|ipc)=" -c
# 输出应 ≥ commit 总数 × 6(每个 commit 6 行三元组)

# 2. 检查 ClaudeA 的 commit files 是否在 P0/P1/P2/P3/P4/P_contracts(前端)的 file_claims 中
# (具体由 commit-msg hook + audit 脚本完成 · 详见 T16)

# 3. 检查 ClaudeB 的 commit 是否触及 frontend_vue3/(除非有 trailer)
git log --since="24 hours ago" --author="claudeb" --pretty=format:"%h %s" \
  -- frontend_vue3/
# 输出应为空(除非配 [need: ClaudeA] trailer)

# 4. 检查 P_contracts 的写独占
git log --since="24 hours ago" --pretty=format:"%h %an %s" \
  -- 04_development/contracts/protocol-v1.md \
  | grep -v -i "claudeb"
# 输出应为空(只有 ClaudeB 能改)

# 5. 检查 Cline-AIOS 是否触及 04_development/
git log --since="24 hours ago" --author="Cline" --pretty=format:"%h %s" \
  -- 04_development/
# 输出应为空(除 emergency hotfix)

# 6. 检查 STEP.md 是否被业务 CPU 自改
git log --since="24 hours ago" --pretty=format:"%h %an %s" \
  -- 'docs/08-implementation/40-aios/processes/**/user_threads/**/STEP.md' \
  | grep -v -i "cline-aios\|cline"
# 输出应为空(只有 Cline-AIOS 写 STEP.md)

8.2 K-thread 状态校验

# 检查 PCB.md §2 显示的 running K-thread 与 PROCESS.md 中 state 字段是否一致
# (由 T16 后续脚本完成)

9. v3 → v4 迁移指引(给业务 CPU 读)

9.1 你需要做什么

  1. commit message 加三元组(7 天宽限期 · 见 Commit-Convention.md)
  2. 派发时读 STEP.md 而不是 PROMPT-claudex-xxx.md(路径已 T7 git mv · 见 INDEX.md §2)
  3. 跨栈协作走 trailer([need: <CPU>])· 不直接改对方主战场
  4. 共享区(shared/)写需占用 P0.K-shared-*(在 occupies 中声明)

9.2 你不需要做什么

  • ❌ 不需要手动维护 KANBAN.md(已 archive · 由 PCB.md / RUNQ.md 替代 · Cline-AIOS 维护)
  • ❌ 不需要在派发前读全局 KANBAN(读你拿到的 STEP.md 即可)
  • ❌ 不需要担心目录粒度太粗(v4 是文件级 · 你和别人不会因"同目录"被阻塞)

10. 演进规则

何时修改本文件 处理
新增进程(如 P8) Cline-AIOS 在 §2 表追加一行 + 同步 Roster.md §7 主战场表
K-thread.file_claims 扩展 写 ADR + 走 §6.6 K-thread.state extending 流程
业务 CPU 能力变化 写 ADR + 修改 Roster.md §3-§4 + 同步本表副战场列
越权事件累计 ≥ 3 重新评估 K-thread 划分 + 可能拆分某 K-thread
新增 CPU(如 Sonnet-5) 重新分配主/副战场 + 同步 Roster.md §1 总表
版本 日期 变化
v1.0 2026-05-19 上午 初始权限矩阵(4 智能体)(已废弃)
v2.0 2026-05-19 傍晚 时间窗共享 frontend_vue3/(已废弃 · 串行错误)
v3.0 2026-05-19 傍晚晚 跨栈职能解耦 · 目录级独占 · ClaudeA / ClaudeB / contracts 三块
v4.0 2026-05-26 OS 化模型 · K-thread.file_claims 协议替代目录独占 · 全栈 10 进程写权限矩阵 · P_contracts 沿用 ClaudeB 写独占 · commit-msg hook 三元组校验取代 lock · 7 天宽限期