6.3 KiB
6.3 KiB
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_USERNAMEGITEA_TOKEN
备选:SSH bot key / deploy key
SSH 可以作为组织偏好的备选,但不是当前默认推荐:
- 优点:不需要 HTTP token;可与已有 SSH 管理习惯一致。
- 缺点:容器内要管理私钥文件、
known_hosts、权限位与 key 分发。 - 对多项目复用来说,落地复杂度高于 HTTPS。
只有在以下条件成立时再选 SSH:
- 组织已有稳定的 bot key 生命周期管理;
- 已有容器内密钥挂载与 host fingerprint 管理机制;
- 明确要求禁用 HTTPS token。
4. Agent 认证与 push 机制
最小可落地方案
- 运行时向 agent 注入:
GITEA_USERNAMEGITEA_TOKEN
- 使用
GIT_ASKPASS辅助脚本回答 Git 的用户名/密码提示。 - 本地仓库远程固定为:
origin -> https://gitea.shay7sev.site/paperclip/dbtool-cli-v1.git
- push 时只推送当前工作分支,不推送
main。
仓库内已提供最小脚本:
scripts/git/gitea-askpass.sh
示例:
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-validationagent/cto/CMP-18-git-bootstrapuser/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. 后续复用方式
该机制可直接复用到前后端共存项目:
- 每个产品/项目一个独立仓库
- 统一使用
origin+ HTTPS bot token - 统一使用
agent/.../user/...分支命名 - 统一要求“一个 issue 多次 commit 允许,但每次必须是清晰检查点”
- 统一由 issue owner 对最终提交与合并负责
如果未来要平台化,可以把以下内容抽成公司级模板:
GIT_WORKFLOW.mdscripts/git/gitea-askpass.sh- protected branch 默认策略
- Paperclip agent 运行时凭据注入规范