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

docs(tdd): 测试负责人第82轮汇报 + B-61第4轮P0催办 + B-59时序观察 + 台账刷新(admin 5/5复跑转绿、shop 4/4瞬态502复跑转绿、frontend 6/6、jest双绿342+90、lg 26/43持平、S-cfc-61/62/43编译通过)

E2E Test Bot 4 дней назад
Родитель
Сommit
a08ec88db8

+ 89 - 0
docs/tdd/orchestration/report-test-2026-11-08-0747.md

@@ -0,0 +1,89 @@
+# 测试负责人工作汇报(第 82 轮 · 2026-11-08 07:47)
+
+> 来源:测试负责人闭环巡检(`review` 离线档,内网已授权 cfc.iwintrue.com 只读 E2E)
+> 基线:`origin/cfclub` @ `b037fe71b`(= 本机 HEAD,0/0 同步)
+> 详细报告:`docs/tdd/test/automation-run-2026-11-08-0747.md`
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 陆谨(软件测试专家团主理人 · 测试负责人) |
+| 汇报周期 | 2026-11-08 06:30 ~ 07:47(第 82 轮) |
+| 负责模块/单元 | cfc-backend / cfc-frontend / cfc-web / cfc-langgraph / 内网部署 E2E(admin·frontend·shop·health) |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 说明 |
+|------|------|------|
+| 本轮新增测试用例数* | 0 | SRS/需求/接口文档无变更(闸门空输出),按「零抖动」约定跳过编写 |
+| 本轮验证执行测试数* | 528 | 342(frontend jest)+90(web jest)+15(admin/frontend/shop E2E)+13(health E2E)+43(langgraph)+25(shop/health 契约复跑口径外独立复跑) |
+| 用例通过率 | 486/528 = 92.0% | 42 项红 = B-61 健康方案 3 + langgraph 17 + 复跑前首轮瞬态 3(admin 2 + shop 1)已复跑转绿 + 后端全量未跑(复用基线) |
+
+> 注:后端 `mvn test-compile` EXIT 0(编译通过,含 S-cfc-61/62/43 新功能 +1133 行);全量 `mvn test` 未执行(预期 RED 污染 + 时长,复用 R77 基线 95.07%,标未实测)。
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 说明 |
+|------|------|------|
+| 分派任务数* | 0 | 本轮无 opencode 会话派发(节点通道仍受限,B-56) |
+| 恢复智能体会话数* | 0 | 无中断会话 |
+| 当前在用会话数 | 1 | 本机自动化会话(浏览器 E2E 本机串行实跑) |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|---------|----------|----------|---------------|----------|------|
+| 本机自动化(cfc) | — | running→done | R82 浏览器 E2E + Jest + pytest + test-compile | — | 不干净(58 项巡检产物 untracked,历史惯例不代提交) | 浏览器任务本机串行(每节点 1 任务);189/204/251 派发通道受限 B-56 |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 说明 |
+|------|------|------|
+| 新增阻塞* | 0 | 无新增阻塞登记 |
+| 关闭/解除阻塞* | 0 | B-62/B-53/B-58 已在 R81 闭环,本轮维持 |
+| 持续未解决阻塞 | 7 | B-61(P0 第 4 轮)/B-54/B-56/B-59/B-60/B-1~B-53 历史项/伪 RED 已全 GREEN |
+
+### 1.4 Git 证据(已推送远端)
+
+| 项目 | 证据 |
+|------|------|
+| HEAD 与远端同步 | `git rev-list HEAD..origin/cfclub = 0`;`git pull --rebase` 后 = `b037fe71b` |
+| 本轮实测产物 | 4 套件实跑 + E2E 3 轮复跑 + test-compile 日志(进程内,未入库) |
+| 报告/台账推送 | 本报告 + automation-run-0747 + notice-82round + 3 份台账 + blockers(本轮提交推送) |
+
+### 1.5 状态机阶段分布
+
+| 阶段 | 数量 | 键 |
+|------|------|----|
+| GREEN | 5 | admin.auth.login / dan.assessment.getActiveMaterial / guide.trainingPlan.getPlanDetail / health.report.createReport / health.report.upload |
+| RED/YELLOW/UNTRACKED | 0 | 目标池 0 键 |
+
+---
+
+## 二、关键结论
+
+**门禁:⛔ 不通过(有条件)**——P0 B-61(健康方案鉴权)连续第 4 轮未修;langgraph 17 红持续;远端派发通道受限;JaCoCo 覆盖率 N/A;历史红类未归零。本轮维持面:Jest 双绿(342+90)、E2E admin 5/5 / frontend 6/6 / shop 4/4(首轮瞬态复跑转绿)、health 10/13、后端编译通过、B-61 第 4 轮复现。
+
+**最大杠杆**:① 修 P0 B-61(`JwtInterceptor.LOGIN_REQUIRED_PATHS` 加 `/api/health/plan/`)→ 3 例转绿;② langgraph 环境修复(VC++/重建 venv + FakeEmbeddings)→ 17 例归绿;③ 恢复节点派发通道 → 达成节点化分派要求。
+
+## 三、改进建议 / 下一步事项
+
+- 事项:研发修 B-61 并部署 → 依赖:无 → 预估:1 个提交
+- 事项:langgraph conftest 重构内容正式入库(R76 版 `collect_ignore`/`llm_live`/`StubLLM`)→ 依赖:研发确认 → 预估:1 个提交
+- 事项:运维恢复 204/251 opencode 模型配额 + 251 放通 9000 → 依赖:运维 → 预估:—
+- 事项:下轮复测确认 admin/shop 瞬态不再复现(B-59 时序脆弱点建议落实 `waitForURL` 改造)→ 依赖:测试自处置 → 预估:1 个提交
+
+## 附录 A:本轮新增测试用例(按能力键)
+
+无(SRS/场景门零变更)。
+
+## 附录 B:会话/任务痕迹
+
+无 opencode 派发;本机 4 套件 + E2E 复跑日志在进程内,结果见 automation-run 报告。

+ 213 - 0
docs/tdd/test/automation-run-2026-11-08-0747.md

