Dependency review: grpc-go
- Decision: approved for the isolated
github.com/spice-framework/starter-grpcmodule. - Version:
google.golang.org/grpcv1.82.1. - Upstream: https://github.com/grpc/grpc-go.
- License: Apache-2.0; retained with the mechanically vendored source.
- Maintenance: grpc-go is the official actively maintained Go implementation of gRPC. The selected release was published July 15, 2026, supports Go 1.25+, and is compatible with Spice’s mandatory Go 1.26.5 toolchain.
- Dependency scope: grpc-go brings the official protobuf runtime plus bounded
x/netHTTP/2 and Google RPC status packages. Spice does not adopt protoc or its plugins as runtime dependencies and does not create an alternative IDL toolchain. - Security: server TLS 1.2+ with an explicit certificate is the default; clients use verified TLS and target-hostname validation. Plaintext requires a local-development opt-out. Message sizes, concurrent streams, targets, service names, and registration counts are bounded. Reflection and arbitrary native server options are not enabled by the starter.
- Cancellation: every RPC remains caller-context-owned. Server cleanup attempts graceful drain, force-stops when its lifecycle context expires, and reports the cancellation cause. Client construction is lazy and cleanup is idempotent.
- Observability: unary and streaming client/server interceptors expose only method identity, direction, kind, status code, and duration. They never receive a payload or credential field through the Spice observer contract.
- Configuration:
OpenServerdoes not bind;OpenClientdoes not connect. Applications explicitly own listeners, registrations, generated clients, credentials, and service policy. There is no package-presence activation, global registry, or hidden module download. - Verification: race-enabled local TCP acceptance uses a locally issued CA, verified server TLS, and required client certificates. It exercises RPCs, standard health, client/server observations, concurrency, message limits, graceful cleanup, forced cancellation, invalid registrations, and diagnostic redaction without external network access.
- Spice compatibility: the module selects the provisional minimum. The strict repository compatibility manifest and isolated CI matrix verify distinct minimum and current revisions with exact MVS selection; the starter manifest independently requires the exact Spice starter API.
Build-only dependencies: Spice release tools
- Decision: approved as the repository-authorized release signer, renderer, and independent verifier.
- Signer version:
github.com/spice-framework/developmentv0.0.0-20260806132124-4c308d1b9fda. - Signer tool:
github.com/spice-framework/development/cmd/spice-devthrough the standard Gotooldirective; invocations always use the full package path. - Verifier version:
github.com/spice-framework/toolchainv0.0.0-20260806133530-71211498297c. - Verifier tool:
github.com/spice-framework/toolchain/cmd/spice-library-release-verify. - License: Apache-2.0, with its notice retained in
vendor. - Runtime scope: none. Product packages do not import the development module, and released applications acquire no runtime dependency on it.
- Dependency graph: the tool participates in normal Go minimal-version
selection. That build-time coupling is accepted and visible in
go.mod,go.sum, andvendor/modules.txt; no parallel tool registry is introduced. - Integrity and network behavior: the exact pseudo-version is pinned and
checksummed. Release rehearsal runs with
GOWORK=off,GOPROXY=off,GOTOOLCHAIN=local, andGOFLAGS=-mod=vendor, so it cannot select an ambient checkout, upgrade itself, or download dependencies. - Security: the trusted native renderer reads the exact committed Git graph and writes only to caller-supplied temporary output directories. The independent verifier authenticates release artifacts against an external trust anchor and exact Git objects. Neither tool generates private material.
- Maintenance: the protected central workflow is the sole production builder.
The caller maps only the repository
SPICE_LIBRARY_RELEASE_SIGNING_KEYsecret; secret inheritance and additional mappings are rejected by repository verification. The protected signing and publishing environments remain approval boundaries. The former repository-local builder was removed after the protected, independently verified central path was established.
Primary references: