ST5 — Integration & live gate: cross-transport conformance + end-to-end leaf
Part of the SandboxTransport epic (see epic #89). Both tracks. Depends on ST3 (backend) and ST4 (worker).
Spec: docs/specs/2026-07-08-sandbox-transport-grpc-design.md §11, §13.3.
Problem
KubectlTransport and GrpcRelayTransport are only safely swappable (driver #2) if they demonstrably satisfy the same SandboxTransport contract, and the remote path only counts as real once a genuine Go worker pod serves a leaf end-to-end over :443.
Goal
Prove equivalence and land the live gate (§11 testing table):
- Conformance battery — one shared spec run against both
KubectlTransport and GrpcRelayTransport: round-trip every op (read/write/bash/grep), abort mid-stream, timeout, reconnect→dedup, output-cap. This is what makes the two transports safely interchangeable. (The battery is authored here and is the same suite ST2 uses to prove its refactor inert.)
- Manifest-shape test — a vitest that parses the relay + worker
Deployment YAML directly (no kustomize in CI), matching the existing manifest-shape pattern.
- Live gate — a real Go worker pod dialing the in-cluster relay over
:443; one leaf end-to-end on Kind, then OCP, following the existing leaf-smoke pattern.
Non-goals (this task)
- New transport behavior (owned by ST2/ST3) or worker behavior (ST4).
- The deferred items (mTLS, multi-replica HA, private mesh, extra-language workers, HTTP/1.1 traversal — §13.4).
Acceptance
- The same conformance suite is green against both transports (identical observable contract).
- Manifest-shape vitest parses relay + worker Deployment YAML and passes in CI.
- Live leaf smoke passes with the Go worker → relay
:443 path on Kind, then on OCP (gated by the existing live-smoke env vars).
Touches
Shared conformance suite (k8s-sandbox tests, exercised by ST2 + ST3); Go contract tests (ST4); deploy/knative/ relay + worker manifests + smoke drivers (leaf-smoke.sh extension); CI wiring.
Next step
Green here retires the epic's core scope; deferred follow-ups (§13.4) stay tracked in the epic's Deferred section.
ST5 — Integration & live gate: cross-transport conformance + end-to-end leaf
Part of the SandboxTransport epic (see epic #89). Both tracks. Depends on ST3 (backend) and ST4 (worker).
Spec:
docs/specs/2026-07-08-sandbox-transport-grpc-design.md§11, §13.3.Problem
KubectlTransportandGrpcRelayTransportare only safely swappable (driver #2) if they demonstrably satisfy the sameSandboxTransportcontract, and the remote path only counts as real once a genuine Go worker pod serves a leaf end-to-end over:443.Goal
Prove equivalence and land the live gate (§11 testing table):
KubectlTransportandGrpcRelayTransport: round-trip every op (read/write/bash/grep), abort mid-stream, timeout, reconnect→dedup, output-cap. This is what makes the two transports safely interchangeable. (The battery is authored here and is the same suite ST2 uses to prove its refactor inert.)DeploymentYAML directly (no kustomize in CI), matching the existing manifest-shape pattern.:443; one leaf end-to-end on Kind, then OCP, following the existing leaf-smoke pattern.Non-goals (this task)
Acceptance
:443path on Kind, then on OCP (gated by the existing live-smoke env vars).Touches
Shared conformance suite (k8s-sandbox tests, exercised by ST2 + ST3); Go contract tests (ST4);
deploy/knative/relay + worker manifests + smoke drivers (leaf-smoke.shextension); CI wiring.Next step
Green here retires the epic's core scope; deferred follow-ups (§13.4) stay tracked in the epic's Deferred section.