# ADR-003: 本地 Agent 双阶段人工发布

## 状态

Accepted；取代 ADR-001 的自动 CI/CD 决策。

## 日期

2026-07-22

## 背景

AI Gateway 的交付重点是 API 制品能够启动、迁移数据库并通过核心兼容接口。原有 PR、`main` 和 Tag 三套重复质量门禁占用单并发 Runner，发布还要等待外部 dispatcher，反馈与上线时间不符合当前小团队由 Agent 主导运维的模式。

## 决策

- 删除所有 Gitea Actions，不监听 Push、PR、Tag、Webhook、轮询或定时事件。`main` 不设置保护规则或 required status，允许经用户授权的 Agent 直接提交和推送。
- Git 操作与生产授权彻底分离。commit、push、merge 和 Tag 都不会构建或部署。
- 发布分成两次独立的人工作业：本地 `publish` 负责验证、构建、simulation 冒烟、推送不可变镜像并生成带 SHA-256 内容完整性校验的 JSON manifest；用户再次确认后，`deploy` 才把该 manifest 应用到生产。
- 只允许发布工作区干净、已提交且属于 `origin/main` 历史的完整 SHA。Registry Tag 使用完整 SHA，生产 Compose 只接受 `repository@sha256:...`。
- publish 相对当前线上 manifest 选择 API/Web 变更；未变化的组件沿用现有 digest。两阶段之间如果线上基线变化，客户端和服务器都拒绝过期 manifest。
- 待发布镜像在本地临时 PostgreSQL 中执行全部迁移，并逐项记录 health、readiness、OpenAPI、鉴权、模型列表、Chat Completions、Responses、Images 和 Web 反代冒烟。生成接口使用 5ms simulation，不调用真实上游。
- 只有迁移变化时生产才创建并验证 PostgreSQL custom-format 备份。生产探活失败自动恢复上一应用 digest；数据库恢复仍需人工决定。
- 完整测试、依赖审计和漏洞扫描保留为按需人工命令，不再影响镜像发布关键路径。

## 影响

- 不再有自动质量证据或自动发布；用户和 Agent 必须严格遵守两次显式授权边界。
- 允许直接推送 `main` 提高速度，也取消了服务端代码审查强制约束。可追溯性改由干净提交、main 历史、OCI revision、Registry digest 和服务器 release manifest 保证。
- 本机是 `Darwin arm64`，发布脚本必须使用 Buildx 构建并实际运行 `linux/amd64` 镜像。
- Registry、SSH 或生产 helper 不可用时发布失败关闭，不允许退回 `latest`、重建制品或直接修改 Compose。
