Files
patbond-doc/docs/development/iterations/iteration-2/07-evidence-baseline-audit.md
T
lixi 1891d9b7b4
CI / docs-build (push) Successful in 1m3s
docs: M2 开工前分析 10 份报告入档 + ADR-009~015 拍板决策
- iteration-2 报告 01-08(PM 拆解/后端/Flutter 评估/现实核查/UI 规范/埋点规划/证据基线/Git 规划),04、06 已由正式角色复核定稿
- mkdocs 挂「第二迭代」导航,build --strict 通过
- ADR-009 新建 patbond-pet 模块、ADR-010 照片剪出 M2、ADR-011 dev 主干/master 发布、ADR-012 北极星与 H1-H4、ADR-013 废弃 health_record_action、ADR-014 DEBT-1 随 M2、ADR-015 照护人邀请后置

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-07 13:54:35 +08:00

9.8 KiB
Raw Blame History

07 第二迭代开工前:证据基线审计(Evidence Baseline Audit

审计人Evidence Collector 审计日期2026-09-07 审计范围:第一迭代收官声称的证据链完整性 + M2 开工基线快照 方法:只读审计。每条结论附可复现命令与实际输出;本报告不重复运行测试套件(「现在还绿不绿」由 Reality Checker 独立验证),静态计数不等于运行结果。


0. 结论速览

声称 判定 证据
20 份报告入档并挂 mkdocs 导航 完全证实 §1
OpenAPI 契约正式化 ⚠️ 部分证实(缺 /api/v1/events §2.1
ADR-001~008 编号完整 完全证实 §2.2
三仓提交完整、工作区干净 完全证实 §3
后端 82 测试 静态计数一致(82 个 @Test §4.2
前端 34 测试 静态计数一致(34 个 test/testWidgets §4.2
E2E 烟囱测试 7/7 有档案证据(报告 18 全量输出 + 脚本入库) §5.3
CIGitea Actions)全绿 本地不可证(无归档 run 日志) §5.1

证据链完整率:8 大类声称中 6 项完全证实、1 项部分证实、1 项本地不可证 ≈ 81%。 证据缺口:2 个(详见 §5)。基线快照:已建立(§4)。


1. 证据链审计:20 份报告与导航

1.1 文件存在性

ls /home/lx/workspace/patbond/patbond-doc/docs/development/iterations/iteration-1/ | sort

实际输出:01-pm-task-breakdown.md20-iteration-1-summary.md 共 20 份,外加 index.md(进展看板),21 个文件全部存在,无缺失

1.2 mkdocs 导航

grep -c "iterations/iteration-1/" patbond-doc/mkdocs.yml
# 输出:21

逐条核对 mkdocs.yml 第 1232 行:进展看板 + 0120 报告共 21 条导航,与文件一一对应。报告-导航映射完整率 100%。


2. 契约档案审计

2.1 openapi.yaml 接口路径

grep -nE "^  /" patbond-doc/docs/api/openapi.yaml

实际输出(5 条路径):

# 路径 行号
1 /api/v1/auth/register 54
2 /api/v1/auth/login 86
3 /api/v1/auth/refresh 126
4 /api/v1/auth/logout 159
5 /api/v1/me 188

与契约自述范围(title: Patbond API — Auth & Me(第一批公开接口)version: 1.0.0)一致,也与 docs/api/index.md 声称的「5 个端点」一致。

但与代码实际公开接口比对存在缺口

grep -rhoE '@(Get|Post)Mapping\("[^"]*"' patbond-api --include="*.java" | grep -v target | sort -u

代码中的公开接口为 /api/v1/auth/{register,login,refresh,logout}/api/v1/me,以及 POST /api/v1/events(埋点批量上报,报告 13/19 交付,提交 6d47c5a)——此接口未入 openapi.yamldocs/api/index.md 明文约定「契约变更须先改 OpenAPI,再改实现(契约先行)」,events 接口违反了这条自定约定。判定:契约档案部分完整,M2 开工前应补录(或明确声明 internal/events 不在公开契约范围并记录该决定)。

另核实:/internal/users/*/internal/sessions/* 为服务间内部接口,不入公开契约属合理范围。openapi.yaml 本身未直接挂 mkdocs 导航,但导航条目「API → 契约说明(api/index.md)」内有指向 openapi.yaml 的链接,mkdocs 构建会连带发布该文件,可接受。

2.2 ADR 编号完整性

ADR 实际位于 docs/architecture/decisions.md(注意:不在 development/ 目录下)。

grep -nE "^#+ .*ADR-[0-9]+" patbond-doc/docs/architecture/decisions.md

实际输出:ADR-001Spring Boot 3)、002(移除 Nacos)、003Token 策略)、004(账号密码登录)、005(品牌色正典)、006(测试容器化)、007(部署形态)、008(PostgreSQL 18),行号 8/20/42/51/55/65/75/88。001~008 连续无断号,判定完整。


3. 提交完整性审计

命令:git -C <repo> log --oneline -20git status --short --branchgit rev-list --left-right --count HEAD...@{u}2026-09-07 执行)。

3.1 三仓状态

仓库 分支 HEAD 工作区 与 upstream 差异
patbond-api dev 0d81c38 干净(porcelain 无输出) 0 ahead / 0 behind
patbond-flutter dev 3f8388e 干净 0 ahead / 0 behind
patbond-doc main 5537f92 干净 0 ahead / 0 behind

未提交文件清单:三仓均为空。 第一迭代收官时「仅 flutter 待提交」的遗留已闭环(flutter 现有 CI 门禁三提交 3f8388e/45f94d2/b0207c9 在 dev 且已推送)。

3.2 声称提交与 git 历史比对

第一迭代总结(报告 20)声称的关键提交均可在历史中找到实体:

  • patbond-api:埋点接收端 6d47c5a、会话清理 6528a06、CI 工作流 3f6e818 + 修复 b38b0d8/0d81c38、Compose ab0265c、JWT 纵切 4dc3dcd、Flyway baseline bd20adc ——全部在 dev 历史中。用户自有提交 b22eaed update 位于 6528a06 之后,属已知正常情况。
  • patbond-flutter:埋点 60d67a3、登录纵切 8d890c0、主题迁移 af002ed、phone 可空修复 845e92f、锁定码映射 da25804 ——齐全。
  • patbond-doc:报告迁入 209021e、收官 8e0e1c5/64521bf、CI f267141/5537f92、ADR-007/008 入档 b747e09/18746ce ——齐全。

判定:声称已提交的内容真实存在于 git 历史,无虚报。


4. M2 开工基线快照(验收对比基准)

M2 结束时以本节为基准做前后对比。所有数字均注明取证方式。

4.1 三仓 HEAD(完整哈希)

仓库 分支 HEAD commit
patbond-api dev 0d81c38fc6f1ea5ede3ad93bef89046a67e818e5
patbond-flutter dev 3f8388e5d4f6dfc9ddf832ed77ebae7e5463ece9
patbond-doc main 5537f92227c0cbad812f83c4374e589afbb17cbc

4.2 测试数基线

取证方式:静态注解计数(grep),非运行结果;运行态验证以 Reality Checker 同期报告为准。

# 后端:82(与声称一致;无 @ParameterizedTest/@RepeatedTest
grep -rE "@Test\b" patbond-api --include="*.java" | grep -v "/target/" | wc -l
# 分模块:patbond-auth 31 / patbond-common 3 / patbond-user 48

# 前端:34(与声称一致,8 个测试文件)
grep -rE "^\s*(test|testWidgets)\(" patbond-flutter/test --include="*.dart" | wc -l
基线值 来源
后端测试 82auth 31 + common 3 + user 48 静态计数,与报告 20 声称一致
前端测试 348 个 *_test.dart 静态计数,与报告 20 声称一致
E2E 烟囱 7/7(声称值) 报告 18 归档输出,本次未重跑

前端测试文件清单:test/analytics/analytics_service_test.darttest/core/network/token_refresher_test.darttest/core/widgets/app_text_field_test.darttest/core/widgets/primary_button_test.darttest/features/auth/{auth_repository,login_page,register_page}_test.darttest/widget_test.dart

4.3 OpenAPI 接口基线

patbond-doc/docs/api/openapi.yamlOpenAPI 3.0.3version 1.0.0)共 5 条路径/api/v1/auth/register/api/v1/auth/login/api/v1/auth/refresh/api/v1/auth/logout/api/v1/me。代码另有公开接口 POST /api/v1/events 未入契约(见 §5 缺口 1)。

4.4 Flyway 迁移基线

find patbond-api -path "*src/main*db/migration*" -name "*.sql" | sort
版本 文件(patbond-user 模块)
V1 V1__identity_media_baseline.sql
V2 V2__create_platform_product_events.sql

M2 的健康档案表迁移应从 V3 起编号。

4.5 CI 与其他基线

  • 三仓均存在 .gitea/workflows/ci.ymlapi 2705B / flutter 2362B / doc 1038B),随 HEAD 入库。
  • ADR 基线:ADR-001~008M2 新决策从 ADR-009 起。
  • E2E 脚本 test_e2e_manual.dart 已入 patbond-flutter git 追踪(位于仓库根目录而非 test/,见 §5 备注)。

5. 证据缺口清单

缺口 1(中):POST /api/v1/events 未入 OpenAPI 契约

  • 声称:「OpenAPI 契约正式化」(报告 20);api/index.md 约定契约先行。
  • 现实:契约仅覆盖 Auth & Me 5 端点;events 为已上线公开接口(提交 6d47c5a)但契约中不存在。
  • 建议M2 第一波补录 events 到 openapi.yaml,或以 ADR/契约说明明文排除并给出理由。

缺口 2(中):CI「全绿」无本地可复现证据

  • 声称:报告 20「ci.yml #6 全绿 3m18s」(细节具体,可信度中上)。
  • 现实:run 日志/截图未归档入 patbond-doc,本审计在本地仅能证实 ci.yml 文件存在,无法证实运行结果;需登录 Gitea 实例查看 Actions 页面方可复核。
  • 建议:后续迭代收官时将关键 CI run 的结论页截图或日志摘要归档入迭代报告,使该声称离线可验。

备注(低,非缺口)

  1. ADR 实际路径为 docs/architecture/decisions.md 而非 development/ 下——引用时注意路径,内容本身完整。
  2. test_e2e_manual.dart 放在 patbond-flutter 仓库根目录,不在 test/ 目录、不被 flutter test 纳入——属工程卫生问题,M2 可顺手归位。
  3. openapi.yaml 未单列 mkdocs 导航,经 api/index.md 链接可达,可接受。
  4. 本报告写入的 iteration-2 目录尚未挂 mkdocs 导航(本审计按约束不改 mkdocs.yml),待 doc 维护者统一挂载。

结论:第一迭代档案质量整体扎实——报告、导航、ADR、git 历史四条证据链均经实证核对无虚报;测试数静态计数与声称精确一致。两个缺口(events 契约缺录、CI 结果不可离线复核)均为可修补的档案问题,不阻塞 M2 开工。基线快照(§4)自本日起生效,M2 验收时据此对比。