From 1939a3d09dd3b622366d99b55a221c4623d537cf Mon Sep 17 00:00:00 2001 From: Lee Smet Date: Thu, 21 Aug 2025 17:03:21 +0200 Subject: [PATCH] Add DAG loading to spec Signed-off-by: Lee Smet --- specs/openrpc.json | 162 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/specs/openrpc.json b/specs/openrpc.json index e3a0a5a..db6c757 100644 --- a/specs/openrpc.json +++ b/specs/openrpc.json @@ -241,6 +241,41 @@ } ] }, + { + "name": "flow.dag", + "summary": "Compute and return the execution DAG for a Flow", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/FlowLoadParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/FlowDag" + } + }, + "errors": [ + { + "$ref": "#/components/errors/InvalidParams" + }, + { + "$ref": "#/components/errors/NotFound" + }, + { + "$ref": "#/components/errors/StorageError" + }, + { + "$ref": "#/components/errors/DagMissingDependency" + }, + { + "$ref": "#/components/errors/DagCycleDetected" + } + ] + }, { "name": "job.create", "summary": "Create/Upsert Job in a context", @@ -747,6 +782,125 @@ } } }, + "JobSummary": { + "type": "object", + "required": [ + "id", + "depends", + "prerequisites", + "script_type" + ], + "properties": { + "id": { + "type": "integer", + "format": "uint32" + }, + "depends": { + "type": "array", + "items": { + "type": "integer", + "format": "uint32" + } + }, + "prerequisites": { + "type": "array", + "items": { + "type": "string" + } + }, + "script_type": { + "$ref": "#/components/schemas/ScriptType" + } + } + }, + "EdgeTuple": { + "type": "array", + "items": [ + { + "type": "integer", + "format": "uint32" + }, + { + "type": "integer", + "format": "uint32" + } + ], + "minItems": 2, + "maxItems": 2, + "description": "Tuple [from, to] representing a directed edge" + }, + "FlowDag": { + "type": "object", + "required": [ + "flow_id", + "caller_id", + "context_id", + "nodes", + "edges", + "reverse_edges", + "roots", + "leaves", + "levels" + ], + "properties": { + "flow_id": { + "type": "integer", + "format": "uint32" + }, + "caller_id": { + "type": "integer", + "format": "uint32" + }, + "context_id": { + "type": "integer", + "format": "uint32" + }, + "nodes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JobSummary" + }, + "description": "Map keyed by job id (serialized as string in JSON)" + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeTuple" + } + }, + "reverse_edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeTuple" + } + }, + "roots": { + "type": "array", + "items": { + "type": "integer", + "format": "uint32" + } + }, + "leaves": { + "type": "array", + "items": { + "type": "integer", + "format": "uint32" + } + }, + "levels": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "uint32" + } + }, + "description": "Topological execution layers (parallelizable batches)" + } + } + }, "ActorCreate": { "type": "object", "required": [ @@ -1219,6 +1373,14 @@ "StorageError": { "code": -32010, "message": "Storage Error" + }, + "DagMissingDependency": { + "code": -32020, + "message": "DAG Missing Dependency" + }, + "DagCycleDetected": { + "code": -32021, + "message": "DAG Cycle Detected" } } }