Files
HomeAgent/docs/zh/prod-migration-checklist.md
JianFeeeee 4963d70215 docs: 逐篇核实全部文档的完成状态 —— 修正 6 处与代码不符的自述
## 上一轮的遗漏

上次只补了"缺状态行",但**32 篇正文里的状态声明基本没动**。而那些声明
大多是 1~2 周前写的,代码早已推进。本轮逐篇对代码核实。

## 逐篇核实结果(方法:读当前代码,不看文档的历史描述)

### 1. memory-usability-plan:待执行 → 已实施

文档写「状态:**待执行**(2026-10-22)」。三条根因实测**全部已修**:

| 根因 | 实测 |
|---|---|
| R1 向量化输入是 jieba 词袋 | ✅ `coldcontext.go` 的 `denseFor` 明写「用事件正文(原文),不用 Summary(jieba 词袋)」 |
| R2 媒体块无语义 | ✅ 块 union 化,媒体即块自带描述 |
| R3 提示词无引导 | ✅ `tooldefs.go` 明写 `coldcontext_query` 把历史**插回时序**,并下沉到 kernel-memory skill |

### 2. entities-retirement-plan:执行中 → 方案已定、执行未完成

写「三表全退,执行中」,容易被读成"快完成了"。实测生产库:
`entities 1292 / relations 978 / sentences 66` 行**仍在用**。
迁移工具就绪,但生产未切换 —— 这个区别对判断风险很关键。

### 3. scene-memory-fix-plan:部分落地 → 7 步里 5 步完成

逐条核实:步骤 1/2/3/5/6 已完成(含 SDK 的 `ScenePolicy`、
`scene_emerge.go` 已区分 `peer:group_*` 与 `peer:user_*`);
步骤 4(清现网垃圾场景)与 7(收口验证)属现场操作,未复核。

### 4. prod-migration-checklist:⚠️ 最危险的一处

写「**状态**:HologramAgent 已停机(inactive + disabled)」——
那是一次性迁移(2026-10-04)当场的真实状态,**不是现在的**。
照着它读会以为服务停着。改为明确归档说明 + 指向现行 runbook。

### 5. abstention-criterion:「拒答尚未接入生产路径」已不成立

实测拒答已下沉到图库层(`RecallBlocksGuarded`),生产路径
`toolcall.go:1312` 与端到端探针**走同一条路**。保留了下沉的理由
(第一版放上层,探针绕过它 ⇒ 判据测不到被测路径)。
剩余两项(泛指词检测、n=10 样本偏小)仍开放。

### 6. toolcall-parallel-execution-plan:阶段 0.5 起为待办 → 全部已完成

实测阶段 0/0.2/0.5/1/2/2.5 与 3/4 全部完成,遗留项也已解决。

## 顺带修正两处写法

- `memory-restructure-plan.md`:顶部有「执行结果摘要」但正文各步骤仍写
  `✗ 未开始`(原始计划快照,有意保留)。加一句读法说明,
  避免读者拿正文的快照当现状。
- `future-plan.md` §六:新增 5 条实测确认的待办并去掉 2 条重复项
  (遗留表退役、中断子系统原先各出现两次)。

## 核对

- docs/zh 32 篇全部有状态行,且与代码实测一致
- 代码块全部配平;文档间相对链接全部有效
- go build 通过(纯文档改动)
2026-10-31 08:20:47 +08:00

5.3 KiB
Raw Blame History

生产迁移执行清单

日期:2026-10-04 分支:feat/context-overflow-l4(未 push) 状态:⚠️ 归档(2026-10-04 的一次性操作清单)

本文记录的是那次停机迁移的执行现场。其中「已停机」是当时的真实状态, 不是现在的状态 —— 现在就别照着这份清单判断服务是否在跑。

现行部署操作见 deploy-runbook.md; 服务当前状态用 systemctl status hologramagent 查。


0. 前置条件(必须全部满足)

项 要求 实测
服务停机 homeagent.service inactive ✅ inactive + disabled
WAL 已 checkpoint PRAGMA wal_checkpoint(TRUNCATE) 返回 0|0|0 ⬜ 执行前重查
快照已存在 一致副本(非 cp,用 .backup) ✅ /var/tmp/ha-prod-migrate/before.db
快照基线 1294/980/66/98/97 ✅ 已核对
副本验证 结构 7 项 + 召回 7/9 ✅ 已通过
代码提交 43 包全绿 ✅
磁盘空间 迁移后约 18MB(副本实测) ⬜ 执行前确认

★ 副本用的就是生产快照,所以"在副本验证"等价于"在生产数据形态上验证"。


1. 执行步骤

# ① 停机确认(已停,此处防呆)
systemctl is-active  homeagent.service     # 期望: inactive
systemctl is-enabled homeagent.service     # 期望: disabled

