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.
- qb_cubie-0.0.3/LICENSE +21 -0
- qb_cubie-0.0.3/MANIFEST.in +11 -0
- qb_cubie-0.0.3/PKG-INFO +252 -0
- qb_cubie-0.0.3/README.md +222 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/__init__.py +1 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/budget.py +89 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/client.py +129 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/context.py +51 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/__init__.py +5 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/adapter.py +238 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/process.py +105 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/repair.py +183 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/schema.py +87 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/sources.py +99 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/developer/tools.py +57 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/errors.py +21 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/evidence.py +124 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/jsonio.py +68 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/paths.py +60 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/__init__.py +5 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/__main__.py +29 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/freeze.py +63 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/live.py +119 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/observations.py +86 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/pilot/validation.py +100 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/__init__.py +5 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/adapter.py +165 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/process.py +91 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/request.py +34 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/schema.py +50 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/sources.py +130 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/reviewer/tools.py +87 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/schema.py +181 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/transaction.py +111 -0
- qb_cubie-0.0.3/experiments/ollama-agents/ollama_agents/workspace.py +83 -0
- qb_cubie-0.0.3/pyproject.toml +68 -0
- qb_cubie-0.0.3/scripts/check_wheel.py +88 -0
- qb_cubie-0.0.3/setup.cfg +4 -0
- qb_cubie-0.0.3/src/qb_cubie/__init__.py +56 -0
- qb_cubie-0.0.3/src/qb_cubie/_execution.py +70 -0
- qb_cubie-0.0.3/src/qb_cubie/_files.py +14 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/__init__.py +30 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/_hydration.py +125 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/_process.py +179 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/_relocation.py +99 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/_requirements.py +173 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/_tempfs_runner.py +49 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/arena_envs/__init__.py +5 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/codecs.py +335 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/phantom_hook.py +117 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/pyvenv.py +379 -0
- qb_cubie-0.0.3/src/qb_cubie/arenas/tempfs.py +160 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/__init__.py +58 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/_cli_commands.py +91 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/_cli_parser.py +60 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/_transport.py +156 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/fake.py +102 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/process.py +75 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/adapters/provenance.py +28 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/cli.py +98 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/_validation.py +166 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/admission.py +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/catalogs.py +40 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/packages.py +116 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/protocols.py +153 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/references.py +122 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/contracts/validation.py +112 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/GUIDE_Benchmarks.md +1469 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/GUIDE_Ollama-Agents.md +122 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/README.md +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/dataset.json +294 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/package.json +46 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/acceptance.py.txt +47 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/missing-manifest.py.txt +23 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/round-down.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/wrong-filter.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/mutants/wrong-return.py.txt +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/pytest_agent_test.py.txt +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/reference.json +40 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/evaluator/solution.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/scenario.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/visible/invoice_export.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-diagnosis/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/acceptance.py.txt +47 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/missing-manifest.py.txt +23 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/round-down.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/wrong-filter.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/mutants/wrong-return.py.txt +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/pytest_agent_test.py.txt +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/reference.json +44 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/evaluator/solution.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/scenario.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/visible/invoice_export.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-initial/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/acceptance.py.txt +47 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/missing-manifest.py.txt +23 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/round-down.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/wrong-filter.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/mutants/wrong-return.py.txt +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/pytest_agent_test.py.txt +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/reference.json +40 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/evaluator/solution.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/scenario.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/visible/invoice_export.py.txt +24 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/billing-export-maintenance/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/acceptance.py.txt +45 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/agent_test.py.txt +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/extra-file.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/missing-file.py.txt +13 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/wrong-priority.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/mutants/wrong-return.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/pytest_agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/reference.json +37 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/evaluator/solution.py.txt +13 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/scenario.json +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/visible/config_bundle.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-diagnosis/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/acceptance.py.txt +45 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/agent_test.py.txt +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/extra-file.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/missing-file.py.txt +13 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/wrong-priority.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/mutants/wrong-return.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/pytest_agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/reference.json +41 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/evaluator/solution.py.txt +13 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/scenario.json +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/visible/config_bundle.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-initial/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/acceptance.py.txt +58 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/agent_test.py.txt +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/extra-file.py.txt +18 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/ignored-schema.py.txt +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/missing-file.py.txt +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/wrong-priority.py.txt +18 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/mutants/wrong-return.py.txt +18 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/pytest_agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/reference.json +43 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/evaluator/solution.py.txt +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/scenario.json +31 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/visible/config_bundle.py.txt +13 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/configuration-package-maintenance/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/acceptance.py.txt +49 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/agent_test.py.txt +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/corrupt-copy.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/extra-file.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/missing-copy.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/reverse-index.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/mutants/wrong-return.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/pytest_agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/reference.json +42 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/evaluator/solution.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/scenario.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/visible/document_catalog.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-diagnosis/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/acceptance.py.txt +49 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/agent_test.py.txt +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/corrupt-copy.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/extra-file.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/missing-copy.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/reverse-index.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/mutants/wrong-return.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/pytest_agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/reference.json +46 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/evaluator/solution.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/scenario.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/visible/document_catalog.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-initial/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/acceptance.py.txt +49 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/agent_test.py.txt +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/corrupt-copy.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/extra-file.py.txt +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/missing-copy.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/reverse-index.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/mutants/wrong-return.py.txt +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/pytest_agent_test.py.txt +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/reference.json +42 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/evaluator/solution.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/scenario.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/visible/document_catalog.py.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/document-index-maintenance/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/acceptance.py.txt +12 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/agent_test.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/float-total.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/no-discount.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/wrong-filter.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/mutants/wrong-return.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/pytest_agent_test.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/reference.json +36 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/evaluator/solution.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/scenario.json +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/visible/net_amount.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-diagnosis/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/acceptance.py.txt +12 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/agent_test.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/float-total.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/no-discount.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/wrong-filter.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/mutants/wrong-return.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/pytest_agent_test.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/reference.json +40 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/evaluator/solution.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/scenario.json +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/visible/net_amount.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-initial/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/acceptance.py.txt +12 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/agent_test.py.txt +16 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/float-total.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/no-discount.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/wrong-filter.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/mutants/wrong-return.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/pytest_agent_test.py.txt +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/reference.json +36 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/evaluator/solution.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/scenario.json +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/visible/README.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/visible/net_amount.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/pure-calculation-maintenance/visible/pyproject.toml +11 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/evaluator/acceptance.py.txt +6 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/evaluator/reference.json +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-correct/visible/reservation.py.txt +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/evaluator/acceptance.py.txt +6 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/evaluator/reference.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-reservation-faulty/visible/reservation.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/evaluator/reference.json +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/visible/stock_policy.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-correct/visible/warehouse.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/evaluator/reference.json +37 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/visible/stock_policy.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-correctness-warehouse-faulty/visible/warehouse.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/evaluator/acceptance.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/evaluator/reference.json +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-correct/visible/parser.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/evaluator/acceptance.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/evaluator/reference.json +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-json-errors-faulty/visible/parser.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/evaluator/acceptance.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/evaluator/reference.json +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/visible/scanner.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-correct/visible/tool.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/evaluator/acceptance.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/evaluator/reference.json +31 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/visible/scanner.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-error_handling-scanner-failure-faulty/visible/tool.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/evaluator/acceptance.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/evaluator/reference.json +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/visible/delivery.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-correct/visible/layout.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/evaluator/acceptance.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/evaluator/reference.json +37 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/visible/delivery.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-binary-delivery-faulty/visible/layout.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/evaluator/acceptance.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/evaluator/reference.json +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-correct/visible/report.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/evaluator/acceptance.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/evaluator/reference.json +26 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-file_workflow-source-preservation-faulty/visible/report.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/evaluator/reference.json +14 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/visible/formats.py.txt +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-correct/visible/render.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/evaluator/reference.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/visible/formats.py.txt +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-format-registry-faulty/visible/render.py.txt +8 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/evaluator/reference.json +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/visible/invoice.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/visible/quote.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-correct/visible/rates.py.txt +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/evaluator/reference.json +30 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/visible/invoice.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-maintainability-service-policy-faulty/visible/quote.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/evaluator/acceptance.py.txt +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/evaluator/reference.json +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/visible/job.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-correct/visible/snapshot.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/evaluator/acceptance.py.txt +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/evaluator/reference.json +40 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/visible/job.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-frozen-settings-faulty/visible/snapshot.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/evaluator/reference.json +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-correct/visible/memo.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/evaluator/reference.json +39 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-state_lifecycle-memo-key-faulty/visible/memo.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/evaluator/reference.json +15 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/visible/checks.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-correct/visible/samples.py.txt +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/evaluator/reference.json +31 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/task.md +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/visible/checks.py.txt +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-mutation-probe-faulty/visible/samples.py.txt +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/evaluator/acceptance.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/evaluator/reference.json +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-correct/task.md +5 -0
- 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
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/evaluator/acceptance.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/evaluator/reference.json +29 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/base/scenarios/review-test_quality-paired-expectations-faulty/task.md +5 -0
- 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
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/agents/jsonl_agent.py.txt +115 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/package.json +12 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/agent_test.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/reference.json +21 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/solution.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/evaluator/wrong.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/task.md +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/fee-initial/visible/shipping.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/evaluator/reference.json +23 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/task.md +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-boundary/visible/shipping.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/evaluator/reference.json +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/scenario.json +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/task.md +4 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/shipping/scenarios/review-correct/visible/shipping.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/package.json +12 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/acceptance.py.txt +47 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/agent_test.py.txt +22 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/corrupt-copy.py.txt +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/extra-file.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/missing-copy.py.txt +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/reverse-sort.py.txt +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/mutants/wrong-return.py.txt +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/pytest_agent_test.py.txt +17 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/reference.json +41 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/evaluator/solution.py.txt +9 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/scenario.json +25 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/task.md +7 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/index-initial/visible/indexer.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/evaluator/reference.json +10 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/scenario.json +18 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/task.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/visible/balance.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-correct/visible/policy.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/evaluator/reference.json +31 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/scenario.json +18 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/task.md +3 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/visible/balance.py.txt +5 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/data/smoke/scenarios/review-paid-faulty/visible/policy.py.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_episode.py +124 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_external.py +166 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_inputs.py +220 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_messages.py +32 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_process.py +75 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_project.py +69 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_pytest.py +120 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/_review.py +46 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/execution/evaluators.py +108 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/_adapters.py +68 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/_bundle.py +69 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/_toml.py +20 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/frozen.py +107 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/measurement/provenance.py +57 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/_planning.py +179 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/gates.py +44 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/order.py +37 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/pairs.py +38 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/planner.py +56 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/planning/selection.py +74 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/pytest_plugin.py +55 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_files.py +65 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_pilot_integrity.py +42 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_pilot_stats.py +99 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/_pilot_text.py +19 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/adjudication.py +123 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/archives.py +93 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/comparison.py +99 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/gates.py +75 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/pilot.py +106 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/reporting/results.py +76 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/runner.py +51 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/base.py +20 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/custom.py +109 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/ollama.py +139 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/scaffolding/templates.py +62 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/__init__.py +1 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/_common.py +159 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/admission.py +121 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/agent.py +92 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/evaluation.py +113 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/importer.py +436 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/runtime.py +178 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/source.py +195 -0
- qb_cubie-0.0.3/src/qb_cubie/benchmarks/swebench/validation.py +183 -0
- qb_cubie-0.0.3/src/qb_cubie/ebt.py +675 -0
- qb_cubie-0.0.3/src/qb_cubie/linter.py +252 -0
- qb_cubie-0.0.3/src/qb_cubie/linters/__init__.py +7 -0
- qb_cubie-0.0.3/src/qb_cubie/linters/mypy.py +97 -0
- qb_cubie-0.0.3/src/qb_cubie/linters/pylint.py +107 -0
- qb_cubie-0.0.3/src/qb_cubie/multiprocessors.py +450 -0
- qb_cubie-0.0.3/src/qb_cubie/protocols.py +223 -0
- qb_cubie-0.0.3/src/qb_cubie/rbt.py +192 -0
- qb_cubie-0.0.3/src/qb_cubie/reporter.py +362 -0
- qb_cubie-0.0.3/src/qb_cubie.egg-info/PKG-INFO +252 -0
- qb_cubie-0.0.3/src/qb_cubie.egg-info/SOURCES.txt +518 -0
- qb_cubie-0.0.3/src/qb_cubie.egg-info/dependency_links.txt +1 -0
- qb_cubie-0.0.3/src/qb_cubie.egg-info/entry_points.txt +2 -0
- qb_cubie-0.0.3/src/qb_cubie.egg-info/requires.txt +15 -0
- qb_cubie-0.0.3/src/qb_cubie.egg-info/top_level.txt +2 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/README.md +37 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/agents/jsonl_agent.py.txt +115 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/package.json +12 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/acceptance.py.txt +7 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/agent_test.py.txt +10 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/reference.json +21 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/solution.py.txt +2 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/evaluator/wrong.py.txt +2 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/scenario.json +25 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/task.md +4 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/fee-initial/visible/shipping.py.txt +2 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/evaluator/reference.json +23 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/scenario.json +25 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/task.md +4 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-boundary/visible/shipping.py +2 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/evaluator/reference.json +9 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/scenario.json +17 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/task.md +4 -0
- qb_cubie-0.0.3/tests/benchmarks/fixtures/phase3/scenarios/review-correct/visible/shipping.py +2 -0
- qb_cubie-0.0.3/tests/test_core_without_tk.py +25 -0
- qb_cubie-0.0.3/tests/test_default_collection_contract.py +59 -0
- qb_cubie-0.0.3/tests/test_headless_reviewer.py +228 -0
- qb_cubie-0.0.3/tests/test_human_reviewer_fresh_decision.py +139 -0
- qb_cubie-0.0.3/tests/test_lint.py +70 -0
- qb_cubie-0.0.3/tests/test_offline_core.py +320 -0
- qb_cubie-0.0.3/tests/test_rbt_demo.py +6 -0
- qb_cubie-0.0.3/tests/test_rbt_reporter.py +156 -0
- qb_cubie-0.0.3/tests/test_readme_examples.py +101 -0
- qb_cubie-0.0.3/tests/test_styleguide.py +104 -0
- qb_cubie-0.0.3/tests/wheel/benchmark_base_installed.py +79 -0
- qb_cubie-0.0.3/tests/wheel/benchmark_custom_installed.py +100 -0
- qb_cubie-0.0.3/tests/wheel/benchmark_installed.py +130 -0
- qb_cubie-0.0.3/tests/wheel/benchmark_measurement_installed.py +86 -0
- qb_cubie-0.0.3/tests/wheel/ollama_agents_installed.py +221 -0
- qb_cubie-0.0.3/tests/wheel/smoke_installed.py +150 -0
- 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
|
qb_cubie-0.0.3/PKG-INFO
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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>
|
qb_cubie-0.0.3/README.md
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
<center>
|
|
2
|
+
|
|
3
|
+
# qb-cubie: Quality-Bench
|
|
4
|
+
|
|
5
|
+

|
|
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
|
+

|
|
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
|