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

test(tdd): 第135轮闭环——前端3套件16例预期RED(S-cfc-30/52/53实现未交付,非回归)+langgraph口径校准43例(39过/4环境红)+浏览器28/28+R135汇报与台账

- R134基线后源码零变更;后端2918采信R134(17红/99.28%)
- 前端jest 582总: 557过/16预期RED/9跳(healthPlan/consignee/growthHistory引用组件未交付)
- langgraph@251实派: 39过/4红/43例(7→4,全401/429环境,配额抖动改善);R134的51例口径当前无法复现(B-135-3)
- 浏览器28/28、web 116/116零漂移;根级黑盒7/16(B-36第34轮)
- G12达标: 食材推荐PRD 8.3指定DietRecommendationServiceTest已由181e830be合入(536行)
- 8个需求变更文档补录场景回链附录
E2E Test Bot 2 дней назад
Родитель
Сommit
6a7ec0d3c7

+ 234 - 0
docs/tdd/orchestration/report-test-2026-11-11-R135.md

@@ -0,0 +1,234 @@
+# 测试负责人工作汇报 · 第 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 对比的三处实质变化:
+  1. **前端 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,新契约合入)。
+  2. **langgraph 43 例 / 4 红(全环境)**:251 侧当前 HEAD `e3f80f683` 收集口径与 R130-133 一致(43 例);R134 的 51 例在当前基线无法复现,属当时 251 快照差异。红例 7→4 为 **429 配额窗口抖动改善**(intent 红 4→1,仅 `classify_recommend` 命中限流;auto_tag 红 `valid_format` 为当时命中限流所致)。
+  3. **浏览器 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` 等) | S-cfc-30 |
+
+- 合入窗口: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. 附录 · 本轮命令
+
+```bash
+# 浏览器(必须在 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
+```

+ 57 - 0
docs/tdd/test/automation-run-2026-11-11-R135.md

@@ -0,0 +1,57 @@
+# 自动化测试执行记录 · R135(2026-11-11 03:20 GMT+8,测试负责人持续巡检)
+
+> 触发:用户指令(TDD 多智能体研发测试调度 + 浏览器自动化)——后台 `/admin` + 小程序 `/frontend` 浏览器 live 测试(本机 + 189 双节点,每节点单任务),langgraph 派发 251,全程静默执行,结果有变化时提交远程并通知研发。
+> 基线:R134 闭环 `8f2d1fe97`(03:04)→ 远端 `995ce9a83`(仅 cfc-web bump/CHANGELOG,R134 后源码零变更;R134 测试侧提交尚未推送远端,本轮一并抹平)。
+
+## 1. 环境探活(实测)
+
+| 项 | 结果 | 说明 |
+|---|---|---|
+| `http://cfc.iwintrue.com/admin` | 302 → /admin/login,bodyLen 10140 | 后台在线 |
+| `http://cfc.iwintrue.com/frontend` | 302 → /frontend/#/pages/index-home/index,bodyLen 235316 | 小程序 H5 在线 |
+| 192.168.16.251:9000 | 404(服务在线,根路径无 content) | langgraph@251 |
+| 192.168.16.251:4096 | 200 | opencode@251 |
+| 189:4090 | 200 | opencode@189(本轮未派发浏览器,单节点串行纪律) |
+| 204:4090 | 000 | B-95 第 9 轮持续 |
+| 127.0.0.1:9082 | 000 | B-36 第 34 轮持续(根级黑盒 16 红全 ECONNREFUSED) |
+
+## 2. git 基线核验
+
+- 本地 HEAD = `8f2d1fe97`(R134 闭环,03:04);merge-base = `96c86744f`(研发 R102 汇报)。
+- `origin/cfclub` = `995ce9a83`(auto bump + CHANGELOG,仅改 cfc-web 5 文件)——**R134 之后源码零变更**(`8f2d1fe97..origin/cfclub` 仅 1 个 bump 提交)。
+- R134 测试侧提交 `8f2d1fe97` 含 14 文件:4 装置类修复 + `ArticleTagFilterContractTest` 275 行 + R134 汇报 + test-cases 更新(README/admin/child/parent/article-tag-filter/家庭总览口径)。
+- 新合入实现提交 `181e830be`(feat(diet) 食材推荐增量:后端 `DietRecommendationServiceTest` 536 行 + 前端 `recommendation.viewKeyAndDelete.test.js` 494 行 + `recommendation.pagination.test.js` 291 行 + `recommendation.vue` +326)**已在 R134 基线链内**(git log HEAD 含之)→ 对 R134 后端全量计数无影响。
+- 前端新合入 RED 契约测试(`91711edfa` healthPlan S-cfc-52 / `584e0a0b2` consignee S-cfc-53 / `d6de1eba0` growthHistory S-cfc-30 / `26380e100` S-cfc-29/30/32/50 / `d91095be5` S-cfc-51~54)——本轮 jest 由 0 红变 16 红的直接来源(详见 §4)。
+
+## 3. 浏览器 live 实测(本机串行 workers=1)
+
+| 套件 | 命令 | 结果 |
+|---|---|---|
+| frontend-mobile | `npx playwright test -c playwright.config.live.js --project=frontend-mobile` | ✅ 6/6 |
+| shop-api | `--project=shop-api` | ✅ 4/4 |
+| admin-desktop | `--project=admin-desktop` | ✅ 5/5 |
+| health-contract | `npx playwright test -c playwright.config.health.js` | ✅ 13/13 |
+| **合计** | — | ✅ **28/28**(与 R134 一致,`.live-artifacts/.last-run.json` status=passed / failedTests=[]) |
+
+## 4. Jest 实测(本机)
+
+| 套件 | 命令 | 结果 | 与 R134 对比 |
+|---|---|---|---|
+| cfc-frontend | `npx jest --ci` | ⚠️ **3 套件失败 / 34 过;16 红 / 9 跳 / 557 过 / 582 总** | R134: 0 红 / 472 过 → **+107 用例、+16 红(全为预期 RED 契约态)** |
+| cfc-web | `npx jest --ci` | ✅ 17 套件 / 116 过 / 0 红 | 零漂移 |
+| 根级黑盒 | `npx jest -c tests/jest.config.js --ci` | ⚠️ 7 过 / 16 红(全 ECONNREFUSED 9082) | B-36 第 34 轮零漂移 |
+
+## 5. langgraph@251 派发
+
+- 首轮派发 `wkLxED`:shell 创建成功(`sh_1c6e8fa49001Sqb50OBoNJcms4`),490s 时状态变 `?`、输出为空、事后 shell not found(服务端丢失)→ 无结果。
+- 次轮派发 `4wlihh`:运行中(timeout 650s + cap 720s)。
+- R134 基线后 `cfc-langgraph` 源码零变更 → 若次轮失败,采信 R134 的 **44 过 / 7 红(全环境 401/429)/ 51 例**(B-134-4 第 2 轮)。
+
+## 6. 区域结论
+
+- 前端 16 红全部定性为**预期 RED 契约态**(实现未交付,非回归):
+  - `signature.healthPlan`(S-cfc-52):引用 `health-plan-summary.vue`,`git ls-files pages/signature/components/` 仅 `hand-signature.vue` → 组件不存在;
+  - `signature.consignee`(S-cfc-53):引用 `consignee-edit.vue`,测试注释明示「尚未落地 → 预期 RED」;
+  - `growthHistory.view`(S-cfc-30):断言 `growth-main/index.vue` 含按日期分组逻辑,实际无 → RED。
+- 处置:不修改测试;RED 契约等待研发交付组件后转绿;如实计入 G2 红例但标注「预期 RED」。
+- 新增 PRD《2026-11-10-食材推荐食谱需求变更》8.3 指定「需新增 `DietRecommendationServiceTest`」→ **已存在**(181e830be 合入,536 行,覆盖 D(N) 菜数公式 / view_key / 删除 status 不变 / regenerate / 共餐人口径),G12 合规。

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

