diff --git a/src/wf_client/app.py b/src/wf_client/app.py index e7413f80..83bd1ffa 100644 --- a/src/wf_client/app.py +++ b/src/wf_client/app.py @@ -94,6 +94,14 @@ class App: await self._port.inspect_capability(qualified_name=name) ) qualified_name = wire["name"] + if qualified_name != name: + raise InvalidResponse( + operation="workflow.capabilities.inspect", + details=( + f"inspected capability {qualified_name!r} does not match " + f"requested {name!r}" + ), + ) source_id = wire["source_id"] return RemoteCapability( _port=self._port, diff --git a/tests/wf_client/test_app.py b/tests/wf_client/test_app.py index e78ef8a1..184a1b45 100644 --- a/tests/wf_client/test_app.py +++ b/tests/wf_client/test_app.py @@ -6,6 +6,7 @@ import httpx import pytest from wf_client import App, CapabilitySummary, Page +from wf_client.errors import InvalidResponse from wf_client.protocols import WorkflowClientPort from wf_platform import CapabilityRef @@ -119,3 +120,11 @@ async def test_capability_reference_keeps_dotted_local_key() -> None: assert capability.ref.source.parts == ("app", "default") assert capability.ref.name == "search.v2" + + +@pytest.mark.asyncio +async def test_capability_rejects_mismatched_inspection_name() -> None: + app = _app(capability_name="app.default.other") + + with pytest.raises(InvalidResponse, match="workflow.capabilities.inspect"): + await app.capability("app.default.search")