docs: 功能清单同步后端追加交付与 phone 修复状态

- compose 编排/信封严格化/deviceId/Gitea CI 状态、74 测试数、跨端核对发现由后端线更新
- UserProfile.phone 可空修复标记完成(patbond-flutter@845e92f)
- 门禁:mkdocs build --strict 通过
This commit is contained in:
2026-09-04 14:56:06 +08:00
parent 8e27976a95
commit b6b8e774e7
+14 -5
View File
@@ -2,7 +2,7 @@
> 目的:直观呈现哪些功能**已完成且有自动化测试**、哪些**部分完成**、哪些**尚未开始**,方便针对性验证与回归。
> 维护约定:每波工单合入后由执行人更新本清单;状态以 `dev` 分支 + 门禁全绿为准。
> 最后更新:2026-09-04(第三波两端合龙:patbond-api `4dc3dcd` 73 测试、patbond-flutter `da25804` 30 测试,均门禁全绿)
> 最后更新:2026-09-04(第三波两端合龙 + 工程化补波patbond-api `3f6e818` 74 测试、patbond-flutter `da25804` 30 测试,均门禁全绿compose 编排冒烟实测通过
图例:✅ 已完成且已测试 | 🟡 部分完成/有已知限制 | ⬜ 未开始
@@ -40,6 +40,7 @@
| 旧 refresh 重用 → 40102 + 撤销整个 token family | ✅ | `reuseOfRotatedTokenRevokesWholeFamily` + E2E | 并发轮换同样按重用处理 |
| refresh 过期/未知 → 40102 | ✅ | `expiredRefreshTokenIsRejected``unknownRefreshTokenIsRejected` | |
| `POST /api/v1/auth/logout`:仅撤当前会话,幂等 | ✅ | `SessionLifecycleIntegrationTest`(含跨账号撤销不掉用例)+ E2E | 需有效 access token40101 兜底) |
| 会话记录设备信息(X-Device-Id / UA / IP | ✅ | `registerForwardsDeviceIdHeaderToTheSessionRecord` + 会话落库断言 | 前端每请求携带 X-Device-Id,为多设备会话列表备数据 |
| access 过期/伪造 → 40101 | ✅ | `MeEndpointTest``JwtSignerTest`、E2E | |
| `/internal/**` 服务间鉴权(X-Internal-Token | ✅ | `InternalAuthFilterTest`(3 例)+ E2E | 无凭证/错误凭证 401;未配置 fail-closed |
| access token 主动吊销(黑名单) | ⬜ | — | 退出后已签发 access 在剩余 ≤15 分钟内仍有效(jti/sid 已入库备用),见报告 16 §9.1 |
@@ -61,16 +62,24 @@
| dio API client + 信封解包 + 错误码映射(含 42300) | ✅ | 第三波并行交付(`patbond-flutter@8d890c0`+`da25804`,报告 17),基于 mock 验证 |
| Splash/登录/注册页 + secure storage + 登录态恢复 + 真实退出 | ✅ | 同上,登录页四态/注册校验 widget 测试锁定 |
| 401 单飞刷新拦截器 | ✅ | `TokenRefresher` 单元测试(刷新单飞、40102 清会话) |
| 与真实后端联调(烟囱测试) | ⬜ | 第四波前置 compose 编排 |
| 与真实后端联调(烟囱测试) | ⬜ | 第四波前置 compose 编排已就绪(见第 6 节) |
**跨端核对发现(前端线跟进,后端已按 openapi.yaml 核对全部通过)**
1. ~~`UserProfile.fromJson` 将 `phone` 按非空 String 强转~~——**已修复**`patbond-flutter@845e92f`,phone 改为可空,30 测试全绿)。
2. 注册请求携带的 `Idempotency-Key` 后端暂未实现幂等语义(开发计划仅要求帖子/预约类写接口支持);「刷新重放沿用同键」的设计正确,待后端实现后自动受益。
3. 前端每请求携带的 `X-Device-Id` 后端已接入 `auth_sessions.device_id``patbond-api@8bdaf53`)。
## 6. 工程化
| 功能 | 状态 | 说明 |
| --- | --- | --- |
| 后端集成测试门禁(本地) | ✅ | `JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test`73 测试 |
| 后端集成测试门禁(本地) | ✅ | `JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test`74 测试 |
| 跨服务真实 HTTP E2E | ✅ | `AuthE2eIntegrationTest`(同 JVM 双服务 + 真实 postgres:18 |
| docker compose 最小编排(postgres + 两服务 | | M0 项,任务 8 与联调前置 |
| CI 载体(自动执行门禁 | | 审计 M3 后半 |
| docker compose 最小编排(postgres:18 + 两无状态服务容器 | | `patbond-api@ab0265c``./deploy/init-secrets.sh``mvnw -DskipTests package``docker compose up -d --build`;完整冒烟实测通过(register→me→refresh→旧 token 重用 40102→internal 401→logout);用法见 `patbond-api/Readme.md` |
| 可执行镜像构建(repackage exec jar、非 root 运行 | | 同上;顺带修复无 starter-parent 时 package 产物不可执行 |
| 信封严格化(`success` 派生字段不再上线) | ✅ | `patbond-api@8a79971`,信封恰为 `{code, message, data}` |
| CI 载体(自动执行门禁) | 🟡 | `.gitea/workflows/ci.yml` 已提交(`patbond-api@3f6e818`,与本地门禁同命令);**待服务器启用 Gitea Actions 并注册带 Docker 的 act_runner**(前提在文件头注释,需用户操作) |
## 针对性测试速查