This repository has been archived on 2026-09-13. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BPOS-TMP-REPO/docs/产品设计.md
T
ChaiHaoandClaude Opus 5 8d50ceda6a 三面拆分⑭:宽进收敛 —— 起单不卡缺项,进活动受理归一,信息不全派补全单
用户定的逻辑:「调用活动,输入数据可以不定或者为空;进入活动后受理归一,
信息不全派补全单。」把收敛点从门口挪进活动 —— 三道门口闸全撤:

  · 触发装配:缺必填**不再入死信**(AssemblyResult 的 missing 改 partial,带上已装配的);
    装到多少带多少照样起单。死信只留给真错误(勾了确认没指定人这类配置错误)。
  · process.start:撤掉调用接口缺项闸 —— 从前缺一个字段整条流都起不来,
    现实是客户来信本来就常缺客户码,拦在门外等于要求外界替系统把信息备齐。
  · task.start(替代旧 AM 12.1「缺项不得启动」):缺必填的任务落成「等人」,
    缺的字段做成**补全卡**(elicitation,标签取 schema 的 title)发到负责人的
    任务对话流,并武装 human 监听(IntakeDesk 端口;不占活动的人卡预算)。
    答复只收契约声明过的键,合并进 data;齐了或答「没法填」才转 running 开跑;
    答一半就就缺的部分再派一张卡。等人期间谱一步不走、不扣步数。

  · 测试台预检改成**信息**不是闸:灯灭不拦起单,文案直说
    「抽不出的键由受理补全单找人收齐」。

5 条受理归一单测 + 全链实测:投一封只写「想问下工控板价格」的信(零键)→
流照起 → A1 落负责人工位、等人、补全卡在对话流 → 答卡(customerCode/rfqRef)→
任务醒、合并、谱跑 3 步到验收。修一处接线错误:监听 deadline 要 ISO-8601
时长(P2D)不是时刻,传错整个补全监听静默没装上。

trigger/task/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 13:46:13 +08:00

246 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 产品设计 · 三面一体
> 2026-07-27 定稿。本文档回答一个问题:**这个产品由哪几张脸组成,每张脸对谁、说什么。**
> 背景:治理中心此前是平铺的九个区,设计态与运行态混在一排 —— 定义企业的人和看企业跑的人
> 挤在同一套导航里,谁都找不到自己的第一屏。本次拆分把它按心智一分为二,与工作台合成三面。
---
## 一、概念模型:三面一体
产品按一条因果链排成三面:
```
设计中心 ──定义──▶ 运营中心 ──派发──▶ 工作台
(企业怎么运转) (今天跑得怎样) (在企业里干活)
类 · 规则 实例 · 监控 人 · 劳动
```
- **设计产生运营的形状**:设计侧每发布一个数据域,运营侧自动长出一个台账位;
每发布一个流程包,运营侧的驾驶舱就多一类可监控的流。
- **运营产生工作台的内容**:流程跑起来,任务、审批、消息才落到人的工位上。
- **工作台产生驾驶舱的数字**:人把活干完,八指标才有读数 —— 圈闭合。
| 面 | 地址 | 网页标签 | 一句话 | 谁用 |
|---|---|---|---|---|
| 设计中心 | `/design` | 深靛底 + 路网章 | 定义企业:战略 → 方法 → 能力 → 对象 | 业务架构师 / 管理者 |
| 运营中心 | `/ops` | 深色底 + 仪表章 | 看企业跑:驾驶舱 + 处置 + 沉淀 | PM / 当班主管 |
| 工作台 | `/` | 蓝渐变 + 机器人章 | 干活:任务五要素 | 全员 |
- `/gov` 保留为跳转(302 → `/ops`),旧链接不断。
- 三面共用一套登录会话(ADR-010);顶栏互跳,**入口按权限亮灯**(见第六节)。
- 网页标签三章并立:多标签并开时,靠图标即可分辨"我在定义、在监控、还是在干活"。
## 二、设计中心 `/design`
**左轨 = 九区,顺序即设计的次序。** 一区一内容 —— 区内不再有页签导航,
点进一区看到的就是那一件事(唯一的例外是运营侧的任务与员工,它们确实是几个不同维度)。
```
蓝图 → 触发器 → 流程包 → 活动库 → 工具箱 → 数据域 → 知识库 → 大模型 → 测试台
全局 谁调起 怎么流转 怎么干 能干什么 运营什么 资料 跑在哪 试一遍
```
### 企业蓝图(首页)
一屏把四库串成因果链,回答"这家企业被定义成什么样、哪里还没定义完":
```
战略 ────── 方法 ────── 能力 ────── 对象
流程包 → 活动库 → 工具箱 → 数据域
↓健康度 ↓健康度 ↓健康度 ↓健康度
未闭合草稿 未安装引用 未授权工具 未发布域
```
- 每库一张卡:总数、健康度、最近变更;点卡即入库。
- 下方是**待补清单**:闭合校验未过、编排引用了未安装的活动、没有任何调起规则的流程包 ——
全部聚在这里,点进即改。设计者的"需处置"不散落在四库里
(为此流程包区原有的「需处置」页签已删除:同一件事两处显示,就是散落)。
### 九区
| 区 | 定位 | 内容 |
|---|---|---|
| **蓝图** | 全局 —— 定义完了没有 | 四库因果链 + 待补清单(见上) |
| **触发器** | 谁调起流程 | 事件 / 登记 / 周期三类调起规则的定义;定完就地投一封信演练,看哪条规则接住(归属解析 → 三级消费的真链路)。**启停开关在运营中心** |
| **流程包** | 战略 —— 企业以哪些流转运转 | 编排工作区(画布 + 属性卡)、边映射校验、版本谱系、导出依赖文件。总览的三枚计数并进货架顶端 |
| **活动库** | 方法 —— 每件事怎么干 | 货架、契约面、范式、资产版本谱系、安装两审 |
| **工具箱** | 能力 —— 系统能对世界做什么 | 功能 / 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) | 槽位只声明工具**名** | 注册、连接值、白名单全在治理侧 —— 活动代码里看不到授权表,也就绕不开它 |