分支治理¶
状态:实施中(迭代 140;Ruleset 自 2026-08-22 起处于两周观察期) 适用仓库:
cloudQuant/backtrader长期分支:master、development、dev
本文档是分支角色、PR 分流、审查要求与跨分支修复传播的权威来源。它取代任何
早前的「development → master 发布链」表述。当其他文档(README.md、
CONTRIBUTING.md、AGENTS.md、PR/issue 模板)与本文档冲突时,以本文档为准。
1. 强制性分支事实¶
以下定义是本仓库治理的不可协商前提,不遵循常见 GitFlow。
分支 |
角色 |
允许进入的变更 |
禁止的变更 |
|---|---|---|---|
|
原始 Backtrader 基线 |
已在原始版复现的 Bug、兼容性或安全修复 |
日常功能、优化版重构、 |
|
改进与优化版本 |
优化版能力、架构优化、仅在优化版存在的回归修复、受控集成的日常开发成果 |
被当作 |
|
日常开发入口 |
常规功能、普通 Bug 修复、文档、测试、重构、社区贡献 |
绕过评审直接进入 |
2. 治理决策(D0–D4)¶
迭代 140 的已记录决策。未决项为阻塞项,不得静默默认假设。
编号 |
决策 |
结论 |
|---|---|---|
D0 |
GitHub 默认分支 |
保持 |
D1 |
GitHub/Gitee 权威来源与同步 |
GitHub |
D2 |
Owner 团队与管理员 bypass |
已于 2026-08-22 解决: |
D3 |
分支审批门槛 |
|
D4 |
Merge Queue 阈值 |
本迭代不启用。仅在连续 4 周每天 ≥3 个待合并 PR 或频繁基线冲突后再评估。 |
3. PR 目标分支决策表¶
情况 |
默认目标 |
必需证据 |
合并后动作 |
|---|---|---|---|
文档、测试、常规功能、普通 Bug 修复 |
|
关联测试、快速门禁、≥1 位维护者批准 |
纳入下一次 |
仅在优化架构出现的问题或优化版功能 |
|
优化版最小复现、风险说明、领域 owner 批准 |
判断 |
原始 Backtrader 的真实 Bug / 安全问题 |
|
在 |
创建前移 issue;不得以「已修 master」关闭 |
跨分支语义不同的修复 |
分别建 PR |
每个目标分支的独立实现与测试 |
交叉链接 PR/issue;禁止盲目 merge 或 cherry-pick |
4. 风险级别(R0–R3)¶
等级 |
典型路径 |
最低评审 |
最低验证 |
|---|---|---|---|
R0 文档/测试 |
|
1 位维护者 |
格式、受影响测试、文档构建 |
R1 常规模块 |
单个 indicator/analyzer/feed 的局部修复 |
1 位模块 owner |
快速 CI + 新增/修改回归测试 |
R2 核心/兼容性 |
|
领域 owner + 第二位维护者 |
快速 CI、 |
R3 原始版/安全/发布 |
|
核心维护者明确批准 |
目标分支全量测试、最小复现、回归、发布/安全检查 |
5. 目标工作流¶
常规社区贡献
fork / feature/* ── PR + 快速门禁 ──> dev
│
│ 受控 promotion PR + 全量门禁
▼
development
优化版专属问题
feature/* ── PR + optimization 门禁 ──> development
原始版真实 Bug
hotfix/master-* ── PR + original-baseline 门禁 ──> master
│
└─ 建立前移任务:分别评估并移植到 dev / development
6. Promotion 协议(dev → development)¶
Promotion 是受控 PR,不是例行合并。
新建
promotion/dev-YYYYMMDDPR,目标development。描述:变更范围、显式排除的内容、完整验证、性能/兼容性差异、回滚点。
R2/R3 内容需跑全量门禁(
make test-strategies、runonce/runnext 一致性或策略基线比对)。按 §4 取得 owner + 第二位维护者批准。
合并;在每周治理摘要中记录本次 promotion(§12)。
7. master hotfix 前移协议¶
每个 master 修复在治理完成前必须产生一个 linked 前移 issue。
在
master独立复现;落地hotfix/master-*PR(R3 门禁)。创建
forward-port-requiredissue 描述修复。分别评估
dev与development是否受影响。对每个受影响分支,实现带独立测试的等价移植——禁止盲目跨分支 merge 或 cherry-pick。
每个受影响分支验证通过后才标记
forward-port-complete。
未完成前移的 hotfix 不算治理完成。
8. GitHub / Gitee 镜像一致性¶
GitHub 为审查权威;Gitee 为受控镜像。
每次长期分支合并后,验证两端同一 SHA:
git ls-remote --heads https://github.com/cloudQuant/backtrader.git master development dev
git ls-remote --heads https://gitee.com/yunjinqi/backtrader.git master development dev
镜像负责人使用 GitHub
@cloudQuant与 Giteeyunjinqi两个真实身份。任何漂移必须 告警并由该负责人处理;任何记录的差异必须有书面原因。
9. 标签¶
标准化标签分类(通过 GitHub 应用;见 §10 运行手册):
前缀 |
取值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
动作 |
|
10. 外部设置运行手册(手动、仅管理员)¶
以下仓库内产物(manifest 文件、CODEOWNERS 与校验脚本)表达了预期的 GitHub 配置。
应用真实设置需要管理员权限,须通过 UI/API 手动完成——CI 永不持有管理员凭据。
10.1 默认分支(D0)¶
无需变更:保持 development 为默认分支。目标分支选择由 PR 模板与
PR Governance workflow 强制,而非默认分支。
10.2 Rulesets(D3)¶
按 .github/governance/rulesets/{dev,development,master}.json,为每个长期分支应用
一条 ruleset:
仓库 → Settings → Rules → Rulesets → New ruleset。
按 manifest 将目标设为分支(或
fnmatch模式)。先以
evaluate执行至 2026-09-05。manifest 要求 PR、≥1 批准、Lint、Test Summary、PR Governance、Tiered Validation,并禁止 force-push/删除、要求 解决会话。GitHub Ruleset 不能原生按 PR 源分支命名或标签判断。观察期结束后,required 的
PR Governancecheck 才负责对master强制hotfix/master-*与target:master-hotfix;最小复现和 R3 证据仍由模板与人工评审把关。通过仓库 Rulesets API 或 UI 应用 JSON,然后用
scripts/ci/verify_github_governance.py验证;不得把管理员 token 交给 CI。
当前 manifest 有意只要求一次批准,因为目前只确认了一名真实 GitHub maintainer
(@cloudQuant)。这不能把同一人算作 R2/R3 所需的第二位独立维护者。启用这些路径的
active 规则前,必须新增并核验第二名 maintainer;在此之前记录例外并保持 Ruleset 观察模式。
10.3 CODEOWNERS(D2)¶
.github/CODEOWNERS 使用已确认的 GitHub 用户 @cloudQuant,不是组织占位符;截至
2026-08-22 它拥有仓库管理员权限。Gitee yunjinqi 身份不应作为 GitHub CODEOWNERS
条目。文件进入默认分支后,必须确认 GitHub codeowners/errors 响应为空。
10.4 标签¶
一次性创建 §9 的标签(Repository → Issues → Labels)。classify_pr_risk.py 脚本
输出建议标签;维护者保留最终覆盖权。
11. 验证¶
# 导出只读 API 响应,不提交到仓库。
gh api --paginate repos/cloudQuant/backtrader/rulesets > /tmp/backtrader-rulesets.json
gh api repos/cloudQuant/backtrader/codeowners/errors > /tmp/backtrader-codeowners-errors.json
# Ruleset + CODEOWNERS 一致性;观察期预期 enforcement 为 evaluate。
python scripts/ci/verify_github_governance.py \
--rulesets-json /tmp/backtrader-rulesets.json \
--codeowners-errors-json /tmp/backtrader-codeowners-errors.json \
--expected-enforcement evaluate
# PR 风险分级
python scripts/ci/classify_pr_risk.py --paths backtrader/cerebro.py
# 两个脚本的单元测试
pytest tests/unit/scripts/ -q
12. 观察期与激活记录¶
管理员以 evaluate 创建三条 Ruleset,并在 2026-09-05 前保持
GOVERNANCE_BLOCKING=false。这段时间记录所有 Rule Insights、缺失 check context、
镜像漂移与 PR 分流例外,写入每周治理记录。只有维护者审阅证据后,管理员才能把三条
Ruleset 改为 active 并设置 GOVERNANCE_BLOCKING=true;激活的 commit/PR 必须关联该
证据。禁止按日期自动切换。