9b4a25799f
Replace fixed ackText with a rule-based AckProvider that picks response templates by message type and intent (translate, summary, rewrite, poster, ppt, mindmap, code, search, schedule). Pure sync, zero I/O, auto-falls back to config.ackText on any error. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
139 lines
3.5 KiB
Markdown
139 lines
3.5 KiB
Markdown
# 103 生产收口记录(2026-06-26)
|
||
|
||
## 目标
|
||
|
||
把 `103` 从“可直接手改的运行工作树”收口为“只接收本地发布包的生产环境”。
|
||
|
||
这份记录只做两件事:
|
||
|
||
1. 固定 2026-06-26 看到的真实生产状态。
|
||
2. 给后续“本地唯一发布源”改造提供基线。
|
||
|
||
## 已确认的生产真相
|
||
|
||
### 主机与入口
|
||
|
||
- 生产主机:`john@58.38.22.103`
|
||
- 当前 SSH 端口:`22`
|
||
- 旧的 `2222` 已关闭,不应再写入文档或脚本
|
||
|
||
### 运行目录
|
||
|
||
- Memind: `/Users/john/Project/Memind`
|
||
- 管理后台: `/Users/john/Project/memind_adm`
|
||
- Plaza: `/Users/john/Project/memind_plaza`
|
||
|
||
### 运行服务
|
||
|
||
- `cn.tkmind.memind-portal`
|
||
- `cn.tkmind.plaza`
|
||
- `cn.tkmind.memind-adm-web`
|
||
- `cn.tkmind.memind-adm-api`
|
||
- `cn.tkmind.goosed-18006`
|
||
- `cn.tkmind.goosed-18007`
|
||
|
||
结论:Goose 在线上是双实例负载,本地不需要强行复制这套拓扑;这部分应作为“发布后巡检”处理,而不是“本地开发必须等价”处理。
|
||
|
||
## 数据库结论
|
||
|
||
### 生产正在使用的业务库
|
||
|
||
`/Users/john/Project/Memind/.env` 与 `/Users/john/Project/memind_adm/.env` 都指向同一个 RDS:
|
||
|
||
- `DATABASE_URL=.../goose`
|
||
|
||
因此:
|
||
|
||
- 当前正式业务库是 `goose`
|
||
- `memind` 库仍存在,但不是当前正式流量的主写入目标
|
||
|
||
### 2026-06-26 抽样结果
|
||
|
||
`goose`:
|
||
|
||
- `h5_users`: `41`
|
||
- 有充值/加款记录的用户数:`27`
|
||
|
||
`memind`:
|
||
|
||
- `h5_users`: `26`
|
||
- 有充值/加款记录的用户数:`12`
|
||
|
||
这说明 `memind` 更像旧数据或历史分流,当前生产业务应以 `goose` 为准。
|
||
|
||
### 付费用户观察
|
||
|
||
按 `goose.h5_billing_ledger` 统计:
|
||
|
||
- 除去明显超大测试/管理员账户 `admin`
|
||
- 充值额度最高的真实用户:`wx_95eskyda / cheng cong👑`
|
||
- 实际消耗最高的真实用户之一:`wx_ul610et8 / 唐`
|
||
|
||
## 工作树漂移结论
|
||
|
||
### 103 生产工作树
|
||
|
||
- `Memind`
|
||
- branch: `main`
|
||
- commit: `728b01c`
|
||
- dirty files: `154`
|
||
|
||
- `memind_adm`
|
||
- branch: `main`
|
||
- commit: `7a5b9cc`
|
||
- dirty files: `42`
|
||
|
||
### 本地工作树
|
||
|
||
- `test-memind`
|
||
- commit: `d51df2f`
|
||
- local diff count: `102`
|
||
|
||
- `test-memindadm`
|
||
- commit: `f217232`
|
||
- local diff count: `28`
|
||
|
||
## 判断
|
||
|
||
不能把 `103` 视为“最新版本”,也不能把本地直接视为“可全量覆盖生产”的唯一事实。
|
||
|
||
当前状态更准确的描述是:
|
||
|
||
1. `103` 是真实运行版本,但带有大量未回收漂移。
|
||
2. 本地是主要开发来源,但尚未完成对 `103` 有效差异的回收。
|
||
3. 因此必须先做一次“收口”,再执行“本地唯一发布源”制度。
|
||
|
||
## 收口策略
|
||
|
||
### 禁止动作
|
||
|
||
- 禁止再用 `rsync` 直接覆盖生产工作树
|
||
- 禁止在 `103` 直接改源码后继续跑
|
||
- 禁止把 `103` 直接反向同步进本地主开发目录
|
||
|
||
### 允许动作
|
||
|
||
1. 单独创建 `103-baseline` 副本或 worktree
|
||
2. 将 `103` 与本地、目标主线做三向比较
|
||
3. 只回收“生产独有且必须保留”的热修
|
||
4. 回收完成后,以本地提交为唯一发布源重新出包上线
|
||
|
||
## 后续制度
|
||
|
||
从这次收口完成后开始:
|
||
|
||
1. 本地源码是唯一发布源
|
||
2. 生产只接收发布包
|
||
3. 发布包上传到 `incoming/`
|
||
4. 生产解包到 `releases/`
|
||
5. 备份当前 live 目录
|
||
6. 原子切换目录并重启
|
||
7. 失败自动回滚
|
||
|
||
## 需要继续执行的事项
|
||
|
||
1. 为 `memind_adm` 补齐与 `Memind` 一样的发布包脚本和规则文档
|
||
2. 从 `103` 导出一个只读差异清单
|
||
3. 把真正必须保留的生产热修回收到本地
|
||
4. 收口完成后,把 `103` 变成“不可手改源码”的发布目标
|