plm-engine-core 1.2.0__tar.gz → 1.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/PKG-INFO +1 -1
  2. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/__init__.py +1 -1
  3. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core.egg-info/PKG-INFO +1 -1
  4. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/pyproject.toml +1 -1
  5. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_proof_driver.py +20 -0
  6. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/README.md +0 -0
  7. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/agent_runtime/__init__.py +0 -0
  8. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/agent_runtime/dispatcher.py +0 -0
  9. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/agent_runtime/selector.py +0 -0
  10. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/cli/__init__.py +0 -0
  11. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/cli/__main__.py +0 -0
  12. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/cli/auth.py +0 -0
  13. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/__init__.py +0 -0
  14. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/_lint_fixtures/__init__.py +0 -0
  15. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/_lint_fixtures/violation_demo.py +0 -0
  16. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/capability_registry/__init__.py +0 -0
  17. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/capability_registry/errors.py +0 -0
  18. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/capability_registry/registry.py +0 -0
  19. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/connectors/__init__.py +0 -0
  20. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/connectors/dispatcher.py +0 -0
  21. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/connectors/runtime.py +0 -0
  22. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/dispatch.py +0 -0
  23. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/hitl/__init__.py +0 -0
  24. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/hitl/errors.py +0 -0
  25. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/hitl/gate.py +0 -0
  26. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/hitl/sql_store.py +0 -0
  27. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/identity/__init__.py +0 -0
  28. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/identity/middleware.py +0 -0
  29. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/identity/provider.py +0 -0
  30. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/identity/system_identity.py +0 -0
  31. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/identity/telemetry.py +0 -0
  32. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/knowledge/__init__.py +0 -0
  33. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/knowledge/curation_index.py +0 -0
  34. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/knowledge/envelope.py +0 -0
  35. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/knowledge/runtime.py +0 -0
  36. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/policies/__init__.py +0 -0
  37. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/policies/authorization.py +0 -0
  38. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/policies/autonomy_gating.py +0 -0
  39. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/policies/base.py +0 -0
  40. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/policies/cost_budget.py +0 -0
  41. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/policies/rate_limit.py +0 -0
  42. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/retry_policy.py +0 -0
  43. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/control_plane/run_task_tracker.py +0 -0
  44. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/__init__.py +0 -0
  45. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/__main__.py +0 -0
  46. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/__init__.py +0 -0
  47. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/bundle.py +0 -0
  48. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/dto.py +0 -0
  49. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/event_bus.py +0 -0
  50. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/executor.py +0 -0
  51. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/governance.py +0 -0
  52. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/hitl.py +0 -0
  53. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/lifecycle.py +0 -0
  54. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/mcrc.py +0 -0
  55. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/registry.py +0 -0
  56. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/snapshot.py +0 -0
  57. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/agent_run/taxonomy.py +0 -0
  58. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/main.py +0 -0
  59. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/readiness.py +0 -0
  60. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/routers/__init__.py +0 -0
  61. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/routers/agent_runs.py +0 -0
  62. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/routers/config.py +0 -0
  63. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/routers/health.py +0 -0
  64. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/core_host/settings.py +0 -0
  65. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/llm_catalog/__init__.py +0 -0
  66. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/llm_catalog/loader.py +0 -0
  67. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/llm_catalog/model_list.yaml +0 -0
  68. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/__init__.py +0 -0
  69. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/asgi.py +0 -0
  70. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/errors.py +0 -0
  71. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/manifest.py +0 -0
  72. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/openapi.py +0 -0
  73. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/server.py +0 -0
  74. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/mcp/tools.py +0 -0
  75. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/__init__.py +0 -0
  76. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/agent_telemetry_service.py +0 -0
  77. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/database.py +0 -0
  78. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/database_service.py +0 -0
  79. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/default_bindings.py +0 -0
  80. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/invocation_context.py +0 -0
  81. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/invocation_lifecycle.py +0 -0
  82. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/invocation_telemetry.py +0 -0
  83. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/llm_env.py +0 -0
  84. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/llm_service.py +0 -0
  85. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/plan_analysis_service.py +0 -0
  86. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/pricing_service.py +0 -0
  87. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/retry_orchestrator.py +0 -0
  88. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/retry_policy.py +0 -0
  89. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/run_task_tracker.py +0 -0
  90. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/scoped_state.py +0 -0
  91. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/token_estimator.py +0 -0
  92. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/runtime/workspace_port.py +0 -0
  93. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/studio/__init__.py +0 -0
  94. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/studio/readers/__init__.py +0 -0
  95. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core/studio/readers/mcrc_v1.py +0 -0
  96. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core.egg-info/SOURCES.txt +0 -0
  97. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core.egg-info/dependency_links.txt +0 -0
  98. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core.egg-info/entry_points.txt +0 -0
  99. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core.egg-info/requires.txt +0 -0
  100. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/plm_engine_core.egg-info/top_level.txt +0 -0
  101. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/setup.cfg +0 -0
  102. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_agent_run_contract.py +0 -0
  103. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_agent_run_feature_flag.py +0 -0
  104. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_agent_run_hitl_contract.py +0 -0
  105. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_agent_snapshot.py +0 -0
  106. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_agent_turn_execution.py +0 -0
  107. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_authorization_policy.py +0 -0
  108. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_autonomy_gating_policy.py +0 -0
  109. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_capability_registry.py +0 -0
  110. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_cli_auth.py +0 -0
  111. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_connector_dispatcher.py +0 -0
  112. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_contract_bundle.py +0 -0
  113. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_core_host_build_app.py +0 -0
  114. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_core_host_wave9_parity_smoke.py +0 -0
  115. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_cost_budget_policy.py +0 -0
  116. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_error_code_mirror.py +0 -0
  117. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_error_taxonomy.py +0 -0
  118. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_evidence_pack.py +0 -0
  119. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_evidence_pack_cli.py +0 -0
  120. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_execution_error_normalization.py +0 -0
  121. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_g8_conformance.py +0 -0
  122. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_gate_verdict.py +0 -0
  123. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_governance_chain.py +0 -0
  124. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_health_readiness.py +0 -0
  125. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_hitl_gate.py +0 -0
  126. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_hitl_resume.py +0 -0
  127. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_identity_middleware.py +0 -0
  128. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_identity_provider.py +0 -0
  129. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_import_linter.py +0 -0
  130. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_imports.py +0 -0
  131. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_knowledge_curation_index.py +0 -0
  132. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_knowledge_envelope.py +0 -0
  133. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_knowledge_runtime_adapter.py +0 -0
  134. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_mcp_asgi.py +0 -0
  135. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_mcp_server.py +0 -0
  136. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_mcrc_trace.py +0 -0
  137. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_mcrc_v1_reader.py +0 -0
  138. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_model_dispatch.py +0 -0
  139. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_openapi.py +0 -0
  140. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_pf012_measure.py +0 -0
  141. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_plm_skill_kernel_optional.py +0 -0
  142. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_policy_pipeline_order.py +0 -0
  143. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_promotion_gate.py +0 -0
  144. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_rate_limit_policy.py +0 -0
  145. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_retry_policy.py +0 -0
  146. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_run_lifecycle.py +0 -0
  147. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_run_task_tracker.py +0 -0
  148. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_skill_dispatch_turn.py +0 -0
  149. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_skill_selector.py +0 -0
  150. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_sse_backpressure.py +0 -0
  151. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_sse_event_stream.py +0 -0
  152. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_sse_reconnect.py +0 -0
  153. {plm_engine_core-1.2.0 → plm_engine_core-1.2.1}/tests/test_system_identity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plm-engine-core
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: TracePulse PLM Engine Core — control_plane (governance, autonomy, HITL, run lifecycle, trace propagation) + agent_runtime (selector, dispatcher, retry, escalation). US-CR.1 scaffold; behaviour lands in US-CR.0+. Internal one-way import contract: control_plane MUST NOT import from agent_runtime (mechanical enforcement in US-CR.2).
5
5
  Author: TracePulse