@@ -482,3 +482,18 @@
 | B-122-Confirm(销号后第 7 轮) | 189 节点浏览器能力 | 运维 | **维持销号但本轮未派发**。`189:4090`=200;派发受 B-134-5(`tail` 与 Windows 壳层不兼容)阻断 → admin 改本机直跑 **5/5**。 | 运维/测试 | 2026-11-11 02:10 | 已闭环(派发待修) |
 
 > **口径提示(R134)**:浏览器 live 28/28 = admin 5 + fe 6 + shop 4 + health 13(全本机,workers=1);Jest 588 = web 116 + fe 472(3 skip);根级 23 = 7 过 / 16 红(9082 未启);langgraph 51 = 44 过 / 7 红(401+429);后端全量见 §4.1。
+
+### 第 135 轮(2026-11-11 03:45)新增与更新
+
+| 编号 | 问题 | 类型 | 本轮结论(R135) | 责任 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| B-135-1 | 前端契约测试引用未交付组件 → jest 16 红 | 研发 | **新登记(P0,预期 RED 非回归)**。`cfc-frontend` jest **16 红 / 9 跳 / 557 过 / 582 总**(3 套件失败):`signature.healthPlan`(S-cfc-52,`health-plan-summary.vue` 不存在)、`signature.consignee`(S-cfc-53,`consignee-edit.vue` 未落地,测试注释自证预期 RED)、`growthHistory.view`(S-cfc-30,`growth-main/index.vue` 无按日期分组逻辑)。`git ls-files pages/signature/components/` 仅 `hand-signature.vue`。**测试零修改**,待研发交付组件即转绿。 | 研发 | 2026-11-11 03:45 | 待处理(预期 RED) |
+| B-135-2 | langgraph pytest 收尾挂起复发(EXIT=124) | 研发 | **复发确认(P1 第 6 轮)**。43 例 147.04s 完整写出 summary(39 过 / 4 红)后进程不退出,`timeout 650` 于 ~653s 强杀 → `EXIT=124`;日志命中 `JavaClient._get_client coroutine never awaited` 警告。与 B-126 同源(LLM 调用面);本轮总耗时 10m53s(135s 实跑 + ~500s 挂起虚耗)。 | 研发(langgraph) | 2026-11-11 03:45 | 待处理 |
+| B-134-4-Update(第 2 轮) | 251 langgraph LLM 链路凭据 401 + 配额 429 | 研发/运维 | **延续(P0 第 2 轮)**。251 实派 43 例:**39 过 / 4 红 / 147.04s**。4 红:`auto_tag` 3(`valid_format` 标签空 + `content_relevance`/`short_content` 500 ← 429)+ `intent` 1(`classify_recommend` `assert chat==recommend` ← `intent_classifier.py:62` 兜底)。另一 `chat_graph.py:148` 401 `****ab12 invalid`(不影响判定)。**红例 7→4,配额窗口抖动改善**,无新增产品红。 | 研发/运维 | 2026-11-11 03:45 | 待处理 |
+| B-135-3 | R134 langgraph 51 例口径与本轮 43 例不一致 | 测试 | **新登记(P2 取证)**。同命令(`--ignore=tests/qna --ignore=tests/test_chat.py`)本轮 251 侧 HEAD `e3f80f683` 收集 **43 例**(与 R130-133 一致);R134 的 51 例在当前 251 快照无法复现,疑为当时快照含额外测试文件。以 43 例为基准口径;如需复核 R134 数字可要求研发以当时 sha 复跑。 | 测试/研发 | 2026-11-11 03:45 | 口径已校准 |
+| B-95-Update(第 135 轮 · 第 9 轮) | `192.168.16.204:4090` 失联 | 运维 | **延续(P2 第 9 轮)**。`204:4090` → 000;同期 189:4090=200、251:4096=200、251:9000=404(在线无 content,`/health` 正常判定依赖)。 | 运维 | 2026-11-11 03:45 | 待处理 |
+| B-36-Update(第 135 轮 · 第 34 轮零漂移) | 根级黑盒 23 例 16 红 | 测试 | **零漂移(本轮实跑)**。`npx jest -c tests/jest.config.js --ci` → **7 过 / 16 红**,全 `ECONNREFUSED 127.0.0.1:9082`(本机后端未启,B-36 第 34 轮)。 | 测试 | 2026-11-11 03:45 | 待处理(环境型) |
+| B-122-Confirm(销号后第 8 轮) | 189 节点浏览器能力 | 运维/测试 | **维持销号但未派发**(承袭 B-134-5:`dispatch_shell.cjs` tail 与 Windows 壳层不兼容)。本轮浏览器全套本机直跑 **28/28**。 | 运维/测试 | 2026-11-11 03:45 | 已闭环(派发待修) |
+| S-cfc-30/52/53 | 契约测试已合入、实现未交付 | 研发 | **登记关联(P0)**。B-135-1 的三个契约键:组件交付后前端 jest 连 2 轮 0 红即销号。 | 研发 | 2026-11-11 03:45 | 待处理(RED) |
+
+> **口径提示(R135)**:浏览器 live 28/28 = admin 5 + fe 6 + shop 4 + health 13(全本机 workers=1);Jest 698 = web 116 + fe 582(16 红预期 RED + 9 跳);根级 23 = 7 过 / 16 红(9082 未启);langgraph 43 = 39 过 / 4 红(401+429 环境);后端 2918 采信 R134(源码零变更)。主口径 3720 = 后端 2918 + 契约 10 + web 116 + fe 582 + 根级 23 + langgraph 43 + 浏览器 28;红 53 = 后端 17 + 根级 16 + fe 16(预期 RED)+ langgraph 4;skip 13 = 后端 4 + fe 9。**G12 达标**:食材推荐 PRD 8.3 指定 `DietRecommendationServiceTest` 已由 181e830be 合入(536 行)+ 前端 viewKeyAndDelete 494 行 + pagination 291 行。

