Skip to content

v0.48.0

Choose a tag to compare

@rustyconover rustyconover released this 06 Oct 01:41
· 41 commits to main since this release

This release lets a server host several application protocols at once, gives every error a gRPC-shaped status, and adds a second conformance protocol that pins both down across every port.

Hosting several protocols. RpcServer(..., extra_protocols=[...]) is now normative (WIRE_PROTOCOL §3.1). The set is sealed by first serve, identical on every transport, and listed by list_protocols in registration order. The reserved vgi_rpc. prefix applies to every registered protocol. Reflection features is reserved and always emitted empty.

gRPC-shaped errors (§8):

  • Code: every error batch carries vgi_rpc.error_code, one of gRPC's 16 codes minus OK.
  • Reason: the existing open vgi_rpc.error_kind.
  • Details: vgi_rpc.error_details, a typed catalog (ErrorInfo, RetryInfo, BadRequest, PreconditionFailure, QuotaFailure, ResourceInfo, Help, LocalizedMessage), capped at 4 KiB and dropped whole if larger.
  • Unclassified errors are UNKNOWN.
  • RpcError now exposes error_code, error_kind, error_details, typed accessors and is_retryable() on every decode path. RPC errors are never retried automatically.
  • Tracebacks are included by default on every transport. RpcServer(include_tracebacks=False) omits them everywhere.
  • Access-log records gain error_code.

Identity (§16). identity_unavailable carries RetryInfo. An AuthUnavailableError raised from either identity hook is now translated to it instead of reaching the client unclassified.

Conformance:

  • conformance.Secondary.v1: a second protocol hosted by every conformance worker, with pinned hash 58557cf1….
  • New test groups: secondary-protocol, error-model and traceback.
  • vgi-rpc-test-hosted: checks any worker (including VGI SDK workers) over stdio, unix and HTTP. It includes a reverse-ordered worker that catches a server sorting its listing.
  • Client-driver error object: now carries error_code / error_kind / error_details. It never carried error_kind before, which is why three clients dropped it unnoticed.

Fixes:

  • A quoted worker command (--cmd "C:\…\python.exe" …) now starts on Windows.
  • ClientDriverProxy.describe no longer shadows Reflection's describe(protocol=...).

The normative cross-port contract is tools/cross-port/specs/MULTI_PROTOCOL_HOSTING.md.