209021e7d2
- 新增 development/iterations/iteration-1/:15 份角色报告 + 进展看板(已完成/未闭环/下一步),作为双人协作的进度事实来源 - 新增 ADR-006:测试与交付容器化策略(Testcontainers / 交付 Docker 包 / 本机库仅个人联调) - Git 工作流规范补充:敏感信息只进忽略文件或 sample、测试数据不入库、测试代码限标准测试目录 - 门禁:mkdocs build --strict 通过(零警告)
12 KiB
12 KiB
09 PM 任务板更新(第一迭代 · 第二轮开工)
作者:Senior Project Manager 日期:2026-09-04 依据:01-pm-task-breakdown.md(15 工单基线)、patbond-doc/docs/architecture/decisions.md(ADR-001~005,已 Accepted)、07-backend-baseline-report.md、08-flutter-theme-report.md 约定:状态口径为 Done / In Progress / Blocked / Not Started;"完成依据"必须指向具体报告章节,无证据不标 Done。
1. 15 工单状态总览
| 工单 | 名称 | 状态 | 完成依据 / 说明 |
|---|---|---|---|
| T0-1 | Maven Wrapper | Done | 报告 07 §2:mvnw/mvnw.cmd/wrapper 配置已生成(Maven 3.9.16),README 命令已改用 ./mvnw;§3.1 全量 ./mvnw clean test BUILD SUCCESS |
| T0-2 | Flutter/Dart 版本锁定 | Not Started | 报告 08 未涉及版本锁定文件;仍缺 FVM 或等效方案 |
| T0-3 | 默认配置与环境变量注入 | Done(按修订口径) | 报告 07 §2:执行中用户改令采用 .sample 模式(application.yml 保持忽略、sample 入库),原"可提交 yml"口径作废。Nacos 变量随 ADR-002 删除,新增 PATBOND_USER_SERVICE_URL;测试专用配置使干净检出 clean test 不依赖复制步骤(已实测)。残余:启动服务仍需一次 sample→yml 复制,README 已写明,接受为定稿方案 |
| T0-4 | 本地基础设施编排 | Not Started(范围已修订) | 见 §2 修订:Nacos 移出编排,只剩 PostgreSQL 16。本机 Docker 可用,自动化测试改走 Testcontainers,T0-4 降级为"手动联调/E2E 用编排",不再阻塞 T1/T5 |
| T0-5 | 契约规范冻结文档 | Not Started | 未有交付;注意 mkdocs 未安装,mkdocs build --strict 验收暂不可执行(见风险 R2) |
| T0-6 | CI 最低门禁 | Blocked | 门禁命令已具备(./mvnw clean test、dart format+analyze+test 均本地绿),但 CI 载体缺失且三仓改动未提交,无远端流水线可挂。解除条件:三仓完成首次提交并确定 CI 载体 |
| T1 | Flyway baseline(identity/media) | In Progress | 本轮第二波"后端持久化纵切"已启动(见 §3);依赖修订:验收环境由 T0-4 改为 Testcontainers |
| T2 | patbond-user 接 PostgreSQL + UUID | In Progress | 同上,持久化纵切范围内 |
| T3 | 统一异常响应与 DB 一致校验 | In Progress | 同上;描述按 ADR-004 修订(见 §2)。注意报告 07 §4.1:auth 侧错误折叠现状已被测试钉死,T3 落地时须同步改写 loginPropagatesFeignExceptionUnhandled |
| T4 | 可校验 access token + refresh 会话 | Not Started | ADR-003 已拍板参数,决策阻塞解除;ADR-001 落地后 JWT 选型无降级问题。第三波首项 |
| T5 | 认证链路集成测试 | Not Started | Testcontainers 路径已确认可行(Docker 可用);注册/登录持久化路径的测试可随第二波滚动补齐,完整验收仍等 T4 |
| T6a | OpenAPI 契约 | Not Started | D5 已由 ADR-004 拍板,登录方式字段无悬念;第三波第二项,冻结条件见 §3 |
| T6b | Flutter API Client | Not Started | 等 T6a 冻结 |
| T7 | Flutter 登录页 + 安全存储 + 登录态恢复 | In Progress(前置件已交付) | 报告 08 §1:5 个登录组件(BrandMark/AppTextField/PrimaryButton/InlineErrorBanner/AuthScaffold)+ 各 3 个 widget 测试已交付,analyze/test 全绿。未动:登录/注册页面、auth 状态机、flutter_secure_storage、拦截器(报告 08 §5.7,按计划等契约冻结) |
| T8 | E2E 用例 | Not Started | 全链路收口,等 T4/T5/T7 |
新增工单(计划外,纳入任务板)
| 工单 | 名称 | 状态 | 说明 |
|---|---|---|---|
| T9 | 珊瑚橙主题迁移(ADR-005) | Done | 原 15 工单外、ADR-005 新增范围。报告 08 §1-§4:语义 token 主题重写、五页替换、format/analyze/test 全绿。遗留取舍(sage 对比度、品牌字体后置等)已在报告 08 §5 如实记录 |
| T10 | UI 设计 QA(对照 04 号设计规范验收 T9/T7 组件) | In Progress | 本轮第二波启动 |
| T11 | 埋点实现规范(承接 05-experiment-tracking-plan) | In Progress | 本轮第二波启动 |
| T12 | 双重验证(复核 07/08 交付证据) | In Progress | 本轮第二波启动;其结论是第三波放行的前置之一 |
完成率:原 15 工单 Done 2(T0-1、T0-3)≈ 13%;In Progress 4(T1/T2/T3/T7),Blocked 1(T0-6),Not Started 8。含新增工单口径:19 单中 Done 3 ≈ 16%,In Progress 7。第一波实际消化的还有两项不在工单编号内的大头:ADR-001 Boot 3 升级与 ADR-002 去 Nacos(报告 07 §1),它们是多个后续工单的解阻塞项,进度含金量高于百分比表象。
2. 受 ADR 影响的工单修订(以本节为准)
T0-4 本地基础设施编排 —— 受 ADR-002
- 描述修订:编排目标从"PostgreSQL 16 + Nacos"改为 仅 PostgreSQL 16。Nacos 相关的端口、健康检查、文档段落全部移出;开发计划 5.1-5.3 节涉及 Nacos 的内容以 ADR-002 为准不再执行。
- 验收标准修订:
- 一条命令拉起 PostgreSQL 16,端口/库名/账号与
.sample中PATBOND_DB_*默认值匹配(注意:配置采用 sample 模式,不再是原工单的"可提交 yml"); - 文档说明启动、停止、重置数据方式。
- 一条命令拉起 PostgreSQL 16,端口/库名/账号与
- 定位修订:自动化测试(T1 迁移校验、T5 集成测试)一律走 Testcontainers,不依赖 T0-4;T0-4 只服务手动联调与 T8 E2E。它从关键路径前端移到 T7 联调之前完成即可。
T0-3(已完成,记录口径变更)—— 受 ADR-002 + 执行中指示
- 原验收"无需手工复制 sample"作废,定稿为 sample 模式 + 测试专用配置兜底;
NACOS_SERVER_ADDR从环境变量表删除,新增PATBOND_USER_SERVICE_URL(Feign 静态地址,ADR-002)。
T3 统一异常响应 —— 受 ADR-004
- 描述修订:唯一性校验范围收敛为 用户名(注册/登录仅用户名 + 密码)。手机号唯一性仅保留数据库约束(数据模型保留扩展能力),不做应用层手机号注册/登录校验流程,不做短信验证码相关错误码。
- 验收标准修订:"重复用户名/手机号"改为"重复用户名";其余(规范错误体、并发重复注册测试、日志脱敏)不变。补充一条:改写报告 07 §4.1 钉死现状的 auth 侧测试,401/409 须正确穿透 Feign 传导(不得再折叠为 500/400)。
T4 token/会话 —— 受 ADR-003 + ADR-001
- 描述修订:删除"未拍板前按建议默认值"措辞。参数已定:access 15 分钟、refresh 30 天且每次刷新轮换、多设备并行、退出仅撤销当前会话;全部实现为配置项(ADR-003 原文要求)。JWT 依赖按 Boot 3.5 BOM 选型,无 2.7 降级顾虑。
- 验收标准补充:配置项默认值与 ADR-003 数值一致并有测试锁定;
AuthTokenResponse.expiresAt由LocalDateTime改为带时区 ISO 8601(报告 07 §4.4 遗留,并入本单)。
T6a OpenAPI 契约 —— 受 ADR-004 + ADR-003
- 描述修订:删除"登录方式字段依赖决策 D5"。register/login 请求体定稿为用户名 + 密码两字段;不出现手机号登录、验证码、第三方登录端点。refresh/logout 语义按 ADR-003(轮换、仅撤销当前会话)编写。
- 验收标准补充:若 mkdocs 仍未安装,"纳入文档站导航 +
mkdocs build --strict"验收降级为"契约文件评审通过 +mkdocs.yml导航条目已加(构建校验记入 R2 待补)",不阻塞冻结。
T7 Flutter 登录页 —— 受 ADR-004 + ADR-005(轻微)
- 描述补充:登录页表单仅用户名 + 密码;按 ADR-004 预留不渲染的凭证扩展区。UI 使用 T9 已交付的 5 个组件与珊瑚橙主题,以 04 号设计规范为验收基准(T10 的 QA 结论须先出)。
不受 ADR 影响、维持原文的工单:T0-1、T0-2、T0-5、T0-6、T1、T2、T5、T6b、T8(T1 仅依赖项由 T0-4 改为 Testcontainers,内容不变)。
3. 第二波执行映射与第三波启动条件
第二波(本轮已同时启动,四条并行线)
| 并行线 | 映射工单 | 交付物 |
|---|---|---|
| 后端持久化纵切 | T1 + T2 + T3(串行纵切,一人连续负责) | Flyway baseline(identity/media)、UUID 用户持久化、统一异常契约;附 Testcontainers 下迁移一次成功 + 现有 21 测试改造后全绿 |
| UI 设计 QA | T10(验收 T9,兼查 T7 组件) | 对照 04 号规范的差异清单与放行结论 |
| 埋点实现规范 | T11 | 可实施的埋点/事件定义文档,供 T7 登录页开发时同步埋点 |
| 双重验证 | T12 | 对报告 07/08 声称结果的独立复核结论 |
第二波关键路径:持久化纵切(T1→T2→T3),其余三线不占关键路径。
第三波(顺序:T4 JWT 会话 → T6a OpenAPI 冻结 → T6b/T7 Flutter 登录联调 → T5/T8 E2E)
各环节启动条件,满足即放行、不齐不开工:
- T4 JWT 会话 启动条件:
- T1/T2 完成(identity 会话相关表已由迁移建立,用户持久化可用);
- T12 双重验证对报告 07 基线无否决性发现;
- (已满足)ADR-001 Boot 3 就位、ADR-003 参数拍板。
- T6a OpenAPI 冻结 启动条件:
- T3 错误契约落地(错误体字段定型);
- T4 token 响应字段定型(含 ISO 8601 expiresAt);
- 起草可提前与 T4 并行,但冻结必须在上述两项之后。
- T6b + T7 联调 启动条件:
- T6a 已冻结;
- T4 后端可运行且本地数据库路径打通(T0-4 编排完成,或本地 PostgreSQL 账号问题解决,二者其一);
- T10 UI QA 放行结论已出;T11 埋点规范可用(登录页开发同步埋点)。
- T5 收口 + T8 E2E 启动条件:
- T4、T7 完成;
- T0-4 编排可用(E2E 必须真实编排,不能只靠 Testcontainers);
- 三仓已提交且新增文档齐备(T8 验收含"新成员仅凭仓库文档复现",未提交的仓库谈不上复现)。
第三波前还应穿插两个小补课:T0-2(Flutter 版本锁定,S,随时可做)与 T0-6 解锁(首次提交 + CI 载体,见 R3/R4)。
4. 风险清单更新
已消除
| 原风险 | 消除依据 |
|---|---|
| Nacos 硬依赖导致干净检出无法启动/CI 无法跑 | ADR-002 + 报告 07:依赖、配置、旧 target 残留全清,grep 确认无 nacos/8848 残留 |
| Spring Boot 2.7 技术代际(原风险 8)拖累 JWT/Flyway/Testcontainers 选型 | ADR-001 + 报告 07 §1:已升 3.5.16 / Cloud 2025.0.3 |
| D3、D5 决策悬置阻塞 T4/T6a/T7 定稿 | ADR-003、ADR-004 已 Accepted |
| 零测试空转(审计 B1) | 报告 07 §3.1:21 测试全绿;报告 08:Flutter 7 测试全绿 |
| 干净检出测试不可运行 | 报告 07:测试专用配置,移走本地 yml 实测 clean test 仍绿 |
| 品牌色占位(靛蓝)与正典冲突 | ADR-005 + 报告 08 全量迁移 |
仍然存在 / 新增
| # | 风险 | 影响 | 缓解 / 责任 |
|---|---|---|---|
| R1 | 本地 PostgreSQL 无可用账号 | 手动联调、T7 联调、T8 E2E 无真实库可连 | 自动化侧已由 Testcontainers 兜住;联调前必须完成 T0-4 编排(Docker 可用)或申请到账号,列为 T7 启动条件 |
| R2 | mkdocs 未安装 | T0-5、T6a 的 mkdocs build --strict 验收无法执行,文档门禁缺一角 |
短期按 §2 降级验收;安装 mkdocs 列为文档线待办,补跑构建后风险关闭 |
| R3 | 三仓改动均未提交(最高优先级) | 一波 + 二波两天工作量仅存在于工作区,误操作即全损;CI、协作、T8"可复现"验收全部无从谈起 | 本轮结束前完成三仓首次提交/分支提交;这是纯操作项,不需要任何新决策,建议第二波各线交付即提交 |
| R4 | CI 载体缺失 | T0-6 Blocked,门禁全靠本地人肉执行,回归防护为零 | 依赖 R3 解除;确定载体(如 GitHub Actions 或内部等价物)后按 T0-6 原验收落地 |
| R5 | auth 错误折叠现状被测试钉死(报告 07 §4.1) | 若 T3 改契约时漏改该测试,会出现"测试绿但契约错"的假象 | 已写入 T3 修订后验收标准 |
| R6 | 其他开发机 ~/.m2 旧 common 快照(报告 07 §5) |
他人拉取后首次构建可能踩旧 nacos 依赖快照 | README 已含 ./mvnw -pl patbond-common install 步骤;R3 解除后在提交说明中提示 |
| R7 | T0-2 Flutter 版本锁定缺失 | 多人开发时 SDK 漂移,analyze/test 结果不可比 | S 级工单,第三波前插队完成 |
5. 板面结论
- 第一波交付真实且质量可查:两份报告的验收命令输出齐全,无凭空声称。
- 第二波已把后端关键路径(T1→T2→T3)推入 In Progress,配套三条 QA/规范线并行,结构合理。
- 第三波唯一的硬闸门是 T12 双重验证结论 与 持久化纵切完成;流程性最大隐患是 R3 三仓未提交,应在任何新代码继续堆积前处理。