# 测试 → 研发 阻塞台账(正式通道) > 纪律:本台账条目经测试负责人 `--mark-blocked`(或补登记)产生,**push 到远端才算送达研发**; > 解除时由测试用 `--clear-blocked` 置「已解除」。缺陷详情载体见 `test_blockers.md` 与各轮巡检报告。 | 编号 | 关联键/对象 | 类型 | 描述 | 经办 | 登记时间 | 状态 | |---|---|---|---|---|---|---| | B-1 | cfc-backend surefire 13 红 | 研发 | 后端套件产物(11-02 08:31–08:39)148 用例中 8 fail + 5 error 长期未修;1315/1491 @Test 无执行记录。需研发修复红例并补跑全量 | 测试(巡检补登记) | 2026-11-03 10:58 | 待处理 | | B-2 | R5 · admin-auth/login | 研发 | `POST /api/admin-auth/login` 未授权/空 body 返回 500(应为 401/403,异常信息泄露),安全语义缺陷。详情见 test_blockers.md R5 | 测试(巡检补登记) | 2026-11-03 10:58 | 待处理 | | B-3 | R6 · 报告上传 | 研发 | 报告上传未做 MIME/扩展名/内容校验,非 PDF 未被拒(非 4xx),恶意文件上传风险。详情见 test_blockers.md R6 | 测试(巡检补登记) | 2026-11-03 10:58 | 待处理 | | B-4 | F1/F2 · butler envelope / commission 400 | 研发 | §7.1 七条真实 unexpected 缺陷中 F1(butler envelope)、F2(commission 400)复跑确认仍未修复 | 测试(巡检补登记) | 2026-11-03 10:58 | 待处理 | | B-5 | 接口冒烟 REAL_ERR 分型 | 研发 | `interface_classify_failures.py` 分型出 49 条 REAL_ERR(基于 11-01 轮次)未派单未修复;冒烟通过率停 45%,需研发按分型认领真实错误端点 | 测试(巡检补登记) | 2026-11-03 10:58 | 待处理 | | B-6 | health.report.createReport | 研发 | TDD 状态机 RED 停滞(自 11-02 01:06 起):契约级单测已落地并**离线实跑 5 例全绿**(HealthReportControllerCreateReportTest,commit 81d8883f7 已推 origin/cfclub),实现已在库;**缺研发 `--mark-yellow` 登记**,状态机无法推进至 GREEN。更新:2026-11-04 15:20 测试侧复核实跑 | 测试(巡检更新) | 2026-11-03 10:58 | 待处理 | | B-7 | dan.assessment.getActiveMaterial | 研发 | TDD 状态机 RED 停滞(自 11-02 01:06 起):契约级单测已落地并**离线实跑 3 例全绿**(DanAssessmentControllerGetActiveMaterialTest,commit faf3ca174 已推 origin/cfclub),实现已在库;**缺研发 `--mark-yellow` 登记**,状态机无法推进至 GREEN。更新:2026-11-04 15:20 测试侧复核实跑 | 测试(巡检更新) | 2026-11-03 10:58 | 待处理 | | B-8 | CfBalanceControllerTest(P0 编译回归) | 研发 | commit dfc78e9d3(2026-11-03 23:27)给 `CfBalanceController.balance`/`logs` 新增 `currentMemberId` 参数,但 `CfBalanceControllerTest.java`(76230e2f4,2026-10-25)未同步 → 7 处编译错误(行 95/113/121/140 调 balance、169/189/202 调 logs),整模块 testCompile 失败,1474 @Test 零执行。需研发补改测试 7 处调用或回退签名 | 测试(巡检补登记) | 2026-11-04 03:49 | 已解除 → 44b2f0d42(2026-11-05 00:31)重写控制器移除 currentMemberId 再次触发同源编译回归,详见 B-10(待处理) | | B-9 | guide.trainingPlan.getPlanDetail(鉴权缺口观察) | 研发 | `POST /api/guide/training-plans/detail` handler 在控制器层不读取 `@RequestAttribute("role")`,亦未列入 JwtInterceptor `LOGIN_REQUIRED_PATHS`,「规划师角色约束」名义成立但任何已认证角色(乃至匿名 userId=-1)均可到达 handler,属潜在越权缺口(同文件 `getPlanList` 同类观察,TR-1 第 6 点要求测试侧记录)。契约测试已落地(TrainingPlanControllerGetPlanDetailTest,8 例全绿),本条仅作缺陷观察回写,不阻断 RED→YELLOW→GREEN 推进 | 测试负责人(应 TR-1 登记) | 2026-11-04 10:10 | 待处理 | | B-10 | CfBalanceControllerTest(P0 编译回归·复发) | 研发 | commit `44b2f0d42`(2026-11-05 00:31:53,「chore(sync): 工作区遗留未提交 WIP 收尾同步」)重写 `CfBalanceController.balance` 为 `balance(@RequestAttribute("userId") Long userId)`、`logs` 为 `logs(userId, page, size)`,删除 `currentMemberId` 参数及 `stats`/`familySummary` 方法;但测试 `CfBalanceControllerTest`(仍停在 `c9f9ec948`,曾为修复上轮 P0 给测试**加上** `currentMemberId` 实参)未同步 → 仍调 `balance(7L, null)` / `logs(7L, null, 1, 20)`,实参个数不符 → testCompile 失败,1474 @Test 零执行。需研发改测试 7 处调用去掉 `currentMemberId` 实参(或回退 44b2f0d42 改写)。本轮(01:05)复跑复现,日志 `/d/cfc/.tdd/backend-run-20261105-0105.log`。**升级(01:36 复跑确认)**:测试文件已被 `44b2f0d42` 迁移至 `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java`,仍以旧签名调用 → **7 处编译错误**(行 95/113/121/140 调 `balance(7L,null)`、169/189/202 调 `logs(7L,null,1,20)`,控制器现为 `balance(userId)` 单参 / `logs(userId,page,size)` 三参)→ `mvn -o -B -f cfc-backend/pom.xml -DskipTests=false -Dtest='HealthReportControllerCreateReportTest,DanAssessmentControllerGetActiveMaterialTest,TrainingPlanControllerGetPlanDetailTest' test` @ testCompile **BUILD FAILURE**;**全模块 1474 @Test + 16 契约测试(历史 8 轮全绿)全部零执行**,4 个 YELLOW 键(createReport/getActiveMaterial/getTree/mapLegacyCode)复验收口亦被连带阻断。**优先级 P0(阻断全模块测试验证)**。建议研发:改测试 7 处调用(`balance(7L)` / `logs(7L,1,20)`)或回退 44b2f0d42 | 测试(01:36 复跑确认补登记) | 2026-11-05 01:36 | **已解除(03:30 复验确认)**:研发负责人1 正式修复 `37f29a5df`(2026-11-05 02:30,移除 7 处多余 null 实参与 `balance(userId)`/`logs(userId,page,size)` 对齐)已推 origin/cfclub 且 `merge-base --is-ancestor` 核验通过;测试侧 03:30 在远端基线复跑:**testCompile 205 源 0 错**、16 契约测试(createReport 5 + getActiveMaterial 3 + getPlanDetail 8)**16/16 全绿**、CfBalanceControllerTest 8/8 绿(含在全量 204 类/1528 例 91.88% 基线,02:50 批次全量实跑)。复验通道恢复,2 个 YELLOW 键(getActiveMaterial/createReport)测试复验通过 | | B-11 | `/api/cf` 三端点删除(待确认意图) | 研发 | `44b2f0d42`(11-05 00:31,`chore(sync)` 工作区 WIP 收尾)删除 `/api/cf/stats`、`/api/cf/family-summary`、`/api/cf/promotion-earnings` 及前端 3 个封装(-210 行)。**全套 1528 例零转红**,即删除行为无任何用例可证伪。该提交标题为"遗留 WIP 收尾同步",具备误覆盖特征。需研发确认:有意精简 / 误覆盖 → 前者补 `API_REFERENCE.md` 下线记录,后者 revert 并补 3 端点用例 | 测试(36 轮巡检登记) | 2026-11-05 02:48 | 待处理 | | B-12 | 3 类 20 个 `@Test` 长期 `@Disabled` | 研发/测试 | `DataMigrationServiceTest`(11,依赖 sfms 数据源)、`TaskServiceMinigameTest`(5,依赖硬编码 userId=1L)、`TeacherLoginTest`(4,依赖硬编码手机号,测试间数据污染) 均类级 `@Disabled`;台账 @Test 1545 与实际执行 1528 差 17 例。根因统一为测试数据夹具缺失。需建 seed 脚本/`@Sql` 夹具后解禁。**口径精确化(37 轮)**:注解 1545 − 20(3 类 @Disabled 内注解)+ 3(surefire 为每个禁用类仍记 1 条 skipped 占位)= 1528,误差 0;已逐类排除「参数化展开」假设(全仓参数化类 注解数=执行数)。 | 测试(36 轮登记/37 轮精确化) | 2026-11-05 02:48 | 待处理 | | B-13 | 3 个 @SpringBootTest 类硬编码 127.0.0.1:3306(环境红根因) | 研发/环境 | `AdminFamilyOverviewControllerTest.java:21-22`、`service/FamilyAdminOverviewServiceTest`、`service/UserServiceFamilyNameLinkTest` 三处 `@SpringBootTest(properties={"spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zxyj…"})` 硬编码本机 MySQL;本机无 MySQL → `Connection refused` → `Failed to load ApplicationContext`,**8 例每轮必红**(37 轮实测异常链:BeanCreationException → primaryDataSource → HikariPool$PoolInitializationException → CommunicationsException → ConnectException)。全仓 `grep -rl 127.0.0.1:3306 src/test` 命中恰好这 3 类。**非池压力**(37 轮 `Too many connections` 出现 0 次)。建议:改 `@ActiveProfiles("test")` + `src/test/resources/application-test.yml` 统一指向 192.168.16.251 测试库(池上限 4)。 **67 轮实测修正(2026-11-07 09:30)**:`netstat` 显示本机 3306 有监听,且同批 `GuideModuleIntegrationTest` 报 `MysqlDataTruncation`(证明存在**可达 MySQL**),故红因非「端口不通」而是 **`primaryDataSource` 指向实例握手失败**(异常链终点 `Communications link failure`)。建议统一数据源指向。 | 测试(37 轮巡检登记) | 2026-11-05 05:30 | 待处理 | | B-14 | 测试窗口内并发提交(基线漂移) | 研发/流程 | 38 轮全量跑测窗口(06:16→07:15,58:41)内 HEAD 由 `345cf745e` 前移至 `f1b0e3ed5`,落入 `8660d7dbe`(SC-G-06 越权拦截:`JwtInterceptor`+3 测试类)与 `0dce400d2`/`f1b0e3ed5`(switchRole:`FamilyMembersController`/`FamilyMemberService`+`FamilyUserSwitchRoleTest`);4 个测试文件 mtime 07:14:57–07:15:12 晚于 `testCompile`(`Compiling 205 source files`)→ 聚合首扫即 `源类 208 / 报告 204 / 沉默 4`。若不补跑将把 41 例新增用例漏记、并把新特性回归风险误报为「零变更」。**已处置**:定向补跑 5 类 46/46 绿(`testCompile` 209 源 0 错)。**遗留**:其余 199 类未在 `f1b0e3ed5` 上重验。建议跑测改 `git worktree` 固定 SHA 或 CI checkout SHA,报告头部固化 `rev-parse HEAD` | 测试(38 轮登记) | 2026-11-05 07:25 | 部分处置(补跑已完成,全量复验待下轮) | | B-15 | 度量脚本丢失且从未入库 | 测试/度量 | `discover_tests.py` / `test_inventory.py` 全仓 `find` 无命中,`git log --all` 为空 → 从未提交,属本地未跟踪脚本已被清理;历史台账「覆盖 365 / 跨源用例 2731 / @Test 1545」**不可复现**,跨轮对比失去基准。38 轮改用内联统计(357 控制器 / 1933 `@PostMapping` / 8 `@GetMapping` / 204 测试文件 / 1546 `@Test`)。建议脚本纳入 `docs/tdd/tools/` 并提交,报告注明脚本版本 | 测试(38 轮登记) | 2026-11-05 07:25 | **部分解除(62 轮)**:`docs/tdd/tools/test_report_metrics.py` 已落地(聚合/归因/场景/恒等式四类度量,复算一致),但**仍无法入库**——根因即 `.gitignore:70 *.py`(见 B-33);`discover_tests.py` / `test_inventory.py` 亦未恢复,「覆盖 365 / 跨源用例 2731」依旧不可复现 | | B-16 | 根级 integration 套件缺凭据夹具(12 例恒红) | 测试 | 9082 已在线后套件不再 `fetch failed`,暴露真实根因:`tests/integration/plan-chain.spec.js:21-22` 依赖 `ADMIN_PHONE`/`ADMIN_PASSWORD`(当前为空)→ `[0] 前置环境检查` 收到空串、`[1] 登录` 返回 `code=500 msg=用户不存在`;`mini-games-api.spec.js` 10 例 `Expected 200 / Received 401`(无 token)。判为**测试侧配置缺口**,非生产缺陷。建议新增 `tests/.env.test` + seed 脚本,`globalSetup` 内自动登录取 token,CI 注入 `API_BASE_URL=http://127.0.0.1:9082` | 测试(38 轮登记) | 2026-11-05 07:25 | 待处理 | | B-17 | `.tdd/state.json` 与 08:12 轮报告脱节(新增 2 RED 键未落账) | 研发/流程 | 08:12 轮报告(`automation-run-2026-11-05-0812.md`)与提交 `69f8820d8` 说明称新建 `task.parent.createTask` / `task.parent.review` 两个 RED 键并落契约测试(39 轮独立实测 **7 绿 + 17+15=32 绿**,与报告吻合);但本地 `.tdd/state.json` 仍只有 3 键(`health.report.createReport` / `dan.assessment.getActiveMaterial` / `guide.trainingPlan.getPlanDetail`),`updated_at` 仍为 2026-11-04 10:14。**报告说的 ≠ 状态机记的**,看板无法反映真实进展。需走 CLI 补登记(`--add-task` + `--mark-red --commit `),禁止手改 `state.json` | 测试(39 轮巡检登记) | 2026-11-05 09:40 | 待处理 | | B-18 | A 类测试漂移 54 例集中爆发(Mockito 误用 + 断言基线过期) | 研发/测试 | 39 轮全量实测非环境红 112 例/34 类,其中 **A 类 54 例/17 类**可纯测试侧修复:`doNothing()` 用于非 void 方法(`ArticleControllerTest`/`PlannerBindInviteFlowTest`/`DailyCheckinStreakFlowTest`)、matcher 混用(`ProductControllerTest` 3E `InvalidUseOfMatchers`、`ProductOrderServiceFulfillmentMultiModeTest` 6E)、桩名过期(`ProductOrderControllerTest` 6E 打 `confirm`/实现 `confirmReceive`)、反射注入已删字段(`TaskProgressUpdateTest` 3E `NoSuchFieldException: platformPointsService`)、断言基线漂移(`WishControllerTest` 文案 `childId`→`memberId`;`StatsControllerTest`/`MindFortuneControllerTest` 500 vs 5001;`HealthDimensionControllerTest` **期望 500 实得 200**)。**批量修完 54 例后 G1 由 92.41% → ≈95.7%,G2 由 112 → 58**,是当前性价比最高的一步。**精确化(22:13 轮实测,维度合并后首验 28 例 26 绿/2 红)**:`HealthDimensionControllerTest.overview_missingMemberId:58` / `history_missingMemberId:217` 期望 `result.getCode()==500` 实得 `200`——根因=用例调用 `controller.overview(params, 1L, 1L)` / `history(params, 1L, 1L)` **误传 currentMemberId=1L**,实现 `ParamUtils.getLong(params.get("memberId"), currentMemberId)` 触发双角色「家长视角 currentMemberId 兜底」(设计行为)→ memberId=1L 非空走正常路径 200。**测试装置口径错误,非生产缺陷**;修复:第 3 参传 `null`(或断言兜底 200) | 测试(39 轮登记,22:13 轮精确化) | 2026-11-05 09:40 — **20:20 轮全量更新**:A 类仍为最大单一块,实测 **51 例 / 15 类**(`ArticleControllerTest` 9、`CfCommissionServiceSettleTest` 8、`ProductOrderControllerTest` 6、`ProductOrderServiceFulfillmentMultiModeTest` 6、`AuthControllerTest` 4、`ProductControllerTest` 3、`ProductOrderServiceUpdateExpressFieldTest` 3、`ArticleWorkflowTest` 3、`GuideTeamControllerTest` 2、`WishControllerTest` 2,其余 5 类各 1);**修完预测 G1 = (1727+51)/1847 = 96.26%,红例 116→65,红类 36→21**,为当前最优杠杆 | 待处理 | | B-19 | `cfc-langgraph` pytest 长期「未实测」结论已过期,首次实测 19 红 | 测试/研发 | 41 轮(11-05 15:19)探活发现 `cfc-langgraph/.venv/Scripts/python.exe` = **Python 3.12.7**,`pytest 9.2.0` / `fastapi` / `httpx` / `langgraph` 全部可 import → 此前 #28–#40 多轮报告的「无 .venv / 缺 httpx → pytest 47 例未实测」**结论过期**(度量失真,同 N-1 类)。首次实跑 `pytest tests --ignore=tests/qna`:**43 例 24 绿 / 19 红(55.81%)**。19 红分层:**C 环境 14 例**(`401 Authentication Fails, Your api key: ****ocal is invalid` → analyze 2 + auto_tag 5 + chat 1 + intent 4;另 report_parse 2 例因用例写死容器路径 `/app/cfc/docs/参考资料/*.pdf` 在本机 400);**A 测试漂移 5 例**(`test_graph` 2:`GenerateRequest.respondent_name Field required` 而用例仍发 `member_name`;`test_memory` 3:`MemoryManager.__init__() missing 'embeddings'`)。另 `tests/qna/test_graph.py` 收集期 `ModuleNotFoundError: No module named 'src.qna'` → 整模块 0 例可执行(死资产)。建议:①注入测试 LLM 凭据或对 LLM client 全 mock;②`test_report_parse` 路径改相对仓库路径;③删/重写 `tests/qna/test_graph.py`;④pytest 纳入 CI | 测试(41 轮巡检登记) | 2026-11-05 16:20 | 待处理 | | B-20 | Playwright 规模扩张至 96 spec 而长期未实测 | 测试/环境 | #40 记录 69 spec / 402 `test()`,#41 复核为 **96 个 spec 文件**(+27),但唯一一次实测是 11-05 12:14 execute 档(用户显式授权联网)的 API 级 83 例(66 绿 / 6 红 / 3 跳过 / 8 串行阻塞,91.67%);UI 级因 `cfc.iwintrue.com` 无前端页面(`/` 404)不可跑。此后各轮均记「未授权联网 → 未实测」。风险:spec 持续增长而信号为零,用例腐化不可见(如 12:14 已发现 2 条路径/断言过期)。建议:①本地 9082 在听时改用 `playwright.config.api.js`(无 globalSetup,不 reset 共享库)纳入每轮;②默认配置的 `globalSetup` 会 `reset-db.sh` 重置共享测试库,禁止在共享环境直接跑;③UI 级待补独立前置环境 | 测试(41 轮登记) | 2026-11-05 16:20 | 待处理 | | B-21 | SC-P-11 契约回归(YELLOW 键首次转红) | 研发/测试 | 42 轮全量实测:`TaskControllerReviewTest` 由连续 7 轮 17/17 全绿降为 **15/17**(`pendingReview_parent_success_returnsList:176` 与 `pendingReview_directCall_uniformResultShape:316` 均 NPE)。根因=SC-X-22 合入 `f14e46f84` 在 `TaskController.java:197/205` 新增 `rewardRuleService.attachTaskListEstimate(...)`,而该测试用 `new TaskController()` + 手工注入(`:80-84`)未补 `RewardRuleService` → 字段 null。**性质:A 类(测试夹具未跟进生产新增依赖)**,生产侧 `resolveMemberIdByUser:157`/`attachTaskListEstimate:193` 均有 null 守卫,非生产缺陷。影响:SC-P-11 契约 32 → 30 绿、G8 由「3 红」扩为「5 红」;证明「契约绿无回归网」——无 CI 时绿是瞬时绿。建议:该类补 `@Mock RewardRuleService` 并注入,同批 `grep -l "new TaskController()" src/test` 全量排查 | 测试(42 轮实测登记) | 2026-11-05 18:26 | **已解除(52 轮测试侧自修,2026-11-06 04:5x)**:测试侧在 `TaskControllerReviewTest.java` 补 `@Mock RewardRuleService` + `ReflectionTestUtils.setField(controller, "rewardRuleService", ...)`(+6 行)后,定向复跑 **17/17 全绿**(BUILD SUCCESS),并对完整 9 类 79 例契约套件复跑:**74 绿 / 3 红(P-2 MapContract 口径·与既往一致)/ 0 错**——B-21 的 2 个 NPE 错误清零,G8 契约红由 5 降至 3。同批 `new TaskController()` 手工注入排查仍建议执行(B-22 关联) | | B-22 | CF 预估挂载的 N+1 读与鉴权清单无守护 | 研发/测试 | ①**N+1**:`attachTaskListEstimate`(`RewardRuleService:193`)对列表逐条调 `estimate()`,已挂 6 处(`TaskController:109/197/205/358`、`GuideFamilyTaskController:271/295`),命中 `/api/tasks/today`、`/pending-review`、`/today-parent`、规划师任务历史与待审等高频接口;`attachTaskEstimate:186` 用 `catch (Exception) log.warn` 静默吞异常,降级不可见。既有 `RewardRuleServiceEstimateTest` 仅测单条计算,**无「N 条任务 → 查询次数」与「降级仍 200」断言**。②**鉴权清单**:`/api/reward/estimate` 已正确加入 `JwtInterceptor.LOGIN_REQUIRED_PATHS:124-127`,但 11 例契约测试为 standalone MockMvc,不经拦截器 → 该清单条目零断言覆盖(历史上 SEC-20261031-01 / SC-G-06 均因鉴权清单漂移返工)。建议:补批量查询次数断言 + 降级断言;补对 `LOGIN_REQUIRED_PATHS` 全条目的「无 token → 401」参数化契约用例 | 测试(42 轮巡检登记) | 2026-11-05 18:26 — **20:20 轮收口(测试侧自处置)**:`JwtInterceptorLoginRequiredPathTest` 全量实跑 **28/28 全绿**,已将 `LOGIN_REQUIRED_PATHS` 全条目以 `@ParameterizedTest + @MethodSource` 展开为 27 条「无 token → 401」契约(+1 主用例),历史「鉴权清单零断言守护」缺口闭环;N+1 批量查询断言部分仍未补,保留观察 | **已解除(清单守护部分)** | | B-23 | SC-X-22 契约测试 15 例未入库 | 测试/流程 | `RewardEstimateControllerEstimateTest`(11) 与 `RewardRuleServiceEstimateTest`(4) 参与 43 轮全量执行且 **15/15 全绿**,但 `git ls-files` 对 `cfc-backend/src/test/java/com/etotem/cfc/controller/reward/`、`.../service/RewardRuleServiceEstimateTest.java` **零命中**(`git status` 为 `??`,mtime 17:34/17:42)→ 只存在于主工作区。任何 `git clean -fd` / 工作区重置都会静默丢失(同类事故已发生:B-15 度量脚本丢失)。且违反「完成 = 已提交 + 工作目录干净」铁律,与 O-3 同源(主工作区本轮仍有 126 项未提交/未跟踪)。建议:`git add` 两路径 → commit + push origin/cfclub → `--clean-check` 复核;测试/契约文件入库纳入 DoD | 测试(43 轮实测登记) | 2026-11-05 21:02 | 待处理 | | B-24 | 跑测时延劣化 +18%,结果零漂移(环境时延) | 测试/环境 | 同码复跑对账:XML 单类耗时总和 **1649.3s → 1952.2s(+18.4%)**,Maven **31:36 → 36:49**;用例/F/E/S 完全一致(218 类 1664 例 71F 51E 4S)。增量集中 `@SpringBootTest` 类:GuideOrder +200s、AIChat +120s、Wish +62s、AdminSpecialPrice +53s;期间 `Exception during pool initialization` 8 次(3 类硬编码 `127.0.0.1:3306`,B-13 未修),`Too many connections` 0 次 → 判为外部依赖时延,非代码劣化。风险:长窗口放大 B-14(窗口内并发提交),CI 时长不可估。建议:容器化固定测试库/Redis + 报告中固化「总耗时 / 单类 Top5」基线(±5% 带) | 测试(43 轮实测登记) | 2026-11-05 21:02 | 待处理 | | B-25 | 新测试类反射注入已删字段(A 类同源反模式) | 测试 | 02:43 轮全量实测:`KnowledgeBaseBackfillTest` 9 例 **2 错**,`NoSuchFieldException: productDimensionConfigMapper`(`KnowledgeBaseBackfillTest.java:220`)——该字段已在统一维度合并中移除,测试仍用反射注入。与 `TaskProgressUpdateTest` 3 例(`platformPointsService` 反射字段同样已删)**同源**,合计 5 例。性质:A 类(测试装置未跟进生产重构),非生产缺陷。建议:改用服务当前持有的 Mapper 字段或 `@InjectMocks`,同批 `grep -rn 'getDeclaredField' src/test` 全量排查 | 测试(02:43 轮登记) | 2026-11-06 03:40 | 待处理 | | B-26 | cfc-backend 主工作区 testCompile 阻断(11 个 integration 测试文件 WIP) | 研发 | 主工作区 `mvn testCompile` 失败:`ArticleControllerTest.java:201/215/226` 三处编译错误(`recordRead` 找不到符号,位置 `OngoingStubbing`)。**根因(20:20 轮细化)**:WIP 采用 `when(articleService).recordRead(eq(1L), isNull(), isNull(), eq(30)).thenReturn(new HashMap<>())`——`when(T mock)` 返回 `OngoingStubbing`,其无 `recordRead` 方法,属 Mockito API 误用;主代码 `ArticleService.recordRead(Long,Long,Long,int)` 返回 `Map`(`ArticleService.java:409`),故正确写法为 **`when(articleService.recordRead(...)).thenReturn(...)`**(方法调用置于 `when(...)` 内)。**同时**已提交基线本身亦为 A 类装置缺陷:3 例用 `doNothing().when(...).recordRead(...)` 对非 void 方法 stubbing → `Only void methods can doNothing()`。测试侧已用独立 worktree 干净基线(`origin/cfclub` `e4ce9f80a`)旁路完成全量 231 类 1847 例 93.50%,证明**非主线回归**。**登记留痕丢失**:本条 19:10 首登后未入库,19:37 工作区文件被回滚覆盖(与 B-15/B-23 同类资产丢失),20:20 轮据实测重建。建议:① 按上述正确写法修 3 处并同批复核 `getPublicList`/`getFeatured` 8 处实参个数;② testCompile 复验 0 错后提交推送 | 测试(59/60 轮实测登记) | 2026-11-06 19:10(20:20 细化重建) | 待处理 | | B-27 | `@Test` 恒等式失效(引入 @ParameterizedTest 后口径未修订) | 测试 | 20:20 轮全量实测 `@Test 1838 − 20(3 类类级 @Disabled)+ 3(surefire 占位)= 1821`,但 surefire 实际执行 **1847** 例,差 **26**。根因:`cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorLoginRequiredPathTest.java:62` 引入 `@ParameterizedTest + @MethodSource`,该类单注解展开 **27** 例(surefire `tests=28` = 1 @Test + 27 展开)。修订后恒等式:`@Test − 类级@Disabled + 占位 + Σ(参数化展开数−1) = 执行数`(本轮 1838−20+3+26=1847,误差 0)。风险:口径不修正会把新增用例漏记/错记(B-15/B-26 同源度量漂移)。建议把计数脚本 `count_identity.py` 纳入 `docs/tdd/tools/` 并入库 | 测试(20:20 轮登记) | 2026-11-06 20:20 | 待处理 | | B-28 | 测试交付物跨分支丢失(第 59 轮报告 + B-26/O-5 在 cfclub 不可见) | 研发/流程 | 19:41 仓库分支由 `feature/report-upload-product-cards` 切至 `cfclub`(HEAD `df7f60af5`,merge `da2727f53`+`e205656ee`);`git merge-base --is-ancestor 963bedae7 HEAD` = **NO** → 19:12 提交的第 59 轮报告(`docs/tdd/test/automation-run-2026-11-06-1910.md`)与 B-26/O-5 台账条目**在 `cfclub` 分支不存在**(文件在磁盘上被 checkout 覆盖清除)。内容未真丢(仍在 `origin/feature/report-upload-product-cards` 祖先链上,`merge-base --is-ancestor 963bedae7 origin/feature/...` = YES),但主线不可见 → 台账审计断链。与 B-14(窗口内并发提交)/ B-15(脚本丢失)/ B-23(测试文件未入库)同族:**测试交付物没有随主线合并机制**。建议:① 主理人裁决 `git cherry-pick 963bedae7` 或合并 feature 分支;② 测试报告/台账提交统一落在 `cfclub`(主线)分支,避免分支切换即丢失;③ 跑测前记录 `git rev-parse --abbrev-ref HEAD` 与 HEAD sha,报告中固化 | 测试(20:20 轮实测登记) | 2026-11-06 20:20 | 待处理 | | B-29 | WIP 测试校准批次被 3 行 Mockito 误用阻断(P0) | 研发/测试 | 主工作区 39 项 WIP(11 后端测试 + 8 pytest + 2 前端 spec)**已具备大幅转绿能力**:隔离副本带入 WIP 并仅修 3 行后,11 个被改后端类 **170 例 48 红 → 6 红(−42)**,其中 Article/GuideOrder/ProductOrder/Product/GuideTeam/Payment/Family/Auth 8 类清零;pytest **24 绿 → 49 绿(执行口径 96.1%)**;前端 **296 → 313 全绿**。合计预测 **(2148+67)/2299 = 96.37%**,后端 **95.78%**(越 G1)。**唯一阻断**:`ArticleControllerTest.java:201/215/226` 三处 `when(articleService).recordRead(...)` 应为 `when(articleService.recordRead(...))`(`when(mock)` 返回 `OngoingStubbing`,无 `recordRead`;`ArticleService.recordRead` 返回 `Map`,见 `:409`)→ 修此 3 行即可编译入库。剩余 6 红:GuideFamilyTask 3(overview/reviewTask/batchReview)+ GuideRolePermission 2(reviewTask/batchReview NPE、计数 0)+ Stats 1(文案「请先创建或加入家庭」)。建议:修 3 行 → `mvn test-compile` 0 错 → `git add` 21 个测试文件 + 台账 → push → `--clean-check` 复核 | 测试(62 轮实测登记) | 2026-11-06 23:10 | **已解除(65 轮实测转正,2026-11-07 02:15)**:在隔离树 `D:\_wt_r0032`@`78976243e` 代入 21 个 WIP 测试资产 + 上述 3 行修正后,`testCompile 232 源 0 错`,全量 `mvn -o -B clean test` 跑出 **1847 例 / 1769 绿 / 45F / 29E / 4S = 95.78%**(红例 116→74,−42),与 62 轮预测值**逐位一致**(95.78% / 74 红例 / 前端 313 / pytest 49 绿)。修正后写法:`when(articleService.recordRead(eq(1L), isNull(), isNull(), eq(30))).thenReturn(new HashMap<>())`(`:201/:215/:226`)。**遗留未闭环部分转入 B-36/G12**:21 个测试资产仍为工作区 WIP,未提交入库(测试角色不代提交研发 WIP,待 O-5 裁决) | | B-30 | 场景/用例台账与自动化资产零编号锚点(覆盖不可量化) | 测试/需求 | 实测 215 个用户场景(11 文件)、784 条 TC(异常流 474 = 60.5%),但 **TC 编号在 348 个测试资产中出现 0 次**(0/784);场景被 Playwright spec 字面引用仅 **6 个(2.8%)**,被用例台账映射 155 个(72.1%)。后果:无法回答「哪些 SRS 场景没有自动化」,历史各轮只能以「用例数/通过率」代替「需求覆盖率」。根因:`tests/test-cases/*.md` 的 `对应 e2e` 列与真实文件名脱节(如 `e2e/roles/parent/../tasks` 非合法路径),资产侧亦无 `@TC-*` 锚点约定。建议:① 约定每个自动化用例首行注明 TC 编号;② 写反向核对脚本生成「场景→TC→资产」三列缺口清单;③ 按角色分 4 批补锚点,优先 `-N` 负向 TC(异常流) | 测试(62 轮登记) | 2026-11-06 23:10 | 待处理 | | B-31 | `application.yml` 7 处明文凭据(安全) | 研发 | `cfc-backend/src/main/resources/application.yml` 存在 **7 处** `password/secret/api-key/appsecret` 明文赋值(本台账不复制取值),覆盖数据源口令、微信 appsecret 与第三方 key。任何具备仓库读权限者可直取测试/生产凭据;且历史提交已留在 git 历史中。建议:改 `${ENV}` 占位 + 本地 `.env`(gitignore)+ 配置中心/Secret 管理;**同时轮换已泄露凭据**;CI 加明文凭据扫描(gitleaks 规则集) | 测试(62 轮静态扫描登记) | 2026-11-06 23:10 | 待处理 | | B-32 | 场景/用例度量口径跨轮漂移(度量不可比) | 测试 | 本轮实测:场景 **215**、TC **784**(异常流 474);上一轮报告记「场景 244、TC 492(异常流 237)」。差异非增长(90 分钟内不可能新增 292 条 TC),而是**解析口径不同**(是否计入 `### 场景`(08/09 butler 17 条)、是否计入 `TC-*-N*` 负向编号、类型列是否含「权限」判异常)。与 B-15/B-27 同族:**度量脚本未入库、口径未固化** → 跨轮数字不可相减。建议:把 `_r2135_scene.py` 等脚本收进 `docs/tdd/tools/` 并入库,报告固定写「口径定义 + 脚本版本」,禁止手算 | 测试(62 轮登记) | 2026-11-06 23:10 | **部分解除(62 轮自处置)**:度量脚本已落地 `docs/tdd/tools/test_report_metrics.py`(聚合 + 逐例归因 + 场景覆盖 + 恒等式,纯只读、带 CLI 参数),本轮数字用该脚本复算完全一致(231 类/1847 例/1727 绿/93.50%/36 红类/116 红例;场景 215、TC 784、异常流 474、TC 锚点 0/784;恒等式 1838−20+3=1821,参数化净增 26 → 1847)。**但脚本无法入库**:被 `.gitignore:70 *.py` 全局忽略 → 见 B-33,需放行规则后才算真闭环 | | B-33 | `.gitignore:70 *.py` 全局忽略 Python 文件 —— 度量脚本「写了就丢」的真正根因 | 研发/流程 | 62 轮把度量工具落到 `docs/tdd/tools/test_report_metrics.py` 后 `git add` 被拒:`git check-ignore -v` → **`.gitignore:70:*.py`**。这解释了 B-15(`discover_tests.py`/`test_inventory.py` 全仓丢失、历史度量不可复现)与 B-32(口径跨轮漂移)为何反复发生:**任何 Python 度量/校验脚本在本仓库都不可能入库**,只存在于某个工作区,分支切换或清理即消失。影响面:度量脚本、数据 seed 脚本、报告解析脚本(`docs/scripts/fingerprint_engine.py` 等)同受此规则约束(后者是否被例外放行需核实)。建议:把规则细化为 `/*.py`(仅忽略仓库根临时脚本)或追加例外 `!docs/tdd/tools/*.py`、`!docs/scripts/**/*.py`,再由研发提交一次;测试侧脚本需随之入库。**注意:`.gitignore` 属研发所有,测试角色不代改** | 测试(62 轮实测登记) | 2026-11-06 23:10 | 待处理 | | B-34 | LangGraph 问卷生成 100% 失败降级(`GenerateRequest` 缺 `prompt_template`) | 研发 | **P0 生产缺陷**。`c3925c97e feat(langgraph): 全部提示词迁移到Java后端可配置` 只给 `cfc-langgraph/src/schemas/tongue.py:14` 的 `TongueRequest` 加了 `prompt_template`,**未给 `src/schemas/questionnaire.py:39 GenerateRequest` 加**;而 `src/graphs/questionnaire.py:39 build_prompt` 直接读 `req.prompt_template` → 每次调用必抛 `AttributeError`。链路:Java `AiGateway:321` 恒发送 `prompt_template` → pydantic 静默丢弃额外字段 → 图节点必抛 → 接口 500 → `AiGateway` catch 后返回 null → 调用方**静默降级模板**。即 `/api/family/questionnaire` 的 AI 生成能力 100% 不可用。`c3925c97e` 已在 `origin/cfclub` 祖先链 → 现网同样受影响。65 轮 pytest 实测 2 例必红即此因。修复:`GenerateRequest` 增 `prompt_template: Optional[str] = Field(default=None, ...)`(与 `TongueRequest:14` 对齐);`build_prompt` 可加 `getattr` 防御。闭环:`pytest tests/test_graph.py` 2 例转绿 + `/api/v1/questionnaire/generate` 返回 200 且 `questionnaire_json` 非空 + `AiGateway` 不再打「调用失败」warn | 测试(65 轮实测登记) | 2026-11-07 02:15 | **⚠️ 重新打开(2026-11-07 13:25 线上实测)**:67 轮的「已解除」只对**仓库代码**成立,对**部署实例不成立**。本轮直连部署态 LangGraph 实测:`POST https://ai.etotem.com.cn/api/v1/questionnaire/generate` → **HTTP 500** `{"error":"graph 执行失败: 'GenerateRequest' object has no attribute 'prompt_template'"}`;线上 `/openapi.json`(cfc-langgraph v0.3.0)的 `GenerateRequest` 仍只有 `member_name/respondent_name/relationship_type/member_profile/respondent_profile/family_context`,**无 `prompt_template`** → 部署包为修复前版本。B-43 为其发布侧跟踪条目 | | B-35 | DAN 报告解析 A1/A2/B4 仍失效(修复提交未覆盖该版式) | 研发 | `DanReportParseServiceTest` 65 轮全量实测 **4 例红**:`testParseA2_standardCoreLiteracyFormat:262`(姓名 `expected 俊辰 but null`)、`testParseB4_regression:280`(仍走降级 `expected false but true`)、`testParseA1_shouldFallbackToGenericPattern`、`testParseA1_shouldExtractCognitiveDimensionFromDetailPage`(`expected not null`)。而 `c611ec55d fix(dan): 修复 A1/B4 认知维度解析失效` 声称已修 → **修复未覆盖这两种版式**(`testParseA2_regression` 同批绿、`standardCoreLiteracy` 版式红,说明是版式分支漏配)。健康报告解析为核心链路(AGENTS.md「健康报告 PDF 上传与解析」)。建议按真实样本补版式分支 + 回归样本入库。闭环:4 例转绿 + 用 3 份真实报告样本走 `/api/health/report/parse` 人工比对字段 | 测试(65 轮实测登记) | 2026-11-07 02:15 | **已解除(67 轮实测复验,2026-11-07 09:30)**:`DanReportParseServiceTest` 全量 **38/38 GREEN**,此前 A1/A2/B4 4 红清零 → 版式分支补配生效;真实样本人工比对待下轮(TR-11 跟踪) | | B-36 | 根级黑盒 API 套件由「12 恒红」转为「默认 skip」,接口层覆盖归零 | 测试/环境 | WIP 将 `tests/integration/mini-games-api.spec.js:6-11`、`plan-chain.spec.js:21-22` 改为 `CFC_API_E2E==='1' && CFC_API_TOKEN` 门控(原写死 `Bearer test-token` 打真服务 → 恒 401/500)。方向正确(消除 12 个伪红),但 65 轮实测 **23 例全部 skip、0 执行**(`Tests: 23 skipped`)→ 接口层验收从「假红」变「真空」,且 `plan-chain` 仍依赖空的 `ADMIN_PHONE/ADMIN_PASSWORD`。建议:新增 `tests/.env.test` + seed 账号,`globalSetup` 自动登录取 token 写入 `process.env.CFC_API_TOKEN`,CI 注入 `API_BASE_URL=http://127.0.0.1:9082`。闭环:本地 9082 在听时 `CFC_API_E2E=1 npm test` 23 例实跑且红例有归因;CI 出绿灯记录 | 测试(65 轮实测登记) | 2026-11-07 02:15 | 待处理 | | B-37 | sleep.config.tags blank-key 实现缺口(契约测试 1 红,阻断该键转 GREEN) | 研发 | 复验轮(TR-6 派发 10 键复验)`SleepConfigTagsMechanismContractTest` **9/10 绿 + 1 红**:`publicValue_blankKey_returnsError:99` 期望 blank key(`" "`)→ 500 但实得 200。实现 `PublicConfigController.getValue`(L21-28)只查 `key==null||isEmpty()`,未 reject 全空白串 → blank key 被当作正常查询放行。测试由 `f11062b42`(提交信息注明「21绿/1红 blank-key 缺陷」)引入,属**已知实现缺口、非测试误报**。`HealthSleepControllerContractTest` 12/12 绿不受影响。该键 `--mark-green` 已**暂缓**、状态机保持 YELLOW。修复:`getValue` 校验改为 `key==null || key.trim().isEmpty()`(或判 `matches("\\s*")`),并确认无调用方依赖空白 key 语义。闭环:`SleepConfigTagsMechanismContractTest` 10/10 绿后再 `--mark-green sleep.config.tags` | 测试(复验派发登记) | 2026-11-07 05:50 | **已解除(67 轮实测复验,2026-11-07 09:30)**:`SleepConfigTagsMechanismContractTest` 全量 **10/10 GREEN**,blank-key 红清零 → 修复生效;`--mark-green sleep.config.tags` 键不在本工作区账本,由研发负责人侧执行 | | B-38 | 本轮 26 红类/69 红例归因(含 GUIDE integration 真实候选) | 研发/测试 | 67 轮全量实测 2219 例 96.71%:26 红类 40F+29E=69 例,归因分层:① **B-13 环境红 3 类 8 例**(primaryDataSource→Hikari→`Communications link failure`);② **A 类断言/装置漂移 ~15 类 47 例**(B-18 同族:doNothing/matcher 误用、NPE、桩缺失、文案断言过期——ArticleWorkflow「仅已驳回」vs「仅已驳回或已撤回」、StatsController「未关联家庭」vs「请先创建或加入家庭」、WishController childId→memberId、MindFortune 401 vs 400);③ **契约断言与实现不一致 6 类 13 例**(DimensionRegistryMapContractTest 3F、EnergySystemFlowTest 6F expected 200 but 500、MembershipPaySwitch/PaymentServiceORDRouting/OrchestrationEngine/OrchestrationIntegration 各 1F);④ **真实问题候选 1 类 1 例**:`GuideModuleIntegrationTest.testGuidePackageCreationFlow` → `MysqlDataTruncation: Out of range value for column 'platform_fee'`(schema 与代码不一致,需研发核验迁移脚本)。建议:① 修 B-13 数据源指向;② 测试侧下轮同步 3 处文案断言 + 修 A 类装置(B-18 清单);③ 研发核验 platform_fee 列定义与 DimensionRegistryMap 契约口径;④ EnergySystemFlowTest 500 需研发确认集成流依赖 | 测试(67 轮实测登记) | 2026-11-07 10:20 | 待处理 | | B-39 | `cfc-backend/pom.xml` 默认 `skipTests=true`(测试零执行假绿) | 研发 | **P0 流程黑洞**。`cfc-backend/pom.xml:28` 声明 `true`,`:232` 的 surefire 配置引用 `${skipTests}`。本轮(2026-11-07 10:59)实测:在干净隔离树 `D:\_wt_r1054`@`9359de39a` 执行文档标准命令 `mvn -o -B clean test` → **9:49 BUILD SUCCESS,日志明确 `[INFO] Tests are skipped.`,surefire-reports 下 0 个 XML**——即“构建成功但零用例执行”。影响:① 任何按标准 Maven 命令接入的本地验证/CI 都会得到**假绿**,覆盖率与通过率无从谈起;② 本台账历史上多轮“全量通过”结论必须显式带 `-DskipTests=false` 才成立;③ 新入职/新流水线极易踩坑。`.gitlab-ci.yml:16` 注释已记录该陷阱并以 `-DskipTests=false` 绕过,但**根因未修** → 每个使用方都要自己记得加参数。建议:去掉 `:28` 的默认 `true`(或改为 `false`,把“跳过”交给命令行 `-DskipTests` 显式控制);同时在 CI 增加一条守卫:`mvn -o -B test -DskipTests=false` 后断言 `surefire-reports/*.xml` 数量 > 0,否则 job 失败。闭环:默认 `mvn test` 能跑出用例;或 CI 守卫在“0 XML”时报红 | 测试(本轮实测登记) | 2026-11-07 11:10 | 待处理 | | B-40 | CI 4 个测试 job 为软门禁 + 集成层被排除 | 研发/流程 | `.gitlab-ci.yml` 现有 7 个 job,其中 **4 个 `allow_failure` 语义**:`backend-contract-junit:134`、`langgraph-pytest:165`、`tests-jest:225`(e2e-playwright 亦按注释兜底),即**测试失败不阻断流水线**;且 `backend-contract-junit:142` 使用 `-Dtest='!**/integration/**'` 排除整个 `integration` 包(1794/2219 例)——而本轮 26 个红类中 **14 个位于 `com.etotem.cfc.integration.*`**(含 `EnergySystemFlowTest` 6F、`DimensionRegistryMapContractTest` 3F、`PlannerBindInviteFlowTest` 4F 等),**恰是 CI 视野之外的部分**。后果:CI 绿灯 ≠ 可发布,红灯也不拦人。建议:① 分两级门禁——`test-blocking`(全绿子集,必须过)与 `test-observed`(已知红,允许失败但产出趋势);② 把 `integration` 包按类白名单逐批转 blocking;③ 报告 G6 口径从“有无 CI”升级为“blocking job 覆盖例数占比”。闭环:任一 blocking job 红 → 流水线红;且 blocking 覆盖 ≥ 当前全量 80% | 测试(本轮实测登记) | 2026-11-07 11:10 | 待处理 | | B-41 | langgraph.test_analysis_graph_offline_run_returns_interpretation 历史 flaky 需固化 | 研发 | 本轮(2026-11-07 12:57)cfc-langgraph pytest 全量 51 passed / 0 failed / 12 skipped(EXIT 0);历史满跑失败、隔离单跑 PASS 的 `TestGrowthReportInterpretB04::test_analysis_graph_offline_run_returns_interpretation` 本轮未复现,但属顺序相关/模块级 state 污染型 flaky(疑似 chromadb 原生依赖 + 模块级 fixture),存在回弹风险。建议:mock chromadb + 确定性 fixture + 单文件隔离运行(`--forked`);CI 固定隔离。闭环:连续 3 轮满跑全绿后再视为修复生效 | 测试(第11轮 巡检登记) | 2026-11-07 12:57 | 待处理 | | B-42 | 后端 JUnit/Playwright 远程派发通道在本运行环境不可用(2914 脚本化用例零实测) | 测试/运维 | 配置(`.tdd/config.json`)要求后端 JUnit 2367 @Test 与 langgraph pytest 派发至 `opencode.iwintrue.com`(192.168.16.251)、Playwright 547 spec 派发至 `web-4091`(本机:4091)/`web-189-4090`(192.168.16.189:4090);但本运行环境无 opencode 客户端、192.168.16.189 TCP 连接拒绝不可达,仅能本地实跑 Jest/pytest。后果:后端 2367 + Playwright 547 共 2914 脚本化用例零实测,目标①「所有用例通过」无法核验。建议:在具备 opencode 会话(web-4091/web-189-4090/opencode.iwintrue.com)的主机运行本自动化,或为本环境配置派发凭证与节点可达性。闭环:派发通道可用后重跑后端/Playwright,覆盖率与通过率可计 | 测试(第11轮 巡检登记) | 2026-11-07 12:57 | **根因收敛(2026-11-07 13:25 复测)**:189 节点**网络与服务均在线**(TCP 4090 OPEN,opencode `v2.0.31` 可连),此前「TCP 连接拒绝」结论已过期。真实卡点两条:① HTTP API 需鉴权,`GET /openapi.json` → 401 `Authentication required`(`.tdd/config.json` 的 `opencode_sessions.production` 未声明鉴权方式);② `opencode run --server http://192.168.16.189:4090 ...` 报 `Location not found: D:\cfc`——本机 CLI 2.2.5 把**本地 cwd** 当远端目录下发,而远端项目目录是 `c:/code/cfc`(`opencode api` 报 `Operation not found: GET /global/health`,版本 2.0.31 与 2.2.5 协议不符)。251 侧:22/80/443 open,**9000 与 4090 均 closed** → langgraph pytest 无法派发到 251 本机。处置建议:升级/对齐 opencode 版本 + 配置 `auth` 与 `remote_dir`。本轮已按「单节点串行」完成 11 例浏览器用例(本机) | | B-43 | 线上 LangGraph 部署包落后于仓库(问卷生成 500,B-34 复发) | 研发/运维 | 部署态实测(`https://ai.etotem.com.cn`,`cfc-langgraph v0.3.0`):`POST /api/v1/questionnaire/generate` → **500** `'GenerateRequest' object has no attribute 'prompt_template'`;线上 `/openapi.json` 的 `GenerateRequest` 无 `prompt_template` 字段 → 部署的是修复前版本。仓库侧修复(`GenerateRequest` 补字段 + `build_prompt` 防御)已在 cfclub,但**未发布到 251**。后果:`/api/family/questionnaire` AI 生成 100% 失败并静默降级为模板。建议:重新构建并发布 LangGraph 服务,发布后按同一 curl 回归。闭环:该接口 200 且问卷 JSON 非空 + 线上 openapi 出现 `prompt_template` | 测试(13:25 轮线上实测登记) | 2026-11-07 13:25 | 待处理 | | B-44 | 管理端「运营驾驶舱」文案与统一用户模型冲突(孩子总数) | 研发 | 真实登录后驾驶舱统计卡显示「**孩子总数 4256**」(截图 `_artifacts_live/admin-04-logged-in.png`),而 AGENTS.md 规定「新功能禁止再引入『孩子』概念,统一用能登录用户/不能登录用户(memberType=login/local)」。属口径遗留,非功能缺陷。建议改为「未开通登录的子成员」或拆为两卡。闭环:TC-A-U04 增断言「驾驶舱不出现『孩子总数』」,改文案后转绿 | 测试(13:25 轮 UI 实测登记) | 2026-11-07 13:25 | 待处理 | | B-45 | 两条需求变更的前端用例只在工作区、未入库(团队邀请分享 / 优惠券已领取按钮) | 测试/流程 | 合并远端后核对当日 4 条需求变更:`2026-11-06-我的团队收益口径与邀请分孚需求变更.md` 与 `2026-11-06-优惠券已领取券按钮修复需求变更.md` 的用例已存在并**随 cfc-frontend 16 套件 313 例实际执行通过**(`__tests__/specs/team-invite-share.test.js`、`__tests__/specs/coupon-claimed-actions.test.js`),但 `git status` 显示 `cfc-frontend/__tests__/specs/` 整体为 `??`(untracked)→ 只存在于主工作区,`git clean -fd` 即静默丢失。与 B-23(SC-X-22 契约未入库)同源。建议:由研发/资产作者 `git add cfc-frontend/__tests__/specs/` 后提交;测试侧不代提交研发 WIP。闭环:`git ls-files cfc-frontend/__tests__/specs/` 有命中且 `git status` 该路径干净 | 测试(13:25 轮实测登记) | 2026-11-07 13:25 | 待处理 | | B-46 | e2e-live/admin-live.spec.js · TC-A-U04(管理员真实登录)+ TC-A-U05(后台核心菜单可访问) | 测试(自处置)/ 研发确认 | **16:36 轮三度复现(稳定确认)**:admin-desktop 项目 TC-A-U04(真实登录进后台主框架)与 TC-A-U05(菜单遍历)**连续第 3 轮失败**,错误一致为 `TimeoutError: locator.click` —— 登录按钮 `