@@ -0,0 +1,213 @@
+# 测试闭环报告 · 浠艾福 XAF(每小时轮 · 第 82 轮)
+
+- **执行时间**:2026-11-08 07:47 (GMT+8)
+- **执行档**:review 档(已授权内网 `cfc.iwintrue.com`→`192.168.16.251`,仅 `/admin`、`/frontend` 及同源只读契约;不联网)
+- **本轮 HEAD**:`b037fe71b`(`git pull --rebase` 后 = `origin/cfclub`,0/0 同步)
+- **上次自动化 HEAD**:`b6d5b0391`(第 81 轮 06:30;本轮基线推进 4 commits:`0bf1815cf` S-cfc-43 + `20309e50e` S-cfc-65 + `649dd2be7` S-cfc-61 + `b037fe71b` S-cfc-62,均为 team.profit 实现族 + 版本号/研发汇报)
+- **两轮间远端提交**:4 commits(3 个 team.profit 功能实现 + 1 研发汇报;SRS/需求/接口文档零变更)
+- **测试负责人**:陆谨(软件测试专家团主理人,只读审查 + 授权内测试用例执行)
+
+---
+
+## 一、历史审查记录(对照,非本次结论依据)
+
+按记忆库召回(本对象历史密集,近 10 轮均为「⛔不通过(有条件)」)。遗留长期风险:
+- **B-61 / P0**:`/api/health/plan/**` 未纳入 `JwtInterceptor.LOGIN_REQUIRED_PATHS`,匿名 POST 直通 200(自 02:21 起持续,**本轮为第 4 轮复现**)。
+- **JaCoCo 缺失**:离线不可得,覆盖率 N/A(无量化门槛)。
+- **37 红类 / 115 红例**:历史红类集合长期未归零(R77 全量 35 红类 / 115 红例)。
+- **growth_records 重复列**(P1)历史未处置。
+- **B-54/B-58** LangGraph 问卷降级(chromadb DLL + LLM 401 + MemoryManager 签名,主干 17 红持续)。
+- **B-56**:远程节点派发通道受限(189 prompt 404 / 204·251 配额限流),浏览器任务按兜底策略本机串行实跑。
+- **/admin 登录**:R81(06:30)已恢复 5/5;本轮首轮运行曾抖动 3/5,复跑 5/5(见第六节)。
+
+---
+
+## 二、项目画像速览(只读)
+
+| 模块 | 技术栈 | 端口 | 本轮可测范围 |
+|---|---|---|---|
+| cfc-backend | Spring Boot 2.7.18 + MyBatis-Plus + Java 8 | 9082 | 单测/契约单测(离线 test-compile 验证) |
+| cfc-frontend | uni-app 小程序 (Vue2) | — | Jest 单元/组件(mock API) |
+| cfc-web | Vue2 + ElementUI 管理端 | 8082 | Jest 单元/组件(mock API) |
+| cfc-langgraph | Python FastAPI + LangGraph | 9000 | 本地 .venv pytest(qna 排除;LLM/chromadb 受限) |
+| 内网部署 | `cfc.iwintrue.com`→192.168.16.251 | — | Playwright 只读 E2E(`/admin`、`/frontend`、shop、health 契约) |
+
+**关键路径/约束(据 AGENTS.md)**:统一 `@PostMapping`、JWT 拦截 `/api/**`(8 公开路径)、`JwtInterceptor.LOGIN_REQUIRED_PATHS` 为鉴权门禁核心;小程序禁用可选链/CSS Grid;迁移唯一入口 `DatabaseInitializer`。
+
+---
+
+## 三、20 类测试覆盖矩阵(三态:已发现 / 未发现 / 待核实)
+
+| # | 测试类型 | 三态 | 证据 |
+|---|---|---|---|
+| 1 | 单元测试 | 已发现(实测) | cfc-frontend 19套件/342+1skip;cfc-web 12套件/90 |
+| 2 | 组件级测试 | 已发现(实测) | cfc-web `*/*.spec.js` 组件测试(ProductPicker/SkuEditor/Audit…) |
+| 3 | 集成测试 | 已发现(部分) | 后端 S-cfc-* 契约单测(未全量复跑,复用基线 + 4 份新鲜契约 XML) |
+| 4 | 接口/API 测试 | 已发现(实测) | shop-sort-api TC-S-U01~04、health-contract TC-H-U01~10 |
+| 5 | 系统/端到端 | 已发现(实测) | frontend-live 6、admin-live 5、health 13(Playwright 真实浏览器) |
+| 6 | 冒烟测试 | 已发现 | ci-smoke、frontend TC-F-U01 首屏渲染 |
+| 7 | 回归测试 | 已发现(实测) | Jest 双绿连绿 + E2E 复跑对比(见第五节) |
+| 8 | 探索性测试 | 未发现 | 无现成资产 → 降级为测试设计 |
+| 9 | 验收/UAT/BDD | 未发现 | 待核实(无 BDD 规格资产) |
+| 10 | 性能测试 | 未发现 | 未授权未执行(需公网/打远端)→ 测试设计 |
+| 11 | 可靠性测试 | 待核实 | 无现成资产;健康探针 302 可达但无持续可靠性刻画 |
+| 12 | 安全(SAST/DAST/依赖) | 未发现 | 未授权未执行(需公网)→ 测试设计 |
+| 13 | 兼容性测试 | 已发现(部分) | admin-desktop(1440×900) + frontend-mobile(375×812, isMobile) |
+| 14 | 可用性测试 | 待核实 | 前端 E2E 含「无 requestfailed」部分覆盖 |
+| 15 | 无障碍测试 | 未发现 | 无资产 → 降级设计 |
+| 16 | 覆盖率度量 | 待核实(未实测) | JaCoCo 离线缺失,覆盖率 N/A;仅 surefire 口径基线 |
+| 17 | 质量指标 | 已发现 | 通过率/套件数/红例数持续采集 |
+| 18 | 全项目代码审查 | 已发现(只读) | 本轮回溯 4 远端提交(S-cfc-43/61/62/65)+ 历史 B-类问题;不修改代码 |
+| 19 | 变异测试 | 未发现 | 无资产 → 降级设计 |
+| 20 | 契约测试 | 已发现 | S-cfc-* 红/绿契约单测(后端);health-contract 鉴权契约(E2E,B-61 第 4 轮红) |
+
+---
+
+## 四、测试方案与执行档
+
+- **范围**:cfc-frontend / cfc-web Jest(全量实跑);内网 E2E(admin/frontend/shop/health 只读);后端 `mvn test-compile`(验证本机树编译,mvn 3.9.9 + JDK1.8 已定位);langgraph 本机 `.venv` pytest(qna 排除)。
+- **执行档**:review(内网已授权;公网命令一律不执行)。
+- **排除项**:依赖漏洞/压测/DAST(公网)、JaCoCo(联网下载)、全量后端 `mvn test`(被 S-cfc-* 预期 RED 污染 + 时长,复用权威基线 R77 95.07%)、langgraph 远程派发(251 9000 CLOSED + 204/251 配额限流,见第十二节)。
+
+---
+
+## 五、执行结果
+
+| 维度 | 用例总数 | 通过 | 失败 | 备注 |
+|---|---|---|---|---|
+| cfc-frontend Jest | 343 | 342 | 0 | 1 skipped;19 套件连绿;B-62 闭环维持 |
+| cfc-web Jest | 90 | 90 | 0 | 12 套件连绿 |
+| 后端 test-compile | — | — | — | EXIT 0(mvn 3.9.9 + JDK1.8,本机树 b037fe71b 编译通过) |
+| E2E admin | 5 | 5 | 0 | TC-A-U01~U05 全绿(复跑口径;首轮 U04/U05 抖动,见第六节) |
+| E2E frontend | 6 | 6 | 0 | TC-F-U01~U06 游客态全绿(独立复跑取证) |
+| E2E shop-api | 4 | 4 | 0 | TC-S-U01~U04 排序契约绿(复跑口径;首轮 TC-S-U01 瞬态 502) |
+| E2E health | 13 | 10 | 3 | TC-H-U01~U10 绿;**TC-HP-U01/02/03 仍 200 直通(B-61 P0 第 4 轮)** |
+| langgraph pytest | 43 | 26 | 17 | 与 R77/R78/R81 一致;C 类环境 14(chromadb DLL + LLM 401 + 数据路径)+ A 类夹具 3(MemoryManager embeddings 签名) |
+
+**覆盖率**:行/分支覆盖率 N/A(JaCoCo 离线缺失);后端权威全量基线 surefire 口径 ≈ 95.07%(R77,本轮未重跑,标未实测)。静态扫描覆盖口径:**361 控制器 / 1956 handler / 覆盖 440(22.5%)**(较 R81 的 359/1943/432 22.2% 微升,驱动见第八节)。
+
+---
+
+## 六、回归与对比(vs 上次自动化 06:30,HEAD b6d5b0391)
+
+- **Jest 双绿连绿**:frontend 19/342+1skip、web 12/90,与 R81 基线一致,**无新增回归**。
+- **/admin 首轮抖动后稳定**:首轮 U04(身份自动带出)/U05(菜单遍历,依赖 U04)失败 3/5;**独立复跑 5/5 全绿**。结合 B-46 历史(10-25/11-02 同类瞬态),判定为**瞬态抖动**(首轮与 shop E2E、jest 并行时机器负载偏高 + 登录滑块/身份带出时序敏感),非确定性回归,**标注待下轮复测确认**。
+- **shop TC-S-U01 瞬态 502**:首轮 `POST /api/product/list` 返回 502;**独立复跑 TC-S-U01~U04 4/4 全绿**;直接 curl 探针 3 次 = `000`(1 次连接抖动)→`200`→`200`。判定为**上游瞬态(网关/后端偶发)**,非排序契约回归;`/api/product/list` 在 PUBLIC_PATHS(免鉴权),非 B-61 族问题。
+- **P0 健康方案鉴权(B-61)**:TC-HP-U01/02/03 匿名 POST `/api/health/plan/{adjust,attribution,generate}` 仍返回 200,**连续第 4 轮未修复**;源码复核 `JwtInterceptor.java:87 LOGIN_REQUIRED_PATHS` 仍无 `/api/health/plan/`。
+- **langgraph**:43 收集/26 过/17 红,与 R77/R78/R81 完全一致(无改善、无劣化)。
+- **新功能合入编译通过**:S-cfc-61/62/43(team.profit settle/hook/cron)共 +1133 行(StarScoreCalculator +134 / TeamProfitService +316 / TeamProfitCronTask +364 / schema.sql +28,含迁移 461 `team_star_snapshot` + `service_cost_config`);本机树 `test-compile` EXIT 0 → 可编译、无编译回归。
+
+---
+
+## 七、测试用例编写产出(SRS 闸门)
+
+- **闸门判定**:`git diff 362bf7b1b..HEAD -- docs/tdd/SRS.md "docs/需求分析" docs/superpowers/specs docs/superpowers/api tests/test-cases tests/user-scenarios` → **无任何变更**(EXIT 0,空输出)。
+- **结论**:**本次无需求/SRS/接口文档变更,跳过测试用例编写**,零仓库抖动(符合闭环「零抖动」约定)。
+- 注:本轮 4 个远端提交均为 team.profit 实现/研发汇报,不在闸门路径内,不触发编写。
+
+---
+
+## 八、测试案例变更(对照场景)
+
+- **零用例变更**:SRS/场景/接口文档无变更(见第七节);无新增/修改测试用例。
+- **测试资产口径增长(扫描口径,非本轮新编写)**:`discover_tests.py` 实测 361 控制器 / 1956 handler / 317 测试文件 / @Test 2617(较 R81 报告 359/1943/432/22.2% 增长:handler +13、@Test +250,主要来自 S-cfc-61/62/43 契约类与新近入库的 `integration/*` 修复后全量入编译树);`test_inventory.py` 跨源合计 4011(md 784 + PW 563 + py 47 + Java 2617 + 场景 11,较上轮口径 3740 +271)。
+- **待核实**:4 份新鲜契约 XML(TeamProfitCronContractTest 22/1F、TeamInvitationCreateContractTest 7/2F、StarScoreCalculatorContractRedTest 10/0F、TeamUserPortalContractTest)为 05:00–06:2x 兄弟批次产物,**与当前 HEAD 非完全对应**(S-cfc-61/62 修复提交在其后),不作本轮结论依据,标待核实。
+
+---
+
+## 九、新增/更新风险
+
+- **🔴 B-61 健康方案鉴权(P0,第 4 轮)**:连续 4 轮复现,未修复未部署;匿名用户仍可触发健康方案归因/生成/调整业务链路(耗 AI 配额、可能越权读/生成家庭私有方案)。**建议升级为研发侧 P0 督办**。
+- **🟡 瞬态 502 + admin 抖动(观察项)**:shop `/api/product/list` 一次 502、admin U04/U05 首轮抖动,复跑均稳定 → 环境/负载抖动,非回归;**待下轮复测确认不再复现**。
+- **🟡 langgraph 17 红**:B-58 入库后无改善(conftest 未含重构),主干 langgraph 26/43 持续;需研发确认 conftest 意图或本机装 VC++/重建 venv。
+- **🟡 S-cfc-61/62/43 契约复验**:R&D 提交声明契约全绿(5 契约类 32 例),本轮仅 test-compile 未重跑 → 标待核实,待环境放行后全量复跑。
+
+---
+
+## 十、覆盖缺口清单
+
+| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|---|---|---|---|---|---|
+| P0 健康方案鉴权 | `/api/health/plan/**` 未入 LOGIN_REQUIRED_PATHS | 匿名可调用的付费/隐私接口 | 复跑 TC-HP-U01~03,期望 401/403 | P0 | 修 JwtInterceptor 后 E2E 转绿 |
+| langgraph 17 红 | chromadb DLL + LLM 401 + MemoryManager 签名 | 问卷/解析/意图链路不可信 | 本机装 VC++ 运行时/重建 venv + 补 FakeEmbeddings;或 251 恢复 9000 派发 | P1 | 环境修复后 43 例归绿 |
+| 远程派发通道 | 189 prompt 404;204/251 provider 配额限流(1req/3min) | 无法按节点分派浏览器/langgraph | 升级/对齐 opencode 版本 + 恢复模型配额 | P1 | 通道恢复后按 189→admin / 204→frontend / 251→langgraph 分派 |
+| JaCoCo 覆盖率 | 离线缺失 | 覆盖率无量化门槛 | 联网下载插件或改 pom 引 jacoco | P1 | 引入后 `mvn test jacoco:report` |
+| 37 红类/115 红例 | 3 B-13 + 34 漂移 | 已知缺陷长期未闭环 | 逐类派发修复 + 复跑 | P1 | 红例归零 |
+| growth_records 重复列 | 历史未处置 | 数据模型冗余/写入风险 | 架构审查 + 迁移去重 | P1 | 处置后复跑 |
+| 探索性/无障碍/变异/BDD | 无资产 | 非功能覆盖盲区 | 补探索性脚本 + axe 无障碍 + pitest | P2 | 设计态→资产化 |
+
+---
+
+## 十一、五要素问题清单
+
+### 问题 1(P0)— 健康方案接口匿名可调用(B-61,第 4 轮)
+1. **问题描述**:匿名 POST `/api/health/plan/{adjust,attribution,generate}` 返回 200(应 401/403),连续第 4 轮未修。
+2. **测试 bug 点**:`tests/e2e-live/health-contract.spec.js:84`(`expect([401,403,404]).toContain(status)`,实际 200);根因 `cfc-backend` `JwtInterceptor.LOGIN_REQUIRED_PATHS`(`JwtInterceptor.java:87`)仍未含 `/api/health/plan/**`(源码复核确认)。
+3. **最优修改方案**:在 `LOGIN_REQUIRED_PATHS` 追加 `/api/health/plan/**`(与 API_REFERENCE §4.49 口径一致,同族对齐华为/小米健康);提交后随下一部署轮上线。
+4. **修改目的**:闭合鉴权门禁,防止未授权访问健康方案付费/隐私能力。
+5. **问题闭环**:修复+部署后复跑 `playwright.config.health.js` → TC-HP-U01~03 转 401/403;标准:3 例全绿。
+
+### 问题 2(P1)— langgraph 17 红持续(B-54/B-58 承袭)
+1. **问题描述**:langgraph pytest 43 收集 / 26 过 / 17 红,与 R77/R78/R81 完全一致;B-58 入库后无改善。
+2. **测试 bug 点**:C 类环境 14 例(`chromadb_rust_bindings` DLL 缺失→/chat、/analyze、/auto_tag 500;LLM 凭据无效→test_intent 4 例退化 CHAT;test_report_parse 数据路径)+ A 类夹具 3 例(`tests/test_memory.py:7/14/22` `MemoryManager()` 缺 `embeddings`,`app/memory/store.py:15` 已改必填)。
+3. **最优修改方案**:① 本机装 VC++ 运行时或 `pip install --force-reinstall chromadb`;② 用例补 `FakeEmbeddings`(研发确认 MemoryManager 签名意图后);③ 或恢复 251 节点 langgraph 9000 后按指令派发复跑。
+4. **修改目的**:恢复问卷/解析/意图链路可测性。
+5. **问题闭环**:修复后 43 例全绿或 ≥45 绿(51 口径);标准:红例归零。
+
+### 问题 3(P1)— 远程派发通道受限(B-56 演进)
+1. **问题描述**:按指令应将浏览器任务派 189/204、langgraph 派 251,但三节点探针仍无法有效派发。
+2. **测试 bug 点**:`192.168.16.189:4090` `POST /api/session/{id}/prompt` → **404**(API 路径/版本不符);`192.168.16.204:4091` 与 `192.168.16.251:4096` 通道可用(prompt 200,assistant 有响应)但返回 `[RETRY provider.rate-limit You have used up today's text quota...1 request every 3 min]` → 模型今日文本额度用尽;且 251 上 langgraph 9000 服务 CLOSED。
+3. **最优修改方案**:① 189 节点对齐 opencode API 版本;② 204/251 恢复模型配额或切换模型/提供方;③ 251 放通 9000。
+4. **修改目的**:恢复「admin→189 / frontend→204 / langgraph→251」节点化分派,满足「每节点仅一浏览器任务」。
+5. **问题闭环**:三节点派发任务能回传真实 playwright/pytest 结果 JSON;标准:任一节点分派成功且产出非空。
+
+### 问题 4(P2 观察)— 瞬态 502 / admin 首轮抖动(新增观察项)
+1. **问题描述**:首轮 shop `TC-S-U01` 一次 502、admin `U04/U05` 首轮失败;独立复跑全部稳定通过(shop 4/4、admin 5/5、frontend 6/6)。
+2. **测试 bug 点**:`shop-sort-api.spec.js:24`(商品列表接口 502,一次)+ `admin-live.spec.js:153`(U04 身份带出、U05 依赖 U04,首轮 3/5)。
+3. **最优修改方案**:观察,暂不改用例;如再复现则① shop 增加重试;② admin 登录时序改 `waitForURL(/\/admin\/dashboard/, {timeout:20000})`(B-59 建议)替代固定等待。
+4. **修改目的**:降低瞬态误报,提升 E2E 稳定基线。
+5. **问题闭环**:连续 2 轮首轮即全绿且无 502;标准:2 轮无复发。
+
+---
+
+## 十二、待核实项
+
+- /admin 登录(首轮抖动)是否稳定:待下轮复测确认(本轮复跑 5/5)。
+- shop 502 是否为偶发上游抖动:待下轮复测确认(本轮复跑 4/4 + curl 200×2)。
+- 后端全量 `mvn test` 真实红例/红类数(本轮仅 test-compile,复用 R77 基线 95.07%,标未实测)。
+- S-cfc-61/62/43 契约测试是否真实全绿(R&D 自述,本轮未重跑,标待核实)。
+- cfc-langgraph 远程派发(251 可达但 9000 服务 closed + 配额限流;本机 .venv 兜底)。
+- B-34/B-35 LangGraph 问卷降级复验(需 AI 9000,超内网授权)。
+- 探索性/无障碍/BDD/变异测试资产缺失(无材料,标待核实,不臆造)。
+
+---
+
+## 十三、需用户单独授权才能继续的项(未授权未执行 + 测试设计)
+
+| 项 | 为何未执行 | 测试设计(降级产出) |
+|---|---|---|
+| 依赖漏洞扫描 | 需公网(maven/github 元数据) | 离线可用 `mvn dependency-check:check`(需先联网拉规则库一次);或人工核对 `pom.xml` 依赖版本 |
+| 性能压测 | 需公网 + 打目标环境 | k6/JMeter 脚本针对 `/api/product/list`、`/api/health/plan/*`;授权后仅打内网 192.168.16.251 |
+| DAST(OWASP ZAP) | 需公网下载 | 对 `/admin`、`/frontend` 做被动/主动扫描;授权后仅内网 |
+| JaCoCo 覆盖率 | 需联网下载插件 | 引入 jacoco 插件后 `mvn test jacoco:report` |
+| LangGraph 复验(B-34/B-35) | 需 AI 9000(超内网授权) | 启动 9000 最小服务后复跑问卷降级用例 |
+| 全量 `mvn test` 重跑 | 被 S-cfc-* 预期 RED 污染 + 时长 | 已用 test-compile 验证编译;建议环境就绪后整轮实跑固化新基线 |
+
+---
+
+## 十四、门禁结论
+
+**⛔ 不通过(有条件)**
+
+**依据**:P0 健康方案鉴权缺口(B-61)连续第 4 轮未修;langgraph 17 红持续(B-58 入库未改善);远程派发通道受限(189 404 / 204·251 配额限流);JaCoCo 覆盖率不可量化(N/A);历史 35 红类/115 红例未闭环;growth_records 重复列未处置。本轮维持改善面:**admin 5/5、frontend 6/6、shop 4/4、Jest 双绿连绿、后端 test-compile 通过(含 S-cfc-61/62/43 新功能 +1133 行)、/admin 与 shop 瞬态均复跑转稳定**——但门禁硬条件未满足。
+
+**复评条件(全部满足方可转「通过」)**:
+1. 修 P0:将 `/api/health/plan/**` 纳入 `JwtInterceptor.LOGIN_REQUIRED_PATHS` → 复跑 `playwright.config.health.js` 全绿(TC-HP-U01~03 转 401/403)。
+2. langgraph 43 例红例归零(环境 + MemoryManager 夹具),或恢复 251 派发复跑。
+3. 引入 JaCoCo,后端行覆盖率 ≥ 80%。
+4. 37/35 红类归零(含 S-cfc-31 blank-key 真缺陷修复)。
+5. 处置 growth_records 重复列。
+6. 恢复节点派发通道(189/204/251),浏览器/langgraph 按节点分派。
+7. 用户单独授权:依赖漏洞/压测/DAST 公网项;B-34/B-35 经 AI 9000 复验。
+
+**本轮产物**:本报告 `docs/tdd/test/automation-run-2026-11-08-0747.md`(随 `docs/tdd/test/` 推送)+ `docs/tdd/orchestration/report-test-2026-11-08-0747.md`(模板汇报)+ `docs/tdd/test/notice-2026-11-08-0747-82round.md`(研发交接通知)+ 台账 `discovery.md`/`inventory.md`/`automation-status.md` 刷新 + `blockers.md` B-61 第 4 轮更新。

