Sources
Docs: Panes, Plots, Policies, and Preferences. Web App: The Current/Report picker chooses a data reading. Pane code reads the host’s coordinates throughgetParableContext().
Structure
A definition identifies code and schema. A data reading identifies Current data or one Report run. React and SQL use the same context so a page can display an older Report with a newer compatible definition without confusing the two.Schema
TypeScript and Rust share this generated data model. A context names either a
commit or a ref with revision, never both.
props.policies separately supplies
resolved Pane decisions; context fields and displayed capability booleans are
not credentials.
A saved Plot’s result.meta identifies the data that actually answered it.
For example, Current can resolve to Report R42 produced by definition v6 while
meta.context still describes the consuming v7 definition. The returned reading
identifies R42; changing the definition label would not make its data compatible.
Services
The Pane SDK binds requests to the host-selected definition and reading. It resolves source identities on the server, so a named SQL read does not require downloading private SQL. It also usesresolveParablePanes to resolve explicit
values and policy decisions; hidden or unavailable items return individual
refusals without discarding their permitted siblings.
SQL reads the same context:
principal.email, when present, comes from the authenticated account. Neither
Provider identity matching nor an application parameter can replace it. Unknown
context fields fail planning. parable_context() requires a trusted Parable
context; it does not invent a default identity.
When definition, reading, or authority changes, the host replaces the relevant
bindings and ignores responses from the earlier selection. Draft requests can
carry expectedRefRevision; a stale revision conflicts rather than running old
code with a new label. Separate Current queries remain live and do not promise
one atomic snapshot across the whole page.
Positional SQL parameters remain separate from context. Omitting an override
uses saved values; an explicit array replaces them. Existing Report data keeps
its captured inputs and refuses a different override. Parameters cannot change
the requester, Workspace, definition, or policy decisions.
Ponder’s Pane pictures use a captured reading with the requester’s verified
context, Pane references, and policy decisions. They can read only the captured
Preferences; they cannot run live SQL or write values. A missing or denied
required reference makes the picture unavailable. The picture does not invent
an actor, version, or permission to complete a render.
Security
Workspace surfaces check active membership, Parable participation, and current Policies on the server. Admin Ponder can inspect a definition and reconstruct its context for an active staff account without granting Workspace membership, after the Admin Ponder permission, selected Workspace line, direct RACI seat, and current Policies pass. Definition edits remain governed by their authoring Policies. Selecting an Admin Workspace keeps the same authenticated account. Plot planning, including preparation for publication, and live SQL execution still require that account’s active Workspace membership. Definition access alone does not authorize those operations; a direct RACI seat or Admin role cannot replace membership. The host resolves request coordinates and strips untrusted context metadata before forwarding queries. A prepared query or page cursor cannot be reused under another actor, definition, or reading. Returned policyauthorityKey values
invalidate stale presentation; they do not authorize writes.
A preview is governed by its actual inputs. A saved named SQL output also applies
its Data Policies. Source restrictions run before projection, joins, aggregation,
and limits. A SQL alias cannot remove an attached rule. For example:
record metadata
and typed value; SQL-output filters receive result columns. The current filter
language accepts scalar conditions and ANDs them together; volatile functions,
placeholders, aliases, and subqueries are refused.
A scheduled Report executes as the Workspace’s explicit principal and uses that
Workspace’s participation and current source/output permissions. It does not
borrow its creator’s credentials. A manual Report uses the authenticated
requester, whose authority is checked when execution starts.
Stability
Pipeline Current reads the latest completed compatible Report. Selecting a run keeps that exact Report, and missing or incompatible data is refused. Report provenance stays separate from the selected code version and from current access. Provider input replay is not implemented. A historical result with arequest_principal() Provider filter requires its captured principal, including
email. A Provider filter using full parable_context() currently refuses Report
materialization. Typed Preference inputs can instead be checked using captured
values under current Policies; deleting or hiding an input can make the result
unavailable.
A Report cannot yet bind the newly produced output of another pipeline Plot in
the same run. Ordinary SQL and previews can query completed pipeline results
with either Current or an explicit Report selection.