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,