+ 35 - 9
docs/tdd/test/automation-status.md

@@ -21,10 +21,10 @@
 | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
 | 结构化测试用例(md) | 11 | 784 | 60 | 724 | 489 | 255 | 14 | 0 | 26 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
-| Playwright(e2e/integration) | 93 | 562 | 93 | 0 | 83 | 0 | 7 | 3 | 0 |
-| Python(pytest) | 11 | 67 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
-| Java后端测试 | 292 | 2380 | 292 | 0 | 275 | 0 | 15 | 2 | 0 |
-| **合计** | — | **3793** | **456** | **735** | 869 | 255 | 36 | 5 | 26 |
+| 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 |
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
@@ -912,18 +912,19 @@
 | `tests/e2e/wish-exchange-flow.spec.js` | 12 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/integration/mini-games-api.spec.js` | 13 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/integration/plan-chain.spec.js` | 10 | 已自动化(e2e) | 未跟踪 | — |
+| `tests/unit/games/1a2b.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — |
 
 ## 四、Python 测试(`cfc-langgraph/tests · tools/xaf_agent_hub/tests`)
 
 | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 |
 | --- | --- | --- | --- | --- |
 | `cfc-langgraph/tests/qna/test_graph.py` | 4 | 已自动化(pytest) | 未跟踪 | — |
-| `cfc-langgraph/tests/test_analyze.py` | 4 | 已自动化(pytest) | 未跟踪 | — |
-| `cfc-langgraph/tests/test_auto_tag.py` | 12 | 已自动化(pytest) | 未跟踪 | — |
-| `cfc-langgraph/tests/test_chat.py` | 4 | 已自动化(pytest) | 未跟踪 | — |
+| `cfc-langgraph/tests/test_analyze.py` | 2 | 已自动化(pytest) | 未跟踪 | — |
+| `cfc-langgraph/tests/test_auto_tag.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
+| `cfc-langgraph/tests/test_chat.py` | 1 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_graph.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_health_plan.py` | 13 | 已自动化(pytest) | 未跟踪 | — |
-| `cfc-langgraph/tests/test_intent.py` | 13 | 已自动化(pytest) | 未跟踪 | — |
+| `cfc-langgraph/tests/test_intent.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_memory.py` | 3 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_recommend.py` | 3 | 已自动化(pytest) | 未跟踪 | — |
 | `cfc-langgraph/tests/test_report_parse.py` | 5 | 已自动化(pytest) | 未跟踪 | — |
