harness 与工作台同日修:数据工单确认即入库 · 叫了人不再自动推进(两道结构闸)· 审核卡 = 终局验收卡结构 · 验收清单人点达标 · 迟到守卫不丢放行裁决 · 画面跟着这一拍发出去的卡走 · 成果详情只翻页 · 占位居中 · 进度条

human-tool / ledger / loop-engine / release / task / interaction 六模块与 app 层(desk 路由、engines、consumers、
data-order-landing、case-stamp、reset-runs、seed-activities、容器与 server 装配),web 的 desk-task
(ViewRegion / chat-bubbles / review-face)与 app.css、ui-kit 图标;契约 card / manifest;
迁移 0034_task_seq 与迁移日志;api-report 快照;CLAUDE.md 快照、debt、活动开发规范、HTML 报告规范同步。
逐条口径见 CLAUDE.md 快照(2026-08-27 下午至晚)。另一会话做的,一直留在工作树没入库;与同批另两条提交互相依赖。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0167qWjeyBwvfdGovd7FWbCu
This commit is contained in:
xcs
2026-08-27 23:20:16 +08:00
co-authored by Claude Fable 5
parent 909b1fe4b7
commit 7b85a79323
79 changed files with 3903 additions and 1297 deletions
@@ -270,7 +270,6 @@ export function ViewRegion({ detail, onReplyOrder, values, onField, locate }: Vi
const cur = openList[pos];
const doneItem = doneSel === null ? undefined : doneList.find((o) => o.id === doneSel);
/** 成果详情里当下摆的是第几份 —— 翻「份」用它 */
const donePos = Math.max(0, doneList.findIndex((o) => o.id === doneSel));
/** 这一屏该出哪几组翻页(件 / 页 / 都没有) —— 判断抽在 `pager.ts`,有测 */
const face = pagerFace({ items: openList.length, pages: docPages });
@@ -301,6 +300,15 @@ export function ViewRegion({ detail, onReplyOrder, values, onField, locate }: Vi
setPage(Math.max(0, openList.findIndex((o) => o.id === locate.orderId)));
setDocPage(0);
}
} else if (locate.orderId !== undefined && locate.tab === undefined) {
/*
* 找不到那张单 —— 多半是审核卡(决策卡穿验收工单的衣服,2026-08-27)上的「验收工单」钮:
* 它没有工单行,件却在待处理那一屏(活动按剧本 `view` 推的)。至少把那一屏翻出来,
* 别让人点了没反应。
*/
setOpenFile(undefined);
setView('open');
setDocPage(0);
}
}
@@ -440,35 +448,16 @@ export function ViewRegion({ detail, onReplyOrder, values, onField, locate }: Vi
/*
* 成果详情右上角摆两组翻页 + 返回列表:
* · **翻页**(2026-08-21):同一份带多页的件归了档,翻页的能力不该不见了;
* · **翻份**(2026-08-23 用户:「工作成果点进一个工作成果也需要这个东西」)——
* 从前点进详情只有「返回列表」:想看下一份得先退出去再点一次,
* 而一单常有三五份定稿(执行单快照 / 验收单快照 / 决策卡快照),对着看是常事。
* 换份时页码归零 —— 上一份翻到第 3 页,下一份可能只有一页。
* 各自只在多于一个时现身;都只有一个就照旧只留「返回列表」。
* · 08-23 曾在这里加过「翻份」(在几份定稿之间切换),2026-08-27 用户定撤掉:
* 右上角那对箭头的意思是**这一份件里翻页**;换一份成果回列表点。
*/
<>
{doneList.length > 1 && (
<Pager
{...(doneDocPages > 1 ? { mark: '份' } : {})}
pos={donePos}
total={doneList.length}
what="份成果"
onGo={(next) => {
const to = doneList[Math.max(0, Math.min(next, doneList.length - 1))];
if (to !== undefined) setDoneSel(to.id);
setDoneDocPage(0);
}}
/>
)}
{doneDocPages > 1 && (
<Pager
{...(doneList.length > 1 ? { mark: '页' } : {})}
pos={doneDocPage}
total={doneDocPages}
what="页"
onGo={setDoneDocPage}
/>
)}
{/*
* **右上角只翻页,不翻份**(2026-08-27 用户:「这个东西不是让你在整个工作成果里面切换,
* 是让你在单个工单有多个页面的情况下切换的」)。08-23 加的「翻份」撤掉:换一份成果回列表点,
* 右上角那对箭头只在这一份件里翻页 —— 与待处理那一屏同一个意思。一页也照旧摆 1/1(定得住)。
*/}
<Pager pos={doneDocPage} total={doneDocPages} what="页" onGo={setDoneDocPage} />
<button type="button" className="jc-tnav-btn back" onClick={() => setDoneSel(null)}>
<Ico name="chevron-left" s={14} /> 返回列表
</button>