v0.1.0-alpha.491¶
Released 2026-10-18.
Features¶
Infrastructure¶
- Trino internal TLS is an operator option, off by default.
- Name the coordinator Service's HTTP port, so internal TLS's second port is accepted
- Trino internal TLS uses a chart-generated certificate naming the coordinator Service and the namespace's pods; no address pinned
- Engine catalogs and their credentials live only in the engine's memory.
- A worker gets no catalog store, which it refuses
MCP Authentication¶
- An MCP agent never acts beyond the roles it was given.
- A stdio call acts only within the roles the server was pinned to
- Derived Roles in the Roles list; every role and row rule says what it is for
- Naming a role the caller does not hold is a high-severity security event, detected on every transport (the HTTP API, MCP, pgwire, Bolt, Arrow Flight, the airport Flight service and gRPC).
- Naming a role the caller does not hold is a high-severity security event, refused, recorded, notified, and suspending the credential where no browser shares it
- On the HTTP API a refused role is named to every credential but a personal access token
Role Assignments¶
- A role grant Provisa holds (a user_role_assignments row) may be time-limited, and a role may remove its grants once they go unused.
- A role grant can expire, and a role removes its grants once unused
- The role form and detail panel carry remove grants unused for N days
- An org schema made before role grant expiry gets its columns before the org registry view reads them
- Each org's grant table is reconciled before the view reads its expiry
SQL & Multi-Protocol Client Access¶
- The Python client reads a governed SQL, GraphQL or Cypher statement into a pandas DataFrame with one call, query(text, role=None), the same on a desktop Python and in the browser (Pyodide), with aquery as its awaitable form.
- The notebook and browser-reads requirement is
Security¶
- A role constant (session_vars) may be a ${env:NAME} or ${secret:NAME} reference, resolved through the same resolver as every other reference (provisa.core.secrets.resolve_secrets), at use: when a request's session variables are formed, when the regional administrator's are, and when a meta-role inlines a member's constant.
- A role constant may be a ${env:} or ${secret:} reference, resolved at use
- Saving a role refuses a ${secret:} constant, which takes part in the query and can be logged; the docs and the role editor say so
- A role constant's ${secret:} reference is saved like any other; its records are covered by central redaction
Write Admission¶
- Per-table write grants.
- per-table write grants replace column writable_by
- A meta role's write grants fold as its reads do; presets proved on GraphQL
- A table's Writes section reads and edits its write grants
- A table's mutations name its columns as its reads do
Changes¶
admin¶
- The admin GraphQL API answers HTTP alone; a request nobody was resolved for is answered no catalog
auth¶
- With no auth provider the admin catalog is the named role's; a demo seeded into an org reaches its own sources
- A first start with no config declares no derived roles
bitemporal¶
- Read a view as recorded at a time, beside as of
cdc¶
- A captured table carries its source commit time, source_committed_at
- An upsert of the row a landed table already holds is no change, and fires no trigger
- Each org environment holds its own logical replication slot
client¶
- query() reads as a DataFrame on desktop and in Pyodide; %%sql/%%graphql/%%cypher magics; connection from env or profile
- The SQLAlchemy dialect reflects the SQL catalog the role is served
config¶
- A relationship the configuration declares is registered or the load fails by its name
cypher¶
- A node's property is its column's published name
database¶
- A pooled connection drops its prepared statements when its org scope changes
demo¶
- Hasuramigration -- a Hasura v2 storefront imported in one step, then joined to Salesforce
- hasuramigration's tour visits Salesforce before it signs in as a role
- Hasuramigration requires 0.1.0a491
- Reproduce -- a regulator's exposure report traced and reproduced as filed
- A sandbox carries the refresh records of the history it was copied from
- reproduce's card, the report as filed, from its real answers
- Churn -- governed, masked features into pandas and a model trained in the Notebook tab; a named demo ships its own notebook
demo bundle¶
- A build's servers are told where DuckDB finds its extensions
- A setup server's store missing where the views are exported from is said with every store the build holds
demo bundles¶
- A build's servers take their own Flight, gRPC, pgwire and Bolt ports
demo regions¶
- A template's replica store is read for the template org, whoever waits for it
- A template's first build lands in its region's store
demos¶
- The agriculture demo, does weather explain crop insurance losses
- The provisioning demo -- datasets told ready on Kafka and pulled over Arrow Flight as of that moment
- main's failing demo and UI guards; the provisioning demo needs 0.1.0a491
- A setup step runs a demo's own client; the provisioning bundle records a pull for each team
- Every demo's stores publish ports no other demo's do
- A sandbox's "tour warmed" line shows at the hosted tier's WARNING level
- The hosted sandbox tier offers the quality demo
- The pharma demo -- which of our products face shortage or recall risk
- A regions sandbox tier, so a demo in regions runs live
- pharma's store publishes 29532 and is healthy only once loaded
- Opioids registers the columns its landing filters name
- The sandbox tier loads the demos' embedding models at startup
- Storefront -- one model serving an app's backend and its BI
- storefront's other locales drop the scaffold's step words English no longer has
- storefront's GraphQL example runs as the customer, as its words say
- provisioning's close joins along its relationships; its feeds ready before Provisa reads them
- opioids' fiscal year term no longer relates to itself
- Opioids reads the two govdata year columns as the text govdata serves
- agriculture's answer relationship names its view by its registered name
- A season with indemnity and none for dry weather has a dry share of 0; the relationship check skips no demo
- Publish vulnerabilities, agriculture, streaming, storefront, hasuramigration and churn
deploy¶
- The overlay publishes a sandbox VM's tier on its VPC address
- A coordinator with a sandbox VM gets no demo stores of its own
- The API push leaves out the checkout's _graph_render symlink, which the image holds as a directory
- Private plugins go to the containers on each node; the sandbox VM's tier gets them there
duckdb¶
- A PostgreSQL store is attached by the URL libpq reads, without its driver
embedded pg¶
- A killed postmaster's shared memory segment is released before its directory goes
engine¶
- Trino keeps catalogs in memory; Provisa reissues them after a coordinator restart
- Kafka client properties are Trino's alone, on a shared tmpfs; stack start and cloud deploy remove the on-disk catalogs
- A Kafka source's SASL settings reach a hosted engine shard through its in-memory Secret; a restored terminal reissues the Kafka catalogs
events¶
- A view over a view not yet built is wired when that view's first build lands
- A view over a replica not yet landed is wired when the replica lands
- Each org's event loop is held by its own runtime
explore¶
- Data Science area, Python tab: Pyodide in a Web Worker over governed data, as the page's user
- The Data Science area fills its space, editor and output split by a draggable rule; no repeated heading
- Data Science area, Jupyter Notebook tab: JupyterLite on the shared Pyodide, reading as the page's user
- Python and Notebook tabs of their own, kept alive between visits; Polly writes into and runs either
- The Python tab holds several scripts as tabs, kept across reloads
federation¶
- A table whose server was starting is attached once the statement has waited for it
flight¶
- A Flight ticket reads bitemporal views as of a time
govdata¶
- Every connection to the connector server signs in with the source's AskAmerica key
- A floored AskAmerica source's replica is built through its server
governance¶
- Faked columns read under every published name; joins compare real keys
- An ORDER BY of an output column orders the rows under every role
graphql¶
- A subscription field takes its table's query arguments
- A table's similar input is built once per schema; integration setups follow the product they test
helm¶
- A change to the Trino config rolls the workers, as it does the coordinator
import¶
- A Hasura v2 import that basically works, with a three-part report
- Hasura session variables are claim-supplied attributes of their own
- Name each environment variable a converted handler URL reads
jira¶
- Jira Cloud is a source type read and written through its Calcite connector
jsonapi¶
- A resource's id is its primary key, and what it includes is linked from it
kafka¶
- A table's first listener reads from the earliest offset, missing nothing published after its landing
- What reads a topic onward starts exactly where the table's landing stopped
- A Kafka source without a schema registry is refused when saved for an org on an engine shard, and never stops the boot
launcher¶
- --list-demos lists the named demos; the README says how to try one
lineage¶
- Refresh lineage records are queryable on DuckDB, under the names Trino gives
live¶
- A live Kafka output resolves its broker's address
- A live Kafka output publishes a row with times and decimals
mcp¶
- describe_role answers the role an agent acts as and the roles it may switch to
meta¶
- A table links to its registration by its domain and its name as queried
mv¶
- Time travel on the source's clock, and over a range
- A view the event loop builds is recorded on its region's build row
- A snapshot view's correction at the same source time is the version in force
native engine¶
- The ops signals are never attached as the provisa-otel source
notebook¶
- Assets rebuild when what they are built from changes; the notebook wears the app's colour scheme
- Embed JupyterLab so documents open inside the tab; dev server redirects directory URLs
- A new notebook opens on the starter cell under JupyterLab
- The notebook takes the app's colour scheme only once JupyterLab is restored and its splash gone
ops¶
- Each org reads its own ops signals
orgs¶
- Each org's views and table settings are held on its own runtime
- What each org's build records about its sources and tables is held on its runtime
packaging¶
- provisa-notebook is part of every install
- The macOS DMG builds retry hdiutil create on the runner's Resource busy, bounded
pg engine¶
- A read reports its columns' types, so a view's output is learned and the view scheduled
pgwire¶
- COPY FROM STDIN refuses a format it does not read
- pg_get_constraintdef answers each constraint's definition as PostgreSQL writes it
- A source's server is never given a port another process listens on
- A replica is landed from its server's registered columns
- A stopped server's port is free while its closed connections sit in TIME_WAIT
polly¶
- Polly writes Python into the Data Science area, runs it and reads what it printed, returned and raised
provisioning¶
- The broker's CLUSTER_ID is a 16-byte base64 UUID
- Version time and margin carry no edge to themselves
provisioning demo¶
- The producer reads the orders topic's partitions once the broker has described them
- Each team pulls the whole dataset, not the row limit's first rows
push¶
- A push listener resolves its source's address; a push-fed table's node asks for no build
- Prod and no environment are one listener and one batch poll
quality demo¶
- The demo ends on a data product of gold, silver and the checks
regions¶
- Eu builds its views from what lands once, its build record outlasts the sweep, and a reader is not held to another region's view's inputs
- A region's node reads the ops views over the record and state it keeps
- Trino reads a region's ops views over the record and state it keeps
- A demo org's region stores are bound before its model is reset
relationships¶
- A relationship a remote source offers is not kept beside the declared one it is
replica¶
- A landing filter's identifiers are quoted in the read that applies it
- Two processes ensuring one foreign table converge on it
replicas¶
- A SQLite file's table is read through its driver by its name alone
retail¶
- eu-shop lands once and is never re-read, so it states cache_ttl -1
- A us node reads eu's sources, a grouped view keys only on what it outputs, a regions demo builds
- Each request edge has its own type, so the US one is registered and subject_access's US join is approved
roles¶
- main's new role fixtures carry descriptions; the last pseudo names go; the grant picker's test reads its open popover
row limit¶
- A stream drained after its request returned is checked in the request's org
runtime-deps¶
- Every pgwire bundle is fetched from engine-v0.118.0
salesforce¶
- The write route reads its result types from a pgwire server
sandbox¶
- A sandbox VM publishes its tier on its VPC address, where the coordinator reaches it
- The sandbox VM starts its demo-stores sync at setup, not at its next boot
- A request that finds the sandbox VM stopping starts it once it is down
security¶
- A role's constant session values
- A request acting as several roles reads and writes each row as the roles whose row filter admitted it
- An approved join reads the real key, and fakes and kept writes are read row by row as the roles that admitted each row
sources¶
- The type list reads its engine reach from the source kinds, not the platform's engine settings
- A Redis source is refused when saved for an org on an engine shard and never stops the boot; no description files for Elasticsearch, which reads none
sql¶
- A table's name and domain read in SQL as GraphQL reads them
- Refuse a statement whose clauses are out of order
subscriptions¶
- A landing reaches a subscription bound to prod
telemetry¶
- Metric points and log records record the org they were written for
- Compaction keeps a metric point's and a log record's org as its tenant
- A signal table whose metadata cannot be read is said and left alone
terraform¶
- A node waking with the startup script it last completed sets nothing up again
- Docker waits for the coordinator's object-store disk
tour¶
- A step groups the graph on screen by a property; the reviews tour reads its graph by degree
- A demo tour step opens a data product on its page; the quality tour ends on its product
- A demo tour step can show a picture
- A role step off the SQL explorer picks the role in the header's picker
- The step counter counts the itinerary the tour started with
triggers¶
- A config file's on: {table, event} trigger loads
ui¶
- A refused page offers the held roles that grant it
- Claim roles saves a typed claim type, says when it saved, and explains itself plainly
views¶
- A user's read of a stored view outside its read window is refused on every call
General¶
- A visitor's first requests record once; __typename is the object's type; walks are per org