qb-cubie 0.0.3__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 (520) hide show
  1. qb_cubie-0.0.3/LICENSE +21 -0
  2. qb_cubie-0.0.3/MANIFEST.in +11 -0
  3. qb_cubie-0.0.3/PKG-INFO +252 -0
  4. qb_cubie-0.0.3/README.md +222 -0
  5. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/__init__.py +1 -0
  6. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/budget.py +89 -0
  7. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/client.py +129 -0
  8. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/context.py +51 -0
  9. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/__init__.py +5 -0
  10. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/adapter.py +238 -0
  11. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/process.py +105 -0
  12. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/repair.py +183 -0
  13. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/schema.py +87 -0
  14. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/sources.py +99 -0
  15. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/tools.py +57 -0
  16. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/errors.py +21 -0
  17. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/evidence.py +124 -0
  18. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/jsonio.py +68 -0
  19. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/paths.py +60 -0
  20. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/__init__.py +5 -0
  21. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/__main__.py +29 -0
  22. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/freeze.py +63 -0
  23. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/live.py +119 -0
  24. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/observations.py +86 -0
  25. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/validation.py +100 -0
  26. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/__init__.py +5 -0
  27. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/adapter.py +165 -0
  28. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/process.py +91 -0
  29. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/request.py +34 -0
  30. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/schema.py +50 -0
  31. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/sources.py +130 -0
  32. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/tools.py +87 -0
  33. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/schema.py +181 -0
  34. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/transaction.py +111 -0
  35. qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/workspace.py +83 -0
  36. qb_cubie-0.0.3/pyproject.toml +68 -0
  37. qb_cubie-0.0.3/scripts/check_wheel.py +88 -0
  38. qb_cubie-0.0.3/setup.cfg +4 -0
  39. qb_cubie-0.0.3/src/qb_cubie/__init__.py +56 -0
  40. qb_cubie-0.0.3/src/qb_cubie/_execution.py +70 -0
  41. qb_cubie-0.0.3/src/qb_cubie/_files.py +14 -0
  42. qb_cubie-0.0.3/src/qb_cubie/arenas/__init__.py +30 -0
  43. qb_cubie-0.0.3/src/qb_cubie/arenas/_hydration.py +125 -0
  44. qb_cubie-0.0.3/src/qb_cubie/arenas/_process.py +179 -0
  45. qb_cubie-0.0.3/src/qb_cubie/arenas/_relocation.py +99 -0
  46. qb_cubie-0.0.3/src/qb_cubie/arenas/_requirements.py +173 -0
  47. qb_cubie-0.0.3/src/qb_cubie/arenas/_tempfs_runner.py +49 -0
  48. qb_cubie-0.0.3/src/qb_cubie/arenas/arena_envs/__init__.py +5 -0
  49. qb_cubie-0.0.3/src/qb_cubie/arenas/codecs.py +335 -0
  50. qb_cubie-0.0.3/src/qb_cubie/arenas/phantom_hook.py +117 -0
  51. qb_cubie-0.0.3/src/qb_cubie/arenas/pyvenv.py +379 -0
  52. qb_cubie-0.0.3/src/qb_cubie/arenas/tempfs.py +160 -0
  53. qb_cubie-0.0.3/src/qb_cubie/benchmarks/__init__.py +58 -0
  54. qb_cubie-0.0.3/src/qb_cubie/benchmarks/_cli_commands.py +91 -0
  55. qb_cubie-0.0.3/src/qb_cubie/benchmarks/_cli_parser.py +60 -0
  56. qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/__init__.py +1 -0
  57. qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/_transport.py +156 -0
  58. qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/fake.py +102 -0
  59. qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/process.py +75 -0
  60. qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/provenance.py +28 -0
  61. qb_cubie-0.0.3/src/qb_cubie/benchmarks/cli.py +98 -0
  62. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/__init__.py +1 -0
  63. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/_validation.py +166 -0
  64. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/admission.py +26 -0
  65. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/catalogs.py +40 -0
  66. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/packages.py +116 -0
  67. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/protocols.py +153 -0
  68. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/references.py +122 -0
  69. qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/validation.py +112 -0
  70. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/GUIDE_Benchmarks.md +1469 -0
  71. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/GUIDE_Ollama-Agents.md +122 -0
  72. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/README.md +9 -0
  73. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/dataset.json +294 -0
  74. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/package.json +46 -0
  75. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/acceptance.py.txt +47 -0
  76. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/agent_test.py.txt +29 -0
  77. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/missing-manifest.py.txt +23 -0
  78. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/round-down.py.txt +24 -0
  79. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/wrong-filter.py.txt +24 -0
  80. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/wrong-return.py.txt +25 -0
  81. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/pytest_agent_test.py.txt +26 -0
  82. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/reference.json +40 -0
  83. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/solution.py.txt +24 -0
  84. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/scenario.json +30 -0
  85. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/task.md +5 -0
  86. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/visible/README.md +3 -0
  87. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/visible/invoice_export.py.txt +24 -0
  88. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/visible/pyproject.toml +11 -0
  89. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/acceptance.py.txt +47 -0
  90. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/agent_test.py.txt +29 -0
  91. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/missing-manifest.py.txt +23 -0
  92. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/round-down.py.txt +24 -0
  93. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/wrong-filter.py.txt +24 -0
  94. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/wrong-return.py.txt +25 -0
  95. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/pytest_agent_test.py.txt +26 -0
  96. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/reference.json +44 -0
  97. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/solution.py.txt +24 -0
  98. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/scenario.json +30 -0
  99. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/task.md +5 -0
  100. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/visible/README.md +3 -0
  101. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/visible/invoice_export.py.txt +2 -0
  102. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/visible/pyproject.toml +11 -0
  103. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/acceptance.py.txt +47 -0
  104. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/agent_test.py.txt +29 -0
  105. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/missing-manifest.py.txt +23 -0
  106. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/round-down.py.txt +24 -0
  107. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/wrong-filter.py.txt +24 -0
  108. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/wrong-return.py.txt +25 -0
  109. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/pytest_agent_test.py.txt +26 -0
  110. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/reference.json +40 -0
  111. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/solution.py.txt +24 -0
  112. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/scenario.json +30 -0
  113. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/task.md +5 -0
  114. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/visible/README.md +3 -0
  115. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/visible/invoice_export.py.txt +24 -0
  116. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/visible/pyproject.toml +11 -0
  117. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/acceptance.py.txt +45 -0
  118. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/agent_test.py.txt +32 -0
  119. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/extra-file.py.txt +14 -0
  120. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/missing-file.py.txt +13 -0
  121. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/wrong-priority.py.txt +14 -0
  122. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/wrong-return.py.txt +14 -0
  123. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/pytest_agent_test.py.txt +29 -0
  124. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/reference.json +37 -0
  125. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/solution.py.txt +13 -0
  126. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/scenario.json +29 -0
  127. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/task.md +5 -0
  128. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/visible/README.md +3 -0
  129. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/visible/config_bundle.py.txt +14 -0
  130. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/visible/pyproject.toml +11 -0
  131. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/acceptance.py.txt +45 -0
  132. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/agent_test.py.txt +32 -0
  133. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/extra-file.py.txt +14 -0
  134. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/missing-file.py.txt +13 -0
  135. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/wrong-priority.py.txt +14 -0
  136. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/wrong-return.py.txt +14 -0
  137. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/pytest_agent_test.py.txt +29 -0
  138. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/reference.json +41 -0
  139. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/solution.py.txt +13 -0
  140. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/scenario.json +29 -0
  141. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/task.md +5 -0
  142. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/visible/README.md +3 -0
  143. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/visible/config_bundle.py.txt +2 -0
  144. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/visible/pyproject.toml +11 -0
  145. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/acceptance.py.txt +58 -0
  146. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/agent_test.py.txt +32 -0
  147. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/extra-file.py.txt +18 -0
  148. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/ignored-schema.py.txt +17 -0
  149. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/missing-file.py.txt +17 -0
  150. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/wrong-priority.py.txt +18 -0
  151. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/wrong-return.py.txt +18 -0
  152. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/pytest_agent_test.py.txt +29 -0
  153. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/reference.json +43 -0
  154. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/solution.py.txt +17 -0
  155. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/scenario.json +31 -0
  156. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/task.md +5 -0
  157. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/visible/README.md +3 -0
  158. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/visible/config_bundle.py.txt +13 -0
  159. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/visible/pyproject.toml +11 -0
  160. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/acceptance.py.txt +49 -0
  161. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/agent_test.py.txt +32 -0
  162. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/corrupt-copy.py.txt +15 -0
  163. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/extra-file.py.txt +16 -0
  164. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/missing-copy.py.txt +15 -0
  165. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/reverse-index.py.txt +15 -0
  166. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/wrong-return.py.txt +16 -0
  167. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/pytest_agent_test.py.txt +29 -0
  168. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/reference.json +42 -0
  169. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/solution.py.txt +15 -0
  170. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/scenario.json +30 -0
  171. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/task.md +5 -0
  172. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/visible/README.md +3 -0
  173. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/visible/document_catalog.py.txt +15 -0
  174. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/visible/pyproject.toml +11 -0
  175. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/acceptance.py.txt +49 -0
  176. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/agent_test.py.txt +32 -0
  177. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/corrupt-copy.py.txt +15 -0
  178. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/extra-file.py.txt +16 -0
  179. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/missing-copy.py.txt +15 -0
  180. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/reverse-index.py.txt +15 -0
  181. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/wrong-return.py.txt +16 -0
  182. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/pytest_agent_test.py.txt +29 -0
  183. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/reference.json +46 -0
  184. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/solution.py.txt +15 -0
  185. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/scenario.json +30 -0
  186. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/task.md +5 -0
  187. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/visible/README.md +3 -0
  188. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/visible/document_catalog.py.txt +2 -0
  189. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/visible/pyproject.toml +11 -0
  190. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/acceptance.py.txt +49 -0
  191. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/agent_test.py.txt +32 -0
  192. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/corrupt-copy.py.txt +16 -0
  193. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/extra-file.py.txt +17 -0
  194. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/missing-copy.py.txt +16 -0
  195. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/reverse-index.py.txt +16 -0
  196. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/wrong-return.py.txt +17 -0
  197. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/pytest_agent_test.py.txt +29 -0
  198. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/reference.json +42 -0
  199. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/solution.py.txt +16 -0
  200. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/scenario.json +30 -0
  201. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/task.md +5 -0
  202. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/visible/README.md +3 -0
  203. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/visible/document_catalog.py.txt +15 -0
  204. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/visible/pyproject.toml +11 -0
  205. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/acceptance.py.txt +12 -0
  206. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/agent_test.py.txt +16 -0
  207. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/float-total.py.txt +2 -0
  208. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/no-discount.py.txt +2 -0
  209. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/wrong-filter.py.txt +2 -0
  210. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/wrong-return.py.txt +2 -0
  211. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/pytest_agent_test.py.txt +14 -0
  212. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/reference.json +36 -0
  213. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/solution.py.txt +2 -0
  214. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/scenario.json +26 -0
  215. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/task.md +5 -0
  216. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/visible/README.md +3 -0
  217. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/visible/net_amount.py.txt +2 -0
  218. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/visible/pyproject.toml +11 -0
  219. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/acceptance.py.txt +12 -0
  220. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/agent_test.py.txt +16 -0
  221. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/float-total.py.txt +2 -0
  222. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/no-discount.py.txt +2 -0
  223. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/wrong-filter.py.txt +2 -0
  224. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/wrong-return.py.txt +2 -0
  225. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/pytest_agent_test.py.txt +14 -0
  226. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/reference.json +40 -0
  227. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/solution.py.txt +2 -0
  228. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/scenario.json +26 -0
  229. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/task.md +5 -0
  230. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/visible/README.md +3 -0
  231. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/visible/net_amount.py.txt +2 -0
  232. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/visible/pyproject.toml +11 -0
  233. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/acceptance.py.txt +12 -0
  234. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/agent_test.py.txt +16 -0
  235. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/float-total.py.txt +2 -0
  236. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/no-discount.py.txt +2 -0
  237. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/wrong-filter.py.txt +2 -0
  238. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/wrong-return.py.txt +2 -0
  239. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/pytest_agent_test.py.txt +14 -0
  240. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/reference.json +36 -0
  241. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/solution.py.txt +2 -0
  242. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/scenario.json +26 -0
  243. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/task.md +5 -0
  244. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/visible/README.md +3 -0
  245. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/visible/net_amount.py.txt +2 -0
  246. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/visible/pyproject.toml +11 -0
  247. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/evaluator/acceptance.py.txt +6 -0
  248. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/evaluator/reference.json +10 -0
  249. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/scenario.json +25 -0
  250. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/task.md +5 -0
  251. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/visible/reservation.py.txt +3 -0
  252. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/evaluator/acceptance.py.txt +6 -0
  253. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/evaluator/reference.json +30 -0
  254. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/scenario.json +25 -0
  255. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/task.md +5 -0
  256. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/visible/reservation.py.txt +2 -0
  257. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/evaluator/acceptance.py.txt +7 -0
  258. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/evaluator/reference.json +15 -0
  259. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/scenario.json +25 -0
  260. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/task.md +5 -0
  261. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/visible/stock_policy.py.txt +2 -0
  262. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/visible/warehouse.py.txt +4 -0
  263. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/evaluator/acceptance.py.txt +7 -0
  264. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/evaluator/reference.json +37 -0
  265. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/scenario.json +25 -0
  266. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/task.md +5 -0
  267. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/visible/stock_policy.py.txt +2 -0
  268. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/visible/warehouse.py.txt +4 -0
  269. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/evaluator/acceptance.py.txt +8 -0
  270. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/evaluator/reference.json +10 -0
  271. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/scenario.json +25 -0
  272. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/task.md +5 -0
  273. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/visible/parser.py.txt +4 -0
  274. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/evaluator/acceptance.py.txt +8 -0
  275. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/evaluator/reference.json +26 -0
  276. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/scenario.json +25 -0
  277. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/task.md +5 -0
  278. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/visible/parser.py.txt +7 -0
  279. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/evaluator/acceptance.py.txt +10 -0
  280. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/evaluator/reference.json +15 -0
  281. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/scenario.json +25 -0
  282. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/task.md +5 -0
  283. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/visible/scanner.py.txt +4 -0
  284. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/visible/tool.py.txt +2 -0
  285. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/evaluator/acceptance.py.txt +10 -0
  286. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/evaluator/reference.json +31 -0
  287. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/scenario.json +25 -0
  288. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/task.md +5 -0
  289. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/visible/scanner.py.txt +4 -0
  290. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/visible/tool.py.txt +5 -0
  291. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/evaluator/acceptance.py.txt +8 -0
  292. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/evaluator/reference.json +15 -0
  293. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/scenario.json +25 -0
  294. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/task.md +5 -0
  295. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/visible/delivery.py.txt +8 -0
  296. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/visible/layout.py.txt +2 -0
  297. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/evaluator/acceptance.py.txt +8 -0
  298. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/evaluator/reference.json +37 -0
  299. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/scenario.json +25 -0
  300. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/task.md +5 -0
  301. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/visible/delivery.py.txt +8 -0
  302. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/visible/layout.py.txt +2 -0
  303. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/evaluator/acceptance.py.txt +10 -0
  304. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/evaluator/reference.json +10 -0
  305. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/scenario.json +25 -0
  306. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/task.md +5 -0
  307. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/visible/report.py.txt +7 -0
  308. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/evaluator/acceptance.py.txt +10 -0
  309. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/evaluator/reference.json +26 -0
  310. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/scenario.json +25 -0
  311. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/task.md +5 -0
  312. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/visible/report.py.txt +8 -0
  313. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/evaluator/reference.json +14 -0
  314. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/scenario.json +25 -0
  315. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/task.md +5 -0
  316. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/visible/formats.py.txt +1 -0
  317. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/visible/render.py.txt +7 -0
  318. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/evaluator/reference.json +30 -0
  319. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/scenario.json +25 -0
  320. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/task.md +5 -0
  321. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/visible/formats.py.txt +1 -0
  322. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/visible/render.py.txt +8 -0
  323. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/evaluator/reference.json +15 -0
  324. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/scenario.json +25 -0
  325. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/task.md +5 -0
  326. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/visible/invoice.py.txt +4 -0
  327. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/visible/quote.py.txt +4 -0
  328. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/visible/rates.py.txt +1 -0
  329. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/evaluator/reference.json +30 -0
  330. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/scenario.json +25 -0
  331. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/task.md +5 -0
  332. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/visible/invoice.py.txt +4 -0
  333. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/visible/quote.py.txt +4 -0
  334. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/evaluator/acceptance.py.txt +9 -0
  335. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/evaluator/reference.json +15 -0
  336. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/scenario.json +25 -0
  337. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/task.md +5 -0
  338. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/visible/job.py.txt +5 -0
  339. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/visible/snapshot.py.txt +4 -0
  340. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/evaluator/acceptance.py.txt +9 -0
  341. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/evaluator/reference.json +40 -0
  342. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/scenario.json +25 -0
  343. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/task.md +5 -0
  344. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/visible/job.py.txt +5 -0
  345. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/visible/snapshot.py.txt +2 -0
  346. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/evaluator/acceptance.py.txt +7 -0
  347. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/evaluator/reference.json +10 -0
  348. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/scenario.json +25 -0
  349. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/task.md +5 -0
  350. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/visible/memo.py.txt +7 -0
  351. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/evaluator/acceptance.py.txt +7 -0
  352. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/evaluator/reference.json +39 -0
  353. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/scenario.json +25 -0
  354. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/task.md +5 -0
  355. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/visible/memo.py.txt +7 -0
  356. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/evaluator/acceptance.py.txt +7 -0
  357. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/evaluator/reference.json +15 -0
  358. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/scenario.json +25 -0
  359. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/task.md +5 -0
  360. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/visible/checks.py.txt +4 -0
  361. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/visible/samples.py.txt +1 -0
  362. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/evaluator/acceptance.py.txt +7 -0
  363. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/evaluator/reference.json +31 -0
  364. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/scenario.json +25 -0
  365. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/task.md +5 -0
  366. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/visible/checks.py.txt +4 -0
  367. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/visible/samples.py.txt +1 -0
  368. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/evaluator/acceptance.py.txt +5 -0
  369. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/evaluator/reference.json +10 -0
  370. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/scenario.json +25 -0
  371. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/task.md +5 -0
  372. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/visible/routing_checks.py.txt +4 -0
  373. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/evaluator/acceptance.py.txt +5 -0
  374. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/evaluator/reference.json +29 -0
  375. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/scenario.json +25 -0
  376. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/task.md +5 -0
  377. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/visible/routing_checks.py.txt +5 -0
  378. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/agents/jsonl_agent.py.txt +115 -0
  379. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/package.json +12 -0
  380. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/acceptance.py.txt +7 -0
  381. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/agent_test.py.txt +10 -0
  382. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/reference.json +21 -0
  383. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/solution.py.txt +2 -0
  384. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/wrong.py.txt +2 -0
  385. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/scenario.json +25 -0
  386. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/task.md +4 -0
  387. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/visible/shipping.py.txt +2 -0
  388. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/evaluator/reference.json +23 -0
  389. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/scenario.json +25 -0
  390. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/task.md +4 -0
  391. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/visible/shipping.py.txt +2 -0
  392. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/evaluator/reference.json +9 -0
  393. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/scenario.json +17 -0
  394. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/task.md +4 -0
  395. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/visible/shipping.py.txt +2 -0
  396. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/package.json +12 -0
  397. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/acceptance.py.txt +47 -0
  398. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/agent_test.py.txt +22 -0
  399. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/corrupt-copy.py.txt +9 -0
  400. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/extra-file.py.txt +10 -0
  401. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/missing-copy.py.txt +9 -0
  402. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/reverse-sort.py.txt +9 -0
  403. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/wrong-return.py.txt +10 -0
  404. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/pytest_agent_test.py.txt +17 -0
  405. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/reference.json +41 -0
  406. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/solution.py.txt +9 -0
  407. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/scenario.json +25 -0
  408. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/task.md +7 -0
  409. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/visible/indexer.py.txt +2 -0
  410. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/evaluator/reference.json +10 -0
  411. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/scenario.json +18 -0
  412. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/task.md +3 -0
  413. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/visible/balance.py.txt +5 -0
  414. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/visible/policy.py.txt +2 -0
  415. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/evaluator/reference.json +31 -0
  416. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/scenario.json +18 -0
  417. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/task.md +3 -0
  418. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/visible/balance.py.txt +5 -0
  419. qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/visible/policy.py.txt +2 -0
  420. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/__init__.py +1 -0
  421. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_episode.py +124 -0
  422. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_external.py +166 -0
  423. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_inputs.py +220 -0
  424. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_messages.py +32 -0
  425. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_process.py +75 -0
  426. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_project.py +69 -0
  427. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_pytest.py +120 -0
  428. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_review.py +46 -0
  429. qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/evaluators.py +108 -0
  430. qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/__init__.py +1 -0
  431. qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/_adapters.py +68 -0
  432. qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/_bundle.py +69 -0
  433. qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/_toml.py +20 -0
  434. qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/frozen.py +107 -0
  435. qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/provenance.py +57 -0
  436. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/__init__.py +1 -0
  437. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/_planning.py +179 -0
  438. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/gates.py +44 -0
  439. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/order.py +37 -0
  440. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/pairs.py +38 -0
  441. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/planner.py +56 -0
  442. qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/selection.py +74 -0
  443. qb_cubie-0.0.3/src/qb_cubie/benchmarks/pytest_plugin.py +55 -0
  444. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/__init__.py +1 -0
  445. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_files.py +65 -0
  446. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_pilot_integrity.py +42 -0
  447. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_pilot_stats.py +99 -0
  448. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_pilot_text.py +19 -0
  449. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/adjudication.py +123 -0
  450. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/archives.py +93 -0
  451. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/comparison.py +99 -0
  452. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/gates.py +75 -0
  453. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/pilot.py +106 -0
  454. qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/results.py +76 -0
  455. qb_cubie-0.0.3/src/qb_cubie/benchmarks/runner.py +51 -0
  456. qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/__init__.py +1 -0
  457. qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/base.py +20 -0
  458. qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/custom.py +109 -0
  459. qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/ollama.py +139 -0
  460. qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/templates.py +62 -0
  461. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/__init__.py +1 -0
  462. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/_common.py +159 -0
  463. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/admission.py +121 -0
  464. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/agent.py +92 -0
  465. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/evaluation.py +113 -0
  466. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/importer.py +436 -0
  467. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/runtime.py +178 -0
  468. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/source.py +195 -0
  469. qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/validation.py +183 -0
  470. qb_cubie-0.0.3/src/qb_cubie/ebt.py +675 -0
  471. qb_cubie-0.0.3/src/qb_cubie/linter.py +252 -0
  472. qb_cubie-0.0.3/src/qb_cubie/linters/__init__.py +7 -0
  473. qb_cubie-0.0.3/src/qb_cubie/linters/mypy.py +97 -0
  474. qb_cubie-0.0.3/src/qb_cubie/linters/pylint.py +107 -0
  475. qb_cubie-0.0.3/src/qb_cubie/multiprocessors.py +450 -0
  476. qb_cubie-0.0.3/src/qb_cubie/protocols.py +223 -0
  477. qb_cubie-0.0.3/src/qb_cubie/rbt.py +192 -0
  478. qb_cubie-0.0.3/src/qb_cubie/reporter.py +362 -0
  479. qb_cubie-0.0.3/src/qb_cubie.egg-info/PKG-INFO +252 -0
  480. qb_cubie-0.0.3/src/qb_cubie.egg-info/SOURCES.txt +518 -0
  481. qb_cubie-0.0.3/src/qb_cubie.egg-info/dependency_links.txt +1 -0
  482. qb_cubie-0.0.3/src/qb_cubie.egg-info/entry_points.txt +2 -0
  483. qb_cubie-0.0.3/src/qb_cubie.egg-info/requires.txt +15 -0
  484. qb_cubie-0.0.3/src/qb_cubie.egg-info/top_level.txt +2 -0
  485. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/README.md +37 -0
  486. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/agents/jsonl_agent.py.txt +115 -0
  487. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/package.json +12 -0
  488. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/acceptance.py.txt +7 -0
  489. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/agent_test.py.txt +10 -0
  490. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/reference.json +21 -0
  491. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/solution.py.txt +2 -0
  492. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/wrong.py.txt +2 -0
  493. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/scenario.json +25 -0
  494. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/task.md +4 -0
  495. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/visible/shipping.py.txt +2 -0
  496. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/evaluator/reference.json +23 -0
  497. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/scenario.json +25 -0
  498. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/task.md +4 -0
  499. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/visible/shipping.py +2 -0
  500. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/evaluator/reference.json +9 -0
  501. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/scenario.json +17 -0
  502. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/task.md +4 -0
  503. qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/visible/shipping.py +2 -0
  504. qb_cubie-0.0.3/tests/test_core_without_tk.py +25 -0
  505. qb_cubie-0.0.3/tests/test_default_collection_contract.py +59 -0
  506. qb_cubie-0.0.3/tests/test_headless_reviewer.py +228 -0
  507. qb_cubie-0.0.3/tests/test_human_reviewer_fresh_decision.py +139 -0
  508. qb_cubie-0.0.3/tests/test_lint.py +70 -0
  509. qb_cubie-0.0.3/tests/test_offline_core.py +320 -0
  510. qb_cubie-0.0.3/tests/test_rbt_demo.py +6 -0
  511. qb_cubie-0.0.3/tests/test_rbt_reporter.py +156 -0
  512. qb_cubie-0.0.3/tests/test_readme_examples.py +101 -0
  513. qb_cubie-0.0.3/tests/test_styleguide.py +104 -0
  514. qb_cubie-0.0.3/tests/wheel/benchmark_base_installed.py +79 -0
  515. qb_cubie-0.0.3/tests/wheel/benchmark_custom_installed.py +100 -0
  516. qb_cubie-0.0.3/tests/wheel/benchmark_installed.py +130 -0
  517. qb_cubie-0.0.3/tests/wheel/benchmark_measurement_installed.py +86 -0
  518. qb_cubie-0.0.3/tests/wheel/ollama_agents_installed.py +221 -0
  519. qb_cubie-0.0.3/tests/wheel/smoke_installed.py +150 -0
  520. qb_cubie-0.0.3/tests/wheel/tk_contract.py +76 -0
