Skip to main content

Schemas

📄️ AgentStepSpec

Workflow-agent call spec for an agent step. ``timeout_seconds`` is bounded on both ends deliberately. Without a lower bound a 0 or negative value passes storage validation and then fails the moment it reaches ``httpx``; without the upper bound a value above 300 is stored while never taking effect, because the agent control plane forwards with a fixed ``httpx.AsyncClient(timeout=300)`` and returns 504 first. Both are caught here as a 422 at save time rather than mid-batch. The 300 comes from that control-plane constant — if it moves, this moves with it.

📄️ EntityParameter

Shared request and response schema. Request: Action parameter accepted in an action definition that selects rows of one entity type. The caller names the rows by primary key (one value, or a list of up to 200 when `cardinality` is `many`), or the parameter selects them with its `set` definition and the call sends no value. The rows are read again when the action runs, and `derive` adds computed columns to each row. Response: Action parameter returned in an action definition that selects rows of one entity type. The caller names the rows by primary key (one value, or a list of up to 200 when `cardinality` is `many`), or the parameter selects them with its `set` definition and the call sends no value. The rows are read again when the action runs, and `derive` adds computed columns to each row.

📄️ LinkRef

One co-retrieval ``links`` target — always explicit about what it points at. - ``{"category": "semantic.table", "id": "semantic.table.…"}`` — that table. - ``{"category": "semantic.ontology", "id": "semantic.ontology.…", "name": "contract"}`` — that one entity of it. The two halves are checked against each other: an ontology link without ``name`` is refused (there is no spelling for "the whole ontology"), and a table link with one is refused (the id already addresses the whole table).

📄️ OntologyAttribute

One entity attribute as the catalog shows it. ``key`` is server-derived from the EntityType schema (``metadata.keys``) and can never be hidden — the join axis has to stay in the frame. ``visible=False`` narrows the LLM surface only (catalog / ``match`` / result frame); traversal still reads the column. ``dictionary`` sits on the *display* attribute people type, never on the key: a matched surface resolves to the key (D6 — measured 0/2 with the dictionary on the key, the model matches aliases on ``label``). ``description`` is imported from the EntityType field's ``metadata.description`` and may be overridden by curation, which is what a model whose fields carry no metadata depends on: without it the catalog hands the LLM a bare physical name (``hbp_knd_cd``) and the only way to learn what its codes mean is to query for them. ``values`` / ``samples`` are the value-grounding pair ``Column`` already has and carry the same meanings — ``values`` the exhaustive low-card domain, ``samples`` illustrative examples that ground the literal format. Both are curator-owned: an EntityType schema has no such concept, so an import never supplies them and a sync never overwrites them. Both are suppressed in the catalog for a dictionary-backed attribute, exactly as they are on a column, because one leaked canonical code primes the model to emit codes instead of surface forms.

📄️ Op

Shared request and response schema. Request: One step of the `ops` list accepted in an ontology request. Set exactly one of `where`, `traverse`, `union`, `intersect`, `subtract`, or `derive`; `direction`, `depth`, `to`, and `alias` apply only with `traverse`. Response: One step of the `ops` list returned in a stored ontology request. Exactly one of `where`, `traverse`, `union`, `intersect`, `subtract`, or `derive` is set; `direction`, `depth`, `to`, and `alias` apply only with `traverse`.

📄️ Pin

``versions`` names the reading point exactly, per mirror table, for a reader going back to a state it has read before. A stamp is resolved to a version each time, and a later writer can put another version under a stamp that was already read — a resync stamps what it scanned with the LSN it read BEFORE scanning — so the same ``txn`` can come back as other rows. A version cannot. ``txn`` stays: it gates the read on the watermark, and it resolves a table ``versions`` does not name. What a bookmark is to every log reader — Kafka's offset, Iceberg's snapshot id, Delta's ``versionAsOf`` beside ``timestampAsOf``.

📄️ PipelineData

Shared request and response schema. Request: Pipeline port reference accepted in a pipeline definition. Exactly one of `dataset`, `entity`, `relation`, `source`, `view`, or `variable` must be set. Sources and views are input-only and are rejected for output ports. Variables are limited to Python steps, cannot be named `event` or `objects`, and do not support `version`, `row_filters`, or `column_masks`. Response: Pipeline port reference returned in a pipeline definition. Exactly one of `dataset`, `entity`, `relation`, or `variable` must be set because `source` and `view` are input-only. Variables are limited to Python steps, cannot be named `event` or `objects`, and do not support `version`, `row_filters`, or `column_masks`.