Forráskód Böngészése

test(tdd): 第129轮测试闭环——浏览器live 28/28全绿(189 admin 5/5第4轮+本机fe 6/6+shop 4/4+health 13/13);web/fe Jest 542例零红;后端2865例零漂移(33红);B-74复发确认(429变体,首跑35/43重跑37/43,配额窗口波动);B-126再现(EXIT=124);B-90延续第9轮;B-95延续;门禁不通过(有条件):G2红例/G9 9.9%/G11无CI

E2E Test Bot 2 napja
szülő
commit
df6c57a122

+ 176 - 0
docs/tdd/orchestration/report-test-2026-11-10-R129.md

@@ -0,0 +1,176 @@
+# 测试负责人工作汇报 · 第 129 轮(2026-11-10 19:05~19:4x)
+
+> 执行档:**review(内网 cfc.iwintrue.com/admin + /frontend 已授权浏览器自动化;langgraph@251 分派;未联网装依赖)**
+> 基线 HEAD:`ada6cb7a8`(= origin/cfclub,跑测期间分支/HEAD 未漂移)
+> 分工:**189**=admin-desktop 浏览器套件|**本机**=frontend-mobile/shop-api/health 浏览器套件 + Jest|**251**=langgraph pytest(分派)|**204**=失联(B-95)
+> 结论:⛔ **不通过(有条件)** — 核心三项延续:G2 红例 / G9 锚点低 / G11 无 CI;langgraph LLM 配额 429 复发
+
+---
+
+## 1. 历史审查记录(仅作对照,不作为本轮结论依据)
+
+| 轮次 | 时间 | 后端全量 | langgraph | 浏览器 | 结论 |
+|---|---|---|---|---|---|
+| R126 | 11-10 15:50 | 2865/33 红 | 39/43(B-74 401 复发) | 189 admin 5/5 | 有条件通过 |
+| R127 | 11-10 17:30 | 2865/2828/33 红 | **43/43 全绿** | 189 admin 5/5 | 不通过(有条件) |
+| R128 | 11-10 18:08 | 2865/2828/33 红 | **43/43 全绿** | 189 admin 5/5 + 本机 fe 6/6 | 不通过(有条件) |
+| **R129(本轮)** | 11-10 19:4x | **2865/2828/33 红(零漂移)** | ⚠️ 首跑 35/43 → 重跑 37/43(**均 429 rate limit,复发确认**) | 189 admin 5/5 + 本机 fe 6/6 + shop 4/4 + health 13/13 全绿 | **不通过(有条件)** |
+
+- 本轮为该对象**第 129 轮**持续闭环审查,非首次。
+- 与 R128 对比:后端**逐例零漂移**(33 红例集合一致)→ 研发窗口内无后端源码变更。
+- **B-74 复发确认(429 变体)**:R126 为 LLM 401(api key 失效)→ R127/R128 连续 2 轮 43/43 未复现(按纪律销号)→ **R129 首跑 8 红、重跑 6 红,错误码均 429**(`You've reached the API rate limit for free users (AgnesAI_error)`)→ 结论:**根因从凭据失效演化为上游配额/限流**,属环境性失败,非代码回归;重跑后 auto_tag 4→2 红(`endpoint_responds`/`valid_format` 偶发转绿),intent 4 例稳定红 → 配额窗口波动特征。
+- SRS / 用户场景 / 测试用例**零变更**(`git log` 窗口内无 hits)→ 按纪律本轮不更新用例(合规,G12 ✅)。
+
+---
+
+## 2. 项目画像速览
+
+- **业务**:浠艾福 XAF —— 家庭教育 SaaS(家庭成员/五维能量/成长规划师/健康报告/商城分佣/AI 管家)。
+- **技术栈**:`cfc-backend`(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· `cfc-web`(Vue2 + ElementUI)· `cfc-frontend`(uni-app H5/小程序)· `cfc-langgraph`(FastAPI + LangGraph + Chroma,9000,部署 192.168.16.251)· `dan/danshop`(独立商城 8888)。
+- **关键路径**:登录/家庭邀请 → 五维测评 → 成长任务 → 健康报告上传解析 → 商城下单分佣(CF)→ AI 对话。
+- **测试现状**:后端 339 测试类 / 2865 例(全量可跑);前端 Jest 17+26 套件;浏览器 live 套件 28 例;langgraph 43 例。
+- **质量目标**:20 类全覆盖、G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
+- **风险点**:后端 33 红长期未闭环;LLM 上游配额不稳(401→429);204 节点失联;无 CI 全量门禁;B-90 langgraph live chat 挂死。
+
+---
+
+## 3. 20 类测试覆盖矩阵(三态:已实测 / 未发现 / 待核实)
+
+| # | 测试类型 | 状态 | 证据 |
+|---|---|---|---|
+| 1 | 单元测试 | ✅ 已实测 | 后端 339 类 2865 例(surefire);web 116;fe 426 |
+| 2 | 组件测试 | ✅ 已实测 | Vue shallowMount 组件用例(Families/AuditDetailDrawer 等) |
+| 3 | 接口 API 测试 | ✅ 已实测 | 后端 364 Controller MockMvc/直调;线上 4 端点鉴权探针 401 |
+| 4 | 集成测试 | ✅ 已实测 | `integration.*` 实跑(EnergySystem 6×500 / GrowthRecordSync 3 / GuideModule 1 / DimensionMap 3 红,与 R128 一致) |
+| 5 | 系统/端到端 E2E | ✅ 已实测 | 浏览器 live 28/28(admin 5 / frontend 6 / shop 4 / health 13) |
+| 6 | 冒烟测试 | ✅ 已实测 | 浏览器 28 例 + Jest 全绿即冒烟面 |
+| 7 | 回归测试 | ✅ 已实测 | 后端与 R128 逐字段零漂移;web/fe 零漂移 |
+| 8 | 探索性测试 | ⚠️ 待核实 | 本轮仅定向探针(鉴权 4 端点 + langgraph live),无 chartered 探索会话 |
+| 9 | 验收 UAT / BDD | ⚠️ 待核实 | 无 BDD(cucumber/gherkin)执行证据 |
+| 10 | 性能测试 | ⛔ 未授权未执行 | 压测属 execute 档(需联网授权),本轮未做 |
+| 11 | 可靠性测试 | ⚠️ 待核实 | 无混沌/恢复演练;仅观察 B-90/429 波动窗口 |
+| 12 | 安全测试(SAST/DAST/SCA/渗透) | ⛔ 未授权未执行 | 依赖漏洞扫描/DAST 需联网;仅剩静态项 |
+| 13 | 兼容性测试 | ⚠️ 待核实 | 仅 Chromium 单浏览器;无多浏览器矩阵 |
+| 14 | 可用性测试 | ⚠️ 待核实 | 无真实用户可用性证据 |
+| 15 | 无障碍测试 | ⚠️ 待核实 | 无 axe/WCAG 扫描 |
+| 16 | 覆盖率度量 | ⚠️ 已实测(低) | cfc-web 语句 10.09% / 分支 6.12% / 函数 7.50% / 行 9.97%;后端 JaCoCo 未接入 |
+| 17 | 变异测试 | ⛔ 未发现 | 无 PIT/mutation 资产 |
+| 18 | 契约测试 | ✅ 已实测 | 鉴权契约 4/4 401;健康契约 13/13 401;商城排序契约 4/4 |
+| 19 | QA 流程 | ⚠️ 待核实 | 129 轮闭环可追溯;门禁未脚本化(G11) |
+| 20 | 全项目代码审查 | ⚠️ 待核实 | 本轮仅规范扫描(@GetMapping 违例延续),未跑全量静态审查 |
+
+---
+
+## 4. 实测结果明细(本轮真实信号,全部节点实跑)
+
+| # | 维度 | 命令/方式 | 节点 | 结果 |
+|---|---|---|---|---|
+| 1 | 后端全量 | surefire 汇总(R129 首跑) | 本机 | **339 类 / 2865 例 / 2828 过 / 33 红 / 98.85%**;红例集合与 R128 完全一致(CfCommission 8 / EnergySystem 6 / ArticleAutoTag 4 / GrowthRecordSync 3 / DimensionMap 3 + 散例 9) |
+| 2 | cfc-web Jest | `CI=true npx jest --ci --runInBand --coverage` | 本机 | ✅ **17 套件 / 116 例全绿**(87s);覆盖率 stmt 10.09% / branch 6.12% / func 7.50% / line 9.97% |
+| 3 | cfc-frontend Jest | `CI=true npx jest --ci --runInBand` | 本机 | ✅ **26 套件 / 426 例 = 423 过 / 3 skip / 0 红**(25s) |
+| 4 | 根级黑盒 Jest | `npx jest -c tests/jest.config.js --ci` | 本机 | ⚠️ **23 例 = 7 过 / 16 红**(`ECONNREFUSED` 9082 未启,B-36 延续) |
+| 5 | 管理端 UI E2E | `playwright -c live --project=admin-desktop` | **189** | ✅ **5/5**(1.3m,TC-A-U01~U05 含滑块+真实登录入主框架) |
+| 6 | 小程序 H5 E2E | `--project=frontend-mobile` | 本机 | ✅ **6/6**(49s,TC-F-U01~U06) |
+| 7 | 商城排序契约 | `--project=shop-api` | 本机 | ✅ **4/4**(6.3s,TC-S-U01~U04) |
+| 8 | 健康鉴权契约 | `-c playwright.config.health.js` | 本机 | ✅ **13/13**(4.9s,全部 401) |
+| 9 | 线上鉴权探针 | `curl -X POST` 4 端点匿名 | 本机 | ✅ **4/4 = 401**(B-69 维持销号) |
+| 10 | langgraph pytest | 251 `POST /api/shell` 实派(tee 落盘) | **251** | ⚠️ 首跑 **35/43**(8 FAILED)→ **重跑 37/43**(6 FAILED,120.03s),两跑失败全为 LLM 用例(429),**PYTEST_EXIT=124**(B-126 再现) |
+| 11 | langgraph live | `POST /api/v1/chat`(整数 schema + 90s cap) | 本机→251 | ❌ **chat 90s HTTP 000 零字节** → **B-90 延续(第 9 轮)**;`/health` ok、错误 schema 返 422(服务存活,LLM 链路挂死) |
+| 12 | 节点探活 | curl | 4 节点 | 251:4096=200 / 251:9000=`{"status":"ok"}` / 189:4090=200 / **204:4090=000(B-95 延续)** |
+
+**langgraph 重跑详情(/tmp/r129b_pytest.log,120.03s,6 FAILED):**
+- `tests/test_auto_tag.py` 2 例:`short_content` / `empty_content`(首跑另含 `endpoint_responds`/`valid_format`,本次转绿 → 配额波动)
+- `tests/test_intent.py` 4 例:`classify_analysis` / `classify_recommend` / `classify_mind` / `classify_health`(两次一致红)
+- 日志关键行(两次同源):`intent_classifier.py:62 意图分类失败: Error code: 429 - ... You've reached the API rate limit for free users. Upgrade to a Token Plan ... (AgnesAI_error), 默认 chat`
+- `PYTEST_EXIT=124`:测试 120s 完成但解释器未退出(`JavaClient._get_client` coroutine never awaited 警告 + 挂起线程),被 `timeout 1500` 杀 → **B-126 第 2 轮再现**
+- 归类:**LLM 上游配额 429(环境性)**,非代码回归(test/chat 源码窗口内零 commit);auto_tag 4→2 红印证配额窗口波动。
+
+---
+
+## 5. 覆盖缺口清单(新增/变更)
+
+| # | 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|---|---|---|---|---|---|---|
+| G1 | LLM 外部依赖不稳 | 401→429 波动,LLM 用例红数随上游配额漂移 | 红线误判为回归 | 红例与 LLM 探针绑定:429/401 一律标「环境红」并重跑确认 | P0 | 运维确认 Token 计划/配额;重跑全量取证 |
+| G2 | 后端 33 红 | 14 例产品类已登记待研发闭环;integration 类需连库 | 产品回归无法区分 | 已有脚本跟踪逐轮集合对比(本轮零漂移) | P0 | 研发逐类修复,连续 2 轮绿才销号 |
+| G9 | 锚点率 | TC 827 行 / 指向可执行用例 82(**9.9%**) | 用例→代码追溯弱 | 口径与 B-124 对齐(本轮沿用可复算口径) | P2 | 研发补锚点 |
+| G11 | CI 全量门禁 | 无 CI 跑全量 | 回归无法自动拦截 | 落地 CI 全量 job(需联网建管道,未授权) | P1 | 研发/运维 |
+| G10 | 浏览器双节点 | 189+本机 11/11 全绿(第 4 轮) | 204 失联无冗余 | 204 恢复前保持双节点拆跑 | P2 | 运维恢复 204 |
+| G12 | 用例更新纪律 | SRS/场景零变更 → 未新增用例 | — | 变更触发用例更新流程(合规) | — | 已满足 |
+
+---
+
+## 6. 域结论表
+
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
+|---|---|---|---|
+| 单元·组件级 | 苏雅 | 基本可用 | 后端 2865 例可跑、web 116 / fe 426 全绿;变异测试缺失 |
+| 集成·接口级 | 柯砚 | 有缺口 | integration 红类与 R128 零漂移;契约 21/21 绿 |
+| 系统·验收级 | 白樾 | ✅ 本轮绿 | 浏览器 live 28/28 全绿(189+本机);UAT/BDD 证据缺 |
+| 测试保障级 | 闻朔 | ✅ 零回归 | 后端逐例零漂移;web/fe 零漂移 |
+| 性能·可靠性 | 骆骋 | 未授权未执行 | 压测未做;B-90 挂死观察中 |
+| 安全 | 关屿 | 静态趋稳 + 动态缺失 | 鉴权 4/4 401;SAST/DAST/SCA 未授权未执行 |
+| 兼容·体验 | 阮清 | 待核实 | 单 Chromium;无可用性/无障碍证据 |
+| 流程·度量·代码 | 何序 | 有缺口 | 锚点 9.9%;无 CI;QA 流程 129 轮可追溯 |
+| **langgraph 专项(251 分派)** | **陆谨汇总** | ⚠️ **待重跑确认** | 首跑 35/43(429 环境红 8);重跑中 |
+
+---
+
+## 7. 五要素问题清单
+
+### P7-1 langgraph LLM 限流 429(B-74 复发确认 / B-129 新观察)
+1. **问题描述**:251 langgraph pytest 首跑 8 例失败(auto_tag 4 + intent 4)、重跑 6 例失败(auto_tag 2 + intent 4),日志为 `Error code: 429 - API rate limit for free users (AgnesAI_error)`;R126 同组用例为 401,R127/R128 全绿。重跑后 auto_tag 2 例转绿 → 配额窗口波动。
+2. **测试 bug 点**:`cfc-langgraph/tests/test_auto_tag.py`(short/empty_content)、`tests/test_intent.py::test_classify_*`(4 例);源码 `app/agents/intent_classifier.py:62` 捕获异常后默认 `chat`。
+3. **最优修改方案**:① 运维升级 251 LLM Token 计划或更换配额充足凭据;② 测试侧:LLM 依赖用例标记 `@pytest.mark.llm`,CI 抽为独立非门禁套件;断言侧为 401/429 提供明确环境异常标记(当前 `assert Intent.CHAT == Intent.HEALTH` 掩盖根因)。
+4. **修改目的**:杜绝「上游配额波动」被误判为「产品回归」;保持 G2 红线仅统计真实代码缺陷。
+5. **闭环方式**:运维换凭据/升级计划后 251 重跑全量 43 例,**连续 2 轮全绿**即销号;本轮连续两跑 429 为复发确认证据(第一轮)。
+
+### P7-2 B-90 langgraph live chat 90s 零字节(第 9 轮延续)
+1. **问题描述**:正确 schema(`query`/`user_id` 整数)POST `/api/v1/chat` → HTTP 000、90s 零字节;`/health` 200、错误 schema 422 → 服务存活仅 LLM 链路挂死。
+2. **测试 bug 点**:langgraph `app/routers/*.py` chat 端点(LLM 调用段)。
+3. **最优修改方案**:研发在 chat 端点 LLM 调用处包超时熔断(如 30s cap + 降级文案),并补该路径集成测试。
+4. **修改目的**:防止生产对话静默挂死(影响 AI 管家核心路径)。
+5. **闭环方式**:修复后线上 chat 探针 3 次 <10s 返回正文即闭环。
+
+### P7-3 后端 33 红(G2,延续)
+1. **问题描述**:2865 例中 33 红(CfCommission 8 / EnergySystem 6 / ArticleAutoTag 4 / GrowthRecordSync 3 / DimensionMap 3 + 散例 9),与 R128 零漂移。
+2. **测试 bug 点**:红例列表见 `.tdd/_r129_red_list.txt`。
+3. **最优修改方案**:研发按登记顺序逐类修复,优先产品类 14 例;integration 类需本机起 MySQL+9082 区分真红/环境红。
+4. **修改目的**:G2≤10 红门禁达成。
+5. **闭环方式**:每类修复后复跑该类用例 + 全量回归,连续 2 轮绿销号。
+
+### P7-4 根级黑盒 16 红(B-36,延续)
+1. **问题描述**:`npx jest -c tests/jest.config.js` → 7 过 / 16 红,全为 `ECONNREFUSED 127.0.0.1:9082`。
+2. **测试 bug 点**:`tests/jest.config.js` 挂测对象(mini-game 13 + plan-chain 3)。
+3. **最优修改方案**:起本机 9082 后重跑以区分真红/环境红(R126 起连续轮沿用)。
+4. **修改目的**:消除环境噪声对红例统计的干扰。
+5. **闭环方式**:3082/9082 探针 + 重跑 23 例。
+
+---
+
+## 8. 门禁结论
+
+**⛔ 不通过(有条件)**
+
+| 门禁 | 阈值 | 本轮 | 判定 |
+|---|---|---|---|
+| G1 全量通过率 | ≥95% | 后端 98.85%(零漂移) | ✅ |
+| G2 红例数 | ≤10 | 后端 33(零漂移)+ 根级 16 + langgraph 6(环境 429) | ❌ |
+| G6 浏览器硬契约 | 28/28 | **28/28 全绿** | ✅ |
+| G7 契约/鉴权 | 0 红 | 21/21 绿 + 4/4 401 | ✅ |
+| G9 锚点率 | ≥80% | 9.9% | ❌ |
+| G11 CI 全量 | 有 | 无 | ❌ |
+
+**正向**:浏览器 live 28/28 全绿(189 admin 5/5 + 本机 fe 6/6 + shop 4/4 + health 13/13);web/fe Jest 542 例零红;后端零漂移;B-69 鉴权 4/4 维持;B-122/189 节点能力第 4 轮稳定。
+**阻断**:① langgraph LLM 429 复发确认(首跑 8 红 / 重跑 6 红,均环境红);② G2 红例存量;③ G9/G11 长期不达标;④ B-90 挂死第 9 轮;⑤ B-126(解释器不退出)第 2 轮。
+
+**复评条件**:① 运维升级/轮换 LLM 凭据后 251 连跑 2 轮全绿 → B-74/B-129 销号;② 研发修 B-126(pytest 结束显式 exit / 去 JavaClient 挂起);③ 后端红例逐类修复闭环;④ 204 节点恢复或降级登记。
+
+---
+
+## 9. 下一步(R130 重点)
+
+1. 回归验证 langgraph 43 例(基于本轮重跑基线)
+2. 推动运维:LLM 配额(429)/ 204 节点 / B-90 挂死
+3. 推动研发:后端 33 红逐类修复(G2)
+4. 浏览器双节点(189+本机)继续并行,维持 28/28

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

@@ -424,3 +424,17 @@
 | B-125-Update(第 5 轮) | 远程 shell 等待时长未自适应 | 测试 | **部分缓解(P1 第 5 轮)**。v2(同 shell 轮询)在 650s 上限处截断(27 例、`EXIT=124`);改 v3(同 shell + `tee` 落盘 + 上限 1650s)后拿到完整 43 例结果。结论:**长任务必须落盘**,等待上限按历史最坏值(≥1650s)设定。 | 测试 | 2026-11-10 17:30 | 观察 |
 
 > **口径提示**:本轮「全量 3501 例 / 3445 过 = 98.40%」= 后端 2865 + web 116 + fe 426 + 根级 23 + langgraph 43 + 浏览器 28;红 49 = 后端 33 + 根级 16;skip 7 = 后端 4 + fe 3。
+
+### 第 129 轮(2026-11-10 19:4x)新增与更新
+
+| 编号 | 问题 | 类型 | 本轮结论(R129) | 责任 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| B-74-Update(第 129 轮 · **复发确认,429 变体**) | 251 langgraph LLM 用例红 | 研发/运维 | **复发确认(P1)**。首跑 43 例 → **35/43**(8 红:auto_tag 4 + intent 4);重跑 → **37/43**(6 红:auto_tag 2 + intent 4),两跑日志均 `Error code: 429 - API rate limit for free users (AgnesAI_error)`;重跑后 auto_tag 2 例转绿 → **配额窗口波动特征**。R126 为 401(凭据失效)、R127/R128 全绿,故根因从凭据演化为**上游配额/限流**,属环境性失败,非代码回归(test/chat 源码窗口零 commit)。 | 研发/运维 | 2026-11-10 19:4x | 待处理(P1,配额) |
+| B-126-Update(第 2 轮) | langgraph pytest 全绿但解释器不退出(`PYTEST_EXIT=124`) | 研发 | **再现(P1 第 2 轮)**。本轮重跑 120.03s 测试完成(37/43)后进程未退出,`JavaClient._get_client` coroutine never awaited 警告 + 挂起线程,`timeout 1500` 以 124 杀。与 R127 同源。 | 研发(langgraph) | 2026-11-10 19:4x | 待处理 |
+| B-90-Update(第 9 轮) | 251 `/api/v1/chat` 长时零字节挂起 | 研发/运维 | **延续(P0 第 9 轮)**。正确 schema(`query`/`user_id` 整数)POST `/api/v1/chat` → **90s HTTP 000 零字节**;`/health` 200、错误 schema 422 → 服务存活、仅 LLM 链路挂死。 | 研发/运维 | 2026-11-10 19:4x | 待处理 |
+| B-95-Update(第 5 轮) | `192.168.16.204` 节点失联 | 运维 | **延续失联(P2 第 5 轮)**。`204:4090` → HTTP 000。浏览器任务由 189+本机两节点承担,未受影响(本轮合计 28/28 全绿)。 | 运维 | 2026-11-10 19:4x | 待处理 |
+| B-122-Confirm(销号后第 4 轮) | 189 节点浏览器能力 | 运维 | **维持销号**。189 实跑 `admin-desktop` **5/5 全绿**(1.3m,第 4 轮稳定)。 | 运维 | 2026-11-10 19:4x | 已闭环 |
+| B-69-Confirm(第 4 轮) | `/api/mind/**` 匿名可达 | 研发 | **维持销号**。线上匿名 POST 4 端点(`/api/mind/fortune`、`/api/energy/overview`、`/api/health/plan/list`、`/api/huawei-health/status`)全部 401。 | 研发 | 2026-11-10 19:4x | 已闭环 |
+| B-36-Update(第 31 轮零漂移) | 根级黑盒 23 例 16 红 | 测试 | **零漂移(本轮已实跑)**。`npx jest -c tests/jest.config.js` → **7 过 / 16 红**,全为 `ECONNREFUSED`(本机 9082 未启动)。 | 测试 | 2026-11-10 19:4x | 待处理(环境型) |
+
+> **口径提示**:本轮浏览器 live 28/28 = admin 5 + fe 6 + shop 4 + health 13;全量口径沿用历史(后端 2865 + web 116 + fe 426 + 根级 23 + langgraph 43 + 浏览器 28);红 = 后端 33 + 根级 16 + langgraph 6(环境 429)。

+ 46 - 0
docs/tdd/研发交接通知-2026-11-10-第129轮.md

@@ -0,0 +1,46 @@
+# 研发交接通知 · 第 129 轮(2026-11-10 19:45)
+
+> 致:研发负责人 / langgraph 研发 / 运维
+> 来源:测试负责人(自动化闭环 R129)
+> 附件:`docs/tdd/orchestration/report-test-2026-11-10-R129.md`
+
+## 一、测试结果变化(需研发关注)
+
+### 🔴 B-74 复发确认(429 变体)——langgraph LLM 配额
+
+| 项 | 首跑(18:28) | 重跑(19:38) |
+|---|---|---|
+| 结果 | 35/43(8 红) | 37/43(6 红) |
+| 失败用例 | auto_tag 4 + intent 4 | auto_tag 2(short/empty_content)+ intent 4 |
+| 错误 | `429 - API rate limit for free users (AgnesAI_error)` | 同左 |
+
+- **根因**:`ValueError` 429 限流,来自 LLM 上游(AgnesAI free 计划额度不足),**非代码回归**(langgraph test/chat 源码窗口零 commit)。
+- **佐证**:重跑后 auto_tag 有 2 例转绿 → 配额窗口波动特征;intent 4 例两跑稳定红。
+- **处置建议**:运维升级 Token 计划或轮换配额充足 API key;研发评估将 LLM 依赖用例抽离门禁(`@pytest.mark.llm`)并在 `intent_classifier.py:62` 给出明确环境异常标记(当前吞异常默认 chat 掩盖根因)。
+
+### 🟠 B-126 再现(第 2 轮)——pytest 结束不退出
+
+- 本轮重跑 **120.03s 测试完成**后解释器不退出,`JavaClient._get_client` coroutine never awaited 警告 + 挂起线程,`timeout 1500` 以 exit 124 杀。
+- **处置建议**:pytest 收尾显式关闭 JavaClient / `os._exit` / 加 `pytest-timeout`。
+
+### 🟠 B-90 延续(第 9 轮)——聊天挂死(P0)
+
+- `/api/v1/chat` 正确 schema(整数 user_id)→ **90s HTTP 000 零字节**;`/health` 200、错误 schema 返 422 → 服务存活,仅 LLM 链路挂死。
+- **处置建议**:chat 端点 LLM 调用段加超时熔断 + 降级文案 + 该路径集成测试。
+
+## 二、维持稳定项(无需动作)
+
+- ✅ 浏览器 live **28/28 全绿**(189 admin 5/5 + 本机 fe 6/6 + shop 4/4 + health 13/13)
+- ✅ web/fe Jest **542 例零红**;后端 **2865 例 / 33 红零漂移**(与 R128 逐例一致)
+- ✅ 鉴权契约 4/4=401(B-69 维持销号);189 节点能力第 4 轮稳定(B-122)
+- ✅ SRS/场景/用例零变更 → 本轮未新增用例(G12 合规)
+
+## 三、协同事项(红例存量 G2 = 33,长期未闭环)
+
+研发按登记顺序逐类修复,优先产品类 14 例(CfCommission 8 / ArticleAutoTag 4 / TaskPlan 1 / TeamProfit 1),复跑通过后连续 2 轮绿即销号。
+
+## 四、现场证据
+
+- 报告:`docs/tdd/orchestration/report-test-2026-11-10-R129.md`
+- 阻塞台账:`docs/tdd/test/blockers.md`(第 129 轮段落)
+- langgraph 失败日志(251 节点):`/tmp/r129_pytest.log`(首跑 8 红)/ `/tmp/r129b_pytest.log`(重跑 6 红,429)

+ 2 - 2
tests/e2e/_automation_reachability_result.json

@@ -1,6 +1,6 @@
 {
   "base": "http://cfc.iwintrue.com",
-  "ts": "2026-11-10T07:05:00.055Z",
+  "ts": "2026-11-10T11:00:30.822Z",
   "steps": {
     "admin": {
       "path": "/admin",
@@ -19,7 +19,7 @@
       "ok": true,
       "title": "首页",
       "url": "http://cfc.iwintrue.com/frontend/#/pages/index-home/index",
-      "bodyLen": 234975,
+      "bodyLen": 61972,
       "hasDocument": true
     }
   }