Ir para o conteúdo

v0.1.0-alpha.497

Released 2026-11-01.

Features

Business Glossary & Ontology

  • A term's lifecycle is one status: draft, live, deprecated or retired.
    • PII on terms is its refusals in every UI locale
    • A term's status -- draft, live, deprecated, retired
    • A term's status -- Draft, Live, Deprecated, Retired -- and Deprecate, with a retired term's record
    • Term status is set by people, grounding is computed; agents see approved grounded vocabulary
    • Term list chips are icons (Box, Tag, Lightbulb, Eye, PencilLine)
  • The ontology reports what a curator should look at as findings: GET /admin/glossary/findings (glossary_read, scoped to the caller's domains) returns each term with its findings, each a kind, a message code with its parameters, and a message.
    • Findings -- what a curator should look at, per term
    • To review reads the server's findings; Retire takes a successor and asks about lost tags
    • A product's status -- draft, live, deprecated, retired -- its lifecycle dialogs, findings and withdrawal from catalogs

Column Masking

  • Every regex a user gives Provisa, a mask's pattern and replacement among them, is written in one universal dialect: the portable subset of literals,., sets [...] with ranges and negation, the greedy quantifiers * + ? {n} {n,} {n,m}, the anchors ^ and $ (the whole value), groups ( ) and (?: ), alternation |, and \d \s \w as their ASCII classes; a replacement is literal text with $1-$9 and $$.
    • One universal regex dialect, refused by name at save and lowered per engine
    • Preset placeholders as {first}/{last}; alternation warnings in patterns with ok true
    • A regex mask fails closed -- an unmatched value is fully masked
    • A null result value arrives unset, not as its type's zero

File & Lake Sources

  • A files source reads each Excel workbook as the tables it holds.
    • A files source's Excel hints, on its form and in its mapping

Changes

3d

  • A 3D stage draws on demand and nothing while unseen, so an idle page costs no CPU
  • A turning stage stops after 10 s with no input on the page, and the core e2e lane runs with reduced motion
  • Every network graph opens on its best view, turns about its spread plane's normal, and has a 2D view

admin

  • The catalog and a table save stay within the acting role's grants
  • A column's dependents are answered as their caller may read them
  • Refusals name only what their caller may read; new tables answered at once
  • The profiler, DQ and findings answer within the caller's grants
  • fakes, synthetic data and the glossary within the caller's grants
  • profiling, audit text and observability within the caller's grants
  • Edits and delegations stay within the caller's reads
  • Refusal texts name only what their caller reads
  • capgrants10 -- a request's acting role reaches every surface
  • capgrants11 -- the workbook answers a table saved since the build
  • An OpenAPI source whose document is out of reach fails no Tables listing; its tables say why

agentdata

  • Ask over two weeks, where customers do order twice

aggregates

  • An aggregate or group-by with its nodes is one statement

analyze

  • Cap the drawn plan tree under Mermaid's 500-edge limit

api

  • The build loads each domain's stored graphql_alias
  • Answer a MERGE/form or RETURNING write refusal as a 400 by name
  • A client's error never names an internal schema
  • An error naming no org word has no internal schema to take out

askamerica

  • Prepare the adapter's catalog on first use; a key-check timeout is AskAmericaUnavailable

athena

  • registerTable records the table format; a Hive MERGE is refused as a MERGE

audit

  • A governance read on the writer thread runs in the request org

auth

  • The login throttle keeps no failure past its window
  • A named role set acts as its meta-role on every route, unsecured
  • Unsecured gRPC and Flight bind a derived role's attribute; Bolt databases name derived roles
  • A principal's role assignments are read one way on every transport
  • HTTP's rules after the read apply on every transport

bench

  • The lifecycle sizes every device's boot disk with one flag
  • A ready device waiting for the others keeps its idle hold; each device's setup log is kept before destroy
  • The backends device can be given its own machine type, its stores being sized for a large box
  • One service builds the perf Postgres image; the engine runs it, so a parallel build no longer fails on the shared tag
  • The backends agent is started when it does not answer, and the serve stop matches no shell of its own
  • Seeding is its own job stored as an image; runs boot from it, checkpoint each variant and resume after a preemption
  • Soak profile, sampled server tree, leak probe maps and pools
  • The features test's first CI run, triaged
  • Masks are checked per table, and MCP is pinned every role a features request names
  • A local soak validation on the test instance, its contract readable everywhere
  • A step's first error names the request it answered
  • A sparql transport, its own dialect, rendered from the same contract
  • The row-level refusal on gRPC, table TTLs in the apply phase, optimistic cells
  • The Artillery ramps check their answers; the Cypher ramp uses live labels
  • A saturation ramp's failed expectations do not end the sweep
  • Bolt saturation coverage, Cypher cache opt-in, GraphQL ramp, no pg stand-ins
  • The three-device server names a public URL for the SPARQL vocabulary
  • The governance pass reads only orders, with columns to mask

bolt

  • One statement per RUN; a transaction's results pulled by qid
  • The browser's graph totals are unknown, not 0, when a count fails
  • A commit and an auto-commit result end with a bookmark
  • Temporal and point values travel as Bolt structures
  • Only the parse decides a statement is a write; a write's own error is its answer
  • neo4j names the home database
  • Summary counters for Cypher writes on both write paths
  • A Bolt RUN runs in its principal's graph session
  • Answer CREATE/DROP DATABASE and select a created database

bolt, cypher

  • Bolt and the Cypher route run a write through written()

build

  • The model stamp is read after the build's own effective-name writes
  • A reload writes no relationship name already stored
  • A column transform's grants are folded over each role's ancestors

calendars

  • The saved message names a calendar's version once ('v1', not 'vv1')

catalogs

  • A Catalogs panel holds each catalog connection once, by domain

clickhouse

  • A query that matches no row still names its columns
  • The engine runtime's query names its columns when ClickHouse sends no block

codesource

  • No engine attaches a code host; the image's front end serves no reads
  • Code sources answer their own statements, direct and attached
  • Code rows streamed end to end, a connection per concurrent call
  • A code statement is complete only when read direct; a null test names an aggregate's expression
  • Credit flow control, and a code source's DuckDB under the operator's bounds
  • The read context, (inputs, context) for every table and stream, no parameter-as-filter
  • Speed and memory as built, measured
  • SQL and GraphQL mutations on a code table, routed to its commands
  • A statement that fails stops reading the function's rows
  • A worker closes its socket only once its reader has left it
  • Connecting a remote host dials it to pair and to check, no third time
  • A worker closes a lane's socket only once its reader has left it
  • A code host's DuckDB is opened capped, by its source's own bounds
  • The image copies core's engine_memory beside its front end; no symlink
  • A column transform streams its read through the workers in 1000-row batches
  • A column transform in a CTE is a staged, selective step
  • An INSERT... SELECT whose CTE holds a column transform is refused saying so
  • A staged CTE is typed by the model, its reads take their own parameters, embed() folds with them
  • A pulled call keeps the request that asked for it
  • A dropped pairing connection is a named refusal

commands

  • SQL expression functions in SQL statements, acceptance test, locales
  • Implicit meta reach for schema build and command admission only; defaults fill without refusing
  • APOC path walks either way from a label back to it; docs for defaults
  • A function the engine cannot write is refused by name at compile; sources route around; anomalies page generated
  • A domain-prefixed command field is registered under the alias the schema names it by
  • VOID commands; implicit-argument CALL in Cypher

compiler

  • A where states a relationship's condition, compiled to EXISTS over its target; ilike matches with case ignored
  • A session's temporary table comes ahead of a model table of its name
  • Dropping an API table's union branches keeps a recursive CTE valid (#312)
  • A relationship target is read under its join alias
  • Pg engine reads a key-bounded nested field once

config-export

  • A contract's created_at is the store's stamp, not written into the config export

conformance

  • Type the pgwire fixture's columns as registration does
  • The pgwire seed types a subtype as registration does, never sampling money
  • TCK setups run with their query in one ephemeral session over Bolt
  • The TCK's Bolt sessions sign in as a user mapped to tck_empty
  • Bolt examples run as written under a role of their own
  • TCK session setup ignores post-query steps; compare side effects
  • TCK named graphs run their script in a session; test procedures are commands
  • Every case is passed, skipped by design or failed
  • Client and suite skips are skipped by design
  • Cite driver and suite source for client and suite skips
  • A TCK procedure's command is assigned to the roles that call it
  • A control query on an empty graph reads the empty session
  • A Bolt date time at offset zero is written Z, naming no region
  • A pg_catalog function not served is failed
  • Skip internal and index catalog functions by design
  • Hash functions leave the Index functions group
  • Form checked, a third status in the functions run
  • Catalog function results by engine with rule footnotes

contract

  • A column is declared, never promised; Promise means a data quality check
  • Panels in three tiers on a shared layout

contracts

  • A contract keeps its versions and names its breaking changes

core-lane

  • DuckDB databases opened capped; a Kaggle token is its own credential; provision.py argv; tour clickBefore once; a single-file draft table
  • Every DuckDB the base opens bare is capped too; OpenRouter passed once; Fuseki's heap sized for the e2e

cypher

  • A GraphQL query of several root fields is a Cypher statement per root
  • A GraphQL root's Cypher means what its SQL means
  • A junction root is Cypher only for its declared types; one-table columns and IN lists
  • A Cypher box of several statements answers one result per statement, each under its own tab
  • A Cypher read answers what the statement says
  • A single-hop type alternation over one junction's types
  • A filtered root keeps its filter; a junction field or condition is its relationships
  • A table semantic SQL names before its physical alias has its label
  • $3 is the parameter named "3", not the number 3
  • A query's Cypher carries the values its SQL binds
  • A read using the engine's functions is answered by the engine
  • A list function answers on DuckDB, and a slice is 0-based
  • A map's key is read with.key, and a carried variable returns only itself
  • A junction field's end node, built as one JSON object, has its Cypher form
  • Open as query keeps a to-many field's own order and limit, or refuses
  • A WITH right after a WITH reads the rows that WITH carries
  • An UNWIND variable is each element, not its UNNEST's whole row
  • An unlabelled node read backward is the relationship's target
  • A node a property narrows to one type is built from its arm; a property of a node is a value, not the node (#292,)
  • DESC puts nulls first; LIKE exported exactly; DuckDB LIKE escapes as PostgreSQL
  • =~ matches the whole string; ENDS WITH is literal; Trino LIKE escapes as PostgreSQL
  • A read missing a required parameter is a 400 naming it, each parameter once
  • Every graph-route error is the app's error body; the frame says the reason and lists each access violation
  • A mistake in the user's statement is refused at translation in their own terms
  • An unbound name that is a bound variable's property is offered as it
  • Every surface offers a bound variable's property for an unbound name
  • A returned map literal answers its values, not their JSON encoding
  • A property the label has not is null; every node's key is its _id
  • Every node object and every walk holds a node's whole key
  • What a read cannot answer has a code -- a failed conversion is null, Infinity is a 400, an engine's refusal is a 400 on every engine
  • A read refused by name is answered with its own status and code, not a 500
  • A refusal by name in a CALL, a write or the Neo4j endpoint is answered as itself
  • A MATCH takes comma-separated patterns
  • An OPTIONAL MATCH's WHERE is that match's condition and never removes a row
  • An OPTIONAL MATCH takes comma-separated patterns and matches whole or not at all
  • length(p) of a recursive path is its hop count; an undirected walk recurses both ways
  • A statement with no pattern is a SELECT with no FROM
  • Map arguments in CALL; number literal forms, ^, RETURN *, WITH DISTINCT, deep literals; parse errors are refusals
  • mixed-type list literals, time values, deep-literal and map-temporal refusals by name; write refusals name the forms read
  • Unaliased RETURN expressions named as written; sequence() is engine-only
  • Relationships written without brackets (--, <--, <-->) are read; a single dash is refused
  • A variable naming two things, an aggregate in a list comprehension and length() of a node are refused
  • A WITH carries each node it names as that node (#293,)
  • date(), datetime(), localdatetime(), time() and localtime() are casts or the engine's current value
  • Column name conflicts, UNION column and kind mismatches, integer overflow, unknown string escapes, non-boolean operands, aggregates of rand() and a value matched as a node are refused
  • Every unaliased RETURN expression, a property included, is named as written (a.name)
  • Durations -- ISO-8601 answers, properties, duration(), between/inMonths/inDays/inSeconds and arithmetic, on the engine's interval
  • Temporal values from component maps, Cypher's written forms and other values; answered as Cypher writes them
  • date.truncate, datetime.truncate and the rest, with components put in after
  • A date's, a time's and a date time's parts read as properties
  • A zone the query names is computed with and presented; microsecond precision, nanoseconds as zero
  • size() of a list written in the statement is counted there, size(null) is null; tested on DuckDB, PostgreSQL and Trino
  • size() of a registered text column is its character count on every engine
  • size() of any string -- a string function's value, a concatenation, a variable bound to one -- is its character count
  • An edge touching a table SQL alone serves is no relationship of the graph
  • A float divided by zero is Infinity or NaN, as openCypher answers; an integer divided by zero stays an error
  • A statement that is not Cypher is "Invalid input", as Neo4j says it
  • A node matched with no label keeps each property's type, and has labels
  • XOR is two booleans differing, written as SQL reads it
  • An integer divided by an integer is an integer
  • IN, string predicates and IS NULL bind between + and a comparison
  • List quantifiers over nulls are three-valued
  • A list + an element appends it, an element + a list prepends it
  • reverse() of a list reads it last to first on every engine
  • keys() of a map answers its keys; m['k'] reads the key's value
  • Values of two kinds are never equal and have no order
  • A function inside collect() or another renamed one is lowered too
  • properties() of a map is the map, of null null
  • A CREATE answers its RETURN, and a junction relationship is written between matched nodes
  • A string + a value is the two as one string
  • time.truncate() of a time or a date time keeps its offset
  • A node CREATE without a variable is a write
  • duration() reads a computed ISO-8601 string with negative or fractional parts
  • collect() skips nulls, and collects nothing as []
  • A relationship CREATE reads each matched node apart
  • toInteger() cuts toward zero; SPARQL's xsd:integer casts as XPath does
  • Values the statement writes wholly are equal, in, and ordered as Cypher says
  • A CREATE giving its node no property is refused naming the forms read
  • A map a WITH carries keeps keys that differ in case apart
  • A list of several types built from lists answers its values
  • CASE, string predicates and indexes across kinds; UNWIND null; RETURN * by name
  • An item of a list of several types has its size
  • A key every unwound map literal gives one type reads as that type
  • An item of a list of several types answers its value, in openCypher's order
  • toString() of an item of a mixed list, and a key of a nested map literal
  • NaN is equal to nothing and has no order, on every engine
  • A string's \uXXXX escapes are read; the TCK runner reads cells as Gherkin writes them
  • range() with a step of 0 is refused by name
  • [..] is refused as [] is; unbounded patterns are by design
  • A list or map literal of any depth is read; MAX_LITERAL_DEPTH is gone
  • range() with a computed step of 0 is refused by the engine
  • An OPTIONAL MATCH from a variable bound to null matches nothing
  • A deep literal with computed items reaches the engine without its nesting
  • A list slice counts a negative bound from the end
  • Temporal values beyond the engine's bounds are refused by name
  • A computed list index is 0-based, as a written one is
  • A key of a map read from a list of several types is read
  • A string indexed like a list is refused; a string parameter is a string
  • A map or key bound to null indexes to null
  • datetime.fromepoch() and datetime.fromepochmillis() are read
  • Values the client gives are read by the engine, never written into the SQL
  • A collect inside size() collects; an answer of no rows names its columns
  • ORDER BY reads ASCENDING/DESCENDING and nested items; a pattern is a predicate
  • A collect() after WITH... ORDER BY collects in that order
  • One graph session per principal, the same on every client
  • Graph session id is hex, grants read through the one rule, locales
  • A kept translation is reused only for parameters of the same temporal kind and zone
  • A junction CREATE may end on rows the same statement creates
  • Governed DETACH DELETE of model nodes and junction-row DELETE
  • A MERGE reads unrelated leading MATCHes apart
  • REMOVE on model nodes follows Class labels and properties refused by name
  • A node of several labels carries the columns its readers use
  • An unlabelled match over no node type reads an empty relation
  • Row counts of openCypher TCK scenarios over a session's graph
  • A graph session walks a path function's unlabelled end
  • An empty node union registers its columns like an arm does
  • Session caps refused by name; TCK scenarios start empty; duration lists
  • An undirected variable-length walk takes only relationships its start can reach (#311)
  • A path search needs one end bound or labelled; a pattern no relationship matches is no rows (#313)
  • A session path from an end the model places walks the model's relationships (#313)
  • An undirected hop reads both ends; an unlabelled match keeps every node
  • A path variable read as a value
  • Arguments the engine has no overload for
  • ORDER BY ranks nodes, relationships and paths in openCypher's order
  • A WITH's WHERE reads the variables before the WITH
  • A comprehension's bound target is that node; a union node keeps its types
  • A list of graph elements and literals is a list of several types
  • one-hop pattern comprehensions with unnamed ends, a named relationship or several types
  • Ordering comparison of two lists is element by element
  • TCK side effects as observed; Bolt session reads keep graph identities
  • One command-call runner; a standalone YIELD of a VOID command is refused
  • A node only a session holds carries no _id
  • SET of maps and session nodes answered with every label
  • Nodes a returned map holds get their own Bolt ids
  • CALL as openCypher reads it; a Bolt read of no rows names its columns
  • MERGE writes ON CREATE / ON MATCH properties of the session's objects
  • openCypher value semantics for the TCK expression features
  • SKIP/LIMIT expressions, keyword variables, carried unlabelled nodes
  • A conversion of a kind it does not take is a TypeError
  • keys() and n[key] of a session relationship read with any ends
  • A projection is read by what it keeps; a shadowed alias is its new value
  • A node a WITH carries is read on as that WITH's node
  • Maps a WITH carries; a WITH ordered by nothing
  • Lists of union elements; variables a WITH drops; sub-microsecond orderings named
  • collect() is the elements, count() counts rows
  • A date moves by a duration's whole days of time; a session time keeps its accessors
  • A session node's _id is left out of the answer, not its reads
  • Session DELETE of any target, REMOVE keys, CREATE {} and graph functions
  • A read after a write finds unlabeled session nodes among the session's; DeletedEntityAccess
  • A session hop's ends are the session's nodes and the model labels its relationships end at
  • Session reads the TCK found wanting: types told apart by case, r:T, deleted type(r), WITH *, map expressions

data

  • Reading over GraphQL and SQL needs no query_development

data-contracts

  • The meta goldens, the editor's service levels in form fields, the page's mocks
  • A contract's column and type stay on one line in its card

data-products

  • A product's quality claims on its detail panel, from the meta domain
  • The claim field's hint on its FormField within 90 characters, the claims' SQL name built apart, the read view's exemption for the claim label
  • The panel's query text has a bounded height, so the sections around it pack
  • One Inputs section, and Related lists the directly related tables only
  • Edge lists keyed by the edge's id; a source input is named by its address
  • Every reference the panel shows is the model's name; cards hold their content; related detail clamps
  • Cards keep their content and remember their state; the product graph has the Ontology View's controls
  • The Knowledge graph card is compact again, the full explorer in its expanded view; the product's lineage DAG is back across the panel's foot
  • Input Ports are one row per upstream table, its columns behind an expand; the lineage DAG names tables as the catalog does, heads its lanes in words and opens legible; no Queries card
  • A lineage relation is named by the catalog when it is a registered table, by its relation when it is not; the knowledge graph's outside tables too
  • Each Related Tables entry is held to three lines; the Knowledge graph card is a glance with no controls
  • The knowledge graph card is drawn from the panel's own meta read
  • The panel reads relationships, source types and DQ rules from meta
  • A product's lineage is its own endpoint, read by any reader of it
  • A product's data quality is its expectations, promises, related and unattached checks
  • The data quality section is three rows, Expectations, Promises and Related
  • A check's latest run sits beside what it scans, so neither is clipped
  • The owner sees the product's own side; any other reader its promises
  • Edit follows the right to edit a product, not the owner's view
  • A product's lineage names its consumers, one hop downstream
  • The owner sees who reads the product, one hop downstream
  • data_product_owned_rw edits the products whose owner role the caller holds
  • Each output port declares its own versioned ODCS contract; the product's prose SLA moves into it
  • ODPS document complete; created_at shown read-only
  • Contracts panel as ODCS section rows; derived ODCS 3.1 elements in the exported contract
  • Read contracts.json only for a product with a contract
  • Contract summaries use i18n plurals; schema properties open to every element
  • Contract Quality card spans two grid columns at 3+
  • Contract cards flow in columns; Promises is a full-width panel of separate items
  • The promises table builds its results name through the shared helper
  • A contract's sections are peer cards and its Promises count is its rows
  • A contract has no consumers and its Columns runs full width
  • How to use replaces a contract's Servers section

database

  • The LISTEN thread's wake pipe is closed only once the thread has ended

demo

  • groupexposure's terms step opens the ontology page
  • Publish groupexposure, its card from its real answer
  • The sandbox tier serves groupexposure, now published
  • An open during a template's preparation waits for it, never builds it again
  • Insurance and weblogs vocabularies grounded by narrowing and synonym edges
  • Raise DEMO_FORMAT to 3 and requires_provisa to a496 for demos using role parents or code inputs
  • Refuse a bundle in a newer demo format than this Provisa reads
  • Provisioning close step reads true inside its window too

demo warm-up

  • Each tour statement is sent with the time travel the steps before it set

demo-bundles

  • A seeding run that times out names each template replica's build state
  • A regions demo is set up and seeded on one set of region stores
  • A regions demo's bundle carries its bitemporal views' setup history
  • A regions demo's seeding nodes run together, each on its region's address
  • A seeding run that cannot seed its template ends the build at once, by name
  • A seeding run builds each view it keeps that nothing else builds
  • A regions demo's setup history is found in its region stores, not its config
  • A region's views are seeded after its replicas land; a regions sandbox runs in its region's store

demo-stores

  • A taken-down version's ES marks are deleted; a missing index is restored

demo-templates

  • A node without a ready template's folder prepares it again
  • The version a template was built from is the control plane's, never a node's file
  • A regions tier records its finished template, so an open does not replace it
  • One step writes every carried setting a demo declares to its template

demos

  • Publish the data room demo on the sandbox tier
  • first-launch's sandbox tier offers the data room demo too
  • Publish the reproduce demo on the sandbox tier
  • Publish the opioids demo: its card, the sandbox tier's bundles, the first launch and the live demos page
  • Publish the pharma demo: its card, the sandbox tier's bundles, the first launch and the live demos page
  • A scaffolded demo's init script is executable; the walk's unpublished example is perf
  • groupexposure, a bank's loan book rolled up through Wikidata by LEI
  • groupexposure's borrowers are fictional, their owners real
  • Publish the retail demo on the regions sandbox tier
  • A seeding run that never finished shows its node's log, the tables it re-created and its embedded store file
  • A seeding node's whole log is printed into the build's output once it stops
  • The regions sandbox tier runs a node per visitor region and serves banking
  • A published demo in regions must be one the regions tier serves
  • The regions check reads each demo of name=region entries
  • "Give an agent your data" named demo on the MCP explorer
  • The profiling demo's card is its run's terrain
  • A bundle started locally loads the profile runs it carries
  • The visitor walk sends agentdata's Connect step, so its bundle can be published
  • A live demo comes up from cold with a true wait and no failure on the way
  • A source save rebuilds the schemas once, and slow steps are named
  • Shared connector servers, a consumer group per listener, public limits
  • per-schema bootstrap lock, one commit per seeded table, no template runtime without stores

deploy

  • The deploy package ships the vendored buenavista with provisa

deploy-cloud

  • The regions sandbox tier gets the deployed tree and its own config
  • Drop each org schema in its own transaction so the reset never runs out of locks
  • The sandbox reset drops sandbox schemas in the databases each store holds

deps

  • Black 26.10.1, graphql-core 3.2.13, setuptools 84.2.1, virtualenv 21.14.13 past their CVEs
  • Filelock 4.2.4 and opentelemetry 1.45.1 past their CVEs
  • msgpack, dnspython, pymongo and oauthlib past their CVEs
  • Pypdf 6.21.4 and pyasn1 0.6.5 past their CVEs

discovery

  • Registration records the keys the source declares
  • FK tracking raises all but a starting server; tests recorded
  • A catalog read cancelled while the source prepares its catalog is retried, not left unindexed
  • No adapter read is sent while its catalog is being prepared; answered STARTING at once
  • A PostgreSQL source's keys are read from pg_catalog by the table's name

docker

  • The image trusts Microsoft's 2025 signing key, which signs its Debian 13 repository

docs

  • Fix gen_docs_index.py to rewrite docs/ fragment links
  • Conformance overview as overview.md (docs/*/index.md is gitignored), unblocking the site deploy

dq

  • A checker table's latest run, in the meta domain
  • A preflight calls Provisa's services in-process, dq among them; a view may hold on failing checks
  • Name tables as the model does, in what dq reads and answers
  • A read governance refuses is a 403 naming why
  • A checker the role does not reach is left out, not read
  • A table with no contract stores dq_rules as SQL NULL
  • Each checker run logs its checker, its time and how it ended
  • A checker source's connection is what its steward entered; the model never resolves it (#276)

dq,types

  • A checker's empty password is stored empty; Exasol's character-set spellings are text (#276)

dq-claims

  • The merged panel, its fixtures and the corpus agree with main

duckdb

  • A statement's null order is a sort key, never NULLS FIRST/LAST (#294,)
  • What the server store's own connection writes is readable through the engine's attach
  • PostgreSQL's json_build_object and jsonb_build_object run on DuckDB as json_object
  • A division inside another's divisor divides and is guarded too
  • A table landed in a server store is seen through the engine attach

embedded-pg

  • A sign-extended segment key matches the key the system lists
  • A segment key with its top bit set is read as the system lists it
  • A segment key with its top bit set is found, and so released

engine

  • A statement the engine answers answers as PostgreSQL does -- division by zero, infinity, a function aliased in FROM
  • A function named in pg_catalog is that function
  • A UUID read beside a date is the uuid.UUID it is

ephemeral

  • A session's ephemeral graph store, typed and widening
  • The governing rule and label resolution for a CREATE
  • An ephemeral CREATE makes its nodes and relationships in the session
  • The read overlay, and proof the governed path is unchanged
  • A node naming two model tables is the session's, carrying both
  • A match of any node reads each node once
  • A mixed CREATE splits across the governed and session paths
  • Bolt holds a connection's ephemeral graph; SET and REMOVE labels
  • A CREATE and a label SET/REMOVE are read from the graph IR
  • A session's graph is written in place, its tables indexed on their keys
  • MERGE is MATCH, then CREATE under the same rules
  • An unlabeled node is every label's, session relationships with an unlabeled end read; several CREATE clauses are one
  • store.key_of is public, so a restore indexes a table on its key
  • DELETE and DETACH DELETE over the session's graph
  • A session relation is one CTE, an instance's own conditions inside it
  • A label's resolution lives in the session's lookup tables
  • A session graph is indexed where it is looked up, and counted
  • A session table not created yet reads as an empty table
  • A session write followed by reads is one statement; session property REMOVE and indexes

errors

  • An engine's error is answered in the model's names
  • Every transport answers an engine's error in the model's names
  • An error is named only by the org its request bound
  • A client's error is named from the model-wide context, not every role's
  • A JSON error body stays JSON when its names are the model's

events

  • A second landing before the rewire runs keeps the first landing's views

explore

  • A restored result comes back only beside the exact query that produced it

explorer

  • The Cypher pane prints the read's graph IR in its three projections
  • A read's nodes and relationships are its graph pattern; a graph view opens as one

export

  • Each catalog is published as a role; the workbook is its caller's
  • A role's publish keeps every domain the role reaches
  • Governance tags name the standard roles too
  • The tag roster is every role that reaches a domain

fabric

  • Wait until Fabric serves a resumed capacity; suspend only from Active
  • A resumed capacity's warehouse is waited for by its own answer

fakes

  • The pg engine's fake functions import with no sqlglot

federation

  • The DuckDB Snowflake attach creates the secret it names; the Kaggle and warehouse e2e clean up as their own
  • The DuckDB snowflake extension is loaded with the ADBC driver Provisa ships
  • Apollo subgraph served as the org's declared role
  • The subgraph SDL publishes no operation directive
  • A store table's time with its offset keeps the offset through the engine's copy
  • Unity Catalog 429 is waited out for every REST call
  • Send a source hint to Trino only if it is a session property
  • The pg engine's ClickHouse attach uses the source's declared port
  • Only the @provisa vocabulary reaches an engine session
  • Load the crypto extension through the duckdb owner

flight

  • A worker's Flight servers are held by wait(), never serve()
  • Each relayed send is one bounded non-blocking call into room it already has
  • A Flight RPC's unexpected failure is logged with its traceback
  • Flight SQL statement query and SqlInfo on the Flight endpoint
  • Flight SQL prepared statements, bound parameters through DoPut, statement schemas
  • Flight SQL catalogs, database schemas, tables, table types and keys, as the role is served
  • Flight SQL statement and prepared statement updates through the governed pipeline
  • Flight SQL session options: the current catalog and schema, as pgwire answers them
  • Flight SQL transaction actions, acknowledged and holding nothing
  • Flight SQL sessions: SetSessionOptions, CloseSession, the session's current schema
  • Flight SQL bulk ingest into the model's tables, through the governed pipeline
  • Flight SQL temporary ingest into the session's own temporary table
  • An ingest writes timestamps as their instants, and a missing table does not exist
  • A lazy stream is pulled in the caller's Flight session
  • A column transform plan streams from Flight's engine route too
  • A Flight SQL prepared statement answers its parameter schema
  • Flight SQL lists each column's nullability as the model records it
  • An ingest writes the model's table by its schema

front door

  • The waking page's streams are binary, drawn from one glyph sprite

glossary

  • A class term grounds whole tables and views
  • No requirement id inside the class-term view's SQL
  • A table grounds its class term, in the model and the admission rule
  • A term's list row and detail count the tables it grounds
  • A term is a Class or a Property, never both
  • Abstract is derived from grounding, the flag retired
  • Tables propose their Class; keys are the Class's
  • A proposal is a stored sync grounding on an uncurated term, not a name
  • RELATED_TO is the last resort; resolving shapes offered
  • Choosing RELATED_TO opens the alternatives
  • Find terms in a document, with a review queue
  • Ontology drift from the model history

governance

  • A role's row limit bounds every list a read nests
  • Cypher's collect() and COLLECT { } lists are bounded by the row limit too
  • One governance context per role and model version; catalog views out of the landing list
  • Every caller reads the one role governance context
  • The kept context is read-only; the scan finds any naming of its builder

gql

  • A table with no column to identify its rows by is refused, not given "id"
  • A WHERE's ISO date-time string compares as a TIMESTAMP again
  • A variable-length path keeps its lower bound (#283)
  • The graph depth limit is an operator setting, and a result cut there says so
  • Path expressions, path modes and label expressions in the graph IR
  • RDF terms, typed literals, variable predicates and CONSTRUCT in the graph IR
  • A SPARQL term and the depth limit's cut flag pass through the graph rewrite
  • A path expression's step relation holds a node's whole key
  • A relationship to a node the statement already holds is a condition, not a second join (#303)
  • A node or relationship variable is null by its own row, not a column of its name (#304)
  • Two node or relationship variables are compared by identity, not by table alias (#305)
  • A later MATCH that starts at a node not yet held joins that node's table (#306)
  • A stored edge keeps its direction; a read of every relationship types its edges
  • Two anonymous nodes of one label are two nodes
  • find_paths keys the relationships a path has used by mapping, not type name

gql-ir

  • Graph writes are clauses of the graph IR

grants

  • An empty grant is no role on every list; a registration grants its registrant and Viewer
  • Listed names, the registration grant on new tables, and every list naming its roles
  • Command fields and Flight metrics read the one assignment rule; an empty list names no role
  • A command's response column with no grant is the command's own; tests name their roles
  • batch-2b integration fallout of empty grant = no role
  • A role served no tables is not refused

graph

  • A label the engine could not count is said, with why; the total is null then
  • A refused graph-counts request is shown in the sidebar, not stored as counts
  • A refused graph-schema request is shown in the sidebar, not read as an empty schema
  • A parameterized table is uncounted in /data/graph-counts, not a 500
  • A result frame's query shows Copy and Delete on hover
  • An Overview pill picks out its label's nodes, or its type's edges, in its frame
  • GraphFrame no longer imports CopySymbolButton, which both its uses moved into FrameParts
  • A node's properties are every column under its own name, id included; an OPTIONAL MATCH that matched nothing is null
  • A frame of rows counts its rows, never "0 nodes · 0 rels"
  • An expansion names only the relationship types the server registers for the role (#307, #308)
  • The mouse wheel over any graph zooms it and never scrolls the page
  • A label dropped on a frame expands from every variable the query binds
  • A comparison of two kinds is one IR operation whose language states it
  • A LIMIT needs no full union; graph.union_limit defaults to 256
  • A registry entry with no columns says nothing of its key
  • Paths skip parameterized tables; a join declared twice is one edge
  • ?s ?p ?o stays refused; recursive walks tested where the join guard admits them

graph-session

  • A cleared session never repeats a plan-cache key

graph3d

  • One neighbourhood, two hops; a product's counted from its member tables
  • Each legend glyph is the shape its nodes are drawn with -- a data product a hexagon
  • A summary select's closed text stays on one line, ending in an ellipsis
  • The product panel is the Graph panel, with All, Ontology and Products presets and no Lineage preset
  • A product's graph draws its lineage from the product lineage endpoint
  • A product's graph draws its column lineage from the product lineage endpoint
  • The 2D view is a lane diagram
  • Every lane node informs and links; 2D shows only 2D controls
  • Lane view fixture and fallback use term status, not live
  • Lane nodes without a status carry no status attribute

graphql

  • A nested field's where, order_by, offset and distinct_on hold at every depth
  • A nested field is built as one JSON value; a list with no rows is []
  • A nested field read through its own join is answered under its alias
  • Each nested column of a query's SQL is named by its response path
  • GraphQL front end of the graph IR and the Cypher printer
  • Aggregate roots lowered to the graph IR; nodes keep a column's alias
  • GraphQL over HTTP recommendations on /data/graphql
  • A column typed character varying is a String
  • Prefix the ontology and ops schemas' SDL names on_ and op_

graphql-front

  • The fields projection names each flat property itself; tests follow the one naming rule; LangChain reads deptId

graphql-http

  • GET forwards no time-travel headers, and the test's state has no config file

graphql-remote

  • A remote table is replicated row by row where its schema fetches rows by keys

graphs

  • Each graph's detail panel links its item and its connections to their own pages

groupexposure

  • Owners reach their group by a declared relationship, and Tier 1 is read as a value, not cross-joined

grpc

  • An aggregate over no rows arrives unset, not as zero
  • A row read lowers to GraphQL, and a where compares text as its column's type
  • A row read honours the offset on the servicer and the proxy

guard

  • Branches reading the same instances are one alternative

helm

  • The chart's analyst role and row rule say what they are for

i18n

  • Record English sources for translated graph3d, kaggle, serverErrors, sourceDetailPanel and tour keys
  • re-record English sources for graph3d and banking tour keys
  • The contracts list's strings in every locale

import

  • A Hasura v2 source keeps its pool's minimum connections

install

  • banking's regions node, run as its visitor region warehouse
  • The regions tier lists banking

integrity

  • Declare the term-finding foreign keys; a LINK standing for SET NULL

introspect

  • Redshift lists its tables from pg_catalog; a Synapse pool offers its views

json

  • The JSON family of catalog functions on DuckDB
  • jsonb_concat of an empty value, a NULL key of jsonb_exists_all
  • A call is rewritten once, whatever its nesting

kafka

  • A landing's offsets name the topic's partitions from the metadata fetched for them

landing

  • A failed landing or an unparsable rewrite fails the read
  • Whether a table is landed is read from its store's catalog

leak-probe

  • Live threads by name, so a rise in threads names its pool
  • Thread stacks on request, and a named background thread keeps its name

lineage

  • Every lineage read is cut to the caller's read rights
  • Column lineage is answered only by the lineage reads that cut it
  • A native box without its source's details is named by the source and the names it gives the object

live teardown

  • An external link reuses only a parent location; UC listings wait out 429; Dataplex terms approved

llm

  • Raise on None message content; give reasoning model enough max_tokens in LLM eval

locks

  • A CrossLoopLock is never held for a waiter that cannot take it

masks

  • Common regex masks beside a regex entry, and the server's universal-dialect verdict as it is typed
  • A refusal reads under both regex fields; the guards list the regex fields' menu and its not-a-form row

materialization

  • A nested statement drops none of the outer statement's scratch tables

mcp

  • A loopback call's statements are audited, as the anonymous user's
  • A loopback call naming a derived role acts as its meta-role and binds its attribute
  • A local call naming a role set acts as its meta-role, derived roles bound
  • Cypher runs in the caller's graph session; clear_graph_session
  • Hold the catalog search index per org and scope its roles to the org

merge

  • Restore main's pipeline lost in the 449e8d99a merge

meta

  • Product inputs, related tables, derivations and checker states
  • A glossary term reaches its edges out and in, and an edge its two terms; an empty _or holds for no row, an empty _and for every row
  • A registered table reaches its sensitive columns (sensitiveColumns)
  • A column, not its table, reaches its sensitivity (table_columns -> sensitive_coverage by column_key)
  • Glossary refs and domain links are junctions; a table's class term is registered_tables.class_term_id
  • The semantic-address resolver is the meta domain's resolve
  • Register governed metrics as meta.metric_definitions
  • A promoted primary key is NOT NULL, meta golden carries the catalog views

metadata export

  • Provisa assigns its terms to data as each catalog's automated assignment
  • Each term's ontology role on every glossary target
  • The role property is declared on glossaryTerm; a role not exported fails the publish
  • The glossary on Purview's Unified Catalog, Dataplex and DataZone
  • A Dataplex definition link waits, bounded, for its table's entry

metadata-export

  • Views seat in the derived layer's container; OpenMetadata reads the contract team as members; an escaped refusal fails its target by name
  • OpenMetadata gets a contract's latency in its own units; the Purview e2e reads its product back by the adapter's id
  • OpenMetadata searches its own Elasticsearch 9; Atlas assignment errors carry Atlas's body
  • Atlas assignments are ACTIVE; Dataplex term entries by project number; OpenMetadata members through its bulk asset calls
  • Dataplex links a term once its catalog entry appears
  • A failed pre-write read refuses that asset; every adapter keeps what a steward owns
  • Atlan is shown as "Atlan (beta)", from one flag on its adapter
  • DataHub owners name their source in OwnershipSource; Atlas finds Provisa's unbound terms
  • A Unified Catalog data asset is created with its name and type
  • A Unified Catalog data product has a type, a data asset names its Data Map source
  • Unified Catalog terms and products go by the ids the service gives them
  • Atlas, OpenMetadata and DataHub e2e publish what the real services accept
  • OpenMetadata views and contract SLAs import; harness audience is the org's roles
  • OpenMetadata data product members through its asset calls; the ODCS read-back asserts what 2.0.5 keeps
  • A Unified Catalog data product relates each data asset by the flat relationship body; the e2e expects the status the service stores
  • Purview counts its Unified Catalog terms apart from its Data Map terms
  • Purview tells its term relationships from a steward's by the record of what it wrote
  • A mask tag names only the roles the column is served to
  • Name gRPC, JSON:API, OpenAPI and SPARQL as contract servers

model

  • No table label may equal a domain label

mongodb

  • The driver reader reads each column at its document path

mutations

  • An update's or delete's where takes every operator a read's does; a ServiceNow API document is fetched as the instance serves it

mv

  • A view never answers its own build
  • A deleted view leaves no build; one unresolvable view never fails the org's wiring
  • A view's build is pruned by the view it was built from, never by its id
  • A first build creates its store table keyed as the reconcile keys it
  • A materialized view is indexed as a replica is

mysql

  • A TIMESTAMP is read as its instant in UTC, with its zone

naming

  • No domain's computed alias is another's; ontology and ops are named apart

nl

  • non-strict NL is the guard bypass's, and no panel shows a query with an error
  • A V002 refusal names the condition as written, and a refused NL query is retried with the registered path between its tables
  • non-strict NL's Cypher is refined against the role's label map

ontology

  • The Ontology View reads one root, its terms with the edges leaving them
  • A relationship can say the rows it joins are the same entity
  • Mark a relationship same entity in its editor; the gap on the term and the Ontology view
  • Data on keeps the graph's spread and the camera frames it all
  • Taxonomy draws a tree, its columns under their terms
  • The Ontology View's choices as dropdowns; Loose–Tight; Set Defaults; one toolbar order, guarded
  • A term is read, or edited as one form: Edit, then Save or Cancel; Claim columns
  • No Abstract in the UI: a term is a Concept, a Class or a Property
  • A term and the list are read again together; the glossary spec waits a round-trip's time
  • A key column follows from its table's class; a property claims attribute columns
  • The Ontology View reads its search on the server, two hops deep, within a budget
  • The searched view's edge filter compiles in a nested where; the spec reads the view's own query
  • One To review bucket in place of Gaps, its findings in the term's panel
  • The page reopens as it was left -- its view, search and To review
  • A term in a domain drawn is connected, whatever other layers are on
  • Step 1 -- the glossary's definitions are the ontology schema's
  • Step 3 -- SPARQL serves the ontology schema as RDFS/OWL/SKOS
  • -- SPARQL joins the ontology's axioms to instance data
  • Each Class term is a table of the ontology schema
  • A Class table never takes a model table's bare label
  • A Class table is read only where the ontology schema is named
  • A bare name a Class shares with a table names the table
  • Refuse a Class that takes a definition table's GraphQL name
  • No requirement id in the terms view's SQL
  • A catalog description names no requirement

ontology-view

  • The owner-tables layer reads each column's table and the relationships declared from it

opioids

  • The tour's answers put the counties with a rate first, and show the ratio

ops

  • Ontology quality standard report

orgs

  • Serialize registry-view rebuild with org schema drops

otel

  • Define the native traces view without opening a batch
  • The audit writer's own work exports no trace
  • A request scope ends with its request span
  • A read of the native traces never opens a batch compaction removed

packaging

  • First launch offers groupexposure, as the sandbox tier's list does

perf

  • Starting the backends' host agent leaves the ssh session free
  • The server's serve stops on SIGINT; a stop that does not end says why
  • The checkpoint copy runs in one process; gsutil -m hangs on macOS
  • GraphQL audit rows reuse their governance; bench gRPC callers own their connections; the agent's backlog holds the RTT probe

pgwire

  • A read of ops/meta tables keeps its bound values (#279)
  • trust-mode auth reads the deployment org's derived roles
  • PostgreSQL wire conformance -- arrays, error fields, extended errors, cancel, transaction status, exact numerics
  • COPY on temporary tables, more temporary-table types, cancel without a torn message, length of a bytea on DuckDB, RAISE NOTICE
  • A passthrough statement deallocated behind it is prepared again; length() of a list on DuckDB
  • A catalog column and a catalog function answer as the type PostgreSQL 17 declares
  • A catalog column is stored as the type PostgreSQL 17 declares
  • A regproc or regtype catalog column is its name as text and its oid as binary
  • oid[], oidvector and int2vector catalog columns are written and sent as PostgreSQL does
  • An int2vector or oidvector catalog column is subscripted from 0, as in PostgreSQL
  • pgjdbc's getIndexInfo lists an index's columns
  • aclitem[], "char"[], inet and pg_lsn catalog columns are sent as PostgreSQL does
  • The catalog relations psql, pgAdmin and DBeaver browse with, with PostgreSQL 17's columns
  • The statistics relations pgAdmin and DBeaver read, empty, with PostgreSQL 17's columns
  • The text search, extension, large object and parameter ACL catalogs, with PostgreSQL 17's columns
  • Every remaining PostgreSQL 17 catalog relation, with its columns
  • A command on a subtyped model answers its command, not a read's shape
  • A catalog function a client calls is answered on its own
  • The server functions act on pgwire's own connections
  • A server function's pid is evaluated on a capped DuckDB, through its owner
  • The catalog functions clients call that had no answer
  • record-returning statistics functions and pg_sleep answer as PostgreSQL types them
  • pg_sleep opens DuckDB through the capped factory
  • Answer has_table_privilege and pg_get_expr from governed grants
  • A discovery read is never sent behind another of ours; it is STARTING at once
  • Send numeric(p,s) typmods and keep varchar/char native types
  • An oid column no longer breaks the catalog
  • Serve every catalog relation with PostgreSQL 17's shape
  • Catalog functions answer PostgreSQL's type and semantics
  • Serve the client-called server functions as PostgreSQL answers them
  • Catalog gaps - regclass vs name, typelem, key action codes, masked rolpassword, pg_stat_activity session
  • Serve pg_catalog function families as PostgreSQL answers them
  • Serve the remaining pg_catalog families as PostgreSQL answers them
  • Evaluate only constant arguments outside governance; test every signature
  • Answer the server functions as PostgreSQL 17.11 answered them
  • Tand is never minus zero; to_regclass gives a catalog relation PostgreSQL's oid
  • Serve money through the IR as PostgreSQL answers it
  • Serve the xml type, its syntax, xpath, xmltable and the governed SQL/XML mapping
  • float8 text as float8out, literals hold no placeholders, xids start at 3
  • A mapped document is xml on a PostgreSQL target
  • Metadata lives in meta, its functions in the compiler
  • The catalog views are listed to no person
  • pg_catalog and information_schema as views in meta
  • No catalog view in a subscription or a proto message
  • Placeholders with no space between them parse
  • A catalog route is not kept for its shape; types the wire has no form for
  • List a json column as json in the metadata type forms
  • Column privileges are the catalog's, xml is the compiler's; a catalog view refused off the admin terminal
  • Only named metadata reads the control plane; a statement with no table is the engines
  • Held types after functions; provisa_raise does not stop a pg engine; query errors in every locale
  • Every client statement on the admin terminal runs as the client role
  • A ClickHouse time is a time on the wire

pgwire, flight

  • A column transform plan streams to the caller

pgwire,flight

  • Every catalog a client sees is the served database

pipeline

  • A statement waits only for the servers its engine reads through
  • A statement that reads no source is the engine's; the default-source fallback is gone
  • A compiled read of a session temporary table goes to the engine
  • A compiled plan is kept per temporary-table session

polly

  • Every Explore page and the ERD, ontology, products read and set by Polly

profiler

  • A window whose MAD is 0 has no spread to measure a distance in
  • Columns classified from their sampled values; a steward accepts or rejects each
  • The classification statement's read is recorded as classification_attempts
  • No requirement id in the classification_attempts column's description
  • A run read as "Role: All" is read as the selected set

query

  • The GraphQL page's Semantic SQL panel opens its SQL on the SQL page (→)

ranges

  • Ranges and multiranges on every federation engine
  • Multiranges from columns are SQL for each dialect; ranges land on DuckDB
  • Forms corrected on real Trino, ClickHouse, MariaDB and SQL Server

rebuild

  • A role surface is built against the runtime that registered it

redis

  • A failed connect gives its pool slot back once (#284)

reference-library

  • Read PDF and Word documents
  • Lay the document domains out with the shared form layout
  • Declare documents, their domains and passages in the model-store inventory
  • re-embed documents of an earlier model from stored passages

regions tier

  • It names its demos with the sandbox tier's domain prefix

relationship-names

  • Names a change of naming convention respells are written in a model change

replica

  • A replica's name is lower case, so Trino reaches it
  • A floored MongoDB source's replica is built over its driver

replicas

  • A table declared again while its replica is dropped is built again
  • A replica's build lock is its region's, so each region builds its own copy
  • A held build and a waiting template say why
  • A reconcile keeps a landed replica whose key is not built yet
  • A replica re-created empty is recorded unbuilt and built again
  • A DuckDB engine's replicas are identified by the store they are written into
  • The landing reconcile leaves a row-level table's row cache alone
  • A build claim's locks are free once its close returns
  • A row-level replica's first read and first fetch need no schema made before
  • The pg engine's store is its own database; row landing runs in sets

replication

  • Log every replica build's start and end at WARNING

report

  • The model workbook's Ontology, Data Products and Data Profiling sheets, naming only what the caller is served
  • The model workbook's Data Quality sheet, and a product's inputs as its panel finds them
  • The model workbook's Data Contracts sheet and each term's axioms

residency

  • A read waiting on a build of a table with cache_ttl 0 is answered by its landing

rights

  • A column is read by the roles its grant names; scopes are domain, listed and public
  • A right is exercised in the domains of the roles that carry it, for relationships too
  • A listed role reads meta and ontology as a "*" role does
  • System domains are capabilities, flattened into domain_access

roles

  • CI fixes for the standard roles
  • The sandbox manages no environment; integration suites follow the standard roles

routing

  • Sources share a direct connection only under the same login
  • A statement is landed unless it passes every gate
  • The source contract decides trusted_to_answer; Qdrant keeps its exact reads
  • A route hint written as a SQL or Cypher comment is applied on every SQL and Cypher transport

row-level

  • A filter's record is created in its schema when the schema is not there yet
  • The key pushdown probe keeps a statement's own LEFT JOIN single

row-materialize

  • A source type declares whether it fetches rows by keys
  • A keyed fetch that lands no row says so in the server log; the flight healthcheck reads each answer until it is fully loaded
  • A join-reached row-level replica exists before the key-pushdown probe reads it

sandbox

  • The sandbox tier merges the traces it lands
  • A region template's store is pinned once its model is loaded
  • The disk cannot fill and a source error names no address

sandboxes

  • A demo's visitor carries the attributes its demo.yaml declares

scheduler

  • A closing holder releases its lock before its session ends

schema

  • An existing relationships table gains same_entity at startup
  • A derived view's columns are the ones it is registered with, not an engine's information_schema
  • table_columns.subtype in schema.sql, as schema_org has it
  • A per-domain schema offers only the asked domains' root fields; meta filters like any domain

scripts

  • The startup banner lists the SPARQL endpoint

security

  • Standard roles composed by union over several parents
  • Owned environment management, dq_read for profile reads, tour standard roles
  • A role's panel shows its capabilities with the role each comes from
  • A capability comes from every branch it enters in; the role lineage reads at body size
  • column_served is the only column-visibility rule
  • The read_restricted capability is removed
  • A role's Data access tab and a table's Access section
  • A role's LLM budget: a per-call cap and rolling windows counted in the control plane
  • An LLM service call's output is held to its role's allowance, never withheld
  • A row rule has a right, and U and D rules hold data and model writes
  • A row rule carries a set of rights
  • The Owner field gives RW on data products with generated row rules
  • A role's refusal names no requirement; tests follow the read signature and the capability refusal

server

  • The health probe answers fast and says busy; a rebuild compiles with no connection held
  • A request still waiting for a thread says what holds them all
  • On a timer, what every request awaits and where every thread is

servicenow

  • Offer only import sets the instance can read; the e2e grants its writes
  • A companion's operations are offered once it is saved; the e2e writes name published columns

settings

  • Every catalog setting is named and explained, in every locale
  • Network and TLS opens General and HTTP at first
  • Drop the settings text no catalog setting reads

site

  • Every page's navigation has the home page's "How it works"
  • Hero shows one hook pair even with a stale cached stylesheet
  • Six problem cards in two rows of three; one-model copy says keep your tools in sync, or use Provisa alone
  • Download section: one-line licence pointer; sandbox sentence without the stale hosted-service plan
  • Starburst comparison reflects Gravity, data products, MCP; contrasts SQL-analytics centre with one model across tools
  • Comparison sources are the verified ones; drop an unverified Denodo claim
  • Provisa defines federation; the engine you choose runs it
  • Shorter nav labels (Works, Demos) to fit the navbar
  • Crawler copy states per-format table detection (confirmed by the maintainer)
  • One Download in the navbar (the button)
  • Catalogs page states what Collibra Protect and Atlan actually push, with sources
  • Compare hub engines row: partial reach, varying governance, data gravity, cloud lock; adds Fabric
  • Engines row: pros and cons, use the best one for each job and switch when wrong
  • Space between consecutive section paragraphs
  • Four language panels across, narrower padding and gap
  • Every page carries the home page's footer
  • The How it works page's own nav says How too
  • Landing pages carry the home nav label and footer
  • Consecutive spotlight paragraphs are spaced apart

sources

  • A source save is one createSource/updateSource carrying every setting
  • A deleted source's catalog walk is stopped before its catalog goes
  • A deleted source's server is stopped and none outlives its deletion

sparql

  • Type a table's columns by its bindings' XSD datatypes
  • Push a statement's conditions and LIMIT into a SPARQL table's query
  • A source's HermiT reasoner serves inferred classes and properties as tables
  • Every call to a SPARQL endpoint names Provisa in its User-Agent
  • A source's tables are asked for JSON results, and an answer that is not JSON says what it is
  • The SPARQL front end, rdflib's algebra lowered to the graph IR
  • The SPARQL 1.1 Protocol endpoint, GET and POST /data/sparql
  • GROUP BY, HAVING and aggregates
  • Results serialize to a buffer, so the writer returns bytes; requirements.md regenerated
  • Every SPARQL refusal is the app's error body with its own code
  • GET /data/sparql/vocabulary, the role's vocabulary as IRIs
  • A negated set of forward and inverse edges, !(a|^b)
  • REGEX flags, and REGEX finds its pattern anywhere in the text
  • GROUP BY an expression
  • Scalar functions -- string, numeric, date parts, NOW and xsd casts
  • A group's FILTER and a BIND that reads an OPTIONAL's variable are read after the OPTIONALs (#301)
  • An OPTIONAL binds its variables only where it matches as a whole (#302)
  • An OPTIONAL nested in an OPTIONAL is lowered, never dropped
  • The response-cache opt-in and provisa_stats on /data/sparql; the bench profiles and caches SPARQL
  • The SPARQL tab under Explore -- the graph visualizer with SPARQL's vocabulary
  • Open as query exports a GraphQL read as SPARQL, exact or refused
  • A read with no SPARQL form is answered with why, never a failed compile
  • A local install sets server.public_url; the refusal names where and what
  • The SPARQL tab exports RDF and SPARQL results, not Neo4j
  • Integer and decimal division by zero is an expression error
  • A term-bound column is published under the term's property IRI
  • The open pattern answers what a role can name, with no self-join
  • Selecting a node lists its properties; classes grouped by prefix
  • A variable predicate reads as its parts in every position

sparql-tab

  • The vocabulary is read as main's endpoint answers it, with superclasses; a CONSTRUCT's edges are drawn
  • One vocabulary pill per IRI; the e2e CONSTRUCT gives its subject a class
  • A SPARQL frame reads as SPARQL and offers no auto-impute

sql

  • A batch on /sql answers one result per statement, each under its own tab
  • A result's columns are keyed by position, so two of one name each keep their value

sql-canvas

  • Select every column at once; joins built from what SQL allows

store

  • A session's temporary tables are dropped through the embedded store's broker

subscriptions

  • A subscription keeps delivering

tables

  • Registering a checker table asks why the check exists, its quality claim
  • A snapshot calendar's version is named once in the picker; its create dialog's close gets the test's budget

tags

  • Pii on a Property term covers its columns; a move confirms the tags it takes
  • A move asks to confirm only a tag the column stops carrying
  • Pii terms in environment trees, the REQ, and the rest of the tests
  • No requirement id in view SQL; a ref move reports its tag changes

term-finding

  • A document scan always finishes or stops saying why
  • schema.sql carries the scan progress columns
  • One dense batch no longer fails a scan

time-travel

  • Time travel as arguments of the relation
  • One versions read, on the governed statement, at each reference's time
  • A bound time keeps the relation's name as written; the banking test reads by arguments

tour

  • A profile graph step stops at once when the table has no run
  • A relationship step on the open page searches its own alias
  • Demo tours run what they explain and cancel what they show

tour,e2e

  • The Deep Dives menu reads the cached catalog; two core-lane specs stop paying cold loads they do not test

traces

  • One process compacts a trace folder at a time, an input at a time, and every test server lands its own

transpile

  • An instant literal reaches the MySQL family as its UTC wall time
  • Snowflake, MySQL and ClickHouse write a null-on-failure cast too; every route transpiles

transpiler

  • A JSON value read whole and a filtered list survive the semantic SQL's rewrites
  • One rule for PostgreSQL functions; shapes, tsvector, inet and money as forms
  • time(x) reads the function table on every dialect
  • Crypto hashes give PostgreSQL's answer or are refused by name
  • operator-named functions as one generated table
  • PostgreSQL json functions as a table of forms, replayed on DuckDB, Trino and ClickHouse
  • The array functions as forms, replayed on DuckDB, Trino and ClickHouse
  • VARIADIC multiranges, multirange_cmp and range_union of a NULL
  • The enum functions, a source's enum resolved in its catalog, gate fixes
  • No function gives a wrong answer on the replayed engines
  • A bound percentile fraction is the engine's to check
  • A JSON aggregate's FILTER is its inner aggregate's on DuckDB
  • A timestamp in JSON answers the same at any depth on DuckDB
  • ts_filter's row has its own name, refusals pinned
  • A list of timestamps stays a JSON array on DuckDB
  • Trino's regexp_extract is NULL where it finds nothing

trino

  • A MySQL-family catalog names no database in its URL
  • A JDBC catalog sets statistics.enabled only where the connector takes it
  • An instant read live through Trino is carried at UTC with its zone
  • A ClickHouse source gets a Trino catalog; a JDBC source with no URL is refused by name

ttl

  • A parameterized table keeps its rows only for a TTL of its own

types

  • GraphQL and proto map a long-form SQL type as the Arrow catalog does
  • IR subtypes recorded at registration, reported by pgwire and its catalog
  • A timestamp column keeps its declared precision and is read at its unit
  • One subtype per distinct PostgreSQL type
  • A source type that fits no IR type registers as text
  • Subtypes keep native semantics; land in their own form or not at all
  • Trino's inet emulation from the functions Trino 481 has
  • An inet or cidr operation on Trino is refused by name
  • A time column keeps its declared precision and is read at its unit
  • Register ClickHouse Nullable/LowCardinality IPv4/IPv6 as inet; document subtype mappings

ui

  • A checker table is assigned to a product as any member is
  • The Glossary toolbar is search, an Ontology view icon, + Term, one AI menu, then help
  • Glossary is renamed Ontology, at /admin/ontology, in the UI, the tours, Polly and the docs
  • A SPARQL source names its reasoner and OWL axioms
  • The page chunk warm-up starts after the opened route's page, never ahead of it
  • Every 3D graph remembers its view settings across reloads, per graph, with a reset
  • The page chunk warm-up stops with the app and leaves no import in flight
  • The Ontology View's Data layer shows each product's dataset columns; a Tables checkbox draws the tables of the columns drawn
  • A table is a cylinder in every graph, a profile result a torus; the Tables checkbox is remembered with the graph's settings
  • The legend's cylinder and ring are drawn with radius and border alone, so an exported image paints them
  • Every 3D view exports an image or a recorded turn
  • The export's scale, length and last formats are remembered, the last formats checked
  • The Ontology View opens as its query (→): GraphQL as it runs, SQL and Cypher as it compiles, SPARQL later; its filters are in the query
  • Open as query says why a focus leaves it closed
  • The product graph is one query with its domain, tag, sensitivity and edge type filters in it, and opens as that query (→)
  • A term grounded in tables, a table's rows as instances of a term, and each term's role
  • A search focus with Tables stops at each table it reaches
  • A hint held open waits for its target; a page that fails says so in place
  • The graph sidebar shows the page it can, when a domain deselected shortens its lists
  • The app's splash runs the front door's binary streams, from one shared renderer
  • Pii on a term or a column, and one tag-loss question for every move a person makes
  • A linked item's panel leaves the focus in a dialog open over the page
  • Escape in a popover or menu inside a detail panel closes only it
  • Every icon-only button is borderless but five drawn filled or bordered on purpose
  • The splash's binary streams inline into index.html only, so the build's other HTML entries build again
  • The SQL explorer's schema list filters meta and ops by the Domains menu like any domain
  • The SQL canvas wires one join per relationship, so removing a join clears its line
  • Ids come from crypto.getRandomValues, so pages render outside a secure context
  • The GraphQL page never scrolls past GraphiQL
  • A glossary term's read view draws its neighbourhood as a layered graph
  • The Ontology view names a relationship by its served Cypher type, never its id
  • An assembling-cube loader for long waits, on the demo-opening page
  • js-yaml is declared for the typecheck
  • The listed names use the naming module; tests name the roles their grants and masks are for
  • A table's access column picker is a form field, its explanation the hint below it
  • The lifecycle status type lives in types/, so types/admin.ts imports no component
  • Every read the picker makes acts as the selected roles, "Role: All" included
  • A column's subtype beside its base wherever its type is shown
  • Layered layout for network graphs, Force/Layered control, lateral arcs
  • A layered layout opens face-on and fitted in 3D, refitted when the layout kind changes
  • SPARQL page pills by direction, domain selector and per-label colours
  • SPARQL answers drawn as the Cypher view draws them
  • SPARQL nodes captioned by name or IRI tail, drawn SELECT labelled by class
  • SPARQL class nodes captioned by local name, compacted name kept
  • A graph caption longer than its node scales down before it truncates, full name on hover
  • The literals toggle is a toolbar chip, as the graph explorers' toggles are
  • A graph caption stays inside its node or goes beneath it in two lines, no font scaling
  • A role's LLM budget on its form, and each window's use on its page
  • One caption source for the node canvas; its placement is no longer overridden per node
  • The Cypher page lists the graph session's labels and types, dashed and counted, with Clear session
  • A table whose source's API document could not be read says so: a mark in its row, the reason beside the endpoint
  • The endpoint-error mark uses the shared Tip, not the library Tooltip
  • Only the session's language catalog is loaded; English stays bundled
  • Ontology term chips show a ground icon in place of the "grounded" text chip
  • SPARQL vocabulary terms and concepts follow the checked domains
  • Three random demo-sandbox loaders (cube, cardboard box, gift box)
  • Explorer groups ontology/ops root fields by SDL prefix alone
  • Escape Mermaid chart labels; show an unparsable chart in place
  • Graph detail names wrap; crossing minimisation in the layered and lane layouts
  • Readable 3D graph labels; the Ontology graph follows the navbar's domains
  • 3D graph keeps its layout; crowded pairs are moved apart in 2D only
  • Keep every Analyze operator row on screen for a deep plan
  • The Ontology view draws only what a shown term reaches
  • Plan diagram zooms to the pane width; tall plans scroll
  • A product's contracts are a list beneath its lineage (WIP)
  • Open in ERD from the Ontology table detail
  • The ground symbol shows on Concept terms only
  • Explorer clear-query button; SPARQL class/property pills run their own result card
  • Contract version types live with the admin types, so the graph renderer build reaches no api code
  • Graph labels at half the size they were drawn
  • Term review queue meets form and collapsible guards
  • The SPARQL explorer as an RDF person expects it
  • One ERD view in place on Tables and Relationships, each with its own panel, and a focus that is a link
  • A contract shows Versions and changes right after its Details
  • Input Ports and Consumers cards always shown
  • Show ontology drift with the quality report
  • SPARQL endpoint prefixes use the shared collapsible; guard entries for in-place inputs
  • The page filter dims what the ERD does not match, and is not in the link
  • The explorer fork's content is part of Vite's optimizer hash, so an edit reaches the page
  • Meta queries answer under the GraphQL field names
  • Meta rows arrive under camelCase keys in any convention
  • Graph and panel table labels use catalogTableName
  • Open a live demo for every browser, signed in or not
  • SPARQL page reads as Cypher: panel prefixes on Run, class prefixes, group union, plain relationship names
  • Browser storage cannot crash or stop the app
  • List HTTP surfaces in health, multiselect term status
  • A pill dropped on a SPARQL frame edits its query
  • Read the node under a dragged node before the nudge moves it
  • A tour step pending stands alone, a visit opens in no environment, the nav holds one line
  • Correct why a visit starts in no environment
  • A full browser store gives up other control planes' entries, oldest first

ui-dev

  • The dev server forwards a product's own reads (/data-products/…) to the backend

ui-server

  • A regions sandbox or demo whose region no node serves is refused by name

warehouse lane

  • No Snowflake credit cap; Databricks stop re-sent until taken; Dataplex teardown polls only operations

General

  • A rewired replica runner stops the one it replaces; schema_gen binds its config's settings
  • The vulnerabilities demo grounds CWE in the weakness class; bounded-memory reads are ordered
  • A deleted org's entries leave every process cache; one org's row counts are never another's
  • A DuckDB order by an output name a source column shares sorts by the output; the pg engine lands into a schema its store does not hold yet
  • Team page title keeps a gap above its subtitle (J206)
  • Integration fallout -- composites land as JSON, system schemas take no domain's alias, tests pin their state