Skip to content

T2 — integration scenarios (mounted agents) ​

2026-10-13, branch loop/issue-36, Python 3.14, local Temporal dev server (start_local).

uv run pytest tests/integration/mount -v ​

text
tests/integration/mount/test_fastapi.py::test_a_fastapi_app_includes_an_agent_router_and_lists_its_routes_in_openapi PASSED [  7%]
tests/integration/mount/test_fastapi.py::test_a_router_answers_503_before_start_and_enforces_its_limits PASSED [ 14%]
tests/integration/mount/test_fastapi.py::test_a_router_included_under_another_prefix_refuses_every_request PASSED [ 21%]
tests/integration/mount/test_multi_agent.py::test_five_agents_in_one_app_delegate_to_each_other[starlette] PASSED [ 28%]
tests/integration/mount/test_multi_agent.py::test_five_agents_in_one_app_delegate_to_each_other[fastapi] PASSED [ 35%]
tests/integration/mount/test_multi_agent.py::test_a_parked_sub_task_on_agent_b_pushes_to_agent_as_prefixed_route PASSED [ 42%]
tests/integration/mount/test_starlette.py::test_a_harness_starts_from_a_host_lifespan_and_opens_no_port PASSED [ 50%]
tests/integration/mount/test_starlette.py::test_an_agent_mounted_under_a_prefix_serves_its_card_with_prefixed_urls PASSED [ 57%]
tests/integration/mount/test_starlette.py::test_a_mounted_agent_answers_503_until_its_harness_has_started PASSED [ 64%]
tests/integration/mount/test_starlette.py::test_an_agent_mounted_at_the_wrong_path_refuses_every_request PASSED [ 71%]
tests/integration/mount/test_starlette.py::test_a_top_level_harness_app_starts_itself_from_the_server_lifespan PASSED [ 78%]
tests/integration/mount/test_starlette.py::test_with_the_push_route_off_a_remote_sub_task_is_followed PASSED [ 85%]
tests/integration/mount/test_starlette.py::test_several_harnesses_start_and_stop_in_order_from_one_lifespan PASSED [ 92%]
tests/integration/mount/test_starlette.py::test_each_log_line_names_the_agent_that_wrote_it PASSED [100%]
exit=0

Scenario table ​

the-loop scenarios --root "$PWD" --glob "tests/integration/mount/*.py" --glob "tests/security/test_multi_agent_isolation.py" --glob "tests/security/test_participant_resolver.py" --glob "tests/integration/test_package.py" --format markdown

#FeatureScenarioRequirementLocation
1an agent included in a host FastAPI appA FastAPI app includes an agent router and lists its routes in OpenAPIdocs/specs/issue-36/requirements.md#R3tests/integration/mount/test_fastapi.py:44
2an agent included in a host FastAPI appA router answers 503 before start and enforces its limitsdocs/specs/issue-36/requirements.md#R3, #R4tests/integration/mount/test_fastapi.py:97
3an agent included in a host FastAPI appA router included under another prefix refuses every requestdocs/specs/issue-36/requirements.md#R3tests/integration/mount/test_fastapi.py:126
4five agents in one appfive agents in one app delegate to each otherdocs/specs/issue-36/requirements.md#R5, #R6tests/integration/mount/test_multi_agent.py:130
5five agents in one appA parked sub-task on agent b pushes to agent a's prefixed routedocs/specs/issue-36/requirements.md#R6tests/integration/mount/test_multi_agent.py:187
6an agent mounted on a host Starlette appA harness starts from a host lifespan and opens no portdocs/specs/issue-36/requirements.md#R1, #R2, #R4tests/integration/mount/test_starlette.py:50
7an agent mounted on a host Starlette appAn agent mounted under a prefix serves its card with prefixed URLsdocs/specs/issue-36/requirements.md#R2, #R4tests/integration/mount/test_starlette.py:88
8an agent mounted on a host Starlette appA mounted agent answers 503 until its harness has starteddocs/specs/issue-36/requirements.md#R2tests/integration/mount/test_starlette.py:114
9an agent mounted on a host Starlette appAn agent mounted at the wrong path refuses every requestdocs/specs/issue-36/requirements.md#R2tests/integration/mount/test_starlette.py:141
10an agent mounted on a host Starlette appA top-level harness app starts itself from the server lifespandocs/specs/issue-36/requirements.md#R2, #R7tests/integration/mount/test_starlette.py:169
11an agent mounted on a host Starlette appWith the push route off a remote sub-task is followeddocs/specs/issue-36/requirements.md#R4tests/integration/mount/test_starlette.py:193
12an agent mounted on a host Starlette appSeveral harnesses start and stop in order from one lifespandocs/specs/issue-36/requirements.md#R5tests/integration/mount/test_starlette.py:222
13an agent mounted on a host Starlette appEach log line names the agent that wrote itdocs/specs/issue-36/requirements.md#R5 (non-functional: observability)tests/integration/mount/test_starlette.py:251
14agents in one process are isolated from each otherAgent a treats every task of agent b as unknowndocs/specs/issue-36/requirements.md#R5 (Security considerations, abuse case 2)tests/security/test_multi_agent_isolation.py:102
15agents in one process are isolated from each otherA push for agent b's stand-in at agent a's route is refuseddocs/specs/issue-36/requirements.md#R5 (abuse case 3)tests/security/test_multi_agent_isolation.py:158
16agents in one process are isolated from each otherA second harness on the same namespace and queue does not startdocs/specs/issue-36/requirements.md#R5 (abuse case 4)tests/security/test_multi_agent_isolation.py:182
17agents in one process are isolated from each otherA request before start never reaches Temporaldocs/specs/issue-36/requirements.md#R2 (abuse case 5)tests/security/test_multi_agent_isolation.py:221
18agents in one process are isolated from each otherOne agent's log masks another agent's keydocs/specs/issue-36/requirements.md#R5 (abuse case 6)tests/security/test_multi_agent_isolation.py:249
19the host app's authentication names the participantWith a resolver a spoofed participant header is ignoreddocs/specs/issue-36/requirements.md#R4 (Security considerations, abuse case 1)tests/security/test_participant_resolver.py:80
20tiny_harness is installable as a packagethe built wheel installs and exposes the package versiondocs/specs/issue-2/requirements.md#R2tests/integration/test_package.py:22
21tiny_harness is installable as a packagethe FastAPI helper needs its extradocs/specs/issue-36/requirements.md#R3tests/integration/test_package.py:64