Archived
用户定的两件,一并落地。
**一、活动不再分 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
246 lines
15 KiB
Markdown
246 lines
15 KiB
Markdown
# 产品设计 · 三面一体
|
||
|
||
> 2026-07-27 定稿。本文档回答一个问题:**这个产品由哪几张脸组成,每张脸对谁、说什么。**
|
||
> 背景:治理中心此前是平铺的九个区,设计态与运行态混在一排 —— 定义企业的人和看企业跑的人
|
||
> 挤在同一套导航里,谁都找不到自己的第一屏。本次拆分把它按心智一分为二,与工作台合成三面。
|
||
|
||
---
|
||
|
||
## 一、概念模型:三面一体
|
||
|
||
产品按一条因果链排成三面:
|
||
|
||
```
|
||
设计中心 ──定义──▶ 运营中心 ──派发──▶ 工作台
|
||
(企业怎么运转) (今天跑得怎样) (在企业里干活)
|
||
类 · 规则 实例 · 监控 人 · 劳动
|
||
```
|
||
|
||
- **设计产生运营的形状**:设计侧每发布一个数据域,运营侧自动长出一个台账位;
|
||
每发布一个流程包,运营侧的驾驶舱就多一类可监控的流。
|
||
- **运营产生工作台的内容**:流程跑起来,任务、审批、消息才落到人的工位上。
|
||
- **工作台产生驾驶舱的数字**:人把活干完,八指标才有读数 —— 圈闭合。
|
||
|
||
| 面 | 地址 | 网页标签 | 一句话 | 谁用 |
|
||
|---|---|---|---|---|
|
||
| 设计中心 | `/design` | 深靛底 + 路网章 | 定义企业:战略 → 方法 → 能力 → 对象 | 业务架构师 / 管理者 |
|
||
| 运营中心 | `/ops` | 深色底 + 仪表章 | 看企业跑:驾驶舱 + 处置 + 沉淀 | PM / 当班主管 |
|
||
| 工作台 | `/` | 蓝渐变 + 机器人章 | 干活:任务五要素 | 全员 |
|
||
|
||
- `/gov` 保留为跳转(302 → `/ops`),旧链接不断。
|
||
- 三面共用一套登录会话(ADR-010);顶栏互跳,**入口按权限亮灯**(见第六节)。
|
||
- 网页标签三章并立:多标签并开时,靠图标即可分辨"我在定义、在监控、还是在干活"。
|
||
|
||
## 二、设计中心 `/design`
|
||
|
||
**左轨 = 九区,顺序即设计的次序。** 一区一内容 —— 区内不再有页签导航,
|
||
点进一区看到的就是那一件事(唯一的例外是运营侧的任务与员工,它们确实是几个不同维度)。
|
||
|
||
```
|
||
蓝图 → 触发器 → 流程包 → 活动库 → 工具箱 → 数据域 → 知识库 → 大模型 → 测试台
|
||
全局 谁调起 怎么流转 怎么干 能干什么 运营什么 资料 跑在哪 试一遍
|
||
```
|
||
|
||
### 企业蓝图(首页)
|
||
|
||
一屏把四库串成因果链,回答"这家企业被定义成什么样、哪里还没定义完":
|
||
|
||
```
|
||
战略 ────── 方法 ────── 能力 ────── 对象
|
||
流程包 → 活动库 → 工具箱 → 数据域
|
||
↓健康度 ↓健康度 ↓健康度 ↓健康度
|
||
未闭合草稿 未安装引用 未授权工具 未发布域
|
||
```
|
||
|
||
- 每库一张卡:总数、健康度、最近变更;点卡即入库。
|
||
- 下方是**待补清单**:闭合校验未过、编排引用了未安装的活动、没有任何调起规则的流程包 ——
|
||
全部聚在这里,点进即改。设计者的"需处置"不散落在四库里
|
||
(为此流程包区原有的「需处置」页签已删除:同一件事两处显示,就是散落)。
|
||
|
||
### 九区
|
||
|
||
| 区 | 定位 | 内容 |
|
||
|---|---|---|
|
||
| **蓝图** | 全局 —— 定义完了没有 | 四库因果链 + 待补清单(见上) |
|
||
| **触发器** | 谁调起流程 | 事件 / 登记 / 周期三类调起规则的定义;定完就地投一封信演练,看哪条规则接住(归属解析 → 三级消费的真链路)。**启停开关在运营中心** |
|
||
| **流程包** | 战略 —— 企业以哪些流转运转 | 编排工作区**三栏**:左窄轨版本(激活/停用 · **号与名自己定** · 删除;点「编辑」整列进编辑态,取消/保存收尾)、中流程图、右节点属性。**边只表达顺序与条件**(对齐 Mastra),数据按字段名流动;**字段只声明,不做任何要求** —— 激活闸只剩结构闭合与活动装载两面,字段够不够是活动自己的事 |
|
||
| **活动库** | 方法 —— 每件事怎么干 | **一区两格**:装进来的活动(货架、契约面、资产版本谱系、安装两审)与**配出来的审批活动**(审批模板:审批人看什么 / 怎么催 / 说什么,编排的审批点选一张)。活动**不再分标准/案例**(2026-07-29):业务分类是唯一的一维,业务模型一律案例模型 |
|
||
| **工具箱** | 能力 —— 系统能对世界做什么 | 功能 / LLM / 人类三类工具目录、白名单授权、幂等口径、引用反查。**一律主显示中文名**,逻辑名退居副标 |
|
||
| **数据域** | 对象 —— 企业运营什么 | 域与对象 schema、字段、放行规则、被谁引用。**行数据不在这里** —— 那是运营的事 |
|
||
| **知识库** | 企业的资料与文档 | 规范、图纸、样例、外部材料。**待建**,现在是个占位区 |
|
||
| **大模型** | 模型实例绑在哪 | Provider / URL / Key / Model 四元绑定。活动只声明用途名,换厂商换型号改这里;密钥只存这儿,不入包、不入留痕 |
|
||
| **测试台** | 试着跑一遍 | 装一次调用、指派每个节点归谁、起单看穿全程(全链 Trace)。真实任务照旧落到被指派人的工作台,测试台不代答。**一次只跑一条流**:生命周期跟着仿真状态,停止仿真即销毁这条流连同它派出的任务 |
|
||
|
||
### 一条纪律
|
||
|
||
设计中心里**没有任何运行态数字**(在跑几单、30 天起单数、死信数都不出现)。
|
||
设计者看的是定义完不完整,不是今天忙不忙 —— 运行态数字一旦混进来,
|
||
设计页面就会退化成第二个监控页。
|
||
|
||
## 三、运营中心 `/ops`
|
||
|
||
**左轨 = 驾驶舱(首页)+ 固定位 + 动态位 + 固定位。**
|
||
|
||
```
|
||
◉ 驾驶舱(首页)
|
||
── 固定(区名即运行时) ──
|
||
工作流 ← 流程包的运行时
|
||
任务 ← 活动的运行时
|
||
员工
|
||
── 台账(动态,随数据域长) ──
|
||
quote_intake
|
||
quote_pricing
|
||
…
|
||
shared
|
||
── 固定 ──
|
||
数据 ← 运行沉淀:活动记忆 + 技能资产
|
||
系统
|
||
```
|
||
|
||
**命名纪律(2026-07-30)**:运营中心的区名就是运行时对象 ——
|
||
工作流是流程包的运行时,任务是活动的运行时,台账是数据域的运行时。
|
||
设计中心只负责设计,运营中心管细节(启停、确认、负责人都在运营侧配)。
|
||
|
||
> 落地实测:域的实际粒度是**活动域**(`quote_intake` / `quote_pricing` / `quote_sourcing` /
|
||
> `quote_negotiate` / `quote_alternative`)+ `shared`,不是本文起初设想的「报价域 / 共享域」。
|
||
> 决策不变(域 = 导航项),只是数量比示意图多。域名是复合键,左轨按下划线断行呈现。
|
||
|
||
### 驾驶舱(首页)
|
||
|
||
经营第一屏,从现"记忆 · 度量仪表"升格而来:
|
||
|
||
- **度量八指标**(OS 8.3,零埋点):自主率 / 纠正率 / 有效自主率 / 打扰率 / 断点率 /
|
||
DMN 覆盖率 / 单位成本 / 终态分布 —— 走 report 模块,**与工作台汇报同源同口径**;
|
||
- **异常面**:异常工作流、未闭合草稿、在途任务 —— 点数字直达处置页。
|
||
|
||
> 落地偏差:**死信卡不做**。死信目前只以治理者消息要素送出,没有按 kind 计数的查询面 ——
|
||
> 与其摆一个查不出数的卡位,不如记进 `docs/debt.md` 等查询面补上再加。
|
||
|
||
### 固定位
|
||
|
||
| 位 | 内容 |
|
||
|---|---|
|
||
| **工作流** | 流程包的运行时,两页签:**在途**(工作流看板,从任务区迁入)+ **运行配置**(每包:触发器起单开关 / 命中后要不要人工确认 / 谁来确认;节点负责人 —— 显式指派 > 运营配置 > 轮值) |
|
||
| **任务** | 活动的运行时:任务 / 审批单 / 需处置。看板与起单开关已迁「工作流」区 |
|
||
| **员工** | 员工 / 岗位授权 / 工作组(起单时的岗位绑定) |
|
||
| **数据** | 运行沉淀的数据资产:活动记忆四层 + 技能资产 + 候选增量的回放与放行。"记忆的终点是成为模型"这条进化管线的**人工放行口**在这里 |
|
||
| **系统** | 通道实例(模型实例已独立成设计中心「大模型」区) |
|
||
|
||
### 触发确认链路(2026-07-30 定)
|
||
|
||
事件触发的完整五步:**① 系统接收邮件 → ② 分类识别消息类别 → ③ 命中 RFQ 询价事件 →
|
||
④(可选,触发器配置打勾)系统消息送指定人工作台,带邮件内容 → ⑤ 工作台点「确认起单」,流程才起。**
|
||
|
||
- 打勾与指定人在**运营中心 · 工作流 · 运行配置**里配,设计中心一个字不动;
|
||
- 确认是幂等的:两个人同时点、一个人点两次,都只起一条流;
|
||
- 登记触发不走确认 —— 登记那一下本身就是人在确认;
|
||
- 第 ② 步现由通道抽键 + 触发器 S-FEEL 规则代位,邮件分类 Agent 是升级项(见 debt)。
|
||
|
||
**宽进纪律(2026-07-30 定)**:调用活动,输入数据**可以不定或者为空** —— 门口不设缺项闸
|
||
(触发装配缺必填不入死信,`process.start` 不拒缺项)。进入活动后**受理归一**:
|
||
缺必填的任务先落「等人」,缺的字段做成**补全单**发给负责人,补齐(或写明「没法填」)才开跑。
|
||
收敛点在活动,不在门口 —— 门口拒单,人连差什么都不知道;补全卡上写得明明白白。
|
||
|
||
### 动态位:台账 ×N
|
||
|
||
按**数据域**动态生成导航项 —— 设计侧一发布新域,运营侧自动长出一位。
|
||
点进去是该域全部对象的行数据、版本历史、被哪些任务引用。
|
||
域的 schema 不在这里改(那是设计的事);这里做的是运营动作:查行、看版本、追引用。
|
||
|
||
> 这是"设计产生运营的形状"最直观的一处:导航本身就是被设计出来的。
|
||
> 数据来源:`ledger.listObjects`(已有),无需新后端能力。
|
||
|
||
## 四、与工作台的联动
|
||
|
||
- **三面互跳**:每面顶栏(或轨底)有另两面的入口,按权限亮灯。跳转带上下文:
|
||
运营中心看某任务 → "去工作台处理"直达该单;工作台任务详情 → 有运营权者见"去运营中心看这条流"。
|
||
- **同一语言**:工作台里人看到的任务、审批、台账字段,与运营中心管理的是**同一份投影、同一套词**。
|
||
运营中心是工作台的管理者视角,不是另一套系统 —— 字段名、状态名、终态五名逐字一致。
|
||
- **闭环叙事**:设计中心发布流程包 → 运营中心看它跑、放行知识沉淀 →
|
||
工作台的人把活干完 → 数字回到驾驶舱。产品讲的就是这一个圈。
|
||
|
||
## 五、现状迁移映射
|
||
|
||
**后端模块、授权模型、数据一概不动** —— 这是一次纯前端的信息架构重排:
|
||
|
||
| 现九区 | 去向 |
|
||
|---|---|
|
||
| 工作流 | 设计 · 流程包 |
|
||
| 活动库 | 设计 · 活动库 |
|
||
| 工具 | 设计 · 工具箱 |
|
||
| 数据(schema 面) | 设计 · 数据域 |
|
||
| 数据(行数据面) | 运营 · 台账 ×N |
|
||
| 触发器(规则 / 装配定义) | 设计 · 流程包 - 调起规则 |
|
||
| 触发器(启停 / 死信处置) | 运营 · 任务 - 需处置 |
|
||
| 任务 | 运营 · 任务 |
|
||
| 员工 | 运营 · 员工(+ 工作组管理,新) |
|
||
| 记忆(度量仪表) | 运营 · 驾驶舱(首页) |
|
||
| 记忆(活动记忆) | 运营 · 知识库 |
|
||
| 系统 | 运营 · 系统 |
|
||
|
||
前端改动清单:
|
||
|
||
1. 壳层:`gov-shell` 一分为二(`/design` 与 `/ops` 各一套左轨与路由),`/gov` 302 → `/ops`;
|
||
2. 网页标签:`tab-identity` 从两章扩为三章;
|
||
3. 新页两张:企业蓝图(设计首页)、驾驶舱(运营首页)—— 数据全部来自既有接口的再聚合;
|
||
4. 新界面一处:工作组管理(员工位内;`org.saveWorkGroup` 已在出口,缺的只是界面);
|
||
5. 触发器编辑面:从独立区改为**流程包区的「调起规则」页签**(包详情内只留一枚「改规则」入口,
|
||
不重复摆表单);已补 `PUT /api/gov/triggers`(`trigger.upsert` 用例本就在模块出口,只缺 HTTP 面)。
|
||
|
||
## 六、权限
|
||
|
||
**授权模型不动**:仍是九治理功能 × 读/写/治三动作(客体三类中的 governance 类)。
|
||
变化只在**归属与亮灯**:
|
||
|
||
- 九功能按上表归属两面;
|
||
- 台面入口按"是否持有该面任一功能的读权"亮灯 —— 无权者看不见入口,有读权者进去只读,
|
||
动作仍逐功能校验(读是 read,动才是 govern);
|
||
- 不新增"设计权 / 运营权"这类粗粒度开关,不做两层叠加 —— 单组织 ≤50 人用不上,
|
||
且现有 grants 数据零迁移。
|
||
|
||
## 七、边界(本设计不做的)
|
||
|
||
- **不动后端**:模块、契约、授权、数据库都保持原样;
|
||
- **不做对象级动态导航**:台账动态位止于"域"粒度,对象在域内切换;
|
||
- **不做设计中心的运行态回显**:哪怕"看起来有用"也不加 —— 纪律见第二节;
|
||
- **不做工作台的管理者混入**:运营能力永远住运营中心,不往工作台塞管理页签。
|
||
|
||
## 八、落地顺序建议
|
||
|
||
1. **壳先行**:两套左轨 + 三章标签 + `/gov` 跳转 + 权限亮灯(纯搬迁,一次可验);
|
||
2. **两张首页**:驾驶舱(度量升格)→ 企业蓝图(四库健康度);
|
||
3. **归位改造**:触发器定义并入流程包、台账动态位、数据域定义面瘦身;
|
||
4. **补欠账**:工作组管理界面。
|
||
|
||
每步落完都可独立验收;顺序可按当期在做的活动开发穿插。
|
||
|
||
## 九、MVP 底座落地记(2026-07-28)
|
||
|
||
三面拆分之后铺的底座,与本文的关系:
|
||
|
||
- **数据**按上表四域重划,十八对象由六个活动槽位的声明物化而来(不是手写建表);
|
||
- **流程包只落一个实例**:`unified-quote` v1,拓扑与 `docs/MVP示例工作流.html` 的 FIG.1 一比一
|
||
(14 节点 / 16 边,手绘几何逐点取自那张 SVG)。与图有两处**语义同构、呈现有别**:
|
||
A5 定价审批建为**内置审批点**(审批不是任务),故图上的 G3「审批结果」被它吸收;
|
||
G2 的两条互斥分支显式汇合于 G2J —— 图上画成两条线各扎进 A4,那是隐式合并,闭合校验不收;
|
||
- **活动只落槽位契约**:六个槽位有完整的入参/出口/域声明/工具名,业务模型是 MVP 步骤标题级的
|
||
人类工单骨架 —— 起单后是真人在做,不是假跑;实现待底座齐备后按 A1→A7 逐个开发;
|
||
- **工具箱三类并列**:功能工具(交给系统)/ LLM 工具(交给模型)/ 人类工具(交给人),
|
||
外加接入段(自定义导入已实装,MCP 仅呈现)。
|
||
|
||
---
|
||
|
||
## 附 · 决策记录
|
||
|
||
| 决策 | 选择 | 理由 |
|
||
|---|---|---|
|
||
| 拆分形态 | 两个独立台面(+工作台成三面) | 产品叙事最干净:定义 / 监控 / 干活是三种心智;权限天然分界 |
|
||
| 触发器归属 | 定义**独立成设计中心一区**,启停归运营 | 同一对象两种动作各归其位;起初塞在流程包内,但它与流程包平级(不入包结构、不随包版本),塞进去反而讲不清 |
|
||
| 度量归属 | 升为运营首页(驾驶舱) | "看企业今天跑得怎样"需要开屏答案;与活动记忆分开是两种心智 |
|
||
| 动态位形态 | 域 = 导航项,随发布长 | "设计产生运营的形状"要在导航上直接可见;对象级太碎 |
|
||
| 权限粒度 | 保留九功能粒度,入口按读权亮灯 | grants 零迁移,细粒度保住;≤50 人不需要两层模型 |
|
||
| 设计中心 IA | 蓝图首页 + 九区一级平铺,一区一内容 | 因果链要有一屏能讲;区内页签退化成一格后就是多余的一行,索性删掉 —— 点进一区看到的就是那一件事 |
|
||
| 交互基调(2026-07-28) | 设计台**卡片式**,运营台**列表式** | 设计是「看清一件东西的全貌」——卡片一眼见轮廓;运营是「查一堆记录里的那一条」——列表可扫可比 |
|
||
| 数据四域(2026-07-28) | project / customer / intel / supplier | **流转单据归项目**(每一单的受理记录→比价→草案→报价单),**沉淀资产按内容归**客户/情报/供应商;按活动名分域会让「同一个客户」散在七处 |
|
||
| 活动与工具解耦(2026-07-28) | 槽位只声明工具**名** | 注册、连接值、白名单全在治理侧 —— 活动代码里看不到授权表,也就绕不开它 |
|