Files
dbtool-cli-v1/GIT_WORKFLOW.md
Paperclip CTO 7424491944
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
chore: bootstrap independent git workflow
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 03:49:29 +00:00

195 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 运行时凭据注入规范