# ② WAL checkpoint
sqlite3 ${HA_DATA}/memory/graph.db "PRAGMA wal_checkpoint(TRUNCATE)"
#    期望输出: 0|0|0

# ③ 生成新快照(.backup,不是 cp)
TS=$(date +%Y%m%d-%H%M%S)
sqlite3 ${HA_DATA}/memory/graph.db ".backup '/var/tmp/ha-prod-migrate/prod-$TS.db'"
#    核对副本基线与源库一致
sqlite3 /var/tmp/ha-prod-migrate/prod-$TS.db \
  "SELECT COUNT(*) FROM entities; SELECT COUNT(*) FROM relations; SELECT COUNT(*) FROM sentences;"

# ④ 先报告(不写库)
go run -tags onnxruntime ./cmd/homed-graph-migrate \
  -db ${HA_DATA}/memory/graph.db \
  -embed-provider chineseclip \
  -model-dir /var/tmp/ha-c/models/chinese-clip-vit-b16-onnx
#    ★ 核对:实体 1294,关系 966,块 98,块边 97
#    ★ 若数字对不上 → 停止,不要 -apply

# ⑤ 执行迁移(约 200s)
go run -tags onnxruntime ./cmd/homed-graph-migrate \
  -db ${HA_DATA}/memory/graph.db -apply \
  -embed-provider chineseclip \
  -model-dir /var/tmp/ha-c/models/chinese-clip-vit-b16-onnx

# ⑥ 验证
bash scripts/verify-migration.sh ${HA_DATA}/memory/graph.db
#    期望:✅ 结构验证全部通过

# ⑦ 召回探针
PROD_SNAPSHOT=${HA_DATA}/memory/graph.db \
  go test -count=1 -tags onnxruntime ./internal/memory/ \
    -run 'TestProbe_生产规模召回' -v
#    期望:casual 3/4, confusable 1/1, abstention 3/3, 合计 7/9

★ 全程串行。迁移涉及 1294 个块的 embedding, 并行会导致资源争用与长时间卡死(此前实测过 600 秒卡死)。

★ 旧表不删。迁移只写块与边,entities/relations/sentences 保持原样(验证脚本第 1 项逐表核对)。


2. 期望产出(副本实测值)

句子 +66,块 +1294,边 +980,scene_refs +718
块 2752(带向量 1391),边 2371
悬空端点 0
向量维度唯一 512,fingerprint 唯一
confidence 为 0 的关系边 0 条
deleted 状态关系边 14 条(对应旧表 14 条)
中心向量已重建(各向异性 detected,双边中心化启用)
耗时约 200s

3. 回滚

回滚条件

迁移后出现以下任一情况 ⇒ 立即回滚:

  • 验证脚本报 ❌
  • 召回探针合计低于 4/9(迁移前基线)
  • 启动后 memory_recall 报「检索失败」
  • 健康检查异常

回滚方式

★ 旧表未被改动,所以回滚很简单:

# ① 恢复代码到迁移前的提交
git checkout 75d4609      # 或 d4eda47 / 2fe4ca7 等任一已验证提交

# ② 恢复数据库(若需要)
TS=<迁移时的快照时间戳>
cp /var/tmp/ha-prod-migrate/prod-$TS.db ${HA_DATA}/memory/graph.db
#   ★ 生产库必须用 .backup 恢复,不要直接 cp 源库

# ③ 重建二进制并重启(需你确认后才启服务)
go build -tags onnxruntime -o build/homed ./cmd/homed
systemctl enable homeagent.service && systemctl start homeagent.service

回滚安全性

保证 依据
旧表数据完好 迁移只 INSERT 块/边,验证脚本第 1 项核对
迁移单事务 任一步失败整体回滚
迁移自动快照 命令自身会生成 .bak-<时间戳>
代码可回退 全部改动已提交,未 push

4. 迁移后仍存在的问题(不阻塞迁移,但要记录)

问题 状态 补法
coexist 泛指提问召不回端口号 0/1 BFS 接入 RecallBlocksFused
纯中文编造查询不拒答 契约外 需符号切分改进或换判定信号
旧表仍在增长 待停双写 读方已全切,可摘 commit() 里的 INSERT
TestResidualKeepReturnsTasksToParent 既有 flake 单独复验,勿误判

5. 与旧快照的关系

/var/tmp/ha-prod-migrate/before.db   本轮开始时的生产基线(1294/980/66/98/97)
/var/tmp/ha-prod-migrate/probe.db    副本,已完整迁移并验证
/var/tmp/ha-prod-migrate/base-copy.db  迁移前基线探针用

★ before.db 与 probe.db 是同一份数据的迁移前后对照, 两者都在,可随时重跑任何验证。