生产执行单 · minilib 45 篇灌库(待刘总人工确认)

立单:小冈 2026-09-28 | 依据:AGENTS §2 铁律5(生产部署人工确认)+ §3 铁律(迁移只增编号、两库执行并记录)
staging 已验证:45 篇 body_html 全非空 / 六卷分布与清单 v1 一致 / API minilib=true 过滤实测 45 / 冒烟 26/26

一、执行内容(三步,顺序不可换)

步1 · 生产库执行 305 迁移(若未执行)

核验:SELECT count(*) FROM schema_migrations WHERE filename LIKE '305%';   -- 已=1 则跳过
执行:cat backend/sql/305_minilib_subset.sql | ssh kailash "docker exec -i kailash-pg psql -U yos -d kailash -v ON_ERROR_STOP=1"
复验:SELECT count(*) FROM information_schema.columns WHERE table_name='guides' AND column_name IN ('in_minilib','vol','hook');  -- 应=3

注:305 含 36 篇复用标记 UPDATE;生产 guides 若缺对应 id(生产内容基线与 staging 不同),UPDATE 0 行不报错,步2 会按 slug/id 重新落全量。

步2 · 生产库灌 45 篇正文(SQL 从 md 真源派生,禁手工改)

生成:cd ~/dev/kailash-xg-wip277 && python3 scripts/sync_minilib.py --emit-sql > /tmp/minilib_prod.sql
      (与已灌 staging 的 SQL 逐字节同源:MD5 校验法见下)
执行:scp /tmp/minilib_prod.sql kailash:/tmp/ && ssh kailash "docker exec -i kailash-pg psql -U yos -d kailash -v ON_ERROR_STOP=1 < /tmp/minilib_prod.sql"
复验:SELECT count(*) FROM guides WHERE in_minilib;                                   -- 应=45
      SELECT count(*) FROM guides WHERE in_minilib AND length(coalesce(body_html,''))>100;  -- 应=45
      SELECT vol, count(*) FROM guides WHERE in_minilib GROUP BY vol ORDER BY vol;    -- 0:2 1:5 2:6 3:13 4:7 5:4 6:8

步3 · minilib 转正式内容 + 部署后端补列代码

UPDATE guides SET is_test=FALSE WHERE in_minilib=TRUE;   -- 生产既有内容若全测试数据,minilib 为首批正式内容(staging 同法已验)
部署:./scripts/deploy.sh   (guides.py 补 in_minilib/vol/hook 三字段+minilib 过滤参数,commit b21df846)
终验:curl -s https://api.kailashi.cn/api/miniapp/guides?minilib=true | 计数应=45 且带 vol/hook 字段
      curl -s https://api.kailashi.cn/api/miniapp/guides/91 | body_html 非空

二、前置核对(执行前必过)

  1. staging 复验三查已在案(本单头部)
  2. 45 篇事实核:机械四红线全过 + gpt6 抽样 8 篇(6-N6 七处编造断言已改诚实口径)+ 37 篇人工抽读待办(刘总/小齐/小冈各领卷)——抽读未完成不阻塞灌库,但阻塞提审
  3. 图片 21 张全 200 实测(2026-09-28)

三、回滚预案(两级,均不动正文)

四、责任与记录