docs: 第一迭代收官——进展看板/功能清单更新 + 迭代总结

第一迭代已完成(2026-09-03 → 2026-09-04):
- 后端:82 测试(JWT 会话、compose 编排、埋点系统)
- 前端:34 测试(登录纵切、埋点模块)
- 真机联调 E2E 7/7 通过,契约偏差 0 个
- OpenAPI 契约正式化,ADR-001~008 落地
- 报告 18(E2E)、19(埋点)、20(迭代总结)入档
- 进展看板标注「第一迭代已完成」+ 交付总结
- 功能清单更新:compose 、联调 、测试数 82/34

验收状态:PASSED(对照审计 M1 要求)
下一步:M2 宠物健康档案;M1 完善项(sessionId 生命周期、page_viewed、CI 启用)

门禁:mkdocs build --strict 通过
This commit is contained in:
2026-09-04 17:31:15 +08:00
parent b26b2af089
commit 8e0e1c5c42
6 changed files with 959 additions and 13 deletions
@@ -1,15 +1,15 @@
# 第一迭代进展看板
> 目标:真实登录纵切(注册 → 登录 → 获取当前用户 → 退出),依据[开发实施计划](../../development-plan.md)第 8 节。
> 更新日期:2026-09-04(第三波交付后)。本页是团队共享的进度事实来源,每波工作交付后更新。
> 更新日期:2026-09-04(第一迭代收官)。本页是团队共享的进度事实来源,每波工作交付后更新。
## 当前状态一览
| 状态 | 内容 |
| --- | --- |
| ✅ 已完成 | 开工分析(01-06)、工程基线(第一波)、持久化纵切(第二波)、JWT 会话 + Flutter 登录纵切 + OpenAPI 契约(第三波)、ADR-001~008 |
| 🔜 下一步 | 第四波:真实前后端联调与端到端验证 → CI 载体 → 本地编排(compose)→ 埋点落地 |
| ⚠️ 未闭环 | access token 无主动吊销(≤15 分钟窗口)、/internal 为静态密钥、auth_sessions 过期清理任务、前端全链路仅 mock 验证未联调、CI 载体缺失、TagPill 设计债 |
| ✅ 第一迭代已完成 | 认证纵切两端(JWT + Flutter 登录)+ 真机联调 E2E + 埋点系统 + Docker Compose 编排 + Git 工作流 + ADR-001~008,后端 82 测试、前端 34 测试 |
| 🔜 下一步 | M2 宠物健康档案(下一迭代主线);M1 完善项:sessionId 生命周期、页面浏览埋点、Gitea CI 启用(可选) |
| ⚠️ 遗留 | access token 无主动吊销(≤15 分钟窗口)、/internal 为静态密钥、auth_sessions 过期清理默认 30 天、埋点 7 项完善(报告 19 §3 已优先级排序) |
## 已完成(附提交)
@@ -27,16 +27,38 @@
**第三波:认证纵切两端交付**
- 后端 T4 + T6a`patbond-api@4dc3dcd`,报告 16):JWT RS25615m/30d 配置项)、refresh 轮换会话(auth_sessions 摘要 + token_family + 重用撤销全族)、多设备并行、登录锁定(42300)、`/api/v1` 前缀、`/internal` 共享密钥鉴权;测试 37 → 73,含双服务真实 HTTP E2E。附带修复两个存量缺陷Feign 错误解码器被子上下文遮蔽、JDK HttpURLConnection 读不到 401 错误体(此前下游错误在真实链路折叠为 503)。
- Flutter 登录纵切(`patbond-flutter@8d890c0` + 42300 映射 `da25804`,报告 17):dio 网络层(`--dart-define=PATBOND_API_BASE_URL`)、单飞 TokenRefresher、secure storage 会话、Splash/登录/注册三页照组装稿实现、真实退出入口;测试 7 → 30;契约零偏差;FIX-1/FIX-2/m2 一并修复。
- OpenAPI 契约正式化:[docs/api/openapi.yaml](../../../api/openapi.yaml)契约先行原则见 [API 契约说明](../../../api/index.md)
- 后端 T4 + T6a`patbond-api@4dc3dcd` 及后续 5 提交,报告 16):JWT RS25615m/30d)、refresh 轮换会话(auth_sessions 摘要 + token_family + 重用撤销全族)、多设备并行、登录锁定(42300)、`/api/v1` 前缀、`/internal` 共享密钥鉴权、Docker Compose 编排、Gitea CI 工作流、会话清理任务;测试 37 → 75。附带修复两个存量缺陷Feign 错误解码 + HttpURLConnection 401 读取)。
- Flutter 登录纵切(`patbond-flutter@8d890c0` + `da25804` + `845e92f`,报告 17):dio 网络层(`--dart-define=PATBOND_API_BASE_URL`)、单飞 TokenRefresher、secure storage 会话、Splash/登录/注册三页、真实退出、UserProfile.phone 可空修复;测试 7 → 30;契约零偏差;FIX-1/FIX-2/m2 修复。
- OpenAPI 契约正式化:[docs/api/openapi.yaml](../../../api/openapi.yaml)真机联调验证 100% 一致
## 下一步(第四波,未启动)
**第四波:收官战(E2E + 埋点)**
1. **真实联调 + E2ET8**:起后端双服务 + compose postgres:18Flutter 连真实 API 走通注册 → 登录 → me → 刷新 → 退出;按报告 14 的验收证据清单收集证据。前置:本地编排(T0-4,compose 拉起 postgres:18 与两个服务)
2. **CI 载体**:三仓门禁进 CI(命令表在 [Git 工作流规范](../../git-workflow.md))。
3. **埋点落地**:按报告 13 实现 `/api/v1/events` + `platform.product_events` 迁移 + Flutter `lib/analytics/`
4. **杂项**auth_sessions 过期清理任务、Flutter 版本锁定(T0-2)、TagPill 设计债(DEBT-1)。
- 真机联调 E2E报告 18):compose 三容器(postgres:18 + auth + user)启动成功,烟囱测试 7/7 全绿(注册 → me → 刷新 → 退出 → 锁定),契约偏差 0 个,验收证据齐全(对照审计 M1),Flutter 门禁全绿
- 埋点系统落地(`patbond-api@6d47c5a` + `patbond-flutter@60d67a3`,报告 19):后端 `/api/v1/events` 批量端点 + Flyway V2 `product_events` 表(测试 75 → 82);前端 `lib/analytics/` 模块 + 3 个挂接点(登录/注册/退出,测试 30 → 34);7 项完善留 M1/M2(报告 19 §3 已优先级排序)。
## 第一迭代交付总结
**测试数演进**
- 后端:0 → 21 → 37 → 73 → 75 → **82**
- 前端:0 → 7 → 30 → **34**
**功能里程碑**
- 认证流程:注册 / 登录 / me / refresh 轮换 / 退出 / 多设备并行 / 登录锁定,全链路测试通过 ✅
- 基础设施:Flyway 迁移(V1 identity/media + V2 product_events)、UUID 持久化、统一异常、Docker Compose 编排、Gitea CI 工作流(暂未启用) ✅
- 客户端:珊瑚橙主题、5 个认证组件、登录/注册/Splash 页、网络层与 token 管理、埋点模块(3 挂接点) ✅
- 契约与文档:OpenAPI 正式化(真机验证 100% 一致)、ADR-001~008、Git 工作流规范、功能清单、19 份过程报告 ✅
**验收状态**(对照审计 M1):
- ✓ 后端集成测试 82 个(Testcontainers postgres:18
- ✓ 前端 widget 测试 34 个
- ✓ 真机 E2E 烟囱测试 7/7 通过
- ✓ OpenAPI 契约冻结且验证一致
- ✓ 数据库迁移可执行且可回滚
**遗留与下一步**
- M1 完善项:埋点 sessionId 生命周期 / 页面浏览埋点 / Gitea CI runner 启用(可选)
- M2 主线:宠物健康档案(`health_record_action` 埋点挂接点、档案 CRUD、照片管理)
- 后端长期项:access token 黑名单策略、/internal 改 mTLS、清理任务调优
## 环境与构建(新成员必读)