- 28 E2E 烟囱:14/14 场景、契约偏差 0、M3 四条验收标准逐条取证 (两次不同 limit 全量翻页有序 id 逐位相等、删除前后差集验证、psql 库层互证) - 29 收官总结:终态对照开工基线(测试 191/272→334/502、契约 18→31 路径冻结、 ADR 001~021、四容器→六容器 + MinIO)、遗留清单与 M4 方向输入 - iteration-3/index.md 进展看板补建;feature-checklist 新增 M3 第 10~12 节 - 另登记 2 项 E2E 观察项:widthPx/heightPx 恒 null、eventVersion 口径未定型 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
> 目的:直观呈现哪些功能**已完成且有自动化测试**、哪些**部分完成**、哪些**尚未开始**,方便针对性验证与回归。
|
||||
> 维护约定:每波工单合入后由执行人更新本清单;状态以 `dev` 分支 + 门禁全绿为准。
|
||||
> 最后更新:2026-09-08(M2 第三波收口:patbond-api `64c9b72` 191 测试、patbond-flutter `ba50332` 272 测试,均门禁全绿;三次 compose 实测无契约偏差;M2 条目见第 7~9 节)
|
||||
> 最后更新:2026-09-10(M3 收官:patbond-api `8089c06` 334 测试、patbond-flutter `0e87413` 502 测试,均门禁全绿;E2E 烟囱 14/14 契约偏差 0;M2 条目见第 7~9 节,M3 见第 10~12 节)
|
||||
|
||||
图例:✅ 已完成且已测试 | 🟡 部分完成/有已知限制 | ⬜ 未开始
|
||||
|
||||
@@ -169,5 +169,54 @@ curl -s -i http://127.0.0.1:8082/internal/users/by-username/demo_user | head -1
|
||||
| 事件字典 v2 白名单(pet 域 3 + health_record 域 7) | ✅ | 后端白名单 + 边界测试(api@64c9b72);page_viewed 正稿核对零修正 |
|
||||
| 客户端挂接:pet 域 3 事件 + health_record 域 6 事件 + pet_form 等页名 | ✅ | 强类型封装(pet_analytics/health_record_analytics);deleted 留待删除端点 |
|
||||
| Android 真机落库验证 + SessionTracker 30min 手测 | 🟡 | 桌面端全链路已通(platform 枚举拒绝属契约内);真机验证按方案 A 挂起待设备 |
|
||||
| 队列完善:30s 定时冲刷、退避/429、anonymousId 持久化 | ⬜ | 报告 15 §4 遗留;429 依赖后端限流实现(报告 09 出入清单) |
|
||||
| 队列完善:30s 定时冲刷、退避、anonymousId 持久化 | ✅ | **M3 第一波交付**(iteration-3/10,flutter@4d40c38);429 Retry-After 精细分支仍待后端限流 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
# M3 社区(第三迭代)
|
||||
|
||||
## 10. 社区域后端(patbond-community :8084 + media in user)
|
||||
|
||||
| 功能 | 状态 | 自动化测试 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| Flyway V5 community 8 表 + pg_trgm 扩展 | ✅ | 迁移验证 8 例(干净库 V1→V5) | 剪 2 条跨 schema FK:`posts.generation_job_id`(M4 补回)、`posts.region_id`(M5 补回),裸列与索引保留 |
|
||||
| patbond-community 独立模块(ADR-017)挂 pom + compose | ✅ | 骨架 7 例(含鉴权 5) | 骨架期即接 RS256 校验(无 token/畸形/错签/过期均 401+40101);只读写 community schema |
|
||||
| **media 两步上传闭环**(ADR-016/017) | ✅ | 12 例(MinIO Testcontainer 全链路 + 六类失败) | 创建 upload 签预签名 PUT(10min)→ confirm ready → 私有桶预签名 GET(1h);post_image / jpeg·png·webp / 10 MiB;ObjectStorage 适配层隔离供应商 |
|
||||
| 帖子生命周期 5 端点(草稿/编辑/发布/软删/详情/我的列表) | ✅ | 25 例(含真双线程并发 PATCH 恰一胜) | 发布走 PATCH draft→published;Idempotency-Key 必带 + request_hash(40905);防枚举 404/40403 逐字节一致(hidden 对作者亦不露) |
|
||||
| 公共 Feed 游标分页 + FeedCard | ✅ | 分页专项 8 + 卡片定型 5 | `(published_at,id)` 游标对齐 `ix_posts_feed`;contentPreview 200 码点截断;三计数走冗余列写侧同事务维护 |
|
||||
| 作者公开资料链路(D3-9 方案 B) | ✅ | 内部端点 8 + 作者链路 7 + Feign 线路 3 | user 增 `/internal/users/profiles`(≤50 批量,不入公网契约)→ community Feign + 60s 缓存;**user 故障时作者退 id-only、Feed 照常 200** |
|
||||
| 单层评论(列表/创建/删除) | ✅ | 11 例 | **仅评论作者可删**(用户拍板,帖主不可删他人评论);40404/40406 |
|
||||
| 点赞/收藏 PUT+DELETE 幂等 + 我的收藏 | ✅ | 真并发(4 线程 PUT 恰计 1 行 1 计数)+ 对账专项 | 响应回权威终态 `{liked,likeCount}`;互动面 = 帖子公开面(作者本人草稿亦 404) |
|
||||
| 关注 PUT/DELETE + follow-stats | ✅ | 3 线程并发 follow 恰 1 行 | 自关注 42204(仅 PUT);自取关 200 幂等 no-op |
|
||||
| 契约冻结 v1.3.0 + 快照矩阵 173 格 | ✅ | community 64 格 + media 8 格 + mutation 自证 | 43/43 操作零漂移;四模块字节级快照,升版须同步否则 CI 红;修 `nullable+allOf` 校验盲区 |
|
||||
| uploading 超时未确认 asset 清理任务 | ⬜ | — | 方案在 iteration-3/13,定时任务另排 |
|
||||
| 429 限流 | ⬜ | — | 承自 iteration-2/09 出入清单;连带客户端 Retry-After 分支挂起 |
|
||||
| 话题 / 关注列表 / 作者主页 | ⬜ | — | ADR-018 裁剪出 M3(topics 表已建) |
|
||||
|
||||
## 11. 社区域客户端(patbond-flutter)
|
||||
|
||||
| 功能 | 状态 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| community 数据层(契约 19 操作全覆盖,T3-12) | ✅ | 9 新错误码类型化;未知枚举抛 FormatException 暴露漂移;CursorPage 上移 core 供两域复用 |
|
||||
| **ToggleSync 乐观更新状态机** | ✅ | 乐观翻转 + 快照回滚 + 单飞合并最终意图 + 代次守卫 + 服务端权威终态收敛;竞态时序 controller 级单测 |
|
||||
| MediaUploader 六态编排(T3-13) | ✅ | 选图→压缩→预签名直传→confirm;29 项专项(降质阶梯/凭据过期重取/多图并发保序/孤儿防护) |
|
||||
| 首页 Feed 真实数据 + 四态 + 尾部三态(T3-14) | ✅ | 下拉刷新 + 触底游标翻页;PostCard 三形态/PostMediaGrid/LikeButton/FeedSkeleton 入 core;**SignedNetworkImage 剥离签名参数做缓存 key** |
|
||||
| 帖子详情整页替换 + 评论区(T3-15) | ✅ | 真九宫格 + InteractiveViewer 大图;仅本人评论渲染删除入口;40403 返回 Feed 并刷新;关注双态钮 |
|
||||
| 互动接线 + 三层视觉抑制(T3-16) | ✅ | 240ms 弹性激活 / 失败零动画跳变 + SnackBar / 对账静默替换;Feed 与详情共享 ToggleSync 同帧一致;减弱动态降级 |
|
||||
| 发布页 PostComposePage(T3-17) | ✅ | 两步发布 createPost(draft)→PATCH published(「发布失败但草稿已保存」为事实);gating 双保险;失败三语义(40905/42203/网络同键重放);草稿两路径 + 进页恢复 |
|
||||
| 社区 demo 数据消亡 | ✅ | `AppState.posts/publishPost/updatePost` 及持久化整体退役;create 页仅余 M4 的 AI 生成模拟 |
|
||||
| 完整草稿列表 / 自动保存 | 🟡 | 最小实现(进页恢复最新一条);完整管理留待(报告 26 §7) |
|
||||
| 大图「下滑关闭」手势 | 🟡 | InteractiveViewer 手势冲突,待 photo_view 复评 |
|
||||
| `widthPx/heightPx` 真实宽高比 | 🟡 | 服务端恒 null(E2E 观察项 1),单图帖一律回落 4:3 |
|
||||
|
||||
## 12. 埋点体系(M3 演进)
|
||||
|
||||
| 功能 | 状态 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| 队列三项加固(30s 定时冲刷 / 指数退避 / anonymousId 持久化) | ✅ | 13 号规范四触发点补齐;退避 30s→5min 只挡定时冲刷;anonymousId 跨冷启动稳定(A/B 前置 #4) |
|
||||
| 事件字典 v3 白名单(community 域 19 + experiment_exposed) | ✅ | EventDictionary 22→42;**7 个被否决事件锁死 unknown**(含逐卡曝光 post_impression) |
|
||||
| 客户端挂接 21 事件 | ✅ | feed 2(聚合 feed_viewed:≥50% 可见 ≥500ms、段内去重、离开结算)+ 互动 8 + 媒体三段 3 + 发布漏斗 5 + page_viewed 页名增量 |
|
||||
| 逐卡 Feed 曝光 | ⬜ | ADR-020 否决(量级测算 7~14 个月击穿分区阈值 + 无背压);留 backlog 待 M4+ 服务端下发日志 |
|
||||
| Android 真机验证(M2 两项 + M3 四项) | 🟡 | 步骤全部备齐在[真机验证清单](device-verification.md);桌面 `platform=linux` 整批 400 属契约内,落库只能真机验 |
|
||||
| `eventVersion` 口径定型 | ⬜ | 契约描述可两读、服务端不校验、客户端硬编码 1(E2E 观察项 2) |
|
||||
|
||||
Reference in New Issue
Block a user