进度条补回漏掉的那一格;删掉一条已经不存在的路

用户送来一条实测日志:中间被拒四次,卡片进度条也走得不对。两处都不是模型跑偏。

**进度条漏了一格** —— `INTAKE_PHASES` 里没有 `S3_confirm`(它是 08-01 才补回成一项的):
计划项六个、名单里五个。于是 S2 一收,前两格全过,条当场跳到「判定去向」;
而人这会儿正对着受理需求审定那张卡 —— **他手上办的那件事在条上没有格子**,
条却已经走过去了。那不是走快了一格,是它在说一件没发生的事。
补成四格(定位客户 / 归一受理 / 交你审定 / 判定去向)+ 基座统一加的放行收口;
包内自测钉死「除放行外每一项恰好属于一个阶段」「一项不进两个阶段」。

**那四次拒回是一条已经不存在的路** —— 说明书里还留着「人交回来还缺必填,就再发一张卡」。
提交闸上线后那条路没有了:缺必填根本按不下提交。模型照它办,每次都撞在
「这件事刚问过,人也答过了」上,白烧四拍。改成「这张卡一单只发一次」。
同批把提交闸补到**服务端**(收下回传之前把住):说明书向模型承诺
「卡回来时必填一定是齐的」,那句承诺只有服务端拦得住才算数。

A1 三案例复跑:9 拍 / 10 拍 / 14 拍,前两个**被拒 0**(修前是 12 拍被拒 1),
进度条五格逐格走对。五道门禁全绿(975 passed)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsTDjoHovERXyy6Wmw1ALp
This commit is contained in:
2026-08-02 14:13:24 +08:00
co-authored by Claude Opus 5
parent 259192f736
commit 3cf9f10b86
5 changed files with 90 additions and 5 deletions
+28
View File
@@ -884,6 +884,34 @@ export function registerDeskRoutes(app: Hono<AppEnv>, container: Container): voi
return c.json(body, 400);
}
try {
/*
* **提交闸在服务端也得成立**(2026-08-02)。
*
* 前端把按钮灰掉是给人看的;而**说明书里向模型承诺了**「卡交回来时必填一定是齐的,
* 所以不许再发同一张卡」——那句承诺只有服务端拦得住才算数。
* 拦不住的话:一次直调 API 就能把缺必填的卡交回来,模型照承诺不再追问,
* 这一单一路走到放行门才被 L1 拦住 —— 而那时缺的是哪一格早已翻篇。
* 与卡面那道闸同一段(`submitGate`),同一个数、同一套算法。
*/
/*
* **闸要在收下回传之前把住**:收下之后再拒,那张单已经记成办结了。
* 这一单归哪个任务只有库里知道(回传载荷里只有工单号),所以先问一句。
*/
const owner = rowsOf<{ task_id: string }>(
await container.db.execute(sql`select task_id from sys.work_order where id = ${parsed.data.workOrderId} limit 1`),
)[0];
if (owner !== undefined) {
const held = taskIdSchema.parse(owner.task_id);
const order = (await container.humanTool.allWorkOrders(held)).find((o) => o.id === parsed.data.workOrderId);
const gate = order === undefined ? undefined : await submitGate(container, held, order);
if (gate !== undefined && !gate.ready) {
const body: ApiError = {
code: 'validation-failed',
message: `${gate.why}${gate.blanks.length === 0 ? '' : ` —— ${gate.blanks.slice(0, 5).join(';')}`}`,
};
return c.json(body, 400);
}
}
const outcome = await container.humanTool.replyWorkOrder(parsed.data, staff.id);
/*
* **绑台账的可编辑表:人改了什么,基座当场写回草稿层**(2026-08-01)。