v0.1.0-alpha.495¶
Released 2026-10-22.
Features¶
Column-Level Lineage Graph¶
- Lineage reaches below the registered table to the source itself.
- Native hop beneath each source column, element links
- A remote GraphQL table's native hop names its required arguments
- A remote GraphQL table's native hop names its required arguments
Data Catalog Integration¶
- Data products are part of the built-in meta domain.
- Data products in the meta domain, reached by relationships
- A checker table reaches the table its contract scans
- The meta domain has a view-only data_product_edges view, related to data_products_meta by product_id.
- data_product_edges and the build-written lineage edge table
- data_product_edges names every table as the model does
- The meta domain has a view-only column_lineage_edges view with one row per column-level lineage edge: the source relation and column, the target relation and column, and the view that derives the target.
- column_lineage_edges in the meta domain
- The page and its panel's core are read from the meta domain as the user
- The graph and panel as rendered: readable domains and edges, a smaller halo, the full graph's foot in view, columns named with their table, column lineage once a table is expanded, the panel's queries a selection a line
- A column lineage edge's ends are source and target, not its column names
Derived / MV Processor¶
- A materialized view's build takes the same route decision a query with its definition takes: a definition one source reads whole runs at that source, on any engine kind, and only its result rows come back; they are staged beside the view's table and every build step reads them there.
- A view's build takes the query route decision; a single-source build runs at its source and stages only its rows
- A calendar can declare the local time its day closes at, in its time zone (an 18:00 close of business in Europe/London); a day then runs from the previous day's close to its own, every grain's boundary moves with it, and a daily view refreshes at the close.
- A calendar's day can close at a declared local time instead of midnight
- A config declares its calendars in a calendars: section (name and version required, then base_system, tz, fiscal_anchor_month, fiscal_anchor_day, retail_anchor, week_start, holidays, weekend and day_close), stored before the tables whose views name one and refused for exactly what the createCalendar mutation refuses; the model export writes them back.
- A calendar is declared in config; refreshMv builds a view sealed at a business day's close
- banking's setup commits each day before it is sealed; a seal that records nothing is refused
Materialization Store¶
- A table or a view is bitemporal by mapping three values to its columns: business_key (what identifies the same thing across versions), valid_time (the date the business gives the record: when it was agreed, booked or took effect) and recorded_time (when this version was entered or changed).
- A table or view declares business_key, valid_time and recorded_time in place of the view-level bitemporal mode, key and source time
- A table whose rows are its versions is read as of valid time and as recorded, on every surface
- A versioned table's read picks versions by its key and times whatever the role sees, answering only its columns; the compiled stage is tested
- A view over a versioned table inherits its history; each refresh recomputes only the valid dates recorded since, reads travel on valid time
- Every table and view setting at creation, the Time Travel section in create and edit, the HISTORY badge, the history note and the bitemporal how-to
- A table is registered or updated with every setting in one transaction; a refusal leaves nothing applied
- One save is one transaction; view checks before commit; naming from the server
- The register form's registration is not a busy flag; the mask-list exemption follows the split
- A table updated in place keeps its versions in a captured log
- The build loads what a table maps; a version log's interval and lateness are set on its row
- The version log's settings follow the form rules; banking's init script is executable
- reproduce's "as filed" is cut at the report's first build; debug lines for the as-recorded audit
- A live Kafka table may keep the time Provisa lands each message
- A pgwire session sets its time travel with SET provisa.as_of and SET provisa.as_recorded (RESET either, or set it TO DEFAULT); every statement the session then runs, COPY included, reads as a request carrying the matching X-Provisa-As-Of / X-Provisa-As-Recorded headers does.
- SET provisa.as_of / provisa.as_recorded is the session's time travel for every statement it runs
Source Registration¶
- A CSV or Parquet source can be given its file by download, a third way beside a path and an upload.
- A CSV or Parquet source given its file by download, its table set up as a draft
- The draft table is the Register Table form's default, its snake_case aliases too
- The download choice reads as a field, its long words behind (?), and only a download source reads its TTL
- A template another Provisa release built is replaced, not loaded
- set-up-as-draft no longer reaches through the resolver's None self
Changes¶
3d¶
- The 3D views draw their colours true, on a stage set apart from the page
auth¶
- The right to a named environment is judged by the roles the org assigns
- A role set's meta-role is built in the environment the request names, unsecured and in the default org
- The default org's prod is served unbound, so a meta-role there needs no runtime readied
churnprod¶
- The tour's join step finds its relationship on any page; no refused step
code¶
- @columns batch column transforms for Node and Python sources
- A loader declared on any kind but a table is refused by name
code-hosts¶
- The remote host writes its certificate's serial in its one DER form
code-sources¶
- An uploaded archive keeps its file's name; the read view shows it; demo code pinned so its image can be built
- A code source its config declares is pinned when its model is built; its form lists the code's exports
- The Linux sandbox launcher runs by its file's path, not as a module
- The server directory's long explanation is help behind its (?), not a hint
- Pydantic row types read on purpose; field docs become column descriptions
codehost¶
- The front end speaks pgwire, its catalog its functions
codesource¶
- Pushdown declarations and name tables for code tables
- A name that only looks like a pushdown stays a plain parameter
- A read of one code table goes DIRECT, its residual applied by DuckDB
- One Python front end in every built image, the residual applied on the host
- A lockfile may be given beside any code that carries none; npm-shrinkwrap.json counts as the code's own
- A function's loader takes a join's keys in batches
- Each runtime resolution stages under a name of its own
- An engine reads a host's pinned certificate whoever wrote it
- An engine reads the organisation's client certificate whoever wrote it
- Closing a table's or stream's rows closes its call, not the collector
commands¶
- Host code is off unless the operator allows it
config¶
- The shipped configs' landed tables have a landing TTL, and every shipped config is checked on its engines
- dim_pet and fact_pet_inquiries read pets and inquiries by their names in the model
cypher¶
- An unlabeled relationship's property is read from its own properties, not its JSON
- An untyped relationship from a labeled node reads only that node type's relationships
- A path or an unlabeled relationship never crosses a table's link to its registration
data-products¶
- The data product graph's engine: layers, presets, filters and its 3D scene
- The product graph reads the meta domain as the user, by the names the server gives
- The graph panel reads its product when it comes into view; product links and lineage lanes from data_product_edges
- The graph's legend lists what is drawn, colliding labels yield to the higher-ranked one, and the panel's core leaves checkers to the quality layer
demo¶
- Banking -- end-of-day reporting without copying the ledger
- The profiling drift step shows what each drifting measure relates, the test checks every one involves postal_code
- Publish the banking demo; its tour reaches every step
- Banking is unpublished, like retail
- The demo keeps its own data directory, and its reset takes its environments' model history
- A notice's version time is the newest recorded time the dataset holds; debug lines removed
demo-bundles¶
- The node always pulls a demo's latest published version;
/wanted is gone
demo-stores¶
- An ask during a sync is served by that run; shared postgres and mongo healthy only once their real server answers
- The shared stores' health checks use the first address, as the sandbox node gives them two networks
- A Kafka demo's own services join the shared stores' network before they first start
- A superseded version's own Kafka on the shared Kafka's port is taken down before it starts
- A version taken down loses its bundle directory and the images no container still uses
- Recreate a shared store whose network is gone; say a failed start to the visitor
demo-tours¶
- churn's and retail's GraphQL and notebook steps read as the role their words name
demos¶
- Each published demo's video names its tagline, checked by check_demo
- cloud.provisa.dev serves worldcup, cloudpolicy and churnprod; a published demo must be in a tier's list
- Every demo shell script is executable, so a store's init marker is written on Docker Desktop
- The profiling demo shows drift between two runs and a table generated from the profile
- A demo's profile runs travel in its bundle and its template loads them
- A sandbox's tour warm-up sends each step as the role the tour has chosen by then
- Starthere ships supplies.parquet for its org's folder; the tour's live source reads it in place
- The open page waits for a demo still starting and opens it once it is ready
- A demo's stores are taken down sandbox.demo_stores_linger after its last sandbox closes
- A demo whose stores lingered out keeps its images
- A template's jobs wait while its demo's stores are taken down
deploy-cloud¶
- A deploy to the sandbox VM resets the sandbox tier
- Drop each sandbox schema in its own transaction
- A failed sandbox reset never leaves the tier down
- The sandbox reset wakes the coordinator first
- The sandbox-reset arm checks the tier's node first, as every arm
deps¶
- Pillow 13.0.0 and certifi 2026.10.19 for the CVE audit
embedded-pg¶
- PostgreSQL 16.11 via pixeltable-pgserver 0.5.1; pg_duckdb v1.1.1 (DuckDB v1.4.3)
- A killed postmaster's semaphore sets are released with its segment
- System V semaphore sets are macOS's alone
engine¶
- A native terminal's query reissues nothing beside a coordinator of another
entitlements¶
- No feature gate without the commercial plugin
environments¶
- A failed creation takes the branch it started; a branch with no environment is refused by name
federation¶
- The engine attaches a built code host as a Postgres catalog
- A code host is attached only for a built source that asks for it
- Every instance of a code-host connector reads the identity the schema build wrote
- Beside an engine of another user, its secret files are its group's
flight¶
- A read refused by name is answered UNAVAILABLE with its message
gcp-saas¶
- The wildcard certificate is kept in Secret Manager and renewed there
glossary¶
- The Ontology View: the graph engine scoped to the whole glossary
governance¶
- A table read through a physical alias is registered under its schema.table
- A table read through a physical alias is registered under its schema.table
graph¶
- A flat layout (tree, lanes) is seen from the front; shapes carry a little light of their own
- A tree is centred and spread so its names sit side by side; the frontal camera fits the layout to its field of view
- A filter of several values stays one line high; the Ontology View's e2e against the real meta views
- A glossary term's domains and references are null when it has none
- The Ontology View opens on everything, follows the page's search, draws the columns terms ARE, and lays out tighter or looser
graph-schema¶
- Its context and root fields come from one surface, taken once
- Root fields for every table the role queries, junctions included
graphql¶
- A root limit chooses root rows before a lateral join expands them (#278)
- A mutation the role holds no grant for is refused as ungranted, not as one its source cannot take
insider¶
- Match the mail with a code resolver, not host code
- Pair messages and deals through a declared screening scope
- match_deals reads the stored view by its registered name
- match_deals joins only along declared relationships
join-guard¶
- A union's columns are read once per check, not per column
kafka¶
- A landing-time column a store's own pipeline would leave unfilled is refused
meta¶
- A term's domains and its groundedness in the meta domain
- The glossary meta views follow the readable-term rule
metadata-export¶
- Org tier stored with the org; production-path e2e for every target
- Every ODPS field of a data product reaches each target
- Several targets per org; data products as ODPS and ODCS
- OpenMetadata 2.0.5, each member's ODCS contract imported
- A view member publishes to Atlas and Atlan with no source container; e2e harness reads as org_admin
- Google Dataplex data products replace bigquery_dataplex
- Microsoft Purview Unified Catalog data products
- Amazon DataZone data products
- DataZone revises its assets and products by the ids it recorded
- Databricks Unity Catalog data products
- Unity Catalog tags a view's column through ALTER TABLE and reads a share's full names
naming¶
- Store only the preset a convention names
nl¶
- A refused NL question is said by its code in the reader's words, not as its body
node¶
- Bun runs a source's code installing nothing
notebook¶
- matplotlib's font cache is built silently before handed-over cells that draw
- JupyterLab's splash removal no longer throws once the splash is gone
- Networkx ships with the in-browser Python
oracle¶
- A TIMESTAMP WITH TIME ZONE is fetched as a local time zone value, its instant kept
- A TIMESTAMP WITH TIME ZONE is cast to its instant in the database
- A statement is parsed for its zoned columns, then run once
orgs¶
- A destroyed org's jobs stop before its stores are dropped
- A destroyed org's jobs stop after its stores pass the delete's checks, before anything is dropped
packaging¶
- The image carries the regions sandbox tier's config
pgwire¶
- Trust mode asks for no password, so a checker with none connects
- The meta terminal binds the governed statement's parameters
- The meta terminal binds the governed statement's parameters
polly¶
- Every UI action through the admin API, as the chatting user
- admin_request uploads a file as its own bytes, as the app's upload routes take it
- read_screen reads the screen the user is looking at
- read_screen waits for a route's editor still loading, never reads it as absent
- A choice closed without picking is answered as closed, never as an empty message
profile¶
- The profile runs modal's tables sort and group, results expand, tabs down the side; View Profile Runs in the read-only panel
- The profile runs modal's tables filter by column and download as xlsx
profiler¶
- A measure that differs only in floating-point rounding is not drifting
replicas¶
- A pass whose runtime was dropped under it is left to the next runtime
sandboxes¶
- A release change reaps the open visitors' sandboxes at the tier's start
- The demos' embedding models load at boot on a bundled tier
- An open whose visitor left is closing; the front door outlasts the UI proxy
- An open names each stage as it starts and times it as it ends; a store lock wait names the store
secrets¶
- No product-written ${env:}/${secret:} reference without a documented convention
sonnets¶
- A join feeds lines_like its query; link_echoes is a statement
sources¶
- No pgwire write server for a source its config fakes with declared rows
- The Code group is Code Resolvers, "Business logic in Python or Node"; every source group is translated
sql¶
- A refused statement is said by its code in the reader's words, not as its body
synthetic¶
- A synthetic environment generates no profiler's or checker's results
telemetry¶
- Compaction finds a signal table whose bucket holds no metadata file
- The hourly reclaim leaves a table whose bucket holds no metadata file
tour¶
- Core tour steps act, then explain; a step builds a source live
- A sql step is ready on its statement's refusal and shows it
- A step's anchor rendered again is lit again where it now is
- Each demo's steps say only what serves the feature it shows
- The 12 locales say each demo's steps as the English now does
- The agriculture notebook step points at its figure, scrolled into view, and its words carry no results
- The profiling demo shows its run as terrain and postal_code's drift as strata
- A step whose Next picks a role is not the end because the role it leaves may open nothing after it
types¶
- A character type's character set names its base type (Exasol's VARCHAR(64) UTF8)
ui¶
- The splash halo follows the P's loop every frame, so the status note's reflow can't leave it off centre
- A code source's Remote host panel is on the Connection tab alone
- The tour steps import their prerequisites with a JSON import attribute
- A list's row actions are pinned at the row's end; the Materialized Store list's are never cut
- The Materialized Store list fits its pane at 1280 with no sideways scroll
- Backport monaco-editor 0.57.0's catch on the word highlighter's Delayer.trigger calls
- A product's checkers are read through the tables they scan
- An empty one-to-many in a meta read is null; the 3D stage gets WebGL in CI and says when it has none
- The Environments admin page and nav item are named DataOps
- Dialogs that never scroll; one vertical menu; panels and stages fill; terrain column choice; ontology labels are titles
- Every page's search bar reads one way: any word matches, a "quoted phrase" is one item
- A Grid checkbox on every 3D network graph shows or hides its floor grid
ui-core¶
- A checker source loads without its password set; an input-object action argument converts; the files spec waits for its server
- A checker names no password under trust mode; an import naming an unset variable is refused by name
views¶
- A view applying a column transform keeps its reference through governance