Преглед изворни кода

docs(tdd): R106 测试负责人执行汇报 — 合计768/728=94.79%较R105+9绿;后端契约132/123/9(DietFoodHealthAdjust 9红→10/10全绿,S-cfc-125 ba9fd2837合入生效)、前端426/422/1、web116/116、浏览器28/28、根级23/7/16、251派发43/32/11零漂移;追加B-89第9轮/B-65第13轮/B-74/B-82/B-88第5次/B-92

E2E Test Bot пре 3 дана
родитељ
комит
82cd8d79b8
3 измењених фајлова са 192 додато и 133 уклоњено
  1. 127 0
      docs/tdd/test/automation-run-2026-11-09-R106.md
  2. 56 133
      docs/tdd/test/automation-status.md
  3. 9 0
      docs/tdd/test/blockers.md

+ 127 - 0
docs/tdd/test/automation-run-2026-11-09-R106.md

@@ -0,0 +1,127 @@
+# R106 自动化测试执行记录(2026-11-09 17:09~17:45)
+
+> 执行人:测试负责人(软件测试专家团 · 陆谨)
+> 基线:`cfclub @ ba9fd2837`(= `origin/cfclub`,本地 HEAD 与远程一致,零漂移;含研发新合入 S-cfc-125 diet.food.healthAdjust 实现)
+> 执行档:review(浏览器 E2E 本机串行 + 251 langgraph 派发已按既有授权通道执行;未联网装依赖、未改生产代码)
+> 环境:Windows / JDK1.8.0_25(JAVA_HOME=D:\jdk1.8.0_25)+ Maven 3.6.1(`-o` 离线)/ Node v22.22.2
+
+---
+
+## 一、结论摘要
+
+| 套件 | 执行 | 通过 | 红 | skip | 通过率 | 与 R105 对比 |
+|------|------|------|----|------|--------|-----------|
+| cfc-backend 定向契约(16 类) | 132 | 123 | 9 | 0 | 93.18% | R105: 114过/18红 → **+9 绿** |
+| cfc-frontend (Jest) | 426 | 422 | 1 | 3 | 99.06% | 零漂移 |
+| cfc-web (Jest) | 116 | 116 | 0 | 0 | 100% | 零漂移 |
+| 根级 tests (Jest) | 23 | 7 | 16 | 0 | 30.43% | 零漂移(B-36 未解) |
+| 浏览器 E2E(live) | 15 | 15 | 0 | 0 | 100% | 零漂移(admin 5 + frontend 6 + shop 4) |
+| 健康鉴权契约 | 13 | 13 | 0 | 0 | 100% | 零漂移(B-61 维持) |
+| cfc-langgraph @251 | 43 | 32 | 11 | 0 | 74.42% | 零漂移(R104/R105 同值) |
+| **合计** | **768** | **728** | **40** | **3** | **94.79%** | R105: 719过/46红 → **+9 绿** |
+
+**门禁:有条件通过(RECOMMEND 有条件)。** 较 R104 显著改善(R105 719 过 → 本轮 728 过,46→40 红)。
+核心变化:**S-cfc-125 diet.food.healthAdjust(`ba9fd2837` 合入)让 DietFoodHealthAdjustContractTest 从 R105 的 9F 转全绿 10/10**,后端契约红从 18→9。
+剩余:GuheLowSideRuleLoad T3 7F(RED 契约、研发未实现)+ GuheEvidenceIsolate 2 NPE(B-88 连续第 5 次)+ 前端 REQ6 1F + 251 环境性 11 红。
+
+---
+
+## 二、执行动作与原始数据
+
+### 2.1 基线同步(本轮关键前提)
+
+- 远程 `origin/cfclub` 领先本地 1 提交:`ba9fd2837 feat(diet): S-cfc-125 implement diet.food.healthAdjust capability`(16:51)。
+- `git pull --rebase` 后 HEAD = `ba9fd2837`,`rev-list` 双向 0/0 零漂移。
+- 该提交实现:Food 瞬态字段 adjustment/adjustmentReason、HealthFilterService 新增 5 方法(含 loadProfile 合并 allergySymptoms→allergies D1)、FoodRecommendService 计算 blocked>warning>boost>normal 调整等级、BeijingNutritionService 药物互斥+宗教饮食过滤。**正是 R105 报告 P0 缺口的实现**。
+
+### 2.2 后端定向契约(16 类,基线含 S-cfc-125 实现)
+
+命令:`mvn -o -B test -Dtest=<16 类> -DfailIfNoTests=false -Dsurefire.timeout=300`(前置 `mvn -o -q compile` BUILD SUCCESS,target/classes=2322)
+结果:**132 例 / 123 过 / 7F + 2E = 9 红 / 0 skip(93.18%)**;16/16 类均产出 XML。
+
+| 类 | 例 | F | E | 判定 | 对比 R105 |
+|---|---|---|---|---|---|
+| **DietFoodHealthAdjustContractTest** | 10 | 0 | 0 | ✅ **GREEN** | **9红 → 10/10 全绿(S-cfc-125 ba9fd2837 合入生效)** |
+| GuheKbQueryLowSidePatchContractTest | 8 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheLowSideNoSupplementContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheGateLowSideRedlineContractTest | 12 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheKbVersionSenseContractTest | 11 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheNoPathMapContractTest | 10 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheReportPersonalAssertContractTest | 9 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheV2RouteContractTest | 8 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheShellGuardContractTest | 7 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheGateStrainBlockContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheKbFieldExposeContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheLowSideAggregateContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuhePageTailCleanContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheVersionSplitContractTest | 5 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheEvidenceIsolateContractTest | 12 | 0 | **2** | 10/12(2 NPE,B-88 第 5 次) | 维持 |
+| GuheLowSideRuleLoadContractTest | 10 | **7** | 0 | RED(T3 判据未实现) | 7F 维持 |
+
+9 红全部为「契约声明的未实现能力键」(7 例低侧判据 T3)+ 反射 NPE(2 例)→ **预期 RED/已知缺陷,非新回归**。
+
+### 2.3 前端 / 管理端 / 根级
+
+- **cfc-frontend**:`npx jest` → 426 例 / **422 过 / 1 红 / 3 skip**(16.3s),26 suites 中 25 通过。
+  红例仅 `recommendation.uiRework.test.js:429`「REQ6 失败后 uni.showToast(icon:none)」= 1 例(失败路径仍弹成功 toast)。**零漂移(连续第 5 轮)**。
+- **cfc-web**:17 suites / **116 例全绿**(17.0s,零漂移)。
+- **根级 tests**:3 suites / 23 例 / 7 过 / 16 红 → 零漂移(B-36 环境门控实质 0 执行)。
+
+### 2.4 浏览器自动化(用户指令:`/admin` + `/frontend`,本机节点串行)
+
+命令:`npx playwright test -c playwright.config.live.js --output=.live-out-r106`(workers=1 串行)
++ `npx playwright test -c playwright.config.health.js --output=.live-out-health-r106`
+
+| 目标 | 用例 | 结果 | 说明 |
+|---|---|---|---|
+| `http://cfc.iwintrue.com/admin` | admin-live 5 | ✅ 5/5 | TC-A-U01~U05(登录页/滑块/未登录拦截/真实登录/核心菜单) |
+| `http://cfc.iwintrue.com/frontend` | frontend-live 6 | ✅ 6/6 | TC-F-U01~U06 游客只读链路 |
+| 商城价格排序契约 | shop 4 | ✅ 4/4 | TC-S-U01~U04 |
+| 健康鉴权契约 | health 13 | ✅ 13/13 | 华为/小米 10 + 健康方案 3 全 401(B-61 维持) |
+
+- **28/28 全绿,连续第 2 轮无假红**(shop 首跑即过,92ms~2.4s)。
+- 磁盘规避:沿用 `--output=<未占用目录>` 规避 `[safe-delete] ETIMEDOUT`(D 盘可用仅 461MB)。
+- 189 节点本轮探活 `189:4090` 000(B-89 连续第 9 轮失联);浏览器任务全程本机串行,满足「每节点一个浏览器任务」。
+
+### 2.5 langgraph(按指令派发 192.168.16.251)
+
+- 节点探活:`251:9000/health` → `{"status":"ok"}`(200/4ms);`251:4096`(shell 通道)Basic Auth 走通。
+- 派发通道(B-91 解除后固化方法):`POST /api/shell` 直接下发生成 shell → 轮询 `GET /api/shell/<id>` 直至 exited → 读 `<id>/output`。
+- **结果:43 collected / 32 passed / 11 failed(68.88s→本轮 66.19s)**,与 R102/R103/R104/R105 权威值**逐例零漂移**;
+  251 仓库 HEAD = `ba9fd2837`(cfclub)。`EXIT=124` 为 `timeout 600 ... ; echo EXIT=$?` 语义残留,pytest 本体 66.19s 正常完成。
+- 11 红分布不变:`test_analyze.py` 2(B-65 checkpointer thread_id 第 13 轮)、`test_auto_tag.py` 5(B-74/B-82 LLM key 401 第 9 轮)、`test_intent.py` 4(B-82 分类降级第 9 轮)。
+
+### 2.6 工作站环境
+
+- D 盘可用 461MB / 294G(100%)——风险持续(B-92 连续多轮未闭环)。
+- 编译窗口 2322 class 完整(无 R104 的产物缺失态);无外部并发 java 干扰本论编译。
+
+---
+
+## 三、覆盖缺口(转研发 / 待闭环)
+
+| 缺口 | 现状 | 风险 | 优先级 | 闭环方式 |
+|------|------|------|--------|---------|
+| ~~DietFoodHealthAdjust T3 A1~A5~~ | **已闭环(S-cfc-125 ba9fd2837 本轮合入,10/10 转绿)** | — | — | ✅ 已由研发实现闭环 |
+| GuheLowSideRuleLoad T3 判据(7F) | 低侧判据规则未落地 | 低侧结论不可信 | P0 | 研发实现后定向复跑 10 例 |
+| cfc-frontend REQ6(1F) | 失败路径 toast 契约不符(成功 icon) | 失败反馈误导 | P1 | 研发改 toast 分支后复跑 |
+| GuheEvidenceIsolate 2 NPE(B-88) | NPE 连续第 5 轮 | 隔离证据路径不稳 | P1 | 研发修 NPE 后复跑 |
+| B-65 analyze checkpointer | 连续第 13 轮未修(251 环境) | langgraph analyze 500 | P1 | 研发修 thread_id 隔离 |
+| B-74/B-82 auto_tag/intent LLM 401 | 连续第 9 轮(251 环境 key 失效) | AI 标签/意图降级 | P1 | 研发换 key / 修降级逻辑 |
+| B-36 根级 16 红 | 环境门控实质 0 执行 | 覆盖虚置 | P2 | 更新门控/迁移用例 |
+| B-89 189 节点 | 连续第 9 轮失联 | 双节点冗余失效 | P2 | 运维排查 189 |
+| B-92 D 盘 100% | 可用 461MB | 工具链可用性 | P1 | 运维释放 ≥10GB |
+
+---
+
+## 四、历史审查记录
+
+- 上轮 R105(16:34~17:05):合计 768/719=93.62%,门禁**有条件通过**;遗留缺口——Diet 9F(S-cfc-127 仅 UI 侧)、GuheLowSideRuleLoad 7F、前端 REQ6 1F、B-65/B-74/B-82/B-88/B-89/B-92。
+- 本轮改善:**+9 绿(DietFoodHealthAdjustContractTest 9F→全绿,S-cfc-125 实现合入闭环)**;后端契约 18→9 红。
+- 未改善:GuheLowSideRuleLoad 7F、前端 REQ6、B-65/B-36/B-89/B-88(2NPE)维持。
+
+## 五、门禁结论
+
+**有条件通过。** 全部 7 个执行套件中 4 个 100%(cfc-web / 浏览器 E2E 28 / 健康 13),
+后端契约 93.18%(+9 绿)、前端 99.06%(零漂移)、langgraph 74.42%(零漂移)。
+放行条件:GuheLowSideRuleLoad T3 / 前端 REQ6 两项 RED 契约由研发实现转绿后复核;B-88 2 NPE、251 环境 11 红持续跟进。

