feat(guard): 部署一致性守卫 deploy_guard.py + 知微运维纪律 + 健康JSON移出跟踪

- deploy_guard.py (15min cron): 代码漂移自动回滚(仅未提交改动)+
  session-work可快进时自动merge部署+幂等重链+cron引用完整性,
  状态落盘JSON, 有动作即XMPP报备
- docs/zhiwei-ops-discipline.md: 知微纪律——禁止直接编辑被跟踪代码/
  禁stale提交/禁直调gateway批量LLM; 自愈白名单(rerun/restart/
  sync/switch_key)本不改代码, 与纪律不矛盾; 紧急热修走git流程,
  提交到session-work后guard 15min自动部署
- dev-spec 红线#6 补充部署守卫机制
- static/mofin_health.json 移出git跟踪(运行时产物, 常驻dirty
  会废掉漂移检测)
This commit is contained in:
hmo
2026-07-21 01:17:01 +08:00
parent 574151aee9
commit a69b246c57
5 changed files with 264 additions and 3046 deletions
+1
View File
@@ -18,6 +18,7 @@
- **git hooks**`.git/hooks/post-merge` + `post-checkout`):git 操作后自动重链
- **手动兜底**`bash deploy/profile-scripts/sync_profile_scripts.sh`(改完文件随手跑)
- 同步日志:`gateway/logs/link_sync.log`;断链检测同时是 L2 卫生审计的检查项
- **部署守卫**`deploy_guard.py`,每 15 分钟全天候):①被跟踪代码文件出现未提交改动 → 自动回滚+重链+告警(git 提交不受影响)②`session-work` 领先 master 且可快进 → 自动 merge+重链+(触及 dashboard 时)重启服务 ③幂等重链 ④cron 引用完整性检查。状态落盘 `gateway/logs/deploy_guard_status.json`,有动作即 XMPP 报备。**禁止直接编辑 246 上任何被跟踪的代码文件**——所有改动必须经 git(详见 `docs/zhiwei-ops-discipline.md`
7. **数据路径必须绝对** — 引用数据文件/数据库时,必须写绝对路径并指向权威位置(`/home/hmo/MoFin/data/`)。**禁止**用 `Path(__file__).parent / "data"` 这类相对解析——同一个模块被硬链接到不同位置时会解析出不同的数据库(2026-07-20 三库事件的根因)
8. **备份/遗留物禁止留在生产数据目录**`.bak``decisions_backup_*`、迁移残留 JSON、废弃 DB,必须在迁移/变更完成时移到 `archive/`。生产数据目录(`MoFin/data` = `web-dashboard/data`)只放活文件。监控脚本扫描生产目录时,遗留物就是未来的假警报
9. **死模块必须收尸** — 宣布模块废弃时,必须在同一轮操作中完成收尸六步:①杀进程 ②stop+disable systemd 服务 ③删 cron job ④归档脚本到 `archive/` ⑤归档数据文件 ⑥从期望矩阵/监控中移除。只说"已废弃"不收尸 = 没废弃(小果 bot 以 root 白跑 8 天 2.5GB 的教训)
+64
View File
@@ -0,0 +1,64 @@
# 知微运维纪律(2026-07-21 生效)
> 由小小莫(Sisyphus)与老爸共同制定。核心原则:**实际部署的脚本 = MoFin git 最新版代码**。
> 违反本纪律的改动会被 `deploy_guard.py`(每 15 分钟)自动回滚并告警。
---
## 一、绝对禁止
1. **不得直接编辑 `/home/hmo/MoFin/` 下任何被 git 跟踪的代码文件**(包括 `deploy/profile-scripts/`、根目录 `*.py``server.py``static/*.html``prompt_manager/`)。部署守卫每 15 分钟扫描,**未提交的工作区改动一律自动 `git checkout` 回滚**,并通过 XMPP 告警
2. **不得直接编辑 `/home/hmo/.hermes/profiles/*/scripts/` 下的文件**——那些是指向 canonical 的硬链接,编辑它们 = 编辑 canonical + 造成断链漂移
3. **不得在未 `git pull --rebase` 的情况下提交代码**2026-07-20 17:31 事件:基于过期 checkout 提交,回滚了 candidate_filter busy_timeout 和 premarket Step1.5 两处修复)
4. **不得直接调用 hermes gateway `/v1/chat/completions` 做批量 LLM 调用**——那是 agent 运行时不是透传(dev-spec 红线#11,603288 事件:单次调用螺旋 35 分钟/44 次 terminal/153k token)。批量调用一律用 `llm_client.call_llm()`OCG 直连)
## 二、自愈系统如何在纪律下运作(不矛盾)
L3 自愈(self_repair.py)的动作白名单**本来就不改代码**,guard 不会干预:
| 白名单动作 | 性质 | guard 态度 |
|---|---|---|
| `rerun_script` | 重跑脚本 | ✅ 允许 |
| `restart_service` | 重启 systemd 服务 | ✅ 允许 |
| `sync_links` | 重链硬链接 | ✅ 允许(与 guard 同向) |
| `switch_llm_key` | 切换 LLM key(改 hermes config,非 MoFin repo | ✅ 允许 |
| `none`(只报告) | 报备 | ✅ 允许 |
**key 切换、服务重启、任务重跑、硬链修复——自愈能做的一切都不需要碰代码。**
## 三、当判断"需要改代码"时
### 路径 A(首选):kanban 提单给小小莫
描述问题+证据+建议方案,小小莫处理。适用于一切非紧急情况。
### 路径 B(紧急热修):走 git 正规流程
```
cd /home/hmo/MoFin
git pull --rebase # 必须第一步!否则回滚别人的修复
# 修改代码
python3 -m py_compile <改动的文件>
# 最小化验证(能跑就跑一下)
git commit -m "fix: <原因>"
git push origin master:session-work # 或留本地并立即 XMPP 通知小小莫合并
```
- **git 提交永远安全**:guard 只回滚未提交的工作区改动,不动 commit
- 提交到 session-work 后,guard 会在 15 分钟内自动 merge 到 master 并完成部署(含重链、dashboard 重启)
- 提交前不 pull = 纪律违规(见一.3)
## 四、guard 的自动部署回路
```
任何机器 push → 246 repo session-work 分支
→ deploy_guard15min)检测领先且可快进
→ 自动 merge → sync_profile_scripts.sh 重链
→ 触及 server.py/static 时自动重启 mofin-dashboard
→ XMPP 报备
```
## 五、数据/运行时产物不受限
`data/``gateway/logs/``static/mofin_health.json` 等运行时产物不在守卫范围,正常读写无碍。
---
*依据:dev-spec 十条红线 + 2026-07-20 stale 提交事件 + 2026-07-21 gateway agent 螺旋事件*