{
  "handle": "Workflow",
  "data_schema": {
    "type": "object",
    "required": [
      "steps",
      "dependencies"
    ],
    "properties": {
      "steps": {
        "type": "array",
        "description": "List of executable units"
      },
      "dependencies": {
        "type": "array",
        "description": "Directed prerequisite edges (step_A -> step_B)"
      },
      "artifacts": {
        "type": "object",
        "description": "Typed outputs flowing on edges"
      },
      "accept_specs": {
        "type": "object",
        "description": "Optional mapping from edge identifiers to AcceptSpec identifiers"
      },
      "role_bindings": {
        "type": "object",
        "description": "Mapping from step identifiers to one or more Role identifiers; selects required roles without instantiating performers"
      }
    }
  },
  "mechanism": "A directed graph of {{step}}s in which completion or output from one {{solver}} can enable another. It defines the operation topology required to pursue a complex objective and can express branching, parallelism, conditional logic, or declared recursion. An edge may carry a typed {{artifact}} with an {{accept_spec}}, and a step may bind one or more {{role}}s without instantiating performers. Edge payloads, acceptance policy, and role bindings remain optional unless a descendant requires them.",
  "gloss": "Directed graph of operations",
  "failure_modes": [
    "Unresolved Cycle: A dependency cycle has no declared recursion or daemon semantics and prevents progress.",
    "Cascade Failure: One node failure propagates to all dependents.",
    "Orphan Output: A node produces artifacts that no downstream node consumes."
  ],
  "invariants": [
    "Causality: Step B cannot start before Step A's prerequisites are met.",
    "Cycle Declaration: A dependency cycle is permitted only when its recursion or daemon semantics are explicit; otherwise dependencies are acyclic.",
    "Declared Edge Data: When an edge carries data, it names a typed {{artifact}} rather than untyped raw data.",
    "Binding Separation: Any declared role binding names one or more {{role}}s without instantiating performers."
  ],
  "_meta": {
    "tier": 1,
    "ring": 0,
    "supersedes": [
      "sema:Workflow#mh:SHA-256:36b2e9b976f4c8995977ea44277a6c0d2d6fba5c61e8bac80b13d4f9695e1dd9",
      "sema:Workflow#mh:SHA-256:c08269a947e9c4b5dc11979a504aa791196de2cea81245bfb45ede8c781a2586",
      "sema:Workflow#mh:SHA-256:e8ce5c15c37d26e79c0bcb73685b7bee68e9cbe85dae3a0ce0002bb64439e728",
      "sema:Workflow#mh:SHA-256:2b8a81eecc3c3656b624d8cbe2b8b2bbf115b1d045d1b98b277f24a7e94ebdf1",
      "sema:Workflow#mh:SHA-256:092d027e1770222c8e2420fd7c893f6b0b1ea34042bc9283bce826925e12d3a2"
    ],
    "path": [
      "Society",
      "Protocols"
    ]
  },
  "sema_id": "sema:Workflow#mh:SHA-256:808de72d3285e4ac086b85bfe4ba028ad2904b4088f7a22b60259ff8d8ffe057",
  "sema_ref": "Workflow#808d",
  "sema_stub": "808d",
  "dependencies": {
    "references": {
      "accept_spec": "sema:AcceptSpec#mh:SHA-256:37fa28b93d390f8c8eb171eaab54ff4f9e57a95ef67af024422f823545a291cc",
      "artifact": "sema:Artifact#mh:SHA-256:b533ad2674ec00c5e9a5f1e3920f1097e2bc1eea7263f89e8f46563fa319a0ee",
      "role": "sema:Role#mh:SHA-256:262ab6d2c03de5beab24c98cb3168948a3bb043a6a81b68237ab53919d153999",
      "solver": "sema:Solver#mh:SHA-256:a4478611882cced1b069f8dc551d401c74b35cefe02ed67d37d1aa135e19825b",
      "step": "sema:Step#mh:SHA-256:fa207e6f70e14a67e3baa7e4ad4df9ece59ba4d07083fbbcc992332959e1520a"
    }
  },
  "sema_layer": "Society",
  "sema_category": "Protocols",
  "used_by": {
    "references": {
      "OrchestrationLoop": "sema:OrchestrationLoop#mh:SHA-256:e8ba5873bab7bc8a60c971462d4c5a19d86ecf67c4526a516242e20aa388762e"
    }
  }
}