+ 15 - 1
docs/需求分析/2026-11-06-优惠券已领取券按钮修复需求变更.md

@@ -79,4 +79,18 @@
 - **开发**:commit `1392c7e0b`(仅 coupons.vue +111/-19、checkout.vue +22;后端零改动)
 - **核验**:主理人独立核验通过(双按钮 ✓ / 按类型分派 ✓ / 券实例 id ✓ / 自动匹配静默忽略 ✓)
 - **合入**:已入 cfclub `1392c7e0b`
-- **backlog**:`DOC-2026-11-06-coupon-claimed-actions`(done)
+- **backlog**:`DOC-2026-11-06-coupon-claimed-actions`(done)
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| C1 已领券双按钮 | `coupon.claimed.actions` | SC-P-57(优惠券使用)· SC-P-75(优惠券领取)· SC-A-17(优惠券/活动配置管理) | TC-P-57* / TC-P-75* / TC-A-17*(各含 -E/-P) | ⚠️ 主题相近,变更点未派生用例 |
+| C2 使用按券类型分派 | `coupon.claimed.actions` | SC-P-57 | TC-P-57 / -E / -P | ⚠️ 现有断言仅「结算抵扣/过期与门槛」,无按类型跳转 |
+| C3 checkout 自动选券 | `coupon.checkout.autoselect` | SC-P-57 | TC-P-57 / -E / -P | ⚠️ 现有断言无 `from=coupon` 自动匹配与静默忽略 |
+
+- **结论**:需求已合入 cfclub,但 3 个变更点(转赠+使用双按钮、按券类型跳转、自动选券)在现有 TC 断言中均无覆盖。
+- **待核实 / 后续**:⚠️ `TC-A-17*` 实测内容为「报告解析中台标注」,与 SC-A-17 标题语义不符(编号占位错位,见主矩阵 G-2)。建议派生本变更专属用例,不改变现有编号。

