Archived
feat(w05): 数据齐了也叫人一次 —— S1 改派只读的验收工单,件同一份、编辑钮收起
用户:「就算数据是足的也进入这个数据工单,就派发一个验收工单,界面和数据要和现在的 第一个数据工单一致,只不过把芯片卡片上的编辑按钮去掉,只展示不能编辑,然后把标题旁边的 数据工单改成验收工单」。 病根在引擎拍首那道 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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
+34
-5
@@ -593,9 +593,23 @@ const SUITES = {
|
||||
address: 'parts.profile',
|
||||
blankCol: 'brand_name',
|
||||
stages: [
|
||||
{
|
||||
/*
|
||||
* **验收工单**(2026-08-31 用户定:「就算数据是足的也进入这个数据工单,就派发一个验收工单」)——
|
||||
* 输入本来就齐的单走这一张:同一份件、同一批数据,只是件只读、卡角编辑钮整组收起。
|
||||
* 没有 `edits`(件上没有可填的格子),`buildEdits` 算出来是空 → 一次保存都不发,直接确认。
|
||||
*/
|
||||
kind: 'accept',
|
||||
match: /验收工单 · 差异评估的输入核对/,
|
||||
address: 'parts.profile',
|
||||
rowKey: 'internal_pn',
|
||||
blankCol: 'brand_name',
|
||||
edits: [],
|
||||
},
|
||||
{
|
||||
// 唯一的数据工单:一张卡摆三块内容,写向四张表(主表 parts.profile,
|
||||
// extraTables 里另外三张)——四张表随同一次「保存」一并发出,不分次交。
|
||||
kind: 'data',
|
||||
match: /差异评估的输入还差几格/,
|
||||
address: 'parts.profile',
|
||||
rowKey: 'internal_pn',
|
||||
@@ -735,9 +749,15 @@ const SUITES = {
|
||||
},
|
||||
{
|
||||
sample: 1,
|
||||
name: '都在库 · 两颗同型且齐备 · 零数据卡直接进 S2 分析 · 审核一次通过',
|
||||
// S1 的 doneWhen 起手就成立(两颗都在库、同型、参数不缺)—— 断言一张数据工单都不发
|
||||
name: '都在库 · 两颗同型且齐备 · 派只读的验收工单交人核对(不是数据工单)· 审核一次通过',
|
||||
/*
|
||||
* 2026-08-31 用户定「数据齐了也叫人一次」之前,这一例是「零卡直分析」——
|
||||
* S1 的 doneWhen 起手就成立,引擎在拍首把这一步收掉,人一眼没看过就进了 S2。
|
||||
* 现在 S1 标了人工激活:doneWhen 不再抢在人前面,配方改派一张**只读的验收工单**。
|
||||
* 两条断言一起钉:数据工单一张都不许有(没东西要填)· 验收工单必须出现过(不许再跳过人)。
|
||||
*/
|
||||
expectNoDataCard: true,
|
||||
expectAcceptCard: true,
|
||||
decide: 'approve',
|
||||
expectPort: 'assessment-released',
|
||||
expectAnalyzeCalls: 1,
|
||||
@@ -1311,8 +1331,10 @@ async function runCase(suite, kase) {
|
||||
let bailed = false;
|
||||
let receiptChecked = false;
|
||||
let receiptMismatch = false;
|
||||
/** w05「都在库·零数据卡直分析」:任意一张匹配 stages 的执行卡出现过(不论此刻答没答)就算见过 */
|
||||
/** w05:匹配**数据工单**那一段的执行卡出现过(不论此刻答没答)就算见过 */
|
||||
let dataCardSeen = false;
|
||||
/** w05「都在库」:匹配**验收工单**那一段的执行卡出现过 —— 数据齐了也要叫人一次 */
|
||||
let acceptCardSeen = false;
|
||||
/** w05「类型不一致·硬拦」:`sub_eval.case.gate_reason` 命中过 `kase.expectGateReason` 那个词 */
|
||||
let gateReasonMatched = false;
|
||||
/** `kase.customFill` 只跑一次(w05「候选缺库·新建类型」:两阶段写 —— 先铸 type_id,读回来再引用它) */
|
||||
@@ -1394,7 +1416,10 @@ async function runCase(suite, kase) {
|
||||
}
|
||||
// w05「都在库·零数据卡直分析」:S1 的 doneWhen 起手就成立,断言一张数据工单都没出现过
|
||||
if (kase.expectNoDataCard && !dataCardSeen) {
|
||||
dataCardSeen = (body.cards ?? []).some((c) => (suite.stages ?? []).some((s) => s.match.test(c.title ?? '')));
|
||||
dataCardSeen = (body.cards ?? []).some((c) => (suite.stages ?? []).some((s) => s.kind !== 'accept' && s.match.test(c.title ?? '')));
|
||||
}
|
||||
if (kase.expectAcceptCard && !acceptCardSeen) {
|
||||
acceptCardSeen = (body.cards ?? []).some((c) => (suite.stages ?? []).some((s) => s.kind === 'accept' && s.match.test(c.title ?? '')));
|
||||
}
|
||||
// w05「类型不一致·硬拦」:gate_reason 那句话要点了名(latch 住,答完卡草稿就清了,过了这一拍再查就晚了)
|
||||
if (kase.expectGateReason && !gateReasonMatched) {
|
||||
@@ -1631,7 +1656,11 @@ async function runCase(suite, kase) {
|
||||
ok = false;
|
||||
}
|
||||
if (kase.expectNoDataCard && dataCardSeen) {
|
||||
console.log(' ⚠️ 这一例本该是零数据卡直分析,却见到了一张数据工单 —— 判失败');
|
||||
console.log(' ⚠️ 这一例没有要补的数据,却派出了一张数据工单 —— 判失败');
|
||||
ok = false;
|
||||
}
|
||||
if (kase.expectAcceptCard && !acceptCardSeen) {
|
||||
console.log(' ⚠️ 数据齐了也该叫人一次(只读的验收工单),一张都没见到 —— 判失败(多半是 S1 又被拍首的 doneWhen 扫描收掉了)');
|
||||
ok = false;
|
||||
}
|
||||
if (kase.expectGateReason && !gateReasonMatched) {
|
||||
|
||||
Reference in New Issue
Block a user