Files
memind/docs/branch-disposition.md
john 35ec2e3544
Memind CI / Test, build, and release guards (push) Failing after 6s
docs: register feature/image-quota-admin branch disposition
Record merged image quota work as closed; admin UI lives in memind_adm 5174 only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 15:01:27 +08:00

413 lines
17 KiB
Markdown
Raw Permalink 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.
# 历史分支处置登记
本文件记录已经完成迁移、但仍可能因为 Git 拓扑或遗留 worktree 被误判为“尚未进入 `main`”的分支。
它是分支复用、合并、cherry-pick 和清理前的必查清单。
## 处置规则
- 标记为“禁止再次引用”的分支只允许用于只读历史追溯。
- 不得从这类分支继续开发,不得 merge、cherry-pick、打包或发布。
- 不得把旧 worktree 中的未提交文件直接覆盖到当前主线;应先与最新 `origin/main` 逐文件比较。
- 若确需恢复历史代码,必须重新评估当前 `main`,在最新主线上建立新分支,并重新执行对应测试和 verify。
- 已提交、已合入并已进入 `origin/main` 的开发分支可以保留本地分支名;保留只用于审计和追溯,不代表还有待合并工作。
- 远端功能分支默认在闭环后删除;发布和审计依据使用 `main` commit、tag、CI 记录或 runtime manifest,不使用功能分支名。
- 这类保留分支必须在本文件登记清楚:分支名、最终 HEAD、进入 `origin/main` 的提交、验证摘要,以及“禁止再次引用”的状态。
## `feature/fix-rybbit-publication-tracking`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-27
分支 HEAD`90ee4c3`
`origin/main` 对应提交:`90ee4c3`
### 原始用途
该分支用于补齐 `m.tkmind.cn` 发布页 Rybbit tracking
-`/u/:owner/pages/:slug``/MindSpace/:user/public/...` 发布页 HTML / shell 注入 Rybbit tracker。
- Portal bootstrap 在 Rybbit env secret 缺失时复用 `mindspace_config` 中存储的 MindSpace analytics secret。
- 补充发布页交付、domain bootstrap 与 Rybbit 配置测试。
### 已进入 `main` 的提交
| 提交 | 内容 |
|---|---|
| `c7718c6` | 注入 Rybbit tracking 到发布页交付链路 |
| `90ee4c3` | 修复空字符串 env secret 阻断存储 secret fallback |
### 验证摘要
本分支闭环前已通过:
- `node --test mindspace-rybbit.test.mjs server/portal-domain-services-bootstrap.test.mjs server/portal-published-page-delivery.test.mjs server/portal-publication-shell.test.mjs`
- `npm run verify:chat-finish-sync`
- `npm run verify:mindspace-publish-guards`
- `npm run verify:mindspace-publish-guards:full`
- `npm run verify:mindspace-page-sync-guards`
- `npm run verify:h5-session-patches`
- `npm run build`
- `npm test`
### 最终处置
- 保留本地分支名用于审计追溯。
- 远端功能分支如曾创建,应在确认 `origin/main` 包含对应提交后删除;发布依据是 `90ee4c3` 及后续 main/tag/manifest,不是该功能分支名。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `codex/fix-portal-canary-backup-ssh`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-27
分支 HEAD`7ba63a8`
`origin/main` 对应提交:`7ba63a8`
### 原始用途
该分支用于修复 Portal canary 生产发布脚本在 103 完整备份阶段的 SSH 中断问题:
- 将 103 full stable backup 与 persisted-data backup 拆到候选安装前的独立 SSH 步骤。
- 保留 full/persisted 备份硬闸门,后续 canary 安装远程脚本只复核已生成备份的 sha、gzip 与 `.env` 内容。
- 避免长 here-doc 发布脚本在大备份阶段被远端关闭连接后无法继续发布。
### 已进入 `main` 的提交
| 提交 | 内容 |
|---|---|
| `7ba63a8` | 拆分 Portal canary 发布前 103 备份步骤 |
### 验证摘要
本分支闭环前已通过:
- `bash -n scripts/release-portal-canary-prod.sh`
- `node scripts/build-portal-runtime.mjs`
- `ALLOW_MAIN_RELEASE=1 bash scripts/release-portal-canary-prod.sh --dry-run --yes`
- Portal production Gate187/187 通过,report commit `7ba63a83b1b52add4536a9391e3f3ea7869e569f`
- `ALLOW_MAIN_RELEASE=1 bash scripts/release-portal-canary-prod.sh --yes`
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `codex/product-quality-p0`
**状态:禁止再次引用。功能已进入 `main`,该分支不是待合并开发分支。**
审计日期:2026-07-17
历史分支基线:`6ef3ea8`
历史分支 HEAD`ebfdc21`
审计时相对 `main`:分支侧 6 个提交、主线侧 53 个提交
### 原始用途
该分支用于 Memind 产品质量 P0 审计与修复,内容包括:
- 修复用户可见的聊天 routing/skill 前缀、旧 Page Data prompt 和部分 MindSpace/语音交互问题。
- 修复页面发布确认状态与过期未确认页面的 `owner_only` 回退。
-`src/api/client.ts` 拆分为 MindSpace、发布、Page Data、Agent Jobs 等模块。
- 在 worktree 中继续处理聊天 Finish 顺序、消息按 ID 合并和发布 HTML 的预览 CSP 清理。
### 已进入 `main` 的提交
原分支提交已经在更新后的主线基线上重新落地,不能因为 commit hash 不同而再次引用:
| 原分支提交 | `main` 对应提交 | 内容 |
|---|---|---|
| `f7a9c21` | `77f1ea8` | 产品交互加固 |
| `db17691` | `f2d0c99` | 旧 prompt 与发布确认兼容 |
| `ad3c5bf` | `f6dcf5b` | MindSpace API 模块拆分 |
| `3504ee0` | `8ac159a` | 发布 API 模块拆分 |
| `456ec54` | `ddb3a33` | Page Data API 模块拆分 |
| `ebfdc21` | `6250b59` | Agent Jobs API 模块拆分 |
`456ec54``ddb3a33` 的 patch-id 不同,是因为主线重新落地时原有 Page Data 路径已经从
`/page-data` 更新为 `/admin/page-data`。两边最终的 `src/api/page-data.ts` 内容一致;
`ddb3a33` 是适配更新后主线的正确落点,不是遗漏提交。
### 遗留 worktree 的五文件修改
`/Users/john/Project/Memind-product-quality-p0` 曾保留以下五个未提交文件:
- `chat-finish-sync.mjs`
- `chat-finish-sync.test.mjs`
- `mindspace-public-delivery.mjs`
- `mindspace-public-delivery.test.mjs`
- `src/utils/message.ts`
这些修改已在 `933466c``fix: preserve chat order and published page scripts`)进入 `main`
2026-07-17 复核结果:其中四个 worktree 文件与 `main` 字节级一致;
`chat-finish-sync.test.mjs``main` 版本额外包含两组回归测试,因此主线版本更完整。
### 最终处置
- 不要 merge `codex/product-quality-p0`
- 不要 cherry-pick 该分支的 6 个提交。
- 不要从其脏 worktree 复制上述五个文件覆盖主线。
- 不要从该分支或 worktree 构建任何 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
该分支及 worktree 是否删除,属于独立清理动作;删除前仍需用户明确批准。
## `codex/retain-completed-branch-history`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
分支 HEAD`3de116d`
`origin/main` 对应提交:`3de116d`
### 原始用途
该分支用于在长图导出时隐藏平台操作控件,并补充对应回归测试。
### 验证摘要
- Git 祖先检查确认分支 HEAD 已进入 `origin/main`
- 实现与回归测试分别落在 `mindspace-long-image.mjs`
`mindspace-long-image.test.mjs`
- 本次仅补录历史处置事实,没有重新引用该分支或重跑历史发布。
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `feature/relax-release-gate-pending-ci`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
分支 HEAD`a95681e`
`origin/main` 对应提交:`a95681e`
### 原始用途
该分支用于在候选提交已与 `origin/main` 同步时处理 Gitea CI 长时间保持
pending 的发布闸门判定,并补充 CI 状态回归测试。
### 验证摘要
- Git 祖先检查确认分支 HEAD 已进入 `origin/main`
- 规则实现和回归测试分别落在 `release-gate/ci-status.mjs`
`release-gate/ci-status.test.mjs`
- 本次仅补录历史处置事实,没有重新引用该分支或重跑历史发布。
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `feature/relax-release-gate-rel-checks`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
分支 HEAD`82b74d7`
`origin/main` 对应提交:`82b74d7`
### 原始用途
该分支用于调整常规 Portal 发布的 REL 检查,包括忽略本地 runtime 产物、
同步主线时的 CI 状态判定,以及通过两次干净构建验证 artifact 可复现性。
### 验证摘要
- Git 祖先检查确认分支 HEAD 已进入 `origin/main`
- 变更包含 `release-gate/ci-status.test.mjs`
`release-gate/runner.test.mjs` 和 artifact 可复现脚本。
- 本次仅补录历史处置事实,没有重新引用该分支或重跑历史发布。
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `codex/wechat-page-data-delivery-guard`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
功能提交:`8bfb795`
`origin/main` 对应提交:`8bfb795`
### 原始用途
该分支用于为微信 Page Data 生成与修复增加独立 Aider 发送前审核,借鉴 Tool Gateway
能力但不写入 `h5_agent_runs`,并通过用户级开关和不可变用户标识限制灰度范围。
### 验证摘要
- 全量 Node 测试 `1399/1399` 通过。
- Page Data 专项验证 `78/78` 通过。
- 生产发布守门员单测 `90/90` 通过。
- Portal runtime 构建、运行时语法检查和 MindSpace 附件链接检查通过。
- Git 祖先检查确认功能提交已进入 `origin/main`
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `codex/wechat-page-data-canary-config`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
功能提交:`1e91195`
`origin/main` 对应提交:`1e91195`
### 原始用途
该分支用于把微信 Page Data Aider 审核开关和唐用户不可变 UUID 注入 103 候选
Portal,避免在线修改稳定 `.env`,并确保稳定 8081 与其他用户不进入审核链路。
### 验证摘要
- 全量 Node 测试 `1399/1399` 通过。
- 生产发布守门员单测 `90/90` 通过。
- 灰度发布脚本、候选启动脚本和远端 heredoc shell 语法检查通过。
- Git 祖先检查确认功能提交已进入 `origin/main`
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `codex/wechat-page-data-canary-aider-bin`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
功能提交:`8cd85a9`
`origin/main` 对应提交:`8cd85a9`
### 原始用途
该分支用于修复 launchd 候选进程无法从系统 `PATH` 定位 Aider 的问题,将
`/opt/homebrew/bin/aider` 纳入 103 灰度预检、LaunchAgent 环境和候选启动校验。
### 验证摘要
- 全量 Node 测试 `1399/1399` 通过。
- 生产发布守门员单测 `90/90` 通过。
- 候选启动测试确认稳定 `.env` 无法覆盖受控 Aider 绝对路径。
- Git 祖先检查确认功能提交已进入 `origin/main`
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `codex/release-gate-impact-only`
**状态:禁止再次引用。改动已提交并进入 `origin/main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-07-28
功能提交:`7a381db`
`origin/main` 对应提交:`7a381db`
### 原始用途
该分支用于将生产发布 Gate 调整为按 Git 影响域自动选择核心和受影响场景,
取消每次生产发布自动执行 187 项全量回归;无法识别影响范围或基线异常时硬阻断发布。
### 验证摘要
- 全量 Node 测试 `1399/1399` 通过。
- 生产发布守门员单测 `92/92` 通过。
- 对当前稳定 103 基线执行影响域选择,命中 `126/187`,无未映射文件。
- Git 祖先检查确认功能提交已进入 `origin/main`
### 最终处置
- 保留本地分支名用于审计追溯。
- 不要从该分支继续开发。
- 不要 merge、cherry-pick 该分支提交或从该分支构建 runtime/artifact。
- 后续开发必须从最新 `origin/main` 新建分支。
## `feature/h5-llm-router-canary`
**状态:禁止再次引用。分支核心功能已提交并进入 `origin/main`,且已随 `main` 发布到 103 生产;该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-08-03
分支 HEAD`0ea72f4`
`origin/main` 对应提交:`5ead1ab`103 生产 release `20260802-214434-5ead1ab`
### 原始用途
该分支用于 H5 LLM Intent Router 灰度验证,以及同一开发周期内的 WeChat 页面交付、缩略图、
45047/45015 延迟发送等修复。
### 为何不再使用该分支
1. **LLM Router 核心功能已在 `main` 中**,关键提交包括:
- `e45c930` — LLM intent router、direct chat execution、Memory V2 light intervention
- `43bc8bb` — H5 LLM intent router admin controls and shadow verification
- `91e140d` — WeChat admin-pluggable LLM intent router
2. **103 生产已从 `main` 发布**,当前 manifest 指向 `5ead1ab`(2026-08-02),已包含上述能力。
3. 分支 HEAD `0ea72f4` **不在** `origin/main` 历史中;分支上与 `main` 同消息的 9 个 WeChat
修复为平行重写(不同 SHA),`git cherry` 判定 patch 不等价;合并会在 `wechat-mp.mjs` 等处
产生冲突,并可能回退 `main` 上更新的 page-data 交付修复(`7e26b45``7624538``5ead1ab` 等)。
4. 分支相对 `main` **缺少**上述 page-data / release 修复,**不应**作为合并来源或发布来源。
### 验证摘要
- Git 祖先检查确认 Router 功能提交(`43bc8bb` 等)已进入 `origin/main`
- 103 生产 `.release-manifest.txt` 确认 `git_head=5ead1ab``git_branch=main`
- 分支工作区已干净;无未提交独有功能待并入 `main`
### 最终处置
- 保留本地分支名 `feature/h5-llm-router-canary` 仅用于审计追溯。
- **后续不再使用该分支进行任何开发、合并、cherry-pick、打包或发布。**
- 不要 merge 该分支到 `main`;不要从该分支构建 runtime/artifact。
- 新功能必须从最新 `origin/main` 新建分支(推荐 `bash scripts/new-branch.sh feature/xxx`)。
## `feature/image-quota-admin`
**状态:禁止再次引用。改动已提交并进入 `origin/main`Memind + memind_adm),该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-08-03
分支 HEADMemind):`946d875`
分支 HEADmemind_adm):`a4d46f2`
`origin/main` 对应提交:`946d875`Memind)、`a4d46f2`memind_adm
### 原始用途
图片生成额度(image_make)计费与管理:
- Memind:订阅 bonus 字段、额度流水、生图前校验与扣费、Admin API、Portal 余额弹窗展示
- memind_adm(5174):套餐默认额度、流水、用户详情充值 UI(禁止在 Memind `ops/` 扩展)
### 验证摘要
- `billing-subscription.test.mjs` + `mindspace-image-generation.test.mjs`37/37 通过
- memind_adm `npm run build` 通过
- 本地 Admin API 联调脚本 `verify-image-quota-local.mjs` 通过
- Portal `/auth/me` 联调脚本 `verify-image-quota-portal.mjs` 通过
### 最终处置
- 保留本地分支名仅用于审计追溯。
- 不要从该分支继续开发、merge、cherry-pick 或发布。
- 后续管理后台 UI 只能在 memind_adm 5174 开发。