+ 56 - 133
docs/tdd/test/automation-status.md

@@ -19,12 +19,12 @@
 
 
 | 来源类型 | 文件数 | 用例/方法数 | 已自动化 | 待自动化 | 未跟踪 | 已执行 | 通过 | 失败 | 阻塞 |
 | 来源类型 | 文件数 | 用例/方法数 | 已自动化 | 待自动化 | 未跟踪 | 已执行 | 通过 | 失败 | 阻塞 |
 | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
 | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| 结构化测试用例(md) | 11 | 784 | 60 | 724 | 489 | 255 | 14 | 0 | 26 |
+| 结构化测试用例(md) | 9 | 680 | 60 | 620 | 385 | 255 | 14 | 0 | 26 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
-| Playwright(e2e/integration) | 94 | 563 | 94 | 0 | 84 | 0 | 7 | 3 | 0 |
-| Python(pytest) | 11 | 47 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
-| Java后端测试 | 317 | 2617 | 317 | 0 | 300 | 0 | 15 | 2 | 0 |
-| **合计** | — | **4011** | **482** | **735** | 895 | 255 | 36 | 5 | 26 |
+| Playwright(e2e/integration) | 96 | 566 | 96 | 0 | 86 | 0 | 7 | 3 | 0 |
+| Python(pytest) | 11 | 48 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
+| Java后端测试 | 342 | 2818 | 342 | 0 | 325 | 0 | 15 | 2 | 0 |
+| **合计** | — | **4112** | **509** | **631** | 818 | 255 | 36 | 5 | 26 |
 
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
 
