Files
Agent-System/.doc/audit/2026-09-29-governance-drill-record.md
T
weichen 8b4db5fe83
CI / go-vet-and-short-test (pull_request) Failing after 0s
CI / backup-restore-drill (pull_request) Failing after 0s
CI / web (pull_request) Failing after 2m11s
docs(multi-repo): U1 closeout - baseline inventory, governance drill record, implementation plan
- U1.4: dev synced fast-forward (fabd85a6..1bb48030, 337 commits), 11 tags pushed
- D5: 25 merged stale remote branches deleted, 10 remain
- U1.5 drill: branch protection N1-N5 all pass; self-approval forbidden by Gitea
  -> D2' amendment: agent-bot account created (author/reviewer separation)
- CI root cause found+fixed: docker network pool exhaustion (24 stale job networks pruned)
- D7: new migration workspace directive (no in-place Agent-System breakage)
2026-09-29 02:34:12 +00:00

4.1 KiB
Raw Blame History

title, date, task_id, drill_repo, basis
title date task_id drill_repo basis
U1 治理演练记录:Gitea 原生门禁与 CI 可用性验证 2026-09-29 multi-repo-design-2026-09-28 weichen/governance-drill-2026-09 (private, 验证后保留至 U2b 收口再删) 2026-09-29-multi-repo-implementation-plan.md Phase 0 / U1.5

U1.5 演练结论(全部通过)

环境:Gitea 1.27.3(本机 docker:gitea-server/gitea-db/gitea-runner),runner home-runner, 标签映射:ubuntu-latest→docker://gitea/runner-images:ubuntu-latest、docker→docker://docker:dind(不可用)、nightly→host。

分支保护与 PR 门禁(负例 + 正例)

保护配置(drill main):enable_push=false、required_approvals=1、dismiss_stale_approvals=true、 block_on_outdated_branch=true、apply_to_admins=true、status_check_contexts=[pr-verify / verify (pull_request)]。

编号 场景 结果
N1 admin 身份 HTTP 直推保护分支 拒绝(pre-receive hook declined;apply_to_admins=true 生效)
N2 API PUT /contents 写保护分支 拒绝(user cannot commit to repo)
N3 无批准合并 PR 拒绝(Does not have enough approvals)
N4 批准后 head 新提交再合并 拒绝(陈旧批准被撤销);重新批准后可合并
N5 required status check 未完成时合并 拒绝(405 Please try again later);CI success 后合并成功
自批准 作者批准自己的 PR Gitea 1.27.3 硬禁止(approve your own pull is not allowed),admin 亦不可

合并语义:merge 后 base.sha=merge_commit_sha(0540e27c),merged_by=审核者(weichen)而非作者。 PR #2/#3 全流程:agent-bot(作者)→ weichen(批准+合并),作者/审核者分离经 Gitea 原生强制。

D2' 决策修正:agent-bot 机器账号

单账号下 required_approvals=1 永远无法满足(自批准被硬禁止)。 已创建机器账号 agent-bot(凭据存 ~/.secrets/agent-bot,token scope:write:repository, read:user): 编码 Agent 以 agent-bot 提交/建 PR;用户以 weichen 批准并合并。原方案 D2"不建机器人账号"据此作废。

CI 可用性与根因修复

发现并修复 Agent-System CI 自 2026-09-24 起全红的根因:

  1. docker 网络地址池耗尽:历史 CI 任务遗留 24 个 GITEA-ACTIONS-TASK-* 桥接网络未清理, 默认地址池(~16 个 /16 池)占满,此后所有 docker 模式任务创建 job 网络时报 all predefined address pools have been fully subnetted 秒败。已清理全部 24 个陈旧网络(10 个网络保留), 清理后 ubuntu-latest docker 模式任务验证成功。
  2. nightly host 模式失败为当时环境问题:09-24~28 日志显示 runner 容器内 github.com DNS(fake-ip 198.18.0.1)拒绝; 当前 DNS(192.168.3.1)下 runner 容器可访问 github.com,actions/checkout@v4 克隆探针成功。
  3. docker:dind 标签的镜像拉取在本机挂死,该标签不可用;工作流避免使用。

Workflow 路径行为(实例特性)

  • 新仓库只有 .gitea/workflows/ 路径触发(树级检测:文件未被本次提交修改也会触发); drill 仓 .github/workflows/ 从未触发(含文件被修改的推送)。
  • 存量 Agent-System 仓 .github/workflows/ 正常触发(run 74 = 本日 dev 推送,179 个历史任务均来自该路径)。
  • 结论:现有 Agent-System 维持 .github/workflows/ 不迁移;新建仓库一律用 .gitea/workflows/。 实例对不同仓库的路径检测差异根因未深究,已记录为已知行为。

遗留状态

  • drill 仓任务 183/185(docker:dind 拉取挂死)在 UI 呈 running 僵尸态,无实际执行,仓库删除时一并消失。
  • 演练仓保留至 U2b 完成(作为保护配置参照),之后删除。

对 U2b 的直接输入

  • dev/test/main 保护字段组合与白名单保底方案(weichen 进 push whitelist 以不破坏现有直推流程)。
  • required checks 的 context 命名格式:<workflow> / <job> (<event>)。
  • 新流程红线:作者≠批准者由 Gitea 强制;Agent 不得以 weichen 身份批准自己的 PR。