 ChaiHaoandClaude Opus 5
|
1fd215cf40
|
范式退役:活动只剩一种、只跑 Loop;审批活动可管;活动库重做
用户定的两件,一并落地。
**一、活动不再分 flow 和 loop —— 彻底退役 flow**
· `flow-engine` 模块整个删除(runner 379 行 + step-sequence 184 行 + 测试);
· `paradigm` 从清单身份、`activity_package`/`task` 两张表、任务卡与活动库一并退场;
`businessModel` 不再是判别联合 —— 只有案例模型(CMMN + 说明书 + DMN)一形;
· task 的引擎分派从「按 paradigm 取两个之一」收成**唯一的引擎**;
· `activities/` 四个 flow 活动(A1 受理 / A4 定价 / A6 议价 / A7 归档)各写了一份
案例模型:阶段照原来的步分,触达世界的项一律 manualActivationRule,
能算的交 DMN(A1 的三分类 P-03、A4 的 P-01/P-02)不交 Agent;
· 六个占位槽位的骨架从「机器步落台账 + 一张验收单」改成案例骨架,包版本 0.8.0 → 0.9.0。
**代价写在明处,不假装没有**:`turn-runner` 每一拍都要 `agent.decide` ——
环境里没有模型 key,案例活动一步也走不动。三套端到端(统一报价 / 新建流程包 / 测试台
Trace)整套跳过,文件头写明恢复条件:①有可用模型 ②走法改写成按 Enabled 集推进。
**不许把断言改松让它变绿** —— 绿得不诚实比红着更坏。debt.md 已记。
**二、审批活动可管**(新能力)
· `sys.approval_template`:审批点**可复用的那一半** —— 审批人看哪几项、按什么名字看、
怎么催、说什么话。谁来审不在里面(与活动点同口径,运营时轮值);驳回回哪个节点
也不在里面(那是每张图自己的事,留在节点上);
· 三条路由 + 引用反查:还被审批点引着就不许删(409),删了那些节点会**静默**退回旧行为;
· 运行时 `basisOf`:引了模板就按模板筛与改名,没引即旧行为(载荷全摊开)。
模板改了只影响新发出的审批单 —— 在途单的依据在发出那一刻已定形。
**三、活动库重做**:一区两格 —— 「活动(装进来的)」与「审批活动(配出来的)」,
都用流程卡那套两段式卡片(头 + 四格数据板),幽灵卡当入口(装入活动 / 新建审批活动);
「标准/案例」那一维随范式一起撤,业务分类成了唯一的一维,以行内小签呈现。
迁移 0020:两张表 drop paradigm、建 approval_template。已在开发库跑过并重播种。
实测(丁子乔账号):建「定价审批」模板 → 流程包 A5 属性里选得到 → 引用反查计数正确。
四闸绿(api:check 随本提交)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 23:53:51 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
e5cfca638f
|
运营中心撤掉「数据」区;流程包首页重排:卡有层次、⋯ 管编辑与删除、新建变幽灵卡
**运营 · 数据(活动记忆四层)整个撤掉** —— 记忆的放行口还没成形,摆一个空区不如
不摆;真要做时随「数据资产」一并重开。区表、面归属、shell 映射、KnowledgeHome /
MemPage、活动详情里那枚入口一并清干净;旧深链 `#/gov/memory/layers` 落运营首页
(测试跟着改口径,不留死链)。运营中心自此六区。
**流程包首页**:
· 「编排要素:四种」这枚计数删了 —— 网关早废,它是句没人用的口号;
· 卡片重做。从前是「头 + 芯片行 + 一大片空 + 脚注」,158 高全靠留白撑;
现在两段:头(图标 · 名 · 标识 · 生效版 · ⋯)+ **数据板**(活动/审批/边闭合/版本
四格等宽、竖线分隔)。段段有内容、段间有线,高矮由内容说了算 —— 实测 111 高;
· 卡上 **⋯ 菜单**:编辑(就地改名,落在卡面那一版上)/ 删除(整条流,菜单原地翻成
确认,不另弹窗);
· **新建按钮变幽灵卡**:虚线卡住在货架末位,与真卡同宽同高(111/111)。
删整条流是新能力:`DELETE /api/gov/process/:id` + `process.deleteFlow`。
生效版这道闸不设(明示动作,不是手滑),在途单那道照设(PinnedVersionError → 409);
**「还有调起规则指着它」由路由层反查** —— process 是 L7,不该知道 trigger 的存在。
实测(丁子乔账号):改名往返、删除被 2 条调起规则如实挡回、幽灵卡建 `tmp-drop`
再删掉整条流,库里回到只剩 unified-quote v4,试跑数据已清。五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 22:38:52 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
f631b5b8bb
|
版本号自己定:点编辑,整列版本进编辑态,取消/保存收尾
用户的目的是**自己改版本号**,不是让系统替他递增;顺带把上一轮那些
指示性交互全撤了 —— 这软件给专业业务设计人员用,不需要「点我改」的提示条。
界面:
· 顶栏 编辑 → 取消 / 保存(与流程图卡「编辑 → 保存」同一套手势);
· 行内两个字段:号(自己编)与名(各版不同),行尾 删除;
· 改动攒在草稿里,按保存一趟落库;取消原样退出;
· **删掉**:改名指示条、「点我改」虚下划线、`删掉 v4`/`激活 v4` 这类复述钮名的浮字。
只留下禁用态那一句(生效版先停用 / 还不闭合),那不是指示,是钮为什么点不动。
后端 —— 号从「系统递增」放开为「设计人员自己编」,两道闸是数据本身要求的:
· 撞号拒(VersionTakenError,409);
· 在途钉版拒改号(那些单正按这个号找定义,搬号等于抽它们脚下的地板);
· 已完结的单**跟着改指**:号在三处(包的列、definition、workflow.packageVersion)
一起改 —— 号只是这一版的名牌,搬号连引用一起搬,留痕仍指同一份定义。
先前写成「跑过单就不许改号」,实测等于任何试跑过的包永远编不了号,是过闸。
· 名不设闸:标签不参与流转,在途钉版也能改;改名只动这一版(推翻前一日的
「及于整条流」)—— 各版本正是靠名字互相区分,全同名等于没名字。
路由 POST /api/gov/process/:id/:version/edit 取代 …/:id/rename(单一消费者是本仓前端);
CONTRACT.md 与产品设计.md 同步,api-report 快照随本次提交。
实测(丁子乔账号,测后已 reset-runs 清运行数据):v4→v2→v4 往返,列表、画布图签、
库里三处同步;在途单存在时改号如实报 409 并原样退回。五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 22:15:19 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
05c0a57cad
|
四枚头钮真正同款:保存撤掉强调色,按钮字体不再被画布纸面改写
量出来两处差异,都不是错觉:
· 「保存 v4」挂着 t-go —— 棕字(138,95,28)米边(217,201,164),另外三枚是
墨字(58,68,82)灰边(216,222,230)。**撤掉 t-go**:可不可存由禁用态说,
不靠换色抢戏;t-go 留给版本行的「激活」那种真·主动作。
· 中卡那枚「编辑」字体族是 PingFang 栈,另外三枚是 Inter 栈 —— 因为
`.g-ver-act` 用 `var(--sans)`,而画布纸面 `.process-doc` 把 --sans 换成了
中文正文栈(那是给图上的字用的)。立 **--ui-sans** 令牌(控件专用、同栈但
不被局部作用域改写),按钮改用它 —— 骑在纸上的按钮属于界面,不该跟着换脸。
实测四枚:字色 58,68,82 · 边色 216,222,230 · 字体 Inter · 高 26 —— 完全一致;
保存在可用态 opacity 1、禁用态 .45,是同一枚钮的两个状态,不是两种风格。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 21:18:32 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
cae4dbcb76
|
三卡头线对齐 · 题字调大 · 四钮各归其位 —— 两个「编辑」分工划清
· **头线对齐**:左右卡的头底线与中卡的**图框上边**同一水平(308/308/308)——
中卡题下不再另画一条线,画布顶边就是它的分割线(几何:14 纸内距 + 26 题行 + 12)。
· **题字**:9.5px → 11px,疏排大写照旧。
· **四钮全部住标题栏右端**、同一族(图纸方钮 26 高):
版本 → 新建 · 编辑 流程图 → 编辑 节点 · 属性 → 保存 v4
左卡那条独立动作条(.g-veracts)整条撤掉。
· **两个「编辑」划清**(用户定「标题栏的编辑只作用于版本记录」):
· 版本卡的编辑 = **版本记录**:开着才出改名条、行尾钮换成删除;不碰画布。
· 流程图卡的编辑 = 手绘画布;编辑态升为工作区级的做法就此回退 ——
FlowFigureBlock 收回内部 state(canEdit 回来),两者互不相干。
停用/激活照旧长在版本行尾(那是某一版的运行时开关)。
实测:头线 308/308/308;头钮 左[新建·编辑] 中[编辑] 右[保存 v4];
点版本卡「编辑」→ 行钮变删除 + 出改名条,画布进手绘 = false;点「完成」还原。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 21:11:51 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
89ea6e609c
|
版本栏动作再分工:启停回到版本行上,新建·编辑·改名住顶条,编辑态行钮换删除
· 顶条只放**建改类**(作用于整条流/工作区):新建 · 编辑 · 改名。
「编辑」从图卡题行迁来 —— 编辑态升成**工作区级受控状态**
(FlowFigureBlock 的 editing 提升为受控 props):版本行的按钮语义都跟着它变,
这不是图卡的私事。编辑中顶条示「编辑中」,收尾走画布里的 保存绘图/取消。
· 停用/激活是**某一版**的运行时开关 —— 回到每条版本行的行尾
(矮一号的小钮,行不发胖;行本身照旧点击切版,小钮拦冒泡)。
· **编辑态下行钮换成删除**:正在改定义的人,手边该是版本管理,不是启停开关;
生效版照旧禁删(先停用)。
实测:顶条 新建·编辑·改名;平时行钮 停用/激活;点编辑 → 画布进手绘、行钮变删除
(生效版灰);取消 → 行钮变回停用。五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 19:29:11 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
af2d00a107
|
编排工作区三卡统一:按键一族 · 标题一规 · 顶部留白一档
量出来的病根:三张头三种几何(左 30px 顶距 / 中 0 / 右 13px),按钮两种血统 ——
而且 .g-ver-act 在 CSS 里有**两份定义互相覆盖**(图纸方钮版 + 圆角芯片版),
按钮忽方忽圆的怪样就是它。
· 按钮:立**唯一规格** —— 图纸方钮,26 高、白底细线、无圆角;主动作 t-go 黄铜、
危动作 t-bad 赤。中卡「编辑」(原 dc2-addbtn 蓝芯片)与右卡「保存 v4」
(原 g-ver-new 蓝芯片)全部换族;g-ver-new 与两份旧定义连 CSS 一起清掉。
· 标题:三条头同一几何 —— 14/16/11 内距 + mono 大写题 + 底缘细线;
头行内容一律 26 高(= 一枚方钮),没按钮的头也不塌。
实测三条头底线 308/308/308,按钮顶 270/270,完全同线。
· 留白:头下内容起点一律 12px(版本列表 / 图框 / 属性明细)。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 19:18:53 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
4cd14d7849
|
版本栏与节点属性再调:比例 · 四钮同款同排 · 「实现」改成看得出能点的真选择器
· 比例:左栏 196–224 → 228–268(版本行整行排满),右栏 320–1.25fr → 264–1fr(节点属性收窄)。
· 四枚按键(新建 · 激活/停用 · 改名 · 删除)**同款同排**收进顶部动作条 ——
新建不再另作一枚蓝芯片挂在头上;白字不换行,右端 v 号去掉(选中行自己亮着)。
右栏头顺带收掉闲置提示「点节点就地填写」(空态文案已交代),只留脏态。
· 「实现」下拉从无框文字改成**真控件**:有边、有底、有箭头、焦点有落点 ——
无框下拉在窄轨里读成一行普通文字,人不知道能点,这是可用性缺陷不是审美偏好。
实测:7 个选项、换选即入脏态,保存路径原样。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 19:05:16 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
541b1c816e
|
版本栏三改:显示完整 · 动作统一住顶部 · 「实现」明确为链接自活动库
· 栏宽 132 → 196–224:一版一行排满「v4 生效 10 节点 · 14 边」,不再挤成三行。
· 激活/停用 · 改名 · 删除收成**顶部动作条**(右端注明作用对象 v几,
换版看,条上的钮跟着换语义);行里只剩事实,不在行内展开小钮。
改名输入就地在动作条下方展开,不再吊在卡底。
· 「实现」行改口:标签「实现 · 链接自活动库」,空选项写
「从活动库链接一个活动 —— 未链接,激活会被拦」—— 节点不含实现,
链接才算装载,这层语义直接写在控件上。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 18:48:25 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
9c947950ce
|
测试台与节点属性三改:拆盒 · 收色 · 让三件实物说话
上一轮的病根认下来:暗侧是「盒子摞盒子」—— bed/panel/panel2 三层深蓝几乎同色,
每节各带一条填色题头栏,纸信缩在盒子里像张明信片;磷光、琥珀、青蓝、暖纸四个
色温体系打架。节点属性那条竖格线逐行断裂,类型切换是个外来的灰块。
**测试台 · 拆盒**:台面上只留三件「实物」——纸信(暖白)、抽键读数屏(纯黑凹屏)、
起单钮(磷光);其余全部退成台面排版:
· 左右两栏不再是描边圆角盒,一道竖细线分栏;节题从填色横栏改成
疏排大写 + 底缘细线 —— 是标题,不是盒盖。
· 被测流选中态只亮一道磷光左棱 + 提亮文字,撤掉整块青染 —— 色彩留给读数屏。
· 读数屏撑满栏宽、值放大;「必填」从描框小徽退成缀在键名后的小字 ——
屏上的字越少越像屏。
· 纸信撑满右栏成为主角:内距 22px、主题 14px 半粗、正文行高 2;
纸上聚焦一律墨色加深 —— 琥珀与磷光都留给机器侧,纸只有纸的颜色。
· 起单条撤掉渐变毛玻璃,平铺台面 + 一道细线。
**节点属性**:335px 窄轨里逐行断裂的竖格线比没有更乱 —— 改标签在上、值在下的
叠排,行距放足,图签味交给 mono 大写与行线;类型切换从灰色分段控件改成
**两枚迷你节点皮肤**:选活动点就是一小块画布蓝,选审批点就是一小块琥珀 ——
切换器长成它代表的东西。
教训一并修:上一轮一段 CSS 替换因原文不匹配**静默没吃上**(没加 assert),
截图看着旧样还以为改了 —— 这轮逐条 grep 验证每段都落了。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 18:27:00 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
f8f208e945
|
两处 UI 重做:节点属性 = 图签 + 画布同款节点芯片;邮件输入 = 台面上的一张纸信
**流程包 · 节点属性**:泛用表单换成**图签**(title block)——
· 卡顶一枚从画布上「拎下来」的节点芯片:活动蓝 E8F1FB/4E7DAF、审批琥珀
FBF0DC/B98432,左上角标同画布 —— 属性改的是哪一件,一眼对上,不用回图上找。
· 字段收成图签行:76px 标签格(mono 竖签 + 格线)+ 值格,行间细实线 ——
表格,不是表单;值格输入无框,格子本身就是边界。
· 出边收成路由小表:带题一行(共用提示住右角:活动点「条件读本节点的输出字段」/
审批点「条件读审批裁决 verdict」),每行 E号 → 去向 + 去向节点名,条件在值位;
从前三条重复的长提示删成一条,空条件的语义进 placeholder(留空 = 默认兜底)。
**测试台 · 邮件输入**:表单换成**一张纸信压在暗台面上** —— 整台仪器里唯一的浅色面,
把「机器说 mono、信是外界」推到视觉结论:
· 暖白纸面(FBFAF6)+ 纸边细线 + 投影浮起;信上全是无衬线,标签是小号暖灰。
· 解剖照邮件写:信头三行(发件人 / 收件箱▾ / 主题加粗)→ 正文(纸上的一片空,
不描边不描线 —— 写信不是填表,resize 手柄也摘了)→ 附件签条(虚线隔开,
纸质小签 + 「加一个 BOM」虚框钮)。
· 聚焦色在纸上转琥珀(纸是暖的,磷光绿留给机器侧)。
实测:改坏主题 → 预检 0/2,改回 → 2/2 —— 灯对纸上的字照样实时。
旧 .tb-ml / .g-att 两组样式退役。五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 18:11:44 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
6cff6ab34c
|
删掉节点的「说明」字段 —— 它填得进、存得下,却从来画不出来
`sub` 声称是「画布上的第二行小字」,但画笔里那支只在 `variant !== 'business'`
(步骤图)才走,而全仓的调用点一律是 business:这个字段写了、存了、
一次也没显示过。属性面上那句提示是句假话。
整条清:属性面的一行 · `ProcessNode.sub`(契约) · `FlowNode.sub` ·
图↔包两处映射 · 画笔里那支画不出来的分支(连同它带来的「两种画法」分叉,
现在节点框里就一行活动名) · 节点宽度算法里 `node.sub || node.ghost` 的宽框判据
(sub 没了,只剩 ghost 决定宽窄)。
存量数据不受影响:库里没有一条带 sub 的定义(查过),schema 非严格,
真有旧值也只是解析时被剥掉。
五闸绿;契约快照随本提交入库(去一个可选字段,加法的反面,无下游)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 17:48:12 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
28623cd1cb
|
节点属性平铺 —— 不分类,也不写数据契约声明
分类卡(身份与命名 / 数据接口 / 类型与责任 / 链接活动实现 / 出边)全撤:
节点本来只决定这么几件事,分成五张小卡反而把四五个字段摊成半屏。
现在是一列字段直排,字段间一条细线断句:
节点 ID(只读)· 名称 · 说明 · 节点类型 · 链接实现 · 出边条件(每条一格)。
「数据接口 · 声明」整节删掉 —— 数据契约**归活动自己**,编排面不复述它。
链好实现后只留一枚直达钮:「去活动库看 X 的契约」。
顺带清掉两条一直漏网的说教横幅(前一轮 ⓘ 清扫时因为文案里夹了 <b> 没匹配上):
「编排不带岗位 ——…」与「审批点是系统内置要素 ——…」。前者的意思已收进
「节点类型」那行的提示,后者本就是常识性交代,不必占一整块。
CSS 里 .g-props/.g-propcol/.g-eprops/.g-prop* 与 .g-dif* 两组样式随之退役,
换成一条 .g-nodeform。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 17:29:11 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
c9ac058bdf
|
三面拆分⑯:流程包详情改三栏 · 字段只声明 · 版本可删可改名
**字段只声明,不做任何要求**(用户定):编排层不再碰字段 ——
· 激活闸只剩两面:结构闭合(dangling-node / multi-default-edge)与活动装载
(unknown-activity);字段类的检查(同名不同型、容忍分支被必填依赖)全部退役。
· 节点属性卡的「数据接口」从「推来源」改成**纯声明**:照活动契约列出吃什么、吐什么,
不标必填、不推来源、不提补全 —— 缺了怎么补是**活动内实现**的事,不在这一层现形。
· 字段类型支持数组:统一写成 `T[]`(如 `any[]`),出口口的字段也带上类型
(原来只有字段名)。实测 A2 的 benchmark 口显示「rows any[] · needSourcing boolean」。
**详情页改三栏**:左窄轨版本(132px) | 中流程图 | 右节点属性。
· 版本条一版一行(v几 · 状态 · 点/边计数),动作只在**看着的那一版**上展开 ——
窄栏放不下每行一排钮,也不该让人误点别版。
· 删掉「激活 · 双判据」整卡:没选节点时,属性栏就地列出还差哪几条(点一条定位过去);
两面都齐时盖一枚小检验章,不再占一整张卡。
· 删掉节点拣选行 —— 直接在图上点节点。
· 属性卡用包壳绝对定位:行高由中栏的图定,属性长了在卡内滚,不把图拉长
(实测卡高 467、明细内容 1039、可滚,图框不受影响)。窄轨里属性小卡改单列竖排。
· 顺带校正:上一轮那条「图框下沿对齐左列底栏顶线」的 20px 留白,
三栏改版后左栏已无底栏,没有对齐对象了 —— 改回四边等距(18px)。
**版本可删可改名**(新):
· 删:生效版不可删(先停用,ActiveVersionError → 409)、在途钉版不可删
(那些单要按它跑完,PinnedVersionError → 409);删掉正看的那版会落到剩下的最新版,
一版不剩就回货架。
· 改名:名字是**这条流的身份**,一次改及于所有版本 —— 版本列表上只显示 v1/v2…,
若只改一版的名,列表上什么也看不见,人会以为没生效。
· 5 条单测守两道闸与改名口径;实测走查:改名落库 → 改回;生效版删 409、停用版删 200。
process CONTRACT.md 与产品设计.md 同步。五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 16:14:54 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
f03f23f2ca
|
编排页两处收口:图框下沿对齐左列底栏;边不再是可编辑对象
**对齐**:图框下边原本停在纸面内距上方,与左列版本卡底栏的顶线差 16px,
两条本该连成一线的横线错开。改法不是拿魔数把图框往下推 ——
纸面改成 flex 列、图框 flex:1 吃满(被栅格拉高时跟着长,不会又浮回上面),
下方留出**恰好一条底栏的高度**:20 = 38(底栏净高) − 18(纸面下内距)。
底栏那侧加 min-height:38 锁住基线,两边注释互指。实测差 0。
**边不再是可编辑对象**:上一轮边已瘦成「顺序 + 条件」,再给它一张属性卡、
一条 E1…E14 拣选行、一套与节点互斥的选中态,就是为一个条件养一整套机制。
按 Mastra 的语义,分支本来就归**发起它的那一步**管
(`.branch([[条件, 下一步], …])` 挂在上一步上)—— 于是:
· 删掉边属性卡、边拣选行、selEdge 选中态;
· 节点属性卡新增「出边 · 往哪走」:列出本节点的每条出边(E号 → 去向)与条件,
单出边显示「无条件直连」,留空即默认兜底;
· 审批点的提示单写一版 —— 它的判据是**系统注入**的 verdict,不是自己的输出字段;
· 点画布上的线不再打开边卡,而是选中发起它的那个节点。
顺带清掉三处失真文案:头注与「节点 ID」提示里的「边映射」、空态里的
「边填传递契约(条件 + 映射)」。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 15:13:55 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
4cbfea5b46
|
流程图图例收进图框下沿 —— 删掉「责任」那两格
图例本来是画布下面一个带边框、带钢青左线、带灰底的独立盒子,读起来像图之外
又摆了一块内容。工程图的图例画在图框**里**,不另起一张纸 —— 挪进 .hero,
做成与顶部图签(.cap)对称的一条框内小字:细线横贯整框(负外边距抵掉框内距),
左右 16px 与图签的字对齐同一竖线,mono 9.5px 同一记法。展示态与编辑态共用。
「责任 · 右上角标 责任人」删了:编排**不带岗位**(负责人是运营时分配的),
图上早就不画责任人角标 —— 图例里留着是指着一件不存在的东西。
顺带两处对账:
· 图签右格原本写「蓝 = 活动点 · 琥珀 = 审批点 · 线标 = 边号」——
图例进框后这就是同一框内说两遍(蓝/琥珀本来就由图例的图标自己带);
改成说这张图**是什么**:「顺序与条件 —— 数据按字段名流动」,
边号那句并进图例的「顺序流 · 线标即边号」。
· oneLiner 的兜底文案还写着「活动 · 网关 · 顺序流」—— 网关早已去节点化,改掉。
图例小图标从 vertical-align + translateY(-1px) 的手抬改成 flex 居中(行已是 inline-flex)。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 14:44:26 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
03eb666ac2
|
三面拆分⑮:对齐 Mastra 数据流 —— 边只表达顺序,数据按输入/输出字段名流动
用户定的机制对齐:Mastra 的边不传数据,所有约束力靠输入/输出字段(schema 咬合)完成。
照此把「边映射」整个退役:
· 契约:edge 去 mapping,审批 reject 去 mapping —— 边只剩 顺序 + 条件(读上游
输出字段)+ 标签/回边。fieldMapping 只留给触发器的起单装配(系统边界)。
存量包无需迁移:zod 解析时把旧 jsonb 里的 mapping 静默剥掉,图照常有效。
· 运行时:assemble(边装配)→ flatScope(铺平作用域)——
起单入参垫底 ← 沿途各输出口字段依次盖上 ← 刚发射的载荷(Mastra 语义:
下一步的 input 首先是上一步的 output)。下游按自己的契约取字段;
「__」前缀是运行时自留地,不入业务作用域。审批驳回重开、失败改道同一条路。
· 闭合校验:边未映射/必填未映射/容忍依赖三条映射类检查退役
(宽进之下必填有没有着落是运行时补全单的事,不拦激活);
激活闸只留一条硬伤 —— **同名不同型**:名字即管道,名同型异必坏,
容忍依赖改按名判。改名映射不存在:名不对改契约,不是加映射。
· 种子:A2 的入参 material 更名 pn(它就是 PN;上游 A1 发的名就得是它收的名),
契约 0.3.0、槽位 0.8.0;流程种子边全部去映射。
· 前端:边属性卡砍掉「映射 · 载荷装配」整节,只剩 E号/方向/条件/标签;
节点属性卡新增「数据接口 · 按字段名流动」——每个输入字段标出运行时从哪来
(起单入参 / 上游 X / 补全单),输出口列出发什么名;沿边回溯推导,设计期看得见。
画布保存与依赖文件导出同步去映射。
E2E 顺带把宽进接进真流:快速归档流的 A3 要 outcome 而流里没人产 ——
测试如实走补全路(等人 → 答卡 outcome=won → 开跑 → completed)。
实测走查:A2 节点卡上 pn←上游A1、rfqRef←起单入参、scenario←补全单,推导全对。
五闸绿;契约快照随本提交入库。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 14:25:27 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
72f90f293b
|
测试台改仪表台:启动输入换成一封信;卡片化触发器与大模型;清掉 ⓘ 说教条
**测试台**
· 启动输入不再是「调用参数」表 —— 这条流真实的起法就是客户来信,
界面上就该是一封信(发件人 / 收件人 / 主题 / 正文 / BOM 附件)。
服务端拿**真通道的抽键正则** + **真触发器的装配映射**推出调用入参:
测试台自己不解析邮件,否则试通的是测试台而不是这条流。
抽不出必填就如实报「哪个字段没命中、通道的正则要什么」,不静默起空单。
· 一屏两大块:左选流,右两节 —— 01 输入配置、02 节点指派。
· 起单钮只剩一枚(原来页头一枚、RUN 卡里一枚)。
· 改暗色仪表台:调色板集中在 .g-tb/.g-rig 的一组变量上,
TRACE 那张树 + 甘特的结构一行没动,只是纸变成了面板。
**触发器 / 大模型** 列表改卡片:一条规则、一个实例都要一眼看全
(何时起 · 起哪条流 · 开没开 / 谁家的 · 什么型号 · 密钥绑没绑)。
触发器卡是 div 不是 button —— 卡里还坐着「改规则」那枚真按钮。
**同类卡等高**:底栏钉在卡底、说明恒占两行、卡头一行截断。
实测同一货架内 13 张工具卡、6 张活动卡、3 张模型卡各自完全等高。
**删掉 19 条 ⓘ 说教横幅**(「只列有生效版的包…」那一类)。
留下的是三种:确认带里的影响说明(点了动作才出现,是决策依据)、
warn/ok 的真反馈、以及「X 不存在」这类空态。
删掉入站邮件演练整屏 —— 它验的那两步已经并进测试台的起单路径了。
新增一条接缝测试:通道抽出来的键叫 keys.customerCode,触发器映射也得照这名字取;
哪头改了名字单还是能起,只是入参悄悄变空、流走到 G1 才莫名其妙地停。
四闸绿;契约快照随本提交入库。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 10:42:01 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
8cb00d1ff6
|
三面拆分⑫:设计台九区一级目录 —— 一区一内容,测试台收成单例仿真
设计中心从「蓝图 + 四库」摊成九区,顺序即设计的次序:
蓝图 → 触发器 → 流程包 → 活动库 → 工具箱 → 数据域 → 知识库 → 大模型 → 测试台。
触发器与大模型从「并进流程包 / 塞在系统区」里拿出来独立成区 —— 前者与流程包平级
(不入包结构、不随包版本),后者是设计者天天要碰的东西;知识库先立个诚实的空占位。
一区一内容,于是区内页签栏整条删掉(壳层在只剩一格时收起):
· 流程包:总览的三枚计数并进货架顶端
· 测试台:入站邮件演练移到触发器区就地验(它验的正是那一区定的规则)
· 大模型:从系统区拆出,系统区只剩通道实例
测试台一次只跑一条流。起单前先销毁上一单,刷新页面能认回在跑的那一单,
「停止仿真」把工作流连同它派出的任务、工单、实例、留痕一并拔掉 ——
不留半单挂在别人工作台上。实测:起单 → 1 单落到 AI 工作台 → 停止 → 库里零残留。
功能工具补中文名(migration 0018,读回退到逻辑名),治理台一律主显示中文名。
顺带清掉几处说教式文案(「这些是工具,不是模型 —— 模型是它们跑在上面的发动机…」那类)。
五闸:typecheck / lint / depcruise / test 绿;api:check 快照随本提交入库。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-29 04:35:36 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
967627d753
|
三面拆分⑳:属性卡图纸化重排 —— 检验单判据、索引栏拣选、明细表映射(SubAgent 设计)
frontend-design 技能专项重排流程包详情下半区三卡(仅呈现,零逻辑改动):
- 激活双判据卡 → **检验单**:判据一·图编排 / 判据二·活动装载两个检验格,
各带面头状态字;全清盖检验章(编排闭合 CHK·1 / 装载齐备 CHK·2,反向微旋),
两面全清出黄铜裁定带「两面都齐 —— vN 可运行」;违规行红左线方角压回
- 节点属性卡 → **索引栏 + 明细区**:节点/边两行分度带(行首 mono 竖签带计数,
22px 方角芯片,行间虚线),下方唯一滚动层;空态改居中图纸空页
- 节点态两列手排(语义成组):身份与命名+输入+输出口 | 类型与责任+链接活动实现;
小卡按内容自高(去 250 一刀切),卡头 mono 微签,字段改**底线填写式**
(mono 大写微签标签、readonly 虚线底、聚焦转钢蓝)
- 边态映射卡加 mono 列头(下游字段/←/来源/口名/路径·值),
与行共用 6 列 grid,起单载荷/常量的值输入跨列合并 —— BOM 式明细表
- 钩子类名(g-pick/g-ver/g-exfacet/g-props/g-maprow)全保留;
顺手清一句过时空态文案(「节点填岗位」→ 负责人运营时分配)
三态截图核对(空态检验章/A1 两列/E7 明细表)+ 五闸退出码全过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 22:22:02 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
f145bde875
|
三面拆分⑲:审批点卸岗位 —— 负责人一律运营时分配,绑员工组,实例记 assignee
模型(用户定):审批点不绑岗位;节点负责人是运营时分配的,绑定到员工组。
- 契约:approval 节点删 approver(功能属性只剩驳回走向/催办/委托消息);
CLOSURE_VIOLATION_KINDS 删 missing-owner-position(岗位不入编排,无岗可核);
治理审批列表删 approverPosition 字段
- 运行时统一口径(活动点=审批点):工作流绑了员工组按组轮值(组员并集最闲者先),
没绑组全员轮值;staffId 稳定排序保证确定性,组员全不在岗退回全员。
ADR-011「绑定先于策略」随岗位退场 —— 工作组快照的成员集合成为轮值池
- 实例记 assignee(迁移 0014 node_instance.assignee_id):分派结果是流转事实 ——
审批箱收件(i.assigneeId === me)、裁决权(同一判据)、员工面链条报实际承接人、
治理台审批列表报人,全部按它认,不再有岗位比对
- closure 卸 positions 入参;desk/desk-approval/governance-ops 三路由改口;
web 属性卡删「审批岗位」选择与警示、positions 管线拆除;种子 A5 卸 PM;
导出依赖文件审批段只留编排语义
测试:closure 25、save-package 6、seed 8、graph-to-pkg 5、端到端八例真库全绿;
五闸退出码全过。库:迁移 + v4 就地同步(唯一生效版)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 21:24:41 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
ecfaef1463
|
三面拆分⑱:属性卡台面化 —— 定高双列,边属性整宽一行排开
- 节点属性卡与激活判据卡**同排定高 560px**:行高由属性卡定,判据卡拉伸补齐;
内容超高在卡内滚,不把页面撑长 —— 台面件定形,不随内容乱长
- 节点属性两列小卡(等高 250、内部滚):身份与命名 | 类型与责任、输入 | 输出口
- 边属性整宽单列(g-eprops):条件与映射各占满一行;
映射行 nowrap 一行排开(目标 ← 来源类型 口 路径 删除),输入收缩共分宽度,
不再有换行错位的怪布局
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 20:19:25 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
a10a7b2855
|
三面拆分⑰:编辑即其身 —— 保存写回本版,新版本只出自「新建」
用户问:为什么编辑一个版本、保存就自动多一个副本?那不是我要的。
旧机制「保存恒新增版本号」改为:
- savePackage:pkg.version 已存在 → **就地写回该版**(号不变、状态不变);
`asNew: true`(新建按钮)或新流程首版才铸新版本号(服务端算,不生效)
- 底线三道,一道不少:
① **在途钉版不可变** —— 该版有未完结工作流(按 (包,版本) 钉定义)→ 409,
一字不落库;「就地覆盖会改掉在途正在读的编排」由这道闸守,不再靠只插不改一刀切
② **生效版必须始终可运行** —— 写回生效版跑闭合闸,不闭合 412 带整份报告;
未生效版画图不检查、随手存
③ **陈旧编辑不复活** —— 流程存在而版本号已被清理 → 409(实测:停在已删旧版上的
标签页发来保存,把老内容静默复活成了新版本;StaleVersionError 拦死)
- store:新增 updatePackageDefinition(只许命中现存版本)+ countPinnedInFlight
- 前端:保存按钮「保存 v{n}」;新建走 asNew;文案全线「新建才长版本」
- 测试:save-package.test 六例(写回/钉版/热改闭合/asNew/防复活/首版);
过程中揪出双 API 进程并存(旧进程霸端口跑旧代码)——已重启归一
实测:改名保存 → 版本列表仍唯一 v4 生效中,名字已写回;八例端到端全绿;
五闸退出码全过(api:check 提交后转绿)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 20:11:41 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
6988a750ae
|
三面拆分⑮:图只留 v4 —— 拔自动重排修回节点身份,按钮改边号+标签
用户在编辑器里手调了几何(整体右下移 10px,三条定价来路并入 x170 合流下行道,
议价回边沿左缘绕行),存出 v2–v4;令「图只留 V4 版本」。落库前查出一处大 bug:
**编辑器每次改动都按几何拓扑自动重排活动编号**(renumberAll 挂 commandStack)。
卡点时代回跳不是真边、图无环,重排恰好稳定;上轮回跳成真边后图有环,
破环顺序把在座节点的 id 转圈重派 —— v4 里成本定价 id 变 A6、审批变 A4、议价变 A5
(code 显示无恙,身份已漂)。id 是节点身份:在途按它钉定义、映射按它寻址、
异常按它定位,不许因挪布局而漂移。
处置:
- **拔除自动重排**:编号落子时铸定(mintNodeId 取下一空号),此后恒定;
orderActivityIds / swapIdTokens 死代码删除
- **修复 v4**:id permute 回对齐编号(A4=定价 A5=审批 A6=议价),语义按种子重建
(审批 reject 声明与 reopen 标记在漂移中已损,一并复原),几何原样保留用户手调
- **外科手术**:删 v1–v3,v4 成唯一生效版;种子几何回灌 v4 手调版,
重种实证幂等(「已在库,内容未变 —— 不存新版」)
- **拣选条按钮:边号 + 标签**(E4 直接定价),不再显示边方向;方向在属性卡标题里看
八例端到端真库全绿,五闸退出码全过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 19:34:22 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
7f0d25c337
|
三面拆分⑭:纯编排第三轮 —— 活动卸岗位、卡点废除全真边、边号 E1–En 图上可选
活动契约不带负责人岗位(用户定):
- schema:活动节点删 owner(审批点的 approver 是「卡到人的工位」的功能语义,保留)
- 运行时:活动任务默认**全员轮值**(在岗候选并集、最闲者先、staffId 稳定排序,
owner-resolved 事件岗位记「(全员轮值)」);运营分派机制落地后让位 —— 债已记
- closure:活动点不核岗位,missing-owner-position 只出自审批点
- 员工面链条:活动点报**实际承接人**(实例→任务→人),没起的如实报「轮值待派」;
NodeInstance 公开 taskId/approvalId(店面读回,与端口型合流)
- 画布/导出依赖文件/属性卡全线摘岗位;属性卡活动点明说「分派归运营」
卡点画法废除,顺序流一律真边(用户定):
- 种子图重画:四条回跳/直达(E4 直接定价、E6 选型后定价、E10 不通过、E12 有异议)
全部画成折线真边,车道分层零交叉(顶 y30 / y190 / y230 / 缝隙对开 / 底 y380);
卡点节点删净,图=恰 10 语义节点 + 14 真边一一对应(测试守着)
- graph-to-pkg 卡点认亲机制删除;pkg-to-graph 直接按 from→to 认亲
- 元素盘删卡点件;图例、属性卡卡点分支、kindLabel/kindTone 随删
边号 E1、E2…(用户定):
- 语义边 id 即边号:种子 E1–E14;合并器铸号(旧边保号、新边取下一空号,回归测试守着)
- 画布线标带号(`E3 直接寻源`,无注记的边也标 `E1`);拣选条以边号立牌,
**条件不再上按钮** —— 条件/映射只住属性面
- 边在图上可选中:FlowDiagram 连线加宽透明命中垫(边可点时注解层提到形状层上),
点线即切属性卡到该边(实测 E4 命中)
测试:closure 28、advance-order 6、graph-to-pkg 5(新增铸号例)、seed 8、
端到端八例真库全绿(全员轮值下照跑);五闸退出码验过。
库:purge 后重种,唯一 unified-quote@v1 生效(双面判据齐)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 19:02:07 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
281f4ef084
|
三面拆分⑬:流程包纯编排化 —— 编排与传递契约归包,实现方式归库,激活看双判据
模型(用户定):流程包只决定活动编排 + 活动传递的契约,不决定活动的实现方式;
节点只分活动点与审批点;图只定名称与顺序,属性在卡上填,链接好实现即可运行;
激活 = ①Mastra 式图编排闭合完善 + ②活动装载,两面判据。
schema(库经外科手术清空,无历史包袱,网关彻底出局):
- contracts:删 gateway 节点变体 / GATEWAY_KINDS / GATEWAY_KIND_LABEL /
'gateway-deprecated' 违规项 —— 节点四种:start/end(结构件)+ activity/approval
- routing:joinReady 整个删除(多入边即异或汇合,没有「等回齐」;AND 待并行组);
selectEdges 精简;closure 删 checkGateway;process-service 删汇合等待与网关直传,
节点一律只收装配后载荷(verdict/outcome 判据由系统注入,不走映射)
编排面(画布 = 名称 + 顺序,其余在属性卡):
- 元素盘五件:活动点(单一,不再分标准/案例 —— 那是实现方式)/审批点/起止/卡点
- 属性卡:节点类型二分(活动点/审批点);新增「链接活动实现」选择器(装载面,
FlowNode.act 经 merge 成为语义 activityId);范式/版本降为只读装载信息
- 边属性可填:条件(S-FEEL)+ 映射(上游输出口/起单载荷/常量三种来源;
workflow-var/expression 归系统隐性,不进设计者面)—— FlowEdge.condition/mapping
工作副本,pkg-to-graph 回填、graph-to-pkg 合并,清空条件即变默认兜底边
- 异常看板 → 激活双判据看板:图编排(结构+属性+契约)与活动装载(unknown-activity)
分面亮灯,两面清零激活才亮
- pkg-to-graph 去 paradigms 绿化与网关分支;图例/文案全线「活动点/审批点」
测试:closure 27(joinReady 两组 describe 随机制摘除)、advance-order 按真图形状重写
(去 as never 捏造的网关节点)、graph-to-pkg 9(新增 act 合并 + 边契约合并/清空用例)、
seed 8、端到端八例真库全绿;五闸退出码验过(api:check 提交后转绿)。
库:purge 后重种,唯一 unified-quote@v1 生效(10 节点 14 边,双面判据齐)。
债:M5-5 清账(兼容路径连 schema 一起摘);M5-4(并行组)仍挂。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 18:29:32 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
6854524784
|
三面拆分⑫:网关去节点化 —— 分支即条件出边,汇合即多入边异或
模型(与 Mastra .branch 同构,条件挂在步与步之间):
- routing.selectEdges:多出边一律异或,不分节点种类 —— 条件命中优先(按声明序),
无条件边作默认兜底,恰取一条;单出边直通保留(历史并行网关的遗留通道)
- closure:含网关即 gateway-deprecated(历史版本仅可读、不可激活);
「隐式合并」禁令删除(多入边=异或汇合,上游互斥无歧义);
新规:多出边节点的无条件边至多一条,超出报 multi-default-edge
- contracts:CLOSURE_VIOLATION_KINDS 去 gateway-unbalanced/join-ambiguous-source,
进 multi-default-edge/gateway-deprecated(下游零引用,api-report 随行)
种子(按用户要求:只留一条流一个版本,图/节点/边全部对账):
- MVP_PACKAGE 重写:10 节点 14 边零网关 —— G1/G2 展开为 A1 的三条出边
(选型/直接寻源/默认直接定价)+ A2 的两条,G2J/G3 整颗删除,
A5 审批点的两个去向就是自己的两条 verdict 条件出边(驳回边与 reject 声明字字对齐)
- 手绘图:顶车道 y30 补画 A1→A3「直接寻源」—— 画布保存只认画出来的边,
不画这条语义边会在首次存盘被静默丢掉(新增图边对账测试卡死这类漏画);
「供应商底价表」标注钉进 y190 车道空档,不再被卡点压住
- 开发库外科手术:清运行数据 + 删 v1–v4,重种为唯一生效版 v1(闭合过闸)
UI 与文案同步:
- 元素盘/追加盘不再有网关件(画布仍认得历史图);图例删「判断/并行网关」「菱形=网关」
- 新建流程补激活一跳(保存不生效模型下,不激活「建出来就能起单」就是谎言)
- 总览四种编排要素、「画图不检查,激活才查完整」贯穿 blueprint/memory/process 文案
测试:closure 43 通过(gateway-deprecated + multi-default-edge 两用例),
seed-mvp-flow 8 通过(含图边对账),端到端八例真库全绿(网关从不建实例,断言原样存活);
五闸 typecheck/lint/depcruise/api:check/test 全过(退出码验)。
债:M5-4 AND 并行待「并行组」声明(Mastra .parallel);M5-5 网关运行时兼容三处,
含网关在途流清零后随 schema 一并摘除。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 17:56:20 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
7a065a50e0
|
删编排工作区标语 —— 版本号在版本卡上、保存钮上自己会说,不用题头再念一遍
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 16:58:41 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
448285776c
|
删掉流程详情的「契约细节」段 —— 页面到节点属性为止
它的三块都已有更好的去处或本就冗余:边映射的问题由异常看板逐条点名(还能点击定位),
调用接口在画布「开始」节点的属性里,触发器有自己的页签。
连带清掉因此变成死代码的整页 EdgesPage(路由类型 / 壳分发 / 出口 / 死 import 一并删,
不留只进不出的入口)。
详情页现在就四件:版本卡 · 流程图 · 异常看板 · 节点属性。
typecheck ✓ lint ✓ depcruise ✓ 506 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 16:54:51 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
894769e2ca
|
流程包详情整页 UI 梳理:一套图纸语言,贴边清零
量了一遍页面,问题四处,全修:
① **属性卡是混进来的第二种风格**(治理台圆角卡),同格栅其它三块都是图纸风。
改为图纸卡:外壳同纸同影同角,题头入族 ——
「流程包 · 版本」「流程图 · 顺序」「异常 · 看板」「节点 · 属性」四张两字·两字对仗;
题头右侧 = 状态字 + 保存芯片(与「新建」「编辑」同款);
内部小卡与节点条也入图纸语言(方角细线、mono 小字距题头),等高 250、超高内滚。
② **属性卡内部三处贴死**(题头↕0节点条↕0属性格↕0按钮):
内容区统一 12px 呼吸;保存从底部挪进题头,不用滚到底找按钮。
③ **异常板被 stretch 拉到 916px**,三条异常配一片空白:改为高度随内容
(实测 916 → 150),行顶仍与属性卡对齐。
④ 2px 的 margin hack 删了,row2 两卡顶严格同线(840 = 840)。
typecheck ✓ lint ✓ depcruise ✓ api:check ✓ 498 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 16:10:57 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
ba5f65e685
|
画图不检查,激活才查完整 —— 保存 bug 的根治 + 异常看板
你存不了图的根因:保存跑闭合校验,而画图必然经过不完整的中间态
(节点没接完边、活动没安装)—— 画到一半就 412 卡死。实测同一份图:
改前 412 拒存;改后存为未生效的新版,报告随行。
## 模型改成三段
画图 = 只创建节点和边,图上真正生效可编辑的只有**名字**(双击不再出岗位一栏;
边上的字是辅助阅读的注记;岗位/判据/映射这些**闭环要素在节点属性里决定**;
分配到人是运营的事,设计侧不碰)
保存 = 不检查、不生效:恒存为新版本号,谁也伤不着 —— 因此不设确认卡,直接存;
任何版本都可编辑(在旧版上改 = 以旧版为底另起一版)
激活 = 完整性闸:不闭合 412 拦下并点名缺什么;过了即独占生效
## 异常看板(左,与版本卡同列同风)
画图不拦,看板替你盯着:逐条列这一版缺什么,**点一条定位到那个节点的属性**;
零异常时给空占位说「可以激活」。版本行的「激活」按钮按闭合灰显 ——
不闭合点不了,亮了才能上线。实测:v4 两条异常全列出、激活灰;闭合的 v2/v1 亮。
## 顺手修一个画布盲区
packageToGraph 以手绘存证为呈现真相,**语义里有、存证里没有的节点画布看不见**:
异常看板指着一个图上不存在的节点,点了也定位不到(实测:API 直存的包新增节点后
picker 里根本没有它)。补画:缺席节点按 60px 一档排在图纸下缘 —— 位置丑没关系,
看得见才能修。实测点异常 → 选中 A8 → 五张属性小卡弹出。
## 布局照你定的
row2 = 异常看板(1/3,与版本卡对齐)+ 节点属性卡(2/3,与流程图同宽);
属性卡内部小卡**等高 250px**,输入/输出超高的内容自己滚(实测五张全 250)。
种子改为保存后显式激活;NotClosedError 文案「不得保存」→「不得激活」。
typecheck ✓ lint ✓ depcruise ✓ 498 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 15:52:45 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
2a89e9feda
|
版本卡题头与图题**同一组几何数** —— 标题、按钮、底线三线全平
上一版只对了底线,标题被顶在高盒子的上沿,与右图题差 16px(用户点破);
「3 版」计数也多余,去掉。
改法不是再补一个差值,是**逐段照抄右边的几何**:图题距纸顶 30 / 题行高 19 /
题底到 hero 框顶 16(实测),左题头同为 30+19+16 —— 于是三样对齐都不是碰巧:
标题行 y 286 = 286
按钮 y 286 = 286
底边界线 322 ≈ 321(1px 边框宽)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 15:19:02 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
1bb74a9a2d
|
版本卡三处对细节:题头成对 · 按钮同款 · 底线与图框平齐
① 题头成对:左卡「流程包 · 版本」对右图「流程图 · 顺序」—— 同字型同字距,
左右两卡说同一句话的两半。
② 「新建」按钮换成图上「编辑」芯片(dc2-addbtn)完全同款 —— 计算样式逐项比对
(背景/边框/颜色/字号/圆角/内距)全同:一对动作一种长相。
③ 题头栏的底边界线与右图 hero 框的上边对齐:补 23px 对齐量,
实测两线同落 y=321,差 0 —— 两卡横线一条平线。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 15:16:38 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
28adab83b0
|
版本卡改图纸风 —— 与右侧流程图同一套视觉语言
版本卡原是治理台的圆角卡,跟旁边的图(flow-canvas 的图纸风)是两套语言。
改成同一张图纸的构件:
· 白纸同影同角(10px 圆角、同一串投影,与 g-canvas 里的 process-doc 逐项相同)
· 题头 mono 小字距大写:「VER — 版本记录」对图的「FIG — xx流程」
· 行是细线方框(方角,同图例 legend 的画法),左侧 3px 色条:
钢青 = 普通版,黄铜 + 米色底 = 生效版 —— 一眼可辨
· 「新建版本 / 激活 / 停用」按钮同为细线方框小件,黄铜色标激活类动作
· 卡尾说明也落 mono 小字,像图纸的备注栏
实测(计算样式逐项比对):背景 #fff=#fff、圆角 10px=10px、投影同串、
题头字体/字号/字距(SF Mono / 9.5px / 1.33px)全同,与图等高不变。
typecheck ✓ lint ✓ 498 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 15:00:24 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
ff114a2246
|
流程详情:版本卡与图平齐 + 显式「新建版本」+ 节点属性成卡
三处走查反馈:
① 版本列改成**固定高度卡片,与右侧的图等高**(grid stretch):
头部 = 标题 + 版本数 + 「新建版本」;中段版本行,多了在卡内滚,不把页面撑长;
卡尾一句常驻说明(恰一个生效;在途按启动版本跑完)。实测两侧 591px 对 591px,顶对齐。
② 版本从此有**显式的新建入口** —— 之前只能靠改图保存来隐式长版本。
「新建版本」= 以当前看的版本为底克隆一版(服务端定版号并即刻生效)。
与「激活」分工明确:激活只是切生效指针,不长版本;新建才长 ——
把旧版本的画法复活成最新版、或在现状上另起一版接着画,都走这儿。
画布有未保存改动时确认卡会明说「克隆不带未保存的改动」。
实测:以 v3 为底建 v4 → v4 生效、v3 自动停用、列表实时刷新。
③ 节点属性从裸块改成**卡片**(与页面其它卡同一形制),标题右侧带状态
(只读 / 有改动待保存 / 点节点就地填写)。
typecheck ✓ lint ✓ depcruise ✓ api:check ✓ 498 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 14:50:08 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
710946e729
|
流程包台面重做:版本收进包内部,启停是运行时开关
按你定的六条做:
## ① 台面三页签:总览 · 流程包 · 触发器
「调起规则」改名触发器(键不动,深链不断)。
## ② 版本收在流程内部,不平铺台面
货架一流程一卡:名字 + 标识 + 「生效 vN / 已下线」+ 版本数。
从前一版本一张卡,三个版本占三格 —— 版本是流程的内部事,不该摊在台面上。
## ③ 详情页布局照你说的排
左 1/3 版本列表(恰一个生效,点谁看谁的图),右 2/3 流程图;
图下是节点属性(点画布或点节点条,就地填);再往下才是声明式契约细节
(边映射校验 · 调用接口 · 触发器)。属性区从右侧窄栏挪到图下整行。
## ④ 新建流程
「新建流程」→ 填名称与标识 → 建出一张「开始 → 结束」的最小图,v1 即刻生效,直接进详情。
最小图天然过闭合校验 —— 不闭合存不进来这条闸对新建同样成立。
标识收紧为小写字母开头、只许小写/数字/连字符(它进 URL 和触发器规则)。
## ⑤ 历史包袱文案清掉
「工作流不设负责人,责任只落在节点上:此处不声明岗位,起单时就解析不出任务负责人」
→「这个节点还没指定岗位 —— 不指定,起单时就不知道任务该派给谁」。
同类:「未声明 · 发布前须补齐」→「未指定 —— 保存前选一个岗位」;
「发布前须先安装并过跨包契约相容核对」→「先去活动库安装;保存时会核对契约相容」;
边映射页的「边不闭合不得发布」→「不得保存」。
## ⑥ 版本可激活/停用,一次只能激活一个,切换不动在途
运行时模型从「最新版生效」改为**显式生效指针**:
· `setPackageState` 激活即独占(同流其余版本一并停用)
· 停用生效版 = 整条流下线,新起单被拒(报「无生效版本 —— 去流程包里激活一个」)
· 起单取生效版;在途工作流按启动时钉住的版本号读定义,启停对它们零影响
· 保存新版仍即刻生效(旧生效版自动停用)—— 回退就是把生效切回旧版,不用改图
store 的 setPackageState 把列上与 definition(jsonb)里的两份 state 一起改(教训同 0012);
迁移 0013 把存量多版同 active 归一为「每条流只留最高版生效」。
实测:激活 v1 → v3 自动停用,新起单钉 v1;停用 v1(零生效)→ 起单 500 且明说原因;
在途 v1 工作流照跑;恢复激活 v3。UI:切版看图、只读提示、启停确认卡、新建一条龙全通。
typecheck ✓ lint ✓ depcruise 376 模块 ✓ 498 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 14:35:54 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
b2f5f69d6a
|
流程包去掉发布机制 —— 严格检查 + 保存即生效,生效由运行时决定
用户要的是运行时机制:新建 + 编辑,存下去就生效,旧任务走完旧版本,
新任务调用时才加载新编排。所以「草稿 → 发布」两态整套去掉。
## 闸从「发布」挪到「保存」
`savePackage` 现在先跑闭合校验,不闭合抛 `NotClosedError`(路由 412 带报告)——
**一个字节都不落库**。存进来的每一版都能起单,所以不需要「已发布」这个标记。
`publish` 用例、路由、`publishPackage` 存储方法一并删掉。
实测:把进 A6 的边映射清空后保存 → 412,逐条点名「边 e-g3-a6 未完成载荷映射;
节点「报价议价」的必填字段未映射:rows」。
## 保存恒新增版本号,服务端说了算
这不是可选项,是「旧任务走完旧版本」的前提:工作流按 (包id, 版本) 去读定义,
就地覆盖 v1 就等于改掉所有在途 v1 任务正在读的编排 —— 它们会中途换了规则却毫不知情。
版本号由用例层算(当前最大 + 1),**不采信入参**。实测:入参故意填 version: 999,
落的是 v2。store 层因此改成**只插不改**:撞键宁可让唯一约束报错,也不静默覆盖。
起单取版从「最新已发布」改为「最新一版」(retired 除外);触发器的 requiredInputs 同口径。
实测:改完描述存成 v2 后,新起的单用 v2,早先那单仍挂 v1。
## 迁移:旧状态值不归一就是一读就炸
状态枚举从 draft/published/retired 收成 active/retired。列上和 definition 这个 jsonb 里
各存着一份 state,两处都要改 —— 不改,`processPackageSchema.parse` 读一行就抛。
这不是开发期小麻烦,任何已部署实例都会中招。加了迁移 0012。
## 界面:恒为 0 的假指标撤掉,不换个说法留着
- 编排面板:「已发布/草稿」芯片 → 「生效中/历史版本」(真正的区别是哪一版会被新起单取到);
发布按钮撤掉,保存按钮改成「保存并生效(存为 vN)」并在确认卡里说清影响面
- 历史版本只读,但就地指路:「去 v(N-1) 改(生效中)」,不让人自己找
- 蓝图面:「草稿 N · 未闭合 M」两个计数在新机制下**结构上恒为 0**(不闭合存不进来),
换成「共 N 个版本,保存即生效」
- 驾驶舱:「未闭合草稿」卡整张撤掉 —— 同理恒为 0。天然的第三张是「死路」
(route-dead-end 事件),但那需要一条按事件类型聚合的路由,没有之前不摆(同死信卡的规矩)
## 顺手修:种子的幂等判断本来是坏的
比对用 `JSON.stringify` 认键序,而 jsonb 从 PG 读回来键是重排过的 —— 永远判不等,
每播一次种就多存一版一模一样的定义(实测一口气堆到 v3)。改成递归按键名排序后比对。
连播三次,只第一次存。
## 契约变更(破坏性,一步到位)
`publish` 删除、`NotPublishableError` → `NotClosedError`、`publishable` → `closed`、
状态枚举收窄。按规矩破坏性变更该走三步弃用 —— 这里一步改完,因为:
① depcruise 反查下游全在仓内(374 模块无违规),同批改完;
② 要弃用的是一个**产品决定不再存在**的机制,留弃用窗口没有意义。
CONTRACT.md 已同步,快照单独说明。
typecheck ✓ lint ✓ depcruise 374 模块 ✓ 495 测试 ✓
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 12:49:24 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
9de641459e
|
编排层①:改图入口下沉画布 + 活动契约面全链打通
① 已发布包就地给「起草新版本并去编辑」,不用去页头找;
② 修一个我自己引入的 bug:卡点还原把审批点的「退回调整」牌子当成边,凭空造出 e-A5-A4 ——
卡点只认亲、不新建(旧包有这条边才认);实测编辑器往返 16 边 14 节点无损;
③ 活动契约面接进治理台:列表出参带必填入参/输出口/声明依赖,活动详情摆成一屏,
导出依赖文件一并带上 —— 开发一个活动要照着的东西,现在有一处能看全。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-28 03:02:44 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
4a19690389
|
三面拆分⑪:收口 —— 走查通过,删掉与蓝图重复的需处置页签,文档对账
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-27 21:32:38 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
6bb4675893
|
三面拆分⑦⑧:触发器一分为二 —— 规则定义入设计·流程包,起单开关入运营·任务
定义面可改名/改目标包/改三类规则/改起单装配;编辑期的装配行走本地状态,
存盘才解析 —— 派生自已解析 mapping 的话,刚添加的空行会被当场滤掉,人打不出第一个字。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-27 21:19:42 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
9fce0fdaa0
|
三面拆分④:驾驶舱首页 —— 度量改接 report 真八指标,纠正率/DMN 不再恒为 0
治理台原先调 memory 的五指标版,还把 submissions/corrections/judgements
硬塞 0 —— 仪表在说谎。八指标本就在 report 里算好,这里接上,与工作台汇报同源同口径。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-27 21:08:42 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
e578b5bc34
|
三面拆分①:surface 配置与区表 —— 归属/亮灯/旧链改写皆纯函数先测后写
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-27 20:50:32 +08:00 |
|
 ChaiHaoandClaude Fable 5
