@phase2 @a2a @server-stubs Feature: Server Client Stubs and Connection Config As a developer I want protocol stubs for server communication So that the server client interfaces are defined before implementation # ----------------------------------------------------------------------- # ServerConnectionConfig validation # ----------------------------------------------------------------------- Scenario: ServerConnectionConfig accepts valid HTTPS URL When I create a ServerConnectionConfig with url "https://agents.example.com" Then the config server_url should be "https://agents.example.com" And the config namespace should be "default" And the config tls_verify should be true Scenario: ServerConnectionConfig accepts valid HTTP URL When I create a ServerConnectionConfig with url "http://localhost:8080" Then the config server_url should be "http://localhost:8080" Scenario: ServerConnectionConfig accepts custom namespace When I create a ServerConnectionConfig with url "https://agents.example.com" and namespace "my-team" Then the config namespace should be "my-team" Scenario: ServerConnectionConfig accepts auth_token_ref When I create a ServerConnectionConfig with url "https://agents.example.com" and auth_token_ref "CLEVERAGENTS_SERVER_TOKEN" Then the config auth_token_ref should be "CLEVERAGENTS_SERVER_TOKEN" Scenario: ServerConnectionConfig rejects empty URL When I try to create a ServerConnectionConfig with empty url Then a server config validation error should be raised Scenario: ServerConnectionConfig rejects non-HTTP URL When I try to create a ServerConnectionConfig with url "ftp://agents.example.com" Then a server config validation error should be raised Scenario: ServerConnectionConfig rejects whitespace-only URL When I try to create a ServerConnectionConfig with url " " Then a server config validation error should be raised Scenario: ServerConnectionConfig rejects empty namespace When I try to create a ServerConnectionConfig with url "https://ok.com" and empty namespace Then a server config validation error should be raised Scenario: ServerConnectionConfig is frozen When I create a ServerConnectionConfig with url "https://agents.example.com" Then the config should be immutable Scenario: ServerConnectionConfig tls_verify defaults to true When I create a ServerConnectionConfig with url "https://agents.example.com" Then the config tls_verify should be true Scenario: ServerConnectionConfig with tls_verify false When I create a ServerConnectionConfig with url "http://localhost:8080" and tls_verify false Then the config tls_verify should be false # ----------------------------------------------------------------------- # StubServerClient — all methods raise NotImplementedError # ----------------------------------------------------------------------- Scenario: StubServerClient health_check raises NotImplementedError Given a new StubServerClient When I call health_check on the stub server client Then a NotImplementedError should be raised with message containing "not yet implemented" Scenario: StubServerClient get_version raises NotImplementedError Given a new StubServerClient When I call get_version on the stub server client Then a NotImplementedError should be raised with message containing "not yet implemented" # ----------------------------------------------------------------------- # StubRemoteExecutionClient — all methods raise NotImplementedError # ----------------------------------------------------------------------- Scenario: StubRemoteExecutionClient execute_plan raises NotImplementedError Given a new StubRemoteExecutionClient When I call execute_plan with plan_id "PLAN001" on the stub execution client Then a NotImplementedError should be raised with message containing "not yet implemented" Scenario: StubRemoteExecutionClient get_plan_status raises NotImplementedError Given a new StubRemoteExecutionClient When I call get_plan_status with plan_id "PLAN001" on the stub execution client Then a NotImplementedError should be raised with message containing "not yet implemented" Scenario: StubRemoteExecutionClient cancel_plan raises NotImplementedError Given a new StubRemoteExecutionClient When I call cancel_plan with plan_id "PLAN001" on the stub execution client Then a NotImplementedError should be raised with message containing "not yet implemented" Scenario: StubRemoteExecutionClient rejects empty plan_id Given a new StubRemoteExecutionClient When I call execute_plan with empty plan_id on the stub execution client Then a ValueError should be raised for empty plan_id # ----------------------------------------------------------------------- # StubAuthClient — all methods raise NotImplementedError # ----------------------------------------------------------------------- Scenario: StubAuthClient authenticate raises NotImplementedError Given a new StubAuthClient When I call authenticate with token "tok_test" on the stub auth client Then a NotImplementedError should be raised with message containing "not yet implemented" Scenario: StubAuthClient validate_token raises NotImplementedError Given a new StubAuthClient When I call validate_token with token "tok_test" on the stub auth client Then a NotImplementedError should be raised with message containing "not yet implemented" Scenario: StubAuthClient rejects empty token Given a new StubAuthClient When I call authenticate with empty token on the stub auth client Then a ValueError should be raised for empty token # ----------------------------------------------------------------------- # Protocol conformance # ----------------------------------------------------------------------- Scenario: StubServerClient conforms to ServerClient protocol Then StubServerClient should be a runtime instance of ServerClient Scenario: StubRemoteExecutionClient conforms to RemoteExecutionClient protocol Then StubRemoteExecutionClient should be a runtime instance of RemoteExecutionClient Scenario: StubAuthClient conforms to AuthClient protocol Then StubAuthClient should be a runtime instance of AuthClient # ----------------------------------------------------------------------- # Config keys registration # ----------------------------------------------------------------------- Scenario: server.url config key is registered Then config key "server.url" should be registered Scenario: server.token config key is registered Then config key "server.token" should be registered Scenario: server.tls-verify config key is registered Then config key "server.tls-verify" should be registered Scenario: server.namespace config key is registered Then config key "server.namespace" should be registered Scenario: server.tls-verify defaults to true Then config key "server.tls-verify" should have default true Scenario: server.namespace defaults to "default" Then config key "server.namespace" should have default "default" # ----------------------------------------------------------------------- # Config keys load from environment # ----------------------------------------------------------------------- Scenario: server.url loads from CLEVERAGENTS_SERVER_URL environment Then config key "server.url" should use env var "CLEVERAGENTS_SERVER_URL" Scenario: server.tls-verify loads from CLEVERAGENTS_SERVER_TLS_VERIFY environment Then config key "server.tls-verify" should use env var "CLEVERAGENTS_SERVER_TLS_VERIFY" Scenario: server.namespace loads from CLEVERAGENTS_SERVER_NAMESPACE environment Then config key "server.namespace" should use env var "CLEVERAGENTS_SERVER_NAMESPACE" # ----------------------------------------------------------------------- # CLI connect command # ----------------------------------------------------------------------- Scenario: CLI server connect prints stub warning Given a temporary home directory for server tests When I invoke server connect with url "https://stub.example.com" and format "json" Then the server connect output should contain "not yet implemented" And the server connect output should contain "stubbed" Scenario: CLI server connect rejects invalid URL Given a temporary home directory for server tests When I invoke server connect with url "ftp://bad-url" and format "json" Then the server connect should exit with non-zero code # ----------------------------------------------------------------------- # Server mode resolution # ----------------------------------------------------------------------- Scenario: resolve_server_mode returns disabled when no URL configured Given no server URL is configured Then resolve_server_mode should return "disabled"