Contextfulv0.23.0

Docs / Guides

contract surface · 70-control-plane.md · 71-console.md · guide · card

Operator surfaces

The problem the surfaces solve

An operator configures what runs and asks questions of the results. Two failures matter most: a configuration edit that races another operator’s edit or arms a broken schedule, and a model answer that drifts from the stored rows. The control plane makes edits versioned and validated, and the console makes every answer rest on rows read under the operator’s own credential.

The hosted console has two pages, Admin for configuration and Query for questions. Each page and its API routes check a verified identity assertion and that page’s grant (wrong-page).

Flowchart diagram Flowchart, top to bottom. 11 nodes, 16 edges. operator → Query policy [query session]; → Admin policy [admin session] identity gate: Query policy → Query page [Query grant] identity gate: Admin policy → Admin page [Admin grant] operator console: Query page → turn loop [question] operator console: Admin page → control document [edit, apply]; → workflow canvas [workflow request] operator console: turn loop → store engine [admitted read tools]; → Query page [prose, widget, sources] operator console: workflow canvas → Admin page [workflow view] control document → reconciler [apply, reconcile]; → workflow canvas [pipeline versions] control plane: reconciler → armed set [arm due work] control plane: armed set → store engine [fire, dispatch] store engine → turn loop [governed rows]; → workflow canvas [run outcomes] identity gate Query policy Admin policy operator console question workflow request prose, widget, sources workflow view Query page Admin page turn loop workflow canvas control plane arm due work reconciler armed set query session admin session Query grant Admin grant edit, apply apply, reconcile pipeline versions fire, dispatch admitted read tools governed rows run outcomes operator control document store engine

From document to running job

The operator edits one configuration document. A credential value typed into a field fails, because the document holds references and the backend holds material (secret-in-document).

The example adds a nightly fold job for the table record_sync_records. Validation checks that the target names a produced table (target-unbound), and a document failing validation claims no version (validation).

A second operator applied a minute earlier, so this apply’s compare-and-swap loses. The surface reloads the winning version and reapplies the pending edit onto it (version-race). Admin edits and applies also need the server’s admin capability (admin-grant).

The reconciler polls the applied document’s pointer and diffs the schedule set (poll-cadence). If a poll fails, the armed set keeps running unchanged (fail-static).

An unreadable schedule string holds back its own entry alone, and every other entry arms (unreadable-schedule). A job kind outside the closed union fails validation (job-kind-unknown).

At the job’s instant, dispatch starts one instance in a bounded pool. A worker running the fold goes silent, and its work moves to another worker under the next attempt number (heartbeat-lapse). The silent worker’s late callback carries the old attempt and changes nothing (callback-rejected).

A store-driven item whose body names a delegate runs on it: code deployed outside the binary and reached over one signed HTTP request (binding). Its answer is a closed outcome: rows, a deferral, or a transient or permanent failure (outcome). A fire refuses a delegate bound in submit mode and names call, the mode it dispatches (submit-unfilled).

A data plane serving from a region its policy omits refuses to start (region-mismatch). Served routes create, pause and delete a tenant’s source connection through versioned claims (create).

Admin projects pipelines, jobs and models as one node and edge graph, with each latest run outcome (workflow-canvas). Run history lists each recorded run newest first (run-history), and the lineage view draws only what the operator’s own credential reads (lineage-view).

A deployment can publish those reads on a Data page outside the gate, read-only (public-data).

One question in Query

The operator opens Query on the field-notes store. Its registry entry carries no credential name of its own (authored-name). The server mints a per-reader credential; a refused mint falls back to a shared credential or surfaces the refusal (mint-refused).

Before any question, Query offers chips built from the tables the reader may describe (discovered-chips). The operator asks which records arrived this week. The vantage, the session’s time basis, parses as a calendar day (unparseable).

A turn plans over admitted read tools, replans once if the first round leaves the question open, and synthesizes from the governed rows (turn-flow). The server chooses every tool, so a call naming an unadmitted tool dispatches nothing (unadmitted-tool).

Prose exists only over a tool result (ungrounded-answer). The server redacts each streamed chunk before Query shows it (stream-redaction).

The rows carry a date column and a measure over distinct days, so component choice draws a line chart (component-choice). A view arriving from the client fails, because the server builds every view (client-authored-view).

After the answer, a second pass distils the exchange into learnings for later turns (distillation). A greeting at session start appears only when a new row matches an earlier conclusion within budget (absence-is-earned).

Posting an answer to a team channel under a service identity, on a schedule, fails (askerless-audience).

The client library

The client library reaches the engine through four deployment shapes. Its process transport needs a verified capability token before any protocol framing (stdio-credential).