@@ -950,6 +951,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/BadgeControllerGetMemberBadgesTest.java` | 9 | 已自动化(@Test) | 未跟踪 | BadgeControllerGetMemberBadges |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/DanAssessmentControllerGetActiveMaterialTest.java` | 3 | 已自动化(@Test) | 未跟踪 | DanAssessmentControllerGetActiveMaterial |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/EnergyControllerGrantEnergyTest.java` | 3 | 已自动化(@Test) | 未跟踪 | EnergyControllerGrantEnergy |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/FamilyEarningsAdminRoleGateTest.java` | 8 | 已自动化(@Test) | 未跟踪 | FamilyEarningsAdminRoleGate |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthCheckinCfEarnCallSite |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthDimensionControllerUploadContractTest.java` | 21 | 已自动化(@Test) | 未跟踪 | HealthDimensionControllerUploadContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthPlanDeleteController |
@@ -971,6 +973,8 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG10RegisterGuideContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | ScG10RegisterGuideContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG11AgreementContractTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ScG11AgreementContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG12H5FallbackContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ScG12H5FallbackContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/SurveyHealthReviewContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | SurveyHealthReviewContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/TeamInvitationCreateContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | TeamInvitationCreateContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | AdminAuthControllerLoginContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` | 10 | 已自动化(@Test) | 未跟踪 | AdminAuthControllerLoginStatus |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthWechatScanTest.java` | 11 | 已自动化(@Test) | 未跟踪 | AdminAuthWechatScan |
@@ -984,6 +988,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/ButlerControllerGateTest.java` | 9 | 已自动化(@Test) | 未跟踪 | ButlerControllerGate |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/butler/ButlerControllerEnvelopeTest.java` | 1 | 已自动化(@Test) | 未跟踪 | ButlerControllerEnvelope |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/config/SleepConfigTagsMechanismContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | SleepConfigTagsMechanismContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyInviteApproveRequestTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyInviteApproveRequest |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerAddMember |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerList |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerRenameFamily |
@@ -1077,10 +1082,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionDistService410Test.java` | 4 | 已自动化(@Test) | 未跟踪 | CommissionDistService410 |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | 5 | 已自动化(@Test) | 未跟踪 | CommissionServiceReferralF24 |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ConsigneeServiceBackfill |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ContractReflect.java` | 0 | 已自动化(@Test) | 未跟踪 | ContractReflect.java |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | EnergyServiceFamily |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceGrantEnergyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | EnergyServiceGrantEnergy |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` | 4 | 已自动化(@Test) | 未跟踪 | EnergyServiceWealthIncome |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` | 3 | 已自动化(@Test) | 未跟踪 | FamilyAdminOverviewService |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinRequiredInfoContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | FamilyJoinRequestServiceJoinRequiredInfoContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinValidationGateTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FamilyJoinRequestServiceJoinValidationGate |
 | `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/FamilyPlatformPointsServiceCouponTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyPlatformPointsServiceCoupon |
@@ -1108,6 +1116,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceFulfillmentMultiModeTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ProductOrderServiceFulfillmentMultiMode |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceSpecialDealTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ProductOrderServiceSpecialDeal |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceUpdateExpressFieldTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ProductOrderServiceUpdateExpressField |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` | 4 | 已自动化(@Test) | 未跟踪 | ProfitPoolOrderContractRed |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | RealNameBackfillService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportAnalyzeQuotaServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ReportAnalyzeQuotaService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportDateExtractorTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ReportDateExtractor |
@@ -1115,8 +1124,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceBatchEstimateTest.java` | 9 | 已自动化(@Test) | 未跟踪 | RewardRuleServiceBatchEstimate |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceEstimateTest.java` | 21 | 已自动化(@Test) | 未跟踪 | RewardRuleServiceEstimate |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | 9 | 已自动化(@Test) | 未跟踪 | SpecialPriceService |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/StarScoreCalculatorContractRedTest.java` | 10 | 已自动化(@Test) | 未跟踪 | StarScoreCalculatorContractRed |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TaskServiceCfEarn |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceReviewTest.java` | 15 | 已自动化(@Test) | 未跟踪 | TaskServiceReview |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamAwardRecordContractRedTest.java` | 6 | 已自动化(@Test) | 未跟踪 | TeamAwardRecordContractRed |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitContract.java` | 0 | 已自动化(@Test) | 未跟踪 | TeamProfitContract.java |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitSchemaContractRedTest.java` | 6 | 已自动化(@Test) | 未跟踪 | TeamProfitSchemaContractRed |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamShareRecordEightShareContractRedTest.java` | 6 | 已自动化(@Test) | 未跟踪 | TeamShareRecordEightShareContractRed |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TencentTtsServiceAuthorization |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserAddressServiceBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | UserAddressServiceBackfill |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` | 5 | 已自动化(@Test) | 未跟踪 | UserServiceEffectiveFamilyIds |
@@ -1148,6 +1162,7 @@
 | `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/AttributionRedlinesTest.java` | 8 | 已自动化(@Test) | 未跟踪 | AttributionRedlines |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | 6 | 已自动化(@Test) | 未跟踪 | BadgeServiceUnlockNotice |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | 5 | 已自动化(@Test) | 未跟踪 | CartReplaceCombo |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | CfBalanceController |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | CoachButlerNotificationContract |
@@ -1166,7 +1181,9 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyIsolationContractTest.java` | 8 | 已自动化(@Test) | 未跟踪 | EnergyIsolationContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyLogsContractScoreHistoryTest.java` | 11 | 已自动化(@Test) | 未跟踪 | EnergyLogsContractScoreHistory |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyOverviewContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | EnergyOverviewContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyJoinValidationRulesContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | FamilyJoinValidationRulesContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyMemberDimensionBaseScoreService |
+| `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/FamilyNamingSupportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyNamingSupport |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | 13 | 已自动化(@Test) | 未跟踪 | FamilyUserSwitchRole |
@@ -1192,7 +1209,7 @@
 | `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/PlanActivationExecutionContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | PlanActivationExecutionContract |
-| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | 31 | 已自动化(@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/PointsLedgerScP15ContractTest.java` | 8 | 已自动化(@Test) | 未跟踪 | PointsLedgerScP15Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductBrowseScP52ScG05ContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ProductBrowseScP52ScG05Contract |
@@ -1218,7 +1235,16 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskProgressUpdateTest.java` | 3 | 已自动化(@Test) | 未跟踪 | TaskProgressUpdate |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScT06ContractTest.java` | 6 | 已自动化(@Test) | 未跟踪 | TaskReviewScT06Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTemplatePackageContractTest.java` | 13 | 已自动化(@Test) | 未跟踪 | TaskTemplatePackageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` | 20 | 已自动化(@Test) | 未跟踪 | TeamProfitAdminManageContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java` | 22 | 已自动化(@Test) | 未跟踪 | TeamProfitCronContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitHookContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | TeamProfitHookContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitPipelineContractTest.java` | 8 | 已自动化(@Test) | 未跟踪 | TeamProfitPipelineContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarDigestContractTest.java` | 14 | 已自动化(@Test) | 未跟踪 | TeamStarDigestContract |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMultiplierContractTest.java` | 13 | 已自动化(@Test) | 未跟踪 | TeamStarMultiplierContract |
+| `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/TianpanGuideContractTest.java` | 10 | 已自动化(@Test) | 未跟踪 | TianpanGuideContract |
+| `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/VendorProductManageScS02ContractTest.java` | 9 | 已自动化(@Test) | 未跟踪 | VendorProductManageScS02Contract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/WishFlowScP13ContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | WishFlowScP13Contract |

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

@@ -75,3 +75,5 @@
 | B-56-Update(第 81 轮探针新证据) | 三节点派发通道再探针:189 prompt 404;204/251 配额限流 | 测试/运维 | **第 81 轮(2026-11-08 06:12~06:18)三节点实测**。探活:`192.168.16.189:4090`→200、`192.168.16.204:4091`→200、`192.168.16.251:4096`→200(均 Basic 认证通过,会话创建 200)。派发探针(SIMPLE 提示「请只回复 OK」):① **189** `POST /api/session/{id}/prompt` → **404**(API 路径/版本不符,零产出);② **204** prompt 200、assistant 有响应但 `[RETRY provider.rate-limit You have used up today's text quota...1 request every 3 min]` → 模型今日文本额度用尽;③ **251** 同 204,命中配额限流;且 251 上 langgraph 9000 服务 CLOSED。结论:远程派发仍不可用(B-56 由「零产出」演进为「189 路由 404 + 204/251 配额限流」两条),浏览器任务按既定兜底策略本机串行实跑(admin 5/5、frontend 6/6、shop 4/4、health 10/13)。闭环调整:① 运维恢复 204/251 opencode 模型配额(或切模型/提供方);② 研发/运维对齐 189 opencode API 版本路由;③ 251 放通 9000 | 测试负责人(第 81 轮实测登记) | 2026-11-08 06:18 | 待处理 |
 | B-61-Update(第 81 轮复现) | P0 健康方案鉴权缺口连续第 3 轮复现 | 研发 | **连续第 3 轮复现(2026-11-08 06:26)**。本轮 `playwright.config.health.js` 契约实测:TC-H-U01~U10 **10/10 全绿**(华/小米健康鉴权稳定拦截),但 TC-HP-U01/02/03(`/api/health/plan/{adjust,attribution,generate}` 匿名 POST)仍返回 **HTTP 200** 直通(应 401/403/404)。`JwtInterceptor.LOGIN_REQUIRED_PATHS` 修复未随任何部署轮次生效。与 B-61 主登记同因:opt-in 清单漏配 `/api/health/plan/`。闭环判据不变:修复+部署后 TC-HP-U01~03 转 401 即通过 | 测试负责人(第 81 轮复现登记) | 2026-11-08 06:26 | 待处理(P0,连续第 3 轮) |
 | B-62-Update(第 81 轮闭环确认) | S-cfc-35/S-cfc-38 birthday/gender 捕获 14 例 RED 全部转绿 | 研发(已实现) | **闭环确认(第 81 轮,2026-11-08 06:20)**。研发 04:53/04:56 提交实现(`4f40a8973` S-cfc-67 审批卡片出生日期/性别 + `2c65d98f7` S-cfc-66 加入申请表单必填项)后,本轮 frontend Jest **19 套件 / 343 例 / 342 通过 + 1 skip / 0 失败**:`join-form.required-info.test.js`(12 例)与 `family-members.joinRequestCardInfo.test.js`(2 例)**14 RED 全部转绿**,B-62 场景闭环。无通过用例转红(R79 基线 328 通过含净新增)。后续哨兵:frontend Jest 每轮 343 例全绿即维持闭环保守 | 测试负责人(第 81 轮确认) | 2026-11-08 06:28 | **已解除(14 RED 转绿,frontend 连绿)** |
+| B-61-Update(第 82 轮复现) | P0 健康方案鉴权缺口连续第 4 轮复现 | 研发 | **连续第 4 轮复现(2026-11-08 07:30)**。本轮 `playwright.config.health.js` 契约实测:TC-H-U01~U10 **10/10 全绿**(华/小米健康鉴权稳定拦截),但 TC-HP-U01/02/03(`/api/health/plan/{adjust,attribution,generate}` 匿名 POST)仍返回 **HTTP 200** 直通(应 401/403/404)。源码复核:`JwtInterceptor.java:87 LOGIN_REQUIRED_PATHS`(R82 HEAD b037fe71b)仍无 `/api/health/plan/` → 非部署滞后,**源代码级未修**。与 B-61 主登记同因:opt-in 清单漏配。闭环判据不变:修代码+部署后 TC-HP-U01~03 转 401 即通过。此为本轮最高优先级催办项(研发交接通知同步送达) | 测试负责人(第 82 轮复现登记) | 2026-11-08 07:32 | 待处理(P0,连续第 4 轮) |
+| B-59-Update(第 82 轮观察) | admin U04/U05 首轮抖动复跑转绿;B-59 时序修复仍未落地 | 测试(自处置) | **第 82 轮(2026-11-08 07:18~07:35)**。admin-desktop 首轮 3/5(U04「身份自动带出」失败 + U05 依赖 U04 失败),独立复跑 5/5 全绿;shop 首轮 TC-S-U01 一次 502(上游瞬态,复跑 4/4 + curl 200×2)。首轮与 3 个 jest/lg 套件并行跑,机器负载高 → 佐证 B-59「固定 waitForTimeout(5000) 时序脆弱点」判断。修复(`waitForURL` 替换)仍未落地,**列入测试侧下轮自处置** | 测试负责人(第 82 轮实测登记) | 2026-11-08 07:36 | 待处理(下轮自处置) |

+ 39 - 13
docs/tdd/test/discovery.md

@@ -8,21 +8,21 @@
 | 指标 | 数值 |
 | --- | --- |
 | 控制器总数 | 361 |
-| handler 方法总数 | 1953 |
-| handler 方法已覆盖 | 434 (22.2%) |
+| handler 方法总数 | 1956 |
+| handler 方法已覆盖 | 440 (22.5%) |
 | 单元-全覆盖(handler 方法) | 32 |
-| 单元-部分覆盖(handler 方法) | 198 |
-| 单元-未覆盖(handler 方法) | 130 |
+| 单元-部分覆盖(handler 方法) | 199 |
+| 单元-未覆盖(handler 方法) | 129 |
 | 单元-无handler 方法 | 1 |
-| 测试文件数 | 292 |
-| @Test 方法总数 | 2380 |
+| 测试文件数 | 317 |
+| @Test 方法总数 | 2617 |
 | 含跳过/假设项(test 级 partial) | 4 |
 
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
 
 > 以下控制器在当前测试源中**没有任何handler 方法被命中**。这是真实扫描得到的覆盖缺口。
 
-共 130 个:
+共 129 个:
 
 - `DanAssessmentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/DanAssessmentController.java`,29 方法)
 - `AdminInventoryController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminInventoryController.java`,15 方法)
@@ -54,7 +54,6 @@
 - `ContactMatchController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/ContactMatchController.java`,6 方法)
 - `CouponGiftController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/CouponGiftController.java`,6 方法)
 - `DietIngredientController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/diet/DietIngredientController.java`,6 方法)
-- `FamilyEarningsController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/FamilyEarningsController.java`,6 方法)
 - `MindFortuneController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/MindFortuneController.java`,6 方法)
 - `PackagePaymentController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/PackagePaymentController.java`,6 方法)
 - `ProductDeliveryConfigController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProductDeliveryConfigController.java`,6 方法)
@@ -84,13 +83,14 @@
 - `InnatePortraitController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/mind/InnatePortraitController.java`,4 方法)
 - `PackagePurchaseController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/PackagePurchaseController.java`,4 方法)
 - `PlanReviewController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/guide/PlanReviewController.java`,4 方法)
-- …(其余 70 个见完整扫描)
+- `PortraitController`(`cfc-backend/src/main/java/com/etotem/cfc/controller/user/PortraitController.java`,4 方法)
+- …(其余 69 个见完整扫描)
 
 ## 三、部分覆盖控制器(已做一部分测试)
 
 > 这些控制器**已有测试但只覆盖了部分handler 方法**——即用户要求的「已经做了一部分测试的情况,要能够找到」。
 
-共 198 个:
+共 199 个:
 
 - `AdminController`:覆盖 1/65,未覆盖方法:getUsers、createUser、getUser、updateUser、resetUserPassword、searchUsers、deleteUser、getChild、updateChild、adjustPoints
 - `HealthReportController`:覆盖 1/59,未覆盖方法:createReport、getLatestReport、listFamilyReports、listAllReports、getReportIndicatorsWithPrevious、listIndicators、getMemberIndicators、getGutFlora、rebuildIndicatorCurrent、getMemberIndicatorCurrent
@@ -162,6 +162,7 @@
 - `AdminSystemPromptController`:覆盖 1/6,未覆盖方法:save、reset、delete、listVersions、rollback
 - `ButlerController`:覆盖 1/6,未覆盖方法:apply、getProfile、updateProfile、getServiceRecords、getCommissions
 - `ContentSectionController`:覆盖 1/6,未覆盖方法:getVisibleSections、getDetail、create、update、delete
