CI / lint / typecheck / import-linter / tests / secrets (push) Canceled after 0s
- agent: ag_conversation/ag_message 表(迁移0007),上下文组装注入最近报告画像摘要 (report.profile.latest_profile_summary 经 apps 层闭包注入,同层不互调),历史带最近 AGENT_HISTORY_TURNS=10 轮;POST/GET /agent/conversations 与消息历史接口 - agent 修复:ChatRequest.conversation_id 改 str(雪花ID超2^53,JS Number丢精度); _build_context 挪进 reserve commit 后同一 try,异常走 refund 兜底 - report: rp_feedback(维度反馈 upsert,认同率/修正率 SQL 可算,T-P3-21 最小版—— L1 记忆未建,不回写结论)+ rp_reservation(预约留资幂等,T-P3-22,预约率口径 行数/full_report.card_view 去重曝光,门槛≥8%),迁移0008 - 测试:全量 606 passed;ruff/mypy/lint-imports 全绿;E2E 真实 deepseek-v4-flash 验证 画像注入与历史携带
migrations/ — Alembic
异步引擎(asyncpg)+ pgvector。Base.metadata 来自 packages/shared/models.py。
make migrate # upgrade head
make makemigration m="add kb tables" # autogenerate
uv run alembic downgrade -1 # 回滚一步
规矩
- 迁移必须向后兼容(架构 §14.3):加列不删列、先双写后切读。发布流程是 「先迁移,后发布」,所以新迁移必须能和旧版应用代码共存,否则回滚时数据 不兼容。
- 必须可逆,或在文件头明确标注不可逆并说明原因(§16.2 迁移检查清单)。
CI 会跑
upgrade → downgrade base → upgrade。 - 表名必须带域前缀:
id_/pf_/rp_/kb_/ag_/tr_/bl_/tk_/cp_/ob_。单库多域,前缀就是将来拆库的边界(§6.1)。 - 主键用雪花 ID(bigint),不用自增(枚举攻击 + 分库冲突),不用 UUID 作主键(索引局部性差)。
- 不要存人脸原图,也不要存可反推生物特征的数据(TD-20 / CR-02)。诊断结果 只存分类标签与色值等派生量。
- 需要过滤的字段一律提升为列;JSONB 只用于「结构会演进且不需要索引全部字段」 的场景(§6.1 原则 6)。
- 配置类数据(配额规则、色板、路由)用迁移种子进表,不要硬编码进代码 (NFR-MAINT-05)。
已有迁移
| 版本 | 内容 |
|---|---|
0001 |
pgvector 扩展;id_user id_user_identity id_consent;bl_quota_rule bl_quota bl_ledger;tk_task;ob_ai_call;配额规则种子数据 |
§6.2 里其余的表(pf_ 画像与记忆、rp_ 报告、kb_ 知识库、ag_ 会话、
tr_ 换装、cp_ 合规)尚未创建,属于 M2~M4。