# 27 M3 第三波收口:Flutter 社区接入完成 **执行日期**:2026-09-09 **交付**:冻结契约 v1.3.0 下社区全页面族接入真实后端,社区 demo 数据消亡 --- ## 0. 概要 | 工单 | 交付 | 提交(flutter dev) | 测试 | |------|------|------|------| | T3-12 数据层 | 19 操作 DTO/Client/Repository + 9 新错误码 + ToggleSync + CursorPage 上移 core | 19bd8c1 | 286→347 | | T3-13 媒体上传客户端 | MediaUploader 六态 + 孤儿防护 + 降质阶梯 + 凭据过期重取 | 1441f01 | →379 | | T3-14 Feed 替换 | 四态 + 尾部三态 + 曝光浏览段聚合 + SignedNetworkImage | 8aac8c5 | →421 | | T3-15/16 详情与互动 | 整页替换 + 真九宫格大图 + 评论区 + ToggleSync 跨页一致 + 互动 8 事件 | 92524da / f873acf | →458 | | T3-17 发布页 | PostComposePage + 草稿两路径 + gating + 发布漏斗 8 事件 | 9892b65 | →502 | | 字典 v3 白名单(api) | EventDictionary 22→42 事件 + 7 锁死事件边界 | api dev@8089c06 | api 325→334 | **波末状态**:patbond-flutter **502 测试**全绿、analyze 0 问题、format 无 diff;patbond-api **334 测试**全绿。 ## 1. 里程碑意义 - **社区 demo 在三页全面消亡**:`AppState.posts/publishPost/updatePost` 及其持久化整体退役;home Feed、post_detail、create 发布半边全部真实后端驱动(create 页仅余 AI 生成模拟,属 M4 范围零改动) - **M3 验收标准逐条取证**:发布后另一客户端可见(T3-17 双 App 实例实测)、重复点赞不重复计数(后端真并发 + 前端 ToggleSync)、分页不丢不重(T3-14 游标专项 + 26 帖实测)、删除/隐藏不出 Feed(后端谓词 + 40403 防枚举) - **媒体链路端到端**:选图→压缩→预签名直传 MinIO→confirm→引用发帖→预签名 GET 展示,四次 compose 实测无契约偏差;签名 URL 缓存 key 剥离(SignedNetworkImage)全仓生效 - **乐观更新完整落地**:ToggleSync(乐观翻转/单飞合并最终意图/代次守卫/服务端权威终态收敛)+ 三层视觉抑制(240ms 弹性动画/失败零动画跳变/对账静默替换),Feed 与详情页共享实例同帧一致 - **埋点 v3 端到端**:客户端挂接 21 事件(feed 2 + 互动 8 + 媒体 3 + 发布漏斗 5 + page_viewed 页名增量),后端白名单 42 事件承接,7 个被否决事件在字典层锁死 ## 2. 实现期修正与发现 - **T3-13 抓修 T3-12 遗留缺陷**:media 两步上传端点在 user 服务(:8082),T3-12 误挂 community 客户端(:8084 无 media 路由,真链路必 404);compose 实测暴露,增 mediaApi 分端口直连修正 - **T3-14 测试暴露两处真 bug**:尾部失败态被滚动自动重试冲掉、回前台不开新曝光段 - **T3-17 两步发布定型**:createPost(draft) → PATCH published,使「发布失败但草稿已保存」成为事实而非话术 - **桌面替身局限记录**:Linux 桌面无 image_picker/compress 平台实现(用替身)、`platform=linux` 使埋点整批 400(既有预期),两者均已写入真机验证清单前置 ## 3. 遗留与下波 - 完整草稿列表与自动保存(26 号 §7)、大图「下滑关闭」手势(photo_view 复评)、话题功能(ADR-018 剪出) - uploading 超时清理定时任务、429 Retry-After 分支(待后端限流) - **第四波收官**:E2E 烟囱(社区全链路 + M3 四条验收标准取证)→ M3 收官总结 + feature-checklist 增补;真机四项已在 device-verification.md 备齐步骤,待设备到位执行