+- `FamilyEarningsController`:覆盖 3/6,未覆盖方法:familySummary、memberContributions、records
 - `FamilyPlatformBalanceController`:覆盖 1/6,未覆盖方法:getLogs、exchangeCoupon、adminBalance、adminLogs、adminAdjust
 - `FoodRecommendController`:覆盖 2/6,未覆盖方法:getIndex、getHistory、getByFamily、getCautionFoods
 - `IndicatorAdminController`:覆盖 1/6,未覆盖方法:create、update、delete、listValues、backfill
@@ -173,6 +174,7 @@
 - `ServiceContentController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
 - `ServiceTypeController`:覆盖 1/6,未覆盖方法:Operation、Operation、Operation、Operation、Operation
 - `SupplierProductController`:覆盖 1/6,未覆盖方法:create、update、detail、delete、shelve
+- `SurveyController`:覆盖 2/6,未覆盖方法:activeTemplates、confirmQuestions、submit、history
 - `UserAddressController`:覆盖 1/6,未覆盖方法:get、create、update、delete、setDefault
 - `ActivityOrderController`:覆盖 1/5,未覆盖方法:create、pay、handlePaymentSuccess、notify
 - `AdminCommissionConfigController`:覆盖 2/5,未覆盖方法:getConfig、settle、refund
@@ -197,7 +199,6 @@
 - `RecommendationRuleAdminController`:覆盖 1/5,未覆盖方法:create、update、delete、batchEnable
 - `ReportMemberPermissionController`:覆盖 1/5,未覆盖方法:listByMember、grant、revoke、visibleMembers
 - `SupplySettlementController`:覆盖 1/5,未覆盖方法:detail、detailItems、create、confirm
-- `SurveyController`:覆盖 1/5,未覆盖方法:activeTemplates、confirmQuestions、submit、history
 - `TeacherFamilyBindingController`:覆盖 1/5,未覆盖方法:approve、reject、myRequests、cancel
 - `TeacherMessageController`:覆盖 1/5,未覆盖方法:sendMessage、replyMessage、getUnreadCount、getMyMessages
 - `XiaomiHealthController`:覆盖 1/5,未覆盖方法:authUrl、callback、sync、revoke
@@ -297,12 +298,14 @@
 | --- | --- | --- | --- | --- | --- | --- |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AuthControllerTest.java` | com | 39 | 0 | 14 | AuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DanReportParseServiceTest.java` | com | 38 | 2 | 0 | DanReportController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | com | 38 | 22 | 14 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfPathwayEarnServiceTest.java` | com | 32 | 16 | 0 | — | — |
-| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | com | 31 | 12 | 12 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/WishControllerTest.java` | com | 29 | 4 | 11 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentQuotaAppointmentContractTest.java` | com | 27 | 9 | 0 | AssessmentQuotaController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | com | 25 | 0 | 0 | CfBalanceController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` | com | 24 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceTest.java` | com | 23 | 0 | 0 | IndicatorController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java` | com | 22 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionScoreServiceTest.java` | com | 21 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodRecommendServiceTest.java` | com | 21 | 1 | 0 | FoodRecommendController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideRolePermissionTest.java` | com | 21 | 6 | 9 | GuideController | — |
@@ -311,6 +314,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideFamilyTaskControllerTest.java` | com | 20 | 11 | 8 | GuideFamilyTaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` | com | 20 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` | com | 20 | 3 | 7 | ProductOrderController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` | com | 20 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | com | 19 | 4 | 4 | PlanReviewController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/ScG06JwtGuardTest.java` | com | 19 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/AIChatControllerGateTest.java` | com | 18 | 15 | 6 | AIChatController | — |
@@ -333,20 +337,24 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/WishFlowScP13ContractTest.java` | com | 15 | 0 | 0 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ArticleWorkflowTest.java` | com | 14 | 0 | 0 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | com | 14 | 7 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyJoinValidationRulesContractTest.java` | com | 14 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/NutritionDeficiencyServiceTest.java` | com | 14 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | com | 14 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | com | 14 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskCreateScP10ContractTest.java` | com | 14 | 0 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarDigestContractTest.java` | com | 14 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionAdminControllerTest.java` | com | 13 | 0 | 7 | DimensionAdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | com | 13 | 1 | 1 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageServiceTest.java` | com | 13 | 0 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ManualDimensionScoreContractTest.java` | com | 13 | 6 | 2 | ManualDimensionScoreController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG03LoginMethodContractTest.java` | com | 13 | 1 | 4 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTemplatePackageContractTest.java` | com | 13 | 4 | 11 | TaskTemplatePackageController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMultiplierContractTest.java` | com | 13 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | com | 12 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AfterSalesScS06ContractTest.java` | com | 12 | 0 | 0 | AfterSalesController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | com | 12 | 2 | 0 | CfCommissionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | com | 12 | 7 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinValidationGateTest.java` | com | 12 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | com | 12 | 10 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodServiceTest.java` | com | 12 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthSleepControllerContractTest.java` | com | 12 | 1 | 2 | HealthSleepController | — |
@@ -376,12 +384,14 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` | com | 10 | 1 | 3 | AdminAuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AuthWechatLoginContractTest.java` | com | 10 | 0 | 1 | AuthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | com | 10 | 3 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinRequiredInfoContractTest.java` | com | 10 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/GrowthRecordSyncFlowTest.java` | com | 10 | 9 | 4 | GrowthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideHierarchyServiceTest.java` | com | 10 | 0 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanReviewGuardTest.java` | com | 10 | 0 | 0 | HealthPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorFavoriteControllerTest.java` | com | 10 | 8 | 3 | IndicatorFavoriteController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorContractEdgeTest.java` | com | 10 | 2 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/config/SleepConfigTagsMechanismContractTest.java` | com | 10 | 3 | 3 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/StarScoreCalculatorContractRedTest.java` | com | 10 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TianpanGuideContractTest.java` | com | 10 | 2 | 3 | TianpanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanListTest.java` | com | 10 | 0 | 0 | TrainingPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/common/AdminRolesTest.java` | com | 9 | 0 | 0 | AdminController | — |
@@ -392,7 +402,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyFoodOverviewServiceTest.java` | com | 9 | 9 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/growth/GrowthHistoryViewContractTest.java` | com | 9 | 3 | 0 | GrowthController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyAccessGuardTest.java` | com | 9 | 0 | 0 | GuideController | — |
-| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideTeamControllerTest.java` | com | 9 | 4 | 5 | GuideTeamController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideTeamControllerTest.java` | com | 9 | 6 | 5 | GuideTeamController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTrendServiceTest.java` | com | 9 | 17 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/KnowledgeBaseBackfillTest.java` | com | 9 | 6 | 0 | KnowledgeBaseController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipRenewScP60ScP80ContractTest.java` | com | 9 | 0 | 0 | MembershipController | — |
@@ -401,6 +411,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceBatchEstimateTest.java` | com | 9 | 0 | 0 | RewardController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG04InviteRegisterContractTest.java` | com | 9 | 1 | 3 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | com | 9 | 0 | 0 | SpecialPriceController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/SurveyHealthReviewContractTest.java` | com | 9 | 1 | 1 | SurveyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` | com | 9 | 0 | 0 | VendorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` | com | 9 | 0 | 0 | VendorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | com | 8 | 3 | 0 | ActivityController | — |
@@ -413,6 +424,8 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyIsolationContractTest.java` | com | 8 | 5 | 2 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/FamilyControllerTest.java` | com | 8 | 1 | 3 | FamilyController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/FamilyEarningsAdminRoleGateTest.java` | com | 8 | 3 | 3 | FamilyEarningsController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` | com | 8 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideApplicationServiceTest.java` | com | 8 | 0 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideOrderControllerTest.java` | com | 8 | 11 | 3 | GuideOrderController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthReportAuditContractTest.java` | com | 8 | 3 | 0 | HealthReportController | — |
@@ -424,12 +437,14 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReportDietRecommendContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG05AnonymousBrowseContractTest.java` | com | 8 | 2 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitPipelineContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java` | com | 8 | 0 | 0 | TrainingPlanController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/AttributionStage1FoundationTest.java` | com | 7 | 11 | 0 | AttributionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryMapContractTest.java` | com | 7 | 0 | 0 | DimensionRegistryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyBehaviorConfigContractTest.java` | com | 7 | 1 | 4 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyOverviewContractTest.java` | com | 7 | 10 | 1 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/EnergySystemFlowTest.java` | com | 7 | 22 | 5 | EnergyController | skip×1、⚠部分 |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyInviteApproveRequestTest.java` | com | 7 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` | com | 7 | 10 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | com | 7 | 1 | 1 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideFamilyServiceTest.java` | com | 7 | 0 | 0 | GuideController | — |
@@ -442,10 +457,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | com | 7 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerCreateTaskTest.java` | com | 7 | 0 | 1 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/task/TaskControllerGetTaskHistoryTest.java` | com | 7 | 4 | 1 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/TeamInvitationCreateContractTest.java` | com | 7 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitHookContractTest.java` | com | 7 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | com | 6 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityServicePublishTest.java` | com | 6 | 0 | 0 | ActivityController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleRelatedServiceTest.java` | com | 6 | 0 | 0 | ArticleController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentComparisonContractTest.java` | com | 6 | 0 | 0 | AssessmentComparisonController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | com | 6 | 1 | 0 | BadgeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfTransferServiceTest.java` | com | 6 | 0 | 0 | CfTransferController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/DailyCheckinStreakFlowTest.java` | com | 6 | 13 | 6 | DailyCheckinController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/DatabaseInitializerSeedTest.java` | com | 6 | 0 | 0 | — | — |
@@ -473,6 +491,9 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` | com | 6 | 10 | 2 | StatsController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScT06ContractTest.java` | com | 6 | 0 | 0 | TaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamAwardRecordContractRedTest.java` | com | 6 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitSchemaContractRedTest.java` | com | 6 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamShareRecordEightShareContractRedTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceWechatLoginContractTest.java` | com | 6 | 3 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/util/UserUtilTest.java` | com | 6 | 0 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/WithdrawalServiceTest.java` | com | 6 | 0 | 0 | WithdrawalController | — |
@@ -502,6 +523,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG11AgreementContractTest.java` | com | 5 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TaskServiceMinigameTest.java` | com | 5 | 0 | 0 | TaskController | skip×1、⚠部分 |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` | com | 5 | 0 | 0 | UserController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/UserServiceMaskChildSensitiveFieldsTest.java` | com | 5 | 0 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceWechatLoginTest.java` | com | 5 | 3 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | com | 5 | 0 | 0 | VirtualPayController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminButlerControllerEnvelopeTest.java` | com | 4 | 8 | 4 | AdminButlerController | — |
@@ -519,12 +541,14 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorMappingServiceTest.java` | com | 4 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorWechatLoginTest.java` | com | 4 | 4 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/PointsExchangeServiceTest.java` | com | 4 | 0 | 0 | PointsExchangeController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` | com | 4 | 5 | 0 | PurchaseController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceTypeServiceTest.java` | com | 4 | 0 | 0 | ServiceTypeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | com | 4 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` | com | 4 | 2 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | com | 4 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TeacherLoginTest.java` | com | 4 | 0 | 0 | TeacherController | skip×1、⚠部分 |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` | com | 4 | 1 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/WishServiceTest.java` | com | 4 | 0 | 0 | WishController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/dto/ActivityDTOTest.java` | com | 3 | 0 | 0 | ActivityController | — |
@@ -584,8 +608,10 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportSummaryServiceCompletenessTest.java` | com | 1 | 0 | 0 | ReportSummaryController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` | com | 1 | 1 | 0 | TeacherController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AssessmentPlanContractTestBase.java` | com | 0 | 0 | 0 | AssessmentController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ContractReflect.java` | com | 0 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyContractTestBase.java` | com | 0 | 0 | 0 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/testutil/FrontendSourceLocator.java` | com | 0 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitContract.java` | com | 0 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/common/TestRoles.java` | com | 0 | 0 | 0 | — | — |
 
 ## 五、使用说明

