Vai al contenuto

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