独立设计文档(审阅中):候选工作单元(WorkCell)组合定义、启动与分层动作设计
变更审阅:PR #188
父地图:#181
Outcome
冻结候选工作单元定义(WorkCell Definition)的身份、受限 Python AST、规范定义图、双向创作和发布生命周期,使人和 AI 可以稳定生成、修改、校验并发布同一语义定义。
已接受决策(Accepted Decisions)
- D1-01:候选工作单元定义(WorkCell Definition)是一等、可版本化定义,拥有稳定身份、revision、digest、公共合同与嵌套依赖。
- D1-02:v1 结构固定;候选启用(Activation)不能通过参数改变成员
class、alias、父子关系、库位(Site)、导出或动作(Action)合同。
- D1-03:保留
@workcell 函数语法;Python 定义文件通过现有 -g/--graph 直接作为启动输入,不新增 --workcell;每个 .py 启动文件恰好一个顶层根定义。
- D1-04:Python 与规范 JSON/结构化画布允许双向语义创作;同一草稿同一时刻只有一种可写模式。
- D1-05:不承诺源码字节无损;发布前必须满足
graph -> Python -> graph 规范 digest 固定点。
- D1-06=A:v1 使用失败关闭 AST allowlist;禁止动态控制流、任意调用、I/O、环境读取和未知 AST 节点。
- D1-07=A:定义身份为包目录(PackageCatalog)fqid、发布权威分配的单调 revision 与摘要;
id= 是稳定 member_id,变量名只属于 source map。
- D1-08=A:规范 JSON 自身采用现有字段优先的 NetworkX node-link 形态;顶层使用
directed/multigraph/graph/nodes/links,节点复用 id/name/type/class/parent/children/pose/config/data,连接复用 id/source/target/type/port,仅新增必要的可选 config_bindings。nodes/links 按 id 规范排序,children/config.sites 保留业务顺序;精确依赖与资产闭包进入摘要,source map 与 ui_layout 留在 sidecar。定义排除运行实例 UUID、真实物料(Material)状态和库位占用(SiteOccupancy)。读取形式固定为 nx.node_link_graph(document, edges="links", key="id")。
- D1-09=A:单一
draft_revision/可写模式,保存使用 CAS;切换先校验并展示完整语义 diff,冲突显式 rebase,无效草稿不替换最后有效候选图。
- D1-10=A:v1 从 workspace/已安装 package 的显式
.py 启动;依赖和资产只经显式 Package Source 产生的包目录(PackageCatalog)固定,workspace、wheel 与缓存 archive 必须摘要一致。
- D1-11=A:草稿(Draft)可变、候选定义(Candidate)与已发布定义(Published Definition)不可变;只有已发布定义可进入目录、嵌套和启用,发布重编译精确闭包并原子失败关闭。
本票设计状态
D1-01~D1-11 已全部冻结;后续只在实现发现已接受合同不可实现或与当前跨仓权威冲突时重开版本化决策。本票保持协议定义状态,等待拆分 repository-local 交付票和验收实现。
不包含
- 物理位姿的具体合同;
- 现场启动值、敏感配置提供者(Secret Provider)和候选启用快照(Activation Snapshot);
- 设备注册表(Device Registry)公开/私有投影;
- 工作流支持动作(Workflow-backed Action)的运行语义。
Acceptance gates
关联
父地图:#181
Outcome
冻结候选工作单元定义(WorkCell Definition)的身份、受限 Python AST、规范定义图、双向创作和发布生命周期,使人和 AI 可以稳定生成、修改、校验并发布同一语义定义。
已接受决策(Accepted Decisions)
class、alias、父子关系、库位(Site)、导出或动作(Action)合同。@workcell函数语法;Python 定义文件通过现有-g/--graph直接作为启动输入,不新增--workcell;每个.py启动文件恰好一个顶层根定义。graph -> Python -> graph规范 digest 固定点。id=是稳定member_id,变量名只属于 source map。directed/multigraph/graph/nodes/links,节点复用id/name/type/class/parent/children/pose/config/data,连接复用id/source/target/type/port,仅新增必要的可选config_bindings。nodes/links按id规范排序,children/config.sites保留业务顺序;精确依赖与资产闭包进入摘要,source map 与ui_layout留在 sidecar。定义排除运行实例 UUID、真实物料(Material)状态和库位占用(SiteOccupancy)。读取形式固定为nx.node_link_graph(document, edges="links", key="id")。draft_revision/可写模式,保存使用 CAS;切换先校验并展示完整语义 diff,冲突显式 rebase,无效草稿不替换最后有效候选图。.py启动;依赖和资产只经显式 Package Source 产生的包目录(PackageCatalog)固定,workspace、wheel 与缓存 archive 必须摘要一致。本票设计状态
D1-01~D1-11 已全部冻结;后续只在实现发现已接受合同不可实现或与当前跨仓权威冲突时重开版本化决策。本票保持协议定义状态,等待拆分 repository-local 交付票和验收实现。
不包含
Acceptance gates
member_id不依赖局部变量名或nodes数组位置,children与config.sites的业务顺序可稳定往返;nx.node_link_graph(document, edges="links", key="id")初始化且不丢失并行连接;关联