{
  "schemaVersion": "1.0",
  "title": "Delivery graph",
  "nodes": [
    {
      "type": "nav",
      "id": "nav",
      "props": {
        "variant": "bar",
        "title": "Nano Workforce",
        "items": [
          {
            "label": "Overview",
            "page": "overview"
          },
          {
            "label": "Connect over MCP",
            "page": "mcp"
          },
          {
            "label": "Lineage",
            "page": "lineage"
          },
          {
            "label": "Convergence",
            "page": "home"
          },
          {
            "label": "Epics",
            "page": "epic"
          },
          {
            "label": "Feature",
            "page": "feature"
          },
          {
            "label": "Delivery Graphs",
            "page": "delivery-graphs"
          },
          {
            "label": "Tasks",
            "page": "tasks",
            "badge": {
              "source": "app",
              "table": "user_tasks",
              "filter": [],
              "tone": "danger",
              "refreshMs": 5000,
              "hideWhenZero": true
            }
          },
          {
            "label": "Cockpit",
            "page": "cockpit"
          },
          {
            "label": "Board",
            "page": "board"
          },
          {
            "label": "Velocity",
            "page": "velocity"
          }
        ],
        "sticky": true
      }
    },
    {
      "type": "text",
      "id": "title",
      "props": { "text": "Delivery graph {{param}}", "variant": "heading" }
    },
    {
      "type": "text",
      "id": "subtitle",
      "props": {
        "text": "This delivery graph's run aggregate \u2014 its lifecycle status, the derived phase (where it is parked, e.g. on a human node), its compiled shape (node / human-stop / side-effect counts), and the content digest that is its approval token. Follow the Status cell into the process explorer to watch the compiled process advance node-by-node and edge-by-edge (the engine owns per-node token state).",
        "variant": "sub"
      }
    },
    {
      "type": "dataGrid",
      "id": "delivery-graph-run",
      "props": {
        "title": "Run",
        "rowKey": "run_key",
        "refreshMs": 5000,
        "empty": "No delivery graph found for this key.",
        "data": {
          "kind": "datasource",
          "source": "app",
          "table": "delivery_graph_read_model",
          "orderBy": { "field": "updated_at", "dir": "desc" },
          "filter": [{ "field": "run_key", "eqParam": true }]
        },
        "columns": [
          { "field": "title", "template": "{{title}}", "header": "Graph", "subtitleField": "run_key", "truncate": true, "width": "30%" },
          { "field": "status", "header": "Status", "link": { "kind": "processExplorer", "keyField": "process_key" } },
          {
            "field": "stage",
            "header": "Pipeline",
            "kind": "pipeline",
            "stages": [
              { "key": "Requested", "label": "Requested" },
              { "key": "Implementing", "label": "Implementing" },
              { "key": "PR open", "label": "PR open" },
              { "key": "Converging", "label": "Converging" },
              { "key": "Merging", "label": "Merging" },
              { "key": "Done", "label": "Done" }
            ],
            "activeField": "stage",
            "stateField": "stage_state",
            "locus": { "field": "process_key", "link": { "kind": "processExplorer", "keyField": "process_key" } }
          },
          { "field": "park_label", "header": "Parked", "truncate": true, "width": "30%" },
          { "field": "node_count", "header": "Nodes" },
          { "field": "human_node_count", "header": "Human" },
          { "field": "side_effect_count", "header": "Side effects" },
          { "field": "updated_at", "header": "Updated", "width": "9rem", "format": "datetime" }
        ],
        "detail": {
          "fields": [
            { "field": "process_definition_id", "label": "Process definition" },
            { "field": "process_key", "label": "Process instance key" },
            { "field": "digest", "label": "Content digest (approval token)" },
            { "field": "side_effecting", "label": "Side-effecting (1 = requires approval)" },
            { "field": "phase_node_id", "label": "Parked human node element" },
            { "field": "created_at", "label": "Created" }
          ]
        }
      }
    }
  ]
}
