# Memind Portal 生产更新发布指南

> 2026-06-26 起，103 / Studio 正式禁止 `rsync` 发布。  
> Portal 生产必须是**无源码 runtime 模式**，唯一合法入口是 `bash scripts/release-portal-runtime-prod.sh`。

## 当前规则

1. 构建只发生在本机 Mac：`node scripts/build-portal-runtime.mjs`。
2. 103 只接收 `.runtime/portal/` 打出来的 artifact，不直接覆盖源码树。
3. 103 在切换前必须做 `Memind` 全量备份，并单独备份持久目录。
4. 103 **禁止** `npm install`、`npm run build`、在线改源码后继续运行。
5. 切换后必须通过 Portal 健康检查；失败立即回滚。

## 唯一入口

```bash
bash scripts/release-portal-runtime-prod.sh --dry-run
bash scripts/release-portal-runtime-prod.sh
```

## 产物发布流程

1. 本地 commit 当前改动。
2. 本机构建 runtime：`node scripts/build-portal-runtime.mjs`（发布脚本默认会自动执行）。
3. 校验 artifact 至少包含：`server.mjs`、`mindspace-sandbox-mcp.mjs`、`dist/`、`scripts/run-memind-portal-prod.sh`。
4. 本地生成 `memind-portal-runtime-<release-id>.tar.gz` 和发布清单。
5. 通过 `scp` 上传到 103 的 `incoming/memind-portal-runtime/`。
6. 103 备份当前 `/Users/john/Project/Memind` 全目录 + 持久目录。
7. 停止旧 Portal，解包 runtime artifact 到新的 live 目录，继承 `.env` / `MindSpace/` / `data/` / `users/` / `.tailscale/` / `public/plaza-covers/` / `logs/`。
8. 更新 LaunchAgent 指向 `${APP_DIR}/scripts/run-memind-portal-prod.sh`。
9. 启动 Portal，检查 `127.0.0.1:8081/api/status` 为 200。
10. 旧源码 live 目录移入 `archives/`，线上不再保留可运行源码树。

## 禁止事项

- 禁止 `rsync_to_server.sh`
- 禁止 `bash scripts/release-prod.sh`（源码包发布已停用）
- 禁止手工拖文件覆盖 103
- 禁止在 103 直接改源码后继续跑
- 禁止跳过备份和健康检查

## 相关文档

- [Portal 无源码迁移说明](no-source-portal-migration.md)
- [开发环境规则](../DEVELOPMENT_RELEASE_RULES.md)
- [测试发布规则](../TEST_RELEASE_RULES.md)
- [生产发布规则](../PRODUCTION_RELEASE_RULES.md)
