Archived
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:
+30
-7
@@ -82,7 +82,7 @@ activities/<id>/src/ ──(pnpm activities:build)──> dist/{manifest.json,in
|
||||
|---|---|---|
|
||||
| `declarations.ledger` | 运行时**只准写**这里声明的地址与列名;**人从件上改回来的值也走同一道门**(§3.1) | 编出来的列当场拒;未声明地址的保存一格不落 |
|
||||
| `declarations.tools` | Agent 可调的工具名单 | 未白名单授权报错(越权不转人) |
|
||||
| `assets.viewTemplates` | 工作区能推的画面 | 模版名对不上,「换画面失败」留痕、屏上不动 |
|
||||
| `assets.viewTemplates` | 工作区能推的画面;带 `data` 的那张(`activity-ledger`)是运营中心沙箱看板,`data` 定它按案号从正式表圈哪几张表的行(《HTML报告生成规范》§4.1) | 模版名对不上,「换画面失败」留痕、屏上不动;`data` 指了没声明的表或后面的集合 → 那一块空着、stderr 点名 |
|
||||
|
||||
静态审还核:**谓词里的名字必须是声明过的台账列或基座读数**(`域_对象_rows` /
|
||||
`_missing` / `_gaps` / `_<列>_<值>` 这些基座读数在审的白名单里)。
|
||||
@@ -112,6 +112,19 @@ activities/<id>/src/ ──(pnpm activities:build)──> dist/{manifest.json,in
|
||||
读己之写,不抛事件)/ `releaseWrite`(放行合并,此刻抛事件)。三个方法不是一个带 flag 的方法。
|
||||
- **`draftDrop`**:撤掉本单草稿层的一行 —— 不是第四种写(正式版碰不到、不抛事件)。
|
||||
它存在的理由:门拦住一件办错的事却不给改正的手段,那扇门就只是个死胡同。
|
||||
- **验收卡上的条目是人工验收清单,不是系统判据**(2026-08-27 用户定):派验收卡的那一步(终局 `submit`
|
||||
的 T_release,或 `cardVariant:'review'` 的审核步)在剧本上声明 `acceptanceChecklist: string[]` —— 人拿着这份
|
||||
工单要亲自核的步骤,一条一句可核对的动作,**每份验收工单固定**;引擎发卡时带上,卡上一条一枚「达标 / 不达标」
|
||||
开关,全部达标才能「确认通过」(服务端同样把关)。系统判的 `acceptanceCriteria` 照旧把提交门,不再摆到卡上让人签。
|
||||
写清单的口径:先看这份件人要看什么(汇总表 / 明细表 / 落库预览),每张表一条「核对什么、对到什么算对」;
|
||||
别抄机检判据的话(那是引擎数的数),要写人眼睛能核的事。
|
||||
- **数据工单确认即入库**(2026-08-27 用户定):`cardVariant: 'data'` 那一步派的卡,人一确认,
|
||||
基座就把卡上 `gateLedgers`(或绑的 `blocks`)那几张表并进正式表 —— 与提交闸同一份名单,不等整单放行。
|
||||
并过的行仍算「本单写下的行」(`mine:` / `_rows` / 任务视图照旧有它),整单放行时不再写。
|
||||
活动侧要知道的只有两件:①剧本别再教模型「人填的东西已落草稿层、放行前还能改」—— 已入库的键
|
||||
再 write 会被当场拒(拒回会说清是本单建好的行,别 drop);②**数据工单必须给 `gateLedgers`**,
|
||||
不给就没有一张表会因确认而入库(闸也没牙)。轨迹里有一条「数据工单确认入库:表 N 行」的痕,
|
||||
试跑单不落主数据时如实写「只留在活动缓存」。
|
||||
- **归型前移**:`draftWrite` 按声明列型归(空值 = 不写这一列、数值/布尔字符串转真类型、
|
||||
归不了当场拒)。**人手改的值与 AI 写的值过同一道门**。
|
||||
- **字段五标记**(`fieldDeclarationSchema`):
|
||||
@@ -252,7 +265,7 @@ activities/<id>/src/ ──(pnpm activities:build)──> dist/{manifest.json,in
|
||||
| `ask` | ~~已退役~~ | 基座原地转成零输入执行工单(字段名并进指导书);别再用 |
|
||||
| `entry` | `{itemId, ask, ledger, entryKey, fields, also?}` | 数据录入卡,挂起;确认那一下基座直写 |
|
||||
| `decide` | `{itemId, ask, options(≥2), basis}` | 决策卡,挂起 |
|
||||
| `human` | `{itemId, workOrder, card{title,ask,steps?,standard?,basis}}` | 执行/验收工单,挂起。**执行卡零输入**(2026-08-02 用户定):不摆 `fields` 不绑 `blocks`,填写全在工作区的件上(editGate + 孪生件),人按「保存」基座直写草稿层;必填由提交闸看住 —— **卡上加 `gateLedgers:["域.对象"]` 告诉闸这一张要拦哪几张表**,不给才回落到必交付物声明。**数据工单**(让人从零建一张主数据表)在那一步的剧本上声明 `cardVariant: 'data'` —— 引擎那一侧与执行工单无异,对话区据此换成「数据工单」那副面孔;卡骨架上的 `variant:"data"` 只是给模型看的提示,模型抄丢了也不影响(实测它会丢) |
|
||||
| `human` | `{itemId, workOrder, card{title,ask,steps?,standard?,basis}}` | 执行/验收工单,挂起。**执行卡零输入**(2026-08-02 用户定):不摆 `fields` 不绑 `blocks`,填写全在工作区的件上(editGate + 孪生件),人按「保存」基座直写草稿层;必填由提交闸看住 —— **卡上加 `gateLedgers:["域.对象"]` 告诉闸这一张要拦哪几张表**,不给才回落到必交付物声明。**数据工单**(让人从零建一张主数据表)在那一步的剧本上声明 `cardVariant: 'data'` —— 引擎那一侧与执行工单只差一处:**人一确认,卡上 `gateLedgers` 那几张表就并进正式表**(2026-08-27,见 §3.1),对话区据此换成「数据工单」那副面孔;卡骨架上的 `variant:"data"` 只是给模型看的提示,模型抄丢了也不影响(实测它会丢) |
|
||||
| `listen` | `{itemId, eventType, keyFilter, deadline}` | 立监听,挂起;时限必配 |
|
||||
| `finish` | `{itemId, rationale}` | 宣告一项完成;非人工激活的项就地过 Active 再收 |
|
||||
| `submit` | `{rationale, fields?}` | 提交放行 → 预检 → 发验收卡挂起 |
|
||||
@@ -266,7 +279,7 @@ activities/<id>/src/ ──(pnpm activities:build)──> dist/{manifest.json,in
|
||||
标了 `manualActivationRule` 的项,**模型显式动它(调工具/发卡/finish)就算启动**,
|
||||
不必单发 `start`(2026-08-02 拆墙)。它的分量在引擎那一侧,原样保留:
|
||||
**引擎不因哨兵满足替它启动**(哨兵只推到 Available/Enabled),
|
||||
**也不给 doneWhen 替人收**(自动收步跳过人工激活项)—— 收它只能是模型的 finish。
|
||||
**人答卡之前不给 doneWhen 替人收**;答过卡之后 doneWhen 照常生效(见 §4.4)。
|
||||
|
||||
实测账(两轮,同一堵墙):先是「话与门同宽」—— 提示词写「先 start 再调工具」只说了
|
||||
调工具,而门拦 tool/ask/human/decide/entry/finish 一整片,模型发 `human` 照字面漏了
|
||||
@@ -279,8 +292,17 @@ start 已收项无事发生同族)。剧本里也别再教 start —— 教它
|
||||
### 4.4 自动收步(doneWhen)
|
||||
|
||||
引擎每拍开头对任务视图求每一步的 `doneWhen`,**真了就自己收那一项,不问模型**
|
||||
(与模型同拍撞车时:引擎收过了,模型这拍的 finish 当已完成,不抛非法迁移)。
|
||||
人工激活的项**不给 doneWhen** —— 给了等于给引擎一把替人签字的钥匙。
|
||||
(与模型同拍撞车时:引擎收过了,模型这拍的 finish 当已完成,不抛非法迁移);
|
||||
**拍尾再求一次**(人答卡那一拍里模型写完东西 doneWhen 才真,不等下一拍;这一拍刚发卡的项不算)。
|
||||
|
||||
**人工激活的项也可以给 doneWhen,引擎只在人答过卡之后才求它**(2026-08-27 晚立):
|
||||
门槛是 `worldTouched`(卡真发过)且没有未答的卡 —— 卡没发过时 doneWhen 再真也不收,
|
||||
那才是替人签字。答过之后,「办完了没有」若是基座数得出来的事实,就写成 doneWhen 交给引擎:
|
||||
W05 的两张数据工单(人填的值已入库、必填不缺、逐颗对账)就是这一类 —— 从前靠模型记得 finish,
|
||||
剧本两处写死「先 finish 再发下一张」它照样忘,两步同时 Active、件停在上一步、人无处可填。
|
||||
**指南让模型判的事,引擎有现成事实的,一律改成读事实** —— 这条也管收步。
|
||||
仍不给 doneWhen 的:终局放行(T_release,由 submit 走)、审核循环、以及「办完了没有」
|
||||
数不出来只能由人说了算的项。
|
||||
|
||||
---
|
||||
|
||||
@@ -331,12 +353,13 @@ A1 是 `customerEmail / subject / body / attachments`)。
|
||||
裁量项),模型全程跟 harness 较劲,一单二三十万 token 收不了口;扁平 7 项后零被拒。
|
||||
2. **案卷项 id 就是任务视图键名**(入参与台账列摊平后的名字)。对不上 = 前提永不满足 =
|
||||
第一个项都不 Enabled,而每一层单看都「正常」。
|
||||
3. **`manualActivationRule` 只标触达世界与关键交付的项**,且**不给 doneWhen**。
|
||||
3. **`manualActivationRule` 只标触达世界与关键交付的项**;它的 doneWhen 只在人答过卡之后才求 ——
|
||||
「办完了没有」基座数得出来的(数据工单确认入库)就给,数不出来的(放行 / 审核 / 交人补缺口)不给。
|
||||
A1 标两项:S3_confirm(要打断真人)、T_release(签下去触达世界)。
|
||||
4. **人的门要建成一项,不要挂成某一步收步条件里的半句。** 「缺东西才叫人」的写法,
|
||||
一封齐整的询价进来那半句当场为真,引擎自己收步,人一眼没看过就被叫去验收
|
||||
(用户原话:「我都没确认需求 它就让我验收了」)。做法:独立一项 + 人工激活 +
|
||||
不给 doneWhen + 下一步的入场前提取**只有人的回复才产生的计数列**(`confirmed_total`)。
|
||||
人答卡之前不收 + 下一步的入场前提取**只有人的回复才产生的计数列**(`confirmed_total`)或人填的值入库的基座数。
|
||||
5. **哨兵必须有 ifPart,且读基座数、认「办完了没有」**(§3.3 放行门那行的教训)。
|
||||
6. `repetitionRule` 标常来回的项;判断菱形 = 两条互斥前提的 sentry,不是一个计划项。
|
||||
7. `autoComplete="true"`;里程碑前提达成即达成;`ifPart` 前缀 `semantic:` 交 judge。
|
||||
|
||||
Reference in New Issue
Block a user