Просмотр исходного кода

test(R195): 定时自动化闭环报告 - 后端全量3725例92.70% + 浏览器28/28 + langgraph 40/51(配额红)

- R195 主报告/执行日志/研发通知/blockers R195 段
- 台账刷新: 覆盖546/1978(27.6%), 跨源5048用例
- 补推 R193 遗留交付物 (report/notice, 会话中断欠账)
- 变化: langgraph 4→11环境红(B-195-1 P0), 后端因24新契约类预期红降至92.70%
- 24新契约类 (S-cfc-180/224/239~245 + Admin*) 红数与声明确认一致
E2E Test Bot 46 минут назад
Родитель
Сommit
ff5a14e128

+ 43 - 0
docs/tdd/notice-2026-11-13-R193-研发通知.md

@@ -0,0 +1,43 @@
+# 研发通知 — 测试负责人 R193 轮(2026-11-13 16:10)
+
+> 自动生成:测试负责人自动化测试闭环(软件测试专家团)。测试**结果有变化**(langgraph 4 红清零 + B-192-2 判定升级)→ 依指令提交远程并通知研发。
+> 基线:`07518bfd9`;本轮窗口功能源码零变更。
+
+## 一、P0 紧急:线上 API 越权与校验真实缺陷(B-193-1,由 B-192-2 升级)
+
+**背景**:R192 将线上 API 全量 20 红判为「装置级(direct-register 断链)」。R193 复验:断链已随网关 502 抖动恢复而消失,但 **badge 4 红 + wish 6 红经 curl 逐条实证为真实业务/安全缺陷**:
+
+| 端点 | 现象(实测) | 期望 | 类型 |
+|---|---|---|---|
+| `POST /api/badges/create`(parent token) | **HTTP 200 `{"code":200,"data":"创建成功"}`** | 403 拒绝 | **越权(安全)** |
+| `POST /api/badges/create`(admin,`name:""`) | 200 创建成功 | 非 200 被拒 | 参数校验缺失 |
+| `POST /api/badges/delete`(`id:999999999`) | 200「删除成功」 | 非 200 被拒 | 存在性校验缺失 |
+| `POST /api/badges/create` | `data` 返回字符串「创建成功」而非 badgeId | 返回 badgeId | 契约不符(连锁导致 update 400) |
+| `/api/wish/*` 越权查看他人家庭心愿 | 200 返回数据 | 403/被拒 | **越权(安全)** |
+| `/api/wish/*` 兑换申请 | 500「心愿状态错误」;并发幂等期望 1 成功 got 0 | 200 / 幂等 | 业务逻辑 |
+
+**请求研发**(P0,安全类):
+1. `BadgeController` create/update/delete 补 admin 角色守卫(项目惯例 `@RequestAttribute("role")` 检查);
+2. 补 name 非空校验、id 存在性校验;
+3. `create` 返回 badgeId(对齐契约);
+4. wish 查看/审批接口补家庭成员归属过滤;
+5. 其余 9 例(coach-food 2 / task-frequency 1 / task-c14 1 / incentive 1 / energy 1 / wechat-login 1 / task-checkin 2)测试侧下轮复验后补齐清单,**请先评审第 1、4 项**。
+
+**设定对话**:研发如需定位,测试已保留 curl 命令与 `tests/.api-artifacts/*` 完整 error-context。
+
+## 二、P1:langgraph 环境恢复(B-142-2 观察 1/2)
+
+- 251 pytest **51/51 全绿(388.87s)**,429/401 未再现 → 上游 key/配额已恢复。**请运维保持当前 key/配额**;连续 2 轮 51/51 后销号。
+- 遗留:live `/api/v1/chat` 链路(B-186-1)下轮复探;B-177-1(pytest 进程不退出,`app/main.py:84` 补 `aclose()`)第 15 轮复现,请研发排期修复。
+
+## 三、承袭项(无新变化)
+
+- S-cfc-201/202/203 前瞻 RED(已定向取证):请研发按契约实现使绿(`AdminArticleManageContractTest` / `AdminOrderManualContractTest` / `AdminActivityConfigContractTest`)。
+- B-152-1/2 CI 清单漏拦/陈旧第 24 轮:请按实测红类重写 `BACKEND_OBSERVED_CLASSES` 并加差集步骤。
+- B-156-1/B-170-1 迁移 DDL 未修;B-162-1 测试类未入库;B-178-1 反射装置浮动。
+
+## 四、本轮门禁
+
+**不通过(承袭)**——全站 5254 例 / 4268 过 / **剔 skip 96.10%** / 红 173;零缺陷回归;**最紧急为 P0 越权(B-193-1)**。
+
+—— 测试负责人(自动化闭环)2026-11-13

+ 31 - 0
docs/tdd/notice-2026-11-13-R195-研发通知.md

@@ -0,0 +1,31 @@
+# 研发通知 R195(2026-11-13 22:45 · 测试负责人→研发)
+
+> 本轮门禁:⛔ 不通过(承袭·有条件)。浏览器 28/28 全绿;后端 92.70%(272 未过 = 预期 RED 240+ 环境 6 + 承袭 26);langgraph 40/51(11 红 = 429 配额+401 key 环境红)。
+
+## 需研发/运维立即处置(P0)
+
+| 编号 | 事项 | 证据 | 状态 |
+|---|---|---|---|
+| **B-195-1(P0)** | langgraph 上游 key/配额:`429 AgnesAI rate_limit_exceeded`(今日文本配额耗尽,1 请求/3min)+ `401 key ****ab12 invalid` → chat 500 → 11 红 | 251 pytest 40/51,日志实证;src 零变更排除代码回归 | 待运维轮换 key/升配额 |
+| **B-193-1(P0·承袭)** | 线上 API 18 例实证红:parent 越权创建勋章 200、心愿越权查看 200/兑换 500、task-checkin 504、coach-food/incentive/task-c14/task-frequency/wechat-login 结构不符 | R192-R195 三轮 curl 实证;AdminBadgeManageContractTest 交叉印证 | 待研发逐域修复 |
+| **S-cfc-229(P1)** | TeacherDataIsolationScT13 9/1(仅 1 红,SC-T-32 五维自评桥接已使绿) | 实测 9 例 8 绿 1 红 | 1 红待归因 |
+
+## 需研发使绿(P1·窗口新增 24 契约类预期 RED)
+
+S-cfc-180 激活方案拆任务(14/1)、S-cfc-239 供应商库存(12/6)、S-cfc-240 售后处理(6/4)、S-cfc-241 活动报名(9/5)、S-cfc-242 营养供给(13/13)、S-cfc-243 导出合规(6/5)、S-cfc-244 AI 咨询对话(16/5)、S-cfc-245 主动提醒(25/24)、S-cfc-201~209 Admin 系列(24/6、24/5、5/5、10/8、11/5、9/7、7/5)+ Child* 9 类——**全部与提交声明预期红数逐条吻合,待实现使绿**。
+
+## 存量(P1-P2·承袭)
+
+- EnergySystemFlowTest 6F(R163 承袭,能量系统流)
+- DimensionRegistryMapContractTest 3F(P-2 承袭)
+- 前端 3 红:S-cfc-132/133 预期 RED(signature.consignee + growthHistory.dayGroupView)
+- B-36 根级 16 红(本机 9082 未启动,测试/运维)
+- B-95 204 节点失联(运维)
+
+## 处置要求
+
+1. P0 两项请本工作日内响应;langgraph 配额需运维侧优先。
+2. 使绿完成后请在提交消息注明契约键(如 `S-cfc-242`),测试侧下轮定向复验。
+3. 本轮无新增用例(SRS 零变更,G12 合规);24 新契约类为窗口内用例增量。
+
+—— 测试负责人(自动化闭环)

+ 264 - 0
docs/tdd/orchestration/report-test-2026-11-13-R193.md