6
6
  License: Proprietary
@@ -21,4 +21,4 @@ CR.11 retry, CR.12 capability registry, CR.13 HITL) lands its
21
21
  implementation inside these clear, enforceable internal boundaries
22
22
  from day one.
23
23
  """
24
- __version__ = "1.2.0"
24
+ __version__ = "1.2.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plm-engine-core
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: TracePulse PLM Engine Core — control_plane (governance, autonomy, HITL, run lifecycle, trace propagation) + agent_runtime (selector, dispatcher, retry, escalation). US-CR.1 scaffold; behaviour lands in US-CR.0+. Internal one-way import contract: control_plane MUST NOT import from agent_runtime (mechanical enforcement in US-CR.2).
5
5
  Author: TracePulse
6
6
  License: Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "plm-engine-core"
7
- version = "1.2.0"
7
+ version = "1.2.1"
8
8
  description = "TracePulse PLM Engine Core — control_plane (governance, autonomy, HITL, run lifecycle, trace propagation) + agent_runtime (selector, dispatcher, retry, escalation). US-CR.1 scaffold; behaviour lands in US-CR.0+. Internal one-way import contract: control_plane MUST NOT import from agent_runtime (mechanical enforcement in US-CR.2)."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -61,6 +61,26 @@ def executing_app():
61
61
  reset_contract_run_store()
62
62
 
63
63
 
64
+ @pytest.mark.asyncio
65
+ async def test_repeated_runs_against_persistent_provider_do_not_collide(executing_app) -> None:
66
+ # Regression: the driver used a fixed idempotency key ("proof-main"), which
67
+ # collided on the 2nd invocation against a long-lived provider (in-memory
68
+ # store not reset between runs) → 409 idempotency_conflict → create FAIL →
69
+ # RED. CI never caught it (fresh host per run). The key must be unique per
70
+ # invocation; here two runs share one app+store and must both succeed.
71
+ transport = ASGITransport(app=executing_app)
72
+ r1 = await driver.run_driver(
73
+ base_url="http://candidate", agent_ref="agent://demo@v1",
74
+ message="hello", transport=transport)
75
+ r2 = await driver.run_driver(
76
+ base_url="http://candidate", agent_ref="agent://demo@v1",
77
+ message="hello", transport=transport)
78
+ for label, r in (("run1", r1), ("run2", r2)):
79
+ create = {p.name: p for p in r.phases}["create"]
80
+ assert create.status == conformance.PASS, f"{label} create: {create.detail}"
81
+ assert r1.run_id and r2.run_id and r1.run_id != r2.run_id # distinct runs, no collision
82
+
83
+
64
84
  @pytest.mark.asyncio
65
85
  async def test_us025_full_driver_reaches_green(executing_app) -> None:
66
86
  report = await driver.run_driver(