f17e6f1215
CI / docs-build (push) Successful in 34s
- 09 V5+community 骨架(191→206)、10 埋点队列三项(272→286)、 11 契约草案(13 路径/19 操作)、12 防泄漏三仓落地、 13 media MinIO 闭环 + auth 契约测试(→226,抓修 1 漂移)、14 收口总表 - backend-modules.md 更新五模块/六容器口径 - 媒体凭据形态已定型(契约冻结输入),剩余待定型点在 T3-04/05 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
14 M3 第一波收口:地基、媒体闭环与防泄漏
执行日期:2026-09-08 交付:V5 迁移 + community 骨架、MinIO 媒体最小闭环、埋点队列加固、契约草案、凭证防泄漏三仓、auth 契约测试补齐
0. 概要
| 工单 | 交付 | 提交 | 测试 |
|---|---|---|---|
| T3-01 V5 迁移 | community 8 表 + pg_trgm,剪 2 条跨 schema FK(M4/M5 补回) | api dev@a97814a | 191→199 |
| T3-02 community 骨架 | :8084 五容器、骨架期即接 RS256 校验 | api dev@3c671fc | →206 |
| T3-03 media 闭环 | MinIO 适配层 + 两步上传 + 私有桶签名读(ADR-016/017) | api dev@10a43f8 | →218 |
| T3-19 auth 契约测试 | 6 操作 19 单元格全矩阵,抓修 1 真实漂移(reason NON_NULL) | api dev@263cd88 | →226 |
| T3-19 队列三项 | 30s 定时冲刷 + 指数退避 + anonymousId 持久化 | flutter dev@4d40c38 | 272→286 |
| T3-10 起草态 | community/media 契约草案 13 路径/19 操作 + 4 待定型点 | 草案在 iteration-3/ | — |
| ADR-021 防泄漏 | 9 规则两层检查三仓落地,零误报 + 拦截自测全命中 | api@8330885 flutter@66f983d doc@8e1fe2f | CI 全绿 |
波末状态:patbond-api 226 测试 / patbond-flutter 286 测试全绿;compose 六容器(postgres+minio+auth+user+pet+community)实测健康;三仓 CI 绿。
1. 契约冻结输入已定型(T3-03 部分)
媒体凭据形态:创建上传返回 {assetId, uploadUrl(预签名 PUT), method, requiredHeaders, expiresAt(10min)};读取一律私有桶预签名 GET(1h TTL);purpose=post_image、mime 白名单 jpeg/png/webp、单文件 10 MiB。与草案偏差 7 项见 13 号报告 §4。剩余待定型:Feed 卡片字段与公开资料形态(T3-05)、权限/错误语义(T3-04)。
2. 遗留与下波
- uploading 超时清理:方案已记录(13 号报告),定时任务另排。
- 401 去 Authorization 重试、429 Retry-After 精细分支:待后端限流(10 号报告记录)。
- 第二波:T3-04 帖子生命周期 → T3-05 Feed → T3-06/07 评论互动 → 契约冻结闸门;D3-9 方案 B 的 /internal 批量公开资料接口随 T3-05 落地。