benchflow 0.6.8.dev1913__tar.gz → 0.6.9.dev1920__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 (713) hide show
  1. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/CHANGELOG.md +32 -0
  2. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/PKG-INFO +1 -1
  3. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/pyproject.toml +1 -1
  4. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/traj.py +10 -0
  5. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/publish/broker.py +2 -0
  6. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/publish/traj_capture.py +62 -2
  7. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/process/_base.py +22 -14
  8. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_process.py +34 -0
  9. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_publish_azure_blob.py +47 -0
  10. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_traj_upload_cli.py +89 -12
  11. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trajectory_upload_service.py +126 -10
  12. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/.gitignore +0 -0
  13. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/LICENSE +0 -0
  14. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/README.md +0 -0
  15. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/__init__.py +0 -0
  16. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_dotenv.py +0 -0
  17. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_paths.py +0 -0
  18. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_run.py +0 -0
  19. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_types.py +0 -0
  20. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/__init__.py +0 -0
  21. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/benchmark_repos.py +0 -0
  22. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/build_context_stage.py +0 -0
  23. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/config.py +0 -0
  24. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/config_override.py +0 -0
  25. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/content_address.py +0 -0
  26. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/dataset_registry.py +0 -0
  27. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/env_registry.py +0 -0
  28. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/evaluation_results.py +0 -0
  29. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/hf_datasets.py +0 -0
  30. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/json_safe.py +0 -0
  31. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/learner_memory.py +0 -0
  32. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/live_activity.py +0 -0
  33. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/result_metadata.py +0 -0
  34. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/reward_events.py +0 -0
  35. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/scoring.py +0 -0
  36. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/source_provenance.py +0 -0
  37. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  38. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  39. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  40. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  41. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  42. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/text.py +0 -0
  43. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/_utils/yaml_loader.py +0 -0
  44. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/__init__.py +0 -0
  45. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/client.py +0 -0
  46. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/container_transport.py +0 -0
  47. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/runtime.py +0 -0
  48. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/selection.py +0 -0
  49. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/session.py +0 -0
  50. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/transport.py +0 -0
  51. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/acp/types.py +0 -0
  52. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/__init__.py +0 -0
  53. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/_toolathlon.py +0 -0
  54. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  55. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  56. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  57. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  58. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/harbor.py +0 -0
  59. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/inbound.py +0 -0
  60. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/inspect_ai.py +0 -0
  61. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/ors.py +0 -0
  62. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/resources/__init__.py +0 -0
  63. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  64. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  65. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/adapters/source.py +0 -0
  66. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agent_router.py +0 -0
  67. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agent_router_guide.py +0 -0
  68. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agent_router_parity.py +0 -0
  69. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agent_router_scaffold.py +0 -0
  70. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/__init__.py +0 -0
  71. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/codex_config.py +0 -0
  72. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/credentials.py +0 -0
  73. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  74. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/env.py +0 -0
  75. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/errors.py +0 -0
  76. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  77. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/install.py +0 -0
  78. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/manifest.py +0 -0
  79. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  80. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  81. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/protocol.py +0 -0
  82. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/providers.py +0 -0
  83. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/registry.py +0 -0
  84. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/agents/remote_manifests.py +0 -0
  85. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/branch.py +0 -0
  86. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/__init__.py +0 -0
  87. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/_failure_evidence.py +0 -0
  88. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/_hosted_env.py +0 -0
  89. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/_live_progress.py +0 -0
  90. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/_options.py +0 -0
  91. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/_shared.py +0 -0
  92. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/adopt.py +0 -0
  93. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/agent.py +0 -0
  94. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/continue_cmd.py +0 -0
  95. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/environment.py +0 -0
  96. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/eval_artifacts.py +0 -0
  97. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/eval_lift.py +0 -0
  98. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/hub.py +0 -0
  99. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/main.py +0 -0
  100. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/monitor.py +0 -0
  101. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/review.py +0 -0
  102. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/sandbox.py +0 -0
  103. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/skills.py +0 -0
  104. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/tasks.py +0 -0
  105. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/trace_import.py +0 -0
  106. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/cli/train.py +0 -0
  107. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/continue_run/__init__.py +0 -0
  108. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/continue_run/batch.py +0 -0
  109. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/continue_run/orchestrator.py +0 -0
  110. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/continue_run/replay_proxy.py +0 -0
  111. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/continue_run/run_folder.py +0 -0
  112. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  113. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/contracts/__init__.py +0 -0
  114. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/contracts/planes.py +0 -0
  115. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/contracts/user.py +0 -0
  116. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  117. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/demo_task/instruction.md +0 -0
  118. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/demo_task/task.md +0 -0
  119. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/demo_task/task.toml +0 -0
  120. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/demo_task/tests/test.sh +0 -0
  121. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/diagnostics.py +0 -0
  122. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/__init__.py +0 -0
  123. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  124. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  125. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/manifest.py +0 -0
  126. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/manifest_env.py +0 -0
  127. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/protocol.py +0 -0
  128. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/environment/readiness.py +0 -0
  129. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/eval_artifacts.py +0 -0
  130. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/eval_lift.py +0 -0
  131. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/eval_plan.py +0 -0
  132. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/eval_sharding.py +0 -0
  133. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/eval_worker.py +0 -0
  134. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/evaluation.py +0 -0
  135. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/experimental/__init__.py +0 -0
  136. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/experimental/mcp/__init__.py +0 -0
  137. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/experimental/mcp/hooks.py +0 -0
  138. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  139. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/hosted_env.py +0 -0
  140. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/hub/__init__.py +0 -0
  141. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/hub/harbor_registry.py +0 -0
  142. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/integrations/__init__.py +0 -0
  143. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/integrations/trl/__init__.py +0 -0
  144. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/integrations/trl/spec.py +0 -0
  145. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/learner_skills.py +0 -0
  146. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/learner_store.py +0 -0
  147. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/loop_strategies.py +0 -0
  148. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/loop_sweep.py +0 -0
  149. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/metrics.py +0 -0
  150. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/models.py +0 -0
  151. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/monitor.py +0 -0
  152. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/__init__.py +0 -0
  153. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  154. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  155. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/litellm_config.py +0 -0
  156. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/litellm_logging.py +0 -0
  157. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/litellm_runtime.py +0 -0
  158. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/providers/runtime.py +0 -0
  159. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/publish/__init__.py +0 -0
  160. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/publish/azure_blob.py +0 -0
  161. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/publish/huggingface.py +0 -0
  162. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/publish/redact.py +0 -0
  163. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/py.typed +0 -0
  164. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/review/__init__.py +0 -0
  165. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/review/config.py +0 -0
  166. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/review/default-rubric.json +0 -0
  167. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/review/prompts.py +0 -0
  168. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/review/runner.py +0 -0
  169. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/review/wrapper.py +0 -0
  170. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/README.md +0 -0
  171. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/__init__.py +0 -0
  172. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/builtins.py +0 -0
  173. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/events.py +0 -0
  174. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/file_readers.py +0 -0
  175. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/llm.py +0 -0
  176. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/memory_scorer.py +0 -0
  177. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/node.py +0 -0
  178. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/protocol.py +0 -0
  179. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/rubric.py +0 -0
  180. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/rubric_config.py +0 -0
  181. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rewards/validation.py +0 -0
  182. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/__init__.py +0 -0
  183. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_config.py +0 -0
  184. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_deadline.py +0 -0
  185. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_results.py +0 -0
  186. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_setup.py +0 -0
  187. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_skills.py +0 -0
  188. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_usage.py +0 -0
  189. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/_user_loop.py +0 -0
  190. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  191. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout/task_runtime.py +0 -0
  192. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout_branch.py +0 -0
  193. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/rollout_planes.py +0 -0
  194. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/runtime.py +0 -0
  195. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/__init__.py +0 -0
  196. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_base.py +0 -0
  197. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  198. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_compose.py +0 -0
  199. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  200. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  201. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  202. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  203. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  204. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/agentcore.py +0 -0
  205. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  206. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/agentcore_image.py +0 -0
  207. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  208. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  209. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  210. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/apple_container.py +0 -0
  211. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/daytona.py +0 -0
  212. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/daytona_dind.py +0 -0
  213. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/daytona_pty.py +0 -0
  214. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  215. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  216. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/docker.py +0 -0
  217. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/lockdown.py +0 -0
  218. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/metadata.py +0 -0
  219. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/modal_impl.py +0 -0
  220. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/process/__init__.py +0 -0
  221. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/process/agentcore.py +0 -0
  222. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/process/apple.py +0 -0
  223. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/process/daytona.py +0 -0
  224. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/process/docker.py +0 -0
  225. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/protocol.py +0 -0
  226. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/providers.py +0 -0
  227. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/services.py +0 -0
  228. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/setup.py +0 -0
  229. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/snapshot.py +0 -0
  230. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sandbox/user.py +0 -0
  231. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/scenes.py +0 -0
  232. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/sdk.py +0 -0
  233. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/self_gen.py +0 -0
  234. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/skill_eval/__init__.py +0 -0
  235. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/skill_eval/_core.py +0 -0
  236. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/skill_eval/gepa_export.py +0 -0
  237. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/skill_eval/schema.py +0 -0
  238. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/skill_policy.py +0 -0
  239. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/skills.py +0 -0
  240. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/__init__.py +0 -0
  241. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/_document_evidence.py +0 -0
  242. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/_document_normalize.py +0 -0
  243. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/_document_parse.py +0 -0
  244. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/_document_profiles.py +0 -0
  245. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/acceptance_live.py +0 -0
  246. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/acceptance_live_model.py +0 -0
  247. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/acceptance_live_report.py +0 -0
  248. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/acceptance_live_validation.py +0 -0
  249. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/config.py +0 -0
  250. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/discovery.py +0 -0
  251. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/document.py +0 -0
  252. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/env.py +0 -0
  253. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/export.py +0 -0
  254. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/imports.py +0 -0
  255. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/output_format.py +0 -0
  256. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/package.py +0 -0
  257. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/paths.py +0 -0
  258. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/prompts.py +0 -0
  259. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/runtime_capabilities.py +0 -0
  260. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/runtime_view.py +0 -0
  261. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/task.py +0 -0
  262. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier.py +0 -0
  263. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_core.py +0 -0
  264. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_document.py +0 -0
  265. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_errors.py +0 -0
  266. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  267. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_ors_episode.py +0 -0
  268. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_reward_kit.py +0 -0
  269. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_scan.py +0 -0
  270. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/task/verifier_script_strategy.py +0 -0
  271. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/templates/__init__.py +0 -0
  272. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/templates/judge.py.tmpl +0 -0
  273. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/templates/test.sh.tmpl +0 -0
  274. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/traces/__init__.py +0 -0
  275. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/traces/huggingface.py +0 -0
  276. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/traces/local.py +0 -0
  277. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/traces/models.py +0 -0
  278. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/traces/parsers.py +0 -0
  279. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/traces/task_gen.py +0 -0
  280. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/training/__init__.py +0 -0
  281. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/training/backends/__init__.py +0 -0
  282. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/training/backends/prime_rl.py +0 -0
  283. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/training/run_manifest.py +0 -0
  284. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/__init__.py +0 -0
  285. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/_capture.py +0 -0
  286. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/_export_common.py +0 -0
  287. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/_llm_capture.py +0 -0
  288. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/call_purpose.py +0 -0
  289. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/export.py +0 -0
  290. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/export_adp.py +0 -0
  291. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/export_atif.py +0 -0
  292. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  293. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  294. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/metrics.py +0 -0
  295. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/results.py +0 -0
  296. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/tree.py +0 -0
  297. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  298. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/types.py +0 -0
  299. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/trajectories/viewer.py +0 -0
  300. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/src/benchflow/usage_tracking.py +0 -0
  301. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/__init__.py +0 -0
  302. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/acceptance_live_harness.py +0 -0
  303. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/__init__.py +0 -0
  304. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_manifest_dirscan.py +0 -0
  305. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_manifest_loader.py +0 -0
  306. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_manifest_parity.py +0 -0
  307. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_manifest_wiring.py +0 -0
  308. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_namespace_shorthand.py +0 -0
  309. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_plugin_entry_points.py +0 -0
  310. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_protocol.py +0 -0
  311. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/agents/test_remote_manifest_autoload.py +0 -0
  312. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/README.md +0 -0
  313. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  314. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  315. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  316. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/instruction.md +0 -0
  317. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  318. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/task.md +0 -0
  319. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/task.toml +0 -0
  320. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  321. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/conformance-results.json +0 -0
  322. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/proof_multi_agent.py +0 -0
  323. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/proof_snapshot.py +0 -0
  324. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/run_conformance.py +0 -0
  325. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  326. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/conftest.py +0 -0
  327. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/continue_run/__init__.py +0 -0
  328. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/continue_run/_helpers.py +0 -0
  329. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/continue_run/test_batch.py +0 -0
  330. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/continue_run/test_orchestrator.py +0 -0
  331. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/continue_run/test_replay_proxy.py +0 -0
  332. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/continue_run/test_run_folder.py +0 -0
  333. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/__init__.py +0 -0
  334. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/test_chibench_manifest.py +0 -0
  335. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/test_clawsbench_manifest.py +0 -0
  336. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/test_manifest.py +0 -0
  337. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/test_manifest_env.py +0 -0
  338. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/test_protocol.py +0 -0
  339. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/environment/test_readiness.py +0 -0
  340. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  341. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/hello-world-task/instruction.md +0 -0
  342. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  343. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/hello-world-task/task.md +0 -0
  344. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/hello-world-task/task.toml +0 -0
  345. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/hello-world-task/tests/test.sh +0 -0
  346. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/test_claude.sh +0 -0
  347. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/test_codex.sh +0 -0
  348. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/test_codex_custom_provider.sh +0 -0
  349. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/test_gemini.sh +0 -0
  350. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/test_openclaw.sh +0 -0
  351. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/traces/minimal-claude.jsonl +0 -0
  352. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  353. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/README.md +0 -0
  354. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  355. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  356. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  357. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  358. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  359. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  360. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  361. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/beta-task/task.toml +0 -0
  362. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  363. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/mock_acp_agent.py +0 -0
  364. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  365. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  366. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/mock_openai_responses_server.py +0 -0
  367. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  368. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  369. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  370. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  371. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  372. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  373. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  374. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  375. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  376. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  377. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  378. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  379. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  380. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  381. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  382. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  383. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  384. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  385. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  386. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  387. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  388. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  389. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  390. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  391. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  392. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  393. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  394. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  395. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  396. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  397. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  398. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  399. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  400. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  401. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  402. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  403. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  404. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  405. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  406. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  407. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  408. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  409. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  410. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  411. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  412. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  413. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  414. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  415. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  416. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  417. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  418. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  419. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  420. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  421. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  422. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  423. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  424. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  425. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  426. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  427. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/_consistency.py +0 -0
  428. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/agent_judge.py +0 -0
  429. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/check_adapter_evidence.py +0 -0
  430. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/check_hosted_env_evidence.py +0 -0
  431. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/check_results.py +0 -0
  432. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  433. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/check_trace_to_task_evidence.py +0 -0
  434. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  435. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/codex-acp.yaml +0 -0
  436. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/gemini.yaml +0 -0
  437. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  438. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/mimo.yaml +0 -0
  439. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/openclaw.yaml +0 -0
  440. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/opencode.yaml +0 -0
  441. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/openhands.yaml +0 -0
  442. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/configs/pi-acp.yaml +0 -0
  443. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/deepagents_harness.py +0 -0
  444. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/rubric_checks.py +0 -0
  445. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/run.sh +0 -0
  446. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/run_suite.py +0 -0
  447. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/scenarios.py +0 -0
  448. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/integration/suites/release.yaml +0 -0
  449. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acceptance_evidence.py +0 -0
  450. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acceptance_live.py +0 -0
  451. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acceptance_live_execution.py +0 -0
  452. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acp.py +0 -0
  453. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acp_capability_advertising.py +0 -0
  454. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acp_mcp_servers.py +0 -0
  455. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acp_model_config_dispatch.py +0 -0
  456. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acp_pinned_protocol_guard.py +0 -0
  457. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_acp_setup_failure_propagation.py +0 -0
  458. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_adapter_scripts.py +0 -0
  459. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_adapters.py +0 -0
  460. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_cli.py +0 -0
  461. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_env_resolution.py +0 -0
  462. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_gemini_defaults.py +0 -0
  463. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_idle_timeout_cli.py +0 -0
  464. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_model_decouple.py +0 -0
  465. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_registry.py +0 -0
  466. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_router.py +0 -0
  467. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_router_cli_e2e.py +0 -0
  468. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_router_scaffold.py +0 -0
  469. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_setup.py +0 -0
  470. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agent_spec.py +0 -0
  471. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agentcore_builder.py +0 -0
  472. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agentcore_parallel.py +0 -0
  473. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agentcore_reaper.py +0 -0
  474. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agentcore_sandbox.py +0 -0
  475. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_agentcore_transport.py +0 -0
  476. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_api_error_capture.py +0 -0
  477. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_apple_container_sandbox.py +0 -0
  478. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_bare_model_provider.py +0 -0
  479. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_base_install_imports.py +0 -0
  480. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_bedrock_thinking.py +0 -0
  481. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_benchflow_experiment_review_validator.py +0 -0
  482. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  483. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_branch.py +0 -0
  484. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_build_context_stage.py +0 -0
  485. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_build_review_pack.py +0 -0
  486. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_capture_trajectory.py +0 -0
  487. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  488. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_clawsbench_slice.py +0 -0
  489. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_adopt_aliases.py +0 -0
  490. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_arg_validation.py +0 -0
  491. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_daytona.py +0 -0
  492. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_docs_drift.py +0 -0
  493. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_edge_case_hardening.py +0 -0
  494. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_hub_env.py +0 -0
  495. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_live_progress.py +0 -0
  496. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_cli_misc.py +0 -0
  497. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_codex_review.py +0 -0
  498. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_codex_self_write_auth.py +0 -0
  499. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_config_override.py +0 -0
  500. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_config_redaction.py +0 -0
  501. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_connect_as_env.py +0 -0
  502. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_console_error_truncation.py +0 -0
  503. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_console_progress.py +0 -0
  504. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_continuallearningbench_adapter.py +0 -0
  505. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_dataset_registry.py +0 -0
  506. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_daytona_command_polling.py +0 -0
  507. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_daytona_dind_compose_up.py +0 -0
  508. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_daytona_download.py +0 -0
  509. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_daytona_litellm_runtime.py +0 -0
  510. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_daytona_poll_deadline.py +0 -0
  511. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_daytona_reap.py +0 -0
  512. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_deepagents_agent.py +0 -0
  513. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_diagnostics.py +0 -0
  514. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_docker_prune_scoping.py +0 -0
  515. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_docker_uploads.py +0 -0
  516. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_docs_examples.py +0 -0
  517. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eng50_capabilities.py +0 -0
  518. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_env_registry.py +0 -0
  519. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_env_setup.py +0 -0
  520. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_environment_manifest_controls.py +0 -0
  521. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_artifact_cli.py +0 -0
  522. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_filters_applied.py +0 -0
  523. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_lift.py +0 -0
  524. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_sharding.py +0 -0
  525. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_single_task_summary.py +0 -0
  526. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_source_provenance.py +0 -0
  527. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_worker_retry.py +0 -0
  528. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_eval_zero_task_guard.py +0 -0
  529. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_evaluation_environment_manifest.py +0 -0
  530. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_exclude_tasks.py +0 -0
  531. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_filter_credentialed_cells.py +0 -0
  532. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_harvey_lab_shim.py +0 -0
  533. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_hilbench_adapter.py +0 -0
  534. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_hosted_env.py +0 -0
  535. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_hosted_env_rollout_contract.py +0 -0
  536. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_hub_harbor_registry.py +0 -0
  537. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_inbound_adapter_manifest.py +0 -0
  538. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_inbound_adapters.py +0 -0
  539. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_agent_judge.py +0 -0
  540. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_check_results.py +0 -0
  541. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_consistency.py +0 -0
  542. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_matrix.py +0 -0
  543. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_provider_selection.py +0 -0
  544. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_run_suite.py +0 -0
  545. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_integration_suite.py +0 -0
  546. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_internet_policy.py +0 -0
  547. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_job.py +0 -0
  548. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_job_sequential_shared.py +0 -0
  549. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_job_sequential_shared_resume.py +0 -0
  550. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_judge_robustness.py +0 -0
  551. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_judge_symlink_ingestion.py +0 -0
  552. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_learner_skills.py +0 -0
  553. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_learner_skills_traversal.py +0 -0
  554. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_learner_store.py +0 -0
  555. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_learner_store_persistence.py +0 -0
  556. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_config.py +0 -0
  557. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_hardening.py +0 -0
  558. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_logging.py +0 -0
  559. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_model_via_env_generic.py +0 -0
  560. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_reasoning_passthrough.py +0 -0
  561. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_runtime.py +0 -0
  562. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_litellm_smoke.py +0 -0
  563. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_live_llm_trajectory.py +0 -0
  564. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_llm_judge.py +0 -0
  565. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_llm_judge_event_tags.py +0 -0
  566. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_llm_judge_verifier.py +0 -0
  567. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_loop_strategies.py +0 -0
  568. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_loop_summary.py +0 -0
  569. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_loop_sweep.py +0 -0
  570. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_memory_scorer.py +0 -0
  571. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_metrics.py +0 -0
  572. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_mle_bench_adapter.py +0 -0
  573. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_mock_openai_responses_server.py +0 -0
  574. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_monitor_scaffold.py +0 -0
  575. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_native_acp_usage.py +0 -0
  576. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_no_cross_provider_fallback.py +0 -0
  577. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_notification_order_real.py +0 -0
  578. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_opencode_family_proxy_tracking.py +0 -0
  579. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_oracle.py +0 -0
  580. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_oracle_chokepoint.py +0 -0
  581. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_paths_safe.py +0 -0
  582. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_paths_symlink_helpers.py +0 -0
  583. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_pi_acp_launcher.py +0 -0
  584. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_pi_acp_proxy_routing.py +0 -0
  585. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_project_skills_layout.py +0 -0
  586. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_provider_auth_detection.py +0 -0
  587. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_providers.py +0 -0
  588. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_reexport.py +0 -0
  589. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_registry_invariants.py +0 -0
  590. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_release_hardening_r5.py +0 -0
  591. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_release_version.py +0 -0
  592. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_release_workflow_wiring.py +0 -0
  593. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_resolve_env_helpers.py +0 -0
  594. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_review_boundaries.py +0 -0
  595. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_review_rubric.py +0 -0
  596. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_review_runtime.py +0 -0
  597. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_reward_lenient.py +0 -0
  598. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_reward_node.py +0 -0
  599. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_reward_range.py +0 -0
  600. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_reward_unified_contract.py +0 -0
  601. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rewards.py +0 -0
  602. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rewards_jsonl.py +0 -0
  603. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_architecture.py +0 -0
  604. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_branch.py +0 -0
  605. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_config_path_coercion.py +0 -0
  606. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_environment.py +0 -0
  607. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_hard_deadline.py +0 -0
  608. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_import_no_side_effects.py +0 -0
  609. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  610. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_planes_contract.py +0 -0
  611. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_probe_sandbox_health.py +0 -0
  612. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_session_factory_dispatch.py +0 -0
  613. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_setup_commands.py +0 -0
  614. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rollout_upload.py +0 -0
  615. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rubric_checks.py +0 -0
  616. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_rubric_config.py +0 -0
  617. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_runtime.py +0 -0
  618. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_runtime_capabilities.py +0 -0
  619. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_runtime_config_wired.py +0 -0
  620. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_runtime_live_sandbox.py +0 -0
  621. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox.py +0 -0
  622. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_exec_secret_handling.py +0 -0
  623. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_hardening.py +0 -0
  624. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  625. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_live_process.py +0 -0
  626. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_multi_service.py +0 -0
  627. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_prebuilt_validation.py +0 -0
  628. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_protocol.py +0 -0
  629. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_provider_registry_drift.py +0 -0
  630. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_setup.py +0 -0
  631. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_snapshot_contract.py +0 -0
  632. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_upload_symlink.py +0 -0
  633. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sandbox_verifier_workspace.py +0 -0
  634. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_scene.py +0 -0
  635. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_scene_outbox_trial.py +0 -0
  636. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_scene_parallel_group.py +0 -0
  637. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_scene_result_aggregation.py +0 -0
  638. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_scoring.py +0 -0
  639. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sdk_internals.py +0 -0
  640. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sdk_lockdown.py +0 -0
  641. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sdk_run_alias.py +0 -0
  642. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_sealed_channel_container.py +0 -0
  643. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_self_gen_cli.py +0 -0
  644. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_self_gen_export_error_channel.py +0 -0
  645. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_self_gen_export_failures.py +0 -0
  646. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_self_gen_orchestration.py +0 -0
  647. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_session_factory_runtime.py +0 -0
  648. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_session_request_permission_dispatch.py +0 -0
  649. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_eval.py +0 -0
  650. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_eval_dryrun.py +0 -0
  651. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_eval_integration.py +0 -0
  652. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_eval_sweep.py +0 -0
  653. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_eval_traversal.py +0 -0
  654. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_invocation_artifacts.py +0 -0
  655. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skill_policy.py +0 -0
  656. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skills.py +0 -0
  657. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skills_dir_agent_home_link.py +0 -0
  658. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skillsbench_conversion_conformance.py +0 -0
  659. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  660. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_smoke.py +0 -0
  661. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_smoke_wiring.py +0 -0
  662. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_source_adapters.py +0 -0
  663. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_subscription_auth.py +0 -0
  664. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_check_eval_consistency.py +0 -0
  665. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_config.py +0 -0
  666. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_digest.py +0 -0
  667. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_document.py +0 -0
  668. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_download.py +0 -0
  669. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_export.py +0 -0
  670. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_output_format.py +0 -0
  671. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_package.py +0 -0
  672. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_task_runtime_primitive.py +0 -0
  673. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_tasks.py +0 -0
  674. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_token_usage_normalization.py +0 -0
  675. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trace_import_cli.py +0 -0
  676. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trace_task_gen_traversal.py +0 -0
  677. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trace_to_task_evidence.py +0 -0
  678. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_traces_huggingface.py +0 -0
  679. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_traces_parsers.py +0 -0
  680. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_traces_task_gen.py +0 -0
  681. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_train_cli.py +0 -0
  682. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_train_mode_artifact_emission.py +0 -0
  683. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_train_trl_cli.py +0 -0
  684. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trajectory_integration.py +0 -0
  685. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trajectory_streaming.py +0 -0
  686. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trial_agent_timeout_verify.py +0 -0
  687. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trial_install_agent_timeout.py +0 -0
  688. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trial_litellm_runtime.py +0 -0
  689. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_trl_integration.py +0 -0
  690. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_usage_litellm.py +0 -0
  691. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_usage_required.py +0 -0
  692. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_usage_tracking.py +0 -0
  693. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_user.py +0 -0
  694. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_v06_guard_ports.py +0 -0
  695. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verifier_document.py +0 -0
  696. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verifier_multi_container.py +0 -0
  697. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verifier_output.py +0 -0
  698. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verifier_output_freshness.py +0 -0
  699. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verifier_strategies.py +0 -0
  700. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verifier_wedge_retry.py +0 -0
  701. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_verify.py +0 -0
  702. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_workflow_action_pinning.py +0 -0
  703. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/test_yaml_config.py +0 -0
  704. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/__init__.py +0 -0
  705. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_export.py +0 -0
  706. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_export_adp.py +0 -0
  707. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_export_atif.py +0 -0
  708. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_export_common.py +0 -0
  709. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_export_nan_handling.py +0 -0
  710. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_export_prime_sft.py +0 -0
  711. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_redaction.py +0 -0
  712. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_step_granularity.py +0 -0
  713. {benchflow-0.6.8.dev1913 → benchflow-0.6.9.dev1920}/tests/trajectories/test_tree.py +0 -0
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ### Changed
6
+ - **Trajectory uploads require contributor provenance.** The single
7
+ `bench traj upload` command now requires `--github-id` and `--email`; both
8
+ values are validated locally and server-side and stored in `manifest.json`
9
+ under the structured `contributor` field. Existing 0.6.8 manifests remain
10
+ readable by the validator during the client transition.
11
+
12
+ ## 0.6.8 — 2026-08-15
13
+
5
14
  ### Added