|
ac85ecf2ea
|
基线:鉴权会话+工作组+工作台三区修复+编排工作区+产品设计文档
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-27 20:43:35 +08:00 |
|
 ChaiHaoandClaude Opus 5
|
a9cd6d10c7
|
M6(2/n): 治理台九功能 + SSE 订阅层 + 读/治分权
治理台按 §9.1 拆成九个 gov-* feature,共用件落 shared/gov:
· 外壳(左轨/顶栏/面包屑/页签/整页下钻)自原型 Governance.tsx 平移,
DOM 与 g-* 类名原样;路由状态即应用状态,区/页签/下钻栈全编码进 hash 可深链
· 编排画布 diagram-js 画布件 1:1 平移(flow-layout/flow-node-paint/FlowDiagram),
新增 pkg-to-graph 把 ProcessPackage 转成画布图模型;统一报价 v1 全图 12 节点 15 边渲染通过
· 后端补四路由:审批单 / 工作流下钻 / 通道实例 / 度量仪表
SSE 订阅层(§9.2):app 层单一连接,按信封目标失效缓存;
组件不再自行轮询(去掉 refetchInterval)。广播只说「哪个目标动了」,不带业务载荷,
且在投递已落库已送达之后才发 —— 不是第二条投递链路。
两处实质修正:
· 治理路由一律要 govern → 读路由改要 read。客体三类 × 动作三种的分法就是为此:
BD 有 task:read 能看在途、动不了控制事件;一律 govern 等于把三种动作压成一种
· 控制事件/恢复/改派原记为 engine-transition(归机器产出)→ 新增 control 条目种类,
归人裁决侧。归侧是按动作类型的纯推导,所以「谁干的」必须体现在 kind 上;
否则人的叫停会被算进自主率的机器分子
判据 ⑩ 治理台一半跑通:在途监控 / 叫停 / 恢复,治理动作留痕可查。
无权查看不再画成空清单,按岗位说明缺哪一项。
gates: tsc / eslint / depcruise(286 模块)/ api-report / 360 测试 全绿
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
|
2026-07-27 03:28:40 +08:00 |
|