+ 35 - 9
docs/tdd/test/inventory.md

@@ -9,11 +9,11 @@
 | 来源类型 | 文件数 | 用例/方法数 |
 | --- | --- | --- |
 | 结构化测试用例(md) | 11 | 784 |
-| Playwright(spec.js) | 93 | 562 |
-| Python(pytest) | 11 | 67 |
-| Java后端(测试文件) | 292 | 2380 (@Test) |
+| Playwright(spec.js) | 94 | 563 |
+| Python(pytest) | 11 | 47 |
+| Java后端(测试文件) | 317 | 2617 (@Test) |
 | 用户场景(md) | 11 | 文件级 |
-| **合计** | — | **3793** 用例/方法 |
+| **合计** | — | **4011** 用例/方法 |
 
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 
@@ -905,18 +905,19 @@
 | `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` | 4 | `cfc-langgraph/tests/test_analyze.py` |
-| `cfc-langgraph/tests/test_auto_tag.py` | 12 | `cfc-langgraph/tests/test_auto_tag.py` |
-| `cfc-langgraph/tests/test_chat.py` | 4 | `cfc-langgraph/tests/test_chat.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` | 13 | `cfc-langgraph/tests/test_intent.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` |
@@ -945,6 +946,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/BadgeControllerGetMemberBadgesTest.java` | cfc-backend | 9 | BadgeControllerGetMemberBadges | `cfc-backend/src/test/java/com/etotem/cfc/controller/BadgeControllerGetMemberBadgesTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/DanAssessmentControllerGetActiveMaterialTest.java` | cfc-backend | 3 | DanAssessmentControllerGetActiveMaterial | `cfc-backend/src/test/java/com/etotem/cfc/controller/DanAssessmentControllerGetActiveMaterialTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/EnergyControllerGrantEnergyTest.java` | cfc-backend | 3 | EnergyControllerGrantEnergy | `cfc-backend/src/test/java/com/etotem/cfc/controller/EnergyControllerGrantEnergyTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/FamilyEarningsAdminRoleGateTest.java` | cfc-backend | 8 | FamilyEarningsAdminRoleGate | `cfc-backend/src/test/java/com/etotem/cfc/controller/FamilyEarningsAdminRoleGateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` | cfc-backend | 6 | HealthCheckinCfEarnCallSite | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthDimensionControllerUploadContractTest.java` | cfc-backend | 21 | HealthDimensionControllerUploadContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthDimensionControllerUploadContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` | cfc-backend | 6 | HealthPlanDeleteController | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` |
@@ -966,6 +968,8 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG10RegisterGuideContractTest.java` | cfc-backend | 7 | ScG10RegisterGuideContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG10RegisterGuideContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG11AgreementContractTest.java` | cfc-backend | 5 | ScG11AgreementContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG11AgreementContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG12H5FallbackContractTest.java` | cfc-backend | 6 | ScG12H5FallbackContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG12H5FallbackContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/SurveyHealthReviewContractTest.java` | cfc-backend | 9 | SurveyHealthReviewContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/SurveyHealthReviewContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/TeamInvitationCreateContractTest.java` | cfc-backend | 7 | TeamInvitationCreateContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/TeamInvitationCreateContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginContractTest.java` | cfc-backend | 15 | AdminAuthControllerLoginContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` | cfc-backend | 10 | AdminAuthControllerLoginStatus | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthWechatScanTest.java` | cfc-backend | 11 | AdminAuthWechatScan | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthWechatScanTest.java` |
@@ -979,6 +983,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/ButlerControllerGateTest.java` | cfc-backend | 9 | ButlerControllerGate | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/ButlerControllerGateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/butler/ButlerControllerEnvelopeTest.java` | cfc-backend | 1 | ButlerControllerEnvelope | `cfc-backend/src/test/java/com/etotem/cfc/controller/butler/ButlerControllerEnvelopeTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/config/SleepConfigTagsMechanismContractTest.java` | cfc-backend | 10 | SleepConfigTagsMechanismContract | `cfc-backend/src/test/java/com/etotem/cfc/controller/config/SleepConfigTagsMechanismContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyInviteApproveRequestTest.java` | cfc-backend | 7 | FamilyInviteApproveRequest | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyInviteApproveRequestTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | cfc-backend | 7 | FamilyMembersControllerAddMember | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | cfc-backend | 4 | FamilyMembersControllerList | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | cfc-backend | 2 | FamilyMembersControllerRenameFamily | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` |
@@ -1072,10 +1077,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionDistService410Test.java` | cfc-backend | 4 | CommissionDistService410 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionDistService410Test.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | cfc-backend | 5 | CommissionServiceReferralF24 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | cfc-backend | 2 | ConsigneeServiceBackfill | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ContractReflect.java` | cfc-backend | 0 | ContractReflect.java | `cfc-backend/src/test/java/com/etotem/cfc/service/ContractReflect.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` | cfc-backend | 2 | EnergyServiceFamily | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceGrantEnergyTest.java` | cfc-backend | 2 | EnergyServiceGrantEnergy | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceGrantEnergyTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` | cfc-backend | 4 | EnergyServiceWealthIncome | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` | cfc-backend | 3 | FamilyAdminOverviewService | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinRequiredInfoContractTest.java` | cfc-backend | 10 | FamilyJoinRequestServiceJoinRequiredInfoContract | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinRequiredInfoContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinValidationGateTest.java` | cfc-backend | 12 | FamilyJoinRequestServiceJoinValidationGate | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceJoinValidationGateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | cfc-backend | 5 | FamilyJoinRequestServiceReferrerBind | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` | cfc-backend | 5 | FamilyMemberServiceIsChild | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` | cfc-backend | 5 | FamilyPlatformPointsServiceCoupon | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` |
@@ -1103,6 +1111,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceFulfillmentMultiModeTest.java` | cfc-backend | 6 | ProductOrderServiceFulfillmentMultiMode | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceFulfillmentMultiModeTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceSpecialDealTest.java` | cfc-backend | 8 | ProductOrderServiceSpecialDeal | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceSpecialDealTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceUpdateExpressFieldTest.java` | cfc-backend | 3 | ProductOrderServiceUpdateExpressField | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceUpdateExpressFieldTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` | cfc-backend | 4 | ProfitPoolOrderContractRed | `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` | cfc-backend | 8 | RealNameBackfillService | `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportAnalyzeQuotaServiceTest.java` | cfc-backend | 6 | ReportAnalyzeQuotaService | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportAnalyzeQuotaServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportDateExtractorTest.java` | cfc-backend | 6 | ReportDateExtractor | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportDateExtractorTest.java` |
@@ -1110,8 +1119,13 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceBatchEstimateTest.java` | cfc-backend | 9 | RewardRuleServiceBatchEstimate | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceBatchEstimateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceEstimateTest.java` | cfc-backend | 21 | RewardRuleServiceEstimate | `cfc-backend/src/test/java/com/etotem/cfc/service/RewardRuleServiceEstimateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | cfc-backend | 9 | SpecialPriceService | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/StarScoreCalculatorContractRedTest.java` | cfc-backend | 10 | StarScoreCalculatorContractRed | `cfc-backend/src/test/java/com/etotem/cfc/service/StarScoreCalculatorContractRedTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | cfc-backend | 4 | TaskServiceCfEarn | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceReviewTest.java` | cfc-backend | 15 | TaskServiceReview | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceReviewTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamAwardRecordContractRedTest.java` | cfc-backend | 6 | TeamAwardRecordContractRed | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamAwardRecordContractRedTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitContract.java` | cfc-backend | 0 | TeamProfitContract.java | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitContract.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitSchemaContractRedTest.java` | cfc-backend | 6 | TeamProfitSchemaContractRed | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamProfitSchemaContractRedTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/TeamShareRecordEightShareContractRedTest.java` | cfc-backend | 6 | TeamShareRecordEightShareContractRed | `cfc-backend/src/test/java/com/etotem/cfc/service/TeamShareRecordEightShareContractRedTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | cfc-backend | 4 | TencentTtsServiceAuthorization | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserAddressServiceBackfillTest.java` | cfc-backend | 2 | UserAddressServiceBackfill | `cfc-backend/src/test/java/com/etotem/cfc/service/UserAddressServiceBackfillTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` | cfc-backend | 5 | UserServiceEffectiveFamilyIds | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` |
@@ -1143,6 +1157,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | cfc-backend | 2 | AttributionPipelineMock | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | cfc-backend | 2 | AttributionPlanService | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` | cfc-backend | 8 | AttributionRedlines | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` | cfc-backend | 6 | BadgeServiceUnlockNotice | `cfc-backend/src/test/java/com/etotem/cfc/unit/BadgeServiceUnlockNoticeTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | cfc-backend | 5 | CartReplaceCombo | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | cfc-backend | 8 | CfBalanceController | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` | cfc-backend | 14 | CoachButlerNotificationContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/CoachButlerNotificationContractTest.java` |
@@ -1161,7 +1176,9 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyIsolationContractTest.java` | cfc-backend | 8 | EnergyIsolationContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyIsolationContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyLogsContractScoreHistoryTest.java` | cfc-backend | 11 | EnergyLogsContractScoreHistory | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyLogsContractScoreHistoryTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyOverviewContractTest.java` | cfc-backend | 7 | EnergyOverviewContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/EnergyOverviewContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyJoinValidationRulesContractTest.java` | cfc-backend | 14 | FamilyJoinValidationRulesContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyJoinValidationRulesContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` | cfc-backend | 7 | FamilyMemberDimensionBaseScoreService | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` | cfc-backend | 8 | FamilyMemberRelationshipLabel | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | cfc-backend | 4 | FamilyMemberServiceRename | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | cfc-backend | 5 | FamilyNamingSupport | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | cfc-backend | 13 | FamilyUserSwitchRole | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` |
@@ -1187,7 +1204,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` | cfc-backend | 14 | OrderCreatePayShipConfirmScX07Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderCreatePayShipConfirmScX07ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` | cfc-backend | 11 | OrderRefundScP56ScA12Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/OrderRefundScP56ScA12ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` | cfc-backend | 14 | PlanActivationExecutionContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanActivationExecutionContractTest.java` |
-| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | cfc-backend | 31 | PlanLifecycleParentContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` | cfc-backend | 38 | PlanLifecycleParentContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanLifecycleParentContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | cfc-backend | 19 | PlanReviewTeacherContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PointsLedgerScP15ContractTest.java` | cfc-backend | 8 | PointsLedgerScP15Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/PointsLedgerScP15ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductBrowseScP52ScG05ContractTest.java` | cfc-backend | 6 | ProductBrowseScP52ScG05Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductBrowseScP52ScG05ContractTest.java` |
@@ -1213,7 +1230,16 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskProgressUpdateTest.java` | cfc-backend | 3 | TaskProgressUpdate | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskProgressUpdateTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScT06ContractTest.java` | cfc-backend | 6 | TaskReviewScT06Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskReviewScT06ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTemplatePackageContractTest.java` | cfc-backend | 13 | TaskTemplatePackageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskTemplatePackageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` | cfc-backend | 20 | TeamProfitAdminManageContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java` | cfc-backend | 22 | TeamProfitCronContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitHookContractTest.java` | cfc-backend | 7 | TeamProfitHookContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitHookContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitPipelineContractTest.java` | cfc-backend | 8 | TeamProfitPipelineContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitPipelineContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarDigestContractTest.java` | cfc-backend | 14 | TeamStarDigestContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarDigestContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMultiplierContractTest.java` | cfc-backend | 13 | TeamStarMultiplierContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMultiplierContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` | cfc-backend | 24 | TeamStarMyViewContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamStarMyViewContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` | cfc-backend | 4 | TeamUserPortalContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamUserPortalContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TianpanGuideContractTest.java` | cfc-backend | 10 | TianpanGuideContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/TianpanGuideContractTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/UserServiceMaskChildSensitiveFieldsTest.java` | cfc-backend | 5 | UserServiceMaskChildSensitiveFields | `cfc-backend/src/test/java/com/etotem/cfc/unit/UserServiceMaskChildSensitiveFieldsTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` | cfc-backend | 9 | VendorOrderShipConfirmScS03ScS04Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorOrderShipConfirmScS03ScS04ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` | cfc-backend | 9 | VendorProductManageScS02Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/VendorProductManageScS02ContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/WishFlowScP13ContractTest.java` | cfc-backend | 15 | WishFlowScP13Contract | `cfc-backend/src/test/java/com/etotem/cfc/unit/WishFlowScP13ContractTest.java` |

