背景
#62 已完成第一阶段 upstream 审计,并在 2026-07-12 按当时快照关闭。此后 upstream/main 继续快速前进,本 issue 作为第二阶段的持续同步 spec 和执行台账。
本轮目标不是让 Git 历史看起来与 upstream 一致,而是选择性吸收对本 fork 有价值的修复,同时保护已经上线的计费、支付、积分、公益 key、调度、运维和部署语义。
本轮基线
取证时间:2026-07-14
- fork 基线:
origin/main@40e8d246c
- upstream 截止点:
upstream/main@da85cc7e4
- merge-base:
945b9b208b32dac443cf25e1e96f4ac587c93223
git rev-list --left-right --count origin/main...upstream/main:fork 独有 348 个提交,upstream 独有 723 个提交
git diff --shortstat origin/main...upstream/main:1097 files changed, 197426 insertions, 61907 deletions
该体量禁止整段 merge/rebase 后再修冲突。本轮 Done 只覆盖上述 upstream 截止点;截止点之后的新提交进入下一次快照,不静默扩大当前验收范围。
核心原则
- 每次判断必须以刚 fetch 的
origin/main 和 upstream/main 为准,不能以本地落后或脏的 main 为准。
- 不直接 merge
upstream/main,不按提交数量追进度,也不因为 commit 能 cherry-pick 就默认应该合入。
- 每个候选先检查:是否已按相同 patch 吸收、是否已有等价实现、是否符合本 fork 产品语义、是否依赖未引入的上游基础设施。
- 同主题、低耦合的 1-5 个 commit 可以合并成一张 PR;跨计费/支付/迁移/调度边界的改动必须拆开。
- 低重叠主题可以并行 PR;同文件热点或存在依赖关系的主题按顺序执行。
- PR 通过完整 CI/CD 只是“可合并”标准,不自动合并,由人工完成最终 merge。
候选分类
A:直接吸收
- 安全修复、确定性 bugfix、协议兼容修复。
- 小范围 OpenAI/Codex/GPT-5.6/compact/cache/write 修复。
- 不改变业务口径的 WebSocket、streaming、HTTP 生命周期和可观测性修复。
- 已有完整依赖且与 fork 语义一致的小型前端修复。
处理方式:优先 cherry-pick -x;如上下文有漂移,只做最小适配并保留 upstream commit/PR 引用。
B:改写后吸收
- OAuth/account scheduler、quota、模型能力、Grok/Antigravity 调度。
- usage、ops、system logs、settings/admin 大文件调整。
- 会触碰本 fork 错误归因、缓存、计费资格或故障切换路径的修复。
处理方式:先开子 issue 写清 fork 现状、目标行为、冲突点和测试门槛,再按本 fork 结构实现;禁止整文件覆盖。
C:暂缓
- Batch Image、Grok media、server timing 等大功能或产品方向尚未确认的功能。
- 依赖大量 upstream 基础设施、迁移或 Ent 生成代码的改动。
- 暂时没有线上需求或无法独立验证的重构。
处理方式:记录原因、依赖和重新评估条件,不创建占位 PR。
D:跳过
- sponsors、品牌资产、README 推广、纯 VERSION/release 同步。
- 与 fork 已有实现等价但冲突更大的重构。
- 会弱化现有 CI、安全扫描或 coverage 门槛的配置。
- 会回滚 fork 已确认产品策略的 upstream 默认值。
例如:上游长上下文计费默认开关的往返提交 a0ac5e024 / f63d168ae / e9fb5983c 不直接吸收;当前 fork 以已合入的 #284 为准。
优先级
- 当日安全修复和会造成请求失败、重复计费、重试风暴、连接泄漏的生产 bug。
- GPT-5.6、compact、OpenAI OAuth/Codex、Responses、cache write/read 的兼容修复。
- scheduler、WebSocket、streaming、HTTP keepalive、错误分类与故障切换。
- Grok/Antigravity、usage/ops 和管理端体验。
- 大功能、结构性重构和产品方向改动。
执行流程
1. 刷新与去重
每轮开始先记录 refs、merge-base 和 left/right count,然后对 upstream-only 候选做以下核对:
git cherry / patch-id 是否已吸收。
origin/main 是否已有行为等价实现和更完整测试。
- commit 的真实依赖链,而不是只看单个 diff。
- 是否会覆盖 fork-only 字段、迁移、计费或调度语义。
2. 建立子任务
需要代码的候选建立子 issue,并在正文中包含:
- upstream commit/PR 链接。
- 分类 A/B/C/D 与理由。
- touched paths 和依赖。
- fork 当前行为、目标行为和明确非目标。
- 冲突处理策略。
- 必跑测试和 Done 标准。
确认无需吸收的候选可以直接记录到本 issue 的进度评论,不为凑数量创建重复 issue。
3. 实现与 PR
- 从最新
origin/main 创建隔离 worktree/branch。
- 优先移植行为和测试;冲突时先理解双方语义,再手工适配。
- PR 描述列出吸收的 upstream commits、刻意跳过的相邻 commits 及原因。
- 同主题可以批量提交,但一张 PR 必须可独立 review、独立回滚。
- PR 通过全部检查后更新子 issue 和本 issue;不自动 merge。
4. 进度台账
每个批次在本 issue 评论中记录:
- 当前
origin/main / upstream/main 快照。
- 已审计候选及 A/B/C/D 结论。
- 子 issue / PR / upstream commit 对应关系。
- CI 结果、冲突情况和刻意未合入内容。
- 下一批优先候选。
验证门槛
每张 PR 至少满足:
git diff --check 通过,工作树干净。
- GitHub Actions backend test、integration、golangci-lint、frontend、frontend coverage、security 和
codecov/patch 全绿。
- 协议、错误分类、调度或 streaming 改动包含针对性回归测试。
- 涉及 DB/Redis/迁移/计费/支付/订阅时,必须由 CI 的真实依赖集成测试验证;历史迁移文件不可修改。
- 不降低现有 CI/CD 门槛,不通过跳过测试或扩大 coverage ignore 解决红灯。
当前本地机器不运行完整 Go/Docker/前端构建,以避免资源占满;重型验证统一交给 GitHub Actions。允许本地执行 git、静态 diff、格式检查和低资源审计。
本轮首个批次
Done 标准
- 截止
upstream/main@da85cc7e4 的 upstream-only commits 已完成首轮分类,不存在未记录的高优先级候选。
- A 类候选已通过 PR 合入,或明确记录了不吸收的证据。
- B 类候选已有子 spec 和明确决策,不以“大、以后再说”代替审计。
- C/D 类候选均记录原因和重新评估条件(如适用)。
- 所有实现 PR 的 upstream 来源、fork 适配和 CI 证据可追溯。
- 未修改历史迁移,未回滚 fork 的计费、支付、积分、公益 key、错误归因、调度和部署语义。
历史第一阶段 spec:#62。
背景
#62 已完成第一阶段 upstream 审计,并在 2026-07-12 按当时快照关闭。此后
upstream/main继续快速前进,本 issue 作为第二阶段的持续同步 spec 和执行台账。本轮目标不是让 Git 历史看起来与 upstream 一致,而是选择性吸收对本 fork 有价值的修复,同时保护已经上线的计费、支付、积分、公益 key、调度、运维和部署语义。
本轮基线
取证时间:2026-07-14
origin/main@40e8d246cupstream/main@da85cc7e4945b9b208b32dac443cf25e1e96f4ac587c93223git rev-list --left-right --count origin/main...upstream/main:fork 独有 348 个提交,upstream 独有 723 个提交git diff --shortstat origin/main...upstream/main:1097 files changed, 197426 insertions, 61907 deletions该体量禁止整段 merge/rebase 后再修冲突。本轮 Done 只覆盖上述 upstream 截止点;截止点之后的新提交进入下一次快照,不静默扩大当前验收范围。
核心原则
origin/main和upstream/main为准,不能以本地落后或脏的main为准。upstream/main,不按提交数量追进度,也不因为 commit 能 cherry-pick 就默认应该合入。候选分类
A:直接吸收
处理方式:优先 cherry-pick
-x;如上下文有漂移,只做最小适配并保留 upstream commit/PR 引用。B:改写后吸收
处理方式:先开子 issue 写清 fork 现状、目标行为、冲突点和测试门槛,再按本 fork 结构实现;禁止整文件覆盖。
C:暂缓
处理方式:记录原因、依赖和重新评估条件,不创建占位 PR。
D:跳过
例如:上游长上下文计费默认开关的往返提交
a0ac5e024/f63d168ae/e9fb5983c不直接吸收;当前 fork 以已合入的 #284 为准。优先级
执行流程
1. 刷新与去重
每轮开始先记录 refs、merge-base 和 left/right count,然后对 upstream-only 候选做以下核对:
git cherry/ patch-id 是否已吸收。origin/main是否已有行为等价实现和更完整测试。2. 建立子任务
需要代码的候选建立子 issue,并在正文中包含:
确认无需吸收的候选可以直接记录到本 issue 的进度评论,不为凑数量创建重复 issue。
3. 实现与 PR
origin/main创建隔离 worktree/branch。4. 进度台账
每个批次在本 issue 评论中记录:
origin/main/upstream/main快照。验证门槛
每张 PR 至少满足:
git diff --check通过,工作树干净。codecov/patch全绿。当前本地机器不运行完整 Go/Docker/前端构建,以避免资源占满;重型验证统一交给 GitHub Actions。允许本地执行 git、静态 diff、格式检查和低资源审计。
本轮首个批次
5aeb03018:Codex plan-gated model 按账号-模型组合冷却并故障切换。codecov/patch已通过,PRCLEAN,等待人工 merge。Done 标准
upstream/main@da85cc7e4的 upstream-only commits 已完成首轮分类,不存在未记录的高优先级候选。历史第一阶段 spec:#62。