Files
lixi 209021e7d2 docs: 迁入第一迭代过程报告并建立进展看板
- 新增 development/iterations/iteration-1/:15 份角色报告 + 进展看板(已完成/未闭环/下一步),作为双人协作的进度事实来源
- 新增 ADR-006:测试与交付容器化策略(Testcontainers / 交付 Docker 包 / 本机库仅个人联调)
- Git 工作流规范补充:敏感信息只进忽略文件或 sample、测试数据不入库、测试代码限标准测试目录
- 门禁:mkdocs build --strict 通过(零警告)
2026-09-04 10:45:05 +08:00

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 testdart 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,端口/库名/账号与 .samplePATBOND_DB_* 默认值匹配(注意:配置采用 sample 模式,不再是原工单的"可提交 yml");
    • 文档说明启动、停止、重置数据方式。
  • 定位修订:自动化测试(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.expiresAtLocalDateTime 改为带时区 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)

各环节启动条件,满足即放行、不齐不开工:

  1. T4 JWT 会话 启动条件:
    • T1/T2 完成(identity 会话相关表已由迁移建立,用户持久化可用);
    • T12 双重验证对报告 07 基线无否决性发现;
    • (已满足)ADR-001 Boot 3 就位、ADR-003 参数拍板。
  2. T6a OpenAPI 冻结 启动条件:
    • T3 错误契约落地(错误体字段定型);
    • T4 token 响应字段定型(含 ISO 8601 expiresAt);
    • 起草可提前与 T4 并行,但冻结必须在上述两项之后。
  3. T6b + T7 联调 启动条件:
    • T6a 已冻结;
    • T4 后端可运行且本地数据库路径打通(T0-4 编排完成,或本地 PostgreSQL 账号问题解决,二者其一);
    • T10 UI QA 放行结论已出;T11 埋点规范可用(登录页开发同步埋点)。
  4. 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 三仓未提交,应在任何新代码继续堆积前处理。