Browse Source

docs(tdd): 跨源编目测试用例(含tests/目录),标注来源+回写侧车

Agnes Agent 1 tuần trước cách đây
mục cha
commit
cb1f5e30c0
2 tập tin đã thay đổi với 1038 bổ sung và 0 xóa
  1. 25 0
      docs/tdd/SRS.md
  2. 1013 0
      docs/tdd/test/inventory.md

+ 25 - 0
docs/tdd/SRS.md

@@ -3,6 +3,7 @@
 > 生成依据:`tdd-orchestrator/scripts/discover_tests.py` 对 `cfc-backend` 的只读扫描。
 > **本仓库模式**:TDD 编排器在 CFC 的定位是 **发现 / 格式化 / 跟踪已有测试**,
 > **不创建测试用例、不发明需求缺口**。所有数据来自仓库真实测试源代码。完整明细见 `docs/tdd/test/discovery.md`。
+> **跨源测试用例总台账(含 `tests/` 目录下的结构化用例 / Playwright / Python)见 `docs/tdd/test/inventory.md`**——每条均标注**来源锚点**,进度回写落在 `.tdd/test-progress.json` 侧车(不破坏原结构)。
 
 ## SRS 能力键(TDD 池源)
 
@@ -276,3 +277,27 @@
 
 - 刷新覆盖台账:`python3 tdd-orchestrator/scripts/discover_tests.py --project <repo> --out docs/tdd/test/discovery.md`
 - 本台账与 `discovery.md` 均为只读扫描产物,不改动任何源码。
+
+## 六、跨源测试用例总台账(含 `tests/` 目录 · 标注来源)
+
+> 此前仅扫了 `cfc-backend/src/test/java`,漏掉了仓库根 `tests/` 下的一整套测试资产。
+> 现已由 `tdd-orchestrator/scripts/test_inventory.py` 全源编目,产出 `docs/tdd/test/inventory.md`。
+
+- **结构化测试用例** `tests/test-cases/*.md`:**678 条**(TC-A-01 等全局唯一编号,正常流/异常流/权限流三类),每条自带 `对应 e2e` 与 `关联需求/设计(控制器)`;来源锚点 = `tests/test-cases/<文件>.md#<TC编号>`。
+- **Playwright** `tests/**/*.spec.js`:**70 文件 / 411 用例**(e2e + integration + api 冒烟)。
+- **Python(pytest)** `cfc-langgraph/tests` + `tools/xaf_agent_hub/tests`:**12 文件 / 55 用例**。
+- **Java 后端测试** `cfc-backend/src/test/java`:**182 文件 / 1371 @Test**(方法级覆盖见 `discovery.md`)。
+- **用户场景** `tests/user-scenarios/*.md`:**8 文件**(上游输入,201 个场景 SC-角色-NN)。
+- **合计 950 条编目锚点 / 2515 个用例·方法**,每条均带**来源锚点**。
+
+### 回写进展机制(不破坏原项目结构)
+进度**不写回** `tests/` 与 `cfc-backend/src/test/java` 下的原始测试文件,而是落在本地侧车 `.tdd/test-progress.json`(与 `config.json` 同目录,本地不推送):
+```json
+// .tdd/test-progress.json
+{ "schema": "tdd-test-progress/v1",
+  "sources": [ { "anchor", "source_type", "source_path", "local_id", ...meta }, ... ],
+  "progress": { "<anchor>": { "status":"pass|fail|executed|blocked|untracked", "at":ISO, "by":"", "note":"" } } }
+```
+- `anchor` = `source_path#local_id`(如 `tests/test-cases/admin.md#TC-A-01`、`tests/e2e/admin-panel.spec.js#<用例标题>`、`cfc-langgraph/tests/test_intent.py#test_classify_chat`)。
+- 回写时**仅更新 `progress[anchor]`**;原始 `.md/.spec.js/.py` 一律不动,原项目结构零侵入。
+- 用 `test_inventory.py --emit-progress` 可(重新)播种 anchors(保留已有 progress)。若需团队共享进度,可将该侧车移到 `docs/tdd/` 并推送(默认留本地,呼应 config 本地化约定)。

+ 1013 - 0
docs/tdd/test/inventory.md