+ 17 - 0
docs/需求分析/2026-11-06-成就成长打卡需求变更.md

@@ -86,3 +86,20 @@
 2. **变更 B 聚合口径未定**:打卡记录(checkin)与档案记录(growth record)是否同页合并展示,需实现方设计中明确并回链,避免契约测试与前端口径二义。
 3. **变更 C 默认值**:「正常」加入默认选项后,若运营删掉「正常」,历史 remark 数据不受影响(tag 已落字符串),无迁移需求。
 4. **变更 D 只改「我的成就」区块**:不得触碰「我的团队」「卡券中心」布局。
+
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| 变更A | `task.history.view` | SC-P-94 | TC-P-94 / TC-P-94-E / TC-P-94-P | ✅ 本次已补三流 |
+| 变更B | `growth.history.view` | SC-P-95 | TC-P-95 / TC-P-95-E / TC-P-95-P | ✅ 本次已补三流 |
+| 变更C·小程序 | `sleep.config.tags` | SC-C-26 | TC-C-26 / TC-C-26-E / TC-C-26-P | ✅ 本次已补三流 |
+| 变更C·后台 | `sleep.config.tags` | SC-A-27 | TC-A-27-S / TC-A-27-S-E / TC-A-27-S-P | ✅ 本次已补三流(编号占用冲突,见下) |
+| 变更D | `achievement.grid.fiveCol` | SC-P-96 | TC-P-96 / TC-P-96-E / TC-P-96-P | ✅ 本次已补三流 |
+
+- **结论**:本变更的 5 个 SC 已全部派生三流用例,共新增 15 条(`tests/test-cases/parent.md`、`child.md`、`admin.md`)。
+- **待核实 / 后续**:⚠️ 编号占用冲突:`TC-A-27*` 三流实为 S-cfc-68「团队分润/提现审核」,与 SC-A-27 无关;本轮用 `TC-A-27-S*` 补写,编号重排待主理人裁决。变更 B 的「打卡记录与档案记录是否合并」口径仍待实现方回链。

