{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/foundational/json-schema/foundational-edge-provenance-response-schema.json",
  "title": "EdgeProvenanceResponse",
  "description": "The application path behind one lineage edge (design 11 §4.2) — \"explain this edge\".",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/foundational-openapi.json#/components/schemas/EdgeProvenanceResponse",
  "properties": {
    "source": {
      "type": "string",
      "enum": [
        "stored",
        "derived",
        "none"
      ],
      "title": "Source",
      "description": "stored = doc 04's stitched-carrier path; derived = run_id-joined RUNS/ACCESS chain; none = an honest empty, never a guess"
    },
    "path": {
      "items": {
        "anyOf": [
          {
            "$ref": "#/$defs/APIOperationEntity"
          },
          {
            "$ref": "#/$defs/APICarrierEntity"
          },
          {
            "$ref": "#/$defs/BaseEntity"
          }
        ]
      },
      "type": "array",
      "title": "Path",
      "description": "The representative application path — `paths[0]`. Ordered: e.g. [op_A, op_B, op_C], or [producer_op?, carrier, consumer_op?] for a stitched edge; op ends optional (a carrier can dangle)"
    },
    "paths": {
      "items": {
        "items": {
          "anyOf": [
            {
              "$ref": "#/$defs/APIOperationEntity"
            },
            {
              "$ref": "#/$defs/APICarrierEntity"
            },
            {
              "$ref": "#/$defs/BaseEntity"
            }
          ]
        },
        "type": "array"
      },
      "type": "array",
      "title": "Paths",
      "description": "Every application path behind this edge, each independently explaining it. More than one means several distinct producers write the same dataset pair (e.g. a dozen Informatica mappings loading one job-control table) — not several routes to one answer. Render all of them; `path` is a single-chain convenience projection that necessarily hides the rest"
    },
    "pathsTruncated": {
      "type": "boolean",
      "title": "Pathstruncated",
      "description": "True when this edge had more paths than the server serves and `paths` is therefore partial — do not present it as the complete producer list",
      "default": false
    },
    "carriers": {
      "items": {
        "$ref": "#/$defs/APICarrierEntity"
      },
      "type": "array",
      "title": "Carriers",
      "description": "The Carrier-typed entries across every entry of `paths`"
    },
    "platforms": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Platforms",
      "description": "Distinct Operation.platform values across `paths` — edge-icon data"
    },
    "jobs": {
      "items": {
        "$ref": "#/$defs/APIEdgeJob"
      },
      "type": "array",
      "title": "Jobs",
      "description": "The jobs behind this edge, in the order their first path appears in `paths`. Partial when `paths_truncated`"
    },
    "stepCount": {
      "type": "integer",
      "title": "Stepcount",
      "description": "Distinct Operations across every entry of `paths`",
      "default": 0
    }
  },
  "type": "object",
  "required": [
    "source",
    "path"
  ],
  "$defs": {
    "APICarrierEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "type": "string",
          "const": "CARRIER",
          "title": "Entitytype",
          "default": "CARRIER"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        },
        "family": {
          "type": "string",
          "title": "Family",
          "description": "CarrierKey.Family name, e.g. TOPIC, GLUE_JOB, DAG_ID"
        },
        "namespace": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Namespace"
        },
        "address": {
          "type": "string",
          "title": "Address"
        },
        "selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Selector"
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname"
        },
        "breadcrumbs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Breadcrumbs",
          "description": "The containers this entity sits in, outermost first — an Informatica operation's `[repo_schema, folder]`, an Airflow task's `[dag_id]` (ADR-5f80bba8). The app-layer counterpart of a dataset's `db › schema` descriptor, and empty whenever the entity genuinely has no hierarchy (an Airflow DAG's namespace is unset), which the frontend renders as an icon-only row rather than a placeholder. Excludes the platform, which every surface already renders as an icon."
        },
        "matchStatus": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "matched",
                "producer_only",
                "consumer_only"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Matchstatus",
          "description": "Resolution state derived from the carrier's incoming edges: matched (has both a producer and a consumer), producer_only, or consumer_only (design 11 §5.1). None when it was not resolved against the graph."
        }
      },
      "type": "object",
      "required": [
        "id",
        "family",
        "address"
      ],
      "title": "APICarrierEntity",
      "description": "The API projection of a ``Carrier`` entity (design 01 §4). See :class:`APIOperationEntity`\nfor the construction-path rationale."
    },
    "APICertification": {
      "type": "string",
      "enum": [
        "certified",
        "deprecated"
      ],
      "title": "APICertification"
    },
    "APIColumnEntitySlim": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "entityId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Entityid",
          "description": "The column's own entity id: the id lineage walks and diff entries name it by. `id` addresses it in this API."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The name of the column"
        },
        "columnType": {
          "anyOf": [
            {
              "$ref": "#/$defs/ColumnType"
            },
            {
              "type": "null"
            }
          ],
          "description": "The type of the column"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Parentid",
          "description": "The immediate owning Port or parent Field"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the column: the one set on the column itself, else the one on its nearest ancestor (its table, then its containers) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the column's own or it has none"
        },
        "labels": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Labels",
          "description": "The column's labels, embedded with `labels`: the tags scans found on it and the custom tags in effect on it, its own and, per tag name it has none of, its nearest ancestor's. A tag with several values joins them with ', '."
        },
        "owners": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/PublicEntityOwner"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Owners",
          "description": "The column's owners, embedded with `owners`: its own and every ancestor's, each user once."
        }
      },
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "title": "APIColumnEntitySlim"
    },
    "APIEdgeJob": {
      "properties": {
        "key": {
          "type": "string",
          "title": "Key",
          "description": "The DAG/workflow id, else the first step's own id"
        },
        "containerId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Containerid",
          "description": "The DAG/workflow, when the job has one"
        },
        "firstStepId": {
          "type": "string",
          "title": "Firststepid",
          "description": "The first Operation of the job's first path"
        },
        "pathIndexes": {
          "items": {
            "type": "integer"
          },
          "type": "array",
          "title": "Pathindexes",
          "description": "The indexes into `paths` of this job's paths"
        },
        "stepCount": {
          "type": "integer",
          "title": "Stepcount",
          "description": "Distinct Operations across this job's paths"
        }
      },
      "type": "object",
      "required": [
        "key",
        "firstStepId",
        "pathIndexes",
        "stepCount"
      ],
      "title": "APIEdgeJob",
      "description": "One job behind a lineage edge: the DAG/workflow the first step of its paths sits in, or that step\nitself when it sits in no single container. Keyed as ``AppPathSummary.job_count`` counts jobs."
    },
    "APIEntityType": {
      "type": "string",
      "enum": [
        "TABLE",
        "DASHBOARD",
        "FILE",
        "STREAM",
        "WAREHOUSE_TASK",
        "SALESFORCE_RESOURCE",
        "SPREADSHEET",
        "WEB_RESOURCE",
        "POWER_PLATFORM_DATAFLOW",
        "EXECUTED_QUERY",
        "COLUMN",
        "DASHBOARD_COLUMN",
        "FILE_COLUMN",
        "STREAM_COLUMN",
        "WAREHOUSE_TASK_COLUMN",
        "SALESFORCE_RESOURCE_COLUMN",
        "SPREADSHEET_COLUMN",
        "WEB_RESOURCE_COLUMN",
        "POWER_PLATFORM_DATAFLOW_COLUMN",
        "EXECUTED_QUERY_COLUMN",
        "OPERATION",
        "PORT",
        "CARRIER",
        "UNKNOWN"
      ],
      "title": "APIEntityType",
      "description": "Enum for the types of entities that can be returned in the lineage response"
    },
    "APILastRun": {
      "properties": {
        "outcome": {
          "$ref": "#/$defs/RunOutcome"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Status",
          "description": "The status exactly as the connector served it"
        },
        "startedAt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Startedat",
          "description": "When the run started, as served"
        },
        "finishedAt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Finishedat",
          "description": "When the run finished, as served"
        },
        "durationSeconds": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Durationseconds"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "The run's error message, when it failed with one"
        }
      },
      "type": "object",
      "required": [
        "outcome"
      ],
      "title": "APILastRun",
      "description": "The latest run a connector reported for an Operation (or one of its placements)."
    },
    "APILocationRef": {
      "properties": {
        "locationId": {
          "type": "string",
          "title": "Locationid",
          "description": "The location's id. The certification and tag endpoints take it as `entity_id`, so a value set on a container applies to everything under it."
        },
        "level": {
          "type": "string",
          "title": "Level",
          "description": "A container's level, such as `account`, `db` or `schema`, or an entity's type, such as `table`"
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The container's or entity's name"
        }
      },
      "type": "object",
      "required": [
        "locationId",
        "level",
        "name"
      ],
      "title": "APILocationRef",
      "description": "A location a certification or custom tags can be set on: a container (an account, a database, a schema,\na BI project or folder, ...) or an entity."
    },
    "APIOperationEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "type": "string",
          "const": "OPERATION",
          "title": "Entitytype",
          "default": "OPERATION"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "OperationKind name, e.g. TASK, DAG, FUNCTION"
        },
        "platform": {
          "type": "string",
          "title": "Platform",
          "description": "Operation.Platform name, e.g. AIRFLOW"
        },
        "executionMode": {
          "type": "string",
          "title": "Executionmode",
          "description": "ExecutionMode name: BATCH or CONTINUOUS"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname"
        },
        "namespace": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Namespace"
        },
        "configParams": {
          "items": {
            "$ref": "#/$defs/APIParamBinding"
          },
          "type": "array",
          "title": "Configparams"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Parentid",
          "description": "Containment parent entity id (e.g. a TASK's DAG), when this operation is contained in exactly one container; the frontend derives containment child ids from it (design 11 §6.1, ADR-96f314e8/ADR-215f2779). Since ADR-85e440ea an Operation is minted per definition, so containment is carried by `placements`: this field is the single-container convenience projection and is None for a definition reused across containers — read `placements` for the general case."
        },
        "placements": {
          "items": {
            "$ref": "#/$defs/APIPlacement"
          },
          "type": "array",
          "title": "Placements",
          "description": "Every container this operation is placed in, with that placement's own run history (ADR-85e440ea). A definition reused across N containers has N entries; the per-placement facts live here rather than in `config_params`, which would otherwise hold N nameless copies of each."
        },
        "runSummary": {
          "anyOf": [
            {
              "$ref": "#/$defs/APIRunSummary"
            },
            {
              "type": "null"
            }
          ],
          "description": "The operation's runs, typed: as its first placement with run params reports them, else as its own `config_params` do. None when nothing reports a run fact. A placement's own runs are on `placements[].run_summary`"
        },
        "templateMultiplicity": {
          "anyOf": [
            {
              "$ref": "#/$defs/APITemplateMultiplicity"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ×N template marker (F5), present only for a template fan-out operation"
        },
        "fusesWithEntityId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Fuseswithentityid",
          "description": "The id of the single table this operation 1:1-fuses with (a MODEL that writes exactly one table whose only producer is this operation, design 10 §4.1); the frontend collapses the model↔table pair into one fused card. None when the operation is not fusable."
        },
        "ports": {
          "items": {
            "$ref": "#/$defs/APIPortEntity"
          },
          "type": "array",
          "title": "Ports",
          "description": "The operation's ports — its grouped PARAM/PAYLOAD inputs and RETURN outputs (design 01 §3, ADR-96f314e8), rendered as column-like rows on the operation card. Graph-derived, so populated only when this operation is served as a canvas card (neighbors / triggers); empty on the pure proto projection (provenance / search rows)."
        },
        "portFlowEdges": {
          "items": {
            "$ref": "#/$defs/PortFlowEdgeView"
          },
          "type": "array",
          "title": "Portflowedges",
          "description": "The PORT_FLOW edges (port→port arg/return data flow, ADR-96f314e8) incident to this operation's ports, with their per-caller ParamBindings. Same graph-derived, card-only population as `ports`."
        },
        "breadcrumbs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Breadcrumbs",
          "description": "The containers this entity sits in, outermost first — an Informatica operation's `[repo_schema, folder]`, an Airflow task's `[dag_id]` (ADR-5f80bba8). The app-layer counterpart of a dataset's `db › schema` descriptor, and empty whenever the entity genuinely has no hierarchy (an Airflow DAG's namespace is unset), which the frontend renders as an icon-only row rather than a placeholder. Excludes the platform, which every surface already renders as an icon."
        },
        "portColumnFlowEdges": {
          "items": {
            "$ref": "#/$defs/PortColumnFlowEdgeView"
          },
          "type": "array",
          "title": "Portcolumnflowedges",
          "description": "The column-granular PORT_FLOW edges (ADR-2c23c57d) incident to this operation's port fields — the arm whose far end is a dataset column rather than another operation's port, which makes this operation a visible hop in column lineage. Same graph-derived, card-only population as `ports`."
        }
      },
      "type": "object",
      "required": [
        "id",
        "kind",
        "platform",
        "executionMode",
        "name"
      ],
      "title": "APIOperationEntity",
      "description": "The API projection of an ``Operation`` entity (design 01 §2, design 11 §6.1).\n\nConstructed directly from the proto ``Entity`` via :func:`api_operation_entity_from_proto`\n— never through ``from_entity_type``/``api_entity_from_entity`` (ADR-3c1fad53:\napp-graph entities have no dataset-document representation and are served by their own surface)."
    },
    "APIParamBinding": {
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "kind": {
          "type": "string",
          "title": "Kind"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Value",
          "description": "The resolved value, when resolvable"
        },
        "valueSource": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Valuesource",
          "description": "How value was obtained: literal, config:<key>, env:<VAR>, arg:<caller_port>, ..."
        }
      },
      "type": "object",
      "required": [
        "name",
        "kind"
      ],
      "title": "APIParamBinding",
      "description": "The API projection of ``ParamBinding`` (design 01 §3.1)."
    },
    "APIPlacement": {
      "properties": {
        "containerId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Containerid",
          "description": "The containing DAG/workflow operation's entity id"
        },
        "instanceKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Instancekey",
          "description": "Platform-native placement id (Informatica OPB_TASK_INST.INSTANCE_ID, an Airflow task_id). Unique only within its container, so never an identity on its own."
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname",
          "description": "The name this placement carries when it differs from the definition's name"
        },
        "runParams": {
          "items": {
            "$ref": "#/$defs/APIParamBinding"
          },
          "type": "array",
          "title": "Runparams",
          "description": "This placement's own run history (last_run_*, row counts)"
        },
        "runSummary": {
          "anyOf": [
            {
              "$ref": "#/$defs/APIRunSummary"
            },
            {
              "type": "null"
            }
          ],
          "description": "This placement's runs, typed: its `run_params` read over the operation's `config_params`. None when the placement serves no run params"
        }
      },
      "type": "object",
      "title": "APIPlacement",
      "description": "One occurrence of an Operation inside a container (ADR-85e440ea).\n\nSince an Operation is minted per definition, \"which container is this in\" and \"how did its last\nrun go\" are per-placement facts: a session reused by three workflows has three placements, each\nwith its own outcome. ``run_params`` reuses the ``config_params`` binding shape and names, so the\ninspector's prefix grouping applies to it unchanged."
    },
    "APIPortCoverageGap": {
      "properties": {
        "gap": {
          "type": "string",
          "title": "Gap"
        },
        "valuePath": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Valuepath"
        },
        "callSiteKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Callsitekey"
        },
        "runId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runid"
        }
      },
      "type": "object",
      "required": [
        "gap"
      ],
      "title": "APIPortCoverageGap",
      "description": "One retained unsupported-evidence observation for a Port."
    },
    "APIPortEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "type": "string",
          "const": "PORT",
          "title": "Entitytype",
          "default": "PORT"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The port's identifier within its Operation. Identity-bearing, and not necessarily the name of whatever sits on the other end of its edge (ADR-d121cc23)"
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname",
          "description": "The port's human label, when it differs from `name` — an Informatica port is keyed by its widget instance but labelled with the dataset it moves. Cosmetic; render this and fall back to `name`"
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "PortKind name: PARAM, RETURN, or PAYLOAD"
        },
        "index": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Index",
          "description": "Positional ordinal for positional args (mirrors Column.index)"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Parentid",
          "description": "The containing Operation's entity id (ADR-96f314e8)"
        },
        "children": {
          "items": {
            "$ref": "#/$defs/APIColumnEntitySlim"
          },
          "type": "array",
          "title": "Children",
          "description": "The port's field children (design 01 §3), shown in the inspector"
        },
        "fieldsTruncated": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Fieldstruncated",
          "description": "True when `children` is only a bounded partial projection of the Port's stored Field tree. False means field hydration completed; omitted means this endpoint did not hydrate Fields."
        },
        "breadcrumbs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Breadcrumbs",
          "description": "The containers this port sits in, outermost first, ENDING IN ITS OWNING OPERATION's name — unlike `APIOperationEntity.breadcrumbs`, which ends at that operation's containers. A port is rendered as a row of its own in search, where the operation is the crumb that tells two same-named ports apart (FOU-16141). Empty when the owning operation has no location, which the clients render as an icon-only row."
        },
        "coverageGaps": {
          "items": {
            "$ref": "#/$defs/APIPortCoverageGap"
          },
          "type": "array",
          "title": "Coveragegaps",
          "description": "Machine-readable reasons why finer-grained flow could not safely be materialized"
        }
      },
      "type": "object",
      "required": [
        "id",
        "name",
        "kind"
      ],
      "title": "APIPortEntity",
      "description": "The API projection of a ``Port`` entity (design 01 §3, ADR-96f314e8) — a parameter or return of\nan Operation, child of it via ``parent_id``. Its field children reuse the slim column projection\n(ADR-96f314e8: a port's fields are Column subtypes). See :class:`APIOperationEntity` for the\nconstruction-path rationale (never through ``from_entity_type``)."
    },
    "APIPortFlowEvidence": {
      "properties": {
        "callSiteKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Callsitekey"
        },
        "conditionExpr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conditionexpr"
        }
      },
      "type": "object",
      "title": "APIPortFlowEvidence",
      "description": "Paired call-site and predicate evidence for one collapsed PORT_FLOW contribution."
    },
    "APIRunSummary": {
      "properties": {
        "lastRun": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILastRun"
            },
            {
              "type": "null"
            }
          ]
        },
        "runCount": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runcount",
          "description": "How many runs the connector counted"
        },
        "runCountWindowDays": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runcountwindowdays",
          "description": "`run_count` covers the last this many days, when it is a windowed count"
        },
        "runCountSince": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runcountsince",
          "description": "`run_count` covers the runs since this time"
        },
        "failedRunCount": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Failedruncount"
        },
        "consecutiveFailures": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Consecutivefailures"
        },
        "avgDurationSeconds": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Avgdurationseconds"
        }
      },
      "type": "object",
      "title": "APIRunSummary",
      "description": "What a connector reported about an Operation's runs: its last run and the run aggregates it\nserves. Connectors serve aggregates rather than run lists, so every field is absent unless the\nconnector served it; nothing is estimated."
    },
    "APITemplateMultiplicity": {
      "properties": {
        "isTemplate": {
          "type": "boolean",
          "title": "Istemplate",
          "description": "True when this operation stands for a ×N fan-out"
        },
        "resolvedSourceEntityId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Resolvedsourceentityid",
          "description": "Entity id whose values would enumerate the fan-out instances, when known"
        }
      },
      "type": "object",
      "required": [
        "isTemplate"
      ],
      "title": "APITemplateMultiplicity",
      "description": "The ×N template marker of an ``Operation`` (design 01 §2, F5): the op stands for a\nstatically unresolvable fan-out. ``resolved_source_entity_id`` names the entity whose values\nwould enumerate the instances; the count N is never fabricated (design 01 §2)."
    },
    "BaseEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "$ref": "#/$defs/APIEntityType"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        }
      },
      "type": "object",
      "required": [
        "id",
        "entityType"
      ],
      "title": "BaseEntity",
      "description": "A base entity."
    },
    "ColumnType": {
      "type": "string",
      "enum": [
        "STRING",
        "INTEGER",
        "FLOAT",
        "BOOLEAN",
        "TIMESTAMP",
        "STRUCT",
        "BLOB",
        "DECIMAL",
        "DATE",
        "TIME",
        "INTERVAL",
        "JSON",
        "ARRAY",
        "GEOGRAPHY",
        "MAP",
        "BINARY"
      ],
      "title": "ColumnType"
    },
    "PortColumnFlowEdgeView": {
      "properties": {
        "sourceId": {
          "type": "string",
          "title": "Sourceid",
          "description": "The source endpoint entity id: a Port, Field, dataset, or column"
        },
        "sourceParentId": {
          "type": "string",
          "title": "Sourceparentid",
          "description": "The source endpoint's owning Port or dataset; itself when whole-value"
        },
        "destId": {
          "type": "string",
          "title": "Destid",
          "description": "The dest endpoint entity id: a Port, Field, dataset, or column"
        },
        "destParentId": {
          "type": "string",
          "title": "Destparentid",
          "description": "The dest endpoint's owning Port or dataset; itself when whole-value"
        },
        "transformations": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Transformations",
          "description": "Expressions applied along this flow"
        },
        "runIds": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Runids",
          "description": "Static extraction runs that resolved this flow"
        },
        "conditional": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conditional",
          "description": "Whether this flow is branch-conditional, when known"
        },
        "conditionExpr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conditionexpr",
          "description": "Resolved branch predicate, when available"
        },
        "callSiteKeys": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Callsitekeys",
          "description": "Source sites that established this flow"
        },
        "conditionExprs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Conditionexprs",
          "description": "All predicates observed for this flow"
        },
        "portFlowEvidence": {
          "items": {
            "$ref": "#/$defs/APIPortFlowEvidence"
          },
          "type": "array",
          "title": "Portflowevidence",
          "description": "Paired call-site and predicate evidence, including explicit empty unconditional entries"
        }
      },
      "type": "object",
      "required": [
        "sourceId",
        "sourceParentId",
        "destId",
        "destParentId"
      ],
      "title": "PortColumnFlowEdgeView",
      "description": "One dataset-boundary PORT_FLOW edge (ADR-2c23c57d, FOU-15095): a data flow between a Port or\none of its Fields and a dataset or one of its columns, which makes the operation a visible hop\nin lineage. Whole-value flows use the Port and dataset themselves; granular flows use their\ncontained Field and column entities.\n\nA source→dest pair like every other served edge — the direction is the edge (ADR-226d3631), so data\nflows from the source endpoint to the dest endpoint. Exactly one end belongs to the port side\n(a Port or Field) and the other belongs to the dataset side (a dataset or column), in whichever\norder the flow runs. Which end is which is read off the parent ids rather than stated\nseparately, so the two can never disagree.\n\nEach end carries its owning canvas entity because the client cannot resolve it: a Field names\nits Port, a column names its dataset, and a whole-value Port or dataset names itself. Those\nowners are what the edge is drawn between — how deep each end anchors within its node is a\nrender decision, left to the client.\n\nPORT_FLOW's other shape — the port→port arg/return flow between two operations — is\n:class:`PortFlowEdgeView`, served separately because both of its ends are ports."
    },
    "PortFlowEdgeView": {
      "properties": {
        "sourcePortId": {
          "type": "string",
          "title": "Sourceportid",
          "description": "The source port's entity id (a RETURN / output port)"
        },
        "destPortId": {
          "type": "string",
          "title": "Destportid",
          "description": "The dest port's entity id (a PARAM / PAYLOAD input port)"
        },
        "sourceFieldId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Sourcefieldid",
          "description": "The concrete source Field, when field-granular"
        },
        "destFieldId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Destfieldid",
          "description": "The concrete destination Field, when field-granular"
        },
        "transformations": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Transformations",
          "description": "Expressions applied along this flow"
        },
        "runIds": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Runids",
          "description": "Static extraction runs that resolved this flow"
        },
        "conditional": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conditional",
          "description": "Whether this flow is branch-conditional, when known"
        },
        "conditionExpr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conditionexpr",
          "description": "Resolved branch predicate, when available"
        },
        "callSiteKeys": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Callsitekeys",
          "description": "Source sites that established this flow"
        },
        "conditionExprs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Conditionexprs",
          "description": "All predicates observed for this flow"
        },
        "paramBindings": {
          "items": {
            "$ref": "#/$defs/APIParamBinding"
          },
          "type": "array",
          "title": "Parambindings",
          "description": "The resolved invocation bindings on this edge (design 01 §3.1)"
        },
        "portFlowEvidence": {
          "items": {
            "$ref": "#/$defs/APIPortFlowEvidence"
          },
          "type": "array",
          "title": "Portflowevidence",
          "description": "Paired call-site and predicate evidence, including explicit empty unconditional entries"
        }
      },
      "type": "object",
      "required": [
        "sourcePortId",
        "destPortId"
      ],
      "title": "PortFlowEdgeView",
      "description": "One PORT_FLOW edge (design 01 §3, ADR-96f314e8): a port→port arg/return data flow, carrying the\nper-caller invocation ``ParamBindings`` resolved on it. Modeled on :class:`TriggerEdgeView` —\nthe port-topology + bindings the frontend anchors to per-port handles and shows in the inspector."
    },
    "PublicEntityOwner": {
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name",
          "description": "The name of the entity owner"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Email",
          "description": "The email of the entity owner"
        },
        "inheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor (a container, or a column's table) the owner is set on; null when the owner is set on the entity itself"
        }
      },
      "type": "object",
      "title": "PublicEntityOwner"
    },
    "RunOutcome": {
      "type": "string",
      "enum": [
        "succeeded",
        "failed",
        "running",
        "unknown"
      ],
      "title": "RunOutcome",
      "description": "How a run ended, as far as its served status says."
    }
  }
}