5.1 KiB
5.1 KiB
生产发布规则
每次生产发包前先读:docs/发包必看.md。那里记录了 2026-06-27 Portal/goosed 事故后的强制检查项。
生产发布的完整自动化验收、场景目录、豁免规则和机器报告规范见:docs/production-release-guardian.md。该文档是
103发布的强制守门员;所有适用场景通过且取得明确人工批准前,不允许上传或发布。
103是正式生产主机,105是云侧入口/历史链路;本机一律不允许直接rsync到103或105,也不允许在线改源码后继续运行。- 禁止 SSH 登录
105直接修改业务代码(含服务号菜单脚本scripts/wechat-mp-menu.mjs)。105 上文件是部署产物;变更必须:本地test-memind修改 → Git commit → 正式发布 → 必要时在目标环境执行 API 同步。详见 docs/105-server-operations.md。 - Portal 生产必须是无源码 runtime 模式:构建只发生在本机 Mac,产物是
.runtime/portal/;103只接收 runtime artifact、继承持久目录、启动服务,禁止在103上npm install、npm run build或保留可运行源码树。 MindSpace独立服务同样必须走单独 runtime artifact:本地node scripts/build-mindspace-service-runtime.mjs->bash scripts/release-mindspace-service-prod.sh-> 上传103-> 备份/Users/john/MindSpace与共享Memind/.env-> 原子切换到/Users/john/MindSpace-> 健康检查127.0.0.1:8082/health与/mindspace/v1/contract;禁止手工 SSH 改线上/Users/john/MindSpace源码。103 当前拓扑见 docs/103-runtime-topology.md。- Portal 生产发布必须先构建候选 runtime,并只通过
scripts/release-portal-canary-prod.sh启用用户级灰度。灰度只能命中明确的不可变用户身份,未命中、身份解析失败或候选不健康必须继续走稳定版本。scripts/release-portal-runtime-prod.sh仍是整包替换脚本,在同一候选的灰度验收和晋升证据校验完成前禁止非 dry-run。 scripts/release-prod.sh(源码包发布)已停用,不得再用于 Portal;rsync_to_server.sh与任何面向105的直接同步脚本也只保留为禁用提示。- Portal 发布包不得携带运行态资产;
.env、data/、users/、.tailscale/、public/plaza-covers/、logs/只能从线上现有 live 目录继承。/Users/john/MindSpace是独立 MindSpace Service 的生产根目录,不属于 Portal runtime 包;/Users/john/Project/Memind/MindSpace只允许作为旧链路兼容/存量目录处理,不得再被写成 MindSpace Service 的当前根目录。 - runtime artifact 必须包含
server.mjs与mindspace-sandbox-mcp.mjs(sandbox-fs扩展依赖的独立子进程入口)。 - 生产发布必须从已验证的完整
main打整包:分支代码必须先合并进main,禁止从功能分支、单个 commit、单个修复或局部差异单包发布。 - 每次生产发布前必须确认 CI 已通过,且没有未合并的关键变更。
- 每次生产发布前必须先通过
bash scripts/check-release-ready.sh,确认分支不落后origin/main、工作区干净、发布来源可追溯。 - 每次生产发布前必须先做全量备份;发布失败必须自动回滚到切换前的 live 目录。
- 发布清单必须记录:本地 commit、分支、发布时间、发布编号、是否含额外手工环境变更。
- Portal 生产验证至少包含
http://127.0.0.1:8081/api/status的 200 健康检查,并补充本次功能对应的业务路径验收;Plaza 仍按各自发布流程单独验收。 - 生产热修复也不能绕过这套流程;“为了快”不是跳过备份、跳过 commit、跳过发布包的理由。
- 每次生产发布必须生成与完整
maincommit 和 runtime artifact SHA256 绑定的 Gate report。常规发布执行 16 项核心场景加 Git diff 自动选择的影响域场景;所有被选择场景必须真实执行并满足failed=0、skipped=0、blocked=0、unknown=0、cleanup_failed=0。 - 187 项保留为回归审计目录,不进入生产发布脚本。鉴权、数据库、runtime 构建、依赖、共享入口和发布闸门自身变化时,影响选择器必须展开到预定义业务域;任何未映射的运行时代码直接阻断发布,先补映射再生成报告。
- 风险分层报告必须记录线上基线 commit、changed paths、核心场景、影响域、最终选择结果和选择策略;发布校验器必须从 Git diff 重新计算并核对,禁止人工删减选择结果。正常风险分层 Gate 不使用逐项
not_applicable,被选择的场景必须通过。 - 完整 187 项仅保留为人工或定期审计命令,不作为生产发布前置条件,也不得由生产发布脚本自动触发。无有效基线、基线非候选祖先、选择器无法重现或灰度失败时直接阻断;即使 Core + Impact Gate 全绿,也不能把整包替换脚本当作灰度发布入口。