+ 14 - 1
docs/需求分析/2026-11-06-我的团队收益口径与邀请分享需求变更.md

@@ -71,4 +71,17 @@
 - **开发**:commit `037aeca7e`(仅 profile.vue +20/-5;后端、api.js 零改动)
 - **核验**:主理人独立核验通过(CF 口径一致 ✓ / 邀请分享复用 ✓ / 3 列等宽隔离 ✓)
 - **合入**:已入 cfclub `037aeca7e`
-- **backlog**:`DOC-2026-11-06-team-invite-share`(done)
+- **backlog**:`DOC-2026-11-06-team-invite-share`(done)
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| T1 推广收益 CF 口径 | `team.referral.earnings.cf` | ❌ 场景库无推广收益/财富中心主题 SC | 无 | ❌ 未入场景池 |
+| T2 邀请成员直接分享 | `team.invite.share` | SC-P-01 / P-02 / P-09 / G-04 / X-04 均为「家庭邀请」,语义不同 | TC-P-01* / P-02* / P-09* / G-04* / X-04* | ❌ 无可承载场景(主题命中为假阳性) |
+
+- **结论**:关键词「邀请」命中的 5 个 SC 全部是家庭邀请/邀请码,与「推广中心收益口径 + 二维码直接分享」不是同一业务域。
+- **待核实 / 后续**:需派生新 SC(编号待主理人分配,未入册)后再派生三流 TC;本轮未擅自新增场景编号。

+ 14 - 1
docs/需求分析/2026-11-06-报告上传页关联商品卡片需求变更.md

@@ -68,4 +68,17 @@
 - **开发**:feature 分支 `feature/report-upload-product-cards`,commit `77f54d998`(仅 report-upload.vue +129 行,无后端/api.js/pages.json 改动)
 - **核验**:主理人独立核验通过(去重 Set 语义 ✓ / 空值防护 ✓ / 静默隐藏 ✓ / 4 列已生效 ✓ / 仅 1 文件 ✓)
 - **合入**:cherry-pick 至 cfclub `0bdc78def`
-- **backlog**:`DOC-2026-11-06-report-upload-product-cards`(done)
+- **backlog**:`DOC-2026-11-06-report-upload-product-cards`(done)
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| R1 关联商品卡片区 | `report.upload.linked-products` | SC-T-11(DAN 报告上传与解析,同页面主题) | TC-T-11 / -E / -P | ⚠️ 主题相近但用例语义错位 |
+| 核验项 成员选择四列 | `report.upload.member-4col` | SC-T-11 | TC-T-11 / -E / -P | ⚠️ 现有断言无四列布局 |
+
+- **结论**:`TC-T-11*` 实测「所属场景」列为 `T-8`、内容为「成长计划列表」,与 SC-T-11 报告上传语义不符。
+- **待核实 / 后续**:⚠️ 属主矩阵 G-2 编号占位错位(全库实测 51 例)。需先裁决编号重排,再派生「去重 Set / 空值防护 / 静默隐藏 / 四列布局」分支用例。

+ 13 - 0
docs/需求分析/2026-11-07-商城价格排序需求变更.md

@@ -78,3 +78,16 @@
   - 报告上传页关联商品卡片区(`specs/2026-11-06-report-upload-product-cards.md`,已合入 cfclub `0bdc78def`)
   - 我的优惠券已领取券按钮修复(`specs/2026-11-06-coupon-claimed-actions.md`,已合入 cfclub `1392c7e0b`)
   - 我的团队推广收益口径对齐 + 邀请成员分享(`specs/2026-11-06-team-invite-share.md`,已合入 cfclub `037aeca7e`)
