独立设计文档(审阅中):候选工作单元(WorkCell)组合定义、启动与分层动作设计
变更审阅:PR #188
父地图:#181
Outcome
冻结内部工作流(Workflow)如何显式发布成候选工作单元(WorkCell)的公共动作(Action),以及该调用如何在任务创建前降低到唯一工作流任务(WorkflowTask)与执行计划(ExecutionPlan),不产生第二套调度权威。
已接受决策(Accepted Decisions)
D5-01=A′ :作者保留 cell.expose_workflow_action(id=..., workflow=...) 显式语法;不引入候选 implementation.kind。持久投影复用既有/已冻结的 type="workflow"、node_type="workflow"、schema.x-unilabos-workflow-contract、模板/Handle 身份和候选工作单元(WorkCell)公共导出映射。工作流引用必须固定 PackageCatalog exact revision/digest,公共动作身份由候选工作单元定义(WorkCell Definition)fqid 与稳定 action_id 共同确定。
D5-02=A :候选工作单元(WorkCell)范围动作只由显式导出声明产生,不按节点数、设备数或函数名推断;单设备工作流仍保持工作流(Workflow)身份。
D5-03=A :复用工作流输入合同(WorkflowInputContract)、工作流结果记录(WorkflowResultRecord)、真实 Handle、物料占位符(ResourceSlot)与既有 SiteSelector;不新增候选工作单元(WorkCell)专属 entry/exit Site 模型,也不从名称、顺序、pose 或库位占用(SiteOccupancy)推断。
D5-04=A :复用 [跨仓决策 C1] 冻结 Composite Workflow Invocation authoring contract #178 组合工作流调用(CompositeWorkflowInvocation)、真实边界句柄、UUIDv5、既有边界映射和物料占位符(ResourceSlot)合同;不新增候选工作单元(WorkCell)专属节点/句柄家族。
D5-05=A :父已应用工作流图(Applied Workflow Graph)保存 pinned 展开内部图;工作流任务(WorkflowTask)提交时由唯一执行计划构建器(ExecutionPlan Builder)降低为普通计划节点和工作流节点作业尝试(WorkflowNodeJobAttempt);不创建宏作业、合成屏障、嵌套任务或第二调度权威。
D5-06=B :不同调用同一候选工作单元实例(WorkCell Instance)时,内部作业可以交错;v1 不提供整次调用串行、容量 N、max_concurrency 或整次调用数量上限。
D5-07=A :取消、部分物理成功、执行未知、投递重放(DeliveryReplay)和物理结算(PhysicalSettlement)复用既有安全合同;不回滚已发生物理结果、不重跑整次候选工作单元动作,作业执行占用(JobExecutionClaim)在对应作业完成物理结算后释放。
D5-08=C :不新增调用级 mutex、semaphore、表或持久许可;每个普通内部作业都必须在派发前原子取得完整、持久、带栅栏的作业执行占用(JobExecutionClaim),覆盖具体执行设备、可能改变的全部物料(Material)和源/目标库位(Site)。
并发安全边界
容量方案 B 不代表“无条件安全并发”。逐作业执行占用(JobExecutionClaim)只保护已经完整建模的物理资源:
如果候选工作单元(WorkCell)还有共用门、轨道、安全区、机箱空间或其他未建模风险,该定义不得宣称并发安全;
必须先把该风险建模为可参与完整占用集合的具体资源,或另开版本化协议;
任一作业不能完整解析其设备、物料(Material)和源/目标库位(Site)占用意图时失败关闭;
v1 不存在可被误读为“同时最多 N 次调用”的持久事实或隐含保证。
实现证据
Acceptance gates
状态
D5-01~08 协议已全部冻结;实现与测试尚未开始,本票保持 stage:protocol-definition,待建立 repository-local 交付子票后进入实现阶段。
关联
父地图:#181
Outcome
冻结内部工作流(Workflow)如何显式发布成候选工作单元(WorkCell)的公共动作(Action),以及该调用如何在任务创建前降低到唯一工作流任务(WorkflowTask)与执行计划(ExecutionPlan),不产生第二套调度权威。
已接受决策(Accepted Decisions)
cell.expose_workflow_action(id=..., workflow=...)显式语法;不引入候选implementation.kind。持久投影复用既有/已冻结的type="workflow"、node_type="workflow"、schema.x-unilabos-workflow-contract、模板/Handle 身份和候选工作单元(WorkCell)公共导出映射。工作流引用必须固定 PackageCatalog exact revision/digest,公共动作身份由候选工作单元定义(WorkCell Definition)fqid 与稳定action_id共同确定。SiteSelector;不新增候选工作单元(WorkCell)专属 entry/exit Site 模型,也不从名称、顺序、pose或库位占用(SiteOccupancy)推断。max_concurrency或整次调用数量上限。并发安全边界
容量方案 B 不代表“无条件安全并发”。逐作业执行占用(JobExecutionClaim)只保护已经完整建模的物理资源:
实现证据
Uni-Lab-OS/Uni-Lab-OS@25be15efb272667bc4398241cf119299ba02fd2f:unilabos/workflow/store.pyUni-Lab-OS/Uni-Lab-Core@8bdcc80e4ea6c5f5ffa7d56f2cd1c7ecb74e0557:docs/architecture/workcell-composition-design.mdAcceptance gates
max_concurrency或调用期持久许可;状态
D5-01~08 协议已全部冻结;实现与测试尚未开始,本票保持
stage:protocol-definition,待建立 repository-local 交付子票后进入实现阶段。关联