B 端 H5(b-workbench)全链自测报告(WIP-204 M2)

🗄 已归档快照(2026-09-13 文档时效治理):本文件为历史阶段设计快照,最新口径以 docs/contracts/api-v1.3-matrix.md、docs/plans/2026-09-14-白标化内核抽取-两实例对比.md 及 TASKS 现行为准。设计思路仍可参考,数据与结论已过时。
报告人:扣子一号 | 日期:2026-09-07 | 派工:小冈(WIP-204)| 基底:b41476a
链路:登录 → identity → overview → Orders → Bills(三 tab+明细)→ DemandHall → DemandDetail(兴趣响应)→ PackageBuilder → PointTasks

一、实测执行状态(如实声明)

```bash

# 服务器 Linux bash(macOS bash 3.2 不支持,WIP-194 已记档)

bash scripts/e2e_b_workbench_full_chain.sh

# 可选:MERCHANT_DEV_ID=<商户账号裸名>(登录接口自动拼 dev_ 前缀);缺省 smoke-ai

```

二、静态契约审计结果(八页)

页面前端调用后端端点结论
LoginPOST /auth/login {dev_id} → {ok,data:{token,user}} + GET /identity/meauth.py /login、identity.py✅ 匹配(dev 通道,正式登录=WIP-181 缺口①长线)
Workbench overviewGET /merchant-console/overviewmerchant_console.py:32✅ 匹配(WIP-189 已接线验收中)
OrdersGET /merchant-console/ordersmerchant_console.py:143✅ 匹配(WIP-193 返工后:quantity 字段、page/page_size 参数)
BillsGET /workbench/bills ?page=1&page_size=50;明细 GET /workbench/bills/{id}miniapp_bills.py:82/127✅ 匹配:列表 {code:0,data:{items,total}}、明细 {...payload,items:[明细行]}、金额后端已转元;三 tab=客户端分流(本期=open/pending_confirm 第一条、明细、历史),与后端 status 字段兼容
DemandHall(原)写死空态GET /api/miniapp/demands 早已存在(demand.py:246)❌→✅ 缺口#1 当场修复:重写接线(见 §三)
DemandDetailGET /demands/{id}(flat camelCase)+ POST interests {actorType,merchantId,respondedItems:[{itemIndex,note}],note}demand.py:438/500✅ 匹配(WIP-193 重写;注意后端禁整单承接:respondedItems 至少一项,空数组 422)
PackageBuilder诚实提示「保存草稿接口暂未开放」无组包端点⏸ DEFERRED(WIP-198 已登记 /package-builder 为延缓路由,非缺口)
PointTasksGET/POST /merchant/point-tasks、PATCH /{id}?status=scenes.py:362/375/394(prefix=/api/miniapp)✅ 匹配:{ok:true} 信封、PATCH status 走 query 参数(前端已用 params);观察项见 §四

三、缺口#1 修复:DemandHall 接线

四、观察项(不阻塞,记档)

  1. MyDemands(我的接单)缺口确认:后端 /demands/mine(demand.py:400)是游客侧「我发布的需求」(WHERE td.user_id=$1),非商户侧「我已表达兴趣」列表;商户兴趣列表端点确不存在 → 页面维持诚实空态,缺口登记给阿仁(需求域:GET /demands/interests/mine 商户视角)。
  2. PointTasks 表单语义:前端创建表单把 budgetTierId 同时填入 judge_type 与 budget_tier,且 family 固定传 'point'(后端文档五族=attract/instore/reputation/waiting/referral)。后端未做枚举校验故不 4xx,但语义可疑——属表单设计问题非契约断裂,暂不动(超 M2 边界),记档待产品口径。
  3. 兴趣响应不可撤销:demand_interests 无删除端点(append-only),脚本冒烟响应以「冒烟测试-」前缀留档,无法清理,如实记档。
  4. 账单确认/争议写操作(POST confirm/dispute):涉钱写路径,本批只读实测不触碰,维持 WIP-193 诚实降级现状。

五、自测脚本说明(scripts/e2e_b_workbench_full_chain.sh)

六、M1 状态

阻塞:WIP-203 M3(履约确认列表+确认+状态流转端点)未交付——阿仁 WIP-203 整单 📋 待开工,merchant_console.py 现有端点仅 overview/payments/tasks/orders/refund-preview/service-fee。M1 待 WIP-203 M3 交付后启动(与待收款确认同型,落 merchant-console 域)。