From 6c2eb5c82e53ac21ae2f5f11e40f16a8c924ee8e Mon Sep 17 00:00:00 2001 From: Jon Langevin Date: Sun, 24 May 2026 05:29:28 -0400 Subject: [PATCH] feat(protocol): add full network modes --- protocol/types.go | 10 +++++++--- protocol/types_test.go | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/protocol/types.go b/protocol/types.go index d880d97..44cfe0f 100644 --- a/protocol/types.go +++ b/protocol/types.go @@ -128,8 +128,12 @@ const ( type NetworkMode string const ( - NetworkModeDirect NetworkMode = "direct" - NetworkModeRelay NetworkMode = "relay" + NetworkModeDirect NetworkMode = "direct" + NetworkModeRelay NetworkMode = "relay" + NetworkModeTailnet NetworkMode = "tailnet" + NetworkModeTor NetworkMode = "tor" + NetworkModeP2P NetworkMode = "p2p" + NetworkModeOffline NetworkMode = "offline" ) type PlacementRequirements struct { @@ -1147,7 +1151,7 @@ func normalizeNetworkMode(mode NetworkMode) NetworkMode { func validNetworkMode(mode NetworkMode) bool { switch mode { - case NetworkModeDirect, NetworkModeRelay: + case NetworkModeDirect, NetworkModeRelay, NetworkModeTailnet, NetworkModeTor, NetworkModeP2P, NetworkModeOffline: return true default: return false diff --git a/protocol/types_test.go b/protocol/types_test.go index 2a4ef38..4b6a446 100644 --- a/protocol/types_test.go +++ b/protocol/types_test.go @@ -258,6 +258,24 @@ func TestProviderContractRejectsMismatchedProductVersionWhenPresent(t *testing.T } } +func TestProviderContractAcceptsWorkflowComputeNetworkModes(t *testing.T) { + for _, mode := range []protocol.NetworkMode{ + protocol.NetworkModeDirect, + protocol.NetworkModeRelay, + protocol.NetworkModeTailnet, + protocol.NetworkModeTor, + protocol.NetworkModeP2P, + protocol.NetworkModeOffline, + } { + contract := validBatchProviderContract() + contract.NetworkModes = []protocol.NetworkMode{mode} + + if err := contract.Validate(); err != nil { + t.Fatalf("contract rejected network mode %q: %v", mode, err) + } + } +} + func TestProviderConformanceEvidenceRequiresArtifactDigestAndObservation(t *testing.T) { evidence := protocol.ProviderConformanceEvidence{ ProtocolVersion: protocol.Version,