Ordered so that each milestone is testable against ~/Development/vgi's suite
rather than against assertions written here. The suite is the specification;
anything this file claims that the suite disagrees with is wrong.
Every function shape the protocol has, and the catalog surface around them.
- Scalar functions — overloads resolved by argument type and by arity, per-schema and per-catalog registration, type bounds, declared ranges enforced at bind, stability, null handling, per-value result caching.
- Table functions — producer streams, cardinality, per-column statistics, projection / filter / sampling pushdown, ORDER BY and TABLESAMPLE hints, dynamic filters delivered per tick, partitioning and batch indexes, row ids, late materialization, required filters, time travel.
- Table-in-out functions — the exchange path with fan-out and the per-output-row provenance a batched correlated LATERAL needs, per-substream finalize, per-emission cache advertisements and conditional requests.
- Aggregates — bind / update / combine / finalize / destructor, windowed and batched-window, streaming-partitioned, with per-group state in cross-process storage.
- Table buffering — sink, combine, and a finalize producer, with input batch indexes and the order guarantees around them.
- Catalogs — schemas, tables bound to scan functions, multi-branch tables stitched from several scans, views, macros, constraints, comments, tags, object counts, time travel, transactions, and several catalogs from one process.
- ATTACH — npm-style data-version resolution, per-version schemas, typed ATTACH options with defaults, per-attachment identity.
- Result cache — TTLs, nonces, scopes, revalidation, partition scopes, spill, and the poison and never-partial guarantees.
- COPY — TO and FROM, sharing one format name between a writer and a reader.
- Settings and secrets — declared at ATTACH, delivered per call, with two-phase resolution and secrets looked up by type and by scope.
- In-band logging from every call, not only from a stream.
- Global functions published into the engine's own namespace.
- HTTP transport. The producer stream's state-token continuation path is
exercised by
vgi-rpc-c++'s own conformance suite but not by a VGI worker, and the*_httpvariants of the integration tests are skipped here. - Writable catalogs.
catalog_table_insert_function_getand its siblings refuse;simple_writable's tests are skipped for want of the fixture worker. - The auth principal. Nothing carries the resolved caller identity onto
BindParams, so identity-scoped caching cannot be observed. - Iceberg and companion catalogs, both gated behind environment the suite does not set here.
- Namespace of generated code.
duckdb::vgi::generatedis an artifact of the generators' original consumer. A--namespaceflag upstream invgi-pythonis the clean fix. Aliased for now. - Response builders.
vgi_request_builders.hppis client-side. Whether worker-side response builders should be generated too is still undecided; the hand-writtenResultBuilderhas held up well enough that it may not be worth it.