qb_cubie-0.0.3/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dominick Wirzba
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,11 @@
1
+ prune src/qb_cubie/arenas/arena_envs
2
+ include src/qb_cubie/arenas/arena_envs/__init__.py
3
+ include scripts/check_wheel.py
4
+ include tests/wheel/smoke_installed.py
5
+ include tests/wheel/tk_contract.py
6
+ include tests/wheel/benchmark_installed.py
7
+ include tests/wheel/benchmark_custom_installed.py
8
+ include tests/wheel/benchmark_base_installed.py
9
+ include tests/wheel/benchmark_measurement_installed.py
10
+ include tests/wheel/ollama_agents_installed.py
11
+ recursive-include tests/benchmarks/fixtures/phase3 *.json *.toml *.md *.py *.txt
@@ -0,0 +1,252 @@
1
+ Metadata-Version: 2.4
2
+ Name: qb-cubie
3
+ Version: 0.0.3
4
+ Summary: Declarative acceptance tests, reviews, and static code analysis for Python
5
+ Author: Dominick Wirzba
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Chronuid/qb-cubie
8
+ Project-URL: Repository, https://github.com/Chronuid/qb-cubie
9
+ Project-URL: Issues, https://github.com/Chronuid/qb-cubie/issues
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Topic :: Software Development :: Testing
14
+ Requires-Python: >=3.13
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: msgspec<0.23,>=0.22
18
+ Requires-Dist: loky<4,>=3.7
19
+ Requires-Dist: cloudpickle<4,>=3.1.2
20
+ Requires-Dist: packaging<27,>=26.3
21
+ Provides-Extra: linters
22
+ Requires-Dist: libcst<2,>=1.9; extra == "linters"
23
+ Requires-Dist: mypy<3,>=2.4.1; extra == "linters"
24
+ Requires-Dist: pylint<5,>=4.1.3; extra == "linters"
25
+ Provides-Extra: benchmarks
26
+ Requires-Dist: pytest<10,>=9.2; extra == "benchmarks"
27
+ Provides-Extra: swebench
28
+ Requires-Dist: pyarrow<24,>=19; extra == "swebench"
29
+ Dynamic: license-file
30
+
31
+ <center>
32
+
33
+ # qb-cubie: Quality-Bench
34
+
35
+ ![qb-cubie](./docs/.assets/cubie-banner.png)
36
+
37
+ **qb-cubie bietet deklarative Akzeptanztests für Python-Funktionen und Datei-Workflows auf Basis von pytest.**
38
+ Eingaben, Rückgabemuster und erwartete Dateien werden gemeinsam beschrieben.
39
+ Reviewer können zusätzliche, ausdrücklich formulierte Kriterien beurteilen.
40
+
41
+ ---
42
+
43
+ qb-cubie ist experimentell. Erfolgreiche Tests dokumentieren beobachtete Konformität in den geprüften Fällen.
44
+ Sie belegen weder allgemeine Korrektheit noch eine vollständige Testabdeckung.
45
+
46
+ ---
47
+
48
+ </center>
49
+
50
+ ## Installation
51
+
52
+ ```bash
53
+ uv pip install qb-cubie
54
+ ```
55
+
56
+ ## Einstieg
57
+
58
+ Voraussetzung ist Python ≥ 3.13. Der öffentliche Distributionsname lautet `qb-cubie`, der Python-Importname `qb_cubie`. In den internen Handbüchern wird weiterhin „cubie“ verwendet. Frühere Importe aus `cubie` müssen auf `qb_cubie` umgestellt werden.
59
+
60
+ Im Projektverzeichnis:
61
+
62
+ ```bash
63
+ python3.13 -m venv .venv
64
+ .venv/bin/python -m pip install -e . pytest
65
+ ```
66
+
67
+ Virtuelle Umgebungen, lokale IDE-Einstellungen, Caches und erzeugte Paketmetadaten werden durch die Root-`.gitignore` ausgeschlossen und lokal erzeugt. Für die Entwicklung mit den in `uv.lock` festgehaltenen Abhängigkeiten kann stattdessen `uv sync --locked --group dev` verwendet werden. `pyproject.toml` und `uv.lock` bleiben versioniert.
68
+
69
+ Der gesamte Benchmark-Bereich ist **experimentell und gehört nicht zum
70
+ qb-cubie Core**. Ein modellfreier Smoke-Lauf ist mit dem Extra `benchmarks`
71
+ auch ohne Checkout verfügbar: `cubie-bench init-suite ./sets/smoke.toml --preset smoke --fake`,
72
+ danach `cubie-bench plan --suite ./sets/smoke.toml` und
73
+ `cubie-bench run --suite ./sets/smoke.toml`. Installation, Ergebnisdateien und
74
+ Gegenproben erklärt der [Benchmark-Guide](docs/GUIDE_Benchmarks.md#schnellstart).
75
+
76
+ Die Repository-Tests benötigen zusätzlich lokal provisionierte Arena-Basen und `uv` im `PATH`:
77
+
78
+ ```bash
79
+ uv sync --locked --group dev
80
+ .venv/bin/python scripts/provision_test_arenas.py
81
+ .venv/bin/python -m pytest -q
82
+ ```
83
+
84
+ Die Provisionierung ist ein eigener Installationsschritt und kann Netzwerkzugriff benötigen. `PyVenv.setup()` prüft die Codec-Abhängigkeiten und kopiert die Basis, ohne Pakete zu installieren. Die erzeugten Pfade, Paketversionen und Wiederholung des Schritts beschreibt das [Arena-Handbuch](./docs/GUIDE_Arena-Management.md#provisionierung-der-testbasen).
85
+
86
+ Speichere dieses vollständige Beispiel als `test_tax.py`:
87
+
88
+ ```python
89
+ from qb_cubie import EBT, WorldState
90
+
91
+
92
+ def calculate_tax(net, rate):
93
+ return net * (100 + rate) // 100
94
+
95
+
96
+ def test_tax():
97
+ EBT(
98
+ target=calculate_tax,
99
+ pre=WorldState(args=(100, 19)),
100
+ post=WorldState(returns=119),
101
+ ).run()
102
+ ```
103
+
104
+ ```bash
105
+ .venv/bin/python -m pytest -q test_tax.py
106
+ ```
107
+
108
+ Erst `.run()` führt den Test aus. Der Standardreporter lässt pytest bei einer negativen Auswertung fehlschlagen.
109
+
110
+ ## Lizenz und Abhängigkeiten
111
+
112
+ qb-cubie steht unter der [MIT-Lizenz](./LICENSE), Copyright © 2026 Dominick Wirzba. Lizenztext, SPDX-Kennung `MIT` und Autor werden in Quelldistribution und Wheel mitgeliefert.
113
+
114
+ Der Laufzeitkern benötigt `cloudpickle` für TempFS und Serialisierung, `msgspec` für den Standardcodec von PyVenv, `loky` für parallele Auswertungen mit dynamischen Prädikaten und `packaging` für Anforderungsprüfungen. Die ungenutzten Pakete `fsspec` und `path` gehören nicht zu den Abhängigkeiten. pytest wird vom aufrufenden Testprojekt bereitgestellt; der Paketimport und direkte `.run()`-Aufrufe benötigen es nicht.
115
+
116
+ Die Analysewerkzeuge LibCST, MyPy und Pylint sind über das Extra `linters` erhältlich. Für eine lokale Installation mit diesen Werkzeugen:
117
+
118
+ ```bash
119
+ .venv/bin/python -m pip install -e '.[linters]' pytest
120
+ ```
121
+
122
+ Für ein gebautes Wheel lautet der entsprechende Installationsaufruf `python -m pip install 'dist/qb_cubie-0.0.3-py3-none-any.whl[linters]'`. Ohne Extra bleiben die Kernfunktionen verfügbar; beim Aufruf fehlender Analysewerkzeuge erscheint ein Installationshinweis. Eigene Linterpfade können über `QB_CUBIE_MYPY_PATH` beziehungsweise `QB_CUBIE_PYLINT_PATH` gesetzt werden.
123
+
124
+ Veröffentlichte Abhängigkeiten haben Mindestversionen und eine Obergrenze vor der nächsten Hauptversion; bei dem noch mit `0.x` versionierten `msgspec` liegt sie vor der nächsten Nebenversion. Diese Grenzen bilden den vorgesehenen Kompatibilitätsrahmen, keine Zusage, dass jede Kombination geprüft wurde. Die Entwicklungsgruppe `dev` enthält pytest, Hypothesis, pytest-xdist, Ruff und festgelegte Analysewerkzeuge. Sie wird nicht als Paket-Extra veröffentlicht. `uv.lock` hält die genauen direkten und transitiven Versionen für Entwicklung und Repository-CI fest; konsumierende Projekte lösen innerhalb der veröffentlichten Bereiche selbst auf.
125
+
126
+ Nach Änderungen an Anforderungen wird `uv lock` ausgeführt und die Änderung an `uv.lock` gemeinsam geprüft. `uv sync --locked --group dev` installiert die festgehaltene Entwicklungsumgebung. Releases werden mit isoliertem Setuptools-Build (`setuptools>=77` für SPDX-Lizenzmetadaten) und den folgenden Installationsprüfungen validiert. Die Konfiguration folgt der [Setuptools-Dokumentation](https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html) und der [uv-Trennung von Abhängigkeiten, Extras und Entwicklungsgruppen](https://docs.astral.sh/uv/concepts/projects/dependencies/). Für den grafischen Reviewer wird zusätzlich eine Python-Installation mit Tk benötigt.
127
+
128
+ ## Experimentelle Benchmarks außerhalb des Core
129
+
130
+ Der [Benchmark-Guide](docs/GUIDE_Benchmarks.md) bündelt Schnellstart, eigene
131
+ JSONL-Agenten und Szenarien, Ergebnisvergleich, SWE-bench und CI-Messbetrieb.
132
+ Er beschreibt auch gespiegelte Developer-Aufgaben mit getrennten
133
+ Cubie-/Pytest-Agenten und einem Cubie-freien Vergleichscontainer.
134
+ `cubie-bench guide` zeigt denselben Guide aus dem installierten Paket.
135
+ Der gesamte Bereich einschließlich Adapter, Datensätzen und Messfunktionen
136
+ gehört nicht zum qb-cubie Core.
137
+
138
+ ## Wheel-Prüfung und CI
139
+
140
+ Die [CI](./.github/workflows/ci.yml) läuft bei Pushes und Pull Requests und kann manuell gestartet werden. Die Prüfmatrix ist bewusst begrenzt:
141
+
142
+ | Prüfung | Python | Betriebssystem / GitHub-Runner |
143
+ | --- | --- | --- |
144
+ | Wheel bauen, installieren und prüfen | 3.13, 3.14 | Linux (`ubuntu-24.04`), macOS (`macos-15`), Windows (`windows-2022`) |
145
+ | Vollständige Repository-Testsuite mit provisionierten Arena-Basen | 3.13, 3.14 | Linux (`ubuntu-24.04`) |
146
+
147
+ Die Wheel-Jobs bauen zunächst eine Quelldistribution und daraus das Wheel. Lokale Arena-Basen werden aus beiden Distributionen ausgeschlossen. [check_wheel.py](./scripts/check_wheel.py) erzeugt eine neue virtuelle Umgebung ohne Zugriff auf die Hostpakete und prüft zunächst Paketimport und EBT nur mit den deklarierten Pflichtabhängigkeiten, ohne pytest oder Analysewerkzeuge. Anschließend wird pytest ausdrücklich als Testtreiber installiert und die Kerninstallation geprüft. Danach wird dasselbe Wheel mit dem Extra `linters` installiert und erneut geprüft. `pip check` prüft die Abhängigkeiten. Die [Installationstests](./tests/wheel/smoke_installed.py) laufen außerhalb des Checkouts mit isoliertem Python, ohne die Repository-`conftest.py`, zusätzliche pytest-Plugins oder `PYTHONPATH=src`.
148
+
149
+ Geprüft werden Paketname, Lizenzmetadaten und Lizenztext, die Herkunft des installierten Pakets, alle Paketimporte, positive und negative EBT-/RBT-Auswertungen, ein TempFS-Dateiworkflow, PyVenv mit PickleCodec sowie fehlende und installierte Analysewerkzeuge (LibCST, MyPy, Pylint). Diese Installationsprüfungen ersetzen keine vollständige Plattformabnahme; insbesondere laufen die übrigen Repository-Tests bislang nur unter Linux. Weitere Python-Versionen sind durch diese Matrix nicht abgesichert.
150
+
151
+ Lokal mit Python 3.13 oder 3.14 und `uv` im `PATH`:
152
+
153
+ ```bash
154
+ uv build --clear --python python3.13
155
+ python3.13 scripts/check_wheel.py dist
156
+ ```
157
+
158
+ Unter Windows kann für beide Befehle `python` verwendet werden, wenn der gewünschte Interpreter im `PATH` steht. Der Build verwendet eine isolierte Build-Umgebung; die Wheel-Prüfung benötigt weder eine editierbare Installation noch provisionierte Arena-Basen. Build und Installation können Netzwerkzugriff benötigen. Die vollständige Repository-Testsuite verwendet dagegen die Versionen aus `uv.lock` und das Extra `dev` wie oben beschrieben.
159
+
160
+ ---
161
+
162
+ ## Example-Based Testing (EBT)
163
+
164
+ Ein `WorldState` ist ein veränderlicher Datensatz für konkrete Eingaben oder ein erwartetes Ergebnismuster. EBT ruft das Target für jeden angegebenen Eingang einmal auf und vergleicht die beobachteten Ergebnisse.
165
+
166
+ Bei mehreren Eingängen gilt dieselbe Liste erlaubter und verbotener Zielmuster für jeden Eingang. Es gibt keine automatische paarweise Zuordnung zwischen `pre[i]` und `post[i]`. Zusammengehörige Ein-/Ausgabepaare benötigen getrennte EBT-Verträge. Eine Liste erlaubter Würfelergebnisse prüft nur die beobachtete Ausgabe; auch ein konstanter Generator kann bestehen. Zufälligkeit und Verteilung werden damit nicht geprüft.
167
+
168
+ Typen, Unions, reguläre Ausdrücke und Prädikate können anstelle fester Rückgabewerte verwendet werden. Die genaue Bedeutung aller Felder und Vergleiche steht in der [verbindlichen Semantikreferenz](./docs/GUIDE_Contract-Semantics.md).
169
+
170
+ ## Datei-Workflows und Arenen
171
+
172
+ `TempFS` führt Targets mit dem Host-Interpreter in einem Kindprozess mit temporärem Arbeitsverzeichnis aus. `PyVenv` verwendet eine kopierte virtuelle Umgebung. Beide Prozesse besitzen weiterhin die Rechte des aufrufenden Benutzers und bieten **keine OS-Sicherheitsgrenze**. Sie eignen sich für vertrauenswürdigen Code. `DockerArena` und `VmArena` sind [Entwürfe](./docs/feature-drafts/virtualization/README.md) und gehören nicht zur öffentlichen API.
173
+
174
+ Die Hydrierung von `pre.fs` begrenzt Schreibziele auf den Workspace und weist
175
+ absolute Ziele, Pfadausbrüche und nach außen führende Links mit `ValueError` ab.
176
+ Hostquellen, Konfigurationen, Targets und Rückgaben müssen dennoch vertrauenswürdig
177
+ sein. Die [Pfadprüfung](./docs/GUIDE_Arena-Management.md#pfadgrenzen-der-hydrierung)
178
+ ersetzt keine Sicherheitsgrenze für nicht vertrauenswürdigen Code.
179
+
180
+ Ein vollständiges Beispiel für eine Dateitransformation steht im [EBT-Nutzungshandbuch](./docs/GUIDE_EBT-Usage-Pattern.md). Für `fs`-Prüfungen muss eine Arena explizit angegeben werden.
181
+
182
+ ## Review-Based Testing (RBT)
183
+
184
+ RBT übergibt eine Zielbezeichnung und eine Prüfregel an einen Reviewer. Es führt das Target nicht aus und liest eine als String übergebene Quelldatei nicht automatisch ein. Standardmäßig wartet `HeadlessReviewer` am Terminal auf eine Entscheidung; interaktive pytest-Läufe benötigen `-s`.
185
+
186
+ ```python
187
+ from qb_cubie.rbt import RBT
188
+
189
+
190
+ def test_logging_review():
191
+ RBT(
192
+ target="auth_module.py",
193
+ check="Prüfe die Datei: Werden Passwörter im Klartext geloggt?",
194
+ ).run()
195
+ ```
196
+
197
+ Die Datei muss vom Reviewer selbst geöffnet und beurteilt werden. Ein positives Review bleibt eine Beurteilung unter den jeweiligen Bedingungen. Eigene automatisierte Reviewer lassen sich injizieren; ein fertiger LLM-Adapter wird nicht mitgeliefert.
198
+
199
+ Speichere das Beispiel als `test_logging_review.py` und starte es mit freigegebener Terminaleingabe:
200
+
201
+ ```bash
202
+ .venv/bin/python -m pytest -q -s test_logging_review.py
203
+ ```
204
+
205
+ Antworte nach der Prüfung mit `y` oder `n` und gib optional einen Bericht ein. Eine Ablehnung lässt den Test fehlschlagen.
206
+
207
+ Die Python-Beispiele dieser README werden direkt aus den Codeblöcken gelesen und mit pytest ausgeführt. Die Prüfung benötigt keine Arena-Basen und lässt sich separat starten:
208
+
209
+ ```bash
210
+ .venv/bin/python -m pytest -q tests/test_readme_examples.py
211
+ ```
212
+
213
+ Dabei wird die Terminaleingabe für das RBT-Beispiel vorgegeben. Gegenproben mit einer fehlerhaften Steuerberechnung und einem abgelehnten Review müssen fehlschlagen; so wird auch abgesichert, dass die Beispiele tatsächlich `.run()` ausführen und Fehler an pytest melden.
214
+
215
+ ## Bekannte Einschränkungen
216
+
217
+ Das [Gutachten vom 10. November 2026](./GUTACHTEN.md) dokumentiert den damaligen Stand. Die Punkte B1–B5 aus Abschnitt 9.1 sind inzwischen durch Produktivkorrekturen und [Regressionstests](tests/docs_tmp/CONTRACT_CASES_9_1.md) abgesichert: EBT bewertet den kopierten Vertragsstand, Phantom-Aufrufe scheitern ausdrücklich, die Linter prüfen Status und Ausgabe, und jeder grafische Review beginnt ohne Entscheidung. Abschnitt 9.2 ergänzt den Kernbetrieb ohne Tk, aktuelle Dateivergleiche und einen geprüften Unterstützungsumfang für kopierte Konsolenskripte. Weiterhin gelten:
218
+
219
+ - **Prädikate und externe Daten:** Erwartungsobjekte müssen tief kopierbar sein. Funktionen behalten ihre Referenzen auf Closures, globale Variablen und externe Ressourcen; deren Zustand wird nicht eingefroren. Referenzdateien werden ebenfalls nicht archiviert.
220
+ - **PyVenv-Importhilfen:** `decontams` ersetzt nur ausdrücklich gewählte Module. Ohne installiertes pytest unterstützt eine begrenzte Importhilfe dessen Testdeklarationen; relevante Laufzeitaufrufe benötigen die echte Bibliothek. Die Importbedingungen bleiben Teil des Testvertrags.
221
+ - **Grafischer Reviewer:** Nur der Start der GUI benötigt `tkinter` und eine grafische Umgebung. Ohne Tk bleiben Paketimport, EBT und Headless-RBT verfügbar; der GUI-Aufruf gibt einen Installationshinweis.
222
+ - **Kopierte Umgebungen:** Übliche POSIX-Python-Einstiegsskripte werden auf den Klon angepasst. Nicht unterstützte Launcher werden vor Target-Ausführung abgelehnt; insbesondere sind zusätzliche native Windows-`.exe`-Launcher ausgeschlossen. Beliebige absolute Paket- oder Anwendungspfade werden nicht umgeschrieben. Den unterstützten Umfang beschreibt das [Arena-Handbuch](./docs/GUIDE_Arena-Management.md#pyvenv-kopierte-virtuelle-umgebung).
223
+ - **Dateivergleich:** Inhalte werden bei jedem Vergleich ohne persistenten Vergleichscache neu gelesen. Gleichzeitig laufende Schreibzugriffe ergeben weiterhin keine atomare Momentaufnahme.
224
+
225
+ Leere Zustandslisten werden inzwischen abgelehnt; aufeinanderfolgende `.run()`-Aufrufe setzen die EBT-Laufdaten zurück. Das setzt weder Target-Seiteneffekte noch bereits veränderte Argumente zurück. `WorldState(returns=None)` erwartet ausdrücklich `None`; ohne `returns` oder mit `returns=qb_cubie.UNSPECIFIED` bleibt die Rückgabe ungeprüft. Mehrere Eingänge teilen dieselbe Zielmenge; korrelierte Ein-/Ausgabepaare benötigen getrennte Verträge. Ein `JsonReporter` persistiert Ergebnisse, erhebt aber selbst keine fachliche Assertion. Die genaue Vertragsbedeutung steht in der [Semantikreferenz](./docs/GUIDE_Contract-Semantics.md).
226
+
227
+ Die vollständige Repository-Testsuite ist in der CI für Linux vorgesehen; macOS und Windows erhalten begrenzte Wheel-Prüfungen, einschließlich fehlendem Tk und echten absoluten MyPy-Dateipfaden. Die zuvor nicht regulär eingesammelten 14 Fälle gehören jetzt zur Standardsammlung. Umsetzung, Ausgangsbefunde und Abnahme von Abschnitt 9.2 stehen in den [Vertragsfällen](tests/docs_tmp/CONTRACT_CASES_9_2.md).
228
+
229
+ ---
230
+
231
+ ---
232
+
233
+ <center>
234
+
235
+ ![Error while trying to load the image](./docs/.assets/cubie-small.png)
236
+
237
+ ## Dokumentation
238
+
239
+ [Dokumentationsübersicht und Einordnung der Ablagen](docs/README.md)
240
+
241
+ [↦ | Qualitätssicherung: Begriffe und Aussagegrenzen | ↤](./docs/GUIDE_Quality-Assurance.md)
242
+ [↦ | Vertragssemantik: zentrale Referenz | ↤](./docs/GUIDE_Contract-Semantics.md)
243
+ [↦ | EBT: Auswahl von Beispielen | ↤](./docs/GUIDE_Example-Based-Testing.md)
244
+ [↦ | EBT: ausführbare Nutzungsmuster | ↤](./docs/GUIDE_EBT-Usage-Pattern.md)
245
+ [↦ | RBT: Reviewer und Nutzung | ↤](./docs/GUIDE_RBT-Usage-Pattern.md)
246
+ [↦ | Arena-Management | ↤](./docs/GUIDE_Arena-Management.md)
247
+ [↦ | Linter | ↤](./docs/GUIDE_Linter.md)
248
+
249
+ [↦ | Experimentelle Benchmarks außerhalb des Core | ↤](./docs/GUIDE_Benchmarks.md)
250
+ [↦ | Entwicklerübersicht EBT | ↤](./docs/dev/DEV-GUIDE_2-0_EXAMPLE-BASED-TESTING.md)
251
+
252
+ </center>
@@ -0,0 +1,222 @@
1
+ <center>
2
+
3
+ # qb-cubie: Quality-Bench
4
+
5
+ ![qb-cubie](./docs/.assets/cubie-banner.png)
6
+
7
+ **qb-cubie bietet deklarative Akzeptanztests für Python-Funktionen und Datei-Workflows auf Basis von pytest.**
8
+ Eingaben, Rückgabemuster und erwartete Dateien werden gemeinsam beschrieben.
9
+ Reviewer können zusätzliche, ausdrücklich formulierte Kriterien beurteilen.
10
+
11
+ ---
12
+
13
+ qb-cubie ist experimentell. Erfolgreiche Tests dokumentieren beobachtete Konformität in den geprüften Fällen.
14
+ Sie belegen weder allgemeine Korrektheit noch eine vollständige Testabdeckung.
15
+
16
+ ---
17
+
18
+ </center>
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ uv pip install qb-cubie
24
+ ```
25
+
26
+ ## Einstieg
27
+
28
+ Voraussetzung ist Python ≥ 3.13. Der öffentliche Distributionsname lautet `qb-cubie`, der Python-Importname `qb_cubie`. In den internen Handbüchern wird weiterhin „cubie“ verwendet. Frühere Importe aus `cubie` müssen auf `qb_cubie` umgestellt werden.
29
+
30
+ Im Projektverzeichnis:
31
+
32
+ ```bash
33
+ python3.13 -m venv .venv
34
+ .venv/bin/python -m pip install -e . pytest
35
+ ```
36
+
37
+ Virtuelle Umgebungen, lokale IDE-Einstellungen, Caches und erzeugte Paketmetadaten werden durch die Root-`.gitignore` ausgeschlossen und lokal erzeugt. Für die Entwicklung mit den in `uv.lock` festgehaltenen Abhängigkeiten kann stattdessen `uv sync --locked --group dev` verwendet werden. `pyproject.toml` und `uv.lock` bleiben versioniert.
38
+
39
+ Der gesamte Benchmark-Bereich ist **experimentell und gehört nicht zum
40
+ qb-cubie Core**. Ein modellfreier Smoke-Lauf ist mit dem Extra `benchmarks`
41
+ auch ohne Checkout verfügbar: `cubie-bench init-suite ./sets/smoke.toml --preset smoke --fake`,
42
+ danach `cubie-bench plan --suite ./sets/smoke.toml` und
43
+ `cubie-bench run --suite ./sets/smoke.toml`. Installation, Ergebnisdateien und
44
+ Gegenproben erklärt der [Benchmark-Guide](docs/GUIDE_Benchmarks.md#schnellstart).
45
+
46
+ Die Repository-Tests benötigen zusätzlich lokal provisionierte Arena-Basen und `uv` im `PATH`:
47
+
48
+ ```bash
49
+ uv sync --locked --group dev
50
+ .venv/bin/python scripts/provision_test_arenas.py
51
+ .venv/bin/python -m pytest -q
52
+ ```
53
+
54
+ Die Provisionierung ist ein eigener Installationsschritt und kann Netzwerkzugriff benötigen. `PyVenv.setup()` prüft die Codec-Abhängigkeiten und kopiert die Basis, ohne Pakete zu installieren. Die erzeugten Pfade, Paketversionen und Wiederholung des Schritts beschreibt das [Arena-Handbuch](./docs/GUIDE_Arena-Management.md#provisionierung-der-testbasen).
55
+
56
+ Speichere dieses vollständige Beispiel als `test_tax.py`:
57
+
58
+ ```python
59
+ from qb_cubie import EBT, WorldState
60
+
61
+
62
+ def calculate_tax(net, rate):
63
+ return net * (100 + rate) // 100
64
+
65
+
66
+ def test_tax():
67
+ EBT(
68
+ target=calculate_tax,
69
+ pre=WorldState(args=(100, 19)),
70
+ post=WorldState(returns=119),
71
+ ).run()
72
+ ```
73
+
74
+ ```bash
75
+ .venv/bin/python -m pytest -q test_tax.py
76
+ ```
77
+
78
+ Erst `.run()` führt den Test aus. Der Standardreporter lässt pytest bei einer negativen Auswertung fehlschlagen.
79
+
80
+ ## Lizenz und Abhängigkeiten
81
+
82
+ qb-cubie steht unter der [MIT-Lizenz](./LICENSE), Copyright © 2026 Dominick Wirzba. Lizenztext, SPDX-Kennung `MIT` und Autor werden in Quelldistribution und Wheel mitgeliefert.
83
+
84
+ Der Laufzeitkern benötigt `cloudpickle` für TempFS und Serialisierung, `msgspec` für den Standardcodec von PyVenv, `loky` für parallele Auswertungen mit dynamischen Prädikaten und `packaging` für Anforderungsprüfungen. Die ungenutzten Pakete `fsspec` und `path` gehören nicht zu den Abhängigkeiten. pytest wird vom aufrufenden Testprojekt bereitgestellt; der Paketimport und direkte `.run()`-Aufrufe benötigen es nicht.
85
+
86
+ Die Analysewerkzeuge LibCST, MyPy und Pylint sind über das Extra `linters` erhältlich. Für eine lokale Installation mit diesen Werkzeugen:
87
+
88
+ ```bash
89
+ .venv/bin/python -m pip install -e '.[linters]' pytest
90
+ ```
91
+
92
+ Für ein gebautes Wheel lautet der entsprechende Installationsaufruf `python -m pip install 'dist/qb_cubie-0.0.3-py3-none-any.whl[linters]'`. Ohne Extra bleiben die Kernfunktionen verfügbar; beim Aufruf fehlender Analysewerkzeuge erscheint ein Installationshinweis. Eigene Linterpfade können über `QB_CUBIE_MYPY_PATH` beziehungsweise `QB_CUBIE_PYLINT_PATH` gesetzt werden.
93
+
94
+ Veröffentlichte Abhängigkeiten haben Mindestversionen und eine Obergrenze vor der nächsten Hauptversion; bei dem noch mit `0.x` versionierten `msgspec` liegt sie vor der nächsten Nebenversion. Diese Grenzen bilden den vorgesehenen Kompatibilitätsrahmen, keine Zusage, dass jede Kombination geprüft wurde. Die Entwicklungsgruppe `dev` enthält pytest, Hypothesis, pytest-xdist, Ruff und festgelegte Analysewerkzeuge. Sie wird nicht als Paket-Extra veröffentlicht. `uv.lock` hält die genauen direkten und transitiven Versionen für Entwicklung und Repository-CI fest; konsumierende Projekte lösen innerhalb der veröffentlichten Bereiche selbst auf.
95
+
96
+ Nach Änderungen an Anforderungen wird `uv lock` ausgeführt und die Änderung an `uv.lock` gemeinsam geprüft. `uv sync --locked --group dev` installiert die festgehaltene Entwicklungsumgebung. Releases werden mit isoliertem Setuptools-Build (`setuptools>=77` für SPDX-Lizenzmetadaten) und den folgenden Installationsprüfungen validiert. Die Konfiguration folgt der [Setuptools-Dokumentation](https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html) und der [uv-Trennung von Abhängigkeiten, Extras und Entwicklungsgruppen](https://docs.astral.sh/uv/concepts/projects/dependencies/). Für den grafischen Reviewer wird zusätzlich eine Python-Installation mit Tk benötigt.
97
+
98
+ ## Experimentelle Benchmarks außerhalb des Core
99
+
100
+ Der [Benchmark-Guide](docs/GUIDE_Benchmarks.md) bündelt Schnellstart, eigene
101
+ JSONL-Agenten und Szenarien, Ergebnisvergleich, SWE-bench und CI-Messbetrieb.
102
+ Er beschreibt auch gespiegelte Developer-Aufgaben mit getrennten
103
+ Cubie-/Pytest-Agenten und einem Cubie-freien Vergleichscontainer.
104
+ `cubie-bench guide` zeigt denselben Guide aus dem installierten Paket.
105
+ Der gesamte Bereich einschließlich Adapter, Datensätzen und Messfunktionen
106
+ gehört nicht zum qb-cubie Core.
107
+
108
+ ## Wheel-Prüfung und CI
109
+
110
+ Die [CI](./.github/workflows/ci.yml) läuft bei Pushes und Pull Requests und kann manuell gestartet werden. Die Prüfmatrix ist bewusst begrenzt:
111
+
112
+ | Prüfung | Python | Betriebssystem / GitHub-Runner |
113
+ | --- | --- | --- |
114
+ | Wheel bauen, installieren und prüfen | 3.13, 3.14 | Linux (`ubuntu-24.04`), macOS (`macos-15`), Windows (`windows-2022`) |
115
+ | Vollständige Repository-Testsuite mit provisionierten Arena-Basen | 3.13, 3.14 | Linux (`ubuntu-24.04`) |
116
+
117
+ Die Wheel-Jobs bauen zunächst eine Quelldistribution und daraus das Wheel. Lokale Arena-Basen werden aus beiden Distributionen ausgeschlossen. [check_wheel.py](./scripts/check_wheel.py) erzeugt eine neue virtuelle Umgebung ohne Zugriff auf die Hostpakete und prüft zunächst Paketimport und EBT nur mit den deklarierten Pflichtabhängigkeiten, ohne pytest oder Analysewerkzeuge. Anschließend wird pytest ausdrücklich als Testtreiber installiert und die Kerninstallation geprüft. Danach wird dasselbe Wheel mit dem Extra `linters` installiert und erneut geprüft. `pip check` prüft die Abhängigkeiten. Die [Installationstests](./tests/wheel/smoke_installed.py) laufen außerhalb des Checkouts mit isoliertem Python, ohne die Repository-`conftest.py`, zusätzliche pytest-Plugins oder `PYTHONPATH=src`.
118
+
119
+ Geprüft werden Paketname, Lizenzmetadaten und Lizenztext, die Herkunft des installierten Pakets, alle Paketimporte, positive und negative EBT-/RBT-Auswertungen, ein TempFS-Dateiworkflow, PyVenv mit PickleCodec sowie fehlende und installierte Analysewerkzeuge (LibCST, MyPy, Pylint). Diese Installationsprüfungen ersetzen keine vollständige Plattformabnahme; insbesondere laufen die übrigen Repository-Tests bislang nur unter Linux. Weitere Python-Versionen sind durch diese Matrix nicht abgesichert.
120
+
121
+ Lokal mit Python 3.13 oder 3.14 und `uv` im `PATH`:
122
+
123
+ ```bash
124
+ uv build --clear --python python3.13
125
+ python3.13 scripts/check_wheel.py dist
126
+ ```
127
+
128
+ Unter Windows kann für beide Befehle `python` verwendet werden, wenn der gewünschte Interpreter im `PATH` steht. Der Build verwendet eine isolierte Build-Umgebung; die Wheel-Prüfung benötigt weder eine editierbare Installation noch provisionierte Arena-Basen. Build und Installation können Netzwerkzugriff benötigen. Die vollständige Repository-Testsuite verwendet dagegen die Versionen aus `uv.lock` und das Extra `dev` wie oben beschrieben.
129
+
130
+ ---
131
+
132
+ ## Example-Based Testing (EBT)
133
+
134
+ Ein `WorldState` ist ein veränderlicher Datensatz für konkrete Eingaben oder ein erwartetes Ergebnismuster. EBT ruft das Target für jeden angegebenen Eingang einmal auf und vergleicht die beobachteten Ergebnisse.
135
+
136
+ Bei mehreren Eingängen gilt dieselbe Liste erlaubter und verbotener Zielmuster für jeden Eingang. Es gibt keine automatische paarweise Zuordnung zwischen `pre[i]` und `post[i]`. Zusammengehörige Ein-/Ausgabepaare benötigen getrennte EBT-Verträge. Eine Liste erlaubter Würfelergebnisse prüft nur die beobachtete Ausgabe; auch ein konstanter Generator kann bestehen. Zufälligkeit und Verteilung werden damit nicht geprüft.
137
+
138
+ Typen, Unions, reguläre Ausdrücke und Prädikate können anstelle fester Rückgabewerte verwendet werden. Die genaue Bedeutung aller Felder und Vergleiche steht in der [verbindlichen Semantikreferenz](./docs/GUIDE_Contract-Semantics.md).
139
+
140
+ ## Datei-Workflows und Arenen
141
+
142
+ `TempFS` führt Targets mit dem Host-Interpreter in einem Kindprozess mit temporärem Arbeitsverzeichnis aus. `PyVenv` verwendet eine kopierte virtuelle Umgebung. Beide Prozesse besitzen weiterhin die Rechte des aufrufenden Benutzers und bieten **keine OS-Sicherheitsgrenze**. Sie eignen sich für vertrauenswürdigen Code. `DockerArena` und `VmArena` sind [Entwürfe](./docs/feature-drafts/virtualization/README.md) und gehören nicht zur öffentlichen API.
143
+
144
+ Die Hydrierung von `pre.fs` begrenzt Schreibziele auf den Workspace und weist
145
+ absolute Ziele, Pfadausbrüche und nach außen führende Links mit `ValueError` ab.
146
+ Hostquellen, Konfigurationen, Targets und Rückgaben müssen dennoch vertrauenswürdig
147
+ sein. Die [Pfadprüfung](./docs/GUIDE_Arena-Management.md#pfadgrenzen-der-hydrierung)
148
+ ersetzt keine Sicherheitsgrenze für nicht vertrauenswürdigen Code.
149
+
150
+ Ein vollständiges Beispiel für eine Dateitransformation steht im [EBT-Nutzungshandbuch](./docs/GUIDE_EBT-Usage-Pattern.md). Für `fs`-Prüfungen muss eine Arena explizit angegeben werden.
151
+
152
+ ## Review-Based Testing (RBT)
153
+
154
+ RBT übergibt eine Zielbezeichnung und eine Prüfregel an einen Reviewer. Es führt das Target nicht aus und liest eine als String übergebene Quelldatei nicht automatisch ein. Standardmäßig wartet `HeadlessReviewer` am Terminal auf eine Entscheidung; interaktive pytest-Läufe benötigen `-s`.
155
+
156
+ ```python
157
+ from qb_cubie.rbt import RBT
158
+
159
+
160
+ def test_logging_review():
161
+ RBT(
162
+ target="auth_module.py",
163
+ check="Prüfe die Datei: Werden Passwörter im Klartext geloggt?",
164
+ ).run()
165
+ ```
166
+
167
+ Die Datei muss vom Reviewer selbst geöffnet und beurteilt werden. Ein positives Review bleibt eine Beurteilung unter den jeweiligen Bedingungen. Eigene automatisierte Reviewer lassen sich injizieren; ein fertiger LLM-Adapter wird nicht mitgeliefert.
168
+
169
+ Speichere das Beispiel als `test_logging_review.py` und starte es mit freigegebener Terminaleingabe:
170
+
171
+ ```bash
172
+ .venv/bin/python -m pytest -q -s test_logging_review.py
173
+ ```
174
+
175
+ Antworte nach der Prüfung mit `y` oder `n` und gib optional einen Bericht ein. Eine Ablehnung lässt den Test fehlschlagen.
176
+
177
+ Die Python-Beispiele dieser README werden direkt aus den Codeblöcken gelesen und mit pytest ausgeführt. Die Prüfung benötigt keine Arena-Basen und lässt sich separat starten:
178
+
179
+ ```bash
180
+ .venv/bin/python -m pytest -q tests/test_readme_examples.py
181
+ ```
182
+
183
+ Dabei wird die Terminaleingabe für das RBT-Beispiel vorgegeben. Gegenproben mit einer fehlerhaften Steuerberechnung und einem abgelehnten Review müssen fehlschlagen; so wird auch abgesichert, dass die Beispiele tatsächlich `.run()` ausführen und Fehler an pytest melden.
184
+
185
+ ## Bekannte Einschränkungen
186
+
187
+ Das [Gutachten vom 10. November 2026](./GUTACHTEN.md) dokumentiert den damaligen Stand. Die Punkte B1–B5 aus Abschnitt 9.1 sind inzwischen durch Produktivkorrekturen und [Regressionstests](tests/docs_tmp/CONTRACT_CASES_9_1.md) abgesichert: EBT bewertet den kopierten Vertragsstand, Phantom-Aufrufe scheitern ausdrücklich, die Linter prüfen Status und Ausgabe, und jeder grafische Review beginnt ohne Entscheidung. Abschnitt 9.2 ergänzt den Kernbetrieb ohne Tk, aktuelle Dateivergleiche und einen geprüften Unterstützungsumfang für kopierte Konsolenskripte. Weiterhin gelten:
188
+
189
+ - **Prädikate und externe Daten:** Erwartungsobjekte müssen tief kopierbar sein. Funktionen behalten ihre Referenzen auf Closures, globale Variablen und externe Ressourcen; deren Zustand wird nicht eingefroren. Referenzdateien werden ebenfalls nicht archiviert.
190
+ - **PyVenv-Importhilfen:** `decontams` ersetzt nur ausdrücklich gewählte Module. Ohne installiertes pytest unterstützt eine begrenzte Importhilfe dessen Testdeklarationen; relevante Laufzeitaufrufe benötigen die echte Bibliothek. Die Importbedingungen bleiben Teil des Testvertrags.
191
+ - **Grafischer Reviewer:** Nur der Start der GUI benötigt `tkinter` und eine grafische Umgebung. Ohne Tk bleiben Paketimport, EBT und Headless-RBT verfügbar; der GUI-Aufruf gibt einen Installationshinweis.
192
+ - **Kopierte Umgebungen:** Übliche POSIX-Python-Einstiegsskripte werden auf den Klon angepasst. Nicht unterstützte Launcher werden vor Target-Ausführung abgelehnt; insbesondere sind zusätzliche native Windows-`.exe`-Launcher ausgeschlossen. Beliebige absolute Paket- oder Anwendungspfade werden nicht umgeschrieben. Den unterstützten Umfang beschreibt das [Arena-Handbuch](./docs/GUIDE_Arena-Management.md#pyvenv-kopierte-virtuelle-umgebung).
193
+ - **Dateivergleich:** Inhalte werden bei jedem Vergleich ohne persistenten Vergleichscache neu gelesen. Gleichzeitig laufende Schreibzugriffe ergeben weiterhin keine atomare Momentaufnahme.
194
+
195
+ Leere Zustandslisten werden inzwischen abgelehnt; aufeinanderfolgende `.run()`-Aufrufe setzen die EBT-Laufdaten zurück. Das setzt weder Target-Seiteneffekte noch bereits veränderte Argumente zurück. `WorldState(returns=None)` erwartet ausdrücklich `None`; ohne `returns` oder mit `returns=qb_cubie.UNSPECIFIED` bleibt die Rückgabe ungeprüft. Mehrere Eingänge teilen dieselbe Zielmenge; korrelierte Ein-/Ausgabepaare benötigen getrennte Verträge. Ein `JsonReporter` persistiert Ergebnisse, erhebt aber selbst keine fachliche Assertion. Die genaue Vertragsbedeutung steht in der [Semantikreferenz](./docs/GUIDE_Contract-Semantics.md).
196
+
197
+ Die vollständige Repository-Testsuite ist in der CI für Linux vorgesehen; macOS und Windows erhalten begrenzte Wheel-Prüfungen, einschließlich fehlendem Tk und echten absoluten MyPy-Dateipfaden. Die zuvor nicht regulär eingesammelten 14 Fälle gehören jetzt zur Standardsammlung. Umsetzung, Ausgangsbefunde und Abnahme von Abschnitt 9.2 stehen in den [Vertragsfällen](tests/docs_tmp/CONTRACT_CASES_9_2.md).
198
+
199
+ ---
200
+
201
+ ---
202
+
203
+ <center>
204
+
205
+ ![Error while trying to load the image](./docs/.assets/cubie-small.png)
206
+
207
+ ## Dokumentation
208
+
209
+ [Dokumentationsübersicht und Einordnung der Ablagen](docs/README.md)
210
+
211
+ [↦ | Qualitätssicherung: Begriffe und Aussagegrenzen | ↤](./docs/GUIDE_Quality-Assurance.md)
212
+ [↦ | Vertragssemantik: zentrale Referenz | ↤](./docs/GUIDE_Contract-Semantics.md)
213
+ [↦ | EBT: Auswahl von Beispielen | ↤](./docs/GUIDE_Example-Based-Testing.md)
214
+ [↦ | EBT: ausführbare Nutzungsmuster | ↤](./docs/GUIDE_EBT-Usage-Pattern.md)
215
+ [↦ | RBT: Reviewer und Nutzung | ↤](./docs/GUIDE_RBT-Usage-Pattern.md)
216
+ [↦ | Arena-Management | ↤](./docs/GUIDE_Arena-Management.md)
217
+ [↦ | Linter | ↤](./docs/GUIDE_Linter.md)
218
+
219
+ [↦ | Experimentelle Benchmarks außerhalb des Core | ↤](./docs/GUIDE_Benchmarks.md)
220
+ [↦ | Entwicklerübersicht EBT | ↤](./docs/dev/DEV-GUIDE_2-0_EXAMPLE-BASED-TESTING.md)
221
+
222
+ </center>
@@ -0,0 +1 @@
1
+ """Provide reusable adapter services without starting processes or loading models."""
@@ -0,0 +1,89 @@
1
+ """Track episode deadlines, independent internal call limits and per-phase token usage."""
2
+
3
+ import math
4
+ import time
5
+
6
+ from .errors import AdapterError, infrastructure
7
+ from .jsonio import token_count
8
+
9
+
10
+ class BudgetLedger:
11
+ """Keep one conservative episode clock across all phases and repair attempts."""
12
+
13
+ _input: int | None
14
+ _output: int | None
15
+
16
+ def __init__(self, *, wall_time_seconds, max_model_calls, max_tool_calls,
17
+ reserve_seconds, clock=time.monotonic):
18
+ _duration(wall_time_seconds, "wall time", positive=True)
19
+ _duration(reserve_seconds, "runner reserve")
20
+ self._limits = {"model": _limit(max_model_calls), "tool": _limit(max_tool_calls)}
21
+ self._calls = {"model": 0, "tool": 0}
22
+ self._clock = clock
23
+ self._started = _duration(clock(), "clock origin", signed=True)
24
+ self._last = self._started
25
+ self._duration, self._reserve = wall_time_seconds, reserve_seconds
26
+ self.begin_phase()
27
+
28
+ def claim_model(self):
29
+ """Reserve one model invocation and return its remaining time allowance."""
30
+ return self._claim("model")
31
+
32
+ def claim_tool(self):
33
+ """Reserve one local tool invocation and return its remaining time allowance."""
34
+ return self._claim("tool")
35
+
36
+ def record_usage(self, *, input_tokens, output_tokens):
37
+ """Accumulate observed tokens without converting unknown measurements to zero."""
38
+ incoming = token_count(input_tokens)
39
+ outgoing = token_count(output_tokens)
40
+ self._input = _sum(self._input, incoming)
41
+ self._output = _sum(self._output, outgoing)
42
+
43
+ def usage(self):
44
+ """Return an independent snapshot of measured phase usage and unknown cost."""
45
+ return {"input_tokens": self._input, "output_tokens": self._output, "cost": None}
46
+
47
+ def begin_phase(self):
48
+ """Reset only phase usage while preserving episode counters and deadline."""
49
+ self._input, self._output = 0, 0
50
+
51
+ def remaining(self):
52
+ """Check the episode deadline without consuming an internal call."""
53
+ now = _duration(self._clock(), "episode clock", signed=True)
54
+ if now < self._last:
55
+ raise infrastructure("Episode clock must be monotonic")
56
+ self._last = now
57
+ remaining = self._duration - (now - self._started) - self._reserve
58
+ if remaining <= 0:
59
+ raise AdapterError("budget_exceeded", "Episode time budget exhausted; runner reserve reached")
60
+ return remaining
61
+
62
+ def _claim(self, kind):
63
+ """Check both remaining episode time and the selected internal call limit."""
64
+ remaining = self.remaining()
65
+ if self._calls[kind] >= self._limits[kind]:
66
+ raise AdapterError("budget_exceeded", f"Internal {kind} call budget limit reached")
67
+ self._calls[kind] += 1
68
+ return remaining
69
+
70
+
71
+ def _duration(value, name, *, positive=False, signed=False):
72
+ """Validate finite duration and clock configuration without boolean coercion."""
73
+ if type(value) not in (int, float) or not math.isfinite(value):
74
+ raise infrastructure(f"Invalid {name}: a finite number is required")
75
+ if not signed and (value < 0 or (positive and value == 0)):
76
+ raise infrastructure(f"Invalid {name}: {'positive' if positive else 'nonnegative'} value required")
77
+ return value
78
+
79
+
80
+ def _limit(value):
81
+ """Validate a nonnegative integer internal call limit."""
82
+ if type(value) is not int or value < 0:
83
+ raise infrastructure("Internal call limit must be a nonnegative integer")
84
+ return value
85
+
86
+
87
+ def _sum(previous, current):
88
+ """Keep an aggregate unknown after any unknown component observation."""
89
+ return None if previous is None or current is None else previous + current