Archived
fix(w05): 验收工单的面孔在装配层被丢掉 —— 两头都有测,中间那一段把值扔了
用户实测:「你怎么给我发成了执行工单,我需要的是验收工单,然后标题那一块需要是 验收卡的那种绿色」。 一、面孔:engines.ts 发执行工单那一处是一句写死只认 'data' 的三目,配方递下来的 'accept' 静默丢掉 —— 对话区照旧摆「执行工单」。**配方那一头有测(variant 原样递出去)、 前端那一头有测(accept 该穿哪副面孔)、e2e 按标题驱动也全绿,唯独中间没有。** 修:抽成纯函数 executionCardVariant(与旁边 decisionCardFace 同一种做法、同一个测试位), 认 data / accept、拒 review、认不出的当没写;4 测变异验证过。 e2e 同批改**认面孔不认标题**(试跑观测面的 cards 补 variant,契约变更)—— 标题是活动自己写的字符串,卡穿哪副面孔由装配层决定,那一次正是两者对不上。 二、颜色:件① 验收工单那一副整套强调色换成验收绿 #0aa294(令牌从 ACCENT_LEDGER 现改选择器得来,与件②③、对话区验收卡一处真源),题头那条写死的浅蓝渐变单独给一条绿的; 数据工单那一副仍是蓝。真渲染核过两副 class 与两套令牌。 验收:e2e w05 5/5 released、被拒 0(面孔断言这一轮真在跑);2563 测、四门禁绿; 2.16.0 装库。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
+17
-1
@@ -1335,6 +1335,8 @@ async function runCase(suite, kase) {
|
||||
let dataCardSeen = false;
|
||||
/** w05「都在库」:匹配**验收工单**那一段的执行卡出现过 —— 数据齐了也要叫人一次 */
|
||||
let acceptCardSeen = false;
|
||||
/** 那张卡的**面孔**不对(标题是验收工单,发出去却是执行工单)—— 2026-08-31 真撞过一次 */
|
||||
let acceptFaceWrong = false;
|
||||
/** w05「类型不一致·硬拦」:`sub_eval.case.gate_reason` 命中过 `kase.expectGateReason` 那个词 */
|
||||
let gateReasonMatched = false;
|
||||
/** `kase.customFill` 只跑一次(w05「候选缺库·新建类型」:两阶段写 —— 先铸 type_id,读回来再引用它) */
|
||||
@@ -1419,7 +1421,20 @@ async function runCase(suite, kase) {
|
||||
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 ?? '')));
|
||||
/*
|
||||
* **认面孔,不认标题**(2026-08-31 用户实测:「你怎么给我发成了执行工单」)——
|
||||
* 标题是活动自己写的字符串,卡穿的是哪副面孔由装配层决定,两者可以对不上:
|
||||
* 那一次配方递了 `accept`、标题也叫「验收工单 · …」,而装配层把 variant 丢了,
|
||||
* 人收到的是一张执行工单 —— 按标题驱动的这套脚本当时照样全绿。
|
||||
*/
|
||||
const seen = (body.cards ?? []).find((c) => (suite.stages ?? []).some((s) => s.kind === 'accept' && s.match.test(c.title ?? '')));
|
||||
if (seen !== undefined) {
|
||||
acceptCardSeen = true;
|
||||
if (seen.variant !== 'accept') {
|
||||
console.log(` ⚠️ 这张卡的标题是验收工单,发出去穿的却是「${seen.variant ?? '执行工单'}」的面孔 —— 判失败`);
|
||||
acceptFaceWrong = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// w05「类型不一致·硬拦」:gate_reason 那句话要点了名(latch 住,答完卡草稿就清了,过了这一拍再查就晚了)
|
||||
if (kase.expectGateReason && !gateReasonMatched) {
|
||||
@@ -1663,6 +1678,7 @@ async function runCase(suite, kase) {
|
||||
console.log(' ⚠️ 数据齐了也该叫人一次(只读的验收工单),一张都没见到 —— 判失败(多半是 S1 又被拍首的 doneWhen 扫描收掉了)');
|
||||
ok = false;
|
||||
}
|
||||
if (acceptFaceWrong) ok = false;
|
||||
if (kase.expectGateReason && !gateReasonMatched) {
|
||||
console.log(` ⚠️ gate_reason 没点名(期望命中 ${kase.expectGateReason})—— 判失败`);
|
||||
ok = false;
|
||||
|
||||
Reference in New Issue
Block a user