From ce72da77eb23d3d5ef20daabcfb4542894abb58a Mon Sep 17 00:00:00 2001 From: xcs Date: Mon, 31 Aug 2026 22:44:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(w05):=20=E6=95=B0=E6=8D=AE=E9=BD=90?= =?UTF-8?q?=E4=BA=86=E4=B9=9F=E5=8F=AB=E4=BA=BA=E4=B8=80=E6=AC=A1=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20S1=20=E6=94=B9=E6=B4=BE=E5=8F=AA=E8=AF=BB?= =?UTF-8?q?=E7=9A=84=E9=AA=8C=E6=94=B6=E5=B7=A5=E5=8D=95,=E4=BB=B6?= =?UTF-8?q?=E5=90=8C=E4=B8=80=E4=BB=BD=E3=80=81=E7=BC=96=E8=BE=91=E9=92=AE?= =?UTF-8?q?=E6=94=B6=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户:「就算数据是足的也进入这个数据工单,就派发一个验收工单,界面和数据要和现在的 第一个数据工单一致,只不过把芯片卡片上的编辑按钮去掉,只展示不能编辑,然后把标题旁边的 数据工单改成验收工单」。 病根在引擎拍首那道 doneWhen 扫描:输入本来就齐的单,S1 的 doneWhen 第一拍就为真, 配方一笔都还没跑,这一步当场被收掉 —— 卡永远发不出去,人一眼没看过就进了 S2。 治法:CMMN 给 S1 标 manualActivation,那道扫描多一个门槛(worldTouched),次序变成 「配方发卡 → 人答 → 下一拍 doneWhen 为真才收」;doneWhen 仍是真门,只是不抢在人前面。 平台:执行工单第三副面孔 variant:'accept'(件只读、人只确认「确认无误」)—— 与 mode:'acceptance'(submit 抬起来的收口验收,带打回重做)分清;三副面孔的判断 抽成纯函数 order-face.ts(有测),chat-bubbles 只摆。 活动:S1 两笔互斥的 card(carded 幂等保证一步只发一张)+ 案卷粘着的旗 order_kind; 一张件两副面孔 —— 题头/标题/页脚三处名字与卡角编辑钮按 v-data / v-accept 由样式表挑 (藏的是容器 .fabs,逐枚去盖打不完)。 测:引擎测钉死那一对(标了人工激活 → 卡发得出去、步不收;没标 → 步当场被收、卡发不出); auto-runner variant 透传;order-face 4 条;包内 2 条(两笔卡 + 粘旗)、view 1 条; 两处变异验证。e2e w05 5/5 released、被拒 0、模型调用恰 1 次 —— 都在库那例摆的正是验收工单。 2558 测、四门禁绿;2.15.0 装库核过。 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet --- CLAUDE.md | 32 ++++++++ .../__tests__/activity.test.ts | 21 +++++ .../__tests__/steps.test.ts | 38 ++++++++- .../src/case-model.ts | 66 ++++++++++++++- .../src/manifest.ts | 9 +- .../src/views/report.ts | 55 +++++++++++-- .../packages/contracts/src/api/workbench.d.ts | 4 + .../packages/contracts/src/auto-recipe.d.ts | 6 +- api-report/packages/contracts/src/card.d.ts | 2 + apps/api/src/modules/human-tool/CONTRACT.md | 1 + apps/api/src/modules/loop-engine/CONTRACT.md | 1 + .../loop-engine/__tests__/auto-runner.test.ts | 29 +++++++ .../__tests__/turn-runner-acceptance.test.ts | 42 ++++++++++ .../internal/usecase/auto-runner.ts | 3 +- .../desk-task/__tests__/order-face.test.ts | 39 +++++++++ .../desk-task/internal/chat-bubbles.tsx | 60 +++++--------- .../features/desk-task/internal/order-face.ts | 82 +++++++++++++++++++ docs/活动开发规范.md | 13 ++- packages/contracts/src/auto-recipe.ts | 8 +- packages/contracts/src/card.ts | 8 +- tools/e2e-a2.mjs | 39 +++++++-- 21 files changed, 492 insertions(+), 66 deletions(-) create mode 100644 apps/web/src/features/desk-task/__tests__/order-face.test.ts create mode 100644 apps/web/src/features/desk-task/internal/order-face.ts diff --git a/CLAUDE.md b/CLAUDE.md index b0972fe..cf306d0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1834,6 +1834,38 @@ .dossiers 三列网格(1fr·76px·1fr),中间列是实体动画道 —— ⇄ 徽呼吸 + 双点绕徽轨道 对转(sw-orbit),总线虚线在道里连两卡;窄屏单列收道。浏览器两帧相位实证。 +- **起单不许选到同一颗料;S1 数据齐了也叫人一次**(2026-08-31 用户两条, + `part-substitution-assessment@2.15.0`): + ①**两格互斥**(「创建活动的启动参数里面不应该能选到同样的两个芯片」)—— 查下来不只是没意义, + 是**把单子做死**:`sub_eval.part` 主键 `eval_ref + internal_pn`(role 不在主键里),配方铸的两行 + 撞成同一个主键、后一笔覆盖前一笔,两行收成一行 → `sub_eval_part_exists_status_found = 2` 永不成立、 + S1 收不了步,而件上那两行人加不出来(行源 `mine:`,没有「+加一行」)—— 唯一出路是终止重开 + (与「两格留空」同一条链,清单头注早写着)。平台加互斥声明 `x-distinct`(契约 `distinctGroup`)—— + 与 `x-link` 正相反:那个是引导,**这个是墙**。前端把别的格占着的候选从这一格下拉里抽掉 + (唯独自己填着的那个永远留着,否则 `