diff --git a/.cursor/rules/engineering-workflow.mdc b/.cursor/rules/engineering-workflow.mdc index 815ca6e..f0295f5 100644 --- a/.cursor/rules/engineering-workflow.mdc +++ b/.cursor/rules/engineering-workflow.mdc @@ -14,6 +14,9 @@ alwaysApply: true 必须遵守: - 新建分支必须基于最新 `origin/main`,推荐执行 `bash scripts/new-branch.sh feature/xxx` +- 分支代码必须先合并进 `main`,确认 `main` 正常后,才允许发布 +- 发布只能从完整 `main` 打整包,禁止从功能分支、单个 commit、单个修复或局部差异单包发布 +- 发布前必须确认 CI 已通过,且没有未合并的关键变更 - 发布前必须重新检查当前分支是否落后 `origin/main` - 发布来源必须是干净、可追溯的 Git commit - 禁止从脏工作区、detached HEAD、落后主线的分支发布 diff --git a/AGENTS.md b/AGENTS.md index c75c7a1..c319690 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,10 +5,13 @@ ## 必读:分支与发布闸门 1. 新建分支前必须先同步远端主线,推荐执行 `bash scripts/new-branch.sh feature/xxx`。 -2. 发布前必须重新检查当前分支是否落后 `origin/main`。 -3. 发布来源必须是干净、可追溯的 Git commit。 -4. 禁止从脏工作区、detached HEAD、落后主线的分支发布。 -5. 发布前必须执行: +2. 分支代码必须先合并进 `main`,确认 `main` 正常后,才允许发布。 +3. 发布只能从完整 `main` 打整包,禁止从功能分支、单个 commit、单个修复或局部差异单包发布。 +4. 发布前必须确认 CI 已通过,且没有未合并的关键变更。 +5. 发布前必须重新检查当前分支是否落后 `origin/main`。 +6. 发布来源必须是干净、可追溯的 Git commit。 +7. 禁止从脏工作区、detached HEAD、落后主线的分支发布。 +8. 发布前必须执行: ```bash bash scripts/check-release-ready.sh diff --git a/CLAUDE.md b/CLAUDE.md index 4ec8555..1d9c678 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,6 +9,9 @@ ## 强制规则 - 新建分支必须基于最新 `origin/main`。 +- 分支代码必须先合并进 `main`,确认 `main` 正常后,才允许发布。 +- 发布只能从完整 `main` 打整包,禁止从功能分支、单个 commit、单个修复或局部差异单包发布。 +- 发布前必须确认 CI 已通过,且没有未合并的关键变更。 - 发布前必须重新检查当前分支是否落后 `origin/main`。 - 发布来源必须是干净、可追溯的 Git commit。 - 禁止从脏工作区、detached HEAD、落后主线的分支发布。 diff --git a/ENGINEERING_WORKFLOW_RULES.md b/ENGINEERING_WORKFLOW_RULES.md index 02ffd3a..b5f9c9d 100644 --- a/ENGINEERING_WORKFLOW_RULES.md +++ b/ENGINEERING_WORKFLOW_RULES.md @@ -52,15 +52,17 @@ git rebase origin/main 2. **禁止** SSH 登录 `105` 后直接修改业务源码(含 `scripts/wechat-mp-menu.mjs` 等);必须先本地 commit,再按发布流程上线。详见 [105 服务器变更规范](docs/105-server-operations.md)。 3. Portal 生产与测试统一走“本机构建 runtime artifact -> 打包发布”,**禁止**在 `103` 解源码包后 `npm install` / `npm run build`。 4. Portal 唯一合法生产入口是 `bash scripts/release-portal-runtime-prod.sh`。 -5. 发布来源必须是可追溯 commit,不允许从不明工作区直接出包。 -6. 发布前必须有备份,发布后必须有健康检查和业务验收。 -7. 发布前必须通过统一闸门: +5. 发布只能从已验证的完整 `main` 打整包;分支代码必须先合并进 `main`,禁止从功能分支、单个 commit、单个修复或局部差异单包发布。 +6. 发布前必须确认 CI 已通过,且没有未合并的关键变更。 +7. 发布来源必须是可追溯 commit,不允许从不明工作区直接出包。 +8. 发布前必须有备份,发布后必须有健康检查和业务验收。 +9. 发布前必须通过统一闸门: ```bash bash scripts/check-release-ready.sh ``` -8. 分支落后 `origin/main`、工作区有未提交或未跟踪改动、处于 detached HEAD、或没有明确批准却从 `main` / `master` 发布,均禁止发版。 +10. 分支落后 `origin/main`、工作区有未提交或未跟踪改动、处于 detached HEAD、或没有明确批准却从 `main` / `master` 发布,均禁止发版。 ## 5. 文档约束 diff --git a/PRODUCTION_RELEASE_RULES.md b/PRODUCTION_RELEASE_RULES.md index e957812..303bddc 100644 --- a/PRODUCTION_RELEASE_RULES.md +++ b/PRODUCTION_RELEASE_RULES.md @@ -9,8 +9,10 @@ 4. `scripts/release-prod.sh`(源码包发布)已停用,不得再用于 Portal;`rsync_to_server.sh` 与任何面向 `105` 的直接同步脚本也只保留为禁用提示。 5. 发布包不得携带运行态资产;`.env`、`MindSpace/`、`data/`、`users/`、`.tailscale/`、`public/plaza-covers/`、`logs/` 只能从线上现有 live 目录继承。 6. runtime artifact 必须包含 `server.mjs` 与 `mindspace-sandbox-mcp.mjs`(`sandbox-fs` 扩展依赖的独立子进程入口)。 -7. 每次生产发布前必须先通过 `bash scripts/check-release-ready.sh`,确认分支不落后 `origin/main`、工作区干净、发布来源可追溯。 -8. 每次生产发布前必须先做全量备份;发布失败必须自动回滚到切换前的 live 目录。 -9. 发布清单必须记录:本地 commit、分支、发布时间、发布编号、是否含额外手工环境变更。 -10. Portal 生产验证至少包含 `http://127.0.0.1:8081/api/status` 的 200 健康检查,并补充本次功能对应的业务路径验收;Plaza 仍按各自发布流程单独验收。 -11. 生产热修复也不能绕过这套流程;“为了快”不是跳过备份、跳过 commit、跳过发布包的理由。 +7. 生产发布必须从已验证的完整 `main` 打整包:分支代码必须先合并进 `main`,禁止从功能分支、单个 commit、单个修复或局部差异单包发布。 +8. 每次生产发布前必须确认 CI 已通过,且没有未合并的关键变更。 +9. 每次生产发布前必须先通过 `bash scripts/check-release-ready.sh`,确认分支不落后 `origin/main`、工作区干净、发布来源可追溯。 +10. 每次生产发布前必须先做全量备份;发布失败必须自动回滚到切换前的 live 目录。 +11. 发布清单必须记录:本地 commit、分支、发布时间、发布编号、是否含额外手工环境变更。 +12. Portal 生产验证至少包含 `http://127.0.0.1:8081/api/status` 的 200 健康检查,并补充本次功能对应的业务路径验收;Plaza 仍按各自发布流程单独验收。 +13. 生产热修复也不能绕过这套流程;“为了快”不是跳过备份、跳过 commit、跳过发布包的理由。