- 新增 development/iterations/iteration-1/:15 份角色报告 + 进展看板(已完成/未闭环/下一步),作为双人协作的进度事实来源 - 新增 ADR-006:测试与交付容器化策略(Testcontainers / 交付 Docker 包 / 本机库仅个人联调) - Git 工作流规范补充:敏感信息只进忽略文件或 sample、测试数据不入库、测试代码限标准测试目录 - 门禁:mkdocs build --strict 通过(零警告)
14 KiB
14 第一波「工程基线」里程碑证据档案与提交清单
- 编制人:EvidenceQA(Evidence Collector)
- 快照时间:2026-09-04(所有 git 输出均为本刻快照)
- 方法:patbond-api 全程只读(ls/grep/git 只读/读文件,未运行任何构建);patbond-flutter 复跑三条门禁命令做独立验证;patbond-doc 安装 mkdocs 并运行 strict 构建(产物输出到 scratchpad,仓库未落任何文件)。
- 对照基线:
06-evidence-audit.md问题清单(B1/B2、M1-M5、m1-m4)、07-backend-baseline-report.md、08-flutter-theme-report.md、patbond-doc/docs/architecture/decisions.md(ADR-001~005)。
0. 重大事实更正:「三仓均未提交」已不成立
任务前提是三仓改动均未提交,实测不符:
| 仓库 | 分支 | 本地最新提交 | 远端(origin)最新 | 工作区 |
|---|---|---|---|---|
| patbond-api | dev | c7ddaec 重构底层框架(2026-09-03 17:59:56 +0800,Lixi20) |
c7ddaec(一致,已推送) |
干净(git status --porcelain 空) |
| patbond-doc | main | ca8cb72 完善开发文档(2026-09-03 18:00:52 +0800,含 decisions.md 63 行 + mkdocs.yml 2 行) |
ca8cb72(一致,已推送) |
干净 |
| patbond-flutter | dev | 2601da3 update README.md |
2601da3(一致) |
7 个修改 + 7 个未跟踪文件待提交(见第 3 节) |
即:第一波后端改动与 ADR 文档已由某人(git 作者 Lixi20)在 2026-09-03 傍晚提交并推送;c7ddaec 的 git show --stat(24 个文件,+955/-99)与 07 报告的改动清单逐一吻合(4 pom、6 Java 源、2 sample、mvnw 三件套、5 个测试文件、Readme、测试专用 application.yml、.gitignore)。真正待提交的只剩 patbond-flutter。
1. 问题闭环核对(对照 06 审计清单,逐项附本刻证据)
| # | 问题 | 状态 | 本刻证据 |
|---|---|---|---|
| B1 | 后端零测试、CI 门禁空转 | 部分闭环 | 三模块均有 src/test;grep -rc "@Test" 计 3+1+9+1+7=21 个用例(ApiResponseTest 3、UserApplicationTests 1、UserControllerTest 9、AuthApplicationTests 1、AuthControllerTest 7);三个 pom 均有 spring-boot-starter-test(common:30、user:40、auth:40)。07 报告附 ./mvnw clean test BUILD SUCCESS 输出(21 测试 0 失败)。仍缺:Testcontainers 集成测试、契约测试、安全测试(后续工单) |
| B2 | 内存用户 + 不可验证 token + /internal 裸奔 |
未动(计划内后续工单) | UserService.java:21-23 仍为 AtomicLong + 两个 ConcurrentHashMap;AuthService.java:50 仍为 UUID.randomUUID();UserController.java:18 仍映射 /internal/users;全仓 grep 无 spring-boot-starter-security/SecurityFilterChain(输出:NO SECURITY CONFIG) |
| M1 | auth→user 调用链错误状态码折叠 | 未动(计划内后续工单) | AuthService.java:61 仍 ResponseStatusException(HttpStatus.BAD_REQUEST, ...);07 报告冒烟实测「错密码登录 → HTTP 500」,并已用 AuthControllerTest.loginPropagatesFeignExceptionUnhandled 把现状钉为基线 |
| M2 | common 强制全体引入 AMQP/Feign/LB/Nacos | 已修复 | patbond-common/pom.xml 依赖仅剩 jakarta.validation-api(compile)+ spring-boot-starter-test(test scope);全仓 grep -rn "nacos|amqp|loadbalancer" --include="pom.xml" 零命中(输出:NO NACOS/AMQP/LB IN POMS) |
| M3 | 无 CI 配置 + 无 Maven Wrapper | 部分闭环 | Wrapper 已入库:mvnw、mvnw.cmd、.mvn/wrapper/maven-wrapper.properties 存在且在 c7ddaec 提交内。CI 载体仍缺:ls -a 无 .github/.gitlab-ci/Jenkinsfile(输出:NO CI CONFIG) |
| M4 | API Readme 启动步骤不完整 | 已修复 | patbond-api/Readme.md:16 行 Wrapper 说明、21/27 行 ./mvnw clean test(含 JAVA_HOME=JDK17 指引)、32-39 行 sample→yml 复制命令、46-48 行 -pl patbond-common install + 两个 spring-boot:run、71 行禁止向 sample 提交密钥 |
| M5 | 数据库 bootstrap 单文件混装 fixture 凭据 | 未动(后续工单) | patbond-doc/docs/database/ 仍仅 patbond_postgresql.sql 单文件;第 1269 行仍有 accounts use the password: Patbond@123;Flyway 拆分(工单 T1)未启动 |
| m1 | Flutter 唯一冒烟测试断言写死演示数据 | 未动 | test/widget_test.dart:18-19 仍断言 '北京 · 朝阳区'、'28°C 晴';该文件不在本次改动清单 |
| m2 | Flutter README 校验命令缺 --output=none |
未修 | patbond-flutter/README.md:34 仍为 dart format --set-exit-if-changed lib test(会改写文件)。注意:README 当前的未提交改动只是在运行段加了一行 flutter clean(git diff README.md 全文仅此一处),并未修此项 |
| m3 | 演示数据持久化展示字符串 + 22 处 Unsplash URL | 未动(计划内,逐页替换时清除) | lib/data/demo_data.dart 不在改动清单,'2小时前'/'1.2km' 等仍在 |
| m4 | flutter 工作区不干净 | 性质变化 | 审计时仅 M README.md;现为第一波交付的 7 修改 + 7 新增,即本档案第 3 节要落账的对象。README 的用户自有改动仍混在其中 |
闭环率:任务预期应修复的 4 项全部兑现——M2 已修复、M4 已修复、M3 的 Wrapper 半边已修复、B1 已部分闭环(21 测试)。全部 11 项口径:2 项全闭(M2、M4),2 项部分(B1、M3),7 项未动——其中 B2/M1/M5/m1/m3 属已排期后续工单,m2 是一处一行即可修的文档问题,两波交付均未顺手处理,建议纳入下一波。
2. 文档门禁(mkdocs build --strict):通过
- 安装:
pip install --user mkdocs→ mkdocs 1.6.1(Python 3.14,~/.local/bin/mkdocs)。此前which mkdocs/python3 -m mkdocs均无,门禁属首次打通。 - 执行(产物指向 scratchpad,避免污染仓库):
$ cd patbond-doc && mkdocs build --strict -d <scratchpad>/mkdocs-site
INFO - Cleaning site directory
INFO - Building documentation to directory: .../mkdocs-site
INFO - Documentation built in 0.08 seconds
EXIT=0
- exit 0,零 warning,strict 模式下导航与链接均无报错;无错误清单需要移交。
- 仓库卫生:构建后
ls -d site确认仓库内无 site/ 目录,git status仍为空。mkdocs.yml 三级导航(index / development-plan / decisions)与 06 审计的静态核对结论一致,本次为动态实证。 - 注意:mkdocs 装在
~/.local,CI 环境需自行安装;若后续文档引入主题/插件(如 material),需同步补 requirements 文件——当前 mkdocs.yml 用内置 readthedocs 主题,无额外依赖。
3. 三仓提交清单
3.1 patbond-api —— 本刻无待提交内容(快照口径,提交前必须重新生成)
git status --porcelain 为空;dev 分支与 origin/dev 同在 c7ddaec。第一波改动已随 c7ddaec 重构底层框架 提交并推送,无需再操作。
磁盘上存在但已被正确忽略(不得入库):
| 路径 | 处置 | 依据 |
|---|---|---|
patbond-auth/src/main/resources/application.yml、patbond-user/.../application.yml |
应忽略(本地真实配置,sample 模式) | .gitignore 白名单规则,git status --ignored 确认 !! |
patbond-{common,user,auth}/target/ |
应忽略(构建产物) | 同上 |
.idea/ |
应忽略(IDE 配置) | 同上,且 git ls-files 无 .idea 条目 |
警示:该仓有开发 agent 正在继续开发,本清单仅为快照;开发波次完成后需重新 git status 生成新清单再提交。既成事实备注:重构底层框架 这条信息无语义前缀(更贴切的应为 refactor: 升级 Spring Boot 3.5、移除 Nacos、补齐 21 个测试与 Maven Wrapper),但该提交已推送远端,不建议改写历史;后续新提交请回归中文语义前缀约定。
3.2 patbond-doc —— 本刻无待提交内容
git status --porcelain(含 --ignored)为空;main 与 origin/main 同在 ca8cb72 完善开发文档(ADR-001~005 的 decisions.md + mkdocs.yml 导航,已推送)。既成事实备注:更贴切的信息应为 docs: 新增 ADR-001~005 架构决策记录,同样不建议改写已推送历史。本次 strict 构建未在仓库产生任何文件。
3.3 patbond-flutter —— 14 个文件待处置(唯一真正待提交的仓库)
git status --porcelain -uall 全量清单与逐文件处置:
| 文件 | 状态 | 处置 | 说明 |
|---|---|---|---|
README.md |
M | 用户自决 | 未提交改动仅一行:运行段新增 flutter clean(diff 已核,无其他内容)。是用户本人的改动,不并入第一波提交;若用户决定保留,建议连同 m2 的 --output=none 修复一起单独提交 |
lib/core/theme/app_theme.dart |
M | 应提交 | ADR-005 主题重写(珊瑚橙 token 体系) |
lib/features/create/create_page.dart |
M | 应提交 | 硬编码色 → token |
lib/features/home/home_page.dart |
M | 应提交 | 同上 |
lib/features/pets/pets_page.dart |
M | 应提交 | 同上 |
lib/features/profile/profile_page.dart |
M | 应提交 | 同上 |
lib/widgets/common.dart |
M | 应提交 | 同上 |
lib/core/widgets/brand_mark.dart |
?? | 应提交 | 新增认证基础组件 ×5 |
lib/core/widgets/app_text_field.dart |
?? | 应提交 | 〃 |
lib/core/widgets/primary_button.dart |
?? | 应提交 | 〃 |
lib/core/widgets/inline_error_banner.dart |
?? | 应提交 | 〃 |
lib/core/widgets/auth_scaffold.dart |
?? | 应提交 | 〃 |
test/core/widgets/primary_button_test.dart |
?? | 应提交 | 组件 widget 测试 ×2 文件(6 用例) |
test/core/widgets/app_text_field_test.dart |
?? | 应提交 | 〃 |
已忽略、确认不入库:build/、.dart_tool/、.flutter-plugins-dependencies、android/local.properties、iOS/Android 生成文件等(git status --ignored 全部 !!,规则健全)。
提交前门禁已独立复跑(2026-09-04,非转述 08 报告):
$ dart format --output=none --set-exit-if-changed lib test → Formatted 22 files (0 changed), exit 0
$ flutter analyze → No issues found! (ran in 0.7s)
$ flutter test → 00:01 +7: All tests passed! (5 组件测试 + 1 导航冒烟 + 1)
建议提交信息(排除 README.md 后一条提交):
feat: 迁移珊瑚橙主题体系并新增认证基础组件(ADR-005)
- app_theme.dart 重写为语义 token(AppColors/AppRadius),落地 primaryStrong/error 等 AA 对比度色
- 五个页面与公共组件的旧靛蓝硬编码色值全部替换为 token,仅换色不动布局
- 新增 BrandMark/AppTextField/PrimaryButton/InlineErrorBanner/AuthScaffold 及 6 个 widget 测试
- 门禁:dart format(0 changed)/flutter analyze(0 issues)/flutter test(7 passed)
建议 api/doc 提交信息:本刻两仓无待提交内容,上表既成事实备注已给出应然写法,供后续波次遵循;api 下一波提交信息待其开发完成后按实际改动拟定(中文语义前缀 refactor/feat)。
4. 里程碑证据索引(iteration-1-reports/ 01-08)
| 报告 | 角色 | 核心验收证据 / 结论 |
|---|---|---|
01-pm-task-breakdown.md |
Senior Project Manager | M0 + 登录纵切 8 任务的工单化分解;M0 的 Flyway 化与第 8 节任务 1 合并为工单 T1(仅 identity/media schema);明确社区/AI/预约不在本迭代 |
02-dev-technical-assessment.md |
Senior Developer | 实读三仓源码的现状盘点与选型建议,是 ADR-001(升 Boot 3)/ADR-002(移除 Nacos)的技术论证来源 |
03-reality-check.md |
Reality Checker | 总评 NEEDS WORK;确认文档描述诚实、无夸大;两个环境硬阻塞(无 Nacos 实例、数据库不可验证)+ 默认 JDK 26 与基线 17 不符——前者已被 ADR-002 从根上消除,后者由 07 报告以 JAVA_HOME=/usr/lib/jvm/java-17-openjdk 方案落地 |
04-ui-login-design-spec.md |
UI Designer | 登录/注册 UI 规范;裁决双视觉分歧、定义 token 体系与 primaryStrong #D6431A、error #D0342C(AA 对比度),即 ADR-005 补充规范的正文 |
05-experiment-tracking-plan.md |
Experiment Tracker | 身份漏斗(注册→登录→me→退出)埋点事件规范与实验规划;实现依赖后端契约冻结,尚未落码 |
06-evidence-audit.md |
EvidenceQA | 开工前基线:B1/B2 两 Blocker、M1-M5、m1-m4 共 11 项问题(全部附文件+行号证据);第 5 节给出登录纵切验收所需的完整证据清单(测试输出/curl transcript/psql/截图),仍是 M1 里程碑验收的执行标准 |
07-backend-baseline-report.md |
Senior Developer | 第一波后端交付:Boot 2.7.18→3.5.16、Cloud 2025.0.3、移除 Nacos(ADR-001/002)、common 瘦身(M2)、Maven Wrapper(M3 半)、README 重写(M4);21 测试 BUILD SUCCESS 原始输出;两服务干净配置启动 + 端到端冒烟(注册/登录/internal 均通,错密码 500 为已知 M1 遗留);进程已清理。→ 已作为 c7ddaec 提交并推送 |
08-flutter-theme-report.md |
Frontend Developer | 第一波 Flutter 交付:ADR-005 主题迁移(旧→新 token 映射表)、5 个认证基础组件、6 个组件测试;门禁三命令全绿(format 0 changed / analyze 0 issues / flutter test +7)——本档案 2026-09-04 复跑复现同样结果。→ 尚未提交,见 3.3 清单 |
里程碑口径:第一波「工程基线」的两份交付(07/08)验收证据齐全且经独立复核;ADR 文档门禁(mkdocs --strict)本次首次实证通过。里程碑归档条件已满足,唯一未落账动作是 patbond-flutter 的提交。
5. 移交后续波次的未闭环清单
- B2 三件套(数据库持久化 + JWT +
/internal鉴权)——M1 里程碑主体,验收按 06 报告第 5 节证据清单执行。 - M1 错误状态码折叠——统一异常契约工单;现有
loginPropagatesFeignExceptionUnhandled测试在改造时按新契约改写。 - M3 后半:CI 载体——
./mvnw clean test与 Flutter 三命令已可直接作为门禁命令,缺执行载体;文档门禁可加pip install mkdocs && mkdocs build --strict。 - M5 / 工单 T1——bootstrap SQL 拆 Flyway baseline 与种子数据,验收含
grep -c "Patbond@123"= 0。 - m2——
patbond-flutter/README.md:34补--output=none,一行改动,建议随用户 README 自决一并处理。 - m1/m3——widget_test 演示数据断言与 demo 展示字符串,随登录页/真实数据接入清除。
AuthTokenResponse.expiresAt无时区 LocalDateTime(07 报告遗留 4),随 token 重构处理。
- 本次动作留痕:安装 mkdocs 至
~/.local(pip --user);mkdocs 产物写入 scratchpad(mkdocs-site/,会话级临时目录);flutter 门禁复跑仅触碰 git 忽略的构建缓存。三仓的受跟踪文件零修改、零提交、无遗留进程。