{
  "formatVersion": "2.1.0",
  "id": "graph:subnets-analysis",
  "revision": "1.0.0",
  "name": "SubNets",
  "description": "Subnet reachability and exposure analysis",
  "graph": {
    "nodes": [
      {
        "id": "node:inbound-reachability",
        "name": "node:inbound-reachability",
        "kind": "task",
        "inputs": [
          {
            "id": "in:input",
            "direction": "input",
            "type": "builtin:object",
            "required": true
          }
        ],
        "outputs": [
          {
            "id": "out:result",
            "direction": "output",
            "type": "builtin:object"
          }
        ],
        "parameters": {
          "skillKey": "professional-answer",
          "taskVariable": {
            "question": "What inbound routed-reachability candidates exist for this subnet?",
            "outputContract": {
              "question": "Repeat the exact question being answered.",
              "shortAnswer": "Direct short answer.",
              "fullAnswer": "Detailed answer as an actual array of strings, not a stringified JSON array.",
              "assumptions": "Main assumptions as an array.",
              "unknowns": "Main unknowns as an array.",
              "evidence": "Evidence or reasoning notes as an array."
            }
          },
          "inputsConfig": {
            "record": {
              "path": "input"
            }
          },
          "taskConfiguration": {
            "executionStrategies": [],
            "aiTaskStrategies": {
              "pre": "synthesis"
            },
            "modelConfig": {
              "inherit": true,
              "cases": [
                {
                  "id": "default",
                  "modelConfig": {
                    "skillModel": {
                      "kind": "profileChoice",
                      "key": "cheap/default"
                    }
                  }
                }
              ]
            }
          },
          "smartInput": {
            "paths": [
              {
                "path": "input",
                "label": "Subnet record"
              }
            ]
          },
          "executionMapping": {
            "path": "answers.q1",
            "mode": "replace",
            "map": {
              "question": "output.parsed.question",
              "shortAnswer": "output.parsed.shortAnswer",
              "fullAnswer": "output.parsed.fullAnswer",
              "assumptions": "output.parsed.assumptions",
              "unknowns": "output.parsed.unknowns",
              "evidence": "output.parsed.evidence"
            }
          },
          "planning": {
            "webSearch": "never"
          }
        },
        "layout": {
          "x": 580,
          "y": 100
        }
      },
      {
        "id": "node:ingress-paths",
        "name": "node:ingress-paths",
        "kind": "task",
        "inputs": [
          {
            "id": "in:input",
            "direction": "input",
            "type": "builtin:object",
            "required": true
          }
        ],
        "outputs": [
          {
            "id": "out:result",
            "direction": "output",
            "type": "builtin:object"
          }
        ],
        "parameters": {
          "skillKey": "professional-answer",
          "taskVariable": {
            "question": "What are the most relevant candidate ingress paths to this subnet?",
            "outputContract": {
              "question": "Repeat the exact question being answered.",
              "shortAnswer": "Direct short answer.",
              "fullAnswer": "Detailed answer as an actual array of strings, not a stringified JSON array.",
              "assumptions": "Main assumptions as an array.",
              "unknowns": "Main unknowns as an array.",
              "evidence": "Evidence or reasoning notes as an array."
            }
          },
          "inputsConfig": {
            "record": {
              "path": "input"
            }
          },
          "taskConfiguration": {
            "executionStrategies": [],
            "aiTaskStrategies": {
              "pre": "synthesis"
            }
          },
          "smartInput": {
            "paths": [
              {
                "path": "input",
                "label": "Subnet record"
              }
            ]
          },
          "executionMapping": {
            "path": "answers.q2",
            "mode": "replace",
            "map": {
              "question": "output.parsed.question",
              "shortAnswer": "output.parsed.shortAnswer",
              "fullAnswer": "output.parsed.fullAnswer",
              "assumptions": "output.parsed.assumptions",
              "unknowns": "output.parsed.unknowns",
              "evidence": "output.parsed.evidence"
            }
          }
        },
        "layout": {
          "x": 580,
          "y": 440
        }
      },
      {
        "id": "node:exposure-hypotheses",
        "name": "node:exposure-hypotheses",
        "kind": "task",
        "inputs": [
          {
            "id": "in:input",
            "direction": "input",
            "type": "builtin:object",
            "required": true
          }
        ],
        "outputs": [
          {
            "id": "out:result",
            "direction": "output",
            "type": "builtin:object"
          }
        ],
        "parameters": {
          "skillKey": "professional-answer",
          "taskVariable": {
            "question": "What exposure hypotheses do those paths create for this subnet?",
            "outputContract": {
              "question": "Repeat the exact question being answered.",
              "shortAnswer": "Direct short answer.",
              "fullAnswer": "Detailed answer as an actual array of strings, not a stringified JSON array.",
              "assumptions": "Main assumptions as an array.",
              "unknowns": "Main unknowns as an array.",
              "evidence": "Evidence or reasoning notes as an array."
            }
          },
          "inputsConfig": {
            "record": {
              "path": "input"
            }
          },
          "taskConfiguration": {
            "executionStrategies": [],
            "aiTaskStrategies": {
              "pre": "synthesis"
            }
          },
          "smartInput": {
            "paths": [
              {
                "path": "input",
                "label": "Subnet record"
              }
            ]
          },
          "executionMapping": {
            "path": "answers.q3",
            "mode": "replace",
            "map": {
              "question": "output.parsed.question",
              "shortAnswer": "output.parsed.shortAnswer",
              "fullAnswer": "output.parsed.fullAnswer",
              "assumptions": "output.parsed.assumptions",
              "unknowns": "output.parsed.unknowns",
              "evidence": "output.parsed.evidence"
            }
          }
        },
        "layout": {
          "x": 580,
          "y": 780
        }
      },
      {
        "id": "node:finalizer:package",
        "name": "node:finalizer:package",
        "kind": "finalizer",
        "inputs": [
          {
            "id": "in:node:inbound-reachability",
            "direction": "input",
            "type": "builtin:object",
            "required": true
          },
          {
            "id": "in:node:ingress-paths",
            "direction": "input",
            "type": "builtin:object",
            "required": true
          },
          {
            "id": "in:node:exposure-hypotheses",
            "direction": "input",
            "type": "builtin:object",
            "required": true
          }
        ],
        "outputs": [
          {
            "id": "out:result",
            "direction": "output",
            "type": "builtin:object"
          }
        ],
        "parameters": {
          "finalizerType": "aggregate",
          "config": {
            "strategy": "report-schema",
            "collectEpistemicTags": false,
            "sections": {
              "q1": {
                "type": "executionMemoryPath",
                "path": "answers.q1",
                "optional": true
              },
              "q2": {
                "type": "executionMemoryPath",
                "path": "answers.q2",
                "optional": true
              },
              "q3": {
                "type": "executionMemoryPath",
                "path": "answers.q3",
                "optional": true
              }
            }
          },
          "inputs": {
            "q1": {
              "type": "executionMemoryPath",
              "path": "answers.q1",
              "optional": true
            },
            "q2": {
              "type": "executionMemoryPath",
              "path": "answers.q2",
              "optional": true
            },
            "q3": {
              "type": "executionMemoryPath",
              "path": "answers.q3",
              "optional": true
            }
          },
          "outputSchema": {
            "type": "object",
            "description": "Subnet analysis package from parallel research steps.",
            "additionalProperties": true
          }
        },
        "metadata": {
          "title": "Package finalizer"
        },
        "layout": {
          "x": 960,
          "y": 100
        }
      }
    ],
    "edges": [
      {
        "id": "edge:node:inbound-reachability-to-node:finalizer:package-0",
        "from": {
          "nodeId": "node:inbound-reachability",
          "portId": "out:result"
        },
        "to": {
          "nodeId": "node:finalizer:package",
          "portId": "in:node:inbound-reachability"
        }
      },
      {
        "id": "edge:node:ingress-paths-to-node:finalizer:package-1",
        "from": {
          "nodeId": "node:ingress-paths",
          "portId": "out:result"
        },
        "to": {
          "nodeId": "node:finalizer:package",
          "portId": "in:node:ingress-paths"
        }
      },
      {
        "id": "edge:node:exposure-hypotheses-to-node:finalizer:package-2",
        "from": {
          "nodeId": "node:exposure-hypotheses",
          "portId": "out:result"
        },
        "to": {
          "nodeId": "node:finalizer:package",
          "portId": "in:node:exposure-hypotheses"
        }
      }
    ],
    "inputs": [
      {
        "id": "graph-input:node:inbound-reachability",
        "name": "node:inbound-reachability",
        "type": "builtin:object",
        "target": {
          "nodeId": "node:inbound-reachability",
          "portId": "in:input"
        },
        "contract": {
          "semanticKind": "record",
          "required": true,
          "schema": {
            "type": "object"
          }
        }
      },
      {
        "id": "graph-input:node:ingress-paths",
        "name": "node:ingress-paths",
        "type": "builtin:object",
        "target": {
          "nodeId": "node:ingress-paths",
          "portId": "in:input"
        },
        "contract": {
          "semanticKind": "record",
          "required": true,
          "schema": {
            "type": "object"
          }
        }
      },
      {
        "id": "graph-input:node:exposure-hypotheses",
        "name": "node:exposure-hypotheses",
        "type": "builtin:object",
        "target": {
          "nodeId": "node:exposure-hypotheses",
          "portId": "in:input"
        },
        "contract": {
          "semanticKind": "record",
          "required": true,
          "schema": {
            "type": "object"
          }
        }
      }
    ],
    "outputs": [
      {
        "id": "graph-output:node:finalizer:package",
        "name": "node:finalizer:package",
        "type": "builtin:object",
        "source": {
          "nodeId": "node:finalizer:package",
          "portId": "out:result"
        },
        "contract": {
          "semanticKind": "final-output",
          "required": true,
          "schema": {
            "type": "object"
          }
        }
      }
    ],
    "response": {
      "persistency": {
        "entityId": "same-as-input",
        "contentType": "infernces",
        "newRecord": true
      }
    },
    "metadata": {
      "graphEntry": {
        "summary": "Subnet record required to analyze reachability and exposure.",
        "executionSchema": {
          "type": "object"
        }
      },
      "graphResponse": {
        "summary": "Graph response mapping",
        "finalOutputSchema": {
          "type": "object"
        },
        "responseMapping": {
          "shape": {}
        }
      },
      "modelConfig": {
        "cases": [
          {
            "id": "default",
            "modelConfig": {
              "preActionModel": {
                "kind": "profileChoice",
                "key": "cheap/default"
              },
              "skillModel": {
                "kind": "profileChoice",
                "key": "pro/default"
              },
              "postActionModel": {
                "kind": "profileChoice",
                "key": "cheap/default"
              }
            }
          }
        ]
      },
      "data": {
        "variables": {},
        "responsePreset": {
          "id": "subnetAnalysis",
          "version": 1
        }
      }
    }
  },
  "types": []
}
