============================= test session starts ==============================
platform darwin -- Python 3.12.12, pytest-9.0.2, pluggy-1.6.0 -- /Users/dondoe/coding/zeroth/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /Users/dondoe/coding/zeroth
configfile: pyproject.toml
plugins: anyio-4.12.1, langsmith-0.7.20, asyncio-1.3.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 69 items

tests/service/test_app.py::test_bootstrap_service_loads_valid_deployment PASSED [  1%]
tests/service/test_app.py::test_bootstrap_service_accepts_injected_runners PASSED [  2%]
tests/service/test_app.py::test_bootstrap_app_forwards_injected_runners PASSED [  4%]
tests/service/test_app.py::test_bootstrap_service_fails_for_missing_deployment PASSED [  5%]
tests/service/test_app.py::test_bootstrap_service_rejects_mismatched_graph_snapshot PASSED [  7%]
tests/service/test_app.py::test_health_endpoint_returns_success PASSED   [  8%]
tests/service/test_approval_api.py::test_approval_api_queries_pending_approvals_by_id_run_thread_and_scope PASSED [ 10%]
tests/service/test_approval_api.py::test_approval_api_resolves_all_decisions_and_resumes_when_appropriate[approve-None-succeeded-expected_output0] PASSED [ 11%]
tests/service/test_approval_api.py::test_approval_api_resolves_all_decisions_and_resumes_when_appropriate[reject-None-failed-None] PASSED [ 13%]
tests/service/test_approval_api.py::test_approval_api_resolves_all_decisions_and_resumes_when_appropriate[edit_and_approve-edited_payload2-succeeded-expected_output2] PASSED [ 14%]
tests/service/test_approval_api.py::test_approval_api_duplicate_resolution_is_idempotent PASSED [ 15%]
tests/service/test_auth_api.py::test_service_health_requires_authentication PASSED [ 17%]
tests/service/test_auth_api.py::test_service_health_accepts_api_key_authentication PASSED [ 18%]
tests/service/test_auth_api.py::test_approval_resolution_uses_authenticated_principal PASSED [ 20%]
tests/service/test_bearer_auth.py::test_health_accepts_valid_bearer_token PASSED [ 21%]
tests/service/test_bearer_auth.py::test_health_rejects_bearer_token_with_wrong_issuer PASSED [ 23%]
tests/service/test_bearer_auth.py::test_health_rejects_bearer_token_with_wrong_audience PASSED [ 24%]
tests/service/test_bearer_auth.py::test_health_rejects_bearer_token_with_wrong_signature PASSED [ 26%]
tests/service/test_contract_api.py::test_input_contract_endpoint_returns_deployed_contract_version PASSED [ 27%]
tests/service/test_contract_api.py::test_output_contract_endpoint_returns_deployed_contract_version PASSED [ 28%]
tests/service/test_contract_api.py::test_result_error_state_schema_endpoint_exposes_output_contract_and_error_schema PASSED [ 30%]
tests/service/test_contract_api.py::test_deployment_metadata_endpoint_returns_version_snapshot PASSED [ 31%]
tests/service/test_contract_api.py::test_schema_serialization_round_trip PASSED [ 33%]
tests/service/test_contract_api.py::test_contract_endpoints_use_deployed_contract_versions PASSED [ 34%]
tests/service/test_contract_api.py::test_contract_endpoints_fail_closed_for_legacy_unpinned_deployment PASSED [ 36%]
tests/service/test_contract_api.py::test_contract_endpoint_returns_404_for_unknown_deployment PASSED [ 37%]
tests/service/test_e2e_phase4.py::test_phase4_end_to_end_deploy_invoke_resume_thread_and_rollback PASSED [ 39%]
tests/service/test_e2e_phase5.py::test_phase5_linear_graph_runs_agent_to_eu_to_agent_via_api PASSED [ 40%]
tests/service/test_e2e_phase5.py::test_phase5_cyclic_graph_stops_at_loop_guard_via_api PASSED [ 42%]
tests/service/test_e2e_phase5.py::test_phase5_conditional_branching_fans_out_via_api PASSED [ 43%]
tests/service/test_e2e_phase5.py::test_phase5_approval_pause_and_resume_via_api PASSED [ 44%]
tests/service/test_e2e_phase5.py::test_phase5_thread_continuity_across_runs_via_api PASSED [ 46%]
tests/service/test_e2e_phase5.py::test_phase5_shared_memory_connector_between_agents_via_api PASSED [ 47%]
tests/service/test_e2e_phase5.py::test_phase5_deploy_and_invoke_via_service_wrapper_api PASSED [ 49%]
tests/service/test_e2e_phase5.py::test_phase5_policy_violation_fails_execution_and_records_audit PASSED [ 50%]
tests/service/test_rbac_api.py::test_reviewer_cannot_create_runs PASSED  [ 52%]
tests/service/test_rbac_api.py::test_operator_cannot_resolve_approvals PASSED [ 53%]
tests/service/test_rbac_api.py::test_admin_can_read_deployment_metadata PASSED [ 55%]
tests/service/test_run_api.py::test_run_creation_accepts_input_and_supplied_thread_id PASSED [ 56%]
tests/service/test_run_api.py::test_run_creation_without_thread_id_returns_new_thread_linkage PASSED [ 57%]
tests/service/test_run_api.py::test_run_creation_rejects_invalid_input PASSED [ 59%]
tests/service/test_run_api.py::test_run_creation_validates_against_deployed_input_contract_version PASSED [ 60%]
tests/service/test_run_api.py::test_run_creation_rejects_foreign_thread_id PASSED [ 62%]
tests/service/test_run_api.py::test_run_status_reports_running_and_completed_state PASSED [ 63%]
tests/service/test_run_api.py::test_run_status_returns_404_for_unknown_run PASSED [ 65%]
tests/service/test_run_api.py::test_run_status_does_not_expose_runs_from_other_deployments PASSED [ 66%]
tests/service/test_run_api.py::test_run_status_does_not_expose_runs_from_other_deployment_versions PASSED [ 68%]
tests/service/test_run_api.py::test_run_status_reports_failed_state PASSED [ 69%]
tests/service/test_run_api.py::test_run_creation_returns_404_when_pinned_input_contract_is_missing PASSED [ 71%]
tests/service/test_run_api.py::test_run_status_reports_approval_paused_state PASSED [ 72%]
tests/service/test_run_api.py::test_run_status_reports_policy_and_loop_guard_termination PASSED [ 73%]
tests/service/test_run_api.py::test_run_api_models_validate_expected_shapes PASSED [ 75%]
tests/service/test_tenant_isolation.py::test_cross_tenant_run_read_returns_not_found_and_audits_denial PASSED [ 76%]
tests/service/test_tenant_isolation.py::test_cross_tenant_approval_resolution_is_hidden PASSED [ 78%]
tests/service/test_thread_api.py::test_thread_api_creates_new_thread_when_thread_id_is_omitted PASSED [ 79%]
tests/service/test_thread_api.py::test_thread_api_continues_existing_thread_for_same_deployment_snapshot PASSED [ 81%]
tests/service/test_thread_api.py::test_thread_api_accepts_new_explicit_thread_id_as_fresh_context PASSED [ 82%]
tests/service/test_thread_api.py::test_thread_api_rejects_thread_from_other_deployment PASSED [ 84%]
tests/service/test_thread_api.py::test_thread_api_rejects_thread_from_other_deployment_version PASSED [ 85%]
tests/service/test_thread_api.py::test_thread_api_keeps_thread_linkage_visible_in_run_state_and_audits PASSED [ 86%]
tests/live_scenarios/test_research_audit.py::test_research_audit_bootstrap_and_api_flow PASSED [ 88%]
tests/live_scenarios/test_research_audit.py::test_research_audit_approval_pause_and_resume PASSED [ 89%]
tests/live_scenarios/test_research_audit.py::test_research_audit_thread_continuity_across_runs PASSED [ 91%]
tests/live_scenarios/test_research_audit.py::test_research_audit_strict_policy_mode_terminates_run PASSED [ 92%]
tests/approvals/test_service.py::test_approval_service_creates_and_queries_pending_records PASSED [ 94%]
tests/approvals/test_service.py::test_approval_service_resolves_and_is_idempotent PASSED [ 95%]
tests/audit/test_audit_repository.py::test_audit_repository_writes_queries_and_assembles_timeline PASSED [ 97%]
tests/audit/test_audit_repository.py::test_payload_sanitizer_redacts_keys_and_omits_fields PASSED [ 98%]
tests/audit/test_audit_repository.py::test_audit_repository_round_trips_actor_and_scope PASSED [100%]

============================== 69 passed in 6.46s ==============================
