chore: bootstrap independent git workflow
Some checks failed
release-smoke / macos-13 / x86_64-apple-darwin (push) Has been cancelled
release-smoke / ubuntu-latest / x86_64-unknown-linux-gnu (push) Has been cancelled
release-smoke / windows-latest / x86_64-pc-windows-msvc (push) Has been cancelled

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Paperclip CTO
2026-03-26 03:49:06 +00:00
commit 7424491944
60 changed files with 7793 additions and 0 deletions

194
GIT_WORKFLOW.md Normal file
View File

@@ -0,0 +1,194 @@
# dbtool-cli-v1 Git 仓库与 Agent 提交规范
日期2026-03-26
作者CTO
## 1. 结论
- `dbtool-cli-v1` 应立即作为独立 Git 仓库初始化不再依赖任何“Paperclip 根仓库”语义。
- 默认远程使用 HTTPS
- `https://gitea.shay7sev.site/paperclip/dbtool-cli-v1.git`
- agent 不允许直接 push 到默认分支 `main`
- 一个实现类 issue 允许多次 commit但每次都必须对应清晰检查点。
- 前端、后端各自对自己负责的 issue 分支与提交负责;跨前后端/集成类 issue 由该 issue 的 owner 负责最终整合与合并。
- `main` 应开启 protected branch常规变更走 branch + review gate只有一次性仓库 bootstrap 允许例外。
## 2. 独立仓库边界
从本次初始化开始,项目根目录就是唯一仓库边界:
- 仓库根:`/workspace/repo/dbtool-cli-v1`
- Git 元数据:`/workspace/repo/dbtool-cli-v1/.git`
- 远程名:`origin`
- 默认分支:`main`
这意味着:
- 共享计划、backlog、runbook、代码和测试都跟随本仓库历史演进。
- 后续任何 agent 都应在本仓库内提交,不再把该项目视为上层 monorepo 的子目录。
- 若未来存在前后端共存结构,也应继续共用此仓库边界,按目录分工,而不是拆成“一个产品多个隐藏仓库”。
## 3. 远程接入方案结论
### 推荐HTTPS + Gitea bot token
推荐把 HTTPS 作为默认 push 方案,原因如下:
- 容器内不依赖宿主机 SSH agent 或私钥转发。
- 更容易通过 Paperclip secret / 环境变量注入。
- 更适合做统一脚本化封装,复用到前端、后端和全栈项目。
- 轮换 token 和停用单个 bot 凭据更直接。
建议采用:
- 一个专用 Gitea bot / service account
- 仅授予目标仓库写权限
- token 不写入仓库,不落盘到共享文档
- agent 运行时通过环境变量注入:
- `GITEA_USERNAME`
- `GITEA_TOKEN`
### 备选SSH bot key / deploy key
SSH 可以作为组织偏好的备选,但不是当前默认推荐:
- 优点:不需要 HTTP token可与已有 SSH 管理习惯一致。
- 缺点:容器内要管理私钥文件、`known_hosts`、权限位与 key 分发。
- 对多项目复用来说,落地复杂度高于 HTTPS。
只有在以下条件成立时再选 SSH
- 组织已有稳定的 bot key 生命周期管理;
- 已有容器内密钥挂载与 host fingerprint 管理机制;
- 明确要求禁用 HTTPS token。
## 4. Agent 认证与 push 机制
### 最小可落地方案
1. 运行时向 agent 注入:
- `GITEA_USERNAME`
- `GITEA_TOKEN`
2. 使用 `GIT_ASKPASS` 辅助脚本回答 Git 的用户名/密码提示。
3. 本地仓库远程固定为:
- `origin -> https://gitea.shay7sev.site/paperclip/dbtool-cli-v1.git`
4. push 时只推送当前工作分支,不推送 `main`
仓库内已提供最小脚本:
- `scripts/git/gitea-askpass.sh`
示例:
```bash
export GITEA_USERNAME=paperclip-bot
export GITEA_TOKEN=***REDACTED***
export GIT_ASKPASS="$PWD/scripts/git/gitea-askpass.sh"
git push -u origin HEAD
```
### 安全边界
- token 只通过运行时环境注入。
- 禁止把 token 写入 `.git/config`、shell history 或文档。
- bot 凭据只用于 Git 读写,不复用个人账号。
- 若 agent 只需 commit、不需 push则不注入 `GITEA_TOKEN`
## 5. Commit / Branch / Push 规则
### Commit 粒度
实现类 issue 允许多次 commit但必须满足
- 每次 commit 对应一个清晰检查点;
- 检查点至少满足“代码可读”或“文档可评审”;
- 不允许把多个无关 issue 混在一个 commit
- 未达到检查点时可继续在工作区迭代,不强制碎片化提交。
推荐检查点:
- 一个子命令可运行
- 一个 defect 已复现并修复
- 一组测试新增并通过
- 一个 runbook / governance 文档完成首版
### Branch 规则
默认分支命名:
- agent`agent/<agent-name>/<issue-id>-<slug>`
- human`user/<name>/<issue-id>-<slug>`
示例:
- `agent/backend/CMP-14-sqlite-connect-validation`
- `agent/cto/CMP-18-git-bootstrap`
- `user/alice/CMP-12-release-smoke`
### Push 规则
- agent 不直接 push `main`
- agent 只 push 自己负责 issue 的工作分支
- 合并到 `main` 前必须经过 review gate
- 仅仓库第一次 bootstrap 可由指定 owner 执行一次受控初始化推送
## 6. Protected Branch / Review Gate
`main` 应立即启用以下保护:
- 禁止直接 push
- 禁止 force push
- 至少 1 个 review
- CI / smoke 必须通过后才允许合并
当前阶段的最小 gate
- Rust 项目:`cargo test`
- CLI 可启动检查:`cargo run -p dbtool-cli -- --help`
- 发布链路 issue 涉及时,再叠加 release smoke
## 7. 前端 / 后端 / 集成 issue 提交责任
- 后端 issue由后端 owner 负责提交、push、自测说明和最终合并准备
- 前端 issue由前端 owner 负责提交、push、预览说明和最终合并准备
- 测试 / QA issue由 QA owner 提交测试资产、矩阵、runbook 和证据脚本
- 集成类 issue由该 issue 明确 owner 负责最终整合提交
管理规则:
- 不存在“别人顺手帮你提交”的默认机制
- 如需跨角色修改,必须在 issue 上明确 owner 与验收边界
- 多人参与同一产品仓库时,各自 push 自己的分支,由集成 owner 收口
## 8. dbtool-cli-v1 当前落地动作
本次已完成:
- 在项目根目录初始化独立 Git 仓库
- 确认目标远程仓库页面可达:
- `https://gitea.shay7sev.site/paperclip/dbtool-cli-v1`
- 配置 `origin`
- 完成首次本地 commit证明 agent 在受控条件下具备 commit 能力
本次未做:
- 未直接 push 到远程默认分支
- 未在仓库中存放任何长期凭据
- 未跳过未来应有的 branch protection / review gate
## 9. 后续复用方式
该机制可直接复用到前后端共存项目:
1. 每个产品/项目一个独立仓库
2. 统一使用 `origin` + HTTPS bot token
3. 统一使用 `agent/...` / `user/...` 分支命名
4. 统一要求“一个 issue 多次 commit 允许,但每次必须是清晰检查点”
5. 统一由 issue owner 对最终提交与合并负责
如果未来要平台化,可以把以下内容抽成公司级模板:
- `GIT_WORKFLOW.md`
- `scripts/git/gitea-askpass.sh`
- protected branch 默认策略
- Paperclip agent 运行时凭据注入规范