- releases.md 新增 v0.4.0(M3.5 体验补齐):三仓 tag、门禁 8 项证据、 首次经 PR 流程发布的操作记录与流程验证结论、期间安全事件索引 - checklist 变更登记:**回归清单由两份改为四份**(M1/M2/M3/M3.5), 原则「每个引入对外端点的迭代都应有对应 E2E 脚本并在此后每次发布回归」 - feature-checklist 新增第 13 节(M3.5 共 13 条) - 08 号报告:E2E 四份 42/42 场景 234 断言零失败、契约偏差 0; 另实证零迁移在存量库升级路径(Flyway: No migration necessary) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
> 目的:直观呈现哪些功能**已完成且有自动化测试**、哪些**部分完成**、哪些**尚未开始**,方便针对性验证与回归。
|
||||
> 维护约定:每波工单合入后由执行人更新本清单;状态以 `dev` 分支 + 门禁全绿为准。
|
||||
> 最后更新:2026-09-10(M3 收官:patbond-api `8089c06` 334 测试、patbond-flutter `0e87413` 502 测试,均门禁全绿;E2E 烟囱 14/14 契约偏差 0;M2 条目见第 7~9 节,M3 见第 10~12 节)
|
||||
> 最后更新:2026-09-14(**v0.4.0 发布**:patbond-api `3cd8005` 379 测试、patbond-flutter `fbcd734` 597 测试,均门禁全绿;E2E 四份 42/42 场景零失败、契约偏差 0;M2 条目见第 7~9 节,M3 见第 10~12 节,M3.5 见第 13 节)
|
||||
|
||||
图例:✅ 已完成且已测试 | 🟡 部分完成/有已知限制 | ⬜ 未开始
|
||||
|
||||
@@ -220,3 +220,25 @@ curl -s -i http://127.0.0.1:8082/internal/users/by-username/demo_user | head -1
|
||||
| 逐卡 Feed 曝光 | ⬜ | ADR-020 否决(量级测算 7~14 个月击穿分区阈值 + 无背压);留 backlog 待 M4+ 服务端下发日志 |
|
||||
| Android 真机验证(M2 两项 + M3 四项) | 🟡 | 步骤全部备齐在[真机验证清单](device-verification.md);桌面 `platform=linux` 整批 400 属契约内,落库只能真机验 |
|
||||
| `eventVersion` 口径定型 | ⬜ | 契约描述可两读、服务端不校验、客户端硬编码 1(E2E 观察项 2) |
|
||||
|
||||
---
|
||||
|
||||
# M3.5 体验补齐(v0.4.0)
|
||||
|
||||
## 13. 用户资料与头像
|
||||
|
||||
| 功能 | 状态 | 自动化测试 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| 中文本地化(Material 内置组件) | ✅ | widget 测试断言中文渲染 | 此前从未配 `flutter_localizations`,Flutter 静默回退英文;顺带 `datePickerTheme` 上品牌色(只复用已审计色对) |
|
||||
| 日期录入共享层 `pickAppDate`(7 处调用点收口) | ✅ | 断言 `DatePickerDialog.firstDate/lastDate` 防后续放宽 | 保留手输铅笔 + 表单行「今天」快捷(原生 picker 无法注入弹窗内动作);月份网格未做(🟡 遗留) |
|
||||
| `GET /api/v1/me` 补 nickname/avatarUrl | ✅ | 契约矩阵 + E2E | **不做 username 回退**(回退只在客户端展示层做一层,避免编辑页预填后固化) |
|
||||
| `PATCH /api/v1/me`(昵称 + 头像,三态) | ✅ | 全响应矩阵 5 格 + E2E 三态专项 | 键缺省=不改 / 显式 null=清空 / 给值=设置;纯空白昵称 400;空 patch 400;昵称长度按**码点**计(32 emoji 通过、33 拒) |
|
||||
| 用户头像上传(`purpose=user_avatar`) | ✅ | E2E 两步上传 + 字节一致 | `avatarAssetId` 只写不读,「有头像」等价 `avatarUrl != null` |
|
||||
| 宠物头像读写(`purpose=pet_avatar`) | ✅ | 契约矩阵 + E2E | **权限按本次碰了哪些字段定档**:仅头像=WRITE(owner+caregiver)、含资料字段=MANAGE、混合取更严 |
|
||||
| `GET /api/v1/me/community-stats` | ✅ | 2 格矩阵 + E2E(含草稿不计、他人帖不串号) | 读侧实时聚合(`SUM(like_count)`),无新冗余列;本人 published 且未软删,自赞计入 |
|
||||
| 资料页真实化 + 编辑页 | ✅ | 四态 + 展示名回退双路 + PATCH 载荷断言 | 176 行硬编码 demo 退役;四项统计全部真实 |
|
||||
| 首页问候语真实化 | ✅ | widget 用例反向钉住「保留项仍在」 | 其余首页 demo 按 **ADR-022 刻意保留**并在代码标注去向(天气/位置待外部服务、圈子=话题属 ADR-018 剪出、促销卡属 M5) |
|
||||
| 花费卡显示实际月份 + 数据卡可点提示 | ✅ | `monthlyExpenseCardLabel` 纯函数单测 | 同年「9 月花费」、跨年「2026/12 花费」、非法串回退「本月花费」 |
|
||||
| 契约 v1.4.0 冻结 + 四模块快照同步 | ✅ | 矩阵 181 格、mutation 自证 | 对 v1.3.0 纯增量;11 格红转绿 |
|
||||
| 「我的收藏与草稿」列表页 | 🟡 | — | 后端与仓库层已就位,缺 2 页面 + 导航(建议独立 S~M 工单) |
|
||||
| 真机项(头像上传弱网、头像缓存) | 🟡 | — | 步骤已登记[真机验证清单](device-verification.md) M3.5 节 |
|
||||
|
||||
Reference in New Issue
Block a user