Releases: Query-farm/vgi-rpc-python
v0.20.4
Fix: shared-memory request-batch resolution
Fixes a cross-language shm transport bug where a client (the C++ vgi extension) routes a large single-row request batch through the shm side channel: the worker previously only resolved external-location pointers, so such requests tripped Expected 1 row in request batch, got 0 (seen on accumulate/* and table_buffering/* over shm).
_read_requestnow resolves shm-pointer request batches (static segment, connection-cached segment, or one attached from the request's own metadata).- New per-connection
_ConnectionShmcache: the client names its segment once and reuses it for later offset-only batches; the worker attaches on first sight and holds it for the connection lifetime. - Responses route through shm only for exchanges the client signalled as shm (the C++ client resolves shm responses only for table_buffering_/aggregate methods), so inline control responses (bind, catalog_, transaction_*) are no longer wrongly shm-routed.
Includes a cross-language regression test.
🤖 Generated with Claude Code
v0.20.3
Hypothesis property-based tests (test-only)
Adds property-based testing infrastructure (dev-only hypothesis dependency). No library code changes — the published wheel is functionally identical to v0.20.2.
- Round-trip coverage (
tests/test_property_roundtrip.py): auto-discovers everyArrowSerializableDataclasssubclass (51 today) and assertsdeserialize(serialize(x)) == x, building a strategy per class from its annotations + resolvedARROW_SCHEMAso integer widths, decimal scale, and temporal units are respected. New dataclasses are covered automatically; unmodelled field shapes skip with a reason. - shm allocator stateful machine (
tests/test_property_shm.py): aRuleBasedStateMachinedrives randomallocate/freesequences against the first-fitShmAllocatorplus a Python model, asserting the safety invariants every step — no overlap, in-bounds, sorted, header count consistent, and "allocate returns None only when no gap fits."
Both run in ~2.5s at committed settings and pass mypy strict + ruff.
Full diff: v0.20.2...v0.20.3
v0.20.2
Zero-suppression pydoclint gate
Every previously-frozen docstring violation is now fixed, so the pydoclint gate runs fully clean — no baseline, no per-code suppressions. New violations fail CI immediately.
Docstrings completed
- DOC101/103 —
Args:added to 17 private helpers, dunders, and exception__init__s. - DOC201 —
Returns:added to 16 value-returning functions/methods, including theStreamclient-side stubs and conformance Protocol producers. - DOC602/603/606 —
MessageClassVarconstants documented in the class docstring, data fields moved to__init__Args:;HttpTransientError.__init__documented. - DOC304 —
WorkerPoolconstructor docs moved from the class docstring to__init__.
Config
- Enabled
allow_init_docstring(validate__init__Args:on the method), matching vgi-python's current config. - Removed the baseline and the non-functional
ignorekey (pydoclint 0.8.x has no per-code ignore).
No public API changes — docstrings, annotations, and lint config only.
Full diff: v0.20.1...v0.20.2
v0.20.1
Tooling: pydoclint docstring gate
Adopts pydoclint with the same Google-style configuration as vgi-python, enforcing that documented arguments/attributes stay in sync with the code. Now runs in the CI lint job and is step 3 of the pre-commit checklist.
Docstring fixes (reviewed, not blindly frozen)
- Corrected genuine drift in
HttpServerCapabilities,RpcMethodInfo, andServiceDescription(missing / mis-ordered attributes). - Documented
Argson the public surface:RpcServer.serve_one,StreamSession.exchange,ShmAllocator.free,OutputCollector.merge_data_metadata, and thefmt_*debug helpers. - Added class-level annotations to
HttpTransientError(status_code/retry_after), resolving the attribute mismatch and improving type visibility.
No public API changes — docstrings, annotations, and dev tooling only.
Full diff: v0.20.0...v0.20.1
v0.20.0
Full Changelog: v0.19.1...v0.20.0
v0.19.1
Full Changelog: v0.19.0...v0.19.1
v0.19.0
Full Changelog: v0.18.3...v0.19.0
v0.18.3
Add serve_named_pipe — Windows named-pipe RPC transport for the launch:/unix:// rendezvous (CPython has no AF_UNIX on Windows). run_server routes --unix to it on win32 with the PIPE: discovery prefix. Adds pywin32 as a Windows-only dependency.
v0.18.2
What's changed
Maintenance release: dependency security patches and CI runtime upgrades. No library API or behavior changes.
Security (Dependabot)
- Bump idna 3.11 → 3.15 — fixes a bypass of the CVE-2024-3651 fix where specially crafted inputs to
idna.encode()could slip through. - Bump pymdown-extensions 10.21.2 → 10.21.3 — fixes a regression in
pymdownx.snippetsthat reintroduced a sibling-prefix path-traversal bypass despiterestrict_base_path.
CI / workflows
- Upgrade GitHub Actions to Node 24-compatible runtimes:
actions/checkout@v5,astral-sh/setup-uv@v6,actions/attest-build-provenance@v4.
🤖 Generated with Claude Code
v0.18.1
What's changed since v0.17.1
Application protocol_version enforcement (0.18.0)
- Protocols declaring
protocol_version(aClassVar[str], canonical semver) now have it enforced per-request at the dispatch boundary. The client sendsvgi_rpc.protocol_versionin custom metadata on every call; the server raisesProtocolVersionErroron an exact major+minor mismatch (patch ignored). __describe__is exempt so a mismatched client can still introspect to discover the server's version.- Enforcement applies on both pipe and HTTP dispatch paths, with conformance coverage.
CLI forwards protocol_version (0.18.1)
- The
vgi-rpcCLI now forwardsprotocol_versionon every call.
Conformance / platform
- Skip
http_externalize_alwaysproducer-error test on Windows (fixture-level skip).
🤖 Generated with Claude Code