evidence-task-incentive-evd3-20261107.md 8.0 KB

EVD-3 任务-激励批次(22 SC)三类流执行证据 / 验收记录

归属:契约补建 P0「任务-激励 · 22 SC」· 会话:EVD-3 · 日期:2026-11-07 开工包:docs/tdd/orchestration/task-incentive-kickoff-20261107.md 契约核对:docs/tdd/orchestration/task-incentive-contractcheck-202611070117.md(O-7 已核 22 SC 端点 100% 实现,0 缺失) 本记录仅补执行证据/复验,未写任何业务实现代码(防假 RED)。

1. 执行证据总览

类别 载体 执行结果 说明
契约测试(本地实跑) cfc-backend/src/test/java/com/etotem/cfc/unit/ 4 类 33/33 通过(多轮稳定) 纯 Mockito 契约测试,mvn -DskipTests=false test 实跑,surefire 报告在 target/surefire-reports/
API e2e(远端实跑) tests/e2e/api/ 11 spec(覆盖 22 SC 三类流) 多次实跑累计 24 用例通过 目标 http://cfc.iwinture.com;网关在降级窗口返回 502,非业务逻辑失败均标注

⚠️ 远端基线 cfc.iwinture.com(openresty 网关)在本次执行窗口频繁 502 拒绝(个别时段 member/add 冷启动 >60s)。 远端能连通时用例真实通过;连通失败处已如实记录,不视为业务 RED(端点存在性由 O-7 契约核对 + 本地 JUnit 契约测试双重支撑)。

2. JUnit 契约测试执行证据(本地,确定性)

命令:cd cfc-backend && mvn -DskipTests=false -Dtest='...ContractTest' test → BUILD SUCCESS

测试类 Tests run Failures 覆盖 SC
WishFlowScP13ContractTest 15 0 SC-P-13 / SC-P-14 / SC-C-04 / SC-P-88
PointsLedgerScP15ContractTest 8 0 SC-P-15 / SC-P-16
TaskReviewScT06ContractTest 6 0 SC-T-06 / SC-C-14
TaskFrequencyScP12ContractTest 4 0 SC-P-12
合计 33 0 9 SC

surefire 输出(最后一次):

Tests run: 15, Failures: 0, Errors: 0, Skipped: 0 - WishFlowScP13ContractTest
Tests run: 8,  Failures: 0, Errors: 0, Skipped: 0 - PointsLedgerScP15ContractTest
Tests run: 6,  Failures: 0, Errors: 0, Skipped: 0 - TaskReviewScT06ContractTest
Tests run: 4,  Failures: 0, Errors: 0, Skipped: 0 - TaskFrequencyScP12ContractTest
Tests run: 33, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS

各契约测试三类流覆盖(正常/异常/权限):

  • WishFlowScP13ContractTest:正常流 child 建 draft、parent 定价 active、parent 建 active → 申请兑换 → 批准扣 CF(spendForMember 幂等 refId=心愿ID)→ 标记购买 → 确认收货 fulfilled;驳回 draft → rejected;取消 active → cancelled。异常流余额不足拦截(状态保持 active、不扣 CF)、draft/approved 非兑换态拒绝、扣减失败不回改。权限流跨家庭家长创建/定价/申请兑换均拒绝。
  • TaskReviewScT06ContractTest:正常流家长查待审列表;驳回 pending_review → 回 pending + 清 completedAt(可重做)。异常流任务不存在 false;completed 幂等 true / pending false。权限流非家长查待审返回空;非创建者删任务 false。
  • PointsLedgerScP15ContractTest:正常流余额/总额/到期日;流水分页;流水代数和 == 余额增量(对账一致性);分类过滤。异常流成员不存在返回 null(不 500);空流水不报错。权限流水流按 memberId 隔离。
  • TaskFrequencyScP12ContractTest:正常流 6 种合法频率 none/daily/weekly/monthly/every_other_day/hourly 均可创建;频率缺省不报错。异常流非法频率(0/-1/999/fortnightly/空格)抛 IllegalArgumentException 且不落库。权限流跨家庭被分配成员拒绝。

3. Playwright API e2e 执行证据(远端,连通时)

运行:cd tests && npx playwright test <spec> -c playwright.config.api.js --project=desktop

