Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
67 lines
2.9 KiB
Markdown
67 lines
2.9 KiB
Markdown
# ADR-011 工作组:起单时的岗位绑定
|
|
|
|
状态:已接受(2026-07-27)
|
|
背景出处:OS 03「编排声明岗位,**起单时确定性解析**。策略封闭四选;
|
|
默认:岗位唯一人;岗上多人时按轮值。解析发生在节点起单时,结果与依据留痕」。
|
|
|
|
## 问题
|
|
|
|
流程包声明的是**岗位**(`owner.position`),谁来做由四策略在节点起单时算。
|
|
这对生产是对的,对两类场景却不够:
|
|
|
|
1. **一单一队**:同一条工作流的各节点,业务上常常要固定给同一拨人
|
|
(客户 A 的报价,前后都归这个商务、这个采购)。`follow-source` 只能固定
|
|
*同一岗位*的人,跨岗位的搭档关系表达不了。
|
|
2. **测试与演练**:要让一条流的所有节点都落到同一个人身上,好一个人从头走到尾。
|
|
现状做不到 —— 每个岗位都会解析到该岗位上的人。
|
|
|
|
## 决策
|
|
|
|
引入**工作组**:一组「岗位 → 员工」的绑定,起单时装载,随这条工作流走。
|
|
|
|
### 一、绑定先于策略,但不是第五种策略
|
|
|
|
OS 03 说「策略封闭四选」,这条不动。工作组不是策略,是**岗位的人选已经定了** ——
|
|
四策略回答的是「这个岗位该派给谁」,工作组直接给出了答案,于是策略无从发问。
|
|
解析顺序因此是:
|
|
|
|
```
|
|
工作组给了这个岗位的人 且 此人在岗 → 用他(by: 'work-group')
|
|
否则 → 四策略照常(by: 四选之一)
|
|
```
|
|
|
|
工作组给的人**已离岗**时不硬用,退回四策略 —— 绑定不该把单派给一个不在岗的人。
|
|
|
|
### 二、快照装载,不引用
|
|
|
|
起单时把成员表**拷进工作流记录**,之后改组不影响已起的单。
|
|
理由与版本信封一致(AM 9.1):留痕要能解释「当时为什么派给他」,
|
|
而不是被今天的组织调整改写。
|
|
|
|
### 3、按来源人装载
|
|
|
|
「凡单必有来源」(OS 3.1)。起单时取 `source.by`(登记人 / 触发来源人)的工作组:
|
|
|
|
| 来源 | 装载 |
|
|
|---|---|
|
|
| 登记触发(人工起单) | 登记人的工作组 |
|
|
| 事件 / 周期触发,带来源人 | 该人的工作组 |
|
|
| 无来源人 | **不装载** —— 全走四策略 |
|
|
|
|
没有工作组的员工起单也不装载。**向后兼容**:此前起的单、以及所有没建组的人,
|
|
行为与从前完全一致。
|
|
|
|
### 四、归属 `org`
|
|
|
|
工作组是「人和岗位」的事,`org`(L1)已经拥有 staff / position / grant。
|
|
`process` 经既有的 `OrgGateway` 端口多问一句 `workGroupOf(staffId)`,不新增依赖方向。
|
|
|
|
## 后果
|
|
|
|
- `WorkflowRecord` 增 `workGroup?: Record<岗位 code, 员工 id>`(快照,可空)
|
|
- `Resolution.by` 从 `OwnerStrategy` 放宽到 `OwnerStrategy | 'work-group'` ——
|
|
留痕里能一眼看出这单是绑定派的还是策略派的
|
|
- 一人一组即可造出「整条流都归我」的测试组:所有岗位都指向同一人
|
|
- 未做:工作组的治理台管理界面(建组 / 改组 / 指派默认组)。
|
|
目前只能经播种或直接调用例创建,列入 `docs/debt.md`
|