@@ -0,0 +1,1013 @@
+# CFC · 测试用例总台账(跨源编目 · 标注来源 · 可回写)
+
+> 生成依据:`tdd-orchestrator/scripts/test_inventory.py` 对全仓库测试源的只读扫描。
+> **仅发现/格式化/跟踪已有测试,不创建、不发明**。每条用例均标注**来源**(原文件路径 + 锚点),
+> 进度回写落在 `.tdd/test-progress.json` 侧车(按来源锚点索引),**绝不改动原测试文件**。
+
+## 一、汇总(按来源类型)
+
+| 来源类型 | 文件数 | 用例/方法数 |
+| --- | --- | --- |
+| 结构化测试用例(md) | 9 | 678 |
+| Playwright(spec.js) | 70 | 411 |
+| Python(pytest) | 12 | 55 |
+| Java后端(测试文件) | 182 | 1371 (@Test) |
+| 用户场景(md) | 8 | 文件级 |
+| **合计** | — | **2515** 用例/方法 |
+
+## 二、结构化测试用例(`tests/test-cases/*.md`)
+
+> 每条来源锚点 = `文件#TC编号`,回写进度时定位此锚点即可,不改原 markdown 表格。
+
+| TC编号 | 模块 | 角色 | 优先级 | 类型 | 来源 | 对应e2e | 关联设计 |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| `TC-A-01` | 认证 | 运营 | P0 | 接口 | `tests/test-cases/admin.md#TC-A-01` | `e2e/roles/admin/login.spec.js` | `AdminAuthController` |
+| `TC-A-02` | 统计 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-02` | `e2e/admin-panel.spec.js` | `StatsController` |
+| `TC-A-03` | 方案管理 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-03` | — | 方案管理(全量) |
+| `TC-A-04` | 方案激活 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-04` | — | 方案激活 |
+| `TC-A-05` | 报告解析 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-05` | `e2e/health-report-audit.spec.js` | `AdminReportParserController` |
+| `TC-A-06` | 报告解析 | 运营 | P1 | 接口 | `tests/test-cases/admin.md#TC-A-06` | — | 报告类型注册 |
+| `TC-A-07` | 报告解析 | 运营 | P2 | 功能 | `tests/test-cases/admin.md#TC-A-07` | — | 未知聚类自学习 |
+| `TC-A-08` | 文章 | 运营 | P0 | 功能 | `tests/test-cases/admin.md#TC-A-08` | `e2e/article-management.spec.js` | 文章发布-审核 |
+| `TC-A-09` | 文章·去重 | 运营 | P1 | 异常 | `tests/test-cases/admin.md#TC-A-09` | — | 文章标题去重 |
+| `TC-A-10` | 关系类型 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-10` | `e2e/roles/admin/../relationship` | 关系类型 CRUD |
+| `TC-A-11` | 勋章 | 运营 | P0 | 接口 | `tests/test-cases/admin.md#TC-A-11` | `e2e/points-system.spec.js`(参考) | 勋章管理;黑盒回归 |
+| `TC-A-12` | 供应商 | 运营 | P0 | 接口 | `tests/test-cases/admin.md#TC-A-12` | `e2e/roles/admin/vendor/management.spec.js` | 供应商管理;黑盒回归 |
+| `TC-A-13` | 活动 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-13` | `e2e/roles/admin/activity-review.spec.js` | 活动审核撤回;黑盒回归 |
+| `TC-A-14` | 知识库 | 运营 | P1 | 接口 | `tests/test-cases/admin.md#TC-A-14` | `e2e/health-knowledge-base.spec.js` | 知识库管理;黑盒回归 |
+| `TC-A-15` | 数据迁移 | 运营 | P2 | 功能 | `tests/test-cases/admin.md#TC-A-15` | — | 多数据源/SfmsDataSourceConfig |
+| `TC-A-16` | 参数校验 | 运营 | P0 | 异常 | `tests/test-cases/admin.md#TC-A-16` | `e2e/admin-panel.spec.js` | 统一 `Result<T>`+全局异常;黑盒回归 |
+| `TC-A-17` | /api/admin/report-parser/* | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-17` | — | /api/admin/report-parser/* |
+| `TC-A-18` | 优惠券/活动管理 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-18` | — | 优惠券/活动管理 |
+| `TC-A-19` | 内容安全 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-19` | — | 内容安全 |
+| `TC-A-20` | GDPR 工单 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-20` | — | GDPR 工单 |
+| `TC-A-21` | 网关/限流 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-21` | — | 网关/限流 |
+| `TC-A-22` | 模型管理 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-22` | — | 模型管理 |
+| `TC-A-23` | 知识库 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-23` | — | 知识库 |
+| `TC-A-01-E` | 认证 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-01-E` | — | `AdminAuthController` |
+| `TC-A-02-E` | 统计 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-02-E` | — | `StatsController` |
+| `TC-A-03-E` | 方案管理 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-03-E` | — | 方案管理(全量) |
+| `TC-A-04-E` | 方案激活 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-04-E` | — | 方案激活 |
+| `TC-A-05-E` | 报告解析 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-05-E` | — | `AdminReportParserController` |
+| `TC-A-06-E` | 报告解析 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-06-E` | — | 报告类型注册 |
+| `TC-A-07-E` | 报告解析 | 运营 | P3 | 异常 | `tests/test-cases/admin.md#TC-A-07-E` | — | 未知聚类自学习 |
+| `TC-A-08-E` | 文章 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-08-E` | — | 文章发布-审核 |
+| `TC-A-09-E` | 文章·去重 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-09-E` | — | 文章标题去重 |
+| `TC-A-10-E` | 关系类型 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-10-E` | — | 关系类型 CRUD |
+| `TC-A-11-E` | 勋章 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-11-E` | — | 勋章管理;黑盒回归 |
+| `TC-A-12-E` | 供应商 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-12-E` | — | 供应商管理;黑盒回归 |
+| `TC-A-13-E` | 活动 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-13-E` | — | 活动审核撤回;黑盒回归 |
+| `TC-A-14-E` | 知识库 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-14-E` | — | 知识库管理;黑盒回归 |
+| `TC-A-15-E` | 数据迁移 | 运营 | P3 | 异常 | `tests/test-cases/admin.md#TC-A-15-E` | — | 多数据源/SfmsDataSourceConfig |
+| `TC-A-16-E` | 参数校验 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-16-E` | — | 统一 `Result<T>`+全局异常;黑盒回归 |
+| `TC-A-17-E` | /api/admin/report-parser/* | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-17-E` | — | /api/admin/report-parser/* |
+| `TC-A-18-E` | 优惠券/活动管理 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-18-E` | — | 优惠券/活动管理 |
+| `TC-A-19-E` | 内容安全 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-19-E` | — | 内容安全 |
+| `TC-A-20-E` | GDPR 工单 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-20-E` | — | GDPR 工单 |
+| `TC-A-21-E` | 网关/限流 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-21-E` | — | 网关/限流 |
+| `TC-A-22-E` | 模型管理 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-22-E` | — | 模型管理 |
+| `TC-A-23-E` | 知识库 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-23-E` | — | 知识库 |
+| `TC-A-01-P` | 认证 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-01-P` | — | `AdminAuthController` |
+| `TC-A-02-P` | 统计 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-02-P` | — | `StatsController` |
+| `TC-A-03-P` | 方案管理 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-03-P` | — | 方案管理(全量) |
+| `TC-A-04-P` | 方案激活 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-04-P` | — | 方案激活 |
+| `TC-A-05-P` | 报告解析 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-05-P` | — | `AdminReportParserController` |
+| `TC-A-06-P` | 报告解析 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-06-P` | — | 报告类型注册 |
+| `TC-A-07-P` | 报告解析 | 运营 | P2 | 权限 | `tests/test-cases/admin.md#TC-A-07-P` | — | 未知聚类自学习 |
+| `TC-A-08-P` | 文章 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-08-P` | — | 文章发布-审核 |
+| `TC-A-09-P` | 文章·去重 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-09-P` | — | 文章标题去重 |
+| `TC-A-10-P` | 关系类型 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-10-P` | — | 关系类型 CRUD |
+| `TC-A-11-P` | 勋章 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-11-P` | — | 勋章管理;黑盒回归 |
+| `TC-A-12-P` | 供应商 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-12-P` | — | 供应商管理;黑盒回归 |
+| `TC-A-13-P` | 活动 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-13-P` | — | 活动审核撤回;黑盒回归 |
+| `TC-A-14-P` | 知识库 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-14-P` | — | 知识库管理;黑盒回归 |
+| `TC-A-15-P` | 数据迁移 | 运营 | P2 | 权限 | `tests/test-cases/admin.md#TC-A-15-P` | — | 多数据源/SfmsDataSourceConfig |
+| `TC-A-16-P` | 参数校验 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-16-P` | — | 统一 `Result<T>`+全局异常;黑盒回归 |
+| `TC-A-17-P` | /api/admin/report-parser/* | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-17-P` | — | /api/admin/report-parser/* |
+| `TC-A-18-P` | 优惠券/活动管理 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-18-P` | — | 优惠券/活动管理 |
+| `TC-A-19-P` | 内容安全 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-19-P` | — | 内容安全 |
+| `TC-A-20-P` | GDPR 工单 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-20-P` | — | GDPR 工单 |
+| `TC-A-21-P` | 网关/限流 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-21-P` | — | 网关/限流 |
+| `TC-A-22-P` | 模型管理 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-22-P` | — | 模型管理 |
+| `TC-A-23-P` | 知识库 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-23-P` | — | 知识库 |
+| `TC-A-N01` | 配置CRUD | 运营 | P1 | 性能 | `tests/test-cases/admin.md#TC-A-N01` | — | 配置管理 |
+| `TC-A-N02` | 报告解析中台 | 运营 | P0 | 性能 | `tests/test-cases/admin.md#TC-A-N02` | — | 解析中台 |
+| `TC-A-N03` | 登录统计 | 运营 | P1 | 性能 | `tests/test-cases/admin.md#TC-A-N03` | — | 统计聚合 |
+| `TC-A-N04` | 限流熔断 | 运营 | P0 | 性能 | `tests/test-cases/admin.md#TC-A-N04` | e2e/api/nonfunc-perf-compat.spec.js | 限流熔断 |
+| `TC-A-N05` | 登录统计 | 运营 | P0 | 安全 | `tests/test-cases/admin.md#TC-A-N05` | e2e/api/nonfunc-security.spec.js | 后台鉴权 |
+| `TC-A-N06` | 文章审核 | 运营 | P1 | 安全 | `tests/test-cases/admin.md#TC-A-N06` | e2e/api/nonfunc-security.spec.js | 内容安全 |
+| `TC-A-N07` | 内容安全 | 运营 | P0 | 安全 | `tests/test-cases/admin.md#TC-A-N07` | — | SSRF 防护 |
+| `TC-A-N08` | 知识库 | 运营 | P1 | 安全 | `tests/test-cases/admin.md#TC-A-N08` | — | 上传校验 |
+| `TC-A-N09` | 注销导出 | 运营 | P0 | 安全 | `tests/test-cases/admin.md#TC-A-N09` | — | 数据导出合规 |
+| `TC-C-01` | 权限/双角色 | 孩子 | P0 | 权限 | `tests/test-cases/child.md#TC-C-01` | `e2e/roles/child/login.spec.js` | 双角色铁律:孩子端不能切家长 |
+| `TC-C-02` | 任务 | 孩子 | P0 | 功能 | `tests/test-cases/child.md#TC-C-02` | `e2e/roles/child/../tasks` | `TaskController` |
+| `TC-C-03` | 小游戏 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-03` | `e2e/roles/child/mini-games.spec.js` | `pages/games/*` |
+| `TC-C-04` | 心愿 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-04` | `e2e/roles/parent/wish-management.spec.js` | `WishController` |
+| `TC-C-05` | 心愿 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-05` | — | `RewardController` |
+| `TC-C-06` | 能量 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-06` | `e2e/roles/parent/energy-dashboard.spec.js`(参考) | `EnergyController` |
+| `TC-C-07` | 报告/权限 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-07` | `e2e/roles/teacher/dan-report-flow.spec.js`(参考) | 报告查看权限隔离 |
+| `TC-C-08` | 打卡/方案 | 孩子 | P0 | 功能 | `tests/test-cases/child.md#TC-C-08` | `e2e/roles/child/daily-checkin.spec.js` | 健康打卡/方案进度 |
+| `TC-C-09` | 勋章 | 孩子 | P2 | 功能 | `tests/test-cases/child.md#TC-C-09` | — | `RewardController` |
+| `TC-C-10` | 勋章提醒 | 孩子 | P2 | 功能 | `tests/test-cases/child.md#TC-C-10` | — | `MedalController` |
+| `TC-C-11` | 成长记录 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-11` | — | `GrowthController` |
+| `TC-C-12` | 食谱查看 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-12` | — | 饮食推荐 |
+| `TC-C-13` | AI 对话 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-13` | — | `AIChatController` |
+| `TC-C-14` | 任务重做 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-14` | — | `TaskController` |
+| `TC-C-15` | 消息接收 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-15` | — | 消息服务 |
+| `TC-C-16` | 个人资料 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-16` | — | `AuthController` |
+| `TC-C-17` | 退出 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-17` | — | `AuthController` |
+| `TC-C-18` | 设备校验 | 孩子 | P2 | 功能 | `tests/test-cases/child.md#TC-C-18` | — | `AuthController` |
+| `TC-C-19` | 消息服务 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-19` | — | 消息服务 |
+| `TC-C-20` | GrowthController | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-20` | — | GrowthController |
+| `TC-C-21` | 舌诊情绪识别 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-21` | — | 舌诊情绪识别 |
+| `TC-C-22` | MallController | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-22` | — | MallController |
+| `TC-C-23` | 客服 | 孩子 | P1 | 功能 | `tests/test-cases/child.md#TC-C-23` | — | 客服 |
+| `TC-C-01-E` | 权限/双角色 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-01-E` | — | 双角色铁律:孩子端不能切家长 |
+| `TC-C-02-E` | 任务 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-02-E` | — | `TaskController` |
+| `TC-C-03-E` | 小游戏 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-03-E` | — | `pages/games/*` |
+| `TC-C-04-E` | 心愿 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-04-E` | — | `WishController` |
+| `TC-C-05-E` | 心愿 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-05-E` | — | `RewardController` |
+| `TC-C-06-E` | 能量 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-06-E` | — | `EnergyController` |
+| `TC-C-07-E` | 报告/权限 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-07-E` | — | 报告查看权限隔离 |
+| `TC-C-08-E` | 打卡/方案 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-08-E` | — | 健康打卡/方案进度 |
+| `TC-C-09-E` | 勋章 | 孩子 | P3 | 异常 | `tests/test-cases/child.md#TC-C-09-E` | — | `RewardController` |
+| `TC-C-10-E` | 勋章提醒 | 孩子 | P3 | 异常 | `tests/test-cases/child.md#TC-C-10-E` | — | `MedalController` |
+| `TC-C-11-E` | 成长记录 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-11-E` | — | `GrowthController` |
+| `TC-C-12-E` | 食谱查看 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-12-E` | — | 饮食推荐 |
+| `TC-C-13-E` | AI 对话 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-13-E` | — | `AIChatController` |
+| `TC-C-14-E` | 任务重做 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-14-E` | — | `TaskController` |
+| `TC-C-15-E` | 消息接收 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-15-E` | — | 消息服务 |
+| `TC-C-16-E` | 个人资料 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-16-E` | — | `AuthController` |
+| `TC-C-17-E` | 退出 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-17-E` | — | `AuthController` |
+| `TC-C-18-E` | 设备校验 | 孩子 | P3 | 异常 | `tests/test-cases/child.md#TC-C-18-E` | — | `AuthController` |
+| `TC-C-19-E` | 消息服务 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-19-E` | — | 消息服务 |
+| `TC-C-20-E` | GrowthController | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-20-E` | — | GrowthController |
+| `TC-C-21-E` | 舌诊情绪识别 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-21-E` | — | 舌诊情绪识别 |
+| `TC-C-22-E` | MallController | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-22-E` | — | MallController |
+| `TC-C-23-E` | 客服 | 孩子 | P2 | 异常 | `tests/test-cases/child.md#TC-C-23-E` | — | 客服 |
+| `TC-C-01-P` | 权限/双角色 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-01-P` | — | 双角色铁律:孩子端不能切家长 |
+| `TC-C-02-P` | 任务 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-02-P` | — | `TaskController` |
+| `TC-C-03-P` | 小游戏 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-03-P` | — | `pages/games/*` |
+| `TC-C-04-P` | 心愿 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-04-P` | — | `WishController` |
+| `TC-C-05-P` | 心愿 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-05-P` | — | `RewardController` |
+| `TC-C-06-P` | 能量 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-06-P` | — | `EnergyController` |
+| `TC-C-07-P` | 报告/权限 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-07-P` | — | 报告查看权限隔离 |
+| `TC-C-08-P` | 打卡/方案 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-08-P` | — | 健康打卡/方案进度 |
+| `TC-C-09-P` | 勋章 | 孩子 | P2 | 权限 | `tests/test-cases/child.md#TC-C-09-P` | — | `RewardController` |
+| `TC-C-10-P` | 勋章提醒 | 孩子 | P2 | 权限 | `tests/test-cases/child.md#TC-C-10-P` | — | `MedalController` |
+| `TC-C-11-P` | 成长记录 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-11-P` | — | `GrowthController` |
+| `TC-C-12-P` | 食谱查看 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-12-P` | — | 饮食推荐 |
+| `TC-C-13-P` | AI 对话 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-13-P` | — | `AIChatController` |
+| `TC-C-14-P` | 任务重做 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-14-P` | — | `TaskController` |
+| `TC-C-15-P` | 消息接收 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-15-P` | — | 消息服务 |
+| `TC-C-16-P` | 个人资料 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-16-P` | — | `AuthController` |
+| `TC-C-17-P` | 退出 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-17-P` | — | `AuthController` |
+| `TC-C-18-P` | 设备校验 | 孩子 | P2 | 权限 | `tests/test-cases/child.md#TC-C-18-P` | — | `AuthController` |
+| `TC-C-19-P` | 消息服务 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-19-P` | — | 消息服务 |
+| `TC-C-20-P` | GrowthController | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-20-P` | — | GrowthController |
+| `TC-C-21-P` | 舌诊情绪识别 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-21-P` | — | 舌诊情绪识别 |
+| `TC-C-22-P` | MallController | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-22-P` | — | MallController |
+| `TC-C-23-P` | 客服 | 孩子 | P1 | 权限 | `tests/test-cases/child.md#TC-C-23-P` | — | 客服 |
+| `TC-C-N01` | 任务打卡 | 孩子 | P1 | 性能 | `tests/test-cases/child.md#TC-C-N01` | — | TaskController |
+| `TC-C-N02` | 消息通知 | 孩子 | P2 | 性能 | `tests/test-cases/child.md#TC-C-N02` | — | 消息中心 |
+| `TC-C-N03` | 孩子端 | 孩子 | P1 | 兼容 | `tests/test-cases/child.md#TC-C-N03` | — | 孩子端 |
+| `TC-C-N04` | 只读报告 | 孩子 | P2 | 兼容 | `tests/test-cases/child.md#TC-C-N04` | — | 报告前端 |
+| `TC-C-N05` | 心愿 | 孩子 | P1 | 安全 | `tests/test-cases/child.md#TC-C-N05` | — | 心愿鉴权 |
+| `TC-C-N06` | 消息通知 | 孩子 | P2 | 安全 | `tests/test-cases/child.md#TC-C-N06` | — | 消息渲染 |
+| `TC-C-N07` | 孩子端 | 孩子 | P0 | 安全 | `tests/test-cases/child.md#TC-C-N07` | e2e/api/nonfunc-security.spec.js | 双角色铁律 |
+| `TC-X-01` | 规划师 | P0 | 功能 | 已绑定家庭+孩子 B;募极生物 PDF | `tests/test-cases/cross-role-e2e.md#TC-X-01` | — | — |
+| `TC-X-02` | 规划师 | P0 | 功能 | X-01 草稿 | `tests/test-cases/cross-role-e2e.md#TC-X-02` | — | — |
+| `TC-X-03` | 家长 | P0 | 功能 | 孩子 B 有报告;已购会员 | `tests/test-cases/cross-role-e2e.md#TC-X-03` | — | — |
+| `TC-X-04` | 规划师 | P0 | 功能 | X-03 方案 generated | `tests/test-cases/cross-role-e2e.md#TC-X-04` | — | — |
+| `TC-X-05` | 孩子 | P0 | 功能 | X-04 已生成方案任务 | `tests/test-cases/cross-role-e2e.md#TC-X-05` | — | — |
+| `TC-X-06` | 规划师 | P0 | 功能 | X-05 已提交 | `tests/test-cases/cross-role-e2e.md#TC-X-06` | — | — |
+| `TC-X-07` | 运营 | P1 | 功能 | 以上步骤已执行 | `tests/test-cases/cross-role-e2e.md#TC-X-07` | — | — |
+| `TC-X-08` | 多角色 | P0 | 异常 | X-04 已 active 方案 | `tests/test-cases/cross-role-e2e.md#TC-X-08` | — | — |
+| `TC-X-09` | 多角色 | P0 | 功能 | 家长已生成方案(generated) | `tests/test-cases/cross-role-e2e.md#TC-X-09` | — | — |
+| `TC-X-10` | 多角色 | P2 | 功能 | 同一孩子多次上传同类型报告 | `tests/test-cases/cross-role-e2e.md#TC-X-10` | — | — |
+| `TC-X-11` | 多角色 | P1 | 功能 | 跨角色消息配置就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-11` | — | — |
+| `TC-X-12` | 多角色 | P1 | 功能 | 家长未购会员 | `tests/test-cases/cross-role-e2e.md#TC-X-12` | — | — |
+| `TC-X-13` | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-13` | — | — |
+| `TC-X-14` | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-14` | — | — |
+| `TC-X-15` | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-15` | — | — |
+| `TC-X-16` | 跨角色 | P0 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-16` | — | — |
+| `TC-X-17` | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-17` | — | — |
+| `TC-X-18` | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-18` | — | — |
+| `TC-X-01-E` | 规划师 | P2 | 异常 | 已绑定家庭+孩子 B;募极生物 PDF | `tests/test-cases/cross-role-e2e.md#TC-X-01-E` | — | — |
+| `TC-X-02-E` | 规划师 | P2 | 异常 | X-01 草稿 | `tests/test-cases/cross-role-e2e.md#TC-X-02-E` | — | — |
+| `TC-X-03-E` | 家长 | P2 | 异常 | 孩子 B 有报告;已购会员 | `tests/test-cases/cross-role-e2e.md#TC-X-03-E` | — | — |
+| `TC-X-04-E` | 规划师 | P2 | 异常 | X-03 方案 generated | `tests/test-cases/cross-role-e2e.md#TC-X-04-E` | — | — |
+| `TC-X-05-E` | 孩子 | P2 | 异常 | X-04 已生成方案任务 | `tests/test-cases/cross-role-e2e.md#TC-X-05-E` | — | — |
+| `TC-X-06-E` | 规划师 | P2 | 异常 | X-05 已提交 | `tests/test-cases/cross-role-e2e.md#TC-X-06-E` | — | — |
+| `TC-X-07-E` | 运营 | P2 | 异常 | 以上步骤已执行 | `tests/test-cases/cross-role-e2e.md#TC-X-07-E` | — | — |
+| `TC-X-08-E` | 多角色 | P2 | 异常 | X-04 已 active 方案 | `tests/test-cases/cross-role-e2e.md#TC-X-08-E` | — | — |
+| `TC-X-09-E` | 多角色 | P2 | 异常 | 家长已生成方案(generated) | `tests/test-cases/cross-role-e2e.md#TC-X-09-E` | — | — |
+| `TC-X-10-E` | 多角色 | P3 | 异常 | 同一孩子多次上传同类型报告 | `tests/test-cases/cross-role-e2e.md#TC-X-10-E` | — | — |
+| `TC-X-11-E` | 多角色 | P2 | 异常 | 跨角色消息配置就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-11-E` | — | — |
+| `TC-X-12-E` | 多角色 | P2 | 异常 | 家长未购会员 | `tests/test-cases/cross-role-e2e.md#TC-X-12-E` | — | — |
+| `TC-X-13-E` | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-13-E` | — | — |
+| `TC-X-14-E` | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-14-E` | — | — |
+| `TC-X-15-E` | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-15-E` | — | — |
+| `TC-X-16-E` | 跨角色 | P1 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-16-E` | — | — |
+| `TC-X-17-E` | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-17-E` | — | — |
+| `TC-X-18-E` | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-18-E` | — | — |
+| `TC-X-01-P` | 规划师 | P1 | 权限 | 已绑定家庭+孩子 B;募极生物 PDF | `tests/test-cases/cross-role-e2e.md#TC-X-01-P` | — | — |
+| `TC-X-02-P` | 规划师 | P1 | 权限 | X-01 草稿 | `tests/test-cases/cross-role-e2e.md#TC-X-02-P` | — | — |
+| `TC-X-03-P` | 家长 | P1 | 权限 | 孩子 B 有报告;已购会员 | `tests/test-cases/cross-role-e2e.md#TC-X-03-P` | — | — |
+| `TC-X-04-P` | 规划师 | P1 | 权限 | X-03 方案 generated | `tests/test-cases/cross-role-e2e.md#TC-X-04-P` | — | — |
+| `TC-X-05-P` | 孩子 | P1 | 权限 | X-04 已生成方案任务 | `tests/test-cases/cross-role-e2e.md#TC-X-05-P` | — | — |
+| `TC-X-06-P` | 规划师 | P1 | 权限 | X-05 已提交 | `tests/test-cases/cross-role-e2e.md#TC-X-06-P` | — | — |
+| `TC-X-07-P` | 运营 | P1 | 权限 | 以上步骤已执行 | `tests/test-cases/cross-role-e2e.md#TC-X-07-P` | — | — |
+| `TC-X-08-P` | 多角色 | P1 | 权限 | X-04 已 active 方案 | `tests/test-cases/cross-role-e2e.md#TC-X-08-P` | — | — |
+| `TC-X-09-P` | 多角色 | P1 | 权限 | 家长已生成方案(generated) | `tests/test-cases/cross-role-e2e.md#TC-X-09-P` | — | — |
+| `TC-X-10-P` | 多角色 | P2 | 权限 | 同一孩子多次上传同类型报告 | `tests/test-cases/cross-role-e2e.md#TC-X-10-P` | — | — |
+| `TC-X-11-P` | 多角色 | P1 | 权限 | 跨角色消息配置就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-11-P` | — | — |
+| `TC-X-12-P` | 多角色 | P1 | 权限 | 家长未购会员 | `tests/test-cases/cross-role-e2e.md#TC-X-12-P` | — | — |
+| `TC-X-13-P` | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-13-P` | — | — |
+| `TC-X-14-P` | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-14-P` | — | — |
+| `TC-X-15-P` | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-15-P` | — | — |
+| `TC-X-16-P` | 跨角色 | P0 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-16-P` | — | — |
+| `TC-X-17-P` | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-17-P` | — | — |
+| `TC-X-18-P` | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | `tests/test-cases/cross-role-e2e.md#TC-X-18-P` | — | — |
+| `TC-X-N01` | 跨角色 | P0 | 性能 | 多家庭并发(≥10 家庭) | `tests/test-cases/cross-role-e2e.md#TC-X-N01` | — | — |
+| `TC-X-N02` | 跨角色 | P0 | 性能 | 多家庭同时生成方案 | `tests/test-cases/cross-role-e2e.md#TC-X-N02` | — | — |
+| `TC-X-N03` | 跨角色 | P0 | 性能 | 活动名额 100,瞬时 500 请求 | `tests/test-cases/cross-role-e2e.md#TC-X-N03` | — | — |
+| `TC-X-N04` | 跨角色 | P1 | 性能 | 全平台打卡高峰 | `tests/test-cases/cross-role-e2e.md#TC-X-N04` | — | — |
+| `TC-X-N05` | 跨角色 | P0 | 安全 | 跨角色越权 | `tests/test-cases/cross-role-e2e.md#TC-X-N05` | — | — |
+| `TC-X-N06` | 跨角色 | P0 | 安全 | 导出授权 | `tests/test-cases/cross-role-e2e.md#TC-X-N06` | — | — |
+| `TC-X-N07` | 跨角色 | P1 | 兼容 | iOS/Android/小程序/Web 同时在线 | `tests/test-cases/cross-role-e2e.md#TC-X-N07` | — | — |
+| `TC-X-N08` | 跨角色 | P0 | 安全 | 文件上传链路 | `tests/test-cases/cross-role-e2e.md#TC-X-N08` | — | — |
+| `TC-DV-01` | 预约/权限 | 家长A vs 家长B | P0 | 权限 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-01` | — | F1 |
+| `TC-DV-02` | 预约/状态机 | 规划师 | P1 | 异常 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-02` | — | F2 |
+| `TC-DV-03` | 预约/额度 | 家长 | P0 | 功能 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-03` | — | 修正口径 |
+| `TC-DV-04` | 预约/幂等 | 家长 | P1 | 异常 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-04` | — | F4 |
+| `TC-DV-05` | 预约/权限 | 非指派用户 | P0 | 权限 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-05` | — | 既有 |
+| `TC-DV-06` | 预约/校验 | 家长 | P1 | 接口 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-06` | — | 既有 |
+| `TC-DV-07` | 列表/权限 | 非 teacher | P2 | 权限 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-07` | — | F5 |
+| `TC-DV-08` | 预约/校验 | 家长 | P2 | 异常 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-08` | — | F6 |
+| `TC-DV-09` | 预约/状态机 | 规划师 | P1 | 功能 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-09` | — | 状态机 |
+| `TC-DV-10` | 订单↔额度↔预约 | 家长 | P0 | 功能 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-10` | — | 修正口径 |
+| `TC-PA-01` | 激活/拆任务 | 规划师 | P0 | 功能 | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-01` | — | G1 |
+| `TC-PA-02` | 激活/幂等 | 规划师 | P0 | 异常 | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-02` | — | G1 |
+| `TC-PA-03` | 激活/并发幂等 | 规划师×2 | P1 | 并发 | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-03` | — | G2 |
+| `TC-PA-04` | 激活/取消 | 规划师 | P1 | 功能 | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-04` | — | G3 |
+| `TC-PA-05` | 拆任务/边界 | 规划师 | P2 | 边界 | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-05` | — | G3 |
+| `TC-PA-06` | 拆任务/数据 | 规划师 | P2 | 数据 | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-06` | — | G4 |
+| `TC-G-01` | 启动/首页 | 游客 | P1 | 功能 | `tests/test-cases/guest.md#TC-G-01` | `e2e/roles/child/login.spec.js`(反向) | JwtInterceptor 拦截 `/api/**` |
+| `TC-G-02` | 认证 | 游客 | P0 | 接口 | `tests/test-cases/guest.md#TC-G-02` | `e2e/roles/parent/../login` | `AuthController`/`API_REFERENCE` 1.1 |
+| `TC-G-03` | 认证 | 游客 | P0 | 接口 | `tests/test-cases/guest.md#TC-G-03` | — | 统一 POST/JWT |
+| `TC-G-04` | 家庭/邀请 | 游客 | P1 | 功能 | `tests/test-cases/guest.md#TC-G-04` | `e2e/roles/teacher/family-binding.spec.js`(参考) | `FamilyInviteController` |
+| `TC-G-05` | 权限 | 游客 | P0 | 权限 | `tests/test-cases/guest.md#TC-G-05` | `e2e/debug-control.spec.js`(参考) | JWT;8 公开路径白名单(1.1) |
+| `TC-G-06` | 权限 | 游客 | P0 | 权限 | `tests/test-cases/guest.md#TC-G-06` | `e2e/debug-control.spec.js`(参考) | `JwtInterceptor` |
+| `TC-G-07` | 测试模式 | 游客 | P2 | 功能 | `tests/test-cases/guest.md#TC-G-07` | — | AGENTS.md 测试模式 |
+| `TC-G-08` | 环境切换 | 游客 | P2 | 功能 | `tests/test-cases/guest.md#TC-G-08` | — | `config.js` |
+| `TC-G-09` | 认证 | 游客 | P1 | 功能 | `tests/test-cases/guest.md#TC-G-09` | — | `AuthController` |
+| `TC-G-10` | 注册 | 游客 | P1 | 功能 | `tests/test-cases/guest.md#TC-G-10` | — | `AuthController` |
+| `TC-G-11` | 协议页/AgreementController | 游客 | P2 | 功能 | `tests/test-cases/guest.md#TC-G-11` | — | 协议页/AgreementController |
+| `TC-G-12` | config.js | 游客 | P2 | 功能 | `tests/test-cases/guest.md#TC-G-12` | — | config.js |
+| `TC-G-01-E` | 启动/首页 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-01-E` | — | JwtInterceptor 拦截 `/api/**` |
+| `TC-G-02-E` | 认证 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-02-E` | — | `AuthController`/`API_REFERENCE` 1.1 |
+| `TC-G-03-E` | 认证 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-03-E` | — | 统一 POST/JWT |
+| `TC-G-04-E` | 家庭/邀请 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-04-E` | — | `FamilyInviteController` |
+| `TC-G-05-E` | 权限 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-05-E` | — | JWT;8 公开路径白名单(1.1) |
+| `TC-G-06-E` | 权限 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-06-E` | — | `JwtInterceptor` |
+| `TC-G-07-E` | 测试模式 | 游客 | P3 | 异常 | `tests/test-cases/guest.md#TC-G-07-E` | — | AGENTS.md 测试模式 |
+| `TC-G-08-E` | 环境切换 | 游客 | P3 | 异常 | `tests/test-cases/guest.md#TC-G-08-E` | — | `config.js` |
+| `TC-G-09-E` | 认证 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-09-E` | — | `AuthController` |
+| `TC-G-10-E` | 注册 | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-10-E` | — | `AuthController` |
+| `TC-G-11-E` | 协议页/AgreementController | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-11-E` | — | 协议页/AgreementController |
+| `TC-G-12-E` | config.js | 游客 | P2 | 异常 | `tests/test-cases/guest.md#TC-G-12-E` | — | config.js |
+| `TC-G-01-P` | 启动/首页 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-01-P` | — | JwtInterceptor 拦截 `/api/**` |
+| `TC-G-02-P` | 认证 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-02-P` | — | `AuthController`/`API_REFERENCE` 1.1 |
+| `TC-G-03-P` | 认证 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-03-P` | — | 统一 POST/JWT |
+| `TC-G-04-P` | 家庭/邀请 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-04-P` | — | `FamilyInviteController` |
+| `TC-G-05-P` | 权限 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-05-P` | — | JWT;8 公开路径白名单(1.1) |
+| `TC-G-06-P` | 权限 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-06-P` | — | `JwtInterceptor` |
+| `TC-G-07-P` | 测试模式 | 游客 | P2 | 权限 | `tests/test-cases/guest.md#TC-G-07-P` | — | AGENTS.md 测试模式 |
+| `TC-G-08-P` | 环境切换 | 游客 | P2 | 权限 | `tests/test-cases/guest.md#TC-G-08-P` | — | `config.js` |
+| `TC-G-09-P` | 认证 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-09-P` | — | `AuthController` |
+| `TC-G-10-P` | 注册 | 游客 | P1 | 权限 | `tests/test-cases/guest.md#TC-G-10-P` | — | `AuthController` |
+| `TC-G-11-P` | 协议页/AgreementController | 游客 | P2 | 权限 | `tests/test-cases/guest.md#TC-G-11-P` | — | 协议页/AgreementController |
+| `TC-G-12-P` | config.js | 游客 | P2 | 权限 | `tests/test-cases/guest.md#TC-G-12-P` | — | config.js |
+| `TC-G-N01` | 落地页 | 游客 | P2 | 性能 | `tests/test-cases/guest.md#TC-G-N01` | — | 落地页/邀请 |
+| `TC-G-N02` | 浏览转化 | 游客 | P2 | 兼容 | `tests/test-cases/guest.md#TC-G-N02` | e2e/api/nonfunc-perf-compat.spec.js | 登录注册 |
+| `TC-G-N03` | 非微信H5 | 游客 | P2 | 兼容 | `tests/test-cases/guest.md#TC-G-N03` | e2e/api/nonfunc-perf-compat.spec.js | H5 兜底 |
+| `TC-G-N04` | 落地页 | 游客 | P0 | 安全 | `tests/test-cases/guest.md#TC-G-N04` | e2e/api/nonfunc-security.spec.js | 接口鉴权 |
+| `TC-G-N05` | 登录注册 | 游客 | P0 | 安全 | `tests/test-cases/guest.md#TC-G-N05` | — | 登录限流 |
+| `TC-P-01` | 家庭 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-01` | `e2e/roles/parent/family-management.spec.js` | `FamilyInviteController` |
+| `TC-P-02` | 家庭/成员 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-02` | — | `FamilyInviteController` |
+| `TC-P-03` | 成员资料 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-03` | `e2e/family-member-management.spec.js` | `FamilyMembersController` |
+| `TC-P-04` | 关系图 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-04` | — | 关系类型 CRUD/前端选择器 |
+| `TC-P-05` | 任务 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-05` | `e2e/roles/parent/../tasks` | `TaskController` |
+| `TC-P-06` | 任务审核 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-06` | — | `TaskController`/`PointsController` |
+| `TC-P-07` | 心愿 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-07` | `e2e/roles/parent/wish-management.spec.js` | `WishController`/`RewardController` |
+| `TC-P-08` | 能量 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-08` | `e2e/roles/parent/energy-dashboard.spec.js` | `EnergyController` |
+| `TC-P-09` | 测评订单 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-09` | `e2e/assessment-order-flow.spec.js` | `AssessmentAppointmentController` |
+| `TC-P-10` | 健康报告 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-10` | `e2e/dan-report-flow.spec.js` | 健康报告上传解析 |
+| `TC-P-11` | 报告查看 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-11` | — | 报告解析 |
+| `TC-P-12` | 饮食推荐 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-12` | — | 饮食推荐系统 |
+| `TC-P-13` | AI 方案 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-13` | `e2e/ai-plan-task-flow.spec.js` | AI 统一走 LangGraph;`AiGateway` |
+| `TC-P-14` | 方案提交 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-14` | — | 方案状态机 |
+| `TC-P-15` | 双角色 | 家长 | P0 | 权限 | `tests/test-cases/parent.md#TC-P-15` | `e2e/roles/parent/family-management.spec.js` | `POST /api/family/member/switch`(替代废弃 switch-mode);双角色铁律 |
+| `TC-P-16` | 会员 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-16` | `e2e/roles/parent/../membership` | `MembershipController`/`ProductOrderController` |
+| `TC-P-17` | 积分/成长 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-17` | `e2e/roles/parent/points.spec.js` | `PointsController`/`GrowthController` |
+| `TC-P-18` | AI 对话 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-18` | — | `AIChatController`;LangGraph RAG |
+| `TC-P-19` | 能量配置 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-19` | — | 维度配置 |
+| `TC-P-20` | 健康报告 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-20` | `e2e/dan-report-flow.spec.js` | 报告解析中台/`POST /api/media/upload` |
+| `TC-P-21` | 报告解析 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-21` | — | `/api/admin/report-parser/types` |
+| `TC-P-22` | 报告预览 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-22` | — | 解析中台 |
+| `TC-P-23` | 报告入库 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-23` | — | 解析中台 |
+| `TC-P-24` | 报告管理 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-24` | — | 报告管理 |
+| `TC-P-25` | 报告趋势 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-25` | — | 成长/报告 |
+| `TC-P-26` | 饮食推荐 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-26` | — | 饮食推荐系统 |
+| `TC-P-27` | 家庭食谱 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-27` | — | 饮食推荐/家庭食谱 |
+| `TC-P-28` | 食谱筛选 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-28` | — | 饮食推荐 |
+| `TC-P-29` | 食谱收藏 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-29` | — | 饮食推荐 |
+| `TC-P-30` | 食谱营养 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-30` | — | 饮食推荐 |
+| `TC-P-31` | 测评类型 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-31` | — | `DanAssessmentController` |
+| `TC-P-32` | 测评规划师 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-32` | — | 测评订单 |
+| `TC-P-33` | 测评下单 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-33` | `e2e/assessment-order-flow.spec.js` | `AssessmentOrder` |
+| `TC-P-34` | 测评支付 | 家长 | P1 | 接口 | `tests/test-cases/parent.md#TC-P-34` | — | 支付/`AssessmentQuota` |
+| `TC-P-35` | 测评额度 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-35` | — | `AssessmentQuota` |
+| `TC-P-36` | 测评预约 | 家长 | P0 | 接口 | `tests/test-cases/parent.md#TC-P-36` | `e2e/assessment-order-flow.spec.js` | `AssessmentAppointmentController` |
+| `TC-P-37` | 预约状态 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-37` | — | `AssessmentAppointmentController` |
+| `TC-P-38` | 预约取消 | 家长 | P0 | 权限 | `tests/test-cases/parent.md#TC-P-38` | — | `AssessmentAppointmentController` |
+| `TC-P-39` | DAN报告 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-39` | — | `DanAssessmentResultDTO` |
+| `TC-P-40` | AI方案 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-40` | `e2e/ai-plan-task-flow.spec.js` | `AIChatController`/`AiGateway` |
+| `TC-P-41` | 方案迭代 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-41` | — | `AIChatController` |
+| `TC-P-42` | 方案编辑 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-42` | — | 方案管理 |
+| `TC-P-43` | 方案查看 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-43` | — | 方案管理 |
+| `TC-P-44` | 方案确认 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-44` | — | 方案状态机 |
+| `TC-P-45` | 方案发布 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-45` | — | 方案管理 |
+| `TC-P-46` | 方案激活 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-46` | `e2e/ai-plan-task-flow.spec.js` | 方案激活任务分解 |
+| `TC-P-47` | 方案任务 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-47` | — | `GrowthPlanController` |
+| `TC-P-48` | 方案版本 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-48` | — | 方案管理 |
+| `TC-P-49` | AI对话 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-49` | — | `AIChatController` |
+| `TC-P-50` | 成长记录 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-50` | — | `GrowthController` |
+| `TC-P-51` | 成长里程碑 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-51` | — | `GrowthController` |
+| `TC-P-52` | 商城浏览 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-52` | `e2e/product-purchase.spec.js` | `MallController`/`danshop` |
+| `TC-P-53` | 商品详情 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-53` | — | `MallController` |
+| `TC-P-54` | 商城下单 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-54` | — | `MallController` |
+| `TC-P-55` | 订单支付 | 家长 | P1 | 接口 | `tests/test-cases/parent.md#TC-P-55` | — | 支付 |
+| `TC-P-56` | 订单退款 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-56` | — | 订单服务 |
+| `TC-P-57` | 优惠券 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-57` | — | 优惠券 |
+| `TC-P-58` | 会员购买 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-58` | `e2e/../membership` | `MemberController` |
+| `TC-P-59` | 会员权益 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-59` | — | `MemberController` |
+| `TC-P-60` | 会员续费 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-60` | — | `MemberController` |
+| `TC-P-61` | 联系人 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-61` | — | `ContactCard`/`contact-detail` |
+| `TC-P-62` | 联系人导入 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-62` | — | `ContactImport` |
+| `TC-P-63` | 联系人权限 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-63` | — | `ContactCard` |
+| `TC-P-64` | 个人资料 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-64` | — | `AuthController` |
+| `TC-P-65` | 通知设置 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-65` | — | 消息服务 |
+| `TC-P-66` | 隐私设置 | 家长 | P2 | 功能 | `tests/test-cases/parent.md#TC-P-66` | — | 隐私设置 |
+| `TC-P-67` | 报告代传/report-proxy | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-67` | — | 报告代传/report-proxy |
+| `TC-P-68` | 家庭天盘 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-68` | — | 家庭天盘 |
+| `TC-P-69` | 精准营养 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-69` | — | 精准营养 |
+| `TC-P-70` | 舌诊情绪识别 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-70` | — | 舌诊情绪识别 |
+| `TC-P-71` | AuthController | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-71` | — | AuthController |
+| `TC-P-72` | 数据导出(GDPR) | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-72` | — | 数据导出(GDPR) |
+| `TC-P-73` | 家庭/成员 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-73` | — | 家庭/成员 |
+| `TC-P-74` | 规划师绑定 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-74` | — | 规划师绑定 |
+| `TC-P-75` | 优惠券 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-75` | — | 优惠券 |
+| `TC-P-76` | 活动管理 | 家长 | P0 | 功能 | `tests/test-cases/parent.md#TC-P-76` | — | 活动管理 |
+| `TC-P-77` | 活动 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-77` | — | 活动 |
+| `TC-P-78` | 消息服务 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-78` | — | 消息服务 |
+| `TC-P-79` | 消息服务 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-79` | — | 消息服务 |
+| `TC-P-80` | 会员/订单 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-80` | — | 会员/订单 |
+| `TC-P-81` | 方案/任务 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-81` | — | 方案/任务 |
+| `TC-P-82` | 搜索 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-82` | — | 搜索 |
+| `TC-P-83` | 客服 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-83` | — | 客服 |
+| `TC-P-84` | 分享 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-84` | — | 分享 |
+| `TC-P-85` | AuthController | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-85` | — | AuthController |
+| `TC-P-86` | 勋章/排行 | 家长 | P1 | 功能 | `tests/test-cases/parent.md#TC-P-86` | — | 勋章/排行 |
+| `TC-P-01-E` | 家庭 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-01-E` | — | `FamilyInviteController` |
+| `TC-P-02-E` | 家庭/成员 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-02-E` | — | `FamilyInviteController` |
+| `TC-P-03-E` | 成员资料 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-03-E` | — | `FamilyMembersController` |
+| `TC-P-04-E` | 关系图 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-04-E` | — | 关系类型 CRUD/前端选择器 |
+| `TC-P-05-E` | 任务 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-05-E` | — | `TaskController` |
+| `TC-P-06-E` | 任务审核 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-06-E` | — | `TaskController`/`PointsController` |
+| `TC-P-07-E` | 心愿 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-07-E` | — | `WishController`/`RewardController` |
+| `TC-P-08-E` | 能量 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-08-E` | — | `EnergyController` |
+| `TC-P-09-E` | 测评订单 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-09-E` | — | `AssessmentAppointmentController` |
+| `TC-P-10-E` | 健康报告 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-10-E` | — | 健康报告上传解析 |
+| `TC-P-11-E` | 报告查看 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-11-E` | — | 报告解析 |
+| `TC-P-12-E` | 饮食推荐 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-12-E` | — | 饮食推荐系统 |
+| `TC-P-13-E` | AI 方案 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-13-E` | — | AI 统一走 LangGraph;`AiGateway` |
+| `TC-P-14-E` | 方案提交 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-14-E` | — | 方案状态机 |
+| `TC-P-15-E` | 双角色 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-15-E` | — | `POST /api/family/member/switch`(替代废弃 switch-mode);双角色铁律 |
+| `TC-P-16-E` | 会员 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-16-E` | — | `MembershipController`/`ProductOrderController` |
+| `TC-P-17-E` | 积分/成长 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-17-E` | — | `PointsController`/`GrowthController` |
+| `TC-P-18-E` | AI 对话 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-18-E` | — | `AIChatController`;LangGraph RAG |
+| `TC-P-19-E` | 能量配置 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-19-E` | — | 维度配置 |
+| `TC-P-20-E` | 健康报告 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-20-E` | — | 报告解析中台/`POST /api/media/upload` |
+| `TC-P-21-E` | 报告解析 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-21-E` | — | `/api/admin/report-parser/types` |
+| `TC-P-22-E` | 报告预览 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-22-E` | — | 解析中台 |
+| `TC-P-23-E` | 报告入库 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-23-E` | — | 解析中台 |
+| `TC-P-24-E` | 报告管理 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-24-E` | — | 报告管理 |
+| `TC-P-25-E` | 报告趋势 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-25-E` | — | 成长/报告 |
+| `TC-P-26-E` | 饮食推荐 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-26-E` | — | 饮食推荐系统 |
+| `TC-P-27-E` | 家庭食谱 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-27-E` | — | 饮食推荐/家庭食谱 |
+| `TC-P-28-E` | 食谱筛选 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-28-E` | — | 饮食推荐 |
+| `TC-P-29-E` | 食谱收藏 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-29-E` | — | 饮食推荐 |
+| `TC-P-30-E` | 食谱营养 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-30-E` | — | 饮食推荐 |
+| `TC-P-31-E` | 测评类型 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-31-E` | — | `DanAssessmentController` |
+| `TC-P-32-E` | 测评规划师 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-32-E` | — | 测评订单 |
+| `TC-P-33-E` | 测评下单 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-33-E` | — | `AssessmentOrder` |
+| `TC-P-34-E` | 测评支付 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-34-E` | — | 支付/`AssessmentQuota` |
+| `TC-P-35-E` | 测评额度 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-35-E` | — | `AssessmentQuota` |
+| `TC-P-36-E` | 测评预约 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-36-E` | — | `AssessmentAppointmentController` |
+| `TC-P-37-E` | 预约状态 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-37-E` | — | `AssessmentAppointmentController` |
+| `TC-P-38-E` | 预约取消 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-38-E` | — | `AssessmentAppointmentController` |
+| `TC-P-39-E` | DAN报告 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-39-E` | — | `DanAssessmentResultDTO` |
+| `TC-P-40-E` | AI方案 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-40-E` | — | `AIChatController`/`AiGateway` |
+| `TC-P-41-E` | 方案迭代 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-41-E` | — | `AIChatController` |
+| `TC-P-42-E` | 方案编辑 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-42-E` | — | 方案管理 |
+| `TC-P-43-E` | 方案查看 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-43-E` | — | 方案管理 |
+| `TC-P-44-E` | 方案确认 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-44-E` | — | 方案状态机 |
+| `TC-P-45-E` | 方案发布 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-45-E` | — | 方案管理 |
+| `TC-P-46-E` | 方案激活 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-46-E` | — | 方案激活任务分解 |
+| `TC-P-47-E` | 方案任务 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-47-E` | — | `GrowthPlanController` |
+| `TC-P-48-E` | 方案版本 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-48-E` | — | 方案管理 |
+| `TC-P-49-E` | AI对话 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-49-E` | — | `AIChatController` |
+| `TC-P-50-E` | 成长记录 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-50-E` | — | `GrowthController` |
+| `TC-P-51-E` | 成长里程碑 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-51-E` | — | `GrowthController` |
+| `TC-P-52-E` | 商城浏览 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-52-E` | — | `MallController`/`danshop` |
+| `TC-P-53-E` | 商品详情 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-53-E` | — | `MallController` |
+| `TC-P-54-E` | 商城下单 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-54-E` | — | `MallController` |
+| `TC-P-55-E` | 订单支付 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-55-E` | — | 支付 |
+| `TC-P-56-E` | 订单退款 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-56-E` | — | 订单服务 |
+| `TC-P-57-E` | 优惠券 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-57-E` | — | 优惠券 |
+| `TC-P-58-E` | 会员购买 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-58-E` | — | `MemberController` |
+| `TC-P-59-E` | 会员权益 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-59-E` | — | `MemberController` |
+| `TC-P-60-E` | 会员续费 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-60-E` | — | `MemberController` |
+| `TC-P-61-E` | 联系人 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-61-E` | — | `ContactCard`/`contact-detail` |
+| `TC-P-62-E` | 联系人导入 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-62-E` | — | `ContactImport` |
+| `TC-P-63-E` | 联系人权限 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-63-E` | — | `ContactCard` |
+| `TC-P-64-E` | 个人资料 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-64-E` | — | `AuthController` |
+| `TC-P-65-E` | 通知设置 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-65-E` | — | 消息服务 |
+| `TC-P-66-E` | 隐私设置 | 家长 | P3 | 异常 | `tests/test-cases/parent.md#TC-P-66-E` | — | 隐私设置 |
+| `TC-P-67-E` | 报告代传/report-proxy | 家长 | P1 | 异常 | `tests/test-cases/parent.md#TC-P-67-E` | — | 报告代传/report-proxy |
+| `TC-P-68-E` | 家庭天盘 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-68-E` | — | 家庭天盘 |
+| `TC-P-69-E` | 精准营养 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-69-E` | — | 精准营养 |
+| `TC-P-70-E` | 舌诊情绪识别 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-70-E` | — | 舌诊情绪识别 |
+| `TC-P-71-E` | AuthController | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-71-E` | — | AuthController |
+| `TC-P-72-E` | 数据导出(GDPR) | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-72-E` | — | 数据导出(GDPR) |
+| `TC-P-73-E` | 家庭/成员 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-73-E` | — | 家庭/成员 |
+| `TC-P-74-E` | 规划师绑定 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-74-E` | — | 规划师绑定 |
+| `TC-P-75-E` | 优惠券 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-75-E` | — | 优惠券 |
+| `TC-P-76-E` | 活动管理 | 家长 | P1 | 异常 | `tests/test-cases/parent.md#TC-P-76-E` | — | 活动管理 |
+| `TC-P-77-E` | 活动 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-77-E` | — | 活动 |
+| `TC-P-78-E` | 消息服务 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-78-E` | — | 消息服务 |
+| `TC-P-79-E` | 消息服务 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-79-E` | — | 消息服务 |
+| `TC-P-80-E` | 会员/订单 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-80-E` | — | 会员/订单 |
+| `TC-P-81-E` | 方案/任务 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-81-E` | — | 方案/任务 |
+| `TC-P-82-E` | 搜索 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-82-E` | — | 搜索 |
+| `TC-P-83-E` | 客服 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-83-E` | — | 客服 |
+| `TC-P-84-E` | 分享 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-84-E` | — | 分享 |
+| `TC-P-85-E` | AuthController | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-85-E` | — | AuthController |
+| `TC-P-86-E` | 勋章/排行 | 家长 | P2 | 异常 | `tests/test-cases/parent.md#TC-P-86-E` | — | 勋章/排行 |
+| `TC-P-01-P` | 家庭 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-01-P` | — | `FamilyInviteController` |
+| `TC-P-02-P` | 家庭/成员 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-02-P` | — | `FamilyInviteController` |
+| `TC-P-03-P` | 成员资料 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-03-P` | — | `FamilyMembersController` |
+| `TC-P-04-P` | 关系图 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-04-P` | — | 关系类型 CRUD/前端选择器 |
+| `TC-P-05-P` | 任务 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-05-P` | — | `TaskController` |
+| `TC-P-06-P` | 任务审核 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-06-P` | — | `TaskController`/`PointsController` |
+| `TC-P-07-P` | 心愿 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-07-P` | — | `WishController`/`RewardController` |
+| `TC-P-08-P` | 能量 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-08-P` | — | `EnergyController` |
+| `TC-P-09-P` | 测评订单 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-09-P` | — | `AssessmentAppointmentController` |
+| `TC-P-10-P` | 健康报告 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-10-P` | — | 健康报告上传解析 |
+| `TC-P-11-P` | 报告查看 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-11-P` | — | 报告解析 |
+| `TC-P-12-P` | 饮食推荐 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-12-P` | — | 饮食推荐系统 |
+| `TC-P-13-P` | AI 方案 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-13-P` | — | AI 统一走 LangGraph;`AiGateway` |
+| `TC-P-14-P` | 方案提交 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-14-P` | — | 方案状态机 |
+| `TC-P-15-P` | 双角色 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-15-P` | — | `POST /api/family/member/switch`(替代废弃 switch-mode);双角色铁律 |
+| `TC-P-16-P` | 会员 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-16-P` | — | `MembershipController`/`ProductOrderController` |
+| `TC-P-17-P` | 积分/成长 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-17-P` | — | `PointsController`/`GrowthController` |
+| `TC-P-18-P` | AI 对话 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-18-P` | — | `AIChatController`;LangGraph RAG |
+| `TC-P-19-P` | 能量配置 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-19-P` | — | 维度配置 |
+| `TC-P-20-P` | 健康报告 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-20-P` | — | 报告解析中台/`POST /api/media/upload` |
+| `TC-P-21-P` | 报告解析 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-21-P` | — | `/api/admin/report-parser/types` |
+| `TC-P-22-P` | 报告预览 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-22-P` | — | 解析中台 |
+| `TC-P-23-P` | 报告入库 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-23-P` | — | 解析中台 |
+| `TC-P-24-P` | 报告管理 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-24-P` | — | 报告管理 |
+| `TC-P-25-P` | 报告趋势 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-25-P` | — | 成长/报告 |
+| `TC-P-26-P` | 饮食推荐 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-26-P` | — | 饮食推荐系统 |
+| `TC-P-27-P` | 家庭食谱 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-27-P` | — | 饮食推荐/家庭食谱 |
+| `TC-P-28-P` | 食谱筛选 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-28-P` | — | 饮食推荐 |
+| `TC-P-29-P` | 食谱收藏 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-29-P` | — | 饮食推荐 |
+| `TC-P-30-P` | 食谱营养 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-30-P` | — | 饮食推荐 |
+| `TC-P-31-P` | 测评类型 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-31-P` | — | `DanAssessmentController` |
+| `TC-P-32-P` | 测评规划师 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-32-P` | — | 测评订单 |
+| `TC-P-33-P` | 测评下单 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-33-P` | — | `AssessmentOrder` |
+| `TC-P-34-P` | 测评支付 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-34-P` | — | 支付/`AssessmentQuota` |
+| `TC-P-35-P` | 测评额度 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-35-P` | — | `AssessmentQuota` |
+| `TC-P-36-P` | 测评预约 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-36-P` | — | `AssessmentAppointmentController` |
+| `TC-P-37-P` | 预约状态 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-37-P` | — | `AssessmentAppointmentController` |
+| `TC-P-38-P` | 预约取消 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-38-P` | — | `AssessmentAppointmentController` |
+| `TC-P-39-P` | DAN报告 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-39-P` | — | `DanAssessmentResultDTO` |
+| `TC-P-40-P` | AI方案 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-40-P` | — | `AIChatController`/`AiGateway` |
+| `TC-P-41-P` | 方案迭代 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-41-P` | — | `AIChatController` |
+| `TC-P-42-P` | 方案编辑 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-42-P` | — | 方案管理 |
+| `TC-P-43-P` | 方案查看 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-43-P` | — | 方案管理 |
+| `TC-P-44-P` | 方案确认 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-44-P` | — | 方案状态机 |
+| `TC-P-45-P` | 方案发布 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-45-P` | — | 方案管理 |
+| `TC-P-46-P` | 方案激活 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-46-P` | — | 方案激活任务分解 |
+| `TC-P-47-P` | 方案任务 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-47-P` | — | `GrowthPlanController` |
+| `TC-P-48-P` | 方案版本 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-48-P` | — | 方案管理 |
+| `TC-P-49-P` | AI对话 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-49-P` | — | `AIChatController` |
+| `TC-P-50-P` | 成长记录 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-50-P` | — | `GrowthController` |
+| `TC-P-51-P` | 成长里程碑 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-51-P` | — | `GrowthController` |
+| `TC-P-52-P` | 商城浏览 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-52-P` | — | `MallController`/`danshop` |
+| `TC-P-53-P` | 商品详情 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-53-P` | — | `MallController` |
+| `TC-P-54-P` | 商城下单 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-54-P` | — | `MallController` |
+| `TC-P-55-P` | 订单支付 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-55-P` | — | 支付 |
+| `TC-P-56-P` | 订单退款 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-56-P` | — | 订单服务 |
+| `TC-P-57-P` | 优惠券 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-57-P` | — | 优惠券 |
+| `TC-P-58-P` | 会员购买 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-58-P` | — | `MemberController` |
+| `TC-P-59-P` | 会员权益 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-59-P` | — | `MemberController` |
+| `TC-P-60-P` | 会员续费 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-60-P` | — | `MemberController` |
+| `TC-P-61-P` | 联系人 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-61-P` | — | `ContactCard`/`contact-detail` |
+| `TC-P-62-P` | 联系人导入 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-62-P` | — | `ContactImport` |
+| `TC-P-63-P` | 联系人权限 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-63-P` | — | `ContactCard` |
+| `TC-P-64-P` | 个人资料 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-64-P` | — | `AuthController` |
+| `TC-P-65-P` | 通知设置 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-65-P` | — | 消息服务 |
+| `TC-P-66-P` | 隐私设置 | 家长 | P2 | 权限 | `tests/test-cases/parent.md#TC-P-66-P` | — | 隐私设置 |
+| `TC-P-67-P` | 报告代传/report-proxy | 家长 | P0 | 权限 | `tests/test-cases/parent.md#TC-P-67-P` | — | 报告代传/report-proxy |
+| `TC-P-68-P` | 家庭天盘 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-68-P` | — | 家庭天盘 |
+| `TC-P-69-P` | 精准营养 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-69-P` | — | 精准营养 |
+| `TC-P-70-P` | 舌诊情绪识别 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-70-P` | — | 舌诊情绪识别 |
+| `TC-P-71-P` | AuthController | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-71-P` | — | AuthController |
+| `TC-P-72-P` | 数据导出(GDPR) | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-72-P` | — | 数据导出(GDPR) |
+| `TC-P-73-P` | 家庭/成员 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-73-P` | — | 家庭/成员 |
+| `TC-P-74-P` | 规划师绑定 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-74-P` | — | 规划师绑定 |
+| `TC-P-75-P` | 优惠券 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-75-P` | — | 优惠券 |
+| `TC-P-76-P` | 活动管理 | 家长 | P0 | 权限 | `tests/test-cases/parent.md#TC-P-76-P` | — | 活动管理 |
+| `TC-P-77-P` | 活动 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-77-P` | — | 活动 |
+| `TC-P-78-P` | 消息服务 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-78-P` | — | 消息服务 |
+| `TC-P-79-P` | 消息服务 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-79-P` | — | 消息服务 |
+| `TC-P-80-P` | 会员/订单 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-80-P` | — | 会员/订单 |
+| `TC-P-81-P` | 方案/任务 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-81-P` | — | 方案/任务 |
+| `TC-P-82-P` | 搜索 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-82-P` | — | 搜索 |
+| `TC-P-83-P` | 客服 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-83-P` | — | 客服 |
+| `TC-P-84-P` | 分享 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-84-P` | — | 分享 |
+| `TC-P-85-P` | AuthController | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-85-P` | — | AuthController |
+| `TC-P-86-P` | 勋章/排行 | 家长 | P1 | 权限 | `tests/test-cases/parent.md#TC-P-86-P` | — | 勋章/排行 |
+| `TC-P-N01` | 健康报告 | 家长 | P1 | 性能 | `tests/test-cases/parent.md#TC-P-N01` | — | 健康报告上传解析 |
+| `TC-P-N02` | AI 方案 | 家长 | P1 | 性能 | `tests/test-cases/parent.md#TC-P-N02` | e2e/ai-plan-task-flow | AiGateway/LangGraph |
+| `TC-P-N03` | 任务 | 家长 | P2 | 性能 | `tests/test-cases/parent.md#TC-P-N03` | — | TaskController |
+| `TC-P-N04` | 全局搜索 | 家长 | P2 | 性能 | `tests/test-cases/parent.md#TC-P-N04` | — | 搜索接口 |
+| `TC-P-N05` | 报告查看 | 家长 | P2 | 性能 | `tests/test-cases/parent.md#TC-P-N05` | — | 报告解析 |
+| `TC-P-N06` | 双角色 | 家长 | P1 | 兼容 | `tests/test-cases/parent.md#TC-P-N06` | e2e/family-management | 双角色铁律 |
+| `TC-P-N07` | 饮食推荐 | 家长 | P2 | 兼容 | `tests/test-cases/parent.md#TC-P-N07` | — | 饮食推荐 |
+| `TC-P-N08` | 设置 | 家长 | P2 | 兼容 | `tests/test-cases/parent.md#TC-P-N08` | — | 前端适配 |
+| `TC-P-N09` | 报告闭环 | 家长 | P0 | 安全 | `tests/test-cases/parent.md#TC-P-N09` | e2e/api/nonfunc-security.spec.js | 报告鉴权 |
+| `TC-P-N10` | AI 对话 | 家长 | P1 | 安全 | `tests/test-cases/parent.md#TC-P-N10` | e2e/api/nonfunc-security.spec.js | AIChatController |
+| `TC-P-N11` | 健康报告 | 家长 | P0 | 安全 | `tests/test-cases/parent.md#TC-P-N11` | e2e/api/nonfunc-security.spec.js | 上传校验 |
+| `TC-P-N12` | 双角色 | 家长 | P1 | 安全 | `tests/test-cases/parent.md#TC-P-N12` | — | switch 接口鉴权 |
+| `TC-P-N13` | 设置 | 家长 | P1 | 安全 | `tests/test-cases/parent.md#TC-P-N13` | — | 数据安全 |
+| `TC-T-01` | 认证/双角色 | 规划师 | P0 | 权限 | `tests/test-cases/teacher.md#TC-T-01` | `e2e/roles/teacher/login.spec.js` | `AuthController`;规划师可切回家长 |
+| `TC-T-02` | 家庭绑定 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-02` | `e2e/roles/teacher/family-binding.spec.js` | `FamilyInviteController` |
+| `TC-T-03` | 健康报告 | 规划师 | P0 | 功能 | `tests/test-cases/teacher.md#TC-T-03` | `e2e/roles/teacher/dan-report-flow.spec.js` | 报告上传解析;规划师代传 |
+| `TC-T-04` | 报告审核 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-04` | — | 报告审核 |
+| `TC-T-05` | 方案管理 | 规划师 | P0 | 功能 | `tests/test-cases/teacher.md#TC-T-05` | `e2e/admin-panel.spec.js`(参考) | 方案管理;黑盒回归项 |
+| `TC-T-06` | 方案审核 | 规划师 | P0 | 功能 | `tests/test-cases/teacher.md#TC-T-06` | — | 方案状态机 |
+| `TC-T-07` | 方案激活 | 规划师 | P0 | 功能 | `tests/test-cases/teacher.md#TC-T-07` | `e2e/ai-plan-task-flow.spec.js` | 激活拆任务 |
+| `TC-T-08` | 方案激活·幂等 | 规划师 | P0 | 异常 | `tests/test-cases/teacher.md#TC-T-08` | — | 幂等约束(黑盒回归) |
+| `TC-T-09` | 任务审核 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-09` | — | `TaskController` |
+| `TC-T-10` | 测评录入 | 规划师 | P0 | 功能 | `tests/test-cases/teacher.md#TC-T-10` | `e2e/assessment-order-flow.spec.js` | `AssessmentAppointmentController`/`DanAssessmentController` |
+| `TC-T-11` | 成长计划 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-11` | `e2e/guide-family-list.spec.js`(参考) | `GrowthPlanController`;黑盒回归 |
+| `TC-T-12` | 套餐 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-12` | — | `GuidePackageController` |
+| `TC-T-13` | 数据隔离 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-13` | — | 控制器内 role 检查 |
+| `TC-T-14` | 方案编辑 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-14` | — | 方案管理 |
+| `TC-T-15` | 套餐任务 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-15` | — | `GuidePackageController` |
+| `TC-T-16` | 健康总览 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-16` | — | 仪表板 |
+| `TC-T-17` | 计划进度 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-17` | — | `GrowthPlanController` |
+| `TC-T-18` | 批量任务 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-18` | — | `TaskController` |
+| `TC-T-19` | 消息推送 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-19` | — | 消息服务 |
+| `TC-T-20` | 退出/切换 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-20` | — | `AuthController` |
+| `TC-T-21` | 报告对比 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-21` | — | 报告管理 |
+| `TC-T-22` | 方案归档 | 规划师 | P2 | 功能 | `tests/test-cases/teacher.md#TC-T-22` | — | 方案管理 |
+| `TC-T-23` | 报告代传/report-proxy | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-23` | — | 报告代传/report-proxy |
+| `TC-T-24` | 规划师绑定 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-24` | — | 规划师绑定 |
+| `TC-T-25` | 舌诊情绪识别 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-25` | — | 舌诊情绪识别 |
+| `TC-T-26` | 精准营养 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-26` | — | 精准营养 |
+| `TC-T-27` | 家庭天盘 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-27` | — | 家庭天盘 |
+| `TC-T-28` | 内容安全 | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-28` | — | 内容安全 |
+| `TC-T-29` | 数据导出(GDPR) | 规划师 | P1 | 功能 | `tests/test-cases/teacher.md#TC-T-29` | — | 数据导出(GDPR) |
+| `TC-T-01-E` | 认证/双角色 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-01-E` | — | `AuthController`;规划师可切回家长 |
+| `TC-T-02-E` | 家庭绑定 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-02-E` | — | `FamilyInviteController` |
+| `TC-T-03-E` | 健康报告 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-03-E` | — | 报告上传解析;规划师代传 |
+| `TC-T-04-E` | 报告审核 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-04-E` | — | 报告审核 |
+| `TC-T-05-E` | 方案管理 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-05-E` | — | 方案管理;黑盒回归项 |
+| `TC-T-06-E` | 方案审核 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-06-E` | — | 方案状态机 |
+| `TC-T-07-E` | 方案激活 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-07-E` | — | 激活拆任务 |
+| `TC-T-08-E` | 方案激活·幂等 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-08-E` | — | 幂等约束(黑盒回归) |
+| `TC-T-09-E` | 任务审核 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-09-E` | — | `TaskController` |
+| `TC-T-10-E` | 测评录入 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-10-E` | — | `AssessmentAppointmentController`/`DanAssessmentController` |
+| `TC-T-11-E` | 成长计划 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-11-E` | — | `GrowthPlanController`;黑盒回归 |
+| `TC-T-12-E` | 套餐 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-12-E` | — | `GuidePackageController` |
+| `TC-T-13-E` | 数据隔离 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-13-E` | — | 控制器内 role 检查 |
+| `TC-T-14-E` | 方案编辑 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-14-E` | — | 方案管理 |
+| `TC-T-15-E` | 套餐任务 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-15-E` | — | `GuidePackageController` |
+| `TC-T-16-E` | 健康总览 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-16-E` | — | 仪表板 |
+| `TC-T-17-E` | 计划进度 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-17-E` | — | `GrowthPlanController` |
+| `TC-T-18-E` | 批量任务 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-18-E` | — | `TaskController` |
+| `TC-T-19-E` | 消息推送 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-19-E` | — | 消息服务 |
+| `TC-T-20-E` | 退出/切换 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-20-E` | — | `AuthController` |
+| `TC-T-21-E` | 报告对比 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-21-E` | — | 报告管理 |
+| `TC-T-22-E` | 方案归档 | 规划师 | P3 | 异常 | `tests/test-cases/teacher.md#TC-T-22-E` | — | 方案管理 |
+| `TC-T-23-E` | 报告代传/report-proxy | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-23-E` | — | 报告代传/report-proxy |
+| `TC-T-24-E` | 规划师绑定 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-24-E` | — | 规划师绑定 |
+| `TC-T-25-E` | 舌诊情绪识别 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-25-E` | — | 舌诊情绪识别 |
+| `TC-T-26-E` | 精准营养 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-26-E` | — | 精准营养 |
+| `TC-T-27-E` | 家庭天盘 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-27-E` | — | 家庭天盘 |
+| `TC-T-28-E` | 内容安全 | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-28-E` | — | 内容安全 |
+| `TC-T-29-E` | 数据导出(GDPR) | 规划师 | P2 | 异常 | `tests/test-cases/teacher.md#TC-T-29-E` | — | 数据导出(GDPR) |
+| `TC-T-01-P` | 认证/双角色 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-01-P` | — | `AuthController`;规划师可切回家长 |
+| `TC-T-02-P` | 家庭绑定 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-02-P` | — | `FamilyInviteController` |
+| `TC-T-03-P` | 健康报告 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-03-P` | — | 报告上传解析;规划师代传 |
+| `TC-T-04-P` | 报告审核 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-04-P` | — | 报告审核 |
+| `TC-T-05-P` | 方案管理 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-05-P` | — | 方案管理;黑盒回归项 |
+| `TC-T-06-P` | 方案审核 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-06-P` | — | 方案状态机 |
+| `TC-T-07-P` | 方案激活 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-07-P` | — | 激活拆任务 |
+| `TC-T-08-P` | 方案激活·幂等 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-08-P` | — | 幂等约束(黑盒回归) |
+| `TC-T-09-P` | 任务审核 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-09-P` | — | `TaskController` |
+| `TC-T-10-P` | 测评录入 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-10-P` | — | `AssessmentAppointmentController`/`DanAssessmentController` |
+| `TC-T-11-P` | 成长计划 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-11-P` | — | `GrowthPlanController`;黑盒回归 |
+| `TC-T-12-P` | 套餐 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-12-P` | — | `GuidePackageController` |
+| `TC-T-13-P` | 数据隔离 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-13-P` | — | 控制器内 role 检查 |
+| `TC-T-14-P` | 方案编辑 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-14-P` | — | 方案管理 |
+| `TC-T-15-P` | 套餐任务 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-15-P` | — | `GuidePackageController` |
+| `TC-T-16-P` | 健康总览 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-16-P` | — | 仪表板 |
+| `TC-T-17-P` | 计划进度 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-17-P` | — | `GrowthPlanController` |
+| `TC-T-18-P` | 批量任务 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-18-P` | — | `TaskController` |
+| `TC-T-19-P` | 消息推送 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-19-P` | — | 消息服务 |
+| `TC-T-20-P` | 退出/切换 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-20-P` | — | `AuthController` |
+| `TC-T-21-P` | 报告对比 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-21-P` | — | 报告管理 |
+| `TC-T-22-P` | 方案归档 | 规划师 | P2 | 权限 | `tests/test-cases/teacher.md#TC-T-22-P` | — | 方案管理 |
+| `TC-T-23-P` | 报告代传/report-proxy | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-23-P` | — | 报告代传/report-proxy |
+| `TC-T-24-P` | 规划师绑定 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-24-P` | — | 规划师绑定 |
+| `TC-T-25-P` | 舌诊情绪识别 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-25-P` | — | 舌诊情绪识别 |
+| `TC-T-26-P` | 精准营养 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-26-P` | — | 精准营养 |
+| `TC-T-27-P` | 家庭天盘 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-27-P` | — | 家庭天盘 |
+| `TC-T-28-P` | 内容安全 | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-28-P` | — | 内容安全 |
+| `TC-T-29-P` | 数据导出(GDPR) | 规划师 | P1 | 权限 | `tests/test-cases/teacher.md#TC-T-29-P` | — | 数据导出(GDPR) |
+| `TC-T-N01` | 健康报告 | 规划师 | P1 | 性能 | `tests/test-cases/teacher.md#TC-T-N01` | — | 报告解析中台 |
+| `TC-T-N02` | 方案审核 | 规划师 | P1 | 性能 | `tests/test-cases/teacher.md#TC-T-N02` | — | 方案状态机 |
+| `TC-T-N03` | 绑定家庭 | 规划师 | P2 | 性能 | `tests/test-cases/teacher.md#TC-T-N03` | — | 绑定家庭 |
+| `TC-T-N04` | 报告代传 | 规划师 | P1 | 兼容 | `tests/test-cases/teacher.md#TC-T-N04` | — | 代传入口 |
+| `TC-T-N05` | 健康报告 | 规划师 | P0 | 安全 | `tests/test-cases/teacher.md#TC-T-N05` | — | 规划师鉴权 |
+| `TC-T-N06` | 方案审核 | 规划师 | P0 | 安全 | `tests/test-cases/teacher.md#TC-T-N06` | — | 方案鉴权 |
+| `TC-T-N07` | 舌诊录入 | 规划师 | P1 | 安全 | `tests/test-cases/teacher.md#TC-T-N07` | — | 上传校验 |
+| `TC-T-N08` | 精准营养 | 规划师 | P1 | 安全 | `tests/test-cases/teacher.md#TC-T-N08` | — | 方案内容安全 |
+| `TC-S-01` | 入驻 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-01` | `e2e/roles/admin/vendor/management.spec.js` | `ServiceRoleApplicationController`/`AdminEcomSupplierController` |
+| `TC-S-02` | 商品 | 服务商 | P0 | 接口 | `tests/test-cases/vendor.md#TC-S-02` | `e2e/product-purchase.spec.js` | `ProductController`/`AdminProductController` |
+| `TC-S-03` | 订单 | 服务商 | P0 | 功能 | `tests/test-cases/vendor.md#TC-S-03` | — | `ProductOrderController` |
+| `TC-S-04` | 订单核销 | 服务商 | P0 | 功能 | `tests/test-cases/vendor.md#TC-S-04` | — | 订单服务 |
+| `TC-S-05` | 库存 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-05` | — | 库存服务 |
+| `TC-S-06` | 售后 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-06` | — | 售后 |
+| `TC-S-07` | 活动报名 | 服务商 | P2 | 功能 | `tests/test-cases/vendor.md#TC-S-07` | — | 活动管理 |
+| `TC-S-08` | 对账 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-08` | — | 结算 |
+| `TC-S-9` | 服务商集成/解析中台 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-9` | — | 服务商集成/解析中台 |
+| `TC-S-10` | 食谱库 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-10` | — | 食谱库 |
+| `TC-S-11` | 合规 | 服务商 | P1 | 功能 | `tests/test-cases/vendor.md#TC-S-11` | — | 合规 |
+| `TC-S-01-E` | 入驻 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-01-E` | — | `ServiceRoleApplicationController`/`AdminEcomSupplierController` |
+| `TC-S-02-E` | 商品 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-02-E` | — | `ProductController`/`AdminProductController` |
+| `TC-S-03-E` | 订单 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-03-E` | — | `ProductOrderController` |
+| `TC-S-04-E` | 订单核销 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-04-E` | — | 订单服务 |
+| `TC-S-05-E` | 库存 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-05-E` | — | 库存服务 |
+| `TC-S-06-E` | 售后 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-06-E` | — | 售后 |
+| `TC-S-07-E` | 活动报名 | 服务商 | P3 | 异常 | `tests/test-cases/vendor.md#TC-S-07-E` | — | 活动管理 |
+| `TC-S-08-E` | 对账 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-08-E` | — | 结算 |
+| `TC-S-9-E` | 服务商集成/解析中台 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-9-E` | — | 服务商集成/解析中台 |
+| `TC-S-10-E` | 食谱库 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-10-E` | — | 食谱库 |
+| `TC-S-11-E` | 合规 | 服务商 | P2 | 异常 | `tests/test-cases/vendor.md#TC-S-11-E` | — | 合规 |
+| `TC-S-01-P` | 入驻 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-01-P` | — | `ServiceRoleApplicationController`/`AdminEcomSupplierController` |
+| `TC-S-02-P` | 商品 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-02-P` | — | `ProductController`/`AdminProductController` |
+| `TC-S-03-P` | 订单 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-03-P` | — | `ProductOrderController` |
+| `TC-S-04-P` | 订单核销 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-04-P` | — | 订单服务 |
+| `TC-S-05-P` | 库存 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-05-P` | — | 库存服务 |
+| `TC-S-06-P` | 售后 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-06-P` | — | 售后 |
+| `TC-S-07-P` | 活动报名 | 服务商 | P2 | 权限 | `tests/test-cases/vendor.md#TC-S-07-P` | — | 活动管理 |
+| `TC-S-08-P` | 对账 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-08-P` | — | 结算 |
+| `TC-S-9-P` | 服务商集成/解析中台 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-9-P` | — | 服务商集成/解析中台 |
+| `TC-S-10-P` | 食谱库 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-10-P` | — | 食谱库 |
+| `TC-S-11-P` | 合规 | 服务商 | P1 | 权限 | `tests/test-cases/vendor.md#TC-S-11-P` | — | 合规 |
+| `TC-S-N01` | 商品 | 服务商 | P2 | 性能 | `tests/test-cases/vendor.md#TC-S-N01` | — | 商品管理 |
+| `TC-S-N02` | 订单履约 | 服务商 | P1 | 性能 | `tests/test-cases/vendor.md#TC-S-N02` | — | 订单服务 |
+| `TC-S-N03` | 入驻 | 服务商 | P2 | 兼容 | `tests/test-cases/vendor.md#TC-S-N03` | — | 服务商后台 |
+| `TC-S-N04` | 订单履约 | 服务商 | P0 | 安全 | `tests/test-cases/vendor.md#TC-S-N04` | — | 商户隔离 |
+| `TC-S-N05` | 报告解析接入 | 服务商 | P0 | 安全 | `tests/test-cases/vendor.md#TC-S-N05` | — | 上传校验 |
+| `TC-S-N06` | 营养食谱 | 服务商 | P1 | 安全 | `tests/test-cases/vendor.md#TC-S-N06` | — | 内容安全 |
+
+## 三、Playwright 端到端 / 集成测试(`tests/**/*.spec.js`)
+
+> 来源锚点 = `文件#用例标题`。用例标题列于 JSON(`inventory.json`)便于回写。
+
+| 文件 | 用例数 | 来源 |
+| --- | --- | --- |
+| `tests/e2e/_smoke_browser.spec.js` | 2 | `tests/e2e/_smoke_browser.spec.js` |
+| `tests/e2e/activity-registration.spec.js` | 5 | `tests/e2e/activity-registration.spec.js` |
+| `tests/e2e/admin-activity-review.spec.js` | 2 | `tests/e2e/admin-activity-review.spec.js` |
+| `tests/e2e/admin-butler-review.spec.js` | 6 | `tests/e2e/admin-butler-review.spec.js` |
+| `tests/e2e/admin-commission-config.spec.js` | 4 | `tests/e2e/admin-commission-config.spec.js` |
+| `tests/e2e/admin-ecom-supplier.spec.js` | 3 | `tests/e2e/admin-ecom-supplier.spec.js` |
+| `tests/e2e/admin-menu-survey.spec.js` | 2 | `tests/e2e/admin-menu-survey.spec.js` |
+| `tests/e2e/admin-panel.spec.js` | 4 | `tests/e2e/admin-panel.spec.js` |
+| `tests/e2e/admin-promotion-config.spec.js` | 2 | `tests/e2e/admin-promotion-config.spec.js` |
+| `tests/e2e/ai-plan-task-flow.spec.js` | 7 | `tests/e2e/ai-plan-task-flow.spec.js` |
+| `tests/e2e/api/api-smoke.spec.js` | 4 | `tests/e2e/api/api-smoke.spec.js` |
+| `tests/e2e/api/article-api.spec.js` | 7 | `tests/e2e/api/article-api.spec.js` |
+| `tests/e2e/api/contact-api.spec.js` | 6 | `tests/e2e/api/contact-api.spec.js` |
+| `tests/e2e/api/energy-api.spec.js` | 9 | `tests/e2e/api/energy-api.spec.js` |
+| `tests/e2e/api/family-member-api.spec.js` | 14 | `tests/e2e/api/family-member-api.spec.js` |
+| `tests/e2e/api/nonfunc-perf-compat.spec.js` | 5 | `tests/e2e/api/nonfunc-perf-compat.spec.js` |
+| `tests/e2e/api/nonfunc-security.spec.js` | 11 | `tests/e2e/api/nonfunc-security.spec.js` |
+| `tests/e2e/article-management.spec.js` | 5 | `tests/e2e/article-management.spec.js` |
+| `tests/e2e/assessment-appointment-functional.spec.js` | 7 | `tests/e2e/assessment-appointment-functional.spec.js` |
+| `tests/e2e/assessment-appointment.spec.js` | 6 | `tests/e2e/assessment-appointment.spec.js` |
+| `tests/e2e/assessment-order-flow.spec.js` | 5 | `tests/e2e/assessment-order-flow.spec.js` |
+| `tests/e2e/consignee-management.spec.js` | 8 | `tests/e2e/consignee-management.spec.js` |
+| `tests/e2e/contact-management.spec.js` | 4 | `tests/e2e/contact-management.spec.js` |
+| `tests/e2e/daily-checkin-streak.spec.js` | 9 | `tests/e2e/daily-checkin-streak.spec.js` |
+| `tests/e2e/dan-assessment-vendor-flow.spec.js` | 10 | `tests/e2e/dan-assessment-vendor-flow.spec.js` |
+| `tests/e2e/dan-report-flow.spec.js` | 9 | `tests/e2e/dan-report-flow.spec.js` |
+| `tests/e2e/debug-admin-spa.spec.js` | 1 | `tests/e2e/debug-admin-spa.spec.js` |
+| `tests/e2e/debug-control.spec.js` | 1 | `tests/e2e/debug-control.spec.js` |
+| `tests/e2e/debug-full-instrument.spec.js` | 1 | `tests/e2e/debug-full-instrument.spec.js` |
+| `tests/e2e/energy-rules-config.spec.js` | 4 | `tests/e2e/energy-rules-config.spec.js` |
+| `tests/e2e/energy-system.spec.js` | 8 | `tests/e2e/energy-system.spec.js` |
+| `tests/e2e/family-earnings-flow.spec.js` | 6 | `tests/e2e/family-earnings-flow.spec.js` |
+| `tests/e2e/family-member-management.spec.js` | 10 | `tests/e2e/family-member-management.spec.js` |
+| `tests/e2e/flora-microbiome-flow.spec.js` | 9 | `tests/e2e/flora-microbiome-flow.spec.js` |
+| `tests/e2e/growth-record-sync.spec.js` | 8 | `tests/e2e/growth-record-sync.spec.js` |
+| `tests/e2e/guide-family-list.spec.js` | 7 | `tests/e2e/guide-family-list.spec.js` |
+| `tests/e2e/health-knowledge-base.spec.js` | 4 | `tests/e2e/health-knowledge-base.spec.js` |
+| `tests/e2e/health-report-audit.spec.js` | 8 | `tests/e2e/health-report-audit.spec.js` |
+| `tests/e2e/mass-create-users.spec.js` | 1 | `tests/e2e/mass-create-users.spec.js` |
+| `tests/e2e/membership-system.spec.js` | 3 | `tests/e2e/membership-system.spec.js` |
+| `tests/e2e/mini-games-full.spec.js` | 5 | `tests/e2e/mini-games-full.spec.js` |
+| `tests/e2e/mini-games-playwright.spec.js` | 12 | `tests/e2e/mini-games-playwright.spec.js` |
+| `tests/e2e/mini-games.spec.js` | 14 | `tests/e2e/mini-games.spec.js` |
+| `tests/e2e/nutritionist-apply.spec.js` | 3 | `tests/e2e/nutritionist-apply.spec.js` |
+| `tests/e2e/nutritionist-flow.spec.js` | 10 | `tests/e2e/nutritionist-flow.spec.js` |
+| `tests/e2e/planner-bind-invite.spec.js` | 9 | `tests/e2e/planner-bind-invite.spec.js` |
+| `tests/e2e/points-system.spec.js` | 4 | `tests/e2e/points-system.spec.js` |
+| `tests/e2e/product-purchase.spec.js` | 9 | `tests/e2e/product-purchase.spec.js` |
+| `tests/e2e/publish-dimension-articles.spec.js` | 1 | `tests/e2e/publish-dimension-articles.spec.js` |
+| `tests/e2e/roles/admin/article/workflow.spec.js` | 4 | `tests/e2e/roles/admin/article/workflow.spec.js` |
+| `tests/e2e/roles/admin/login.spec.js` | 2 | `tests/e2e/roles/admin/login.spec.js` |
+| `tests/e2e/roles/admin/vendor/management.spec.js` | 2 | `tests/e2e/roles/admin/vendor/management.spec.js` |
+| `tests/e2e/roles/child/daily-checkin.spec.js` | 3 | `tests/e2e/roles/child/daily-checkin.spec.js` |
+| `tests/e2e/roles/child/login.spec.js` | 2 | `tests/e2e/roles/child/login.spec.js` |
+| `tests/e2e/roles/child/mini-games.spec.js` | 3 | `tests/e2e/roles/child/mini-games.spec.js` |
+| `tests/e2e/roles/parent/assessment-order.spec.js` | 6 | `tests/e2e/roles/parent/assessment-order.spec.js` |
+| `tests/e2e/roles/parent/energy-dashboard.spec.js` | 5 | `tests/e2e/roles/parent/energy-dashboard.spec.js` |
+| `tests/e2e/roles/parent/family-management.spec.js` | 8 | `tests/e2e/roles/parent/family-management.spec.js` |
+| `tests/e2e/roles/parent/points.spec.js` | 6 | `tests/e2e/roles/parent/points.spec.js` |
+| `tests/e2e/roles/parent/wish-management.spec.js` | 5 | `tests/e2e/roles/parent/wish-management.spec.js` |
+| `tests/e2e/roles/teacher/family-binding.spec.js` | 4 | `tests/e2e/roles/teacher/family-binding.spec.js` |
+| `tests/e2e/roles/teacher/login.spec.js` | 2 | `tests/e2e/roles/teacher/login.spec.js` |
+| `tests/e2e/teacher-dashboard.spec.js` | 10 | `tests/e2e/teacher-dashboard.spec.js` |
+| `tests/e2e/unified-audit-center.spec.js` | 8 | `tests/e2e/unified-audit-center.spec.js` |
+| `tests/e2e/vendor-onboarding.spec.js` | 3 | `tests/e2e/vendor-onboarding.spec.js` |
+| `tests/e2e/vendor-product-manage.spec.js` | 8 | `tests/e2e/vendor-product-manage.spec.js` |
+| `tests/e2e/wish-exchange-flow.spec.js` | 12 | `tests/e2e/wish-exchange-flow.spec.js` |
+| `tests/integration/mini-games-api.spec.js` | 13 | `tests/integration/mini-games-api.spec.js` |
+| `tests/integration/plan-chain.spec.js` | 10 | `tests/integration/plan-chain.spec.js` |
+| `tests/unit/games/1a2b.spec.js` | 1 | `tests/unit/games/1a2b.spec.js` |
+
+## 四、Python 测试(`cfc-langgraph/tests` · `tools/xaf_agent_hub/tests`)
+
+| 文件 | 用例数 | 来源 |
+| --- | --- | --- |
+| `cfc-langgraph/tests/qna/test_graph.py` | 4 | `cfc-langgraph/tests/qna/test_graph.py` |
+| `cfc-langgraph/tests/test_analyze.py` | 2 | `cfc-langgraph/tests/test_analyze.py` |
+| `cfc-langgraph/tests/test_auto_tag.py` | 5 | `cfc-langgraph/tests/test_auto_tag.py` |
+| `cfc-langgraph/tests/test_chat.py` | 1 | `cfc-langgraph/tests/test_chat.py` |
+| `cfc-langgraph/tests/test_graph.py` | 5 | `cfc-langgraph/tests/test_graph.py` |
+| `cfc-langgraph/tests/test_health_plan.py` | 13 | `cfc-langgraph/tests/test_health_plan.py` |
+| `cfc-langgraph/tests/test_intent.py` | 5 | `cfc-langgraph/tests/test_intent.py` |
+| `cfc-langgraph/tests/test_memory.py` | 3 | `cfc-langgraph/tests/test_memory.py` |
+| `cfc-langgraph/tests/test_recommend.py` | 3 | `cfc-langgraph/tests/test_recommend.py` |
+| `cfc-langgraph/tests/test_report_parse.py` | 5 | `cfc-langgraph/tests/test_report_parse.py` |
+| `cfc-langgraph/tests/test_tongue.py` | 1 | `cfc-langgraph/tests/test_tongue.py` |
+| `tools/xaf_agent_hub/tests/test_smart_cleanup.py` | 8 | `tools/xaf_agent_hub/tests/test_smart_cleanup.py` |
+
+## 五、Java 后端测试(`cfc-backend/src/test/java`)
+
+> 方法级覆盖矩阵(控制器 handler 命中情况)见 `discovery.md`。此处文件级编目,来源锚点 = 原 java 路径。
+
+| 测试文件 | 类型 | @Test数 | 目标类 | 来源 |
+| --- | --- | --- | --- | --- |
+| `cfc-backend/src/test/java/com/etotem/cfc/common/AdminRolesTest.java` | AdminRolesTest.java | 9 | AdminRoles | `cfc-backend/src/test/java/com/etotem/cfc/common/AdminRolesTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/common/TestRoles.java` | TestRoles.java | 0 | TestRoles.java | `cfc-backend/src/test/java/com/etotem/cfc/common/TestRoles.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/config/AttributionStage1FoundationTest.java` | AttributionStage1FoundationTest.java | 7 | AttributionStage1Foundation | `cfc-backend/src/test/java/com/etotem/cfc/config/AttributionStage1FoundationTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/config/DatabaseInitializerSeedTest.java` | DatabaseInitializerSeedTest.java | 6 | DatabaseInitializerSeed | `cfc-backend/src/test/java/com/etotem/cfc/config/DatabaseInitializerSeedTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/config/FamilyAccessInterceptorTest.java` | FamilyAccessInterceptorTest.java | 11 | FamilyAccessInterceptor | `cfc-backend/src/test/java/com/etotem/cfc/config/FamilyAccessInterceptorTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorLoginRequiredTest.java` | JwtInterceptorLoginRequiredTest.java | 5 | JwtInterceptorLoginRequired | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorLoginRequiredTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionControllerTest.java` | AttributionControllerTest.java | 1 | AttributionController | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionSurveyRoutingTest.java` | AttributionSurveyRoutingTest.java | 3 | AttributionSurveyRouting | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionSurveyRoutingTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` | HealthCheckinCfEarnCallSiteTest.java | 6 | HealthCheckinCfEarnCallSite | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` | HealthPlanDeleteControllerTest.java | 6 | HealthPlanDeleteController | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerProxyParseBindingTest.java` | HealthReportControllerProxyParseBindingTest.java | 6 | HealthReportControllerProxyParseBinding | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerProxyParseBindingTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorControllerTest.java` | IndicatorControllerTest.java | 2 | IndicatorController | `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorFavoriteControllerTest.java` | IndicatorFavoriteControllerTest.java | 10 | IndicatorFavoriteController | `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorFavoriteControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` | admin | 4 | AdminProductControllerBatchShelve | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` | admin | 3 | ReportParserAdminController | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | family | 4 | FamilyMembersControllerList | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/dto/ActivityDTOTest.java` | ActivityDTOTest.java | 3 | ActivityDTO | `cfc-backend/src/test/java/com/etotem/cfc/dto/ActivityDTOTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/DailyCheckinStreakFlowTest.java` | DailyCheckinStreakFlowTest.java | 6 | DailyCheckinStreakFlow | `cfc-backend/src/test/java/com/etotem/cfc/integration/DailyCheckinStreakFlowTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/EnergySystemFlowTest.java` | EnergySystemFlowTest.java | 7 | EnergySystemFlow | `cfc-backend/src/test/java/com/etotem/cfc/integration/EnergySystemFlowTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/GrowthRecordSyncFlowTest.java` | GrowthRecordSyncFlowTest.java | 10 | GrowthRecordSyncFlow | `cfc-backend/src/test/java/com/etotem/cfc/integration/GrowthRecordSyncFlowTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/GuideModuleIntegrationTest.java` | GuideModuleIntegrationTest.java | 4 | GuideModule | `cfc-backend/src/test/java/com/etotem/cfc/integration/GuideModuleIntegrationTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/PlannerBindInviteFlowTest.java` | PlannerBindInviteFlowTest.java | 9 | PlannerBindInviteFlow | `cfc-backend/src/test/java/com/etotem/cfc/integration/PlannerBindInviteFlowTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AIChatControllerTest.java` | controller | 17 | AIChatController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AIChatControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ActivityControllerTest.java` | controller | 16 | ActivityController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ActivityControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminFamilyOverviewControllerTest.java` | controller | 3 | AdminFamilyOverviewController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminFamilyOverviewControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminSpecialPriceControllerTest.java` | controller | 8 | AdminSpecialPriceController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminSpecialPriceControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleCategoryControllerTest.java` | controller | 3 | ArticleCategoryController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleCategoryControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleControllerTest.java` | controller | 11 | ArticleController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AuthControllerTest.java` | controller | 39 | AuthController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AuthControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DailyTaskControllerTest.java` | controller | 2 | DailyTaskController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DailyTaskControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionAdminControllerTest.java` | controller | 13 | DimensionAdminController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionAdminControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/FamilyControllerTest.java` | controller | 8 | FamilyController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/FamilyControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideFamilyTaskControllerTest.java` | controller | 20 | GuideFamilyTaskController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideFamilyTaskControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideOrderControllerTest.java` | controller | 8 | GuideOrderController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideOrderControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideRolePermissionTest.java` | controller | 21 | GuideRolePermission | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideRolePermissionTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideTeamControllerTest.java` | controller | 9 | GuideTeamController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideTeamControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/HealthDimensionControllerTest.java` | controller | 15 | HealthDimensionController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/HealthDimensionControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/PaymentControllerTest.java` | controller | 12 | PaymentController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/PaymentControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductControllerTest.java` | controller | 16 | ProductController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` | controller | 20 | ProductOrderController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/SpecialPriceControllerTest.java` | controller | 3 | SpecialPriceController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/SpecialPriceControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` | controller | 6 | StatsController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/WishControllerTest.java` | controller | 29 | WishController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/WishControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/mind/MindFortuneControllerTest.java` | controller | 1 | MindFortuneController | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/mind/MindFortuneControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityAdminServiceTest.java` | service | 10 | ActivityAdminService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityAdminServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityServicePublishTest.java` | service | 6 | ActivityServicePublish | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityServicePublishTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ArticleWorkflowTest.java` | service | 14 | ArticleWorkflow | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ArticleWorkflowTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ChallengeScoreServiceTest.java` | service | 4 | ChallengeScoreService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ChallengeScoreServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DailyOverviewServiceTest.java` | service | 1 | DailyOverviewService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DailyOverviewServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DanReportParseServiceTest.java` | service | 38 | DanReportParseService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DanReportParseServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DataMigrationServiceTest.java` | service | 11 | DataMigrationService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DataMigrationServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionEnergySyncServiceTest.java` | service | 5 | DimensionEnergySyncService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionEnergySyncServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionScoreServiceTest.java` | service | 21 | DimensionScoreService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionScoreServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyFoodOverviewServiceTest.java` | service | 9 | FamilyFoodOverviewService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyFoodOverviewServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FiveDimensionSelfCheckServiceTest.java` | service | 2 | FiveDimensionSelfCheckService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FiveDimensionSelfCheckServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodRecommendServiceTest.java` | service | 18 | FoodRecommendService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodRecommendServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodServiceTest.java` | service | 12 | FoodService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FortuneServiceTest.java` | service | 4 | FortuneService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FortuneServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideApplicationServiceTest.java` | service | 8 | GuideApplicationService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideApplicationServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideFamilyServiceTest.java` | service | 7 | GuideFamilyService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideFamilyServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideHierarchyServiceTest.java` | service | 10 | GuideHierarchyService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideHierarchyServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageServiceTest.java` | service | 13 | GuidePackageService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageTemplateServiceTest.java` | service | 6 | GuidePackageTemplateService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageTemplateServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/MiniGameServiceTest.java` | service | 5 | MiniGameService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/MiniGameServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/NutritionDeficiencyServiceTest.java` | service | 14 | NutritionDeficiencyService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/NutritionDeficiencyServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/PdfParseServiceTest.java` | service | 11 | PdfParseService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/PdfParseServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/RelationshipQuestionnaireServiceTest.java` | service | 5 | RelationshipQuestionnaireService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/RelationshipQuestionnaireServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ReportBlockAssemblerTest.java` | service | 6 | ReportBlockAssembler | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ReportBlockAssemblerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceContentServiceTest.java` | service | 6 | ServiceContentService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceContentServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceTypeServiceTest.java` | service | 4 | ServiceTypeService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceTypeServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/SupplySystemServiceTest.java` | service | 18 | SupplySystemService | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/SupplySystemServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TaskServiceMinigameTest.java` | service | 5 | TaskServiceMinigame | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TaskServiceMinigameTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TeacherLoginTest.java` | service | 4 | TeacherLogin | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TeacherLoginTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/service/impl/DimensionScoreServiceImplTest.java` | service | 6 | DimensionScoreServiceImpl | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/impl/DimensionScoreServiceImplTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationEngineTest.java` | OrchestrationEngineTest.java | 8 | OrchestrationEngine | `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationEngineTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationIntegrationTest.java` | OrchestrationIntegrationTest.java | 7 | Orchestration | `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationIntegrationTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` | ActivityOrderServiceTest.java | 15 | ActivityOrderService | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | ActivityRegistrationQuotaConcurrencyTest.java | 6 | ActivityRegistrationQuotaConcurrency | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/AiGatewayTimeoutTest.java` | AiGatewayTimeoutTest.java | 1 | AiGatewayTimeout | `cfc-backend/src/test/java/com/etotem/cfc/service/AiGatewayTimeoutTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleAudioServiceChunkFilterTest.java` | ArticleAudioServiceChunkFilterTest.java | 3 | ArticleAudioServiceChunkFilter | `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleAudioServiceChunkFilterTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | CfBalanceServiceTest.java | 25 | CfBalanceService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | CfCommissionServiceSettleTest.java | 12 | CfCommissionServiceSettle | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceTest.java` | CfCommissionServiceTest.java | 2 | CfCommissionService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfEarnDispatchServiceTest.java` | CfEarnDispatchServiceTest.java | 8 | CfEarnDispatchService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfEarnDispatchServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfGrowthPathwayEarnServiceTest.java` | CfGrowthPathwayEarnServiceTest.java | 16 | CfGrowthPathwayEarnService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfGrowthPathwayEarnServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerMigrationServiceTest.java` | CfLegacyLedgerMigrationServiceTest.java | 3 | CfLegacyLedgerMigrationService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerMigrationServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerWiringTest.java` | CfLegacyLedgerWiringTest.java | 5 | CfLegacyLedgerWiring | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerWiringTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfPathwayEarnServiceTest.java` | CfPathwayEarnServiceTest.java | 32 | CfPathwayEarnService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfPathwayEarnServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfReferralServiceSalesTierTest.java` | CfReferralServiceSalesTierTest.java | 11 | CfReferralServiceSalesTier | `cfc-backend/src/test/java/com/etotem/cfc/service/CfReferralServiceSalesTierTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfSpendDispatchServiceTest.java` | CfSpendDispatchServiceTest.java | 11 | CfSpendDispatchService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfSpendDispatchServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CfTransferServiceTest.java` | CfTransferServiceTest.java | 6 | CfTransferService | `cfc-backend/src/test/java/com/etotem/cfc/service/CfTransferServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionDistService410Test.java` | CommissionDistService410Test.java | 4 | CommissionDistService410 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionDistService410Test.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | CommissionServiceReferralF24Test.java | 5 | CommissionServiceReferralF24 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | ConsigneeServiceBackfillTest.java | 2 | ConsigneeServiceBackfill | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` | EnergyServiceFamilyTest.java | 2 | EnergyServiceFamily | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` | EnergyServiceWealthIncomeTest.java | 4 | EnergyServiceWealthIncome | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` | FamilyAdminOverviewServiceTest.java | 3 | FamilyAdminOverviewService | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | FamilyJoinRequestServiceReferrerBindTest.java | 5 | FamilyJoinRequestServiceReferrerBind | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` | FamilyPlatformPointsServiceCouponTest.java | 5 | FamilyPlatformPointsServiceCoupon | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceAuditConfirmTest.java` | HealthReportServiceAuditConfirmTest.java | 8 | HealthReportServiceAuditConfirm | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceAuditConfirmTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` | HealthReportServiceBackfillResilienceTest.java | 5 | HealthReportServiceBackfillResilience | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceIndicatorsTest.java` | HealthReportServiceIndicatorsTest.java | 3 | HealthReportServiceIndicators | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceIndicatorsTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceTest.java` | HealthReportServiceTest.java | 8 | HealthReportService | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` | IndicatorChangeServiceSemanticTest.java | 20 | IndicatorChangeServiceSemantic | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceTest.java` | IndicatorChangeServiceTest.java | 23 | IndicatorChangeService | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorCorrelationServiceTest.java` | IndicatorCorrelationServiceTest.java | 1 | IndicatorCorrelationService | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorCorrelationServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorFavoriteServiceTest.java` | IndicatorFavoriteServiceTest.java | 6 | IndicatorFavoriteService | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorFavoriteServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorMappingServiceTest.java` | IndicatorMappingServiceTest.java | 4 | IndicatorMappingService | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorMappingServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTimelineServiceTest.java` | IndicatorTimelineServiceTest.java | 12 | IndicatorTimelineService | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTimelineServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTrendServiceTest.java` | IndicatorTrendServiceTest.java | 9 | IndicatorTrendService | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTrendServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorValueMapperTest.java` | IndicatorValueMapperTest.java | 1 | IndicatorValueMapper | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorValueMapperTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipPaySwitchTest.java` | MembershipPaySwitchTest.java | 6 | MembershipPaySwitch | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipPaySwitchTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceTest.java` | MembershipServiceTest.java | 17 | MembershipService | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/NormalizeIndicatorPipelineTest.java` | NormalizeIndicatorPipelineTest.java | 3 | NormalizeIndicatorPipeline | `cfc-backend/src/test/java/com/etotem/cfc/service/NormalizeIndicatorPipelineTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/NumSoulCalculatorTest.java` | NumSoulCalculatorTest.java | 5 | NumSoulCalculator | `cfc-backend/src/test/java/com/etotem/cfc/service/NumSoulCalculatorTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/PaymentServiceORDRoutingTest.java` | PaymentServiceORDRoutingTest.java | 3 | PaymentServiceORDRouting | `cfc-backend/src/test/java/com/etotem/cfc/service/PaymentServiceORDRoutingTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/PlatformPointsServiceTest.java` | PlatformPointsServiceTest.java | 9 | PlatformPointsService | `cfc-backend/src/test/java/com/etotem/cfc/service/PlatformPointsServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/PointsExchangeServiceTest.java` | PointsExchangeServiceTest.java | 4 | PointsExchangeService | `cfc-backend/src/test/java/com/etotem/cfc/service/PointsExchangeServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderComboStockTest.java` | ProductOrderComboStockTest.java | 5 | ProductOrderComboStock | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderComboStockTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceFulfillmentMultiModeTest.java` | ProductOrderServiceFulfillmentMultiModeTest.java | 6 | ProductOrderServiceFulfillmentMultiMode | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceFulfillmentMultiModeTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceSpecialDealTest.java` | ProductOrderServiceSpecialDealTest.java | 8 | ProductOrderServiceSpecialDeal | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceSpecialDealTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceUpdateExpressFieldTest.java` | ProductOrderServiceUpdateExpressFieldTest.java | 3 | ProductOrderServiceUpdateExpressField | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceUpdateExpressFieldTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` | RealNameBackfillServiceTest.java | 8 | RealNameBackfillService | `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ReportAnalyzeQuotaServiceTest.java` | ReportAnalyzeQuotaServiceTest.java | 6 | ReportAnalyzeQuotaService | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportAnalyzeQuotaServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ReportDateExtractorTest.java` | ReportDateExtractorTest.java | 6 | ReportDateExtractor | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportDateExtractorTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ReportSummaryServiceCompletenessTest.java` | ReportSummaryServiceCompletenessTest.java | 1 | ReportSummaryServiceCompleteness | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportSummaryServiceCompletenessTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | SpecialPriceServiceTest.java | 9 | SpecialPriceService | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | TaskServiceCfEarnTest.java | 4 | TaskServiceCfEarn | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | TencentTtsServiceAuthorizationTest.java | 4 | TencentTtsServiceAuthorization | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/UserAddressServiceBackfillTest.java` | UserAddressServiceBackfillTest.java | 2 | UserAddressServiceBackfill | `cfc-backend/src/test/java/com/etotem/cfc/service/UserAddressServiceBackfillTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` | UserServiceEffectiveFamilyIdsTest.java | 5 | UserServiceEffectiveFamilyIds | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceFamilyNameLinkTest.java` | UserServiceFamilyNameLinkTest.java | 2 | UserServiceFamilyNameLink | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceFamilyNameLinkTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/WishServiceTest.java` | WishServiceTest.java | 4 | WishService | `cfc-backend/src/test/java/com/etotem/cfc/service/WishServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/WithdrawalServiceTest.java` | WithdrawalServiceTest.java | 6 | WithdrawalService | `cfc-backend/src/test/java/com/etotem/cfc/service/WithdrawalServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/impl/CfGrowthEarnCallSiteTest.java` | impl | 4 | CfGrowthEarnCallSite | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/CfGrowthEarnCallSiteTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` | impl | 4 | PurchaseServiceImplRenewal | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/task/OrderTimeoutCancelTaskSpecialDealTest.java` | OrderTimeoutCancelTaskSpecialDealTest.java | 3 | OrderTimeoutCancelTaskSpecialDeal | `cfc-backend/src/test/java/com/etotem/cfc/task/OrderTimeoutCancelTaskSpecialDealTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | TaskCheckinWebhookReminderTaskTest.java | 7 | TaskCheckinWebhookReminderTask | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | VirtualPayTimeoutTaskTest.java | 5 | VirtualPayTimeoutTask | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | ActivityAuditTest.java | 10 | ActivityAudit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` | ActivityRegistrationListTest.java | 3 | ActivityRegistrationList | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | ActivityRegistrationQuotaUnitTest.java | 8 | ActivityRegistrationQuotaUnit | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` | ActivityRegistrationRejectTest.java | 3 | ActivityRegistrationReject | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | ActivityTagServiceTest.java | 5 | ActivityTagService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` | ArticleAutoTagServiceTest.java | 8 | ArticleAutoTagService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` | ArticleBackfillTest.java | 2 | ArticleBackfill | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleRelatedServiceTest.java` | ArticleRelatedServiceTest.java | 6 | ArticleRelatedService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleRelatedServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` | AttributionAdjustServiceTest.java | 5 | AttributionAdjustService | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | AttributionPipelineMockTest.java | 2 | AttributionPipelineMock | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | AttributionPlanServiceTest.java | 2 | AttributionPlanService | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` | AttributionRedlinesTest.java | 8 | AttributionRedlines | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/BundlePricingCalculatorTest.java` | BundlePricingCalculatorTest.java | 9 | BundlePricingCalculator | `cfc-backend/src/test/java/com/etotem/cfc/unit/BundlePricingCalculatorTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/BundlePricingServiceTest.java` | BundlePricingServiceTest.java | 5 | BundlePricingService | `cfc-backend/src/test/java/com/etotem/cfc/unit/BundlePricingServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/CartServiceTest.java` | CartServiceTest.java | 3 | CartService | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | CfBalanceControllerTest.java | 8 | CfBalanceController | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | ConditionEvaluatorServiceTest.java | 12 | ConditionEvaluatorService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` | FamilyMemberDimensionBaseScoreServiceTest.java | 7 | FamilyMemberDimensionBaseScoreService | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | FamilyNamingSupportTest.java | 5 | FamilyNamingSupport | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | FiveDimensionScoreServiceTest.java | 12 | FiveDimensionScoreService | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyAccessGuardTest.java` | GuideFamilyAccessGuardTest.java | 9 | GuideFamilyAccessGuard | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyAccessGuardTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyQueryServiceTest.java` | GuideFamilyQueryServiceTest.java | 4 | GuideFamilyQueryService | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyQueryServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyServiceBindTest.java` | GuideFamilyServiceBindTest.java | 3 | GuideFamilyServiceBind | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyServiceBindTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuidePlanReviewControllerAuthTest.java` | GuidePlanReviewControllerAuthTest.java | 6 | GuidePlanReviewControllerAuth | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuidePlanReviewControllerAuthTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanDeleteCascadeTest.java` | HealthPlanDeleteCascadeTest.java | 6 | HealthPlanDeleteCascade | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanDeleteCascadeTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanLazyBackfillTest.java` | HealthPlanLazyBackfillTest.java | 5 | HealthPlanLazyBackfill | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanLazyBackfillTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanReviewGuardTest.java` | HealthPlanReviewGuardTest.java | 10 | HealthPlanReviewGuard | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanReviewGuardTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/KnowledgeBaseBackfillTest.java` | KnowledgeBaseBackfillTest.java | 9 | KnowledgeBaseBackfill | `cfc-backend/src/test/java/com/etotem/cfc/unit/KnowledgeBaseBackfillTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/MemberPriceResolverTest.java` | MemberPriceResolverTest.java | 6 | MemberPriceResolver | `cfc-backend/src/test/java/com/etotem/cfc/unit/MemberPriceResolverTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductDTOMappingTest.java` | ProductDTOMappingTest.java | 3 | ProductDTOMapping | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductDTOMappingTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductListNutritionTagFilterTest.java` | ProductListNutritionTagFilterTest.java | 2 | ProductListNutritionTagFilter | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductListNutritionTagFilterTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductOrderServiceTest.java` | ProductOrderServiceTest.java | 3 | ProductOrderService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductOrderServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductSkuComboServiceTest.java` | ProductSkuComboServiceTest.java | 5 | ProductSkuComboService | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductSkuComboServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductUpdateClearTest.java` | ProductUpdateClearTest.java | 5 | ProductUpdateClear | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductUpdateClearTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/RecommendationNutritionTagTest.java` | RecommendationNutritionTagTest.java | 1 | RecommendationNutritionTag | `cfc-backend/src/test/java/com/etotem/cfc/unit/RecommendationNutritionTagTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/RepeatTaskGeneratorPassThroughTest.java` | RepeatTaskGeneratorPassThroughTest.java | 3 | RepeatTaskGeneratorPassThrough | `cfc-backend/src/test/java/com/etotem/cfc/unit/RepeatTaskGeneratorPassThroughTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ReviewCenterSummaryTest.java` | ReviewCenterSummaryTest.java | 3 | ReviewCenterSummary | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReviewCenterSummaryTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | ServiceRoleApproveTest.java | 6 | ServiceRoleApprove | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleFilterTest.java` | ServiceRoleFilterTest.java | 3 | ServiceRoleFilter | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleFilterTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` | TaskPlanServiceTest.java | 4 | TaskPlanService | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskProgressUpdateTest.java` | TaskProgressUpdateTest.java | 3 | TaskProgressUpdate | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskProgressUpdateTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/util/CfFormulaEvaluatorTest.java` | CfFormulaEvaluatorTest.java | 8 | CfFormulaEvaluator | `cfc-backend/src/test/java/com/etotem/cfc/util/CfFormulaEvaluatorTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` | SpearmanUtilTest.java | 6 | SpearmanUtil | `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` |
+
+## 六、用户场景(`tests/user-scenarios/*.md`,上游输入)
+
+| 文件 | 来源 |
+| --- | --- |
+| `tests/user-scenarios/01-guest.md` | `tests/user-scenarios/01-guest.md` |
+| `tests/user-scenarios/02-parent.md` | `tests/user-scenarios/02-parent.md` |
+| `tests/user-scenarios/03-child.md` | `tests/user-scenarios/03-child.md` |
+| `tests/user-scenarios/04-teacher.md` | `tests/user-scenarios/04-teacher.md` |
+| `tests/user-scenarios/05-admin.md` | `tests/user-scenarios/05-admin.md` |
+| `tests/user-scenarios/06-vendor.md` | `tests/user-scenarios/06-vendor.md` |
+| `tests/user-scenarios/README.md` | `tests/user-scenarios/README.md` |
+| `tests/user-scenarios/应用场景总览.md` | `tests/user-scenarios/应用场景总览.md` |
+
+## 七、回写进展机制(不破坏原项目结构)
+
+进度**不写回** `tests/` 与 `cfc-backend/src/test/java` 下的原始测试文件,而是落在本地侧车:
+
+```json
+// .tdd/test-progress.json(与 config.json 同目录,本地不推送)
+{
+  "schema": "tdd-test-progress/v1",
+  "sources": [ { "anchor", "source_type", "source_path", "local_id", ...meta }, ... ],
+  "progress": { "<anchor>": { "status": "pass|fail|executed|blocked|untracked", "at": ISO, "by": "", "note": "" } }
+}
+```
+- `anchor` = `source_path#local_id`(如 `tests/test-cases/admin.md#TC-A-01`)。
+- 回写时仅更新 `progress[anchor]`;原始 `.md/.spec.js/.py` 一律不动,原项目结构零侵入。
+- 用 `test_inventory.py --emit-progress` 可(重新)播种 anchors(保留已有 progress)。