6
15
  - **Public trajectory contribution.** `bench traj upload PATH` validates and
7
16
  structurally redacts trajectory JSONL, creates a content-addressed manifest,
@@ -37,6 +46,29 @@
37
46
  eval-config `environment:` docker/daytona selector) is a different
38
47
  subsystem and is unchanged.
39
48
 
49
+ ### Fixed
50
+ - **Coherent integration coverage for code-and-fixture changes.** The
51
+ credential-free fixture job now tests pull-request source together with its
52
+ task fixtures, while the secret-bearing smoke job retains trusted fixtures;
53
+ the release gate requires both results. (#969)
54
+ - **Retryable Daytona transport failures stay retryable.** Transient SDK
55
+ transport errors are stamped while their vendor type is still available,
56
+ empty exception messages retain useful type information, and permanent
57
+ errors remain outside the retry policy. (#970)
58
+ - **Live token counters no longer freeze behind callback-log reads.** Larger,
59
+ bounded ranged reads distinguish EOF from read failure, expose lag, and keep
60
+ terminal phase labels from moving backwards. (#971)
61
+ - **Fresh OpenClaw installs and GPT-5.4 calls use compatible limits.** OpenClaw
62
+ is pinned to a Node-compatible runtime, and raw plus ACP-alias GPT-5.4 model
63
+ IDs clamp output tokens to the provider's 128,000-token limit. (#977, #986)
64
+ - **Anthropic Vertex routes include their required runtime.** The gateway now
65
+ installs the Google Cloud Vertex AI SDK used by LiteLLM's Anthropic Vertex
66
+ path. (#978)
67
+ - **ACP subprocess diagnostics survive normal teardown.** A bounded, redacted
68
+ stderr tail is retained even when stdout remains open; stderr drain failures
69
+ cannot mask the structured transport diagnosis, and repeated process close
70
+ calls are idempotent. (#980)
71
+
40
72
  ## 0.6.7 — 2026-08-09
41
73
 
42
74
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.6.8.dev1913
3
+ Version: 0.6.9.dev1920
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.6.8.dev1913"
3
+ version = "0.6.9.dev1920"
4
4
  description = "Multi-turn agent benchmarking with ACP — run any agent, any model, any provider."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -29,6 +29,14 @@ def register_traj(app: typer.Typer) -> None:
29
29
  Path,
30
30
  typer.Argument(help="Trajectory JSONL file, directory, or trial directory"),
31
31
  ],
32
+ github_id: Annotated[
33
+ str,
34
+ typer.Option("--github-id", help="Contributor GitHub username"),
35
+ ],
36
+ email: Annotated[
37
+ str,
38
+ typer.Option("--email", help="Contributor email stored in the manifest"),
39
+ ],
32
40
  source_id: Annotated[
33
41
  str | None,
34
42
  typer.Option("--source-id", help="Stable contributor source identifier"),
@@ -84,6 +92,8 @@ def register_traj(app: typer.Typer) -> None:
84
92
  path,
85
93
  source_id=selected_source_id,
86
94
  uploaded_by=os.environ.get("BENCHFLOW_TRAJ_UPLOADED_BY"),
95
+ github_id=github_id,
96
+ email=email,
87
97
  ) as staged:
88
98
  if dry_run:
89
99
  _print_dry_run(staged, destination=destination, direct=direct)
@@ -42,6 +42,8 @@ def upload_capture_via_broker(
42
42
  "uploaded_by": staged.manifest["uploaded_by"],
43
43
  "artifacts": artifacts,
44
44
  }
45
+ if contributor := staged.manifest.get("contributor"):
46
+ request_body["contributor"] = contributor
45
47
  manager = nullcontext(http_client) if http_client is not None else httpx.Client()
46
48
  try:
47
49
  with _quiet_httpx_request_logging(), manager as client:
@@ -23,11 +23,18 @@ MAX_CAPTURE_BYTES = 2 * MAX_FILE_BYTES
23
23
  MAX_MANIFEST_BYTES = 1024**2
24
24
  MAX_RUN_METADATA_BYTES = 1024**2
25
25
  MAX_UPLOADED_BY_LENGTH = 256
26
+ MAX_GITHUB_ID_LENGTH = 39
27
+ MAX_EMAIL_LENGTH = 254
26
28
  MAX_JSONL_RECORD_BYTES = 8 * 1024**2
27
29
  MAX_JSON_NESTING = 100
28
30
  MAX_JSON_NODES = 100_000
29
31
  SOURCE_ID_PATTERN = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$")
30
32
  ARTIFACT_NAME_PATTERN = re.compile(r"^trajectory/[A-Za-z0-9._-]{1,128}\.jsonl$")
33
+ GITHUB_ID_PATTERN = re.compile(
34
+ rf"^[A-Za-z0-9](?:[A-Za-z0-9-]{{0,{MAX_GITHUB_ID_LENGTH - 2}}}[A-Za-z0-9])?$"
35
+ )
36
+ EMAIL_LOCAL_PATTERN = re.compile(r"^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+$")
37
+ EMAIL_DOMAIN_LABEL_PATTERN = re.compile(r"^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$")
31
38
 
32
39
 
33
40
  def _reject_duplicate_json_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]:
@@ -102,6 +109,42 @@ def validate_source_id(source_id: str) -> str:
102
109
  return normalized
103
110
 
104
111
 
112
+ def validate_github_id(github_id: str) -> str:
113
+ """Validate a self-asserted GitHub username stored as contributor provenance."""
114
+ normalized = github_id.strip()
115
+ if not GITHUB_ID_PATTERN.fullmatch(normalized) or "--" in normalized:
116
+ raise ValueError(
117
+ "invalid GitHub ID; use the 1-39 character username without '@'"
118
+ )
119
+ return normalized
120
+
121
+
122
+ def validate_email(email: str) -> str:
123
+ """Validate a bounded ASCII contributor email address."""
124
+ normalized = email.strip()
125
+ if len(normalized) > MAX_EMAIL_LENGTH or normalized.count("@") != 1:
126
+ raise ValueError("invalid contributor email address")
127
+ local, domain = normalized.rsplit("@", 1)
128
+ labels = domain.split(".")
129
+ if (
130
+ not local
131
+ or len(local) > 64
132
+ or local.startswith(".")
133
+ or local.endswith(".")
134
+ or ".." in local
135
+ or not EMAIL_LOCAL_PATTERN.fullmatch(local)
136
+ or len(labels) < 2
137
+ or any(
138
+ not label
139
+ or len(label) > 63
140
+ or not EMAIL_DOMAIN_LABEL_PATTERN.fullmatch(label)
141
+ for label in labels
142
+ )
143
+ ):
144
+ raise ValueError("invalid contributor email address")
145
+ return normalized
146
+
147
+
105
148
  def validate_artifact_name(name: str) -> str:
106
149
  """Require the canonical public trajectory object namespace."""
107
150
  if not ARTIFACT_NAME_PATTERN.fullmatch(name):
@@ -119,6 +162,8 @@ def stage_trajectory_capture(
119
162
  source_id: str,
120
163
  redact: bool = True,
121
164
  uploaded_by: str | None = None,
165
+ github_id: str | None = None,
166
+ email: str | None = None,
122
167
  ) -> Iterator[StagedCapture]:
123
168
  """Validate and stage a trajectory capture without mutating its source."""
124
169
  source_id = validate_source_id(source_id)
@@ -126,6 +171,14 @@ def stage_trajectory_capture(
126
171
  raise ValueError(
127
172
  f"trajectory contributor label exceeds {MAX_UPLOADED_BY_LENGTH} characters"
128
173
  )
174
+ contributor: dict[str, str] | None = None
175
+ if github_id is not None or email is not None:
176
+ if github_id is None or email is None:
177
+ raise ValueError("GitHub ID and email must be provided together")
178
+ contributor = {
179
+ "github_id": validate_github_id(github_id),
180
+ "email": validate_email(email),
181
+ }
129
182
  resolved = _resolve_input(path)
130
183
  if len(resolved.files) > MAX_ARTIFACTS:
131
184
  raise ValueError(
@@ -176,6 +229,7 @@ def stage_trajectory_capture(
176
229
  payloads=payloads,
177
230
  metadata_dir=resolved.metadata_dir,
178
231
  uploaded_by=uploaded_by,
232
+ contributor=contributor,
179
233
  redact=redact,
180
234
  replacement_count=replacement_count,
181
235
  )
@@ -183,6 +237,8 @@ def stage_trajectory_capture(
183
237
  redacted_manifest, manifest_replacements = redact_value(manifest)
184
238
  if redacted_manifest["source_id"] != manifest["source_id"]:
185
239
  raise ValueError("source id contains a secret-like value")
240
+ if redacted_manifest.get("contributor") != manifest.get("contributor"):
241
+ raise ValueError("contributor metadata resembles a secret-like value")
186
242
  replacement_count += manifest_replacements
187
243
  redacted_manifest["redaction"]["replacements"] = replacement_count
188
244
  manifest = redacted_manifest
@@ -384,11 +440,12 @@ def _build_manifest(
384
440
  payloads: list[StagedFile],
385
441
  metadata_dir: Path | None,
386
442
  uploaded_by: str | None,
443
+ contributor: dict[str, str] | None,
387
444
  redact: bool,
388
445
  replacement_count: int,
389
446
  ) -> dict[str, Any]:
390
- return {
391
- "schema_version": "1.0.0",
447
+ manifest = {
448
+ "schema_version": "1.1.0" if contributor is not None else "1.0.0",
392
449
  "kind": "bronze.trajectory",
393
450
  "created_at": datetime.now(UTC)
394
451
  .replace(microsecond=0)
@@ -405,6 +462,9 @@ def _build_manifest(
405
462
  ],
406
463
  "redaction": {"applied": redact, "replacements": replacement_count},
407
464
  }
465
+ if contributor is not None:
466
+ manifest["contributor"] = contributor
467
+ return manifest
408
468
 
409
469
 
410
470
  def _load_run_metadata(metadata_dir: Path | None) -> dict[str, Any]:
@@ -156,6 +156,26 @@ class SubprocessLiveProcess(LiveProcess):
156
156
  if len(self._stderr_tail) > _STDERR_TAIL_LIMIT:
157
157
  del self._stderr_tail[:-_STDERR_TAIL_LIMIT]
158
158
 
159
+ async def _finish_stderr_drain(self, *, cancel_on_timeout: bool) -> None:
160
+ """Bound the stderr drain without leaking its transport failures."""
161
+ stderr_task = getattr(self, "_stderr_task", None)
162
+ if not stderr_task or stderr_task.cancelled():
163
+ return
164
+ try:
165
+ await asyncio.wait_for(
166
+ asyncio.shield(stderr_task), timeout=_STDERR_DRAIN_TIMEOUT_SEC
167
+ )
168
+ except asyncio.CancelledError:
169
+ if not stderr_task.cancelled():
170
+ raise
171
+ except TimeoutError:
172
+ if cancel_on_timeout:
173
+ stderr_task.cancel()
174
+ with contextlib.suppress(asyncio.CancelledError):
175
+ await stderr_task
176
+ except Exception:
177
+ logger.debug("Could not finish draining subprocess stderr", exc_info=True)
178
+
159
179
  @property
160
180
  def stderr_tail(self) -> str:
161
181
  """Bounded stderr captured while the subprocess was alive."""
@@ -176,10 +196,7 @@ class SubprocessLiveProcess(LiveProcess):
176
196
  if not line:
177
197
  stderr_task = getattr(self, "_stderr_task", None)
178
198
  if stderr_task:
179
- with contextlib.suppress(TimeoutError):
180
- await asyncio.wait_for(
181
- asyncio.shield(stderr_task), timeout=_STDERR_DRAIN_TIMEOUT_SEC
182
- )
199
+ await self._finish_stderr_drain(cancel_on_timeout=False)
183
200
  stderr_text = self.stderr_tail.strip()
184
201
  else:
185
202
  stderr_text = ""
@@ -257,16 +274,7 @@ class SubprocessLiveProcess(LiveProcess):
257
274
  except TimeoutError:
258
275
  self._process.kill()
259
276
  await self._process.wait()
260
- stderr_task = getattr(self, "_stderr_task", None)
261
- if stderr_task:
262
- try:
263
- await asyncio.wait_for(
264
- asyncio.shield(stderr_task), timeout=_STDERR_DRAIN_TIMEOUT_SEC
265
- )
266
- except TimeoutError:
267
- stderr_task.cancel()
268
- with contextlib.suppress(asyncio.CancelledError):
269
- await stderr_task
277
+ await self._finish_stderr_drain(cancel_on_timeout=True)
270
278
  logger.info("Process terminated")
271
279
 
272
280
  @property
@@ -46,6 +46,40 @@ async def test_subprocess_close_cancels_stderr_drain_that_never_reaches_eof(
46
46
  )
47
47
  await process.close()
48
48
  assert process._stderr_task.cancelled()
49
+ await process.close()
50
+
51
+
52
+ @pytest.mark.asyncio
53
+ async def test_subprocess_readline_keeps_typed_error_when_stderr_drain_fails() -> None:
54
+ """Guards PR #980 against stderr failures masking transport diagnostics."""
55
+ from benchflow.diagnostics import TransportClosedError
56
+ from benchflow.sandbox.process import SubprocessLiveProcess
57
+
58
+ class _LiveProcess(SubprocessLiveProcess):
59
+ async def start(self, command, env=None, cwd=None) -> None:
60
+ pass
61
+
62
+ async def fail_stderr_drain() -> None:
63
+ raise ConnectionResetError("stderr transport reset")
64
+
65
+ stdout = MagicMock()
66
+ stdout.readline = AsyncMock(return_value=b"")
67
+ child = MagicMock(
68
+ stdout=stdout,
69
+ stderr=None,
70
+ returncode=1,
71
+ pid=12345,
72
+ )
73
+ process = _LiveProcess()
74
+ process._process = child
75
+ process._stderr_tail = bytearray(b"diagnostic before reset")
76
+ process._stderr_task = asyncio.create_task(fail_stderr_drain())
77
+
78
+ with pytest.raises(TransportClosedError) as exc_info:
79
+ await process.readline()
80
+
81
+ assert exc_info.value.diagnostic.stderr_snippet == "diagnostic before reset"
82
+ assert exc_info.value.diagnostic.transport_diagnosis == "process_exited"
49
83
 
50
84
 
51
85
  class _FakeStdin:
@@ -271,6 +271,53 @@ def test_staging_enforces_contributor_label_bound(tmp_path: Path) -> None:
271
271
  ).__enter__()
272
272
 
273
273
 
274
+ def test_manifest_contains_validated_contributor_provenance(tmp_path: Path) -> None:
275
+ """CLI contributor parameters survive in the manifest uploaded last."""
276
+ trial = _trial(tmp_path)
277
+ contributor = {
278
+ "github_id": "benchflow-ai",
279
+ "email": "contributor+demo@benchflow.ai",
280
+ }
281
+
282
+ with stage_trajectory_capture(
283
+ trial,
284
+ source_id="demo",
285
+ github_id=contributor["github_id"],
286
+ email=contributor["email"],
287
+ ) as staged:
288
+ assert staged.manifest["schema_version"] == "1.1.0"
289
+ assert staged.manifest["contributor"] == contributor
290
+ persisted = json.loads(staged.files[-1].local_path.read_text(encoding="utf-8"))
291
+ assert persisted["contributor"] == contributor
292
+
293
+
294
+ @pytest.mark.parametrize(
295
+ ("github_id", "email", "message"),
296
+ [
297
+ ("@benchflow-ai", "user@benchflow.ai", "GitHub ID"),
298
+ ("benchflow--ai", "user@benchflow.ai", "GitHub ID"),
299
+ ("benchflow-ai", "not-an-email", "email"),
300
+ ("benchflow-ai", "user@localhost", "email"),
301
+ (None, "user@benchflow.ai", "provided together"),
302
+ ("benchflow-ai", None, "provided together"),
303
+ ],
304
+ )
305
+ def test_staging_rejects_invalid_or_partial_contributor_provenance(
306
+ tmp_path: Path,
307
+ github_id: str | None,
308
+ email: str | None,
309
+ message: str,
310
+ ) -> None:
311
+ """Malformed contributor metadata never reaches a transport."""
312
+ with pytest.raises(ValueError, match=message):
313
+ stage_trajectory_capture(
314
+ _trial(tmp_path),
315
+ source_id="demo",
316
+ github_id=github_id,
317
+ email=email,
318
+ ).__enter__()
319
+
320
+
274
321
  @pytest.mark.parametrize(
275
322
  "filename", ["capture with space.jsonl", "capture.JSONL", "x" * 129 + ".jsonl"]
276
323
  )
@@ -7,6 +7,7 @@ import logging
7
7
  from pathlib import Path
8
8
  from types import SimpleNamespace
9
9
 
10
+ import click
10
11
  import httpx
11
12
  import pytest
12
13
  from typer.testing import CliRunner
@@ -16,6 +17,8 @@ from benchflow.publish.broker import upload_capture_via_broker
16
17
  from benchflow.publish.traj_capture import stage_trajectory_capture
17
18
 
18
19
  runner = CliRunner()
20
+ GITHUB_ID = "benchflow-user"
21
+ EMAIL = "user@example.com"
19
22
 
20
23
 
21
24
  def _trial(tmp_path: Path) -> Path:
@@ -28,6 +31,19 @@ def _trial(tmp_path: Path) -> Path:
28
31
  return trial
29
32
 
30
33
 
34
+ def _upload_command(path: Path, *args: str) -> list[str]:
35
+ return [
36
+ "traj",
37
+ "upload",
38
+ str(path),
39
+ "--github-id",
40
+ GITHUB_ID,
41
+ "--email",
42
+ EMAIL,
43
+ *args,
44
+ ]
45
+
46
+
31
47
  def test_stock_cli_has_the_verified_public_broker() -> None:
32
48
  """A wheel install can contribute without private endpoint configuration."""
33
49
  from benchflow.cli.traj import DEFAULT_TRAJ_BROKER_URL
@@ -72,12 +88,13 @@ def test_dry_run_stages_without_constructing_a_transport(
72
88
  raise AssertionError("network client constructed during --dry-run")
73
89
 
74
90
  monkeypatch.setattr(httpx, "Client", fail_client)
75
- result = runner.invoke(app, ["traj", "upload", str(trial), "--dry-run"])
91
+ result = runner.invoke(app, _upload_command(trial, "--dry-run"))
76
92
 
77
93
  assert result.exit_code == 0, result.output
78
94
  assert "sha256:" in result.output
79
95
  assert "trajectory/acp_trajectory.jsonl" in result.output
80
96
  assert "manifest.json" in result.output
97
+ assert EMAIL not in result.output
81
98
 
82
99
 
83
100
  def test_direct_mode_reports_azure_destination(
@@ -87,6 +104,10 @@ def test_direct_mode_reports_azure_destination(
87
104
  trial = _trial(tmp_path)
88
105
 
89
106
  def fake_upload(staged, *, container_url):
107
+ assert staged.manifest["contributor"] == {
108
+ "github_id": GITHUB_ID,
109
+ "email": EMAIL,
110
+ }
90
111
  return SimpleNamespace(
91
112
  url=f"{container_url}/sources/demo/{staged.traj_digest}/",
92
113
  uploaded=("payload", "manifest"),
@@ -98,14 +119,12 @@ def test_direct_mode_reports_azure_destination(
98
119
  )
99
120
  result = runner.invoke(
100
121
  app,
101
- [
102
- "traj",
103
- "upload",
104
- str(trial),
122
+ _upload_command(
123
+ trial,
105
124
  "--direct",
106
125
  "--container-url",
107
126
  "https://tasksminerdata.blob.core.windows.net/bronze",
108
- ],
127
+ ),
109
128
  )
110
129
 
111
130
  assert result.exit_code == 0, result.output
@@ -130,9 +149,20 @@ def test_broker_mode_uses_exact_manifest_and_server_order(
130
149
  "source_id",
131
150
  "traj_digest",
132
151
  "uploaded_by",
152
+ "contributor",
133
153
  "artifacts",
134
154
  }
155
+ assert body["contributor"] == {
156
+ "github_id": GITHUB_ID,
157
+ "email": EMAIL,
158
+ }
159
+ assert body["schema_version"] == "1.1.0"
135
160
  return httpx.Response(200, json=_broker_payload(request))
161
+ if request.url.path.endswith("manifest.json"):
162
+ assert json.loads(request.content)["contributor"] == {
163
+ "github_id": GITHUB_ID,
164
+ "email": EMAIL,
165
+ }
136
166
  assert request.headers["x-ms-blob-type"] == "BlockBlob"
137
167
  assert request.headers["if-none-match"] == "*"
138
168
  return httpx.Response(201)
@@ -140,7 +170,7 @@ def test_broker_mode_uses_exact_manifest_and_server_order(
140
170
  client = httpx.Client(transport=httpx.MockTransport(handler))
141
171
  monkeypatch.setattr("benchflow.publish.broker.httpx.Client", lambda: client)
142
172
  monkeypatch.setenv("BENCHFLOW_TRAJ_BROKER_URL", "https://broker.test")
143
- result = runner.invoke(app, ["traj", "upload", str(trial)])
173
+ result = runner.invoke(app, _upload_command(trial))
144
174
 
145
175
  assert result.exit_code == 0, result.output
146
176
  assert [request.method for request in requests] == ["POST", "PUT", "PUT"]
@@ -198,12 +228,12 @@ def test_broker_conflict_is_success_and_rate_limit_is_actionable(
198
228
  )
199
229
  )
200
230
  monkeypatch.setattr("benchflow.publish.broker.httpx.Client", lambda: conflict)
201
- result = runner.invoke(app, ["traj", "upload", str(trial)])
231
+ result = runner.invoke(app, _upload_command(trial))
202
232
  assert result.exit_code == 0, result.output
203
233
  assert "Already uploaded" in result.output
204
234
 
205
235
  monkeypatch.setattr("benchflow.publish.broker.httpx.Client", lambda: limited)
206
- result = runner.invoke(app, ["traj", "upload", str(trial)])
236
+ result = runner.invoke(app, _upload_command(trial))
207
237
  assert result.exit_code == 1
208
238
  assert "retry after 60" in result.output
209
239
 
@@ -215,7 +245,7 @@ def test_missing_broker_names_both_available_modes(
215
245
  trial = _trial(tmp_path)
216
246
  monkeypatch.delenv("BENCHFLOW_TRAJ_BROKER_URL", raising=False)
217
247
  monkeypatch.setattr("benchflow.cli.traj.DEFAULT_TRAJ_BROKER_URL", None)
218
- result = runner.invoke(app, ["traj", "upload", str(trial)])
248
+ result = runner.invoke(app, _upload_command(trial))
219
249
 
220
250
  assert result.exit_code == 1
221
251
  assert "BENCHFLOW_TRAJ_BROKER_URL" in result.output
@@ -231,7 +261,7 @@ def test_validation_failure_names_the_bad_file(
231
261
  path = trial / "trajectory" / "acp_trajectory.jsonl"
232
262
  path.write_text("{bad\n", encoding="utf-8")
233
263
  monkeypatch.setenv("BENCHFLOW_TRAJ_BROKER_URL", "https://broker.test")
234
- result = runner.invoke(app, ["traj", "upload", str(trial)])
264
+ result = runner.invoke(app, _upload_command(trial))
235
265
 
236
266
  assert result.exit_code == 1
237
267
  assert "acp_trajectory.jsonl" in result.output.replace("\n", "")
@@ -290,7 +320,54 @@ def test_broker_put_conflicts_are_cloud_neutral_skips(
290
320
 
291
321
 
292
322
  def test_help_exposes_only_the_planned_upload_command() -> None:
293
- """The trajectory CLI surface remains a single clean command."""
323
+ """Guards PR #992 while ignoring Rich's environment-specific ANSI styling."""
324
+ traj_group = next(group for group in app.registered_groups if group.name == "traj")
325
+ assert {
326
+ command.name for command in traj_group.typer_instance.registered_commands
327
+ } == {"upload"}
328
+
294
329
  result = runner.invoke(app, ["traj", "--help"])
295
330
  assert result.exit_code == 0
296
331
  assert "upload" in result.output
332
+
333
+ upload_help = runner.invoke(app, ["traj", "upload", "--help"])
334
+ assert upload_help.exit_code == 0
335
+ upload_help_output = click.unstyle(upload_help.output)
336
+ assert "--github-id" in upload_help_output
337
+ assert "--email" in upload_help_output
338
+
339
+
340
+ def test_upload_requires_github_id_and_email_parameters(tmp_path: Path) -> None:
341
+ """Guards PR #992: every CLI upload must name its contributor."""
342
+ trial = _trial(tmp_path)
343
+ result = runner.invoke(app, ["traj", "upload", str(trial)])
344
+
345
+ assert result.exit_code == 2
346
+ assert "--github-id" in click.unstyle(result.output)
347
+
348
+ result = runner.invoke(
349
+ app,
350
+ ["traj", "upload", str(trial), "--github-id", GITHUB_ID],
351
+ )
352
+ assert result.exit_code == 2
353
+ assert "--email" in click.unstyle(result.output)
354
+
355
+
356
+ @pytest.mark.parametrize(
357
+ ("args", "message"),
358
+ [
359
+ (("--github-id", "@not-a-github-id", "--email", EMAIL), "GitHub ID"),
360
+ (("--github-id", GITHUB_ID, "--email", "not-an-email"), "email"),
361
+ ],
362
+ )
363
+ def test_upload_validates_contributor_parameters_locally(
364
+ tmp_path: Path, args: tuple[str, ...], message: str
365
+ ) -> None:
366
+ """Malformed contributor provenance fails before the upload handshake."""
367
+ result = runner.invoke(
368
+ app,
369
+ ["traj", "upload", str(_trial(tmp_path)), *args, "--dry-run"],
370
+ )
371
+
372
+ assert result.exit_code == 1
373
+ assert message in result.output