Archived
用户:「评审放行与落账确认这一步的验收卡不应该有重做的选项,因为这里都没有接入 ai」。 W05 的 T_release 整个由配方跑完(guide 是空串,不问模型),件又是只读的 —— 打回之后没有任何东西能接住那句意见:配方只会原样再提交一次,撞在「打回之后台账没动过 就不许再提交」那道闸上,连撞两拍落成一张「连续撞在同一条判据上」的兜底卡。 一颗按下去只会把单子推进死胡同的钮,不如不摆(墙要配路;没有路就别立那扇门)。 · 契约:AcceptanceWorkOrder.redoable(不写 = 打得回,老卡老行为); · 装配层按放行那一步的声明现算 —— releaseRedoable 纯函数(有 auto 且 guide 空 → 打不回; 半 auto 与模型驱动照旧打得回,那儿真有模型会读意见),与 decisionCardFace / executionCardVariant 同一种做法、同一个测试位; · 卡面收起理由框与那颗钮,换一句真路:「这一步只落账,退不回上一步 —— 有异议就别确认, 去终止这一单重开」; · **服务端才是门**:redoable:false 的卡收到非 pass 的回传当场拒(redo-unavailable), 直调 API 绕不过;拒回把真路指出来。 S3 结论审核那张审核卡不受影响 —— 它的重做真会带着意见重判(昨夜那一轮)。 测:card-rules 3 条 + releaseRedoable 4 条,两处变异验证;e2e w05 5/5 released、被拒 0。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
30 lines
1.5 KiB
TypeScript
30 lines
1.5 KiB
TypeScript
/**
|
|
* **打不回的放行卡**(2026-09-01 用户定:「评审放行与落账确认这一步的验收卡不应该有重做的选项,
|
|
* 因为这里都没有接入 ai」)。
|
|
*
|
|
* 判据只有一条:这一步整个由配方跑完、一个字的 `guide` 都没有 —— 那时打回的意见没有模型会去读,
|
|
* 配方只会原样再提交一次,撞在「打回之后台账没动过就不许再提交」那道闸上,最后落成一张
|
|
* 「连续撞在同一条判据上」的兜底卡。**一颗按下去只会把单子推进死胡同的钮,不如不摆。**
|
|
*/
|
|
import { describe, expect, it } from 'vitest';
|
|
import { releaseRedoable } from '../wiring/engines.ts';
|
|
|
|
describe('放行卡打回得了吗', () => {
|
|
it('全 auto(有配方、guide 是空串)→ 打不回', () => {
|
|
expect(releaseRedoable({ auto: { do: [] }, guide: '' })).toBe(false);
|
|
expect(releaseRedoable({ auto: { do: [] }, guide: ' ' })).toBe(false);
|
|
});
|
|
|
|
it('半 auto(guide 非空)→ 照旧打得回:那儿真有模型会读那句意见', () => {
|
|
expect(releaseRedoable({ auto: { do: [] }, guide: '按意见修订台账,改完重新提交' })).toBe(true);
|
|
});
|
|
|
|
it('模型驱动(压根没声明配方)→ 照旧打得回', () => {
|
|
expect(releaseRedoable({ guide: '把这一签下去会发生什么摆清楚' })).toBe(true);
|
|
});
|
|
|
|
it('认不出那一步(没声明人工验收清单的老活动)→ 老行为', () => {
|
|
expect(releaseRedoable(undefined)).toBe(true);
|
|
});
|
|
});
|