测试负责人工作汇报 · 第 135 轮(2026-11-11 03:45 GMT+8,本自动化触发)
执行档:review(内网 cfc.iwintrue.com/admin + /frontend 浏览器自动化已授权;langgraph@251 实派;未联网装依赖、未启停服务、未改生产代码)
基线 HEAD:8f2d1fe97(R134 闭环)→ 远端 6c2fdef98(仅 bump/研发汇报,R134 后源码零变更)→ 本轮 langgraph 于 251 侧以 e3f80f683 实跑
节点:251:9000=404(在线无 content)|251:4096=200(opencode 在线,本轮实派 2 轮)|189:4090=200(本轮未派发浏览器,单节点串行纪律)|204:4090=000(B-95 第 9 轮)|9082=000(B-36 第 34 轮)
分工:本机=浏览器全套(admin 5 + fe 6 + shop 4 + health 13)+ Jest(web/fe/根级)|251=langgraph pytest(实派 43 例)
结论:⛔ 不通过(有条件) — 三项历史红线未变(G2/G9/G11);本轮结果有变化:① 前端 0→16 红,全部定性为预期 RED 契约态(研发 01:30–02:33 合入的 S-cfc-30/52/53 契约测试引用组件未交付),非回归;② langgraph 实测 43 例 / 39 过 / 4 红(较 R134 红例 7→4,全部为 401/429 环境,非回归;R134 的 51 例口径当前无法复现);③ 浏览器 28/28 稳、web 116/116 稳。
1. 历史审查记录(仅作对照,不作为本轮结论依据)
| 轮次 |
时间 |
后端全量 |
langgraph@251 |
浏览器 |
前端 Jest |
结论 |
| R132 |
11-10 夜 |
沿用 R130(2865 例 / 33 红,零部署) |
33 绿 / 10 环境阻塞(43 例) |
28/28 |
0 红 |
不通过(有条件) |
| R133 |
11-11 01:16 |
沿用 R130 |
33 绿 / 10 环境阻塞(43 例) |
28/28 |
0 红 |
不通过(有条件) |
| R134 |
11-11 02:10 |
343 类 / 2918 例 / 17 红 = 99.28% |
44 绿 / 7 红(环境)/ 51 例 |
28/28 |
0 红 / 472 过 / 3 跳 |
不通过(有条件) |
| R135(本轮) |
11-11 03:45 |
采信 R134(源码零变更) |
39 过 / 4 红(全环境)/ 43 例 |
28/28 |
⚠️ 16 红 / 9 跳 / 557 过 / 582 总(16 红全预期 RED) |
不通过(有条件) |
- 与 R134 对比的三处实质变化:
- 前端 Jest 0→16 红:3 套件失败(
signature.healthPlan / signature.consignee / growthHistory.view),全部为研发新合入的 RED 契约测试引用未交付组件(health-plan-summary.vue / consignee-edit.vue 不存在、growth-main/index.vue 无按日期分组逻辑);测试注释自证「尚未落地 → 预期 RED」。总用例 472→582(+107,新契约合入)。
- langgraph 43 例 / 4 红(全环境):251 侧当前 HEAD
e3f80f683 收集口径与 R130-133 一致(43 例);R134 的 51 例在当前基线无法复现,属当时 251 快照差异。红例 7→4 为 429 配额窗口抖动改善(intent 红 4→1,仅 classify_recommend 命中限流;auto_tag 红 valid_format 为当时命中限流所致)。
- 浏览器 28/28 与 web 116/116 零漂移;根级黑盒 7/16 与 R134 零漂移(B-36 第 34 轮)。
2. 项目画像速览
- 业务:浠艾福 XAF —— 家庭教育 SaaS(家庭成员 / 五维能量 / 成长规划师 / 健康报告解析 / 商城分佣 / AI 管家 / 知识中心)。
- 技术栈:
cfc-backend(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· cfc-web(Vue2 + ElementUI,8082)· cfc-frontend(uni-app H5/小程序)· cfc-langgraph(FastAPI + LangGraph + Chroma,9000,部署 192.168.16.251)· dan/danshop(独立商城 8888)。
- 关键路径:登录/家庭邀请 → 五维测评 → 成长任务审批 → 健康报告上传解析 → 商城下单分佣 → AI 对话 → 知识中心标签筛选(S-cfc-131)→ 食材推荐/今日食谱(新增 PRD 2026-11-10,测试资产已由研发
181e830be 合入)。
- 测试现状:后端 343 类 / 2918 例(采信 R134);前端 Jest 37 套件 / 582 例(16 红预期 RED);管理端 Jest 17 套件 / 116 例;浏览器 live 28 例;langgraph 43 例(本轮 251 实派);根级黑盒 23 例。
- 质量目标:20 类全覆盖、G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
- 风险点:后端 17 红(产品/契约待裁决:EnergySystem 6×500、DimensionRegistryMap 3、Orchestration 2、WechatLogin 2、MembershipPay/PaymentORD/TeamProfitCron 各 1);前端 16 红为实现未交付的预期 RED(待研发交付组件即转绿);langgraph 凭据 401 + 配额 429 未解(B-74 / B-134-4 → 本轮延续 6 例环境红)。
3. 20 类测试覆盖矩阵(三态:已实测 / 未发现 / 待核实)
| # |
测试类型 |
状态 |
证据 |
| 1 |
单元测试 |
✅ 已实测 |
后端 2918 例(采信 R134);web 116;fe 582(其中 16 例预期 RED 契约) |
| 2 |
组件测试 |
✅ 已实测 |
Vue shallowMount 组件用例(fe 37 套件 / web 17 套件) |
| 3 |
接口 API 测试 |
✅ 已实测 |
后端控制器 MockMvc/直调;ArticleTagFilterContractTest 10/10(R134);diet 契约新合入 536 行 |
| 4 |
集成测试 |
✅ 已实测 |
integration.* 实跑(R134:GrowthRecordSync 10/10 等) |
| 5 |
系统/端到端 E2E |
✅ 已实测 |
浏览器 live 28/28(本机串行 workers=1) |
| 6 |
冒烟测试 |
✅ 已实测 |
浏览器 28 例 + Jest 698 例体现冒烟面 |
| 7 |
回归测试 |
✅ 已实测 |
浏览器 28/28、web 116/116、根级零漂移;前端 16 红定性非回归(预期 RED) |
| 8 |
探索性测试 |
⚠️ 待核实 |
— |
| 9 |
验收 UAT / BDD |
⚠️ 待核实 |
无 cucumber/gherkin 执行证据 |
| 10 |
性能测试 |
⛔ 未授权未执行 |
压测需联网授权 |
| 11 |
可靠性测试 |
⚠️ 待核实 |
本轮新增可观测项:langgraph pytest 收尾挂起(EXIT=124,见 G-135-5) |
| 12 |
安全测试(SAST/DAST/SCA/渗透) |
⛔ 未授权未执行 |
仅静态项 + 鉴权契约 |
| 13 |
兼容性测试 |
⚠️ 待核实 |
仅 Chromium 单浏览器 |
| 14 |
可用性测试 |
⚠️ 待核实 |
无真实用户可用性证据 |
| 15 |
无障碍测试 |
⚠️ 待核实 |
无 axe/WCAG 扫描 |
| 16 |
覆盖率度量 |
⚠️ 已实测(低) |
web 语句 10.09% / 分支 6.12% / 函数 7.50% / 行 9.97%(沿用 R130);后端 JaCoCo 未接入 |
| 17 |
变异测试 |
⛔ 未发现 |
无 PIT / mutation 资产 |
| 18 |
契约测试 |
✅ 已实测 |
health 鉴权 13/13 + shop 排序 4/4 + article 标签 10/10(R134)+ 新合入 S-cfc-29~54 契约(其中 6 例预期 RED) |
| 19 |
QA 流程 |
⚠️ 待核实 |
135 轮闭环可追溯;门禁未脚本化(G11) |
| 20 |
全项目代码审查 |
⚠️ 待核实 |
仅规范扫描 |
4. 实测结果明细(本轮真实信号)
4.1 浏览器 live(本机,workers=1 串行)
| 项目 |
结果 |
| frontend-mobile(375×812) |
✅ 6/6 |
| shop-api(排序契约) |
✅ 4/4 |
| admin-desktop(1440×900) |
✅ 5/5 |
| health-contract(鉴权) |
✅ 13/13 |
| 合计(G6) |
✅ 28/28(与 R134 一致;.live-artifacts/.last-run.json status=passed / failedTests=[]) |
4.2 Jest(本机)
| 套件 |
命令 |
结果 |
| cfc-frontend |
npx jest --ci |
⚠️ 3 套件失败 / 34 过;16 红 / 9 跳 / 557 过 / 582 总(29.3s) |
| cfc-web |
npx jest --ci |
✅ 17 套件 / 116 过 / 0 红(40.2s) |
| 根级黑盒 |
npx jest -c tests/jest.config.js --ci |
⚠️ 7 过 / 16 红(全 ECONNREFUSED 127.0.0.1:9082,B-36 第 34 轮零漂移) |
4.3 前端 16 红根因(全部预期 RED 契约态,非回归)
| 失败套件 |
引用组件 |
事实 |
契约键 |
signature/signature.healthPlan.test.js |
pages/signature/components/health-plan-summary.vue |
git ls-files pages/signature/components/ 仅 hand-signature.vue → 组件不存在 |
S-cfc-52 |
signature/signature.consignee.test.js |
pages/signature/components/consignee-edit.vue |
测试注释明示「尚未落地(实现未交付)→ 预期 RED」 |
S-cfc-53 |
growth-main/growthHistory.view.test.js |
growth-main/index.vue |
无按日期分组逻辑(正则 `dateGroups |
groupedRecords未命中、script 无groupByDate` 等) |
- 合入窗口:01:30–02:33(
91711edfa / 584e0a0b2 / d6de1eba0 / 26380e100 / d91095be5 等 14 个测试文件 +2502 行)。
- 处置:不改测试、不降级;维护 RED 契约等待研发交付组件(TDD 正常态),门禁中如实标注「预期 RED」。
4.4 后端全量(采信 R134 权威基线,原因见下)
- 343 类 / 2918 例 / 2897 过 / 17 红 = 99.28%(R134 实跑 56:53,BUILD FAILURE 仅测试红)。
- 采信依据:
git diff 8f2d1fe97..6c2fdef98 -- cfc-langgraph 空(langgraph 零变更);8f2d1fe97..origin/cfclub 仅 bump(cfc-web 5 文件)+ 研发汇报,后端 src 零变更 → 按采信纪律沿用 R134 权威全量,不重复跑。
- 17 红集合(承袭):
EnergySystemFlowTest 6 + DimensionRegistryMapContractTest 3 + GuideModuleIntegrationTest 1E + OrchestrationEngineTest 1 + OrchestrationIntegrationTest 1 + MembershipPaySwitchTest 1 + PaymentServiceORDRoutingTest 1 + UserServiceWechatLoginTest 1 + UserServiceWechatLoginContractTest 1 + TeamProfitCronContractTest 1。
4.5 langgraph@251(本轮实派)
- 39 过 / 4 红 / 43 例(147.04s,
--ignore=tests/qna --ignore=tests/test_chat.py);251 侧 HEAD=e3f80f683。
- 4 红全部环境(非回归):
test_auto_tag_valid_format:标签数量应为 3-5 个 且 len([])=0 → LLM 返回空标签(401 记忆召回失败 ****ab12 invalid + 429);
test_auto_tag_content_relevance / test_auto_tag_short_content:chat 端点返回 500 ← 429 RateLimit(AgnesAI free quota);
test_intent_classify_recommend:assert chat == recommend ← intent_classifier.py:62 捕获 429 后默认 chat。
- 口径说明:本轮收集 43 例与 R130-133 一致;R134 记录的 51 例在当前 251 快照无法复现——不影响本轮结论(红例 7→4 为配额抖动改善,无新增产品红)。
- 新增可观测项(G-135-5):pytest 主流程 147s 已完成(summary 完整打印),但进程收尾不退出,
timeout 650 于 ~653s 强杀 → EXIT=124;疑似 JavaClient._get_client 协程未 await(RuntimeWarning)或 Chroma/线程非守护挂起。将使派发任务虚耗时 ~500s/轮。建议排查非守护线程/协程后连跑 2 轮验证。
4.6 主口径合计(本轮实测面)
3720 例 / 3654 过 / 53 红 / 13 skip = 98.23%(剔 skip 98.57%)
= 后端 2918(2897 过 / 17 红 / 4 skip)+ 契约 10(全绿)+ web 116 + fe 582(557 过 / 16 红[预期 RED] / 9 跳)+ 根级 23(7 过 / 16 红)+ langgraph 43(39 过 / 4 红)+ 浏览器 28。
5. 本轮测试侧闭环明细
| # |
事项 |
类型 |
说明 |
| 1 |
前端 16 红定性 |
判定 |
3 套件失败全部为预期 RED 契约态(实现未交付)→ 不改测试、不误报回归 |
| 2 |
langgraph 口径校准 |
取证 |
251 实派 43 例与 R130-133 一致;红例 4 全环境;R134 51 例无法复现(快照差异),已在 §4.5 说明 |
| 3 |
SRS 变更 → 用例同步(G12) |
核验 |
新 PRD《2026-11-10-食材推荐食谱需求变更》8.3 指定「需新增 DietRecommendationServiceTest」→ 已存在(181e830be 合入 536 行,覆盖 D(N) 菜数公式 / S=1 / T=D+1 / view_key 隔离 / 删除 status 不变 / regenerate 不 insert / 共餐人口径 / 降级菜单)✅;前端 recommendation.viewKeyAndDelete.test.js(494 行)+ recommendation.pagination.test.js(291 行)同步合入 ✅ |
| 4 |
需求文档回链附录 |
补录 |
8 个需求变更文档已加「场景与用例回链」附录(2026-11-10 测试侧补录,113 行),随 R135 提交 |
| 5 |
浏览器/web 零漂移 |
回归 |
28/28、116/116 与 R134 逐字段一致 |
6. 覆盖缺口清单
| # |
缺口类型 |
现状 |
风险 |
建议测试设计 |
优先级 |
闭环方式 |
| G-135-1 |
后端 17 红(产品/契约) |
EnergySystem 6×500、Orchestration 2、WechatLogin 2、MembershipPay/PaymentORD/TeamProfitCron 各 1、DimensionRegistryMap 3、platform_fee 截断 |
真回归被淹没在固定红里 |
按类分批:产品类交研发修;P-9 由研发拍板口径后二选一改用例 |
P0 |
研发修完复跑该类 + 全量,连 2 轮绿销号 |
| G-135-2 |
langgraph LLM 链路 |
251 凭据 401(****ab12)+ AgnesAI 免费额度 429;intent_classifier.py:62 兜底成 chat |
配额/凭据故障被误读为分类缺陷 |
LLM 依赖用例标 @pytest.mark.llm 拆非门禁套件;429/401 抛外部服务异常 |
P0 |
运维换 Token + 研发改兜底语义后连跑 2 轮 |
| G-135-3 |
前端 16 红(预期 RED) |
S-cfc-30/52/53 契约测试已合入,实现组件未交付 |
契约长期悬置占红 |
研发按契约交付 health-plan-summary.vue / consignee-edit.vue / growth-main 分组逻辑 |
P0 |
组件合入后前端 jest 连 2 轮全绿 |
| G-135-4 |
CI 全量门禁 + 锚点率(G9/G11) |
TC 唯一编号锚点约 10%;无 CI 全量 job |
回归无法自动拦截、用例→代码追溯弱 |
固化锚点口径 + 落地 CI(需联网建管道,未授权) |
P1/P2 |
研发/运维建 pipeline |
| G-135-5 |
langgraph pytest 收尾挂起 |
主流程 147s 后进程不退出,timeout 650 强杀 EXIT=124 |
派发虚耗 ~500s/轮、shell 易丢失 |
排查 JavaClient._get_client 协程未 await / 非守护线程;加 -p no:cacheprovider |
P1 |
251 侧修复后连跑 2 轮验证 |
| G-135-6 |
二节点浏览器冗余 |
189 未派发(dispatch 器 Windows 兼容,承袭 G-134-6) |
缺第二节点冗余证据 |
派发器补 Get-Content 分支 |
P2 |
双平台支持后复跑 |
7. 域结论表
| 审查维度 |
负责专家 |
结论 |
关键证据 |
| 单元·组件级 |
苏雅 |
⚠️ 有变化但非回归 |
fe 16 红全为预期 RED 契约态(S-cfc-30/52/53 实现未交付);web 116 全绿;后端采信 R134 17 红 |
| 集成·接口级 |
柯砚 |
✅ 有推进 |
diet 契约新合入 536 行 + viewKeyAndDelete 494 行 + pagination 291 行;article 标签 10/10(R134) |
| 系统·验收级 |
白樾 |
✅ 绿 |
浏览器 live 28/28(admin 5 / fe 6 / shop 4 / health 13);UAT/BDD 证据仍缺 |
| 测试保障级 |
闻朔 |
✅ 定性准确 |
16 红根因取证(组件缺失)完整;浏览器/web/根级零漂移 |
| 性能·可靠性 |
骆骋 |
⚠️ 新发现 |
langgraph pytest 收尾挂起 EXIT=124(G-135-5);压测未授权未执行 |
| 安全 |
关屿 |
⚠️ 静态趋稳 / 动态缺失 |
鉴权契约 13/13;SAST/DAST/SCA 未授权 |
| 兼容·体验 |
阮清 |
⚠️ 待核实 |
单 Chromium;无可用性/无障碍证据 |
| 流程·度量·代码 |
何序 |
⚠️ 有缺口 |
锚点约 10%、无 CI;用例更新纪律达标(G12) |
| langgraph 专项(251) |
陆谨汇总 |
⚠️ 环境红 4 |
43 例 / 39 过;红例全为 401 凭据 + 429 配额(非回归,较 R134 红例 7→4 改善) |
8. 五要素问题清单
问题 1 · 前端契约测试引用未交付组件致 16 红(预期 RED,持续盯办)
- ① 问题描述:
cfc-frontend jest 由 R134 的 0 红变为 16 红,3 套件失败,表象像回归。
- ② 测试 bug 点:非测试 bug。
signature.healthPlan.test.js / signature.consignee.test.js / growthHistory.view.test.js 为研发按 S-cfc-30/52/53 合入的契约级测试,断言组件文件存在性与按日期分组逻辑;但实现组件 health-plan-summary.vue / consignee-edit.vue 尚未交付(git ls-files pages/signature/components/ 仅 hand-signature.vue),growth-main/index.vue 亦无分组逻辑。
- ③ 最优修改方案:研发按契约交付:① 新建
consignee-edit.vue(收件人编辑组件);② 新建 health-plan-summary.vue(健康计划摘要组件);③ growth-main/index.vue 增加按日期分组渲染逻辑(dateGroups/groupByDate)。测试零修改。
- ④ 修改目的:TDD 正常 RED→GREEN 推进;契约先行、实现跟进,防止实现驸离规格。
- ⑤ 闭环验证:组件合入后
npx jest --ci 在 cfc-frontend 连 2 轮 0 红即销号(G-135-3 / B-135-1)。
问题 2 · langgraph LLM 用例红为凭据 401 + 配额 429(待研发/运维)
- ① 问题描述:251 实派 43 例中 4 红(auto_tag 3 + intent 1)。
- ② 测试 bug 点:非测试 bug;
app/agents/intent_classifier.py:62 捕获异常后默认 chat,把 429 伪装成分类错误(吞错点)。
- ③ 最优修改方案:运维换有效 Token(当前
****ab12 401);研发将 429/401 抛 ExternalServiceError 而非回落 chat;LLM 依赖用例加 @pytest.mark.llm 并从门禁套件剔除。
- ④ 修改目的:让「分类错误」与「上游不可用」可区分,避免红线误判产品回归。
- ⑤ 闭环验证:换 Token 后 251 连跑 2 轮 43/43 绿即销号(B-74 / B-134-4 延续)。
问题 3 · R134 langgraph 51 例口径与本轮 43 例不一致(取证澄清)
- ① 问题描述:R134 记录「51 例 / 44 绿 / 7 红」,本轮同命令收集仅 43 例。
- ② 测试 bug 点:非测试 bug;251 侧本轮
git reset --hard origin/cfclub 后 HEAD=e3f80f683,收集 43 例与 R130-133 一致。51 例疑为 R134 时 251 快照含额外测试文件(如当时未 ignore 的 qna/test_chat 或历史遗留),当前基线无法复现。
- ③ 最优修改方案:以本轮 43 例为基准口径固定;如研发需复核 R134 数字,可在 251 以当时 sha 复跑并回帖结论。
- ④ 修改目的:校准 langgraph 口径,杜绝 51/43 混用导致的误判。
- ⑤ 闭环验证:连跑 2 轮收集数稳定为 43 即口径成立。
问题 4 · langgraph pytest 收尾挂起致 timeout 强杀 EXIT=124(新发现)
- ① 问题描述:pytest 147.04s 打印完整 summary 后进程不退出,
timeout 650 至 ~653s 强杀,shell 输出 EXIT=124。
- ② 测试 bug 点:疑似并发协程/线程未 join:
RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited;Chroma 客户端线程或 FastAPI 事件循环未关闭。
- ③ 最优修改方案:排查
tests/conftest.py 与 app 侧非守护线程/未 await 协程;测试侧加 -p no:cacheprovider 与显式 shutdown fixture。
- ④ 修改目的:派发任务不再虚耗 ~500s、shell 不易被服务端回收丢失(本轮首轮派发即因此丢结果)。
- ⑤ 闭环验证:251 连跑 2 轮均在 ≤200s 内退出且 EXIT=0/1 即闭环。
问题 5 · SRS 变更触发测试资产已就位(G12 达标核验)
- ① 问题描述:新 PRD《2026-11-10-食材推荐食谱需求变更》属 SRS 变更,须确认测试用例已更新。
- ② 测试 bug 点:无 bug;核验结论为已达标——PRD 8.3 指定「需新增
DietRecommendationServiceTest(本次必需)」,实际已由研发 181e830be 合入 536 行(5 类覆盖:菜数公式 / normalizeMenu 补齐截断 / 降级菜单 / generate|regenerate 三路径 / view_key 隔离 / update 删除 status 不变),前端 viewKeyAndDelete 494 行 + pagination 291 行同步合入。
- ③ 最优修改方案:无需修改;后续研发实现交付后跑该模块回归(现有 recommendation.*.test.js 覆盖)。
- ④ 修改目的:确保 SRS 变更→用例同步链路闭环。
- ⑤ 闭环验证:
181e830be 在基线链内且 8.3 指定测试齐全 → G12 ✅。
9. 门禁结论
| 门禁 |
指标 |
阈值 |
本轮 |
判定 |
| G1 |
主口径通过率 |
≥95% |
98.23%(3654/3720;剔 skip 98.57%) |
✅ |
| G2 |
红例数 |
≤10 |
53(后端 17 + 根级 16 + 前端 16[预期 RED] + langgraph 4) |
❌ |
| G3 |
cfc-web Jest |
全绿 |
116/116 |
✅ |
| G4 |
cfc-frontend Jest |
全绿 |
16 红(预期 RED)/ 9 跳 / 557 过 |
❌ |
| G5 |
编译 + XML 完整性 |
0 错 / 无沉默 |
编译 0 错 / 343 类无沉默(采信 R134) |
✅ |
| G6 |
浏览器 live |
28/28 |
28/28 |
✅ |
| G7 |
langgraph |
0 红 |
39/43(4 全环境 401/429) |
❌ |
| G8 |
鉴权契约 |
全 401/403 |
13/13 |
✅ |
| G9 |
SRS/TC 锚点率 |
≥80% |
≈10% |
❌ |
| G10 |
节点分派 |
251 + 浏览器节点 |
251 ✅ / 189 未派发 |
⚠️ |
| G11 |
CI 全量门禁 |
存在 |
无 |
❌ |
| G12 |
SRS 变更→用例同步 |
合规 |
合规(食材推荐 PRD 指定测试已合入 536+494+291 行) |
✅ |
总裁决:⛔ 不通过(有条件) —— G2/G4/G7/G9/G11 未达标;G4 的 16 红与 G7 的 4 红全部为预期 RED 契约态 / 环境红(401+429),均非回归;G2 中 36/53 红属环境或预期 RED。本轮属方向性观察轮:无新回归、口径校准(langgraph 43 例)、SRS 变更用例已同步。
复评条件:① 研发交付 S-cfc-30/52/53 组件使前端 16 红转绿;② 251 换 Token + 429 配额恢复使 langgraph 43/43;③ 后端 17 红按批修复或口径裁决;④ CI 落地全量 job + TC 锚点补齐。
10. 附录 · 本轮命令
# 浏览器(必须在 tests/ 目录内,B-52)
cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --project=shop-api
npx playwright test -c playwright.config.health.js
npx playwright test -c playwright.config.live.js --project=admin-desktop
# 前端/管理端/根级
cd cfc-frontend && npx jest --ci ; cd ../cfc-web && npx jest --ci ; cd .. && npx jest -c tests/jest.config.js --ci
# langgraph(251 实派,本轮 dispatch_251_shell_v2.cjs;首轮 shell 丢失,次轮成功 43 例)
OPENCODE_SERVER_PASSWORD=... node docs/tdd/tools/dispatch_251_shell_v2.cjs
# 251 只读取证(collect-only + HEAD)
node /tmp/r135_collect.cjs