+
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| S1 综合/价格↑/价格↓排序栏 | `shop.price.sort` | SC-G-05(浏览商城)· SC-C-22(商城兑换)· SC-X-07(商城履约) | TC-G-05* / TC-C-22* / TC-X-07* | ⚠️ 主题相近,排序分支未派生用例 |
+
+- **结论**:三个 SC 的现有 TC 分别覆盖游客受限、积分兑换、全局统计,均无「排序栏 / 价格列白名单 / body 数组契约」断言。
+- **待核实 / 后续**:⚠️ `TC-X-07*` 实测内容为「全局统计」,与 SC-X-07「商城履约闭环」语义不符(G-2)。建议在既有商城 SC 下派生排序分支三流用例(升/降序、非法 sort 字段、白名单注入防护)。

+ 14 - 0
docs/需求分析/2026-11-07-财富中心贡献榜管理员口径需求变更.md

@@ -85,3 +85,17 @@
 ## 六、关联记录
 
 - 现状核查完成;任务书待入 cfclub 后派发 lan-204。
+
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| F1 管理员身份统一为 role | `family.earnings.admin.role` | ❌ 场景库无「财富中心/贡献榜」主题 SC | 无 | ❌ 未入场景池 |
+| F2 池权限可切换 | `family.earnings.pool.toggle` | ❌ 同上 | 无 | ❌ 未入场景池 |
+
+- **结论**:241 个 SC 标题中无财富中心、贡献榜、池权限相关主题(关键词命中 0)。
+- **待核实 / 后续**:需派生新 SC(编号待主理人分配,未入册)后派生三流 TC,重点覆盖 role 口径与 `toggle-member` 越权分支。

+ 13 - 1
docs/需求分析/2026-11-08-手签名横屏适配需求变更.md

@@ -36,4 +36,16 @@
 ## 六、关联记录
 
 - 任务书:`docs/superpowers/specs/2026-11-08-signature-landscape-fix.md`
-- 需求分析台账新增本章;无既有变更覆盖。
+- 需求分析台账新增本章;无既有变更覆盖。
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| SIG-2026-11-08-L1 横屏适配 | `signature.landscape.layout` | ❌ 无对应 SC(关键词「协议」命中 SC-G-11 为假阳性) | 无 | ❌ 未入场景池,且本版已废弃 |
+
+- **结论**:**本 v1.0 已被 2026-11-09 v2.0 取代**,不再单独派生场景;追溯以 v2 为本。
+- **待核实 / 后续**:SC-G-11 为「隐私政策/用户协议查看」,与手签名画布无关,不可作为承载场景。

+ 13 - 1
docs/需求分析/2026-11-09-手签名实现方式重写需求变更.md

@@ -42,4 +42,16 @@
 
 - 任务书:`docs/superpowers/specs/2026-11-09-signature-canvas2d-rewrite.md`(v2 正本)
 - 取代:`docs/需求分析/2026-11-08-手签名横屏适配需求变更.md` 与 `docs/superpowers/specs/2026-11-08-signature-landscape-fix.md`(a7edf5698,**作废**,勿按旧方案实施)
-- 需求分析台账新增本章;无既有变更覆盖。
+- 需求分析台账新增本章;无既有变更覆盖。
+---
+
+## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
+
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+
+| 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
+|---|---|---|---|---|
+| SIG-2026-11-09-V2 canvas2d 重写 | `signature.canvas2d.rewrite` | ❌ 场景库无手签名/画布主题 SC | 无 | ❌ 未入场景池(当前有效版本) |
+
+- **结论**:本版取代 11-08 v1.0,是手签名需求的正本;241 个 SC 中无「签名/canvas/横竖屏」主题场景。
+- **待核实 / 后续**:需派生新 SC(编号待主理人分配,未入册)后派生三流 TC,重点覆盖竖屏可签、笔迹实时可见、base64/dataURL 导出、既有 2d 组件(雷达图/沙盘/趋势图/mbti)不回归。

+ 2 - 2
tests/e2e/_automation_reachability_result.json

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