forked from ChaiHao/BPOS-MVP
三面拆分⑬:流程包纯编排化 —— 编排与传递契约归包,实现方式归库,激活看双判据
模型(用户定):流程包只决定活动编排 + 活动传递的契约,不决定活动的实现方式; 节点只分活动点与审批点;图只定名称与顺序,属性在卡上填,链接好实现即可运行; 激活 = ①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
This commit is contained in:
@@ -107,15 +107,11 @@ export type NudgeLadder = z.infer<typeof nudgeLadderSchema>;
|
||||
|
||||
/* ── 节点 ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
export const GATEWAY_KINDS = ['parallel', 'exclusive'] as const;
|
||||
export const gatewayKindSchema = z.enum(GATEWAY_KINDS);
|
||||
export type GatewayKind = z.infer<typeof gatewayKindSchema>;
|
||||
|
||||
export const GATEWAY_KIND_LABEL: Readonly<Record<GatewayKind, string>> = {
|
||||
parallel: '并行网关',
|
||||
exclusive: '异或网关',
|
||||
};
|
||||
|
||||
/*
|
||||
* 节点只分**活动点**与**审批点**(产品决策 2026-07-28 第二轮),外加结构件起点/终点。
|
||||
* 没有网关:分支 = 源节点的条件出边,汇合 = 多入边异或(schema 级保证,不是校验项)。
|
||||
* 库中数据已随外科手术清空,历史读取无包袱;AND 并行待「并行组」声明(debt M5-4)。
|
||||
*/
|
||||
const nodeBase = {
|
||||
id: nodeIdSchema,
|
||||
label: z.string().min(1),
|
||||
@@ -175,15 +171,6 @@ export const processNodeSchema = z.discriminatedUnion('kind', [
|
||||
nudge: nudgeLadderSchema.optional(),
|
||||
message: z.string().optional(),
|
||||
}),
|
||||
z.object({
|
||||
...nodeBase,
|
||||
kind: z.literal('gateway'),
|
||||
gateway: gatewayKindSchema,
|
||||
/** 分叉 / 汇合 */
|
||||
mode: z.enum(['fork', 'join']),
|
||||
/** 判据说明(人读):条件本体仍在出边的 S-FEEL 上,这里是「为什么这么分」 */
|
||||
basis: z.string().optional(),
|
||||
}),
|
||||
]);
|
||||
export type ProcessNode = z.infer<typeof processNodeSchema>;
|
||||
|
||||
@@ -242,8 +229,6 @@ export const CLOSURE_VIOLATION_KINDS = [
|
||||
'dangling-node',
|
||||
/** 多出边的无条件默认兜底超过一条 —— 第二条默认永远走不到 */
|
||||
'multi-default-edge',
|
||||
/** 网关已废除:历史版本仅可读,不可激活(2026-07-28) */
|
||||
'gateway-deprecated',
|
||||
'tolerate-required-dependency',
|
||||
'unknown-activity',
|
||||
'missing-owner-position',
|
||||
|
||||
Reference in New Issue
Block a user