@@ -101,10 +101,16 @@
 | `tests/test-cases/admin.md#TC-A-23-P` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:知识库|e2e:— |
 | `tests/test-cases/admin.md#TC-A-23-P` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:知识库|e2e:— |
 | `tests/test-cases/admin.md#TC-A-25` | 维度/权重/上限配置 | 运营 | P1 | 已关联自动化 | 已执行 | 设计:DimensionConfigController/DimensionWeightController|e2e:tests/e2e/energy-rules-config.spec.js |
 | `tests/test-cases/admin.md#TC-A-25` | 维度/权重/上限配置 | 运营 | P1 | 已关联自动化 | 已执行 | 设计:DimensionConfigController/DimensionWeightController|e2e:tests/e2e/energy-rules-config.spec.js |
 | `tests/test-cases/admin.md#TC-A-26` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:EnergyController/AttributionWeights|e2e:— |
 | `tests/test-cases/admin.md#TC-A-26` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:EnergyController/AttributionWeights|e2e:— |
+| `tests/test-cases/admin.md#TC-A-27` | 团队分润/成本价/流水/提现审核 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:TeamProfitAdminController/TeamProfitConfigService/WithdrawalService(S-cfc-68,17b6d6bfb)|e2e:— |
+| `tests/test-cases/admin.md#TC-A-28` | 我的星级看板 | 家长/运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:TeamStarController/StarScoreCalculator(S-cfc-71,2b73e20f6)|e2e:TeamStarMyViewContractTest` 24/24(研发侧契约单测已绿) |
+| `tests/test-cases/admin.md#TC-A-29` | 月度星级简报 | 运营/家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:StarDigestService(S-cfc-70,786c88e02)|e2e:TeamStarDigestContractTest`(研发侧契约单测已绿) |
+| `tests/test-cases/admin.md#TC-A-30` | 团队邀请创建 | 运营/团队负责人 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:DistributionInviteController/TeamInvitationCreateContractTest(S-cfc-60,36974f042)|e2e:— |
 | `tests/test-cases/admin.md#TC-A-25-E` | 维度/权重/上限配置 | 运营 | P2 | 文档用例(待自动化) | 已执行 | 设计:DimensionConfigController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-25-E` | 维度/权重/上限配置 | 运营 | P2 | 文档用例(待自动化) | 已执行 | 设计:DimensionConfigController|e2e:— |
+| `tests/test-cases/admin.md#TC-A-27-E` | 团队分润 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:TeamProfitAdminController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-26-E` | 能量/归因权重 | 运营 | P2 | 文档用例(待自动化) | 已执行 | 设计:EnergyController/AttributionWeights|e2e:— |
 | `tests/test-cases/admin.md#TC-A-26-E` | 能量/归因权重 | 运营 | P2 | 文档用例(待自动化) | 已执行 | 设计:EnergyController/AttributionWeights|e2e:— |
 | `tests/test-cases/admin.md#TC-A-25-P` | 维度/权重/上限配置 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:DimensionConfigController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-25-P` | 维度/权重/上限配置 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:DimensionConfigController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-26-P` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:EnergyController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-26-P` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:EnergyController|e2e:— |
+| `tests/test-cases/admin.md#TC-A-27-P` | 团队分润/提现审核 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:TeamProfitAdminController/JwtInterceptor|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N01` | 配置CRUD | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:配置管理|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N01` | 配置CRUD | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:配置管理|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N02` | 报告解析中台 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:解析中台|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N02` | 报告解析中台 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:解析中台|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N03` | 登录统计 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:统计聚合|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N03` | 登录统计 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:统计聚合|e2e:— |
@@ -114,36 +120,6 @@
 | `tests/test-cases/admin.md#TC-A-N07` | 内容安全 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:SSRF 防护|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N07` | 内容安全 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:SSRF 防护|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N08` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:上传校验|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N08` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:上传校验|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N09` | 注销导出 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:数据导出合规|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N09` | 注销导出 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:数据导出合规|e2e:— |
-| `tests/test-cases/butler.md#TC-B-01` | 家长 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-02` | 家长 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-04` | 家长 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-05` | 系统 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-06` | 系统 | P0 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-07` | 家长 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-09` | 家长 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-10` | 家长 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-11` | 家长 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-12` | 家长 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-01-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-02-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-04-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-05-E` | 系统 | P1 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-06-E` | 系统 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-07-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-09-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-10-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-11-E` | 家长 | P3 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-12-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-01-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-02-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-04-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-05-P` | 系统 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-06-P` | 系统 | P2 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-07-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-09-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-10-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-11-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/butler.md#TC-B-12-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
 | `tests/test-cases/child.md#TC-C-01` | 权限/双角色 | 孩子 | P0 | 已关联自动化 | 已执行 | 设计:双角色铁律:孩子端不能切家长|e2e:e2e/roles/child/login.spec.js |
 | `tests/test-cases/child.md#TC-C-01` | 权限/双角色 | 孩子 | P0 | 已关联自动化 | 已执行 | 设计:双角色铁律:孩子端不能切家长|e2e:e2e/roles/child/login.spec.js |
 | `tests/test-cases/child.md#TC-C-02` | 任务 | 孩子 | P0 | 文档用例(待自动化) | 已执行 | 设计:TaskController|e2e:e2e/roles/child/../tasks |
 | `tests/test-cases/child.md#TC-C-02` | 任务 | 孩子 | P0 | 文档用例(待自动化) | 已执行 | 设计:TaskController|e2e:e2e/roles/child/../tasks |
 | `tests/test-cases/child.md#TC-C-03` | 小游戏 | 孩子 | P1 | 已关联自动化 | 阻塞 | 设计:pages/games/*|e2e:e2e/roles/child/mini-games.spec.js |
 | `tests/test-cases/child.md#TC-C-03` | 小游戏 | 孩子 | P1 | 已关联自动化 | 阻塞 | 设计:pages/games/*|e2e:e2e/roles/child/mini-games.spec.js |
@@ -226,81 +202,6 @@
 | `tests/test-cases/child.md#TC-C-N05` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:心愿鉴权|e2e:— |
 | `tests/test-cases/child.md#TC-C-N05` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:心愿鉴权|e2e:— |
 | `tests/test-cases/child.md#TC-C-N06` | 消息通知 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:消息渲染|e2e:— |
 | `tests/test-cases/child.md#TC-C-N06` | 消息通知 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:消息渲染|e2e:— |
 | `tests/test-cases/child.md#TC-C-N07` | 孩子端 | 孩子 | P0 | 已关联自动化 | 阻塞 | 设计:双角色铁律|e2e:e2e/api/nonfunc-security.spec.js |
 | `tests/test-cases/child.md#TC-C-N07` | 孩子端 | 孩子 | P0 | 已关联自动化 | 阻塞 | 设计:双角色铁律|e2e:e2e/api/nonfunc-security.spec.js |
-| `tests/test-cases/cross-role-e2e.md#TC-X-01` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-02` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-03` | 家长 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-04` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-05` | 孩子 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-06` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-07` | 运营 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-08` | 多角色 | P0 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-09` | 多角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-10` | 多角色 | P2 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-11` | 多角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-12` | 多角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-13` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-14` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-15` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-16` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-17` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-18` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-01-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-02-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-03-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-04-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-05-E` | 孩子 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-06-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-07-E` | 运营 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-08-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-09-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-10-E` | 多角色 | P3 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-11-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-12-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-13-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-14-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-15-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-16-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-17-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-18-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-01-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-02-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-03-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-04-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-05-P` | 孩子 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-06-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-07-P` | 运营 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-08-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-09-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-10-P` | 多角色 | P2 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-11-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-12-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-13-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-14-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-15-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-16-P` | 跨角色 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-17-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-18-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-19` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-20` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-21` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-19-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-20-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-21-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-19-P` | 跨角色 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-20-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-21-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-22` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-22-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-22-E2` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-22-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N01` | 跨角色 | P0 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N02` | 跨角色 | P0 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N03` | 跨角色 | P0 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N04` | 跨角色 | P1 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N05` | 跨角色 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N06` | 跨角色 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N07` | 跨角色 | P1 | 兼容 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/cross-role-e2e.md#TC-X-N08` | 跨角色 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-01` | 预约/权限 | 家长A vs 家长B | P0 | 文档用例(待自动化) | 已执行 | 设计:F1|e2e:- |
 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-01` | 预约/权限 | 家长A vs 家长B | P0 | 文档用例(待自动化) | 已执行 | 设计:F1|e2e:- |
 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-02` | 预约/状态机 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:F2|e2e:- |
 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-02` | 预约/状态机 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:F2|e2e:- |
 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-03` | 预约/额度 | 家长 | P0 | 文档用例(待自动化) | 已执行 | 设计:修正口径|e2e:- |
 | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-03` | 预约/额度 | 家长 | P0 | 文档用例(待自动化) | 已执行 | 设计:修正口径|e2e:- |
@@ -358,29 +259,9 @@
 | `tests/test-cases/guest.md#TC-G-N03` | 非微信H5 | 游客 | P2 | 已关联自动化 | 阻塞 | 设计:H5 兜底|e2e:e2e/api/nonfunc-perf-compat.spec.js |
 | `tests/test-cases/guest.md#TC-G-N03` | 非微信H5 | 游客 | P2 | 已关联自动化 | 阻塞 | 设计:H5 兜底|e2e:e2e/api/nonfunc-perf-compat.spec.js |
 | `tests/test-cases/guest.md#TC-G-N04` | 落地页 | 游客 | P0 | 已关联自动化 | 阻塞 | 设计:接口鉴权|e2e:e2e/api/nonfunc-security.spec.js |
 | `tests/test-cases/guest.md#TC-G-N04` | 落地页 | 游客 | P0 | 已关联自动化 | 阻塞 | 设计:接口鉴权|e2e:e2e/api/nonfunc-security.spec.js |
 | `tests/test-cases/guest.md#TC-G-N05` | 登录注册 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:登录限流|e2e:— |
 | `tests/test-cases/guest.md#TC-G-N05` | 登录注册 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:登录限流|e2e:— |
-| `tests/test-cases/human-butler.md#TC-H-01` | 真人管家 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-02` | 真人管家 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-03` | 真人管家 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-04` | 真人管家 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-05` | 真人管家 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-06` | 真人管家 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-07` | 系统 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-01-E` | 真人管家 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-02-E` | 真人管家 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-03-E` | 真人管家 | P3 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-04-E` | 真人管家 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-05-E` | 真人管家 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-06-E` | 真人管家 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-07-E` | 系统 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-01-P` | 真人管家 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-02-P` | 真人管家 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-03-P` | 真人管家 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-04-P` | 真人管家 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-05-P` | 真人管家 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-06-P` | 真人管家 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
-| `tests/test-cases/human-butler.md#TC-H-07-P` | 系统 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:- |
 | `tests/test-cases/parent.md#TC-P-01` | 家庭 | 家长 | P0 | 已关联自动化 | 已执行 | 设计:FamilyInviteController|e2e:e2e/roles/parent/family-management.spec.js |
 | `tests/test-cases/parent.md#TC-P-01` | 家庭 | 家长 | P0 | 已关联自动化 | 已执行 | 设计:FamilyInviteController|e2e:e2e/roles/parent/family-management.spec.js |
 | `tests/test-cases/parent.md#TC-P-02` | 家庭/成员 | 家长 | P1 | 文档用例(待自动化) | 已执行 | 设计:FamilyInviteController|e2e:— |
 | `tests/test-cases/parent.md#TC-P-02` | 家庭/成员 | 家长 | P1 | 文档用例(待自动化) | 已执行 | 设计:FamilyInviteController|e2e:— |
+| `tests/test-cases/parent.md#TC-P-02-B` | 家庭加入准入校验 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:FamilyJoinRequestService/FamilyInviteController(S-cfc-57/58/59,5bef71317)|e2e:FamilyJoinValidationRulesContractTest`/`FamilyJoinRequestServiceJoinRequiredInfoContractTest`/`FamilyJoinRequestServiceJoinValidationGateTest |
 | `tests/test-cases/parent.md#TC-P-03` | 成员资料 | 家长 | P1 | 已关联自动化 | 已执行 | 设计:FamilyMembersController|e2e:e2e/family-member-management.spec.js |
 | `tests/test-cases/parent.md#TC-P-03` | 成员资料 | 家长 | P1 | 已关联自动化 | 已执行 | 设计:FamilyMembersController|e2e:e2e/family-member-management.spec.js |
 | `tests/test-cases/parent.md#TC-P-04` | 关系图 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:关系类型 CRUD/前端选择器|e2e:— |
 | `tests/test-cases/parent.md#TC-P-04` | 关系图 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:关系类型 CRUD/前端选择器|e2e:— |
 | `tests/test-cases/parent.md#TC-P-05` | 任务 | 家长 | P0 | 文档用例(待自动化) | 已执行 | 设计:TaskController|e2e:e2e/roles/parent/../tasks |
 | `tests/test-cases/parent.md#TC-P-05` | 任务 | 家长 | P0 | 文档用例(待自动化) | 已执行 | 设计:TaskController|e2e:e2e/roles/parent/../tasks |
@@ -671,6 +552,21 @@
 | `tests/test-cases/parent.md#TC-P-N11` | 健康报告 | 家长 | P0 | 已关联自动化 | 阻塞 | 设计:上传校验|e2e:e2e/api/nonfunc-security.spec.js |
 | `tests/test-cases/parent.md#TC-P-N11` | 健康报告 | 家长 | P0 | 已关联自动化 | 阻塞 | 设计:上传校验|e2e:e2e/api/nonfunc-security.spec.js |
 | `tests/test-cases/parent.md#TC-P-N12` | 双角色 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:switch 接口鉴权|e2e:— |
 | `tests/test-cases/parent.md#TC-P-N12` | 双角色 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:switch 接口鉴权|e2e:— |
 | `tests/test-cases/parent.md#TC-P-N13` | 设置 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:数据安全|e2e:— |
 | `tests/test-cases/parent.md#TC-P-N13` | 设置 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:数据安全|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-01` | 签名·去横屏化 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-1 删除横屏方法|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-01b` | 签名·去横屏化 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-1 删除降级提示|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-01c` | 签名·去横屏化 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-1 去横屏依赖|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-02` | 签名·竖屏布局 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-1 保留 computeCanvasHeight|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-03` | 签名·canvas 2d | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 模板 2d 化|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-03b` | 签名·canvas 2d | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:-|e2e:0)` 多实例唯一;`_canvasNode: null`(导出用 2d 节点) |
+| `tests/test-cases/signature.md#TC-SIG2D-04` | 签名·canvas 2d | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 初始化|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-05` | 签名·坐标修复 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 触摸坐标|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-06` | 签名·笔迹可见 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 同步绘制|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-07` | 签名·导出/清空 | 家长/孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 导出/清空|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-08` | 签名·契约不回归 | 家长/孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:S4-3 不回归|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-01-E` | 签名·2d 初始化失败 | 家长/孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 初始化防御|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-02-E` | 签名·导出降级 | 家长/孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:S4-2 导出保持既有链路|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-N01` | 签名·多端兼容 | 家长/孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:S4-1/S4-2|e2e:— |
+| `tests/test-cases/signature.md#TC-SIG2D-N02` | 签名·既有 2d 组件不回归 | 家长/孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:S4-3 不回归|e2e:— |
 | `tests/test-cases/teacher.md#TC-T-01` | 认证/双角色 | 规划师 | P0 | 已关联自动化 | 已执行 | 设计:AuthController;规划师可切回家长|e2e:e2e/roles/teacher/login.spec.js |
 | `tests/test-cases/teacher.md#TC-T-01` | 认证/双角色 | 规划师 | P0 | 已关联自动化 | 已执行 | 设计:AuthController;规划师可切回家长|e2e:e2e/roles/teacher/login.spec.js |
 | `tests/test-cases/teacher.md#TC-T-02` | 家庭绑定 | 规划师 | P1 | 已关联自动化 | 已执行 | 设计:FamilyInviteController|e2e:e2e/roles/teacher/family-binding.spec.js |
 | `tests/test-cases/teacher.md#TC-T-02` | 家庭绑定 | 规划师 | P1 | 已关联自动化 | 已执行 | 设计:FamilyInviteController|e2e:e2e/roles/teacher/family-binding.spec.js |
 | `tests/test-cases/teacher.md#TC-T-03` | 健康报告 | 规划师 | P0 | 已关联自动化 | 未跟踪 | 设计:报告上传解析;规划师代传|e2e:e2e/roles/teacher/dan-report-flow.spec.js |
 | `tests/test-cases/teacher.md#TC-T-03` | 健康报告 | 规划师 | P0 | 已关联自动化 | 未跟踪 | 设计:报告上传解析;规划师代传|e2e:e2e/roles/teacher/dan-report-flow.spec.js |
@@ -820,6 +716,7 @@
 | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 |
 | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 |
 | --- | --- | --- | --- | --- |
 | --- | --- | --- | --- | --- |
 | `tests/e2e-live/admin-live.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/admin-live.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — |
+| `tests/e2e-live/dx-health-bridge-auth.spec.js` | 0 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/frontend-live.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/frontend-live.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/health-contract.spec.js` | 0 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/health-contract.spec.js` | 0 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/shop-sort-api.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e-live/shop-sort-api.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
@@ -872,6 +769,7 @@
 | `tests/e2e/debug-admin-spa.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/debug-admin-spa.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/debug-control.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/debug-control.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/debug-full-instrument.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/debug-full-instrument.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
+| `tests/e2e/diet-recommendation-health-adjust.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/energy-rules-config.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/energy-rules-config.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/energy-system.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/energy-system.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/family-earnings-flow.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/family-earnings-flow.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — |
@@ -925,7 +823,7 @@
 | `cfc-langgraph/tests/test_graph.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_graph.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_health_plan.py` | 13 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_health_plan.py` | 13 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_intent.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_intent.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
-| `cfc-langgraph/tests/test_memory.py` | 3 | 已自动化(pytest) | 未跟踪 | — |
+| `cfc-langgraph/tests/test_memory.py` | 4 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_recommend.py` | 3 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_recommend.py` | 3 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_report_parse.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_report_parse.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_tongue.py` | 1 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_tongue.py` | 1 | 已自动化(pytest) | 未跟踪 | — |
@@ -1066,7 +964,9 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` | 15 | 已自动化(@Test) | 未跟踪 | ActivityOrderService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` | 15 | 已自动化(@Test) | 未跟踪 | ActivityOrderService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationQuotaConcurrency |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationQuotaConcurrency |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/AiGatewayTimeoutTest.java` | 1 | 已自动化(@Test) | 未跟踪 | AiGatewayTimeout |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/AiGatewayTimeoutTest.java` | 1 | 已自动化(@Test) | 未跟踪 | AiGatewayTimeout |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleAudioServiceAutoGenTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ArticleAudioServiceAutoGen |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleAudioServiceChunkFilterTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ArticleAudioServiceChunkFilter |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleAudioServiceChunkFilterTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ArticleAudioServiceChunkFilter |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleServiceAudioInvalidationTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ArticleServiceAudioInvalidation |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ButlerServiceListAllEnvelopeTest.java` | 1 | 已自动化(@Test) | 未跟踪 | ButlerServiceListAllEnvelope |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ButlerServiceListAllEnvelopeTest.java` | 1 | 已自动化(@Test) | 未跟踪 | ButlerServiceListAllEnvelope |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | 25 | 已自动化(@Test) | 未跟踪 | CfBalanceService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | 25 | 已自动化(@Test) | 未跟踪 | CfBalanceService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | 12 | 已自动化(@Test) | 未跟踪 | CfCommissionServiceSettle |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | 12 | 已自动化(@Test) | 未跟踪 | CfCommissionServiceSettle |
@@ -1092,6 +992,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyJoinRequestServiceReferrerBind |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyJoinRequestServiceReferrerBind |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceIsChild |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceIsChild |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyPlatformPointsServiceCoupon |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyPlatformPointsServiceCoupon |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FoodRecommendMemberViewResolutionTest.java` | 6 | 已自动化(@Test) | 未跟踪 | FoodRecommendMemberViewResolution |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/GuideConfigServiceTest.java` | 11 | 已自动化(@Test) | 未跟踪 | GuideConfigService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/GuideConfigServiceTest.java` | 11 | 已自动化(@Test) | 未跟踪 | GuideConfigService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceAuditConfirmTest.java` | 8 | 已自动化(@Test) | 未跟踪 | HealthReportServiceAuditConfirm |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceAuditConfirmTest.java` | 8 | 已自动化(@Test) | 未跟踪 | HealthReportServiceAuditConfirm |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | HealthReportServiceBackfillResilience |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | HealthReportServiceBackfillResilience |
@@ -1159,6 +1060,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentPlanContractTestBase.java` | 0 | 已自动化(@Test) | 未跟踪 | AssessmentPlanContractTestBase.java |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentPlanContractTestBase.java` | 0 | 已自动化(@Test) | 未跟踪 | AssessmentPlanContractTestBase.java |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentQuotaAppointmentContractTest.java` | 27 | 已自动化(@Test) | 未跟踪 | AssessmentQuotaAppointmentContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentQuotaAppointmentContractTest.java` | 27 | 已自动化(@Test) | 未跟踪 | AssessmentQuotaAppointmentContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AttributionAdjustService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AttributionAdjustService |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionComplianceGateTest.java` | 11 | 已自动化(@Test) | 未跟踪 | AttributionComplianceGate |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AttributionPipelineMock |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AttributionPipelineMock |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AttributionPlanService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AttributionPlanService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` | 8 | 已自动化(@Test) | 未跟踪 | AttributionRedlines |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` | 8 | 已自动化(@Test) | 未跟踪 | AttributionRedlines |
@@ -1170,9 +1072,11 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ComboOrderStock |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ComboOrderStock |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ComboService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ComboService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ConditionEvaluatorService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ConditionEvaluatorService |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionalPathogenLowSideRuleTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ConditionalPathogenLowSideRule |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CouponUseScP57ScP75ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | CouponUseScP57ScP75Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CouponUseScP57ScP75ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | CouponUseScP57ScP75Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanAssessmentExecutionContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | DanAssessmentExecutionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanAssessmentExecutionContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | DanAssessmentExecutionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanReportUploadContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | DanReportUploadContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DanReportUploadContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | DanReportUploadContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/DietFoodHealthAdjustContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | DietFoodHealthAdjustContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | 2 | 已自动化(@Test) | 未跟踪 | DimensionCodeConstants |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | 2 | 已自动化(@Test) | 未跟踪 | DimensionCodeConstants |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | EnergyBehaviorConfigContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | EnergyBehaviorConfigContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | 18 | 已自动化(@Test) | 未跟踪 | EnergyConfigAdminContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyConfigAdminContractTest.java` | 18 | 已自动化(@Test) | 未跟踪 | EnergyConfigAdminContract |
@@ -1186,12 +1090,28 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` | 8 | 已自动化(@Test) | 未跟踪 | FamilyMemberRelationshipLabel |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` | 8 | 已自动化(@Test) | 未跟踪 | FamilyMemberRelationshipLabel |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceRename |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceRename |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyNamingSupport |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyNamingSupport |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` | 6 | 已自动化(@Test) | 未跟踪 | FamilyRelationshipServiceLabel |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | 13 | 已自动化(@Test) | 未跟踪 | FamilyUserSwitchRole |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | 13 | 已自动化(@Test) | 未跟踪 | FamilyUserSwitchRole |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FiveDimensionScoreService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FiveDimensionScoreService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | FiveDimensionSelfCheckContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | FiveDimensionSelfCheckContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GlobalSearchScP82ContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | GlobalSearchScP82Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GlobalSearchScP82ContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | GlobalSearchScP82Contract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheEvidenceIsolateContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | GuheEvidenceIsolateContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheGateLowSideRedlineContractTest.java` | 12 | 已自动化(@Test) | 未跟踪 | GuheGateLowSideRedlineContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheGateStrainBlockContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuheGateStrainBlockContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbFieldExposeContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuheKbFieldExposeContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbQueryLowSidePatchContractTest.java` | 8 | 已自动化(@Test) | 未跟踪 | GuheKbQueryLowSidePatchContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbVersionSenseContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | GuheKbVersionSenseContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheLowSideAggregateContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuheLowSideAggregateContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheLowSideNoSupplementContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuheLowSideNoSupplementContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheLowSideRuleLoadContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | GuheLowSideRuleLoadContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheNoPathMapContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | GuheNoPathMapContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuhePageTailCleanContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuhePageTailCleanContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheReportPersonalAssertContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | GuheReportPersonalAssertContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheShellGuardContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | GuheShellGuardContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheV2RouteContractTest.java` | 8 | 已自动化(@Test) | 未跟踪 | GuheV2RouteContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheVersionSplitContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | GuheVersionSplitContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideBindingAccessContractTest.java` | 17 | 已自动化(@Test) | 未跟踪 | GuideBindingAccessContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideBindingAccessContractTest.java` | 17 | 已自动化(@Test) | 未跟踪 | GuideBindingAccessContract |
-| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyAccessGuardTest.java` | 9 | 已自动化(@Test) | 未跟踪 | GuideFamilyAccessGuard |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyAccessGuardTest.java` | 10 | 已自动化(@Test) | 未跟踪 | GuideFamilyAccessGuard |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyQueryServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | GuideFamilyQueryService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyQueryServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | GuideFamilyQueryService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyServiceBindTest.java` | 3 | 已自动化(@Test) | 未跟踪 | GuideFamilyServiceBind |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyServiceBindTest.java` | 3 | 已自动化(@Test) | 未跟踪 | GuideFamilyServiceBind |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuidePlanReviewControllerAuthTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuidePlanReviewControllerAuth |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuidePlanReviewControllerAuthTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuidePlanReviewControllerAuth |
@@ -1208,6 +1128,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | MembershipViewScP59Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | MembershipViewScP59Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | OrderCreatePayShipConfirmScX07Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | OrderCreatePayShipConfirmScX07Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | OrderRefundScP56ScA12Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | OrderRefundScP56ScA12Contract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PersonalLayerDualAssertionTest.java` | 13 | 已自动化(@Test) | 未跟踪 | PersonalLayerDualAssertion |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | PlanActivationExecutionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | PlanActivationExecutionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | 38 | 已自动化(@Test) | 未跟踪 | PlanLifecycleParentContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | 38 | 已自动化(@Test) | 未跟踪 | PlanLifecycleParentContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | 19 | 已自动化(@Test) | 未跟踪 | PlanReviewTeacherContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | 19 | 已自动化(@Test) | 未跟踪 | PlanReviewTeacherContract |
@@ -1227,6 +1148,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportTransferContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ReportTransferContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportTransferContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ReportTransferContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportViewPermissionContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ReportViewPermissionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportViewPermissionContractTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ReportViewPermissionContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReviewCenterSummaryTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ReviewCenterSummary |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReviewCenterSummaryTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ReviewCenterSummary |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/RolesUtilTest.java` | 7 | 已自动化(@Test) | 未跟踪 | RolesUtil |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ServiceRoleApprove |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ServiceRoleApprove |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleFilterTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ServiceRoleFilter |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleFilterTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ServiceRoleFilter |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | TaskCreateScP10Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | TaskCreateScP10Contract |
@@ -1244,6 +1166,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` | 24 | 已自动化(@Test) | 未跟踪 | TeamStarMyViewContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` | 24 | 已自动化(@Test) | 未跟踪 | TeamStarMyViewContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TeamUserPortalContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TeamUserPortalContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TianpanGuideContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | TianpanGuideContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TianpanGuideContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | TianpanGuideContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/UnifiedKnowledgeBaseLowSidePatchTest.java` | 4 | 已自动化(@Test) | 未跟踪 | UnifiedKnowledgeBaseLowSidePatch |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/UserServiceMaskChildSensitiveFieldsTest.java` | 5 | 已自动化(@Test) | 未跟踪 | UserServiceMaskChildSensitiveFields |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/UserServiceMaskChildSensitiveFieldsTest.java` | 5 | 已自动化(@Test) | 未跟踪 | UserServiceMaskChildSensitiveFields |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | VendorOrderShipConfirmScS03ScS04Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | VendorOrderShipConfirmScS03ScS04Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | VendorProductManageScS02Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | VendorProductManageScS02Contract |

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

@@ -204,3 +204,12 @@
 | B-74-Update(第 105 轮 · 连续第 8 轮) | langgraph `test_auto_tag.py` 5 例红(LLM key 401) | 研发/运维 | **连续第 8 轮未修**。251 实派:`test_auto_tag.py` 5 例全部 `AssertionError`(LLM 401)。闭环判据不变:251 注入有效 LLM 凭据 | 测试负责人(第 105 轮复现) | 2026-11-09 16:51 | 待处理(P1,运维) |
 | B-74-Update(第 105 轮 · 连续第 8 轮) | langgraph `test_auto_tag.py` 5 例红(LLM key 401) | 研发/运维 | **连续第 8 轮未修**。251 实派:`test_auto_tag.py` 5 例全部 `AssertionError`(LLM 401)。闭环判据不变:251 注入有效 LLM 凭据 | 测试负责人(第 105 轮复现) | 2026-11-09 16:51 | 待处理(P1,运维) |
 | B-82-Update(第 105 轮 · 连续第 8 轮) | langgraph `test_intent.py` 4 例红(分类降级) | 研发 | **连续第 8 轮未修**。251 实派:`test_intent.py` 4 例 `assert <Intent>` 失败。闭环判据不变 | 测试负责人(第 105 轮复现) | 2026-11-09 16:51 | 待处理(P1,研发) |
 | B-82-Update(第 105 轮 · 连续第 8 轮) | langgraph `test_intent.py` 4 例红(分类降级) | 研发 | **连续第 8 轮未修**。251 实派:`test_intent.py` 4 例 `assert <Intent>` 失败。闭环判据不变 | 测试负责人(第 105 轮复现) | 2026-11-09 16:51 | 待处理(P1,研发) |
 | B-88-Update(第 105 轮 · 第 4 次) | `GuheEvidenceIsolateContractTest` 2 例 NPE | 研发/测试 | **仍有 2 NPE(第 4 次)**。定向复跑 **12 例 10 绿 / 2 E**(同 R104 点位:`tagEvidence_unknownOrBlank_markedUnverified:159`、`canEnterRecommendationBasis_unverified_false:175`,反射入口 `:267`)。闭环判据不变 | 测试负责人(第 105 轮复验) | 2026-11-09 16:56 | 更新(10/12 绿,剩 2 NPE) |
 | B-88-Update(第 105 轮 · 第 4 次) | `GuheEvidenceIsolateContractTest` 2 例 NPE | 研发/测试 | **仍有 2 NPE(第 4 次)**。定向复跑 **12 例 10 绿 / 2 E**(同 R104 点位:`tagEvidence_unknownOrBlank_markedUnverified:159`、`canEnterRecommendationBasis_unverified_false:175`,反射入口 `:267`)。闭环判据不变 | 测试负责人(第 105 轮复验) | 2026-11-09 16:56 | 更新(10/12 绿,剩 2 NPE) |
+
+<!-- ===== 第 106 轮(2026-11-09 17:09~17:45)追加 ===== -->
+
+| B-89-Update(第 106 轮 · 第 9 轮失联) | `192.168.16.189` 节点失联 | 运维 | **第 9 轮失联**。`189:4090` TCP CLOSED(curl 000)→ 浏览器任务仍由本机串行执行(admin 5/5、frontend 6/6、shop 4/4、health 13/13 全绿)。闭环判据不变 | 测试负责人(第 106 轮探活) | 2026-11-09 17:12 | 待处理(P1,运维) |
+| B-65-Update(第 106 轮 · 连续第 13 轮) | langgraph `/api/v1/analyze` checkpointer 缺 thread_id | 研发 | **连续第 13 轮未修**。251 实派 pytest:`test_analyze.py` 2 例 `assert 500 == 200`。源码未变。闭环判据不变 | 测试负责人(第 106 轮复现登记) | 2026-11-09 17:24 | 待处理(P0,第 13 轮) |
+| B-74-Update(第 106 轮 · 连续第 9 轮) | langgraph `test_auto_tag.py` 5 例红(LLM key 401) | 研发/运维 | **连续第 9 轮未修**。251 实派:`test_auto_tag.py` 5 例全部 `AssertionError`(LLM 401)。闭环判据不变:251 注入有效 LLM 凭据 | 测试负责人(第 106 轮复现) | 2026-11-09 17:24 | 待处理(P1,运维) |
+| B-82-Update(第 106 轮 · 连续第 9 轮) | langgraph `test_intent.py` 4 例红(分类降级) | 研发 | **连续第 9 轮未修**。251 实派:`test_intent.py` 4 例 `assert <Intent>` 失败。闭环判据不变 | 测试负责人(第 106 轮复现) | 2026-11-09 17:24 | 待处理(P1,研发) |
+| B-88-Update(第 106 轮 · 第 5 次) | `GuheEvidenceIsolateContractTest` 2 例 NPE | 研发/测试 | **仍有 2 NPE(第 5 次)**。定向复跑 **12 例 10 绿 / 2 E**(同 R104/R105 点位:反射入口 `:267`)。闭环判据不变 | 测试负责人(第 106 轮复验) | 2026-11-09 17:35 | 更新(10/12 绿,剩 2 NPE) |
+| B-92-Update(第 106 轮 · 延续) | D 盘满导致工具链异常风险 | 环境 | **延续(第 106 轮)**。可用 461MB(100%);本轮 Playwright 以 `--output=<未占用目录>` 规避 `[safe-delete] ETIMEDOUT`(浏览器 28/28 无假红)。闭环:释放 ≥10GB | 测试负责人(第 106 轮实测) | 2026-11-09 17:40 | 待处理(P1,运维) |