+ 41 - 0
docs/tdd/test/notice-2026-11-08-0747-82round.md

@@ -0,0 +1,41 @@
+# 测试通知 · 研发请处理(第 82 轮 · 2026-11-08 07:47)
+
+> 来源:测试负责人闭环巡检(`review` 离线档)
+> 基线:`origin/cfclub` @ `b037fe71b`(本机 HEAD 0/0 同步)
+> 详细报告:`docs/tdd/test/automation-run-2026-11-08-0747.md`
+
+## 一、本轮有测试结果变化(需研发动作)
+
+| # | 事项 | 现状证据 | 需要的动作 | 优先级 |
+|---|------|----------|-----------|--------|
+| 1 | **B-61 P0 第 4 轮:健康方案鉴权缺口仍未修** | `POST /api/health/plan/{adjust,attribution,generate}` 匿名仍 200 直通(应 401/403);源码复核 `JwtInterceptor.java:87 LOGIN_REQUIRED_PATHS` 仍缺 `/api/health/plan/`。华/小米健康 10/10 已绿,同族漏配持续 | `LOGIN_REQUIRED_PATHS` 增加 `"/api/health/plan/"` → commit → push → 随下一部署轮上线 | **P0(第 4 轮催办)** |
+| 2 | **B-58 收口遗留:langgraph conftest 修复内容未正式入库** | 主干 43 收集 / 26 过 / 17 红(与 R77/R78/R81 完全一致);入库版 `tests/conftest.py` 仍不含 R76 工作区版本的 `collect_ignore=["qna"]`/`llm_live`/`StubLLM` 重构 | 提交 `cfc-langgraph/tests/` 下 conftest 重构(含 `test_memory` 3 例 `FakeEmbeddings` 夹具修复) | **P0** |
+| 3 | **B-56:节点分派通道仍受限** | 189 prompt 404;204/251 命中模型配额限流(1req/3min);251 上 langgraph 9000 CLOSED。本轮浏览器仍本机串行兜底(结果稳定) | 维护/运维恢复 204/251 opencode 模型配额;189 对齐 API 路由;251 放通 9000 | P1 |
+
+## 二、测试侧自处置(不需研发动作,仅同步)
+
+| # | 事项 | 说明 |
+|---|------|------|
+| 4 | **shop `/api/product/list` 一次瞬态 502** | 首轮 TC-S-U01 502(一次);独立复跑 shop 4/4 全绿 + 直接 curl 探针 `000→200→200` → 判定上游瞬态(网关/后端偶发),非排序契约回归;下轮复测确认 |
+| 5 | **/admin 首轮 U04/U05 抖动** | 首轮 3/5(身份自动带出失败),独立复跑 5/5 全绿;与 B-59(登录时序脆弱点)同族,复跑稳定不升级;测试侧按 B-59 建议落实 `waitForURL` 改造 |
+| 6 | 新增功能 S-cfc-61/62/43 编译验证 | team.profit settle/hook/cron 共 +1133 行(含迁移 461 `team_star_snapshot` + `service_cost_config`),本机 `test-compile` EXIT 0 通过;契约测试全绿为 R&D 自述,待环境放行后全量复跑核验 |
+
+## 三、复跑命令(研发自验用)
+
+```bash
+# 后端(JDK8 + IDEA 自带 Maven 3.9.9)
+export JAVA_HOME=/d/jdk1.8.0_25
+"/c/Program Files/JetBrains/IntelliJ IDEA 2025.2.5/plugins/maven/lib/maven3/bin/mvn" \
+  -o -B -f cfc-backend/pom.xml clean test -Dmaven.test.failure.ignore=true
+
+# langgraph(主工作区 venv)
+cd cfc-langgraph && .venv/Scripts/python.exe -m pytest tests --ignore=tests/qna -q
+
+# 前端 / 管理端
+cd cfc-frontend && npx jest --ci
+cd cfc-web && npx jest --ci
+
+# 浏览器(必须在 tests/ 目录内执行,避免双版本 @playwright/test 冲突;本机一次性)
+cd tests && npx playwright test --config=playwright.config.live.js --output=.live-artifacts-r82
+cd tests && npx playwright test --config=playwright.config.health.js
+```