运行批次 spec 结果 说明
批次1(2轮) task-c14-reject-recycle.spec.js(C-14+C-02,8 用例) 6 passed / 2 failed ×2 一致 2 失败均为 beforeAll 冷启动超时(registerRole / member/add 超窗),非业务逻辑
批次2(1轮) 10 spec 批量(10 文件,~62 用例) 16 passed / 14 failed / 26 未运行 失败均为 direct-register 网络拒绝或 beforeAll 冷启动;通过用例覆盖心愿创建/兑换、勋章墙、任务频率、打卡、活动等端点流
批次3(1轮) wish-scp13(旧版,断言修正前) 2 passed 余额不足拦截、已兑换再申请拒绝两断言通过(此前断言 code=400 与远端 Result.error=500 不符已修正)

结论:远端连通时,任务驳回重做闭环、心愿创建-审批-兑换闭环、余额不足拦截、越权拒绝等核心流真实通过; 远端未连通时以 502/超时形式失败,判定为环境性(O-7 契约核对已确认端点 100% 存在)。

4. 22 SC → 证据映射

SC 三类流证据(正常/异常/权限) JUnit 契约测试 Playwright spec
SC-P-12 任务频率/周期 ✅ 客户端 TaskFrequencyScP12ContractTest task-frequency-sc-p12.spec.js
SC-P-13 心愿闭环 ✅ 客户端 WishFlowScP13ContractTest wish-flow-sc-p13-p14-c04.spec.js
SC-P-14 心愿驳回/失效 ✅ 客户端 WishFlowScP13ContractTest wish-flow-sc-p13-p14-c04.spec.js
SC-P-15 积分明细 ✅ 客户端 PointsLedgerScP15ContractTest mall-exchange-sc-c22.spec.js(并测 P-15 记录)
SC-P-16 积分流水对账 ✅ 客户端 PointsLedgerScP15ContractTest mall-exchange-sc-c22.spec.js
SC-P-77 活动打卡/助力 ✅ spec — activity-ranking-sc-p77-p86.spec.js
SC-P-86 家庭排行 ✅ spec — activity-ranking-sc-p77-p86.spec.js
SC-P-87 任务完成五维归因 ✅ spec —(委托五维批次深测) energy-sc-p87-p88-c24.spec.js
SC-P-88 心愿兑换扣五维 ✅ 客户端 WishFlowScP13ContractTest(spendForMember 余额守卫) energy-sc-p87-p88-c24.spec.js
SC-C-02 执行任务/小游戏 ✅ spec(远端 6/8 含 C-02 幂等) — task-c14-reject-recycle.spec.js(C-02 组)
SC-C-04 提心愿 ✅ 客户端 WishFlowScP13ContractTest wish-flow-sc-p13-p14-c04.spec.js
SC-C-05 任务打卡 ✅ spec — task-checkin-sc-c05.spec.js
SC-C-09 勋章墙 ✅ spec — badge-sc-c09-c10-a05.spec.js
SC-C-10 勋章解锁提醒 ✅ spec — badge-sc-c09-c10-a05.spec.js
SC-C-14 任务驳回重做 ✅ 客户端 + 远端 TaskReviewScT06ContractTest task-c14-reject-recycle.spec.js
SC-C-22 商城积分兑换 ✅ spec — mall-exchange-sc-c22.spec.js
SC-C-24 小游戏触发五维 ✅ spec — energy-sc-p87-p88-c24.spec.js
SC-A-05 勋章配置 CRUD ✅ spec — badge-sc-c09-c10-a05.spec.js
SC-B-07 AI 教练推荐采纳 ✅ spec — coach-food-sc-b07.spec.js
SC-T-06 家庭任务审核 ✅ 客户端 TaskReviewScT06ContractTest guide-review-sc-t06-t18.spec.js
SC-T-18 批量任务下发 ✅ spec — guide-review-sc-t06-t18.spec.js
SC-X-05 任务激励闭环 ✅ spec — incentive-loop-sc-x05.spec.js

5. 验证结论与遗留

  • ✅ 本批次未发现真实实现缺口:JUnit 契约测试 33/33 通过、远端连通时段核心流真实通过,与 O-7「端点 100% 实现」一致。
  • ⚠️ 远端基线网关不稳定(openresty 502),部分 Playwright 用例受限于运行环境无法全绿;未将其误判为业务 RED。
  • 未新增任何 DB 迁移;未修改任何业务实现代码。

6. 复验命令

# 契约测试(本地确定性)
cd cfc-backend && mvn -DskipTests=false -Dtest='WishFlowScP13ContractTest,PointsLedgerScP15ContractTest,TaskReviewScT06ContractTest,TaskFrequencyScP12ContractTest' test

# API e2e(远端;网关稳定时段执行,必要时重试)
cd tests && npx playwright test api/wish-flow-sc-p13-p14-c04.spec.js api/task-c14-reject-recycle.spec.js -c playwright.config.api.js --project=desktop