209021e7d2
- 新增 development/iterations/iteration-1/:15 份角色报告 + 进展看板(已完成/未闭环/下一步),作为双人协作的进度事实来源 - 新增 ADR-006:测试与交付容器化策略(Testcontainers / 交付 Docker 包 / 本机库仅个人联调) - Git 工作流规范补充:敏感信息只进忽略文件或 sample、测试数据不入库、测试代码限标准测试目录 - 门禁:mkdocs build --strict 通过(零警告)
159 lines
14 KiB
Markdown
159 lines
14 KiB
Markdown
# 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,避免污染仓库):
|
||
|
||
```text
|
||
$ 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 报告)**:
|
||
|
||
```text
|
||
$ 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. 移交后续波次的未闭环清单
|
||
|
||
1. **B2 三件套**(数据库持久化 + JWT + `/internal` 鉴权)——M1 里程碑主体,验收按 06 报告第 5 节证据清单执行。
|
||
2. **M1 错误状态码折叠**——统一异常契约工单;现有 `loginPropagatesFeignExceptionUnhandled` 测试在改造时按新契约改写。
|
||
3. **M3 后半:CI 载体**——`./mvnw clean test` 与 Flutter 三命令已可直接作为门禁命令,缺执行载体;文档门禁可加 `pip install mkdocs && mkdocs build --strict`。
|
||
4. **M5 / 工单 T1**——bootstrap SQL 拆 Flyway baseline 与种子数据,验收含 `grep -c "Patbond@123"` = 0。
|
||
5. **m2**——`patbond-flutter/README.md:34` 补 `--output=none`,一行改动,建议随用户 README 自决一并处理。
|
||
6. **m1/m3**——widget_test 演示数据断言与 demo 展示字符串,随登录页/真实数据接入清除。
|
||
7. `AuthTokenResponse.expiresAt` 无时区 LocalDateTime(07 报告遗留 4),随 token 重构处理。
|
||
|
||
---
|
||
|
||
- 本次动作留痕:安装 mkdocs 至 `~/.local`(pip --user);mkdocs 产物写入 scratchpad(`mkdocs-site/`,会话级临时目录);flutter 门禁复跑仅触碰 git 忽略的构建缓存。三仓的受跟踪文件零修改、零提交、无遗留进程。
|