docs: M3 开工分析 8 份报告入档 + ADR-016~021 拍板决策
CI / docs-build (push) Successful in 55s

- iteration-3 报告 01-08(PM 拆解/后端/Flutter/RC 首个 CERTIFIED/UI/埋点/证据基线/Git)
- ADR-016 自托管 MinIO 起步预留迁云(用户确认现无云存储)、ADR-017 patbond-community
  :8084 + media 归 user + 作者信息跨 schema 只读、ADR-018 范围裁剪(话题剪出/单层评论)、
  ADR-019 幂等按域(PUT/DELETE + request_hash)、ADR-020 聚合 feed_viewed/字典 v3/
  北极星不变/队列三项升第一波、ADR-021 Git 修订(main 更正/PR 情形触发/首发布重建 main/
  防泄漏 grep 先行)
- mkdocs 挂「第三迭代」导航,build --strict 通过

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 16:02:53 +08:00
parent e68b6553ca
commit d2867826d3
10 changed files with 2072 additions and 0 deletions
@@ -0,0 +1,140 @@
# 04 · M3 开工前现实核查(Reality Check
- 核查人:Reality CheckerTestingRealityChecker
- 日期:2026-09-08
- 方法:延续 iteration-2/04 的标准——**不采信任何书面转述**。所有结论分档标注:【亲验】命令自己跑、输出自己看;【UNVERIFIED】本地无法复现、明确不采信
- 约束遵守:只读核查 + 运行测试/构建/API 查询/E2E 脚本;零代码改动、零 commit/push、未改 mkdocs.ymlcompose 用后已 down
---
## 0. 裁定(先说结论)
**M3 开工 readinessCERTIFIED(无条件放行)。**
这是本核查人首次给出 CERTIFIED,理由是证据构成与 M2 开工时有质的不同:M2 收官声称的**每一个关键数字都由本人在 2026-09-08 当天重新实跑并逐一命中**——后端 191/191、前端 272/272 + analyze 零问题、mkdocs strict 通过、契约快照 sha256 字节级一致、三仓 HEAD CI 经 Gitea API 亲查全 success、**E2E 烟囱 11/11 本人从冷启动完整复跑一遍通过**(这同时证明 M3 开工时后端 compose 通道是活的,不是「2026-09-08 时点的历史记录」)。七项核查零实质偏差;上一轮(iteration-2/04)的 5 条放行条件全部消解。
M2 的已知挂起项(真机两项、auth 域契约测试缺口等)**均已在文档中诚实标注为 🟡/另立工单**,不构成对 M3(社区域)开工的阻塞,列为第 §5 节「随行观察项」而非放行条件。
---
## 1. 三仓 Git 状态与远端同步 —【亲验,全部通过】
`git status --short --branch` + `git fetch` + `git rev-parse HEAD origin/<branch>` 逐仓实测(2026-09-08):
| 仓库 | 分支 | 工作树 | 本地 HEAD | 远端 HEAD | 一致 |
| --- | --- | --- | --- | --- | --- |
| patbond-api | dev | 干净 | `64c9b72` | `64c9b72` | ✓ |
| patbond-flutter | dev | 干净 | `720865b` | `720865b` | ✓ |
| patbond-doc | main | 干净 | `e68b655` | `e68b655` | ✓ |
与收官声称的 `api dev@64c9b72``flutter dev@720865b` 完全一致。**上一轮放行条件 1(doc 仓不干净、报告长期不 commit)已消解**:本次 doc 仓干净且与远端同步,iteration-2 全部 30 份报告 + 索引已入库。
环境事实:工作区存在 patbond-doc 的两个克隆(`patbond-doc` 主克隆与本核查所在的 `referral` 克隆,origin 均指向 `zhaoyuxi/patbond-doc.git`),两者均干净、HEAD 同为 `e68b655`,不构成风险,但建议后续收敛为单一工作副本以免改错目录。
核查结束时复查:四个工作树(含 referral)`git status --porcelain` 均为 0 处未提交——本核查自身未污染任何仓库(mvn target/、site/ 均被 gitignore 覆盖)。
## 2. 双端测试基线实跑 —【亲验,数字逐一命中】
### 2.1 后端 191/191
命令:`JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test`patbond-api,本人实跑,BUILD SUCCESS1 分 37 秒)。
surefire 报告逐文件解析汇总(不抄 Maven 控制台,直接数 XML):
| 模块 | tests | failures | errors | skipped |
| --- | --- | --- | --- | --- |
| patbond-common | 3 | 0 | 0 | 0 |
| patbond-user | 68 | 0 | 0 | 0 |
| patbond-auth | 31 | 0 | 0 | 0 |
| patbond-pet | 89 | 0 | 0 | 0 |
| **合计** | **191** | **0** | **0** | **0** |
与声称的 191 精确一致。Testcontainers 正常(postgres:18 容器起落、4 个 Flyway 迁移在干净实例全量执行成功)。
小观察(非缺陷):Flyway 提示 `PostgreSQL 18.6 is newer than this version of Flyway... latest supported is 17`——当前仅为警告且全部迁移执行成功,M3 若升级 Flyway 版本可顺手消除。
### 2.2 前端 272/272 + analyze 零问题
命令:`flutter test`patbond-flutter,本人实跑):`00:32 +272: All tests passed!`
命令:`flutter analyze``No issues found! (ran in 1.9s)`。均与声称一致。
## 3. 文档门禁与契约快照 —【亲验,字节级一致】
- `mkdocs build --strict`:通过(3.51sEXIT=0)。
- 契约快照 sha256 比对:
```
243fe6487bfa19018bddbfdb2cece16d9f81bc9718d3404501574677a4cd689d patbond-api/patbond-pet/src/test/resources/contract/openapi-v1.2.0.yaml
243fe6487bfa19018bddbfdb2cece16d9f81bc9718d3404501574677a4cd689d patbond-doc/docs/api/openapi.yaml
```
字节级一致属实。正典 `info.version: 1.2.0`、路径数 grep 实数 **18**,与声称一致。上一轮的 D-1 缺口(events 端点游离于契约外)已不复存在——v1.2.0 含 `/api/v1/events`
## 4. 三仓 HEAD 的 CI 状态 —【亲验,Gitea API 亲查】
`curl https://git.patbond.cn/api/v1/repos/zhaoyuxi/<repo>/commits/<sha>/status`2026-09-08):
| 仓库 | commit | state | 检查项 |
| --- | --- | --- | --- |
| patbond-api | `64c9b72f…` | **success** | CI / backend-test |
| patbond-flutter | `720865bc…` | **success** | CI / flutter-gates |
| patbond-doc | `e68b6553…` | **success** | CI / docs-build |
29 号报告写 flutter 侧「待本提交 CI」——该悬置项现已落定为 success。
## 5. E2E 烟囱复跑 —【亲验,11/11 全过,通道确认存活】
完整冷启动复跑(非采信 2026-09-08 收官记录):
1. `./mvnw -DskipTests package`EXIT=0)→ `docker compose up -d --build` → 四容器 Up、postgres healthy
2. `dart run test_e2e_m2_manual.dart`patbond-flutter 仓根):**`=== M2 E2E 烟囱测试全部通过 ✓(11/11 场景)===`**EXIT=0
3. `docker compose down` 已执行,栈已清理。
11 场景全部真实走通,抽样摘录(本人输出):场景 8 防枚举四路响应体完全一致(40401);场景 9 第二设备新会话五类数据全量读回;场景 10 v2 事件 4/4 accepted202,含 platform=android);场景 11 乐观锁 409/40902 且先写者数据保留。
**这条同时回答了 M3 开工的关键问题:后端 compose 通道今天是活的。** 上一轮放行条件 3E2E 通道 UNVERIFIED)消解。
## 6. 收官声称抽查(3+ 条高影响项)
### 6.1 契约测试确实会抓漂移 —【亲验(结构审读 + 实跑)】
审读 `patbond-pet/src/test/java/.../contract/ContractConformanceTest.java`(735 行),结构真实严格,不是摆设:
- 对 pets 域 18 操作**真实起服务发请求**MockMvc + Testcontainers),响应体经 ContractValidator 对冻结快照严格校验(字段名/类型/必填/nullable/枚举/信封/错误码值);
- Order(98) 快照守卫:断言版本=1.2.0、18 路径、24 操作、45 schema——doc 仓升版而忘同步快照会立即变红;
- Order(99) 全响应矩阵门禁:契约声明的每个 (操作, 状态码) 单元格都必须被真实响应覆盖,唯一豁免 care-reminders PATCH 409(并发守卫,单线程无法确定性触发,已注释说明);
- 本次实跑中该测试类 11/11 通过(含在 191 内)。
诚实标注的已知边界:auth 域 6 个 M1 操作无契约测试(注释明言「另立工单」),见 §7 观察项。
### 6.2 pet_health schema 表数 —【亲验,8 表属实】
`V3__pet_health_baseline.sql` grep 实数 8 个 CREATE TABLEbreeds、pets、pet_owners、pet_weight_records、vaccine_catalog、pet_vaccinations、health_events、care_reminders——与 29 号报告「pet_health 8 表」一致(其「六表 psql 证据」指业务数据六表,不含 breeds/vaccine_catalog 字典表,无矛盾)。
### 6.3 feature-checklist 与实际相符 —【亲验】
`docs/development/feature-checklist.md` 实有 M2 三节(§7 宠物域后端 / §8 宠物域客户端 / §9 埋点体系)。关键的是**它没有虚报**:真机落库验证 + SessionTracker 手测标 🟡 挂起、integration_test 自动化标 🟡 留第四波、三项交互细节标 🟡 待拍板——与 30 号真机补验清单相互印证,状态标注诚实。
### 6.4 报告与 ADR 入档 —【亲验】
`iteration-2/` 实有 01~30 共 30 份编号报告 + index.md + openapi-pets-draft.yamlmkdocs strict 通过即导航无死链;`docs/architecture/decisions.md` 实有 ADR-001 至 ADR-015。与声称一致。
## 7. 随行观察项(非放行条件,不阻塞 M3 开工)
1. **真机两项挂起**Android 真机落库验证 + SessionTracker 30min 手测,30 号清单)——按方案 A 挂起属既定决策,设备到位后 0.5 天补验;M3 若涉及移动端埋点新事件,建议合并补验。
2. **auth 域 6 操作无契约测试**——M1 遗留、已声明另立工单;M3 新增社区域端点时应从第一天就纳入契约测试矩阵,勿再累积。
3. **Flyway 对 PostgreSQL 18.6 的版本警告**(§2.1)——顺手升级可消除。
4. **doc 仓双克隆**(§1)——建议收敛为单一工作副本。
## 8. 与上一轮(iteration-2/04)放行条件的对账
| 上轮放行条件 | 本次状态 |
| --- | --- |
| 1. doc 仓报告未提交/工作树不干净 | ✓ 消解:30 份报告入库,三仓干净同步 |
| 2. D-1 契约缺口(events 游离) | ✓ 消解:v1.2.0 含 events18 路径,字节级快照锁 CI |
| 3. E2E 通道 UNVERIFIED | ✓ 消解:本人冷启动复跑 11/11 |
| 4/5.(埋点空转与相关接线) | ✓ 消解:E2E 场景 10 实证 4/4 acceptedv2 白名单已入 191 测试基线 |
---
**结论:M2 收官声称经全量独立复验零实质偏差,M3(社区域)可以开工。** 本报告全部数字均为核查人 2026-09-08 亲跑所得。