立单:小冈 2026-09-28 | 依据:AGENTS §2 铁律5(生产部署人工确认)+ §3 铁律(迁移只增编号、两库执行并记录)
staging 已验证:45 篇 body_html 全非空 / 六卷分布与清单 v1 一致 / API minilib=true 过滤实测 45 / 冒烟 26/26
核验: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 重新落全量。
生成: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
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 非空
UPDATE guides SET in_minilib=FALSE WHERE in_minilib=TRUE; ——API minilib 过滤即空,前端子集消失,长尾内容不受影响UPDATE guides SET is_test=TRUE WHERE slug LIKE 'minilib-%' OR id IN (36 复用 id 清单见 scripts/sync_minilib.py SLUG_ID); ——回到灌库前可见性