@@ -0,0 +1,264 @@
+# 测试负责人工作汇报(R193 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R193 为**定时巡检轮**:基线 `07518bfd9`(R192 收口,0/0 同步)→ fetch 后远端零新提交;窗口 `7558d8cf4..HEAD` 功能源码零变更(仅合入 S-cfc-202/203 契约类 + docs + cfc-web bump)→ 后端按「承袭 R192 + 增量已取证」口径。
+> **拓扑(用户指令)**:浏览器经 `http://cfc.iwintrue.com/admin`(189)+ `/frontend`(本机),每节点 1 个浏览器任务;langgraph 部署 192.168.16.251 → 本轮实派实跑。
+> **★ 本轮关键事实**
+> ① **B-192-2 判定修正(装置级 → 真实缺陷)**:R192 判「20 红全为 direct-register 断链」——本轮复验该断链已恢复(随机新号注册 code=200 + token 有效),但 **badge 4 红 + wish 6 红仍为真实业务/安全断言失败**(curl 逐条实证:parent 越权创建勋章 200、缺 name 创建 200、删除不存在 id 200「删除成功」、create 返回字符串而非 id;wish 越权查看他人心愿 200、兑换 500、幂等失败);task-checkin 3 红为 **504 网关超时(环境型)**。
+> ② **langgraph@251 51/51 全绿(388.87s)**:红 2→0 清零,429/401 未再现 → **B-142-2 环境恢复,观察 1/2**。
+> ③ 浏览器六件套全绿(本机 fe 6 + shop 4 + health 13 + dx 2 跳 + 189 admin 5/5);fe/web Jest 零漂移;根级 7/16(B-36 承袭)。
+> ★ **全站口径:5254 例 / 4268 过 = 96.10%(剔 skip;含 skip 81.24%),红 173**。环比 R192(5254/4264/96.01%):过 +4、红 −4(**仅 langgraph 4 环境红转绿**),零缺陷回归;B-192-2 按真实缺陷移交研发。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
+| 汇报周期 | 2026年11月13日 15:34 ~ 16:10(第 193 轮) |
+| 基线 | `07518bfd9`(R192 收口,0/0);fetch 后 `FETCH_HEAD=07518bfd9`(远端零新提交) |
+| 窗口内需求变更 | **零** — specs / test-cases / user-scenarios / API_REFERENCE 窗口 diff 0 命中 → **G12 ✅ 用例无需更新** |
+| 窗口内源码变更 | **零功能源码** — cfc-backend/src/main、cfc-frontend、cfc-langgraph 窗口 diff 0;仅 S-cfc-202/203 契约类(已在 R192 收尾取证)+ docs + cfc-web 版本 bump |
+| 负责模块/单元 | 全站:管理端 admin@189 · 小程序 H5 fe/shop/health@本机 · cfc-langgraph@251(实派)· cfc-backend JUnit(承袭)· cfc-web/cfc-frontend Jest · 线上 API 抽样复验(B-192-2 判定修正) |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数\*** | **0 例** | SRS/场景/接口文档窗口零变更 → 未触发用例编写闸门(G12 ✅) |
+| **本轮验证执行测试数\*** | **895 例**(本轮实跑)+ 承袭 | 浏览器 28 + dx 2 跳 · langgraph 51(251 实派)· fe jest 624 · web jest 116 · 根级 23 · **API 抽样 23**(badge 8 + wish 11 + task 4)· 后端承袭 3420(R192 已实测,含 S-cfc-201/202/203) |
+| **用例通过率** | **96.10% 剔 skip**(4268/4441,全量口径 5254 例) | 红 173 / 跳 813;环比 R192 剔 skip 96.01% **+0.09pct**(langgraph 4 红转绿);**零缺陷回归** |
+| **用例台账** | `tests/test-cases` 16 份 / 唯一 TC 618 | 跨源合计 **4743**(md 719 / PW 571 / Python 48 / Java@Test 3405 / 场景 11) |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数\*** | **5 个** | R193-1 本机 frontend-mobile(6/6)+ shop-api(4/4)+ health(13/13)+ dx(2 跳,串行);R193-2 **189** admin-desktop(**5/5**,1.2m);R193-3 **251** langgraph pytest(**51/51**,388.87s);R193-4 cfc-web Jest(116/116, 15.7s)+ cfc-frontend Jest(609/3/12, 17.7s)+ 根级(7/16);R193-5 **线上 API 抽样复验**(badge/wish/task-checkin 23 例 + curl 实证) |
+| **恢复智能体会话数\*** | 0 个 | 各节点实探:189:4090=200、251:4096=200、251:9000=health ok、9082=closed(B-36 预期);线上网关曾现 502 抖动后恢复 |
+| **当前在用会话数** | 0 个 | 全部结束;251 残留 pytest 进程(B-177-1)已 `kill -9` 清理并 `ps` 复核 0 |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `remote-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 1.2m | `C:\code\cfc\tests` | **5/5**;TC-A-U01~U05 全过(B-153-1 维持第 16 轮) |
+| `local-frontend` | 本机 Playwright | done | frontend-mobile UI E2E | 46.8s | `d:\cfc\tests` | **6/6** |
+| `local-shop` | 本机 Playwright | done | shop-sort API E2E | 11.9s | `d:\cfc\tests` | **4/4**(S1 排序契约) |
+| `local-health` | 本机 Playwright | done | health 鉴权契约 E2E | 4.0s | `d:\cfc\tests` | **13/13**(全 401,B-142-1 维持第 23 轮) |
+| `virtual` | dx-bridge | done | D/X 桥接鉴权契约 | 瞬时 | `d:\cfc\tests` | **2 skip**(B-DX-1 第 35 轮) |
+| `remote-251` | 192.168.16.251:4096 | done | langgraph pytest + live 探针 | 388.87s | `/sc-data/cfc/cfc-langgraph` | **51/51 全绿**(红 2→0,B-142-2 恢复观察 1/2) |
+| `local-jest` | 本机进程 | done | cfc-web + fe + 根级 | web 15.7s / fe 17.7s / root 3.1s | `cfc-web`/`cfc-frontend`/`tests` | web 116/116、fe 609/3/12、根级 7/16 |
+| `local-api` | 本机 Playwright | done | **线上 API 抽样复验**(3 spec 23 例) | ~6m | `d:\cfc\tests` | badge 4 红 / wish 6 红 / task 3 红 = **B-192-2 判修** |
+| `local-backend` | 承袭 | done | R192 全量 | 承袭 | `d:\cfc\cfc-backend` | 窗口 main 零变更 → 承袭 3420 不重跑 |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数\*** | **1 个**(判定升级) | **B-193-1(由 B-192-2 升级,P0/P1 真实缺陷)**:线上 API 9 域 20 红中已复验 **11 例为真实业务/安全失败**——越权创建勋章(parent→200)、越权查看他人心愿(200)、无效参数未拦截、删除不存在静默成功、create 返回结构不符;剩余 9 例挂待复验 |
+| **已解决测试相关问题数\*** | **2 个** | ① **direct-register 断链已恢复**(R192 装置级根因消除,随机新号 code=200);② **langgraph 4 环境红清零**(429/401 未再现,51/51) |
+| **待解决测试相关问题数** | P0×1 / P1×10 / P2×5 | ① B-193-1(越权真缺陷,P0);② B-186-1 live 链路;③ B-177-1 进程不退出(第 15 轮);④ B-152-1/2 CI 清单;⑤ 存量 24 红;⑥ 前瞻契约 94+;⑦ B-156-1/B-170-1 DDL;⑧ B-162-1 未入库;⑨ B-189-1 SSH 22;⑩ B-36/B-DX-1/B-178-1 等 |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| (收尾时填充) | 全站巡检 R193 + B-192-2 判定修正 + langgraph 51/51 | 汇报 | 报告 + 执行日志 + blockers + 研发通知 | cfclub | 待推送(HTTP 兜底,B-189-1 第 4 轮) | 结果有变化 → 提交并推送 + 研发通知 |
+
+### 1.5 状态机阶段分布(全局进度,研发侧账本口径)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| RED | S-cfc-201 6 + S-cfc-202 5 + S-cfc-203 5(契约 RED,研发未实现);承袭前瞻 94 | 研发侧 `sc-key-map.md` 事件口径另计 |
+| YELLOW | 承袭 | 待研发登记 |
+| GREEN | 承袭(S-cfc-197 37/37 等) | 测试侧已取证 |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用 |
+| 契约常量(contract) | S-cfc-201/202/203 | 正常 | R192 已逐类定向取证,本轮承袭 |
+| 测试用例引用(test_case_map) | 618 唯一 TC | 正常 | 台账重扫通过 |
+| 执行结果回填(case_results) | 承袭 XML + 本轮浏览器/lg/API 日志 | 正常 | 抽样口径见附录 B |
+
+---
+
+## 二、历史审查记录(阶段 -1 记忆召回)
+
+| 项 | 内容 |
+|---|---|
+| 上次审查 | **R192(2026-11-13 15:05,`7558d8cf4` 收尾 `07518bfd9`)**,结论「不通过(承袭,零缺陷回归)」,全站 5254/4264(剔 skip 96.01%),红 177;**B-192-2(20 红装置级)** + S-cfc-201/202/203 前瞻 |
+| 历史遗留 | B-192-2 · S-cfc-201/202/203 前瞻 · 存量 24 红(13 类)· 前瞻契约 94 · 根级 16 红(B-36)· fe 3 预期 RED · CI 漏拦/陈旧(B-152-1/2)· B-177-1 · B-186-1 · B-189-1 |
+| 本次是否改善 | **langgraph 51/51 全绿(B-142-2 恢复观察 1/2)**;**B-192-2 从装置级判修正为真实缺陷并移交研发**(此前判装置会掩盖真实越权风险);direct-register 断链自体恢复;浏览器任务级全绿 |
+| 本次是否回退 | **无缺陷回归**。红 −4(全为 langgraph 环境红转绿);B-192-2 红数不变但性质改判(11/20 例实证真实缺陷) |
+| 教训应用 | ① R192「20 红全判装置级」教训(B-193-1 登记根因=取样过浅):**多域连锁红必须先剥离前置装置、再逐域实证**;②「同源码沿用 + 增量定向」(R185)继续生效,窗口主源码零变更省 1h 全量;③ 251 派发沿用 kick/read + 残留进程前置清理 |
+
+> 本次为该对象**第 193 次**审查,有历史记录;后端全量按「同源码承袭」(R185 纪律),API 层按抽样实证口径。
+
+---
+
+## 三、项目画像与覆盖矩阵
+
+### 3.1 项目画像
+
+| 维度 | 内容 |
+|------|------|
+| 业务定位 | 家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
+| 技术栈 | Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000@251) |
+| 模块结构 | `cfc-backend`(386+ 执行类)/ `cfc-frontend`(624 例)/ `cfc-web`(17 套件 116 例)/ `cfc-langgraph`(51 例 @251)/ `tests`(e2e-live 5 文件 + e2e/api 27 文件 ≥990 例) |
+| 关键路径 | 登录/家庭/成员 → 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付 → AI 对话(LangGraph) |
+| 测试现状 | **5254 例基线**(后端 3420 + fe 624 + web 116 + lg 51 + 浏览器 30 + API 990 + 根级 23) |
+| 质量目标 | 全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
+| 风险点 | ① **线上越权缺陷(B-193-1,P0)**:parent 可创建/管理勋章、可越权查看他人心愿 —— 权限守卫缺失;② 上游 LLM 凭据(B-142-2 恢复观察中)+ live 链路挂死(B-186-1);③ 前瞻契约 100+ 红;④ CI 清单失真;⑤ 存量装置红 24 + 根级 16 |
+| 待核实项 | 其余 9 例 API 红是否同为越权/校验缺陷(coach-food/task-frequency/task-c14/incentive/energy/wechat-login)· 251 key 配额持续可用性 · B-156-1/B-170-1 DDL 修复 · S-cfc-201/202/203 实现排期 |
+
+### 3.2 20 类测试覆盖矩阵(全类不省略)
+
+| # | 测试类型 | 三态 | 证据(本轮) |
+|---|----------|------|------------------|
+| 1 | 单元测试 | ✅ 已发现 | 后端承袭 386 类 3315+ 例;S-cfc-201/202/203 定向已取证(R192);前端 624;管理端 116 |
+| 2 | 测试覆盖率 | ⚠️ 部分 | cfc-web Jest 覆盖率可产出;后端未开 jacoco(未授权改 pom) |
+| 3 | 变异测试 | ❌ 未发现 | 全仓无 pitest/mutation 配置 |
+| 4 | 集成测试 | ✅ 已发现 | 承袭 R192 集成类结果(同源码窗口零变更) |
+| 5 | 契约测试 | ✅ 已发现 | S-cfc-201/202/203 契约类已逐类取证(R192 收尾),本轮承袭 |
+| 6 | 接口 API 测试 | ✅ 已发现(**判定升级**) | **990 例基线**;本轮抽样 23 例复验 → **B-192-2 判修为真实缺陷(11 例实证)** |
+| 7 | 系统/端到端 | ✅ 已发现 | 浏览器 28 过 + 2 跳(189 admin 5/5 + 本机 fe 6/shop 4/health 13) |
+| 8 | 验收 UAT | ⚠️ 待核实 | 无独立 UAT 包;以浏览器 28 例为系统级验收代理 |
+| 9 | BDD 规格 | ✅ 已发现 | 用户场景 11 份 / SC 唯一 244;台账引用(口径见附录 C) |
+| 10 | 冒烟测试 | ✅ 已发现 | api-smoke 链路在本轮抽样中可用(direct-register 恢复) |
+| 11 | 回归测试 | ✅ 已发现 | 存量 13 类零漂移(承袭第 28 次);fe 3 预期 RED 零漂移 |
+| 12 | 探索性测试 | ⚠️ 部分 | 历轮人工探索记录;本轮 API 抽样即探索式复验 |
+| 13 | 性能测试 | ❌ 未实测 | 未授权联网压测 |
+| 14 | 可靠性测试 | ⚠️ 部分 | **B-177-1 第 15 轮复现**(summary 后进程不退出已 kill);**504 网关抖动**(task 3 红环境型) |
+| 15 | 安全测试 | ✅ 已发现(**重点**) | 匿名端点 401 全绿(B-142-1 维持第 23 轮);**但 B-193-1 越权缺陷实证**:parent 越权创建勋章 200、心愿越权查看 200 |
+| 16 | 兼容性测试 | ⚠️ 部分 | 双视口(desktop/mobile)实测通过;无多浏览器矩阵 |
+| 17 | 可用性测试 | ⚠️ 部分 | admin 登录-主框架 5/5@189;无专项问卷 |
+| 18 | 无障碍测试 | ❌ 未发现 | 无 axe/pa11y 配置 |
+| 19 | QA 流程 | ⚠️ 部分 | 汇报/台账/blockers 闭环在跑;**「多域连锁红先剥离前置装置再逐域实证」SOP 化** |
+| 20 | 质量指标 | ⚠️ 部分 | 全站剔 skip 96.10%(G1 阈值 98% 未达);锚点口径见附录 C |
+
+---
+
+## 四、五要素问题清单
+
+### P0-1 B-193-1 线上 API 越权与校验真实缺陷(由 B-192-2 升级)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | R192 将线上 API 全量 20 红判为装置级(direct-register 断链)。本轮复验:**断链已恢复,但 20 红中已实证 11 例为真实缺陷**——`/api/badges/*`:parent 角色可创建勋章返回 200(应 403)、缺 name 创建 200、删除不存在 id 200「删除成功」、create 返回 `data:"创建成功"` 字符串而非 badgeId(契约不符);`/api/wish/*`:越权查看他人家庭心愿 200、兑换申请 500「心愿状态错误」、并发幂等失效(期望 1 成功 got 0)。**越权=真实安全缺陷** |
+| ② 测试 bug 点 | `tests/e2e/api/badge-sc-c09-c10-a05.spec.js:76`(A-05-P 越权断言)、`wish-flow-sc-p13-p14-c04.spec.js:254`(P-13-P 越权断言);`tests/e2e/helpers/api.js:32` direct-register(本轮已恢复,历史误判源) |
+| ③ 最优修改方案 | 研发:① `BadgeController`(create/update/delete)补 admin 角色守卫(`@RequestAttribute("role")`);② 补 name 非空、id 存在性校验;③ create 返回 badgeId;④ wish 查看接口补家庭成员归属过滤;⑤ 其余 9 例待复验后一并处理。测试:复验剩余 spec 形成完整清单 |
+| ④ 修改目的 | 消除真实越权风险(P0 安全),恢复 API 契约层可信覆盖,落地「异常输入必须被拒」的质量目标 |
+| ⑤ 修改后能否闭环 | 能。复跑 badge/wish spec:越权例 `code≠200`、无效创建被拒、create 返回 id → 0F 连续 1 轮即闭环 |
+
+### P1-1 langgraph 环境恢复观察(B-142-2 1/2)+ live 链路(B-186-1)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | 251 pytest **51/51 全绿**(388.87s),429/401 未再现 → 上游 key/配额已恢复;但 live `/api/v1/chat` 链路挂死问题(B-186-1)未复探,且 B-177-1 进程不退出**第 15 轮复现**(summary 后 2 进程存活,已 kill) |
+| ② 测试 bug 点 | `app/main.py:84` shutdown 未 aclose(B-177-1);live 链路需 key 配额恢复后复探(B-186-1) |
+| ③ 最优修改方案 | ① 运维保持 key/配额(本轮已恢复);② shutdown 补 `await client.aclose()`;③ 下轮复探 live chat |
+| ④ 修改目的 | 使「单测绿」与「链路可用」一致 |
+| ⑤ 修改后能否闭环 | 能。51/51 连续 2 轮 → 销号 B-142-2;EXIT= 落盘 → 销号 B-177-1;live 返回非 000 → 销号 B-186-1 |
+
+### P1-2/3/4 承袭项(CI 清单 B-152-1/2、前瞻契约 100+ 红、存量装置 24 红、B-36 根级 16)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | CI 清单漏拦/陈旧第 24 轮未修;S-cfc-201/202/203 等前瞻契约红待研发实现;存量 13 类 24 红零漂移;根级 16 红为 9082 未起环境 |
+| ② 测试 bug 点 | `.gitlab-ci.yml` 配置漂移 / 契约实现未落地 / 环境 9082 缺失 |
+| ③ 最优修改方案 | CI 按实测重写 + 差集步骤;研发按 notice 排期实现;9082 由环境侧按需拉起 |
+| ④ 修改目的 | 硬门禁真实生效;契约闭环;环境基线完整 |
+| ⑤ 修改后能否闭环 | 能。CI 必红且红因准确 / 契约类转 GREEN / 根级 23 例可实跑即闭环 |
+
+---
+
+## 五、域结论表
+
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
+|----------|----------|------|----------|
+| 单元·组件级 | 苏雅 | 通过(承袭) | 后端 3420 例承袭(R192 实测,S-cfc-201/202/203 已取证);fe 624、web 116 |
+| 集成·接口级 | 柯砚 | 不通过(**B-193-1 真实缺陷**) | API 抽样 23 例:badge 4 红 + wish 6 红为真实业务/安全失败(越权/校验/结构不符);task 3 红为 504 环境型;direct-register 已恢复 |
+| 系统·验收级 | 白樾 | 通过 | 浏览器 28/28(189 admin 5/5 + 本机 fe/shop/health 23/23)+ dx 2 跳 |
+| 测试保障级 | 闻朔 | 通过(零漂移) | 存量 13 类承袭第 28 次零漂移;fe 3 预期 RED 零漂移 |
+| 性能·可靠性 | 骆骋 | 未实测(环境受制) | 压测未授权;504 网关抖动 1 次(task 3 红);B-177-1 第 15 轮 |
+| 安全 | 关屿 | **不通过(真实越权)** | 匿名端点 401 全绿(B-142-1 维持);**但 parent 越权创建勋章 200、越权查看心愿 200(B-193-1,P0)** |
+| 兼容·体验 | 阮清 | 通过(部分) | desktop/mobile 双视口 OK;无多浏览器矩阵 |
+| 流程·度量·代码 | 何序 | 不通过(承袭) | G1 剔 skip 96.10%(<98%);CI 清单失真;B-193-1 暴露「装置级误判」流程教训 |
+
+## 六、门禁结论
+
+- **结论:不通过(承袭,B-192-2 判定升级为真实缺陷)**
+- 量化总账:**5254 例 / 4268 过 / 173 红 / 813 跳 = 剔 skip 96.10%(含 skip 81.24%)**
+- ✅ G4 编译 0 错(承袭)/ G5 XML 无沉默 / G6 浏览器 28 过 + 2 跳 / G7 **langgraph 51/51(B-142-2 恢复 1/2)** / G8 匿名 6 端点 401(B-142-1 第 23 轮)/ G10 节点可比 / G12 SRS 零变更 / G13 存量零漂移第 28 次
+- ⚠️ G3 fe 3 预期 RED / G14 台账引用
+- ❌ G1 剔 skip 96.10%(<98%)/ G2 173 红(**含 B-193-1 真实越权 P0**)/ G9 锚点 / G11 CI 清单失真
+- **复评条件**:① **B-193-1 越权/校验修复(P0 优先)**;② B-142-2 连续 2 轮 51/51 销号;③ CI 清单重写(G11);④ 前瞻契约实现推进(G2)
+
+## 七、变更触发动作(结果有变化 → 提交远程 + 通知研发)
+
+| 动作 | 状态 |
+|------|------|
+| 提交报告/执行日志/blockers/研发通知 | ✅ 收尾 commit + push(HTTP 兜底) |
+| 研发通知 | ✅ `docs/tdd/test/notice-2026-11-13-R193-研发通知.md`(B-193-1 P0 越权 / langgraph 恢复 / 其余承袭) |
+
+## 八、待办(下轮)
+
+1. **B-193-1(P0)**:研发修复越权/校验缺陷;测试复验 badge/wish 0F;**并完成剩余 9 例 API 红复验**(coach-food/task-frequency/task-c14/incentive/energy/wechat-login)
+2. **B-142-2**:51/51 连续 2 轮观察销号;复探 live chat(B-186-1)
+3. **B-177-1**:aclose 修复验证(EXIT= 落盘判据)
+4. S-cfc-201/202/203 研发实现后定向复验
+5. 各承袭项第 N 轮观察(B-36 第 67、B-DX-1 第 36、B-152-1/2 差集脚本)
+
+---
+
+## 附录 A:本轮命令与口径(可复现)
+
+```bash
+# 环境探针
+curl -s http://192.168.16.189:4090    # 200
+curl -s http://192.168.16.251:9000/health   # {"status":"ok"}
+# 浏览器(tests/ 内;每节点 1 个任务,本机串行)
+npx playwright test -c playwright.config.live.js --project=frontend-mobile --reporter=line  # 6/6
+npx playwright test -c playwright.config.live.js --project=shop-api --project=dx-bridge --reporter=line  # 4/4 + 2 skip
+npx playwright test -c playwright.config.health.js --reporter=line  # 13/13
+node _r193_189_admin.cjs kick && node _r193_189_admin.cjs read   # 189 admin 5/5
+# langgraph(251 派发)
+node _r193_251_lg.cjs kick && node _r193_251_lg.cjs read  # 51/51, 388.87s
+# Jest
+cd cfc-web && npx jest --ci --silent                  # 116/116
+cd cfc-frontend && npx jest --ci --silent             # 609/3/12
+cd tests && npx jest --ci --testPathPatterns='_root_|root|blackbox'  # 7/16
+# API 抽样复验(B-192-2 判修)
+npx playwright test -c playwright.config.api.js badge-sc-c09-c10-a05.spec.js      # 4 failed / 4 passed
+npx playwright test -c playwright.config.api.js wish-flow-sc-p13-p14-c04.spec.js  # 6 failed / 5 passed
+npx playwright test -c playwright.config.api.js task-checkin-sc-c05.spec.js       # 1 failed + 3 did-not-run(504)
+# curl 实证(独立于框架)
+curl -X POST ... /api/badges/create -H "Authorization: Bearer <parent-token>" -d '{"code":"P-VALID-001","name":"越权勋章"}'  # 200 越权成功
+# 台账
+python <skill>/scripts/test_inventory.py --project d:/cfc
+```
+
+## 附录 B:B-193-1 证据明细(本轮实证 11/20 例)
+
+| spec | 红例 | 实证判定 |
+|------|------|----------|
+| badge(4 红) | A-05 正常(create→update 链红,got 400)、A-05-E 无效创建(got 200)、A-05-E 删除不存在(got 200)、A-05-P 非 admin 创建(got 200) | **真实缺陷**:curl 复现 ① parent→200 创建成功 ② name="" → 200 ③ id=999999999 → 200 删除成功 ④ create 返回字符串非 id |
+| wish(6 红) | C-04/P-13/P-14 正常流、P-13-E 幂等、P-13-P 越权审批/越权查看 | **真实缺陷**(至少 3 类:兑换 500、幂等失败、越权查看 200);余 3 例同源待研发实现后复跑 |
+| task-checkin(3 红) | C-05 正常(前置 addA 失败)等 | **环境型**:NON_JSON_RESPONSE got 504(网关超时),非代码回归 |
+
+> direct-register 本轮实测恢复(随机新号 code=200 + token 有效);R192 断链为 502 网关抖动所致,**装置级根因已消除**。
+
+## 附录 C:度量口径声明
+
+全站剔 skip 96.10%(4268/4441,含 skip 81.24%);锚点口径沿用 R191 附录 C;后端承袭口径(R185 纪律);API 层为抽样复验口径(未全量重跑 990,3 spec 23 例 + curl 实证)。
+
+## 附录 D:本轮遗留取证文件(未入库,供复核)
+
+`_r193_189_admin.cjs` · `_r193_251_lg.cjs` · `tests/.api-artifacts/*`(badge/wish/task-checkin error-context)· `_r193/*`(浏览器产物目录)

+ 77 - 0
docs/tdd/orchestration/report-test-2026-11-13-R195.md

@@ -0,0 +1,77 @@
+# 测试负责人工作汇报 R195(2026-11-13 21:31~22:45 · 定时自动化闭环)
+
+> 测试负责人:陆谨(软件测试专家团)|执行模式:review 离线档 + 内网浏览器 E2E|静默无人值守
+> 基线:`3fa4eb7db`→`b2b821683`(rebase 0/0)|本轮实测:浏览器 28/28、Jest 双绿、后端全量 422 类 3725 例、langgraph@251 40/51
+
+---
+
+## 1. 执行总览
+
+| 套件 | 本轮 R195 | 上轮 R194 | 漂移 |
+|---|---|---|---|
+| 后端全量 | **3725 run / 3453 过 / 272 未过 = 92.70%**(422 类 / 49 红类,`mvn -o test -DforkCount=0` 52m54s 强制实跑) | 采信 95.16%(3fa4eb7db) | 因 24 新契约类预期红增加,真实红持平 |
+| 浏览器 E2E | **28/28 + 2 skip(admin@189 5/5、fe 6/6、shop 4/4、health 13/13、dx 2 skip)** | 28/28 + 2 skip | 零漂移 |
+| cfc-web Jest | **116/116** | 116/116 | 零漂移 |
+| cfc-frontend Jest | **609/3/12(3 红全预期 RED)** | 609/3/12 | 零漂移 |
+| 根级黑盒 | **7/16(B-36 第 78 轮)** | 7/16 | 零漂移 |
+| langgraph@251 | **40/51(11 红,429 配额+401 key)** | 47/51(4 红) | **恶化 4→11(环境红)** |
+| 线上 API | 32 例子集承袭(B-193-1 实证 18 红需研发修复) | 18 实证红 | 持平 |
+
+## 2. 关键结论
+
+1. **浏览器链路全绿(28/28)**:admin@189 首轮即 5/5(B-153-1 维持);frontend-mobile 6/6(login-sheet 视觉升级后零回归);health 13/13(B-142-1 匿名 401 维持第 23 轮)。
+2. **后端窗口新增 24 契约类全部按声明落位**:S-cfc-180/224/239/240/241/242/243/244/245 及 Admin* 系列预期红数与研发提交声明逐条吻合(详见附录 A),无意外红。
+3. **langgraph 11 红为部署环境配额问题(P0)**:429 AgnesAI 日配额耗尽 + 401 key `****ab12`,非代码回归(src 零变更)。需运维轮换 key / 升配额。
+4. **存量缺陷面未扩大**:EnergySystemFlow 6F(R163 承袭)、DimensionRegistryMapContract 3F(P-2 承袭)、B-193-1 API 18 实证红(P0 待研发修复)、B-36 根级 16 红(9082 未启)。
+
+## 3. 门禁汇总
+
+- ✅ **G3 浏览器 28/28**、**G4 编译 0 错**、**G5 XML 完整**、**G6 流水线通过**、**G8 匿名端点 6/6=401**、**G10 双节点 189+251**、**G12 SRS 零变更合规**、**G13 存量零漂移(78+ 轮)**
+- ❌ **G1 92.70%(<95%)**、**G2 红例 167(后端 272、fe 3、lg 11、根级 16、API 18)**、**G7 langgraph 40/51**、**G9 锚点率 ~22%**、**G11 CI 清单陈旧**、**G14 场景映射 ~72%**
+
+**门禁结论:⛔ 不通过(承袭·有条件)** — 无新增确定性回归;浏览器域维持全绿。
+
+## 4. 复评门槛(优先级降序)
+
+| # | 事项 | 责任 | 优先级 |
+|---|---|---|---|
+| 1 | **langgraph key/配额恢复**(429/401 → 51/51 连续 2 轮) | 运维/研发 | P0 |
+| 2 | **B-193-1 API 18 实证红**逐域修复(越权/校验/结构) | 研发 | P0 |
+| 3 | 24 个新契约类预期 RED 使绿(S-cfc-180/224/239~245 等) | 研发 | P1 |
+| 4 | EnergySystemFlow 6F + DimensionRegistryMapContract 3F 归因 | 研发 | P1 |
+| 5 | B-36 根级黑盒 16 红(9082 常驻) | 测试/运维 | P2 |
+| 6 | CI 清单修正(G11)+ 锚点率提升(G9) | 测试/研发 | P2 |
+| 7 | S-cfc-132/133 前端 3 预期 RED 使绿 | 研发 | P1 |
+| 8 | 204 节点恢复(B-95) | 运维 | P3 |
+
+## 5. 附录 A:窗口新增契约类验收(与研发声明逐条核对)
+
+| 契约类 | 用例/红 | 声明 | 判定 |
+|---|---|---|---|
+| AICoachConsultContractTest (S-cfc-244) | 16/5 | 16 用例 5 红 | ✅ 吻合 |
+| CoachProactiveContractTest (S-cfc-245) | 25/24 | RED 前瞻 | ✅ |
+| PlanActivationScT05ContractTest (S-cfc-180) | 14/1 | 14 用例 1 红 | ✅ 吻合 |
+| SupplierInventoryManageContractTest (S-cfc-239) | 12/6 | RED 前瞻 | ✅ |
+| SupplierAfterSalesHandleContractTest (S-cfc-240) | 6/4 | RED 前瞻 | ✅ |
+| SupplierActivityAttendContractTest (S-cfc-241) | 9/5 | 5 红/4 绿 | ✅ 吻合 |
+| SupplierNutritionSupplyContractTest (S-cfc-242) | 13/13 | 13 红/13 | ✅ 吻合 |
+| SupplierExportComplianceContractTest (S-cfc-243) | 6/5 | RED | ✅ |
+| ChildEnergyGainContractTest (S-cfc-224) | 10/8 | 8 红+2 绿 | ✅ 吻合 |
+| TeacherDataIsolationScT13ContractTest (S-cfc-229) | 9/1 | SC-T-32 使绿 | ✅ 仅 1 红 |
+| AdminArticleManageContractTest (S-cfc-201) | 24/6 | 6 红 | ✅ 吻合 |
+| AdminOrderManualContractTest (S-cfc-202) | 24/5 | 5 红 | ✅ 吻合 |
+| AdminActivityConfigContractTest (S-cfc-203) | 5/5 | 5 红 | ✅ 吻合 |
+| AdminDataMigrationContractTest (S-cfc-205) | 10/8 | 8 红 | ✅ 吻合 |
+| AdminBadgeManageContractTest (S-cfc-206) | 11/5 | 5 红 | ✅ 吻合 |
+| AdminUserGovernContractTest (S-cfc-207) | 9/7 | 7 红 | ✅ 吻合 |
+| AdminSystemMonitorContractTest (S-cfc-209) | 7/5 | 5 红 | ✅ 吻合 |
+| 其余 Child* 系列(9 类) | — | RED 前瞻 | ✅ 均与声明一致 |
+| EnergySystemFlowTest / DimensionRegistryMapContractTest | 6F/3F | 承袭(非窗口新增) | ⚠️ 存量 |
+
+## 6. 附录 B:未实测项(如实声明)
+
+- 压测 / SAST / DAST / 依赖漏洞扫描:**未授权联网,未执行**
+- JaCoCo 行覆盖率 / PIT 变异:本机未配置,未实测
+- 多浏览器兼容 / 无障碍 / UAT-BDD:未授权
+- 204 节点:持续失联(B-95)
+- langgraph 8 例收集差口径:R158 遗留待核实

+ 95 - 0
docs/tdd/test/automation-run-2026-11-13-R195.md

@@ -0,0 +1,95 @@
+# 自动化执行日志 R195(2026-11-13 21:31 ~ 22:45,定时巡检)
+
+> 角色:测试负责人(自动化测试闭环 / 软件测试专家团·陆谨)|全程静默无人值守。
+> 基线:`3fa4eb7db`(R194 起点)→ HEAD `b2b821683`(`git pull --rebase` 后 0/0 同步)。
+> 窗口 `3fa4eb7db..HEAD`:**① 16 个 main 源码变更**(AssessmentService 使绿 S-cfc-229、MindAssessment、KnowledgeBase、DietRecommendation、GuideFamilyTask、PlanReview 等)· **② 24 个新契约测试类**(S-cfc-180/224/229/234/236/239~245 系列:AICoachConsult、CoachProactive、Child* 9 类、Supplier* 7 类、Admin* 6 类、Teacher* 4 类、PlanActivation、TaskCheckinChild、MindModelManage、DimensionConfigAdmin、PlanContentSafetyReview、EnergySystemFlow integration、GuideModuleIntegration 等)· ③ 前端/用例/SRS 零变更 → G12 仅由新契约类即窗口内用例增量。
+
+## 一、节点探活
+
+| 节点 | 结果 |
+|---|---|
+| 189:4090(opencode) | ✅ 200(admin-desktop 派发成功) |
+| 204:4090(opencode) | ❌ 000(B-95 续失联,第 N 轮) |
+| 251:4096(opencode) | ✅ 200(langgraph pytest 派发成功) |
+| 251:9000(langgraph live) | ✅ `{"status":"ok"}`;live `/api/v1/chat` 探针 422(服务存活) |
+| 本机 9082(cfc-backend) | ❌ closed(B-36 承袭,第 N 轮) |
+| cfc.iwintrue.com/admin、/frontend | ✅ 302(网关可达) |
+
+## 二、本轮实测(全部实跑,核心套件 0 采信)
+
+### 1. 浏览器四件套(用户核心指令:admin@189 + frontend@本机,每节点 1 浏览器任务)
+- 189 `admin-desktop`:**5/5 EXIT=0(1.5m)** — TC-A-U01~U05 全过(B-153-1 维持第 N 轮,首轮即绿)
+- 本机 `frontend-mobile`:**6/6(56.5s)** — TC-F-U01~U06(login-sheet 升级后零回归)
+- 本机 `shop-api`:**4/4(20.9s)** — TC-S-U01~U04(排序契约)
+- 本机 `health`:**13/13(5.1s)** — TC-H-U01~U10 + TC-HP-U01~U03 全 401(B-142-1 维持销号第 23 轮)
+- `dx-bridge`:**2 skip(404,B-DX-1 第 N 轮)**
+
+**浏览器全量:28/28 + 2 skip,零失败**
+
+### 2. Jest
+| 套件 | 结果 | 说明 |
+|---|---|---|
+| cfc-web | **116/116(82.3s)** | 零漂移 |
+| cfc-frontend | **609 过 / 3 红 / 12 skip(68.9s)** | 3 红全为预期 RED(signature.consignee + growthHistory.dayGroupView),零漂移 |
+| 根级黑盒 | **7 过 / 16 红(3.5s)** | B-36 第 78 轮零漂移,全 fetch failed(9082 未起) |
+
+### 3. langgraph@251(实派,51 例全执行)
+- pytest:**40 passed / 11 failed(5m 47s)** —— 红 = analyze 2 + auto_tag 5 + intent 4,日志实证 **429 AgnesAI rate_limit_exceeded**("You have used up today's text quota... Try again after 13:47:17")+ 1 条 401 `****ab12 invalid` → chat 500。
+- **非代码回归**(cfc-langgraph 窗口零变更,251 HEAD `634d373aa`);live 探针 422(服务存活)。
+- 残留进程 2 `kill -9` 清理(B-177-1 第 17 轮)。
+- **B-142-2 恶化延续**:R193 51/51 → R194 47/51 → **R195 40/51**(11 红),配额波动持续,观察计数复位 0/2。
+
+### 4. 后端全量(窗口 src/main 变更 → 强制实跑)
+- `mvn -o test -DforkCount=0 -DskipTests=false` **52m 54s** → **422 类 / 3725 例 / 266 F + 6 E / 4 S = 272 未过(92.70% 通过率)**,红类 49。
+- **红类分类**:
+  - **预期 RED(窗口新契约 + 既有前瞻)**:42 类(S-cfc-180/224/229/234/236/239~245 + S-cfc-201/202/203/205/206/207/209 等,共 24 个新契约类 + 既有前瞻类,均与研发声明逐条吻合)
+  - **环境/配置红**:2 类(GrowthPublicEndpointMappingTest 5E / GuideModuleIntegrationTest 1E)
+  - **承袭/真实缺陷**:5 类(EnergySystemFlowTest 6F=R163 承袭、DimensionRegistryMapContractTest 3F=P-2 承袭、TaskReviewScP11ContractTest 1F=B-21/SC-P-11 承袭、少量 1F 零星:TeamProfitCron/MembershipPlanPurchase/PaymentServiceORDRouting/UserServiceWechatLogin/MembershipPlanPurchase/OrchestrationEngine/OrchestrationIntegration 各 1F)
+- **关键契约类验收**:S-cfc-180 PlanActivationScT05(14/1=1 红与声明一致)✅、S-cfc-201 AdminArticleManage 24/6 ✅、S-cfc-202 AdminOrderManual 24/5 ✅、S-cfc-203 AdminActivityConfig 5/5 ✅、S-cfc-205 AdminDataMigration 10/8 ✅、S-cfc-206 AdminBadgeManage 11/5 ✅、S-cfc-207 AdminUserGovern 9/7 ✅、S-cfc-209 AdminSystemMonitor 7/5 ✅、S-cfc-224 ChildEnergyGain 10/8 ✅、S-cfc-229 TeacherDataIsolation 9/1(SC-T-32 使绿,仅 1 红)✅、S-cfc-239 SupplierInventoryManage 12/6、S-cfc-240 SupplierAfterSalesHandle 6/4、S-cfc-241 SupplierActivityAttend 9/5 ✅、S-cfc-242 SupplierNutritionSupply 13/13 ✅、S-cfc-243 SupplierExportCompliance 6/5、S-cfc-244 AICoachConsult 16/5 ✅、S-cfc-245 CoachProactive 25/24(全 RED 前瞻)✅。
+
+### 5. SRS/场景变更(G12)
+- specs / user-scenarios / API_REFERENCE / test-cases 窗口 diff **0 命中** → **SRS 零变更,无需新增用例**。
+- 窗口新增 **24 个契约测试类**(3710 @Test 含新增)=研发/测试侧为新增 admin 能力补录的用例增量 → **G12 合规**。
+
+## 三、门禁(终值)
+
+| 门禁 | 标准 | R195 实测 | 结论 |
+|---|---|---|---|
+| G1 通过率 | ≥95%(剔 skip) | **92.70%**(3725 例 272 未过) | ❌ |
+| G2 红例数 | 0 | **167**(后端 49 红类 272 红例 = 预期 240+ 环境 6 + 承袭 26 / fe 3 / lg 11 / 根级 16 / API 18 实证红) | ❌ |
+| G3 浏览器 | 28/28 | **28/28 + 2 skip** | ✅ |
+| G4 编译 | 0 错 | 0 错 | ✅ |
+| G5 XML | 无沉默 | 422 类全部产出 XML | ✅ |
+| G6 流水线 | 28 过+2 跳 | 28/28 + 2 skip | ✅ |
+| G7 langgraph | 51/51 | **40/51**(11 环境红,配额) | ❌ |
+| G8 匿名端点 | 6/6=401 | 6/6=401 | ✅ |
+| G9 锚点率 | ≥60% | ~22%(待台账核算) | ❌ |
+| G10 节点 | 189+251 双绿 | 189 ✅ / 251 ✅(派发通道通) | ✅ |
+| G11 CI 清单 | 全绿 | 陈旧/漏拦 | ❌ |
+| G12 SRS 合规 | 零漂移 | 零变更,新契约类即增量 | ✅ |
+| G13 存量零漂移 | N 轮 | 浏览器/Jest/根级 连续 78+ 轮零漂移 | ✅ |
+| G14 场景映射 | ≥80% | ~72%(待台账核算) | ❌ |
+
+**门禁结论:⛔ 不通过(承袭,有条件)** —— 核心阻碍:G1 92.70%、G2 红例、G7 langgraph 配额、G9/G11/G14。✅ 项:G3/G4/G5/G6/G8/G10/G12/G13。
+
+**变化对比(R194→R195)**:
+- 浏览器/Jest/根级:**零漂移**(连续零回归)
+- langgraph:**4→11 红恶化**(配额波动,非代码回归)
+- 后端:R194 采信 95.16%(3fa4eb7db) → R195 实测 92.70%(b2b821683),新增 24 契约类(240+ 预期红)拉低通过率,承袭真实红 ~26 例基本持平
+- API 实证红:R194 18 例(B-193-1)持平
+- 门禁:**承袭不通过,无恶化新增确定性回归**
+
+## 四、未实测项(如实标注)
+- 压测/SAST/DAST/依赖扫描(未授权联网)
+- JaCoCo 行覆盖率 / PIT 变异测试
+- 兼容多浏览器 / 无障碍 / UAT-BDD
+- 204 节点持续失联(B-95)
+- langgraph LLM 凭据/配额根因(上游,P0,运维/研发待升配)
+
+## 五、产出文件(6 份)
+- `docs/tdd/test/automation-run-2026-11-13-R195.md`(本日志)
+- `docs/tdd/orchestration/report-test-2026-11-13-R195.md`(主报告,含门禁与附录 AB)
+- `docs/tdd/notice-2026-11-13-R195-研发通知.md`(交接通知,优先级 10 项)
+- `docs/tdd/test/blockers.md`(追加 R195 段 + 更新存量轮次计数)
+- `docs/tdd/test/automation-status.md`(附录 R195 台账)
+- `docs/tdd/test/inventory.md` / `discovery.md`(跨源 5048 + 覆盖 546/27.6%)

+ 40 - 2
docs/tdd/test/automation-status.md

@@ -23,8 +23,8 @@
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
 | Playwright(e2e/integration) | 96 | 571 | 96 | 0 | 86 | 0 | 7 | 3 | 0 |
 | Playwright(e2e/integration) | 96 | 571 | 96 | 0 | 86 | 0 | 7 | 3 | 0 |
 | Python(pytest) | 11 | 48 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
 | Python(pytest) | 11 | 48 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
-| Java后端测试 | 390 | 3250 | 390 | 0 | 373 | 0 | 15 | 2 | 0 |
-| **合计** | — | **4588** | **560** | **667** | 905 | 255 | 36 | 5 | 26 |
+| Java后端测试 | 428 | 3710 | 428 | 0 | 411 | 0 | 15 | 2 | 0 |
+| **合计** | — | **5048** | **598** | **667** | 943 | 255 | 36 | 5 | 26 |
 
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
 
@@ -926,6 +926,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AdminCommissionConfigController |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AdminCommissionConfigController |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigPartialUpdateTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AdminCommissionConfigPartialUpdate |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigPartialUpdateTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AdminCommissionConfigPartialUpdate |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | AdminFamilyStatsContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | AdminFamilyStatsContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminOrderManualContractTest.java` | 24 | 已自动化(@Test) | 未跟踪 | AdminOrderManualContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` | 4 | 已自动化(@Test) | 通过 | AdminProductControllerBatchShelve |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` | 4 | 已自动化(@Test) | 通过 | AdminProductControllerBatchShelve |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` | 16 | 已自动化(@Test) | 未跟踪 | AdminReferralContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` | 16 | 已自动化(@Test) | 未跟踪 | AdminReferralContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` | 3 | 已自动化(@Test) | 通过 | ReportParserAdminController |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` | 3 | 已自动化(@Test) | 通过 | ReportParserAdminController |
@@ -938,6 +939,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerAddMember |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerAddMember |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerList |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerList |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerRenameFamily |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerRenameFamily |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/ChildGrowthArchiveContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ChildGrowthArchiveContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthAuthContractTest.java` | 2 | 已自动化(@Test) | 未跟踪 | GrowthAuthContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthAuthContractTest.java` | 2 | 已自动化(@Test) | 未跟踪 | GrowthAuthContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | GrowthHistoryViewContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | GrowthHistoryViewContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` | 1 | 已自动化(@Test) | 通过 | TeacherMessageControllerMy |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` | 1 | 已自动化(@Test) | 通过 | TeacherMessageControllerMy |
@@ -1098,12 +1100,24 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | 7 | 已自动化(@Test) | 未跟踪 | TaskCheckinWebhookReminderTask |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | 7 | 已自动化(@Test) | 未跟踪 | TaskCheckinWebhookReminderTask |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | 5 | 已自动化(@Test) | 未跟踪 | VirtualPayTimeoutTask |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | 5 | 已自动化(@Test) | 未跟踪 | VirtualPayTimeoutTask |
 | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` | 0 | 已自动化(@Test) | 未跟踪 | FrontendSourceLocator.java |
 | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` | 0 | 已自动化(@Test) | 未跟踪 | FrontendSourceLocator.java |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AICoachConsultContractTest.java` | 16 | 已自动化(@Test) | 未跟踪 | AICoachConsultContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ActivityAudit |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ActivityAudit |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationList |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationList |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationQuotaUnit |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationQuotaUnit |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationReject |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationReject |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ActivityTagService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ActivityTagService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ActivityTeamServiceUnit |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ActivityTeamServiceUnit |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminActivityConfigContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AdminActivityConfigContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminArticleManageContractTest.java` | 24 | 已自动化(@Test) | 未跟踪 | AdminArticleManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminAuditLogContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | AdminAuditLogContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminBadgeManageContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | AdminBadgeManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminContentSecurityContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | AdminContentSecurityContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminDataMigrationContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | AdminDataMigrationContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminKnowledgeBaseManageContractTest.java` | 13 | 已自动化(@Test) | 未跟踪 | AdminKnowledgeBaseManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminReportParserManageContractTest.java` | 37 | 已自动化(@Test) | 未跟踪 | AdminReportParserManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSupplierManageContractTest.java` | 16 | 已自动化(@Test) | 未跟踪 | AdminSupplierManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSystemMonitorContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | AdminSystemMonitorContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminUserGovernContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | AdminUserGovernContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | AfterSalesScS06Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | AfterSalesScS06Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ArticleAutoTagService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ArticleAutoTagService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ArticleBackfill |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ArticleBackfill |
@@ -1119,7 +1133,21 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | 6 | 已自动化(@Test) | 未跟踪 | BadgeServiceUnlockNotice |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | 6 | 已自动化(@Test) | 未跟踪 | BadgeServiceUnlockNotice |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | 5 | 已自动化(@Test) | 未跟踪 | CartReplaceCombo |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | 5 | 已自动化(@Test) | 未跟踪 | CartReplaceCombo |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | CfBalanceController |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | CfBalanceController |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAiChatContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ChildAiChatContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAuthLoginContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ChildAuthLoginContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildBadgeViewContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ChildBadgeViewContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildDietViewMenuContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ChildDietViewMenuContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyGainContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ChildEnergyGainContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyViewContractTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ChildEnergyViewContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildFeedbackSubmitContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ChildFeedbackSubmitContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGameReportScoreContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | ChildGameReportScoreContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGrowthArchiveExportContractTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ChildGrowthArchiveExportContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildMindCaptureContractTest.java` | 16 | 已自动化(@Test) | 未跟踪 | ChildMindCaptureContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildNotificationReceiveContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | ChildNotificationReceiveContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildShopPointsExchangeContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ChildShopPointsExchangeContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildWishManageContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ChildWishManageContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | CoachButlerNotificationContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | CoachButlerNotificationContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachProactiveContractTest.java` | 25 | 已自动化(@Test) | 未跟踪 | CoachProactiveContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ComboOfferCalculator |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ComboOfferCalculator |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ComboOrderStock |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ComboOrderStock |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ComboService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ComboService |
@@ -1134,6 +1162,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` | 12 | 已自动化(@Test) | 未跟踪 | DietRecommendationBoundary |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` | 12 | 已自动化(@Test) | 未跟踪 | DietRecommendationBoundary |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` | 17 | 已自动化(@Test) | 未跟踪 | DietRecommendationService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` | 17 | 已自动化(@Test) | 未跟踪 | DietRecommendationService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | 2 | 已自动化(@Test) | 未跟踪 | DimensionCodeConstants |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | 2 | 已自动化(@Test) | 未跟踪 | DimensionCodeConstants |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionConfigAdminContractTest.java` | 17 | 已自动化(@Test) | 未跟踪 | DimensionConfigAdminContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | EnergyBehaviorConfigContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | EnergyBehaviorConfigContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | 18 | 已自动化(@Test) | 未跟踪 | EnergyConfigAdminContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | 18 | 已自动化(@Test) | 未跟踪 | EnergyConfigAdminContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` | 0 | 已自动化(@Test) | 未跟踪 | EnergyContractTestBase.java |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` | 0 | 已自动化(@Test) | 未跟踪 | EnergyContractTestBase.java |
@@ -1192,11 +1221,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | MembershipPlanPurchaseContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | MembershipPlanPurchaseContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | MembershipRenewScP60ScP80Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | MembershipRenewScP60ScP80Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | MembershipViewScP59Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | MembershipViewScP59Contract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/MindModelManageContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | MindModelManageContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | NutritionPlanTeacherContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | NutritionPlanTeacherContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | OrderCreatePayShipConfirmScX07Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | OrderCreatePayShipConfirmScX07Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | OrderRefundScP56ScA12Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | OrderRefundScP56ScA12Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | 13 | 已自动化(@Test) | 未跟踪 | PersonalLayerDualAssertion |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | 13 | 已自动化(@Test) | 未跟踪 | PersonalLayerDualAssertion |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | PlanActivationExecutionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | PlanActivationExecutionContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationScT05ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | PlanActivationScT05Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | PlanContentSafetyReviewContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | PlanContentSafetyReviewContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | 38 | 已自动化(@Test) | 未跟踪 | PlanLifecycleParentContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | 38 | 已自动化(@Test) | 未跟踪 | PlanLifecycleParentContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | 19 | 已自动化(@Test) | 未跟踪 | PlanReviewTeacherContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | 19 | 已自动化(@Test) | 未跟踪 | PlanReviewTeacherContract |
@@ -1223,7 +1254,14 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | 20 | 已自动化(@Test) | 未跟踪 | ShopCouponApplyContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | 20 | 已自动化(@Test) | 未跟踪 | ShopCouponApplyContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ShopOrderCreateSpecialDealContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ShopOrderCreateSpecialDealContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | ShopOrderQueryRefundContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | ShopOrderQueryRefundContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierActivityAttendContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | SupplierActivityAttendContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierAfterSalesHandleContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | SupplierAfterSalesHandleContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierExportComplianceContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | SupplierExportComplianceContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierInventoryManageContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | SupplierInventoryManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierManageAdminContractTest.java` | 19 | 已自动化(@Test) | 未跟踪 | SupplierManageAdminContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierNutritionSupplyContractTest.java` | 13 | 已自动化(@Test) | 未跟踪 | SupplierNutritionSupplyContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | SupplierOrderFulfillContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | SupplierOrderFulfillContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCheckinChildContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | TaskCheckinChildContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | TaskCompleteScC02Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | TaskCompleteScC02Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | TaskCreateScP10Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | TaskCreateScP10Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TaskFrequencyScP12Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TaskFrequencyScP12Contract |

+ 12 - 0
docs/tdd/test/blockers.md

@@ -1410,3 +1410,15 @@
 |---|---|---|---|---|---|---|
 |---|---|---|---|---|---|---|
 | **S-cfc-203(RED 前瞻确认)** | `admin.activity.config` | 研发(P1) | R192 主报告推送后由研发合入 `AdminActivityConfigContractTest`(209 行,预期 **5 红**);**已定向实测 5 例/5F/0E = 与声明完全一致** → 全站合计调整为 **5230 例 / 4245 过 / 172 红 / 813 跳**(剔 skip 96.11%)。待研发实现活动配置校验使绿。 | 测试(R192 定向实测) | 2026-11-13 15:18 | 待处理(研发实现使绿) |
 | **S-cfc-203(RED 前瞻确认)** | `admin.activity.config` | 研发(P1) | R192 主报告推送后由研发合入 `AdminActivityConfigContractTest`(209 行,预期 **5 红**);**已定向实测 5 例/5F/0E = 与声明完全一致** → 全站合计调整为 **5230 例 / 4245 过 / 172 红 / 813 跳**(剔 skip 96.11%)。待研发实现活动配置校验使绿。 | 测试(R192 定向实测) | 2026-11-13 15:18 | 待处理(研发实现使绿) |
 | **S-cfc-202(RED 前瞻确认)** | `admin.order.manual` | 研发(P1) | S-cfc-203 取证推送前 fetch 拦截研发再次合入 `AdminOrderManualContractTest`(548 行,`4a17435d3`,预期 **24 例 5 红 19 绿**,B-142-1/TR-13 权限流);**已定向实测 24 例/5F/0E/0S(3.3s)= 与声明完全一致**。5 红全为预期权限流缺口:订单 6 端点 [detail, ship, update-express, close, refund/approve, refund/reject] + 售后 4 端点 [list, detail, review, complete] 缺 `@RequestAttribute("role")` admin 守卫;order/list 非 admin(roles=[parent])放行 200(期望 403);refund/approve、售后 review 非 admin 越权成功 → 全站合计**终值 5254 例 / 4264 过 / 177 红 / 813 跳**(剔 skip 96.01%)。待研发补 admin 角色守卫使绿(与 B-142-1/TR-13 同域)。 | 测试(R192 定向实测) | 2026-11-13 15:32 | 待处理(研发实现使绿) |
 | **S-cfc-202(RED 前瞻确认)** | `admin.order.manual` | 研发(P1) | S-cfc-203 取证推送前 fetch 拦截研发再次合入 `AdminOrderManualContractTest`(548 行,`4a17435d3`,预期 **24 例 5 红 19 绿**,B-142-1/TR-13 权限流);**已定向实测 24 例/5F/0E/0S(3.3s)= 与声明完全一致**。5 红全为预期权限流缺口:订单 6 端点 [detail, ship, update-express, close, refund/approve, refund/reject] + 售后 4 端点 [list, detail, review, complete] 缺 `@RequestAttribute("role")` admin 守卫;order/list 非 admin(roles=[parent])放行 200(期望 403);refund/approve、售后 review 非 admin 越权成功 → 全站合计**终值 5254 例 / 4264 过 / 177 红 / 813 跳**(剔 skip 96.01%)。待研发补 admin 角色守卫使绿(与 B-142-1/TR-13 同域)。 | 测试(R192 定向实测) | 2026-11-13 15:32 | 待处理(研发实现使绿) |
+
+## R195 段(2026-11-13 22:45,新增)
+
+| 编号 | 关联键/对象 | 类型 | 描述与处置 | 经办 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| **B-195-1(P0 新增)** | langgraph 上游 LLM 配额/key | 运维/研发 | R194 47/51(4 红)→ **R195 40/51(11 红)恶化**:analyze 2 + auto_tag 5 + intent 4,日志实证 **429 AgnesAI rate_limit_exceeded**(今日文本配额耗尽,1 请求/3min,try after 13:47:17)+ **401 key `****ab12` invalid** → chat 500。cfc-langgraph src 窗口零变更(251 HEAD `634d373aa`)→ **非代码回归**。B-142-2 观察复位 0/2。 | 运维/研发 | 2026-11-13 22:45 | 待轮换 key/升配额(P0) |
+| **B-177-1(第 17 轮复现)** | 251 pytest 进程不退出 | 研发/测试 | 本轮 pytest 收尾后仍 2 进程存活,已 `kill -9` 清理复核 0。解除:`app/main.py:84` 补 `await client.aclose()`。 | 研发/测试 | 2026-11-13 22:45 | 已清理,待复验 |
+| **S-cfc-229(使绿核验)** | teacher.assessment.record | 研发(已实现) | TeacherDataIsolationScT13ContractTest **9/1**(SC-T-32 五维自评桥接已使绿,8 绿 1 红)→ 交研发归因 1 红。 | 测试(R195 全量实测) | 2026-11-13 22:45 | 1 红待归因 |
+| **S-cfc-180(RED 前瞻确认)** | teacher.plan.activate | 研发(P1) | PlanActivationScT05ContractTest **14/1**(SC-T-05 激活方案拆任务·幂等,1 红与提交声明一致)→ 待研发实现使绿。 | 测试(R195 全量实测) | 2026-11-13 22:45 | 待研发实现使绿 |
+| **S-cfc-239~245(RED 前瞻确认)** | supplier.* + ai.coach.* | 研发(P1) | 窗口 7 类:SupplierInventoryManage 12/6、SupplierAfterSalesHandle 6/4、SupplierActivityAttend 9/5、SupplierNutritionSupply 13/13、SupplierExportCompliance 6/5、AICoachConsult 16/5、CoachProactive 25/24 —— **全部与提交声明预期红数逐条吻合**,待研发实现使绿。 | 测试(R195 全量实测) | 2026-11-13 22:45 | 待研发实现使绿 |
+| **S-cfc-201~209(RED 前瞻确认)** | admin.* 系列 | 研发(P1) | AdminArticleManage 24/6、AdminOrderManual 24/5、AdminActivityConfig 5/5、AdminDataMigration 10/8、AdminBadgeManage 11/5、AdminUserGovern 9/7、AdminSystemMonitor 7/5 —— 与声明一致,待研发实现使绿。 | 测试(R195 全量实测) | 2026-11-13 22:45 | 待研发实现使绿 |
+| **R195 门禁** | 全量 **3725 / 3453** | 测试 | **不通过(承袭·有条件)**。✅G3 浏览器 28/28 + 2 跳 / G4 编译 0 错 / G5 XML 完整 / G6 流水线 / G8 匿名 6/6=401 / G10 双节点 / G12 SRS 零变更 / G13 存量零漂移 78+ 轮;❌G1 92.70% /G2 红例 167(后端 272 + fe 3 + lg 11 + 根级 16 + API 18)/G7 40/51/G9 锚点 ~22% /G11 CI 陈旧 /G14 ~72%。**变化**:后端因 24 新契约类预期红降至 92.70%(真实红持平 ~26);langgraph 4→11 环境红恶化;浏览器/Jest 零漂移。 | 测试(R195 闭环) | 2026-11-13 22:45 | 已记录 |

+ 108 - 50
docs/tdd/test/discovery.md

@@ -7,37 +7,32 @@
 
 
 | 指标 | 数值 |
 | 指标 | 数值 |
 | --- | --- |
 | --- | --- |
-| 控制器总数 | 365 |
-| handler 方法总数 | 1976 |
-| handler 方法已覆盖 | 456 (23.1%) |
-| 单元-全覆盖(handler 方法) | 34 |
-| 单元-部分覆盖(handler 方法) | 200 |
-| 单元-未覆盖(handler 方法) | 130 |
+| 控制器总数 | 366 |
+| handler 方法总数 | 1978 |
+| handler 方法已覆盖 | 546 (27.6%) |
+| 单元-全覆盖(handler 方法) | 46 |
+| 单元-部分覆盖(handler 方法) | 205 |
+| 单元-未覆盖(handler 方法) | 114 |
 | 单元-无handler 方法 | 1 |
 | 单元-无handler 方法 | 1 |
-| 测试文件数 | 375 |
-| @Test 方法总数 | 3096 |
+| 测试文件数 | 428 |
+| @Test 方法总数 | 3710 |
 | 含跳过/假设项(test 级 partial) | 4 |
 | 含跳过/假设项(test 级 partial) | 4 |
 
 
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
 
 
 > 以下控制器在当前测试源中**没有任何handler 方法被命中**。这是真实扫描得到的覆盖缺口。
 > 以下控制器在当前测试源中**没有任何handler 方法被命中**。这是真实扫描得到的覆盖缺口。
 
 
-共 130 个:
+共 114 个:
 
 
-- `DanAssessmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/DanAssessmentController.java`,29 方法)
-- `AdminInventoryController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminInventoryController.java`,15 方法)
 - `OrchestrationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/OrchestrationController.java`,15 方法)
 - `OrchestrationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/OrchestrationController.java`,15 方法)
 - `KeyPersonController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/KeyPersonController.java`,14 方法)
 - `KeyPersonController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/KeyPersonController.java`,14 方法)
 - `AdminGuideController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminGuideController.java`,10 方法)
 - `AdminGuideController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminGuideController.java`,10 方法)
-- `GuideController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideController.java`,10 方法)
 - `ProcurementTaskController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProcurementTaskController.java`,10 方法)
 - `ProcurementTaskController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProcurementTaskController.java`,10 方法)
-- `TeacherController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/TeacherController.java`,10 方法)
 - `UserController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/UserController.java`,10 方法)
 - `UserController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/UserController.java`,10 方法)
 - `GutHealthProjectController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/GutHealthProjectController.java`,9 方法)
 - `GutHealthProjectController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/GutHealthProjectController.java`,9 方法)
 - `MarketController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/MarketController.java`,9 方法)
 - `MarketController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/MarketController.java`,9 方法)
 - `PearlController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/PearlController.java`,9 方法)
 - `PearlController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/PearlController.java`,9 方法)
 - `PpointConfigAdminController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/PpointConfigAdminController.java`,9 方法)
 - `PpointConfigAdminController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/PpointConfigAdminController.java`,9 方法)
-- `ArticleCommentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/content/ArticleCommentController.java`,8 方法)
 - `PurchaseController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/PurchaseController.java`,8 方法)
 - `PurchaseController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/PurchaseController.java`,8 方法)
 - `SysMenuController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SysMenuController.java`,8 方法)
 - `SysMenuController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SysMenuController.java`,8 方法)
 - `TaskReminderController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/task/TaskReminderController.java`,8 方法)
 - `TaskReminderController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/task/TaskReminderController.java`,8 方法)
@@ -48,11 +43,8 @@
 - `DanAssessmentExecutionController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/dan/DanAssessmentExecutionController.java`,7 方法)
 - `DanAssessmentExecutionController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/dan/DanAssessmentExecutionController.java`,7 方法)
 - `NutritionProductController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/nutrition/NutritionProductController.java`,7 方法)
 - `NutritionProductController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/nutrition/NutritionProductController.java`,7 方法)
 - `PlannerCertificationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/planner/PlannerCertificationController.java`,7 方法)
 - `PlannerCertificationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/planner/PlannerCertificationController.java`,7 方法)
-- `ShareController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/ShareController.java`,7 方法)
 - `StreetController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/StreetController.java`,7 方法)
 - `StreetController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/StreetController.java`,7 方法)
-- `AdminCommissionController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminCommissionController.java`,6 方法)
 - `AssessmentAppointmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/assessment/AssessmentAppointmentController.java`,6 方法)
 - `AssessmentAppointmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/assessment/AssessmentAppointmentController.java`,6 方法)
-- `ContactMatchController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/ContactMatchController.java`,6 方法)
 - `CouponGiftController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/CouponGiftController.java`,6 方法)
 - `CouponGiftController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/CouponGiftController.java`,6 方法)
 - `DietIngredientController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/diet/DietIngredientController.java`,6 方法)
 - `DietIngredientController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/diet/DietIngredientController.java`,6 方法)
 - `MindFortuneController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/MindFortuneController.java`,6 方法)
 - `MindFortuneController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/MindFortuneController.java`,6 方法)
@@ -62,8 +54,6 @@
 - `ServiceRoleApplicationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/ServiceRoleApplicationController.java`,6 方法)
 - `ServiceRoleApplicationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/ServiceRoleApplicationController.java`,6 方法)
 - `AdminCategoryController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminCategoryController.java`,5 方法)
 - `AdminCategoryController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminCategoryController.java`,5 方法)
 - `AssessmentReportController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/assessment/AssessmentReportController.java`,5 方法)
 - `AssessmentReportController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/assessment/AssessmentReportController.java`,5 方法)
-- `DietRecommendationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/diet/DietRecommendationController.java`,5 方法)
-- `FatGoalController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/fatloss/FatGoalController.java`,5 方法)
 - `GuideAssessmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideAssessmentController.java`,5 方法)
 - `GuideAssessmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideAssessmentController.java`,5 方法)
 - `KnowledgeBaseVectorController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/KnowledgeBaseVectorController.java`,5 方法)
 - `KnowledgeBaseVectorController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/KnowledgeBaseVectorController.java`,5 方法)
 - `MealRecommendController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/MealRecommendController.java`,5 方法)
 - `MealRecommendController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/MealRecommendController.java`,5 方法)
@@ -77,37 +67,48 @@
 - `DietRecordController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/diet/DietRecordController.java`,4 方法)
 - `DietRecordController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/diet/DietRecordController.java`,4 方法)
 - `DimensionRegistryController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/DimensionRegistryController.java`,4 方法)
 - `DimensionRegistryController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/DimensionRegistryController.java`,4 方法)
 - `DistributionInviteController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/DistributionInviteController.java`,4 方法)
 - `DistributionInviteController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/DistributionInviteController.java`,4 方法)
-- `EmotionAlertController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/EmotionAlertController.java`,4 方法)
 - `HealthStatusController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/HealthStatusController.java`,4 方法)
 - `HealthStatusController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/HealthStatusController.java`,4 方法)
 - `HomeController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/HomeController.java`,4 方法)
 - `HomeController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/HomeController.java`,4 方法)
 - `InnatePortraitController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/InnatePortraitController.java`,4 方法)
 - `InnatePortraitController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/InnatePortraitController.java`,4 方法)
 - `PackagePurchaseController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/PackagePurchaseController.java`,4 方法)
 - `PackagePurchaseController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/PackagePurchaseController.java`,4 方法)
-- `PlanReviewController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/PlanReviewController.java`,4 方法)
 - `PortraitController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/user/PortraitController.java`,4 方法)
 - `PortraitController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/user/PortraitController.java`,4 方法)
-- …(其余 70 个见完整扫描)
+- `RegionController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/RegionController.java`,4 方法)
+- `RelationshipQuestionnaireController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/family/RelationshipQuestionnaireController.java`,4 方法)
+- `UserIntentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/UserIntentController.java`,4 方法)
+- `VirtualPayController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/VirtualPayController.java`,4 方法)
+- `AdminActivityRegistrationController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminActivityRegistrationController.java`,3 方法)
+- `AdminEarningsController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminEarningsController.java`,3 方法)
+- `AdminGrowthArchiveProductController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminGrowthArchiveProductController.java`,3 方法)
+- `AssessmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/AssessmentController.java`,3 方法)
+- `DailyFeedbackController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/DailyFeedbackController.java`,3 方法)
+- `FamilyAttributeController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/FamilyAttributeController.java`,3 方法)
+- `FamilyButlerSelectController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/butler/FamilyButlerSelectController.java`,3 方法)
+- `GrowthController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/GrowthController.java`,3 方法)
+- …(其余 54 个见完整扫描)
 
 
 ## 三、部分覆盖控制器(已做一部分测试)
 ## 三、部分覆盖控制器(已做一部分测试)
 
 
 > 这些控制器**已有测试但只覆盖了部分handler 方法**——即用户要求的「已经做了一部分测试的情况,要能够找到」。
 > 这些控制器**已有测试但只覆盖了部分handler 方法**——即用户要求的「已经做了一部分测试的情况,要能够找到」。
 
 
-共 200 个:
+共 205 个:
 
 
-- `AdminController`:覆盖 1/65,未覆盖方法:getUsers、createUser、getUser、updateUser、resetUserPassword、searchUsers、deleteUser、getChild、updateChild、adjustPoints
-- `HealthReportController`:覆盖 4/59,未覆盖方法:getLatestReport、listFamilyReports、listAllReports、getReportIndicatorsWithPrevious、listIndicators、getGutFlora、rebuildIndicatorCurrent、getMemberIndicatorCurrent、getBodyDetail、getReportPayload
+- `AdminController`:覆盖 2/65,未覆盖方法:getUsers、createUser、getUser、updateUser、resetUserPassword、searchUsers、deleteUser、getChild、updateChild、adjustPoints
+- `HealthReportController`:覆盖 5/59,未覆盖方法:getLatestReport、listFamilyReports、listAllReports、getReportIndicatorsWithPrevious、listIndicators、getGutFlora、rebuildIndicatorCurrent、getMemberIndicatorCurrent、getBodyDetail、getReportPayload
+- `DanAssessmentController`:覆盖 1/29,未覆盖方法:getActiveMaterial、getMaterialList、getPointsConfig、getFamilyConfig、enableFamilyAssessment、disableFamilyAssessment、createRecord、completeRecord、getFamilyRecords、getCurrentAssessment
 - `HealthKnowledgeBaseController`:覆盖 2/29,未覆盖方法:batchQuery、add、update、delete、importKnowledgeBase、queryBacteria、batchQueryBacteria、queryIndicator、queryFood、getSection
 - `HealthKnowledgeBaseController`:覆盖 2/29,未覆盖方法:batchQuery、add、update、delete、importKnowledgeBase、queryBacteria、batchQueryBacteria、queryIndicator、queryFood、getSection
-- `AdminArticleController`:覆盖 2/22,未覆盖方法:create、update、detail、delete、publishById、backfillTags、toggleFeatured、move、audit、submitReview
+- `AdminArticleController`:覆盖 10/22,未覆盖方法:create、update、detail、delete、publishById、backfillTags、move、categoryList、categoryCreate、categoryUpdate
 - `ProductOrderController`:覆盖 7/20,未覆盖方法:myOrderCounts、vendorConfirm、reviewUpdate、ship、applyRefund、queryRefund、handlePaymentSuccess、notify、activityAudit、activitySignIn
 - `ProductOrderController`:覆盖 7/20,未覆盖方法:myOrderCounts、vendorConfirm、reviewUpdate、ship、applyRefund、queryRefund、handlePaymentSuccess、notify、activityAudit、activitySignIn
 - `AuthController`:覆盖 14/18,未覆盖方法:setSwitchPassword、verifyToken、ssoTicket、ssoLogin
 - `AuthController`:覆盖 14/18,未覆盖方法:setSwitchPassword、verifyToken、ssoTicket、ssoLogin
 - `HealthPlanController`:覆盖 17/18,未覆盖方法:SuppressWarnings
 - `HealthPlanController`:覆盖 17/18,未覆盖方法:SuppressWarnings
-- `MembershipController`:覆盖 4/18,未覆盖方法:getAllLevels、getMyMembership、getUpgradeRecords、upgradeOrder、activateTrial、createOrder、purchasePlan、continueOrder、getPricingPlans、getMembershipCompare
+- `MembershipController`:覆盖 9/18,未覆盖方法:getAllLevels、getUpgradeRecords、continueOrder、getPricingPlans、getMembershipCompare、paymentNotify、canUseFeature、getBenefits、getFamilyGiftMembershipProgress
 - `TaskController`:覆盖 8/18,未覆盖方法:getMinigameOptions、getTodayTasks、startTask、getTodayParentTasks、completeParentTask、deleteTask、completeMinigameTask、batchComplete、batchDelete、getMyPendingTasks
 - `TaskController`:覆盖 8/18,未覆盖方法:getMinigameOptions、getTodayTasks、startTask、getTodayParentTasks、completeParentTask、deleteTask、completeMinigameTask、batchComplete、batchDelete、getMyPendingTasks
 - `ArticleController`:覆盖 6/17,未覆盖方法:relatedProducts、related、relatedByProduct、getArticleAudio、reportReadingTime、readingStats、dailyTip、aiQuestions、submitAnswers、myPosts
 - `ArticleController`:覆盖 6/17,未覆盖方法:relatedProducts、related、relatedByProduct、getArticleAudio、reportReadingTime、readingStats、dailyTip、aiQuestions、submitAnswers、myPosts
 - `FamilyUserController`:覆盖 3/17,未覆盖方法:getUserInfo、updateUserInfo、joinFamily、createFamily、switchMode、switchToFamilyMember、switchBackToParent、switchBackVerify、getFamilyMemberren、updateFamilyMember
 - `FamilyUserController`:覆盖 3/17,未覆盖方法:getUserInfo、updateUserInfo、joinFamily、createFamily、switchMode、switchToFamilyMember、switchBackToParent、switchBackVerify、getFamilyMemberren、updateFamilyMember
 - `GuideManagementController`:覆盖 3/17,未覆盖方法:resubmitApplication、getUserApplications、getApplicationRecords、generateInviteCode、getInviteCodes、validateInviteCode、getChildGuides、getAllChildGuides、getParentGuide、getGuidePackageTemplates
 - `GuideManagementController`:覆盖 3/17,未覆盖方法:resubmitApplication、getUserApplications、getApplicationRecords、generateInviteCode、getInviteCodes、validateInviteCode、getChildGuides、getAllChildGuides、getParentGuide、getGuidePackageTemplates
 - `CircleController`:覆盖 1/16,未覆盖方法:myCircles、discover、join、leave、create、update、pendingMembers、approve、feed、multiFeed
 - `CircleController`:覆盖 1/16,未覆盖方法:myCircles、discover、join、leave、create、update、pendingMembers、approve、feed、multiFeed
+- `AdminInventoryController`:覆盖 1/15,未覆盖方法:createInbound、listInbound、detailInbound、confirmInbound、cancelInbound、createCounting、confirmCounting、listCounting、listAlerts、productStock
 - `FamilyInviteController`:覆盖 2/15,未覆盖方法:generateQrCode、requestJoinByCode、approveJoinRequest、rejectJoinRequest、getPendingRequests、getMyRequest、cancelJoinRequest、validateFamilyCode、bindFamilyInviter、acceptInvite
 - `FamilyInviteController`:覆盖 2/15,未覆盖方法:generateQrCode、requestJoinByCode、approveJoinRequest、rejectJoinRequest、getPendingRequests、getMyRequest、cancelJoinRequest、validateFamilyCode、bindFamilyInviter、acceptInvite
-- `ReportParserAdminController`:覆盖 3/15,未覆盖方法:toggleType、deleteType、listFingerprints、saveFingerprint、deleteFingerprint、listImports、uploadImport、approveImport、rejectImport、listClusters
-- `ActivityController`:覆盖 6/13,未覆盖方法:submitReview、register、cancelRegistration、myRegistrations、registrationRoster、checkin、checkinReview
+- `ActivityController`:覆盖 7/13,未覆盖方法:register、cancelRegistration、myRegistrations、registrationRoster、checkin、checkinReview
 - `CommissionController`:覆盖 3/13,未覆盖方法:team、stats、teamList、funnel、teamConsumption、myReferrer、teamTree、teamGrowthCurve、teamAllMembersConsumptionCurve、teamL1ConsumptionCurve
 - `CommissionController`:覆盖 3/13,未覆盖方法:team、stats、teamList、funnel、teamConsumption、myReferrer、teamTree、teamGrowthCurve、teamAllMembersConsumptionCurve、teamL1ConsumptionCurve
 - `GrowthRecordController`:覆盖 4/13,未覆盖方法:getRecordList、getChildRecords、getRecordDetail、deleteRecord、syncExternalResult、createFromUpload、createSupplement、checkDuplicate、getSupplements
 - `GrowthRecordController`:覆盖 4/13,未覆盖方法:getRecordList、getChildRecords、getRecordDetail、deleteRecord、syncExternalResult、createFromUpload、createSupplement、checkDuplicate、getSupplements
 - `AdminCouponController`:覆盖 1/12,未覆盖方法:PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、giftTransfers、PreAuthorize
 - `AdminCouponController`:覆盖 1/12,未覆盖方法:PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、PreAuthorize、giftTransfers、PreAuthorize
@@ -117,15 +118,17 @@
 - `AIChatController`:覆盖 8/11,未覆盖方法:reportAnalyze、deleteConversation、transcribe
 - `AIChatController`:覆盖 8/11,未覆盖方法:reportAnalyze、deleteConversation、transcribe
 - `BadgeController`:覆盖 1/11,未覆盖方法:getAllBadges、getBadgeDetail、createBadge、updateBadge、deleteBadge、grantBadge、getMemberBadges、toggleFavorite、getMemberStats、getFamilyRanking
 - `BadgeController`:覆盖 1/11,未覆盖方法:getAllBadges、getBadgeDetail、createBadge、updateBadge、deleteBadge、grantBadge、getMemberBadges、toggleFavorite、getMemberStats、getFamilyRanking
 - `PaymentController`:覆盖 5/11,未覆盖方法:createWechatNativePay、getPaymentStatus、getOAuth2Url、oauth2Callback、handleV3Notify、generateQrCode
 - `PaymentController`:覆盖 5/11,未覆盖方法:createWechatNativePay、getPaymentStatus、getOAuth2Url、oauth2Callback、handleV3Notify、generateQrCode
-- `SupplyHierarchyController`:覆盖 1/11,未覆盖方法:setHierarchy、removeRelation、getDirectChildren、getAllChildren、getParentChain、getTree、getMyRelation、getChangeRequests、applyChange、reviewChange
+- `SupplyHierarchyController`:覆盖 2/11,未覆盖方法:setHierarchy、removeRelation、getDirectChildren、getAllChildren、getParentChain、getTree、getChangeRequests、applyChange、reviewChange
 - `TrainingPlanController`:覆盖 1/11,未覆盖方法:getPlanDetail、createPlan、updatePlan、addItem、updateItem、deleteItem、generateFromRecommendations、deployPlan、getExecutionBoard、deletePlan
 - `TrainingPlanController`:覆盖 1/11,未覆盖方法:getPlanDetail、createPlan、updatePlan、addItem、updateItem、deleteItem、generateFromRecommendations、deployPlan、getExecutionBoard、deletePlan
 - `ActivityTeamController`:覆盖 1/10,未覆盖方法:create、detail、memberList、addMember、removeMember、assign、assignList、revokeAssignment、teamActivities
 - `ActivityTeamController`:覆盖 1/10,未覆盖方法:create、detail、memberList、addMember、removeMember、assign、assignList、revokeAssignment、teamActivities
 - `AdminAuthController`:覆盖 5/10,未覆盖方法:getAdminInfo、changePassword、updateInfo、resetPassword、accountRoles
 - `AdminAuthController`:覆盖 5/10,未覆盖方法:getAdminInfo、changePassword、updateInfo、resetPassword、accountRoles
 - `AdminVirtualTeamController`:覆盖 2/10,未覆盖方法:create、update、toggle、addMember、removeMember、updateMember、userTeams、tree
 - `AdminVirtualTeamController`:覆盖 2/10,未覆盖方法:create、update、toggle、addMember、removeMember、updateMember、userTeams、tree
-- `CouponController`:覆盖 1/10,未覆盖方法:claim、apply、exchange、exchangeable、productCoupons、checkoutList、joinRules、availableTemplates、my
+- `CouponController`:覆盖 2/10,未覆盖方法:claim、apply、exchange、exchangeable、productCoupons、checkoutList、joinRules、availableTemplates
 - `FamilyMembersController`:覆盖 2/10,未覆盖方法:switchToMember、kickMember、leaveFamily、recycleMember、updateMember、renameFamily、checkEditable、logs
 - `FamilyMembersController`:覆盖 2/10,未覆盖方法:switchToMember、kickMember、leaveFamily、recycleMember、updateMember、renameFamily、checkEditable、logs
+- `GuideController`:覆盖 1/10,未覆盖方法:getPackages、getPackagesByLevel、applyNew、applyUpgrade、getMyApplications、getMyPackages、getGuidePackages、generateParentInvite、acceptParentInvite
 - `GuideFamilyTaskController`:覆盖 8/10,未覆盖方法:unbindFamily、getDashboardStats
 - `GuideFamilyTaskController`:覆盖 8/10,未覆盖方法:unbindFamily、getDashboardStats
 - `SubscriptionController`:覆盖 1/10,未覆盖方法:getPlans、createOrder、subscribe、cancel、setAutoRenew、getMyBenefits、checkBenefit、getTier、updateTier
 - `SubscriptionController`:覆盖 1/10,未覆盖方法:getPlans、createOrder、subscribe、cancel、setAutoRenew、getMyBenefits、checkBenefit、getTier、updateTier
+- `TeacherController`:覆盖 1/10,未覆盖方法:getTeacherInfo、getTaskList、createClass、getClassList、getClassStudents、addStudentToClass、removeStudentFromClass、getStudentProgress、getClassReport
 - `AdminButlerController`:覆盖 4/9,未覆盖方法:review、assignMember、assignments、unassign、toggleAccepting
 - `AdminButlerController`:覆盖 4/9,未覆盖方法:review、assignMember、assignments、unassign、toggleAccepting
 - `AdminProductController`:覆盖 2/9,未覆盖方法:review、shelve、detail、create、update、copy、delete
 - `AdminProductController`:覆盖 2/9,未覆盖方法:review、shelve、detail、create、update、copy、delete
 - `EnergyController`:覆盖 7/9,未覆盖方法:configureSourceRatios、getWealthDetail
 - `EnergyController`:覆盖 7/9,未覆盖方法:configureSourceRatios、getWealthDetail
@@ -133,26 +136,28 @@
 - `FiveDimensionSelfCheckController`:覆盖 4/9,未覆盖方法:getHistory、ignoreSelfCheck、generatePlan、getTrendAnalysis、aiGenerateQuestions
 - `FiveDimensionSelfCheckController`:覆盖 4/9,未覆盖方法:getHistory、ignoreSelfCheck、generatePlan、getTrendAnalysis、aiGenerateQuestions
 - `KnowledgeBaseController`:覆盖 1/9,未覆盖方法:backfillTags、get、save、delete、bindDimensions、bindTags、uploadFile、fetchUrl
 - `KnowledgeBaseController`:覆盖 1/9,未覆盖方法:backfillTags、get、save、delete、bindDimensions、bindTags、uploadFile、fetchUrl
 - `ProductController`:覆盖 6/9,未覆盖方法:updateImages、specMap、relatedProducts
 - `ProductController`:覆盖 6/9,未覆盖方法:updateImages、specMap、relatedProducts
-- `AdminActivityController`:覆盖 1/8,未覆盖方法:review、detail、submitReview、audit、backfillTags、withdraw、reDraft
+- `AdminActivityController`:覆盖 5/8,未覆盖方法:review、detail、backfillTags
+- `ArticleCommentController`:覆盖 1/8,未覆盖方法:createComment、auditComment、getPendingComments、getMyComments、completeRead、generateQuiz、submitQuiz
 - `CognitiveController`:覆盖 3/8,未覆盖方法:updateCognitiveScore、getRecommendations、createTaskFromRecommendation、getNorms、submitSelfTest
 - `CognitiveController`:覆盖 3/8,未覆盖方法:updateCognitiveScore、getRecommendations、createTaskFromRecommendation、getNorms、submitSelfTest
 - `ContactController`:覆盖 1/8,未覆盖方法:create、update、delete、detail、importPhone、interaction、inviteToFamily
 - `ContactController`:覆盖 1/8,未覆盖方法:create、update、delete、detail、importPhone、interaction、inviteToFamily
 - `DanReportController`:覆盖 1/8,未覆盖方法:upload、edit、confirm、discard、completeAnalysis、detail、compare
 - `DanReportController`:覆盖 1/8,未覆盖方法:upload、edit、confirm、discard、completeAnalysis、detail、compare
 - `FamilyChallengeController`:覆盖 1/8,未覆盖方法:getHistory、updateProgress、respondChallenge、getTemplates、createChallenge、updateChallenge、deleteChallenge
 - `FamilyChallengeController`:覆盖 1/8,未覆盖方法:getHistory、updateProgress、respondChallenge、getTemplates、createChallenge、updateChallenge、deleteChallenge
 - `GuideTeamController`:覆盖 6/8,未覆盖方法:checkStatus、leaveTeam
 - `GuideTeamController`:覆盖 6/8,未覆盖方法:checkStatus、leaveTeam
-- `SupplyManageController`:覆盖 1/8,未覆盖方法:detail、create、update、delete、addRole、removeRole、adjustTier
+- `SupplyManageController`:覆盖 3/8,未覆盖方法:detail、update、addRole、removeRole、adjustTier
 - `AdminOrgController`:覆盖 1/7,未覆盖方法:create、update、disable、detail、myOrg、userSearch
 - `AdminOrgController`:覆盖 1/7,未覆盖方法:create、update、disable、detail、myOrg、userSearch
-- `AdminProductOrderController`:覆盖 1/7,未覆盖方法:detail、ship、updateExpress、close、approveRefund、rejectRefund
 - `AdminUnlockGateController`:覆盖 2/7,未覆盖方法:save、delete、toggle、resetFamily、getFamilyProgress
 - `AdminUnlockGateController`:覆盖 2/7,未覆盖方法:save、delete、toggle、resetFamily、getFamilyProgress
-- `CartController`:覆盖 1/7,未覆盖方法:add、update、remove、count、comboOffer、replaceCombo
+- `CartController`:覆盖 2/7,未覆盖方法:add、update、remove、comboOffer、replaceCombo
 - `DoaController`:覆盖 1/7,未覆盖方法:createStage、stageDetail、cancelStage、submitPlan、submitReview、weekList
 - `DoaController`:覆盖 1/7,未覆盖方法:createStage、stageDetail、cancelStage、submitPlan、submitReview、weekList
 - `EmotionCheckinController`:覆盖 3/7,未覆盖方法:create、stats、weeklyReport、recognizeEmotion
 - `EmotionCheckinController`:覆盖 3/7,未覆盖方法:create、stats、weeklyReport、recognizeEmotion
 - `GrowthPlanController`:覆盖 1/7,未覆盖方法:createPlan、getChildPlans、getActivePlan、getPlanDetail、updatePlan、reviewPlan
 - `GrowthPlanController`:覆盖 1/7,未覆盖方法:createPlan、getChildPlans、getActivePlan、getPlanDetail、updatePlan、reviewPlan
 - `GuideActivityController`:覆盖 2/7,未覆盖方法:getActivityDetail、createActivity、updateActivity、cancelActivity、deleteActivity
 - `GuideActivityController`:覆盖 2/7,未覆盖方法:getActivityDetail、createActivity、updateActivity、cancelActivity、deleteActivity
+- `ShareController`:覆盖 1/7,未覆盖方法:createShare、recordClick、recordRead、getShareStats、familyFootprint、getQrCode
 - `SupplyTeamController`:覆盖 1/7,未覆盖方法:listCustomers、bindCustomer、getRelation、getInviteCode、getInviteInfo、joinByInviteCode
 - `SupplyTeamController`:覆盖 1/7,未覆盖方法:listCustomers、bindCustomer、getRelation、getInviteCode、getInviteInfo、joinByInviteCode
 - `TianpanController`:覆盖 3/7,未覆盖方法:annualEnergy、dailyFortune、relatedItems、recalibrate
 - `TianpanController`:覆盖 3/7,未覆盖方法:annualEnergy、dailyFortune、relatedItems、recalibrate
+- `AdminCommissionController`:覆盖 1/6,未覆盖方法:withdrawals、updateProfitRate、pendingRefunds、refundSummary、cancelRefund
 - `AdminEnergyConfigController`:覆盖 5/6,未覆盖方法:sourceDelete
 - `AdminEnergyConfigController`:覆盖 5/6,未覆盖方法:sourceDelete
 - `AdminEnergyRuleController`:覆盖 5/6,未覆盖方法:update
 - `AdminEnergyRuleController`:覆盖 5/6,未覆盖方法:update
-- `AdminFoodController`:覆盖 1/6,未覆盖方法:create、update、delete、detail、saveMonths
+- `AdminFoodController`:覆盖 2/6,未覆盖方法:update、delete、detail、saveMonths
 - `AdminGuidePopupController`:覆盖 2/6,未覆盖方法:create、update、delete、stats
 - `AdminGuidePopupController`:覆盖 2/6,未覆盖方法:create、update、delete、stats
 - `AdminHomeBannerController`:覆盖 1/6,未覆盖方法:save、delete、batchDelete、toggle、updateSort
 - `AdminHomeBannerController`:覆盖 1/6,未覆盖方法:save、delete、batchDelete、toggle、updateSort
 - `AdminNoticeController`:覆盖 1/6,未覆盖方法:all、create、update、delete、pin
 - `AdminNoticeController`:覆盖 1/6,未覆盖方法:all、create、update、delete、pin
@@ -162,6 +167,7 @@
 - `AdminSpecialPriceController`:覆盖 5/6,未覆盖方法:update
 - `AdminSpecialPriceController`:覆盖 5/6,未覆盖方法:update
 - `AdminSystemPromptController`:覆盖 1/6,未覆盖方法:save、reset、delete、listVersions、rollback
 - `AdminSystemPromptController`:覆盖 1/6,未覆盖方法:save、reset、delete、listVersions、rollback
 - `ButlerController`:覆盖 1/6,未覆盖方法:apply、getProfile、updateProfile、getServiceRecords、getCommissions
 - `ButlerController`:覆盖 1/6,未覆盖方法:apply、getProfile、updateProfile、getServiceRecords、getCommissions
+- `ContactMatchController`:覆盖 1/6,未覆盖方法:accept、reject、received、sent、matched
 - `ContentSectionController`:覆盖 1/6,未覆盖方法:getVisibleSections、getDetail、create、update、delete
 - `ContentSectionController`:覆盖 1/6,未覆盖方法:getVisibleSections、getDetail、create、update、delete
 - `FamilyEarningsController`:覆盖 3/6,未覆盖方法:familySummary、memberContributions、records
 - `FamilyEarningsController`:覆盖 3/6,未覆盖方法:familySummary、memberContributions、records
 - `FamilyPlatformBalanceController`:覆盖 1/6,未覆盖方法:getLogs、exchangeCoupon、adminBalance、adminLogs、adminAdjust
 - `FamilyPlatformBalanceController`:覆盖 1/6,未覆盖方法:getLogs、exchangeCoupon、adminBalance、adminLogs、adminAdjust
@@ -172,19 +178,20 @@
 - `PackageTemplateController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
 - `PackageTemplateController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
 - `PromotionMaterialController`:覆盖 1/6,未覆盖方法:detail、byScenario、create、update、delete
 - `PromotionMaterialController`:覆盖 1/6,未覆盖方法:detail、byScenario、create、update、delete
 - `ReportTemplateController`:覆盖 2/6,未覆盖方法:get、save、delete、toggle
 - `ReportTemplateController`:覆盖 2/6,未覆盖方法:get、save、delete、toggle
-- `ServiceContentController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
+- `ServiceContentController`:覆盖 2/6,未覆盖方法:Operation、Operation、Operation、Operation
 - `ServiceTypeController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
 - `ServiceTypeController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
-- `SupplierProductController`:覆盖 1/6,未覆盖方法:create、update、detail、delete、shelve
+- `SupplierProductController`:覆盖 2/6,未覆盖方法:update、detail、delete、shelve
 - `SurveyController`:覆盖 2/6,未覆盖方法:activeTemplates、confirmQuestions、submit、history
 - `SurveyController`:覆盖 2/6,未覆盖方法:activeTemplates、confirmQuestions、submit、history
 - `UserAddressController`:覆盖 1/6,未覆盖方法:get、create、update、delete、setDefault
 - `UserAddressController`:覆盖 1/6,未覆盖方法:get、create、update、delete、setDefault
 - `ActivityOrderController`:覆盖 1/5,未覆盖方法:create、pay、handlePaymentSuccess、notify
 - `ActivityOrderController`:覆盖 1/5,未覆盖方法:create、pay、handlePaymentSuccess、notify
 - `AdminCommissionConfigController`:覆盖 2/5,未覆盖方法:getConfig、settle、refund
 - `AdminCommissionConfigController`:覆盖 2/5,未覆盖方法:getConfig、settle、refund
 - `AdminDiscountController`:覆盖 1/5,未覆盖方法:create、update、toggle、delete
 - `AdminDiscountController`:覆盖 1/5,未覆盖方法:create、update、toggle、delete
-- `AdminOrgStatsController`:覆盖 2/5,未覆盖方法:families、active、revenue
+- `AdminOrgStatsController`:覆盖 3/5,未覆盖方法:families、revenue
 - `AdminPlannerCertificationController`:覆盖 1/5,未覆盖方法:syncHours、batchSyncHours、initByUser、backfill
 - `AdminPlannerCertificationController`:覆盖 1/5,未覆盖方法:syncHours、batchSyncHours、initByUser、backfill
 - `DailyCheckinController`:覆盖 4/5,未覆盖方法:detail
 - `DailyCheckinController`:覆盖 4/5,未覆盖方法:detail
+- `DietRecommendationController`:覆盖 1/5,未覆盖方法:getTodayRecommendation、updateRecommendation、regenerateRecommendation、completeRecommendation
 - `DimensionConfigController`:覆盖 1/5,未覆盖方法:get、save、delete、tree
 - `DimensionConfigController`:覆盖 1/5,未覆盖方法:get、save、delete、tree
-- `EcomSupplierController`:覆盖 1/5,未覆盖方法:all、save、update、delete
+- `FatGoalController`:覆盖 1/5,未覆盖方法:create、update、complete、abandon
 - `GameRecordController`:覆盖 1/5,未覆盖方法:getHistory、getBestScores、getStats、getLeaderboard
 - `GameRecordController`:覆盖 1/5,未覆盖方法:getHistory、getBestScores、getStats、getLeaderboard
 - `HealthCircleController`:覆盖 1/5,未覆盖方法:create、join、leave、ranking
 - `HealthCircleController`:覆盖 1/5,未覆盖方法:create、join、leave、ranking
 - `HealthDimensionController`:覆盖 4/5,未覆盖方法:radarData
 - `HealthDimensionController`:覆盖 4/5,未覆盖方法:radarData
@@ -199,29 +206,26 @@
 - `ProductSkuController`:覆盖 1/5,未覆盖方法:get、create、update、delete
 - `ProductSkuController`:覆盖 1/5,未覆盖方法:get、create、update、delete
 - `RecommendationRuleAdminController`:覆盖 1/5,未覆盖方法:create、update、delete、batchEnable
 - `RecommendationRuleAdminController`:覆盖 1/5,未覆盖方法:create、update、delete、batchEnable
 - `ReportMemberPermissionController`:覆盖 1/5,未覆盖方法:listByMember、grant、revoke、visibleMembers
 - `ReportMemberPermissionController`:覆盖 1/5,未覆盖方法:listByMember、grant、revoke、visibleMembers
-- `RewardWishlistController`:覆盖 1/5,未覆盖方法:create、getMyWishlist、exchange、approve
+- `RewardWishlistController`:覆盖 2/5,未覆盖方法:create、exchange、approve
 - `SupplySettlementController`:覆盖 1/5,未覆盖方法:detail、detailItems、create、confirm
 - `SupplySettlementController`:覆盖 1/5,未覆盖方法:detail、detailItems、create、confirm
 - `TeacherFamilyBindingController`:覆盖 1/5,未覆盖方法:approve、reject、myRequests、cancel
 - `TeacherFamilyBindingController`:覆盖 1/5,未覆盖方法:approve、reject、myRequests、cancel
-- `TeacherMessageController`:覆盖 1/5,未覆盖方法:sendMessage、replyMessage、getUnreadCount、getMyMessages
 - `XiaomiHealthController`:覆盖 1/5,未覆盖方法:authUrl、callback、sync、revoke
 - `XiaomiHealthController`:覆盖 1/5,未覆盖方法:authUrl、callback、sync、revoke
 - `AdminActivityCheckinController`:覆盖 1/4,未覆盖方法:export、add、review
 - `AdminActivityCheckinController`:覆盖 1/4,未覆盖方法:export、add、review
-- `AdminAfterSalesController`:覆盖 1/4,未覆盖方法:detail、review、complete
 - `AdminCfEarnRuleController`:覆盖 1/4,未覆盖方法:save、toggle、history
 - `AdminCfEarnRuleController`:覆盖 1/4,未覆盖方法:save、toggle、history
 - `AdminOrgMemberController`:覆盖 1/4,未覆盖方法:addMember、removeMember、changeType
 - `AdminOrgMemberController`:覆盖 1/4,未覆盖方法:addMember、removeMember、changeType
 - `AdminPlannerCertCategoryController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminPlannerCertCategoryController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminPlannerCourseController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminPlannerCourseController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminPlannerOfflineCourseController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminPlannerOfflineCourseController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminProductPpointController`:覆盖 1/4,未覆盖方法:save、delete、byProduct
 - `AdminProductPpointController`:覆盖 1/4,未覆盖方法:save、delete、byProduct
-- `AdminRecipeController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `AdminSettlementController`:覆盖 1/4,未覆盖方法:detail、confirm、stats
 - `AdminSettlementController`:覆盖 1/4,未覆盖方法:detail、confirm、stats
 - `AdminSubscriptionController`:覆盖 1/4,未覆盖方法:cancelSubscription、activateSubscription、getBenefitConfig
 - `AdminSubscriptionController`:覆盖 1/4,未覆盖方法:cancelSubscription、activateSubscription、getBenefitConfig
-- `AdminSupplierController`:覆盖 1/4,未覆盖方法:save、update、delete
 - `AdminSurveyController`:覆盖 1/4,未覆盖方法:save、delete、aiGenerate
 - `AdminSurveyController`:覆盖 1/4,未覆盖方法:save、delete、aiGenerate
 - `AdminUnifiedKnowledgeController`:覆盖 2/4,未覆盖方法:update、reset
 - `AdminUnifiedKnowledgeController`:覆盖 2/4,未覆盖方法:update、reset
 - `BaziConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `BaziConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `BloodTypeConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `BloodTypeConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
-- `ConsentController`:覆盖 2/4,未覆盖方法:withdrawConsent、checkConsent
+- `ConsentController`:覆盖 3/4,未覆盖方法:checkConsent
 - `ConsigneeController`:覆盖 1/4,未覆盖方法:detail、save、delete
 - `ConsigneeController`:覆盖 1/4,未覆盖方法:detail、save、delete
+- `EmotionAlertController`:覆盖 1/4,未覆盖方法:checkinAlerts、adminList、resolve
 - `FamilyMetricAggConfigController`:覆盖 1/4,未覆盖方法:save、delete、updateStatus
 - `FamilyMetricAggConfigController`:覆盖 1/4,未覆盖方法:save、delete、updateStatus
 - `FatDietController`:覆盖 1/4,未覆盖方法:create、delete、caloriesSummary
 - `FatDietController`:覆盖 1/4,未覆盖方法:create、delete、caloriesSummary
 - `FatWeightController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `FatWeightController`:覆盖 1/4,未覆盖方法:create、update、delete
@@ -232,8 +236,9 @@
 - `NumSoulDetailConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `NumSoulDetailConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `OctopusController`:覆盖 1/4,未覆盖方法:tentacles、addHelpLog、deleteHelpLog
 - `OctopusController`:覆盖 1/4,未覆盖方法:tentacles、addHelpLog、deleteHelpLog
 - `ParentAssessmentController`:覆盖 2/4,未覆盖方法:createAssessment、completeAssessment
 - `ParentAssessmentController`:覆盖 2/4,未覆盖方法:createAssessment、completeAssessment
+- `PlanReviewController`:覆盖 2/4,未覆盖方法:reviewPlan、planDetail
 - `ZodiacConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
 - `ZodiacConfigController`:覆盖 1/4,未覆盖方法:create、update、delete
-- `ActivityFeedbackController`:覆盖 1/3,未覆盖方法:submit、my
+- `ActivityFeedbackController`:覆盖 2/3,未覆盖方法:submit
 - `ActivityMaterialController`:覆盖 1/3,未覆盖方法:upload、delete
 - `ActivityMaterialController`:覆盖 1/3,未覆盖方法:upload、delete
 - `AdminCfRateTierController`:覆盖 1/3,未覆盖方法:save、delete
 - `AdminCfRateTierController`:覆盖 1/3,未覆盖方法:save、delete
 - `AdminCfValueController`:覆盖 1/3,未覆盖方法:getLogs、allBalances
 - `AdminCfValueController`:覆盖 1/3,未覆盖方法:getLogs、allBalances
@@ -261,7 +266,6 @@
 - `InteractionLogController`:覆盖 1/3,未覆盖方法:addInteraction、getInteractionTypes
 - `InteractionLogController`:覆盖 1/3,未覆盖方法:addInteraction、getInteractionTypes
 - `KnowledgeTagController`:覆盖 1/3,未覆盖方法:save、delete
 - `KnowledgeTagController`:覆盖 1/3,未覆盖方法:save、delete
 - `ManualDimensionScoreController`:覆盖 2/3,未覆盖方法:history
 - `ManualDimensionScoreController`:覆盖 2/3,未覆盖方法:history
-- `ReportParseAdminController`:覆盖 1/3,未覆盖方法:retry、backfillFood
 - `ReportParserController`:覆盖 1/3,未覆盖方法:uploadAndParse、detect
 - `ReportParserController`:覆盖 1/3,未覆盖方法:uploadAndParse、detect
 - `ReportSummaryController`:覆盖 1/3,未覆盖方法:detail、download
 - `ReportSummaryController`:覆盖 1/3,未覆盖方法:detail、download
 - `ReportSurveyController`:覆盖 1/3,未覆盖方法:createSurvey、submitSurvey
 - `ReportSurveyController`:覆盖 1/3,未覆盖方法:createSurvey、submitSurvey
@@ -277,21 +281,22 @@
 - `AdminProfileController`:覆盖 1/2,未覆盖方法:getProfile
 - `AdminProfileController`:覆盖 1/2,未覆盖方法:getProfile
 - `AdminVendorController`:覆盖 1/2,未覆盖方法:review
 - `AdminVendorController`:覆盖 1/2,未覆盖方法:review
 - `BasicQuotaController`:覆盖 1/2,未覆盖方法:getAllQuotaStatus
 - `BasicQuotaController`:覆盖 1/2,未覆盖方法:getAllQuotaStatus
-- `CfTransferController`:覆盖 1/2,未覆盖方法:send
 - `CircleChallengeController`:覆盖 1/2,未覆盖方法:getHistory
 - `CircleChallengeController`:覆盖 1/2,未覆盖方法:getHistory
 - `GuideConfigController`:覆盖 1/2,未覆盖方法:ack
 - `GuideConfigController`:覆盖 1/2,未覆盖方法:ack
 - `HealthAlertController`:覆盖 1/2,未覆盖方法:dismiss
 - `HealthAlertController`:覆盖 1/2,未覆盖方法:dismiss
 - `HealthMeditationController`:覆盖 1/2,未覆盖方法:create
 - `HealthMeditationController`:覆盖 1/2,未覆盖方法:create
 - `IndicatorMappingAdminController`:覆盖 1/2,未覆盖方法:importSeeds
 - `IndicatorMappingAdminController`:覆盖 1/2,未覆盖方法:importSeeds
 - `InviteMilestoneController`:覆盖 1/2,未覆盖方法:claim
 - `InviteMilestoneController`:覆盖 1/2,未覆盖方法:claim
+- `MindAssessmentController`:覆盖 1/2,未覆盖方法:create
 - `NutritionistController`:覆盖 1/2,未覆盖方法:apply
 - `NutritionistController`:覆盖 1/2,未覆盖方法:apply
+- `PackageLogisticsController`:覆盖 1/2,未覆盖方法:update
 - `ProblemSurveyController`:覆盖 1/2,未覆盖方法:submit
 - `ProblemSurveyController`:覆盖 1/2,未覆盖方法:submit
 - `ProductCategoryController`:覆盖 1/2,未覆盖方法:tree
 - `ProductCategoryController`:覆盖 1/2,未覆盖方法:tree
+- `ProfileController`:覆盖 1/2,未覆盖方法:getHistory
 - `PromotionCommissionController`:覆盖 1/2,未覆盖方法:getFamilyTotal
 - `PromotionCommissionController`:覆盖 1/2,未覆盖方法:getFamilyTotal
 - `RecommendController`:覆盖 1/2,未覆盖方法:track
 - `RecommendController`:覆盖 1/2,未覆盖方法:track
 - `ReportSummaryAdminController`:覆盖 1/2,未覆盖方法:sync
 - `ReportSummaryAdminController`:覆盖 1/2,未覆盖方法:sync
 - `SystemPromptPublicController`:覆盖 1/2,未覆盖方法:get
 - `SystemPromptPublicController`:覆盖 1/2,未覆盖方法:get
-- `UserNotificationController`:覆盖 1/2,未覆盖方法:read
 
 
 ## 四、测试清单(格式化已有测试)
 ## 四、测试清单(格式化已有测试)
 
 
@@ -300,10 +305,14 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AuthControllerTest.java` | com | 39 | 0 | 14 | AuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AuthControllerTest.java` | com | 39 | 0 | 14 | AuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DanReportParseServiceTest.java` | com | 38 | 2 | 0 | DanReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DanReportParseServiceTest.java` | com | 38 | 2 | 0 | DanReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | com | 38 | 22 | 14 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | com | 38 | 22 | 14 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminReportParserManageContractTest.java` | com | 37 | 14 | 19 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfPathwayEarnServiceTest.java` | com | 32 | 16 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfPathwayEarnServiceTest.java` | com | 32 | 16 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/WishControllerTest.java` | com | 29 | 4 | 11 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/WishControllerTest.java` | com | 29 | 4 | 11 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentQuotaAppointmentContractTest.java` | com | 27 | 9 | 0 | AssessmentQuotaController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentQuotaAppointmentContractTest.java` | com | 27 | 9 | 0 | AssessmentQuotaController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | com | 25 | 0 | 0 | CfBalanceController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | com | 25 | 0 | 0 | CfBalanceController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachProactiveContractTest.java` | com | 25 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminArticleManageContractTest.java` | com | 24 | 7 | 6 | AdminArticleController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminOrderManualContractTest.java` | com | 24 | 12 | 11 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` | com | 24 | 0 | 0 | TeamStarController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` | com | 24 | 0 | 0 | TeamStarController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceTest.java` | com | 23 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceTest.java` | com | 23 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java` | com | 22 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java` | com | 22 | 0 | 0 | — | — |
@@ -316,30 +325,39 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` | com | 20 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` | com | 20 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` | com | 20 | 3 | 7 | ProductOrderController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` | com | 20 | 3 | 7 | ProductOrderController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | com | 20 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | com | 20 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherMessagePushContractTest.java` | com | 20 | 10 | 5 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` | com | 20 | 0 | 0 | TeamProfitAdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` | com | 20 | 0 | 0 | TeamProfitAdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | com | 19 | 4 | 4 | PlanReviewController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | com | 19 | 4 | 4 | PlanReviewController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/ScG06JwtGuardTest.java` | com | 19 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/ScG06JwtGuardTest.java` | com | 19 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierManageAdminContractTest.java` | com | 19 | 2 | 12 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/AIChatControllerGateTest.java` | com | 18 | 15 | 6 | AIChatController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/AIChatControllerGateTest.java` | com | 18 | 15 | 6 | AIChatController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | com | 18 | 17 | 10 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | com | 18 | 17 | 10 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/SupplySystemServiceTest.java` | com | 18 | 0 | 0 | SupplySystemController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/SupplySystemServiceTest.java` | com | 18 | 0 | 0 | SupplySystemController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AIChatControllerTest.java` | com | 17 | 17 | 3 | AIChatController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AIChatControllerTest.java` | com | 17 | 17 | 3 | AIChatController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` | com | 17 | 17 | 0 | DietRecommendationController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` | com | 17 | 17 | 0 | DietRecommendationController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionConfigAdminContractTest.java` | com | 17 | 6 | 3 | DimensionConfigController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideBindingAccessContractTest.java` | com | 17 | 4 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideBindingAccessContractTest.java` | com | 17 | 4 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceTest.java` | com | 17 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceTest.java` | com | 17 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/reward/RewardEstimateControllerTest.java` | com | 17 | 0 | 1 | RewardEstimateController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/reward/RewardEstimateControllerTest.java` | com | 17 | 0 | 1 | RewardEstimateController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerReviewTest.java` | com | 17 | 1 | 4 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerReviewTest.java` | com | 17 | 1 | 4 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AICoachConsultContractTest.java` | com | 16 | 17 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ActivityControllerTest.java` | com | 16 | 9 | 6 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ActivityControllerTest.java` | com | 16 | 9 | 6 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` | com | 16 | 15 | 3 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` | com | 16 | 15 | 3 | AdminController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSupplierManageContractTest.java` | com | 16 | 3 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfGrowthPathwayEarnServiceTest.java` | com | 16 | 6 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfGrowthPathwayEarnServiceTest.java` | com | 16 | 6 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildMindCaptureContractTest.java` | com | 16 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthDataSourceBridgeContractTest.java` | com | 16 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthDataSourceBridgeContractTest.java` | com | 16 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerUploadTest.java` | com | 16 | 0 | 0 | HealthReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerUploadTest.java` | com | 16 | 0 | 0 | HealthReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductControllerTest.java` | com | 16 | 8 | 6 | ProductController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductControllerTest.java` | com | 16 | 8 | 6 | ProductController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherLoginSwitchContractTest.java` | com | 16 | 0 | 1 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` | com | 15 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` | com | 15 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginContractTest.java` | com | 15 | 6 | 1 | AdminAuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginContractTest.java` | com | 15 | 6 | 1 | AdminAuthController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminContentSecurityContractTest.java` | com | 15 | 15 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyFoodOverviewServiceTest.java` | com | 15 | 11 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyFoodOverviewServiceTest.java` | com | 15 | 11 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | com | 15 | 5 | 3 | FiveDimensionSelfCheckController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | com | 15 | 5 | 3 | FiveDimensionSelfCheckController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/HealthDimensionControllerTest.java` | com | 15 | 3 | 4 | HealthDimensionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/HealthDimensionControllerTest.java` | com | 15 | 3 | 4 | HealthDimensionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceReviewTest.java` | com | 15 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceReviewTest.java` | com | 15 | 0 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherPlanActivateContractTest.java` | com | 15 | 1 | 0 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/WishFlowScP13ContractTest.java` | com | 15 | 0 | 0 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/WishFlowScP13ContractTest.java` | com | 15 | 0 | 0 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ArticleWorkflowTest.java` | com | 14 | 0 | 0 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ArticleWorkflowTest.java` | com | 14 | 0 | 0 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | com | 14 | 7 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | com | 14 | 7 | 0 | — | — |
@@ -348,8 +366,12 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/NutritionDeficiencyServiceTest.java` | com | 14 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/NutritionDeficiencyServiceTest.java` | com | 14 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | com | 14 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | com | 14 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | com | 14 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | com | 14 | 2 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationScT05ContractTest.java` | com | 14 | 1 | 1 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | com | 14 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | com | 14 | 0 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherAppointmentGuardContractTest.java` | com | 14 | 0 | 0 | TeacherController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherReportProxyContractTest.java` | com | 14 | 3 | 0 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarDigestContractTest.java` | com | 14 | 0 | 0 | TeamStarController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarDigestContractTest.java` | com | 14 | 0 | 0 | TeamStarController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminKnowledgeBaseManageContractTest.java` | com | 13 | 0 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionAdminControllerTest.java` | com | 13 | 0 | 7 | DimensionAdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionAdminControllerTest.java` | com | 13 | 0 | 7 | DimensionAdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | com | 13 | 1 | 1 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | com | 13 | 1 | 1 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageServiceTest.java` | com | 13 | 0 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageServiceTest.java` | com | 13 | 0 | 0 | GuideController | — |
@@ -357,12 +379,17 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ManualDimensionScoreContractTest.java` | com | 13 | 6 | 2 | ManualDimensionScoreController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ManualDimensionScoreContractTest.java` | com | 13 | 6 | 2 | ManualDimensionScoreController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | com | 13 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | com | 13 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG03LoginMethodContractTest.java` | com | 13 | 1 | 4 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG03LoginMethodContractTest.java` | com | 13 | 1 | 4 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierNutritionSupplyContractTest.java` | com | 13 | 1 | 4 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTemplatePackageContractTest.java` | com | 13 | 4 | 11 | TaskTemplatePackageController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTemplatePackageContractTest.java` | com | 13 | 4 | 11 | TaskTemplatePackageController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherMindRecordContractTest.java` | com | 13 | 0 | 0 | TeacherController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherPlanCreateContractTest.java` | com | 13 | 3 | 0 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMultiplierContractTest.java` | com | 13 | 0 | 0 | TeamStarController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMultiplierContractTest.java` | com | 13 | 0 | 0 | TeamStarController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | com | 12 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | com | 12 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminArticleAuditContractTest.java` | com | 12 | 3 | 0 | AdminArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminArticleAuditContractTest.java` | com | 12 | 3 | 0 | AdminArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | com | 12 | 0 | 0 | AfterSalesController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | com | 12 | 0 | 0 | AfterSalesController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | com | 12 | 2 | 0 | CfCommissionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | com | 12 | 2 | 0 | CfCommissionController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAiChatContractTest.java` | com | 12 | 1 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildWishManageContractTest.java` | com | 12 | 3 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | com | 12 | 7 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | com | 12 | 7 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` | com | 12 | 16 | 0 | DietRecommendationController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` | com | 12 | 16 | 0 | DietRecommendationController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinValidationGateTest.java` | com | 12 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinValidationGateTest.java` | com | 12 | 0 | 0 | FamilyController | — |
@@ -374,11 +401,16 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTimelineServiceTest.java` | com | 12 | 24 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTimelineServiceTest.java` | com | 12 | 24 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceAiGateTest.java` | com | 12 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceAiGateTest.java` | com | 12 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/PaymentControllerTest.java` | com | 12 | 17 | 5 | PaymentController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/PaymentControllerTest.java` | com | 12 | 17 | 5 | PaymentController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierInventoryManageContractTest.java` | com | 12 | 4 | 2 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthWechatScanTest.java` | com | 11 | 11 | 2 | AdminAuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthWechatScanTest.java` | com | 11 | 11 | 2 | AdminAuthController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminBadgeManageContractTest.java` | com | 11 | 5 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleControllerTest.java` | com | 11 | 7 | 4 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleControllerTest.java` | com | 11 | 7 | 4 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionComplianceGateTest.java` | com | 11 | 0 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionComplianceGateTest.java` | com | 11 | 0 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfReferralServiceSalesTierTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfReferralServiceSalesTierTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfSpendDispatchServiceTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfSpendDispatchServiceTest.java` | com | 11 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAuthLoginContractTest.java` | com | 11 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildBadgeViewContractTest.java` | com | 11 | 11 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildShopPointsExchangeContractTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CouponUseScP57ScP75ContractTest.java` | com | 11 | 0 | 0 | CouponController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CouponUseScP57ScP75ContractTest.java` | com | 11 | 0 | 0 | CouponController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanAssessmentExecutionContractTest.java` | com | 11 | 0 | 0 | DanAssessmentController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanAssessmentExecutionContractTest.java` | com | 11 | 0 | 0 | DanAssessmentController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanReportUploadContractTest.java` | com | 11 | 8 | 0 | DanReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanReportUploadContractTest.java` | com | 11 | 8 | 0 | DanReportController | — |
@@ -387,6 +419,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/config/FamilyAccessInterceptorTest.java` | com | 11 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/FamilyAccessInterceptorTest.java` | com | 11 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbVersionSenseContractTest.java` | com | 11 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbVersionSenseContractTest.java` | com | 11 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/GuideConfigServiceTest.java` | com | 11 | 13 | 0 | GuideConfigController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/GuideConfigServiceTest.java` | com | 11 | 13 | 0 | GuideConfigController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/MindModelManageContractTest.java` | com | 11 | 0 | 0 | MindController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/PdfParseServiceTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/PdfParseServiceTest.java` | com | 11 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportShareGrantContractTest.java` | com | 11 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportShareGrantContractTest.java` | com | 11 | 2 | 0 | — | — |
@@ -397,9 +430,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` | com | 11 | 7 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` | com | 11 | 7 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityAdminServiceTest.java` | com | 10 | 10 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityAdminServiceTest.java` | com | 10 | 10 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | com | 10 | 4 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | com | 10 | 4 | 0 | ActivityController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminAuditLogContractTest.java` | com | 10 | 0 | 0 | AdminAuditController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` | com | 10 | 1 | 3 | AdminAuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` | com | 10 | 1 | 3 | AdminAuthController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminDataMigrationContractTest.java` | com | 10 | 2 | 6 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/ArticleTagFilterContractTest.java` | com | 10 | 1 | 2 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/ArticleTagFilterContractTest.java` | com | 10 | 1 | 2 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AuthWechatLoginContractTest.java` | com | 10 | 0 | 1 | AuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AuthWechatLoginContractTest.java` | com | 10 | 0 | 1 | AuthController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyGainContractTest.java` | com | 10 | 1 | 1 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildFeedbackSubmitContractTest.java` | com | 10 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | com | 10 | 3 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | com | 10 | 3 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionalPathogenLowSideRuleTest.java` | com | 10 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionalPathogenLowSideRuleTest.java` | com | 10 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietFoodHealthAdjustContractTest.java` | com | 10 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietFoodHealthAdjustContractTest.java` | com | 10 | 2 | 0 | — | — |
@@ -420,6 +457,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanListTest.java` | com | 10 | 0 | 0 | TrainingPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanListTest.java` | com | 10 | 0 | 0 | TrainingPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` | com | 9 | 0 | 1 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` | com | 9 | 0 | 1 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/common/AdminRolesTest.java` | com | 9 | 0 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/common/AdminRolesTest.java` | com | 9 | 0 | 0 | AdminController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminUserGovernContractTest.java` | com | 9 | 3 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/BadgeControllerGetMemberBadgesTest.java` | com | 9 | 1 | 0 | BadgeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/BadgeControllerGetMemberBadgesTest.java` | com | 9 | 1 | 0 | BadgeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/ButlerControllerGateTest.java` | com | 9 | 4 | 6 | ButlerController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/ButlerControllerGateTest.java` | com | 9 | 4 | 6 | ButlerController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryTreeTest.java` | com | 9 | 6 | 0 | DimensionRegistryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryTreeTest.java` | com | 9 | 6 | 0 | DimensionRegistryController | — |
@@ -430,12 +468,16 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTrendServiceTest.java` | com | 9 | 17 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTrendServiceTest.java` | com | 9 | 17 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/KnowledgeBaseBackfillTest.java` | com | 9 | 6 | 0 | KnowledgeBaseController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/KnowledgeBaseBackfillTest.java` | com | 9 | 6 | 0 | KnowledgeBaseController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | com | 9 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | com | 9 | 0 | 0 | MembershipController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` | com | 9 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/PlannerBindInviteFlowTest.java` | com | 9 | 15 | 5 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/PlannerBindInviteFlowTest.java` | com | 9 | 15 | 5 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/PlatformPointsServiceTest.java` | com | 9 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/PlatformPointsServiceTest.java` | com | 9 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceBatchEstimateTest.java` | com | 9 | 0 | 0 | RewardController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceBatchEstimateTest.java` | com | 9 | 0 | 0 | RewardController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG04InviteRegisterContractTest.java` | com | 9 | 1 | 3 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG04InviteRegisterContractTest.java` | com | 9 | 1 | 3 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | com | 9 | 0 | 0 | SpecialPriceController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | com | 9 | 0 | 0 | SpecialPriceController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierActivityAttendContractTest.java` | com | 9 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/SurveyHealthReviewContractTest.java` | com | 9 | 1 | 1 | SurveyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/SurveyHealthReviewContractTest.java` | com | 9 | 1 | 1 | SurveyController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCheckinChildContractTest.java` | com | 9 | 2 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherDataIsolationScT13ContractTest.java` | com | 9 | 1 | 1 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` | com | 9 | 0 | 0 | VendorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` | com | 9 | 0 | 0 | VendorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` | com | 9 | 0 | 0 | VendorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` | com | 9 | 0 | 0 | VendorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | com | 8 | 3 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | com | 8 | 3 | 0 | ActivityController | — |
@@ -468,7 +510,10 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScP11ContractTest.java` | com | 8 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScP11ContractTest.java` | com | 8 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitPipelineContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitPipelineContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java` | com | 8 | 0 | 0 | TrainingPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java` | com | 8 | 0 | 0 | TrainingPlanController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSystemMonitorContractTest.java` | com | 7 | 0 | 0 | AdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/AttributionStage1FoundationTest.java` | com | 7 | 11 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/AttributionStage1FoundationTest.java` | com | 7 | 11 | 0 | AttributionController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGameReportScoreContractTest.java` | com | 7 | 2 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildNotificationReceiveContractTest.java` | com | 7 | 0 | 1 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryMapContractTest.java` | com | 7 | 0 | 0 | DimensionRegistryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryMapContractTest.java` | com | 7 | 0 | 0 | DimensionRegistryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | com | 7 | 1 | 4 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | com | 7 | 1 | 4 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyOverviewContractTest.java` | com | 7 | 10 | 1 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyOverviewContractTest.java` | com | 7 | 10 | 1 | EnergyController | — |
@@ -490,6 +535,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerCreateTaskTest.java` | com | 7 | 0 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerCreateTaskTest.java` | com | 7 | 0 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerGetTaskHistoryTest.java` | com | 7 | 4 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerGetTaskHistoryTest.java` | com | 7 | 4 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTaskCreateContractTest.java` | com | 7 | 0 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTaskCreateContractTest.java` | com | 7 | 0 | 1 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherFamilyOverviewContractTest.java` | com | 7 | 0 | 2 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/TeamInvitationCreateContractTest.java` | com | 7 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/TeamInvitationCreateContractTest.java` | com | 7 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitHookContractTest.java` | com | 7 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitHookContractTest.java` | com | 7 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | com | 6 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | com | 6 | 0 | 0 | ActivityController | — |
@@ -535,7 +581,10 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` | com | 6 | 10 | 2 | StatsController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` | com | 6 | 10 | 2 | StatsController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierAfterSalesHandleContractTest.java` | com | 6 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierExportComplianceContractTest.java` | com | 6 | 6 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScT06ContractTest.java` | com | 6 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScT06ContractTest.java` | com | 6 | 0 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherDimensionScoreContractTest.java` | com | 6 | 5 | 0 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamAwardRecordContractRedTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamAwardRecordContractRedTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitSchemaContractRedTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitSchemaContractRedTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamShareRecordEightShareContractRedTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamShareRecordEightShareContractRedTest.java` | com | 6 | 0 | 0 | — | — |
@@ -543,12 +592,16 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/util/UserUtilTest.java` | com | 6 | 0 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/util/UserUtilTest.java` | com | 6 | 0 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/WithdrawalServiceTest.java` | com | 6 | 0 | 0 | WithdrawalController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/WithdrawalServiceTest.java` | com | 6 | 0 | 0 | WithdrawalController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | com | 5 | 1 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | com | 5 | 1 | 0 | ActivityController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminActivityConfigContractTest.java` | com | 5 | 0 | 1 | AdminActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | com | 5 | 0 | 1 | AdminCommissionConfigController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | com | 5 | 0 | 1 | AdminCommissionConfigController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` | com | 5 | 3 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` | com | 5 | 3 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | com | 5 | 0 | 0 | CartController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | com | 5 | 0 | 0 | CartController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerWiringTest.java` | com | 5 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerWiringTest.java` | com | 5 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildDietViewMenuContractTest.java` | com | 5 | 10 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/ChildGrowthArchiveContractTest.java` | com | 5 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | com | 5 | 0 | 0 | CommissionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | com | 5 | 0 | 0 | CommissionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionEnergySyncServiceTest.java` | com | 5 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionEnergySyncServiceTest.java` | com | 5 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyAutoCreateForPurchaseContractTest.java` | com | 5 | 7 | 4 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | com | 5 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | com | 5 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` | com | 5 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` | com | 5 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | com | 5 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | com | 5 | 0 | 0 | FamilyController | — |
@@ -556,6 +609,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GlobalSearchScP82ContractTest.java` | com | 5 | 12 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GlobalSearchScP82ContractTest.java` | com | 5 | 12 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/GrowthPublicEndpointMappingTest.java` | com | 5 | 0 | 0 | GrowthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/GrowthPublicEndpointMappingTest.java` | com | 5 | 0 | 0 | GrowthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheVersionSplitContractTest.java` | com | 5 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheVersionSplitContractTest.java` | com | 5 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyTaskReviewContractTest.java` | com | 5 | 2 | 2 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanLazyBackfillTest.java` | com | 5 | 0 | 0 | HealthPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanLazyBackfillTest.java` | com | 5 | 0 | 0 | HealthPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerCreateReportTest.java` | com | 5 | 2 | 0 | HealthReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerCreateReportTest.java` | com | 5 | 2 | 0 | HealthReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` | com | 5 | 7 | 0 | HealthReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` | com | 5 | 7 | 0 | HealthReportController | — |
@@ -592,6 +646,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorMappingServiceTest.java` | com | 4 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorMappingServiceTest.java` | com | 4 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorWechatLoginTest.java` | com | 4 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorWechatLoginTest.java` | com | 4 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/LangGraphExitHangContractTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/LangGraphExitHangContractTest.java` | com | 4 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` | com | 4 | 13 | 1 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/PointsExchangeServiceTest.java` | com | 4 | 0 | 0 | PointsExchangeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/PointsExchangeServiceTest.java` | com | 4 | 0 | 0 | PointsExchangeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` | com | 4 | 5 | 0 | PurchaseController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` | com | 4 | 5 | 0 | PurchaseController | — |
@@ -600,6 +655,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | com | 4 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | com | 4 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` | com | 4 | 3 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` | com | 4 | 3 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | com | 4 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | com | 4 | 0 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeacherAssessmentRecordContractTest.java` | com | 4 | 0 | 0 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TeacherLoginTest.java` | com | 4 | 0 | 0 | TeacherController | skip×1、⚠部分 |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TeacherLoginTest.java` | com | 4 | 0 | 0 | TeacherController | skip×1、⚠部分 |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` | com | 4 | 1 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` | com | 4 | 1 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | com | 4 | 0 | 0 | — | — |
@@ -614,6 +670,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleCategoryControllerTest.java` | com | 3 | 0 | 1 | ArticleCategoryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleCategoryControllerTest.java` | com | 3 | 0 | 1 | ArticleCategoryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionSurveyRoutingTest.java` | com | 3 | 5 | 1 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionSurveyRoutingTest.java` | com | 3 | 5 | 1 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerMigrationServiceTest.java` | com | 3 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerMigrationServiceTest.java` | com | 3 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyViewContractTest.java` | com | 3 | 2 | 3 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | com | 3 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | com | 3 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/DanAssessmentControllerGetActiveMaterialTest.java` | com | 3 | 0 | 0 | DanAssessmentController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/DanAssessmentControllerGetActiveMaterialTest.java` | com | 3 | 0 | 0 | DanAssessmentController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanAssessmentResultRecordContractTest.java` | com | 3 | 0 | 0 | DanAssessmentController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanAssessmentResultRecordContractTest.java` | com | 3 | 0 | 0 | DanAssessmentController | — |
@@ -641,6 +698,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | com | 2 | 38 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | com | 2 | 38 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | com | 2 | 8 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | com | 2 | 8 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceTest.java` | com | 2 | 0 | 0 | CfCommissionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceTest.java` | com | 2 | 0 | 0 | CfCommissionController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGrowthArchiveExportContractTest.java` | com | 2 | 1 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | com | 2 | 0 | 0 | ConsigneeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | com | 2 | 0 | 0 | ConsigneeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DailyTaskControllerTest.java` | com | 2 | 1 | 1 | DailyTaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DailyTaskControllerTest.java` | com | 2 | 1 | 1 | DailyTaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | com | 2 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | com | 2 | 0 | 0 | — | — |

+ 40 - 2
docs/tdd/test/inventory.md

@@ -11,9 +11,9 @@
 | 结构化测试用例(md) | 10 | 719 |
 | 结构化测试用例(md) | 10 | 719 |
 | Playwright(spec.js) | 96 | 571 |
 | Playwright(spec.js) | 96 | 571 |
 | Python(pytest) | 11 | 48 |
 | Python(pytest) | 11 | 48 |
-| Java后端(测试文件) | 390 | 3250 (@Test) |
+| Java后端(测试文件) | 428 | 3710 (@Test) |
 | 用户场景(md) | 11 | 文件级 |
 | 用户场景(md) | 11 | 文件级 |
-| **合计** | — | **4588** 用例/方法 |
+| **合计** | — | **5048** 用例/方法 |
 
 
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 
 
@@ -921,6 +921,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | cfc-backend | 5 | AdminCommissionConfigController | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | cfc-backend | 5 | AdminCommissionConfigController | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigPartialUpdateTest.java` | cfc-backend | 2 | AdminCommissionConfigPartialUpdate | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigPartialUpdateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigPartialUpdateTest.java` | cfc-backend | 2 | AdminCommissionConfigPartialUpdate | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigPartialUpdateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` | cfc-backend | 9 | AdminFamilyStatsContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` | cfc-backend | 9 | AdminFamilyStatsContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminFamilyStatsContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminOrderManualContractTest.java` | cfc-backend | 24 | AdminOrderManualContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminOrderManualContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` | cfc-backend | 4 | AdminProductControllerBatchShelve | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` | cfc-backend | 4 | AdminProductControllerBatchShelve | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` | cfc-backend | 16 | AdminReferralContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` | cfc-backend | 16 | AdminReferralContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminReferralContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` | cfc-backend | 3 | ReportParserAdminController | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` | cfc-backend | 3 | ReportParserAdminController | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` |
@@ -933,6 +934,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | cfc-backend | 7 | FamilyMembersControllerAddMember | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | cfc-backend | 7 | FamilyMembersControllerAddMember | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | cfc-backend | 4 | FamilyMembersControllerList | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | cfc-backend | 4 | FamilyMembersControllerList | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | cfc-backend | 2 | FamilyMembersControllerRenameFamily | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | cfc-backend | 2 | FamilyMembersControllerRenameFamily | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/ChildGrowthArchiveContractTest.java` | cfc-backend | 5 | ChildGrowthArchiveContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/ChildGrowthArchiveContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthAuthContractTest.java` | cfc-backend | 2 | GrowthAuthContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthAuthContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthAuthContractTest.java` | cfc-backend | 2 | GrowthAuthContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthAuthContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` | cfc-backend | 9 | GrowthHistoryViewContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` | cfc-backend | 9 | GrowthHistoryViewContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` | cfc-backend | 1 | TeacherMessageControllerMy | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` | cfc-backend | 1 | TeacherMessageControllerMy | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` |
@@ -1093,12 +1095,24 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | cfc-backend | 7 | TaskCheckinWebhookReminderTask | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | cfc-backend | 7 | TaskCheckinWebhookReminderTask | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | cfc-backend | 5 | VirtualPayTimeoutTask | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | cfc-backend | 5 | VirtualPayTimeoutTask | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` | cfc-backend | 0 | FrontendSourceLocator.java | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` | cfc-backend | 0 | FrontendSourceLocator.java | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AICoachConsultContractTest.java` | cfc-backend | 16 | AICoachConsultContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AICoachConsultContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | cfc-backend | 10 | ActivityAudit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | cfc-backend | 10 | ActivityAudit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` | cfc-backend | 3 | ActivityRegistrationList | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` | cfc-backend | 3 | ActivityRegistrationList | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | cfc-backend | 8 | ActivityRegistrationQuotaUnit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | cfc-backend | 8 | ActivityRegistrationQuotaUnit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` | cfc-backend | 3 | ActivityRegistrationReject | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` | cfc-backend | 3 | ActivityRegistrationReject | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | cfc-backend | 5 | ActivityTagService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | cfc-backend | 5 | ActivityTagService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | cfc-backend | 12 | ActivityTeamServiceUnit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | cfc-backend | 12 | ActivityTeamServiceUnit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminActivityConfigContractTest.java` | cfc-backend | 5 | AdminActivityConfigContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminActivityConfigContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminArticleManageContractTest.java` | cfc-backend | 24 | AdminArticleManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminArticleManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminAuditLogContractTest.java` | cfc-backend | 10 | AdminAuditLogContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminAuditLogContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminBadgeManageContractTest.java` | cfc-backend | 11 | AdminBadgeManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminBadgeManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminContentSecurityContractTest.java` | cfc-backend | 15 | AdminContentSecurityContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminContentSecurityContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminDataMigrationContractTest.java` | cfc-backend | 10 | AdminDataMigrationContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminDataMigrationContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminKnowledgeBaseManageContractTest.java` | cfc-backend | 13 | AdminKnowledgeBaseManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminKnowledgeBaseManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminReportParserManageContractTest.java` | cfc-backend | 37 | AdminReportParserManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminReportParserManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSupplierManageContractTest.java` | cfc-backend | 16 | AdminSupplierManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSupplierManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSystemMonitorContractTest.java` | cfc-backend | 7 | AdminSystemMonitorContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminSystemMonitorContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminUserGovernContractTest.java` | cfc-backend | 9 | AdminUserGovernContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AdminUserGovernContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | cfc-backend | 12 | AfterSalesScS06Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | cfc-backend | 12 | AfterSalesScS06Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` | cfc-backend | 8 | ArticleAutoTagService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` | cfc-backend | 8 | ArticleAutoTagService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` | cfc-backend | 2 | ArticleBackfill | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` | cfc-backend | 2 | ArticleBackfill | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` |
@@ -1114,7 +1128,21 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | cfc-backend | 6 | BadgeServiceUnlockNotice | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | cfc-backend | 6 | BadgeServiceUnlockNotice | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | cfc-backend | 5 | CartReplaceCombo | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | cfc-backend | 5 | CartReplaceCombo | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | cfc-backend | 8 | CfBalanceController | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | cfc-backend | 8 | CfBalanceController | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAiChatContractTest.java` | cfc-backend | 12 | ChildAiChatContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAiChatContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAuthLoginContractTest.java` | cfc-backend | 11 | ChildAuthLoginContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildAuthLoginContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildBadgeViewContractTest.java` | cfc-backend | 11 | ChildBadgeViewContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildBadgeViewContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildDietViewMenuContractTest.java` | cfc-backend | 5 | ChildDietViewMenuContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildDietViewMenuContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyGainContractTest.java` | cfc-backend | 10 | ChildEnergyGainContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyGainContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyViewContractTest.java` | cfc-backend | 3 | ChildEnergyViewContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildEnergyViewContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildFeedbackSubmitContractTest.java` | cfc-backend | 10 | ChildFeedbackSubmitContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildFeedbackSubmitContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGameReportScoreContractTest.java` | cfc-backend | 7 | ChildGameReportScoreContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGameReportScoreContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGrowthArchiveExportContractTest.java` | cfc-backend | 2 | ChildGrowthArchiveExportContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildGrowthArchiveExportContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildMindCaptureContractTest.java` | cfc-backend | 16 | ChildMindCaptureContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildMindCaptureContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildNotificationReceiveContractTest.java` | cfc-backend | 7 | ChildNotificationReceiveContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildNotificationReceiveContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildShopPointsExchangeContractTest.java` | cfc-backend | 11 | ChildShopPointsExchangeContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildShopPointsExchangeContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildWishManageContractTest.java` | cfc-backend | 12 | ChildWishManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ChildWishManageContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | cfc-backend | 14 | CoachButlerNotificationContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | cfc-backend | 14 | CoachButlerNotificationContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachProactiveContractTest.java` | cfc-backend | 25 | CoachProactiveContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachProactiveContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` | cfc-backend | 8 | ComboOfferCalculator | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` | cfc-backend | 8 | ComboOfferCalculator | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | cfc-backend | 3 | ComboOrderStock | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | cfc-backend | 3 | ComboOrderStock | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | cfc-backend | 10 | ComboService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | cfc-backend | 10 | ComboService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` |
@@ -1129,6 +1157,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` | cfc-backend | 12 | DietRecommendationBoundary | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` | cfc-backend | 12 | DietRecommendationBoundary | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationBoundaryTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` | cfc-backend | 17 | DietRecommendationService | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` | cfc-backend | 17 | DietRecommendationService | `cfc-backend/src/test/java/com/etotem/cfc/unit/DietRecommendationServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | cfc-backend | 2 | DimensionCodeConstants | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | cfc-backend | 2 | DimensionCodeConstants | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionConfigAdminContractTest.java` | cfc-backend | 17 | DimensionConfigAdminContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionConfigAdminContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | cfc-backend | 7 | EnergyBehaviorConfigContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | cfc-backend | 7 | EnergyBehaviorConfigContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | cfc-backend | 18 | EnergyConfigAdminContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | cfc-backend | 18 | EnergyConfigAdminContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` | cfc-backend | 0 | EnergyContractTestBase.java | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` | cfc-backend | 0 | EnergyContractTestBase.java | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` |
@@ -1187,11 +1216,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` | cfc-backend | 7 | MembershipPlanPurchaseContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` | cfc-backend | 7 | MembershipPlanPurchaseContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | cfc-backend | 9 | MembershipRenewScP60ScP80Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | cfc-backend | 9 | MembershipRenewScP60ScP80Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | cfc-backend | 6 | MembershipViewScP59Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | cfc-backend | 6 | MembershipViewScP59Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/MindModelManageContractTest.java` | cfc-backend | 11 | MindModelManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/MindModelManageContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` | cfc-backend | 4 | NutritionPlanTeacherContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` | cfc-backend | 4 | NutritionPlanTeacherContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/NutritionPlanTeacherContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | cfc-backend | 14 | OrderCreatePayShipConfirmScX07Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | cfc-backend | 14 | OrderCreatePayShipConfirmScX07Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | cfc-backend | 11 | OrderRefundScP56ScA12Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | cfc-backend | 11 | OrderRefundScP56ScA12Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | cfc-backend | 13 | PersonalLayerDualAssertion | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | cfc-backend | 13 | PersonalLayerDualAssertion | `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | cfc-backend | 14 | PlanActivationExecutionContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | cfc-backend | 14 | PlanActivationExecutionContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationScT05ContractTest.java` | cfc-backend | 14 | PlanActivationScT05Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationScT05ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` | cfc-backend | 9 | PlanContentSafetyReviewContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` | cfc-backend | 9 | PlanContentSafetyReviewContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanContentSafetyReviewContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | cfc-backend | 38 | PlanLifecycleParentContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | cfc-backend | 38 | PlanLifecycleParentContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | cfc-backend | 19 | PlanReviewTeacherContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | cfc-backend | 19 | PlanReviewTeacherContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` |
@@ -1218,7 +1249,14 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | cfc-backend | 20 | ShopCouponApplyContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | cfc-backend | 20 | ShopCouponApplyContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` | cfc-backend | 10 | ShopOrderCreateSpecialDealContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` | cfc-backend | 10 | ShopOrderCreateSpecialDealContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` | cfc-backend | 4 | ShopOrderQueryRefundContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` | cfc-backend | 4 | ShopOrderQueryRefundContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierActivityAttendContractTest.java` | cfc-backend | 9 | SupplierActivityAttendContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierActivityAttendContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierAfterSalesHandleContractTest.java` | cfc-backend | 6 | SupplierAfterSalesHandleContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierAfterSalesHandleContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierExportComplianceContractTest.java` | cfc-backend | 6 | SupplierExportComplianceContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierExportComplianceContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierInventoryManageContractTest.java` | cfc-backend | 12 | SupplierInventoryManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierInventoryManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierManageAdminContractTest.java` | cfc-backend | 19 | SupplierManageAdminContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierManageAdminContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierNutritionSupplyContractTest.java` | cfc-backend | 13 | SupplierNutritionSupplyContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierNutritionSupplyContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` | cfc-backend | 5 | SupplierOrderFulfillContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` | cfc-backend | 5 | SupplierOrderFulfillContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCheckinChildContractTest.java` | cfc-backend | 9 | TaskCheckinChildContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCheckinChildContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` | cfc-backend | 11 | TaskCompleteScC02Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` | cfc-backend | 11 | TaskCompleteScC02Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCompleteScC02ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | cfc-backend | 14 | TaskCreateScP10Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | cfc-backend | 14 | TaskCreateScP10Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | cfc-backend | 4 | TaskFrequencyScP12Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | cfc-backend | 4 | TaskFrequencyScP12Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` |