角色:
cfc-tester(测试负责人 / 陆谨)|执行档:review(离线 + 内网已授权)——内网浏览器自动化(cfc.iwintrue.com/admin+/frontend)、langgraph 实派192.168.16.251:4096、后端mvn -o -B clean test全量实跑;未联网装依赖、未启停服务、未改生产源码/测试。 基线 HEAD:跑测起点722de8f37;跑测窗口内远端合入 1 个功能变更3d35ab714 merge(miniprogram): 聊天/消息类入口按有效会员隐藏(10 文件 +124/−29,新增utils/membershipGate.js)→ 收尾 rebase 至c7d921bcf后做了增量复验(前端全量 624 例,见 §5.1),并按「变更→补用例」原则新增 7 条用例。 节点分工(用户约束:每节点单任务,串行):189:4090= admin-desktop 5/5|251:4096= langgraph pytest 51 例|本机 = fe/shop/health/dx + 三套 Jest + 根级 + 后端全量。 结论:⛔ 不通过——后端 99.29%(17 红,与 R154 逐类逐例一致 → 零回归第 14 次);langgraph 41/51(3→10 红,本轮唯一恶化项);浏览器 28/28 + 2 skip;前端在功能合入后增量复验 624 例 / 609 过 / 3 红(集合不变);全量 3790 例 / 3726 过 = 98.31%。
| 项目 | 内容 |
|---|---|
| 汇报人 | cfc-tester(测试负责人) |
| 汇报周期 | 2026-11-12 第 156 轮(跑测窗口 23:36–00:50) |
| 负责模块/单元 | cfc-backend(JUnit 全量实跑)· cfc-frontend(Jest)· cfc-web(Jest)· cfc-langgraph(251 实派)· 浏览器 E2E(admin@189 / fe·shop·health·dx@本机)· 根级黑盒 |
| 指标 | 数量 | 说明 |
|---|---|---|
| 本轮新增测试用例数 | 7 个 | cfc-frontend/__tests__/utils/membershipGate.test.js(TC-MG-U01~U07),覆盖窗口内合入的 utils/membershipGate.js(此前零测试)。SRS/场景/API_REFERENCE 本身零变更,但功能合入属「场景实现落地」→ 按纪律补用例(未改任何生产代码) |
| 本轮验证执行测试数 | 3790 个 | 后端 2946 + 前端 624 + 管理端 116 + 根级 23 + langgraph 51 + 浏览器 30(含 dx 2 skip) |
| 用例通过率 | 98.31%(3726/3790) | 剔 skip 口径 98.78%(3726/3772);红 46 = 后端 17 + 根级 16 + langgraph 10 + 前端 3 |
| 新增覆盖资产 | 1 项 | 新增 TC-MG-U01~U07 可执行锚点(membershipGate 会员门控契约);反向核查无死资产(tests/e2e-live 4 个 spec 全部挂入 project,dx 2 例按 404 正确 skip) |
| SRS/场景变更 | 0(文档)/ 1(实现) | SRS specs 201 份 + test-cases 15 份 + API_REFERENCE.md 窗口内零变更;但同日 00:33 合入会员门控实现(3d35ab714)→ 已有场景「聊天/消息入口按有效会员可见」实现落地,已补 7 条用例覆盖 |
| 指标 | 数量 | 说明 |
|---|---|---|
| 分派任务数 | 2 个 | ① 189:admin-desktop(1.4m,5/5,EXIT=0);② 251:langgraph pytest(126.67s,41/51) |
| 恢复智能体会话数 | 0 | 无中断重建 |
| 当前在用会话数 | 3 | 本机(done)/ 189(done)/ 251(done) |
| 会话标签 | 会话 ID | 状态 | 任务 | 耗时 | 工作目录 | 备注 |
|---|---|---|---|---|---|---|
| 本机 | localhost | done | 后端全量 + Jest×3 + 根级 + 浏览器 fe/shop/health/dx | 61:02 | d:\cfc |
fe 6/6、shop 4/4、health 13/13、dx 2 skip |
| 189:4090 | sh_1cb439b16… |
done | admin-desktop E2E | 1.4m | C:\code\cfc\tests |
5/5(EXIT=0);节点 HEAD 3c3d4b0a5、spec blob 4703d73fb 与本机完全一致 → 跨节点可比 |
| 251:4096 | shell 直连(setsid nohup + 落盘) |
done | langgraph pytest | 126.67s | /sc-data/cfc/cfc-langgraph |
41/51;节点 HEAD 722de8f37 = 本机 |
mvn -o -B clean test,61:02)以排除窗口内隐式回归。结果与 R154 逐类逐例一致,采信期无漏检。dan/danshop(8888)。/api/**(JwtInterceptor,8 个公开路径)、统一 @PostMapping(@GetMapping 仅存 8 处、@Put/@DeleteMapping 0 处)、AiGateway 调 LangGraph、健康报告 PDF 上传解析、五维能量、测评订单、家庭关系与邀请、商城价格排序。@RestController 366 个;测试源 353 份 / @Test 2935;编译产出 *.class 2330;浏览器 spec:tests/e2e 75 份 + tests/e2e-live 5 份。pom.xml 无 jacoco 插件)→ 后端覆盖率无法度量;CI 存在(.gitlab-ci.yml)但硬门禁必红。DatabaseInitializer 全量迁移);② langgraph 依赖单一免费额度上游(429 即整片红);③ 管理端匿名访问鉴权门缺失;④ 根级黑盒套件强依赖本机 9082。| # | 测试类型 | 状态 | 本轮证据 |
|---|---|---|---|
| 1 | 单元测试 | 已实测 | 后端 347 类 / 2946 例(含单测包 com.etotem.cfc.unit、service、util);cfc-web 116/116;cfc-frontend 617 |
| 2 | 组件测试 | 已实测 | cfc-frontend/__tests__/pages/**、cfc-web/src/__tests__/views/**(含 FamiliesPlanEntry.spec.js 等) |
| 3 | 集成测试 | 已实测 | com.etotem.cfc.integration.*(EnergySystemFlow 7、DimensionRegistryMap 7、GuideModule 4、ArticleWorkflow…) |
| 4 | 接口 API 测试 | 已实测 | tests/e2e-live/shop-sort-api.spec.js 4/4、health-contract.spec.js 13/13(直连 /api)、tests/e2e/api 契约集 |
| 5 | 系统/端到端 | 已实测 | 浏览器 28/28(189 admin 5/5 + 本机 fe 6/6、shop 4/4、health 13/13) |
| 6 | 冒烟测试 | 已实测 | langgraph@251 51 例 126.67s 正常收尾;站点 /admin /frontend 302→200 |
| 7 | 回归测试 | 已实测 | 后端 17 红与 R154 逐类逐例一致(零漂移第 14 次);浏览器 28/28 连续零漂移;前端 3 红集合不变 |
| 8 | 探索性测试 | 待核实 | 无 charter 文档、无会话记录(tests/exploratory 不存在) |
| 9 | 契约测试 | 已实测 | *ContractTest(DimensionRegistryMap 3 红、UserServiceWechatLoginContract 1 红、TeamProfitCronContract 1 红);dx-bridge 2 例按 404 skip |
| 10 | 性能测试 | 未授权未执行 | 仓库无 k6/JMeter/Locust 脚本;压测属 execute 档(需联网 + 打目标环境) |
| 11 | 可靠性测试 | 已实测(失败面) | 34 次 Spring 上下文重跑 + langgraph 429 熔断面;AiGateway 熔断/超时存在但无专项可靠性用例 |
| 12 | 安全测试 | 未授权未执行 | 无 semgrep/DAST 配置;仅做鉴权契约 5/5(本机可达性)与匿名探针(B-142-1) |
| 13 | 依赖漏洞扫描 | 未授权未执行 | 无 dependency-check/SBOM/.sarif;需联网拉库 |
| 14 | 兼容性测试 | 待核实 | 无浏览器/机型矩阵;Playwright 仅 chromium(1440×900 / 375×812) |
| 15 | 可用性测试 | 待核实 | 无可用性指标与用户测试记录 |
| 16 | 无障碍测试 | 未发现 | tests/** 无 aria/axe-core 引用(0 命中) |
| 17 | 测试覆盖率 | 已实测(部分未达标) | cfc-web Lines 9.95% / Branch 6.06% / Funcs 7.48%(<20% 不达标);cfc-frontend Lines 53.57% / Branch 28.96%;后端无 JaCoCo |
| 18 | 质量指标 | 已实测 | 全量 3790 / 3726 = 98.31%(剔 skip 98.78%);红 46 / 跳 18;新增 7 例全绿 |
| 19 | QA 流程 | 待核实(负向证据) | CI 存在但 BACKEND_OBSERVED_CLASSES 漏拦 3 个当前红类 → backend-blocking-junit 必然失败 |
| 20 | 全项目代码审查 | 已实测(抽样) | 本轮定位 schema.sql:5354 DDL 无效、NutritionAgeDosage 实体/表列不一致、NutritionProductService:48 死注入;未做全量逐文件审查(方案排除) |
| 模块 | 命令 | 总数 | 通过 | 失败 | 跳过 | 结果 |
|---|---|---|---|---|---|---|
| cfc-backend 全量 | cd cfc-backend && mvn -o -B clean test(JDK1.8.0_25 + Maven 3.6.1) |
2946 | 2925 | 17 | 4 | 99.29%(剔 skip 99.42%),61:02,BUILD FAILURE(预期:红例存量) |
| 浏览器 admin@189 | playwright test -c playwright.config.live.js --project=admin-desktop |
5 | 5 | 0 | 0 | EXIT 0 ✅ 1.4m |
| 浏览器 frontend(本机) | --project=frontend-mobile |
6 | 6 | 0 | 0 | EXIT 0 ✅ 1.0m |
| 浏览器 shop(本机) | --project=shop-api |
4 | 4 | 0 | 0 | EXIT 0 ✅ 15.4s |
| 浏览器 health(本机) | -c playwright.config.health.js |
13 | 13 | 0 | 0 | EXIT 0 ✅ 14.6s |
| 浏览器 dx-bridge(本机) | --project=dx-bridge |
2 | 0 | 0 | 2 | EXIT 0;两端点 404 → 按设计 skip(B-DX-1 第 16 轮) |
| langgraph@251 | .venv/bin/python -m pytest -q --ignore=tests/qna --ignore=tests/test_chat.py |
51 | 41 | 10 | 0 | 10 failed / 41 passed / 126.67s(R155 为 48/3 → 恶化 7 例) |
| cfc-web (Jest) | npx jest --coverage |
116 | 116 | 0 | 0 | EXIT 0 ✅ 179.2s(17 套件) |
| cfc-frontend (Jest) | npx jest --coverage |
624 | 609 | 3 | 12 | EXIT 1;3 红 = 预期 RED(S-cfc-138 AC-R1/R2 + S-cfc-134 RED-A7)集合不变;含本轮新增 7 例;合入后复验 47.4s |
| 根级黑盒 (Jest) | cd tests && npx jest -c jest.config.js |
23 | 7 | 16 | 0 | EXIT 1;16 红全 fetch failed(本机 9082 未启动,B-36 第 50 轮) |
| 合计 | — | 3790 | 3726 | 46 | 18 | 98.31%(剔 skip 98.78%) |
红例分布(46):后端 17 + 根级 16 + langgraph 10 + 前端 3。
| 维度 | R155 | R156 | 变化 |
|---|---|---|---|
| 后端全量 | 采信 R154:2946/2925/17 | 实跑:2946/2925/17(347 类,61:02) | ✅ 零漂移(第 14 次),采信期无漏检 |
| langgraph@251 | 48 过 / 3 红 | 41 过 / 10 红 | ❌ 恶化 7 例(唯一实质变化) |
| 浏览器 | 28/28 + 2 skip | 28/28 + 2 skip | ✅ 零漂移 |
| cfc-web | 采信 116/116 | 实跑 116/116 | ✅ 零漂移 |
| 前端功能合入 | — | 3d35ab714 会员门控(10 文件) |
⚠️ 跑测窗口内落库 → 已做增量复验 + 补 7 例(§5.1) |
| cfc-frontend | 采信 602/3/12 | 实跑 609/3/12(624 总) | ✅ 零漂移 + 新增 7 例全绿(3 红集合不变) |
| 根级黑盒 | 7/16 | 7/16 | 持平(B-36 第 50 轮) |
| 全量通过率 | 98.91%(R155 口径) | 98.31%(3790/3726) | ❌ 下行,全部由 langgraph 承担(分母 +7 为新增用例) |
| 门禁结论 | 有条件通过 | 不通过 | 收紧(G7 由 ✅ 改善态回落为 ❌ 阻断) |
跑测期间远端合入 3d35ab714 merge(miniprogram): 聊天/消息类入口按有效会员隐藏(cfc-frontend 10 文件 +124/−29,含新文件 utils/membershipGate.js)。按纪律不把窗口内合入当成「零变更」,收尾 rebase 至 c7d921bcf 后重跑前端全量:
| 项 | 结果 |
|---|---|
| 前端全量复验 | 624 例 / 609 过 / 3 红 / 12 跳(47.4s,EXIT 1) |
| 红例集合 | signature.consignee(AC-R1/AC-R2)+ growthHistory.dayGroupView(RED-A7)—— 与合入前完全一致 → 功能合入零回归 |
| 覆盖率变化 | Lines 53.57% → 53.57% 同档;Stmts 46.16→46.25、Branch 28.96→29.16、Funcs 18.75→18.95(新用例带来的小幅提升) |
| 新增用例 | cfc-frontend/__tests__/utils/membershipGate.test.js 7 例(TC-MG-U01~U07)全绿 |
| 覆盖缺口闭合 | membershipGate.js 合入时零测试、零用例编号;本轮补齐 4 条契约分支(无 token 不发请求 / isActive===true / 非布尔真值不误放行 / 异常 fail-closed) |
补测设计要点:该函数唯一判据是
data.isActive === true(严格等值),所以专门加了isActive: 1与isActive: 'true'两个反向用例——若后端把布尔退化成数字/字符串,用例会立刻转红而不是静默放行非会员。
| 失败文件 | 例数 | 失败表征 | 日志证据 |
|---|---|---|---|
tests/test_analyze.py |
1 | test_analyze_missing_report → assert 500 == 200 |
RateLimitError 429 AgnesAI_error(analyze 3.66s) |
tests/test_auto_tag.py |
5 | endpoint_responds / valid_format / content_relevance / short_content / empty_content → assert 500 == 200 |
每次 chat 调用 9~10s 后抛 429 |
tests/test_intent.py |
4 | classify_analysis/recommend/mind/health → assert <Intent...> ≠ 期望 |
intent_classifier.py:62 429 后静默兜底 chat(B-134-4 延续未修) |
"You have used up today's text quota and are now limited to 1 request every 3 minutes." / "You've reached the API rate limit for free users."(429,AgnesAI)。chat_graph.py:148 召回记忆失败: 401 Authentication Fails, Your api key: ****ab12 is invalid(记忆召回 key 失效,非本轮新增)。251:9000/health = 200;说明「服务活、仅 LLM 面被配额掐断」——不可用单一指标否定另一面。| 检查项 | 结果 |
|---|---|
docs/superpowers/specs/*.md |
201 份,窗口 abf53aa0d..722de8f37 零变更 |
tests/test-cases/*.md |
15 份,零变更 |
docs/superpowers/api/API_REFERENCE.md |
零变更 |
场景/用例度量(官方脚本 test_report_metrics.py --scene) |
场景 215;映射到 TC 155 = 72.1%;场景 ID 字面出现在 spec 33 = 15.3%;TC 837;异常流 TC 498 = 59.5%;有可执行锚点 104(扫描资产 523) |
| 场景缺口台账 | docs/tdd/test/scenario-gap-backlog.csv 98 条缺口(A 真缺口·需补用例为主) |
| 实现落地(非 SRS 文档变更) | 1 项:3d35ab714 会员门控(utils/membershipGate.js + 9 个页面入口),合入时零测试 → 本轮补 7 条用例(TC-MG-U01~U07) |
| 判定 | G12 ✅ 合规:SRS 文档零变更 → 不因文档变更改用例;实现变更按纪律补用例(7 条,见 §5.1);admin.referral(TR-25)仍为零用例零锚点(遗留) |
mvn clean test 全量 2946 例中 16F+1E,10 个类;其中 UserServiceWechatLoginTest、UserServiceWechatLoginContractTest、TeamProfitCronContractTest 不在 CI 排除清单内。cfc-backend/target/surefire-reports/:EnergySystemFlowTest(7例/6F)、DimensionRegistryMapContractTest(7/3F)、GuideModuleIntegrationTest(4/1E)、OrchestrationEngineTest(8/1F)、OrchestrationIntegrationTest(7/1F)、MembershipPaySwitchTest(6/1F)、PaymentServiceORDRoutingTest(3/1F)、UserServiceWechatLoginTest(5/1F)、UserServiceWechatLoginContractTest(6/1F)、TeamProfitCronContractTest(22/1F)。@Transactional 回滚 + 固定种子数据;② 契约类(DimensionRegistryMap/WechatLoginContract/TeamProfitCron)由产品裁决契约后同步实现与断言;③ 装置类(Orchestration/MembershipPay/PaymentORD)去 Thread.sleep、外部调用打桩。mvn -o -B clean test 该 10 类 0 红 + 全量 0 红,连续 2 轮零漂移 → 销号。.gitlab-ci.yml 的 BACKEND_OBSERVED_CLASSES(33 类)未包含本轮实测红类 UserServiceWechatLoginTest、UserServiceWechatLoginContractTest、TeamProfitCronContractTest。.gitlab-ci.yml:61。BACKEND_OBSERVED_CLASSES;或更优——改为「运行期生成红类快照」而非静态白名单。backend-blocking-junit 从「必然失败」变为可信门禁,恢复 G11。AuthControllerTest 239s 全绿、ProductControllerTest、StatsControllerTest、WishControllerTest 等),仍被永久排除 → 硬门禁覆盖被人为缩小。.gitlab-ci.yml:61(与 ② 同一行,缺陷方向相反)。nutrition_age_dosage 三重不一致(P2 · 研发,B-145-1 未修 + B-156-1 新增)schema.sql:5354 建表语句含 INDEX idx_product (product_id),而表定义没有 product_id 列 → 建表恒失败;本轮 34 次 Spring 上下文启动中 34/34 失败(SQLSyntaxErrorException: Key column 'product_id' doesn't exist),DatabaseInitializer catch 后仍打「数据表检查完成」,该表从未创建成功。追加发现:实体 NutritionAgeDosage 声明 updateTime(→ update_time),而 DDL 无此列;NutritionProductService:48 注入 ageDosageMapper 但全类零调用(死注入)。cfc-backend/src/main/resources/schema.sql:5354;cfc-backend/src/main/java/com/etotem/cfc/entity/NutritionAgeDosage.java:33-34;cfc-backend/src/main/java/com/etotem/cfc/service/NutritionProductService.java:48。INDEX idx_product (product_id)(或补 product_id BIGINT 列);② DDL 补 update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;③ 按 AGENTS.md 纪律在 DatabaseInitializer.runMigrations() 增加幂等迁移(ensureColumn("nutrition_age_dosage","update_time",…)),并同步 schema.sql;④ 死注入删除或补齐调用方。Unknown column 'update_time'」的第二层失败。grep -c SQLSyntaxErrorException 归零 + 启库后 SHOW CREATE TABLE nutrition_age_dosage 成功 + 剂量建议接口实调 200 → 销号。intent_classifier.py:62 把 429 静默兜底成 chat,使 4 条分类用例从「上游故障」伪装成「分类错误」。tests/test_analyze.py::test_analyze_missing_report、tests/test_auto_tag.py(5 例)、tests/test_intent.py(4 例);cfc-langgraph/app/agents/intent_classifier.py:62;app/graphs/chat_graph.py:148。intent_classifier 改为显式降级(抛错或返回 degraded=true)而非默认 chat;③ 修补 chat_graph 记忆召回 key;④ 测试侧为 LLM 依赖用例加 pytest.mark.env_skip(429 时 skip 而非 fail),避免环境红污染通过率。tests/ 根级 Jest 23 例中 16 红,全部 fetch failed(/api/admin-auth/login-by-password、/api/guide/plans/family-list、/api/admin/tasks/stats 等直连 127.0.0.1:9082)。tests/integration/plan-chain.spec.js、tests/integration/mini-games-api.spec.js。beforeAll 探活 9082,不可达则 describe.skip 并输出 BACKEND_UNAVAILABLE(与 dx-bridge 的 404→skip 同构);或在 CI 中以 service 容器拉起后端后再跑。signature.consignee 2 例(AC-R1 确认回调方法缺失、AC-R2 模板缺 HandSignature 段)、growthHistory.dayGroupView 1 例(RED-A7:3 条无效日期记录中 1 条未被跳过,flat.length 实测 7、期望 6)。cfc-frontend/__tests__/pages/signature/signature.consignee.test.js、cfc-frontend/__tests__/pages/growth-main/growthHistory.dayGroupView.test.js:287。consignee-edit.vue 的确认回调与 HandSignature 内嵌段;② groupByDate 对 checkinDate 解析失败且无 recordDate 兜底的记录直接跳过(不改写输入)。POST /api/admin/families/overview → HTTP 200 + body code:400(请求参数格式错误);对照组 /api/energy/overview 等 5 个接口均 401。说明 /api/admin/** 未纳入 JWT 强校验,仅靠参数校验拦住。cfc-backend/src/main/java/com/etotem/cfc/config/JwtInterceptor.java(LOGIN_REQUIRED_PATHS 未覆盖 /api/admin/)。LOGIN_REQUIRED_PATHS 增 /api/admin/,admin 族控制器补 role=admin 校验;补一条「匿名 → 401/403」浏览器/接口契约用例。@SpringBootTest 上下文启动,每次重跑 DatabaseInitializer 全量迁移(日志 DatabaseInitializer 命中 10715 行、cfc-scheduler 22365 行 = 全日志 75346 行的 29.7%);最慢类 UserServiceFamilyNameLinkTest 331s、GuidePackageServiceTest 307s、GuideRolePermissionTest 258s、AuthControllerTest 239s。CfcApplication:12 @EnableScheduling + 缺 src/test/resources/application-test.yml(无 spring.task.scheduling.pool.size=1 与 DatabaseInitializer 开关)。DatabaseInitializer 与 @EnableScheduling;② 统一 @SpringBootTest(webEnvironment=NONE) + @DirtiesContext 策略合并上下文;③ 引入 JaCoCo 顺带产出覆盖率。| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|---|---|---|---|---|---|
| 后端覆盖率不可度量 | pom.xml 无 JaCoCo(0 命中) |
无法证明单测有效性 | 接 jacoco-maven-plugin + 阈值门禁 | P0 | 出首份报告并设 line≥60% 门禁 |
| cfc-web 覆盖率 | Lines 9.95% / Branch 6.06% | 管理端回归靠人眼 | 按 views/** 高价值页补组件测试 |
P1 | 覆盖率 ≥20% 连续 2 轮 |
| 场景→用例映射 | 215 场景,映射 TC 155(72.1%),有锚点 104 | 40 条场景无自动化 | 按 scenario-gap-backlog.csv 98 条逐条补 |
P1 | 映射率 ≥90% |
| 安全测试 / 依赖漏洞 | 未授权未执行(0 配置) | 漏洞不可见 | semgrep + OWASP dependency-check(需联网授权) | P1 | 高危 0 |
| 性能 / 可靠性 | 无脚本 | 全量耗时劣化无基线 | k6 冒烟 + /health P95 基线 |
P2 | 基线入库 + 回归对比 |
| 兼容性 / 无障碍 | chromium 单浏览器、无 axe | 小程序机型/无障碍盲区 | Playwright 多 viewport + axe-core 冒烟 | P2 | 3 viewport × 关键 5 页 |
| 探索性测试 | 无 charter | 脚本外缺陷遗漏 | 每轮 1 个 30 分钟 charter 并落记录 | P3 | charter + 缺陷单双证据 |
admin.referral(TR-25) |
0 用例 0 锚点 | 功能黑盒 | 补接口契约 + 后台页面 E2E | P2 | 2 条用例常绿 |
| 会员门控页级 E2E | 函数级已补 7 例,页面级 0 例(9 个入口页未验渲染隐藏) | 入口可见性只在函数层受保护,模板层漏改不会被发现 | Playwright 游客态断言「聊天/消息」入口不可见 + 会员态可见 | P1 | 2 条 E2E 常绿 |
| 门 | 阈值 | 本轮实测 | 状态 |
|---|---|---|---|
| G1 全量通过率 | ≥95% | 98.31% | ✅ |
| G2 红例数 | ≤20 | 46(be17 + 根16 + lg10 + fe3) | ❌ |
| G3 前端预期 RED | 已知 3 | 3 | ✅ |
| G4 cfc-web 零红 | 0 | 0(实跑 116/116) | ✅ |
| G5 编译 | EXIT 0 | testCompile 353 源 0 错;classes 2330 | ✅ |
| G6 浏览器 E2E | ≥26/28 | 28/28 | ✅ |
| G7 langgraph | ≥46/51 | 41/51 | ❌(由 ✅ 回落) |
| G8 鉴权契约 | 5 端点全 401 | 5/5 = 401 | ✅ |
| G9 安全/依赖扫描 | 中危 0 | 未授权未执行 | ❌ |
| G10 节点派发 | ≥1 | 3(189 + 251 + 本机) | ✅ |
| G11 CI 固化 | 门禁可信 | CI 存在但必红(漏拦 3 类) | ❌ |
| G12 SRS 变更→用例更新 | 合规 | 零变更 → 零写入 | ✅ |
| G13 后端红例 | ≤17 | 17 | ⚠️ 临界(零漂移) |
| G14 dx-bridge | 已部署 | 404 未部署(2 例 skip) | ❌ |
门禁结论:⛔ 不通过 —— 正向 G1/G3/G4/G5/G6/G8/G10/G12;阻断 G2/G7/G9/G11/G14;G13 临界。 较 R155「有条件通过」收紧,唯一动因是 langgraph 红例 3→10(G7 由改善态回落)。
nutrition_age_dosage 34/34 建表失败(B-145-1 未修)+ 实体 update_time 缺列 + 死注入(B-156-1 新);后端全量装置损耗量化(B-152-3 延续)。origin/cfclub + 落地研发通知。BACKEND_OBSERVED_CLASSES 补 3 红类并剔除 26 绿类 → CI 一次跑绿。pom.xml 无 JaCoCo、无 PIT → 未实测,只有执行结果无可信覆盖率。MACHINE_JSON_PATH 凭据 → 仅做游客态可用性 + 鉴权契约,登录后业务流待核实。app.main):本机不启、生产在 ai.etotem.com.cn → 仅验 251 节点最小服务套件。# 后端全量(实跑,61:02)
cd d:/cfc/cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test # → _r156_backend.log
# 管理端 / 小程序端 Jest
cd d:/cfc/cfc-web && npx jest --coverage # → _r156_web.log
cd d:/cfc/cfc-frontend && npx jest --coverage # → _r156_fe.log
# 增量复验(窗口内功能合入后)
cd d:/cfc/cfc-frontend && npx jest __tests__/utils/membershipGate.test.js && npx jest --coverage # → _r156_fe_inc.log
# 根级黑盒
cd d:/cfc/tests && npx jest -c jest.config.js # → _r156_root.log
# 浏览器(189 单任务 / 本机单任务串行)
node docs/tdd/tools/dispatch_189_admin.cjs # → _r156_189_admin.log
cd d:/cfc/tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile # → _r156_e2e_fe.log
cd d:/cfc/tests && npx playwright test -c playwright.config.live.js --project=shop-api # → _r156_e2e_shop.log
cd d:/cfc/tests && npx playwright test -c playwright.config.health.js # → _r156_e2e_health.log
cd d:/cfc/tests && npx playwright test -c playwright.config.live.js --project=dx-bridge # → _r156_e2e_dx.log
# langgraph@251
node _r156_251.cjs kick && node _r156_251.cjs read # → /tmp/r156_pytest.log