|
代码平台(GitHub) |
项目平台(Multica) |
| 负责 |
合并规则、自动检查、部署 |
任务状态、角色配置、触发和定时 |
| 谁能改 |
只有人 |
agent 和人 |
能不能合并只由代码平台判断,项目平台的状态只用来调度,因为 agent 能改的状态拦不住 agent。
| 约束 |
由什么保证 |
agent 能绕过吗 |
| 写代码的不能评审自己 |
Implementer、Reviewer 用不同 GitHub 账号;GitHub 不允许作者批准自己的 PR |
不能(前提是账号隔离) |
| 不过检查不能合并 |
规则集的必需检查 check,只认 GitHub Actions 上报的结果(integration_id 15368),防止用 API 伪造状态 |
不能 |
| 新提交会作废旧批准 |
规则集:dismiss stale reviews、require approval of the most recent push |
不能 |
| 规则文件只能由人改 |
CODEOWNERS 保护 .github/、ops/agents/、Makefile、.jscpd.json,规则集要求 Code Owner 审批 |
不能 |
| 任何人都不能豁免 |
规则集的 bypass list 留空,管理员也不例外 |
不能 |
| 强推、删主干 |
规则集:restrict deletions、block force pushes |
不能 |
| PR 不超过 400 行、重复代码不超标 |
gate.yml 里的检查(阈值在受保护的文件里) |
不能 |
| 约束 |
风险 |
怎么发现 |
| 只有人能把任务改成“已批准” |
agent 也有改状态的权限 |
每日摘要里的批准核对 |
| Planner 不写代码 |
它的机器上有代码 |
Planner 用只读 + Actions 的 token(planner 账号) |
| 验收要看线上真实结果 |
Planner 可能偷懒只看代码 |
评论里必须贴证据;人每周抽查 |
| 打回、验收失败到上限就升级 |
agent 可能忘记 |
loop-guard.sh 从记录里算,巡检重新计算 |
aiwf github 会按仓库的归属和套餐判断能做到哪一级:
| 等级 |
仓库 |
规则集 |
自动合并 |
合并队列 |
谁来合并 |
| full |
组织的公开仓库;组织私有仓库 + Enterprise Cloud |
有 |
有 |
有 |
平台:检查通过后自动合并,合并队列保证合并前在最新主干上重跑检查 |
| standard |
个人公开仓库;个人 Pro、组织 Team 的私有仓库 |
有 |
有 |
没有 |
平台:检查通过后自动合并 |
| none |
GitHub Free 的私有仓库 |
没有 |
没有 |
没有 |
Reviewer 批准后,等检查全绿自己合并(降级模式) |
- standard 没有合并队列:两个 PR 各自检查通过、先后合并后,主干上的组合可能是坏的。靠合并后的部署、Planner 验收和巡检兜底。
- none 是降级模式:所有“硬约束”都退化成指令约束,
aiwf doctor 会一直标黄提醒。适合先试用,正式用请把仓库改公开、升级 Pro,或迁到 Team 套餐的组织,再运行一次 aiwf github --apply。
- 谁来合并由
ops/agents/scripts/merge-mode.sh 当场判断:规则集 ai-workflow 生效且允许自动合并时输出 platform,Implementer 开自动合并;否则输出 reviewer,Implementer 不能执行 gh pr merge --auto——没有平台闸门时它不会报错,而是立即合并,绕过评审和检查(端到端验证时真的发生过)。
还没准备机器账号时,Implementer 和 Reviewer 只能用同一个 GitHub 账号,GitHub 不允许它批准自己的 PR。aiwf github --apply --trial 会把规则集改成不要求审批(也不要求 Code Owner 审批和最后一次推送审批),其余规则不变:
- Reviewer 的
gh pr review --approve 会失败,指令里要求它改用评论评审,并以【批准】或【阻塞】开头,打回次数照样能统计;
- 评审独立性不再由平台保证,
aiwf doctor 会标黄;
- 准备好机器账号后:写进 aiwf.conf 的
AIWF_IMPL_BOT / AIWF_REVIEW_BOT,在各自机器上登录 gh,然后不加 --trial 重新运行 aiwf github --apply。
- 每个机器账号的 token 只授权本仓库、带过期时间、只给最小权限(见第 1–3 步 GitHub)。
- 不同账号跑在不同机器上,至少是不同的系统用户或容器,避免互相读到凭据。
- Multica agent 的
custom_env(registry 的 env_file)以明文存在 Multica 服务端,不要放生产数据库密码这类高价值的长期凭据。
- 部署 webhook 地址里带凭据,只存在 GitHub secret
MULTICA_DEPLOY_HOOK 里,aiwf 不会打印它;泄露了就 aiwf multica --apply --rotate-webhook 重新生成。