bytedigger-engine 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. bytedigger_engine-0.1.0/LICENSE +21 -0
  2. bytedigger_engine-0.1.0/PKG-INFO +186 -0
  3. bytedigger_engine-0.1.0/README.md +137 -0
  4. bytedigger_engine-0.1.0/ac_dsl.py +552 -0
  5. bytedigger_engine-0.1.0/audit_gate.py +237 -0
  6. bytedigger_engine-0.1.0/bytedigger_engine.egg-info/PKG-INFO +186 -0
  7. bytedigger_engine-0.1.0/bytedigger_engine.egg-info/SOURCES.txt +474 -0
  8. bytedigger_engine-0.1.0/bytedigger_engine.egg-info/dependency_links.txt +1 -0
  9. bytedigger_engine-0.1.0/bytedigger_engine.egg-info/entry_points.txt +2 -0
  10. bytedigger_engine-0.1.0/bytedigger_engine.egg-info/requires.txt +15 -0
  11. bytedigger_engine-0.1.0/bytedigger_engine.egg-info/top_level.txt +46 -0
  12. bytedigger_engine-0.1.0/config_provider.py +225 -0
  13. bytedigger_engine-0.1.0/contracts.py +672 -0
  14. bytedigger_engine-0.1.0/corpus_extract.py +122 -0
  15. bytedigger_engine-0.1.0/derive_state.py +303 -0
  16. bytedigger_engine-0.1.0/engine.py +1042 -0
  17. bytedigger_engine-0.1.0/error_codes.py +300 -0
  18. bytedigger_engine-0.1.0/error_locus.py +126 -0
  19. bytedigger_engine-0.1.0/event_log.py +151 -0
  20. bytedigger_engine-0.1.0/event_sink.py +87 -0
  21. bytedigger_engine-0.1.0/execution_provenance.py +50 -0
  22. bytedigger_engine-0.1.0/findings_sidecar.py +43 -0
  23. bytedigger_engine-0.1.0/flags_catalog.py +552 -0
  24. bytedigger_engine-0.1.0/forbidden_import.py +93 -0
  25. bytedigger_engine-0.1.0/format_conversion_cases.py +65 -0
  26. bytedigger_engine-0.1.0/helper_extraction.py +94 -0
  27. bytedigger_engine-0.1.0/io_utils.py +16 -0
  28. bytedigger_engine-0.1.0/lib/__init__.py +0 -0
  29. bytedigger_engine-0.1.0/lib/authored_boundary.py +225 -0
  30. bytedigger_engine-0.1.0/lib/bounded_spawn.py +41 -0
  31. bytedigger_engine-0.1.0/lib/constitution_loader.py +211 -0
  32. bytedigger_engine-0.1.0/lib/cost_rollup.py +105 -0
  33. bytedigger_engine-0.1.0/lib/dbos_list_runs.py +81 -0
  34. bytedigger_engine-0.1.0/lib/dbos_setup.py +428 -0
  35. bytedigger_engine-0.1.0/lib/dbos_status_run.py +76 -0
  36. bytedigger_engine-0.1.0/lib/directed_repair.py +626 -0
  37. bytedigger_engine-0.1.0/lib/env_limit.py +36 -0
  38. bytedigger_engine-0.1.0/lib/git_cwd.py +71 -0
  39. bytedigger_engine-0.1.0/lib/git_port.py +210 -0
  40. bytedigger_engine-0.1.0/lib/git_write_port.py +96 -0
  41. bytedigger_engine-0.1.0/lib/llm_provider.py +145 -0
  42. bytedigger_engine-0.1.0/lib/model_config.py +193 -0
  43. bytedigger_engine-0.1.0/lib/mypy_baseline.py +88 -0
  44. bytedigger_engine-0.1.0/lib/observability/emit_resolver.py +40 -0
  45. bytedigger_engine-0.1.0/lib/phase_sentinel.py +326 -0
  46. bytedigger_engine-0.1.0/lib/plugins/__init__.py +0 -0
  47. bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/__init__.py +1 -0
  48. bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/config.yaml +31 -0
  49. bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/helper.py +607 -0
  50. bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/producer_prompt_fragment.md +15 -0
  51. bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/prompt_fragment.md +21 -0
  52. bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/semantic_verifier.py +589 -0
  53. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/__init__.py +27 -0
  54. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/delta_retry_prompt.py +51 -0
  55. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/delta_reviewer_prompt.py +165 -0
  56. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/findings_extractor.py +150 -0
  57. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/impl_delta_retry_prompt.py +57 -0
  58. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/restricted_reviewer_prompt.py +58 -0
  59. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/restricted_writer_prompt.py +66 -0
  60. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/surgical_revise.py +157 -0
  61. bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/verdict_parser.py +85 -0
  62. bytedigger_engine-0.1.0/lib/plugins/disk_truth/__init__.py +20 -0
  63. bytedigger_engine-0.1.0/lib/plugins/disk_truth/git_diff.py +190 -0
  64. bytedigger_engine-0.1.0/lib/plugins/disk_truth/schema.py +152 -0
  65. bytedigger_engine-0.1.0/lib/plugins/disk_truth/suite_boyscout.py +189 -0
  66. bytedigger_engine-0.1.0/lib/plugins/disk_truth/test_runner.py +256 -0
  67. bytedigger_engine-0.1.0/lib/plugins/disk_truth/verdict_parser.py +77 -0
  68. bytedigger_engine-0.1.0/lib/plugins/review_schema/__init__.py +16 -0
  69. bytedigger_engine-0.1.0/lib/plugins/review_schema/canonical.py +89 -0
  70. bytedigger_engine-0.1.0/lib/project_root.py +103 -0
  71. bytedigger_engine-0.1.0/lib/recoverable_gate.py +134 -0
  72. bytedigger_engine-0.1.0/lib/reference_backends/__init__.py +6 -0
  73. bytedigger_engine-0.1.0/lib/reference_backends/agent_sdk.py +292 -0
  74. bytedigger_engine-0.1.0/lib/reference_backends/anthropic_api.py +299 -0
  75. bytedigger_engine-0.1.0/lib/reference_backends/anthropic_oauth.py +126 -0
  76. bytedigger_engine-0.1.0/lib/reference_backends/pydantic_anthropic.py +295 -0
  77. bytedigger_engine-0.1.0/lib/reference_backends/pydantic_openai.py +737 -0
  78. bytedigger_engine-0.1.0/lib/restart_governor.py +314 -0
  79. bytedigger_engine-0.1.0/lib/resume_keying.py +33 -0
  80. bytedigger_engine-0.1.0/lib/revise_counter.py +78 -0
  81. bytedigger_engine-0.1.0/lib/run_allowlist.py +417 -0
  82. bytedigger_engine-0.1.0/lib/spec_defect_ledger.py +178 -0
  83. bytedigger_engine-0.1.0/lib/spec_retry_cycle.py +119 -0
  84. bytedigger_engine-0.1.0/lib/step_sentinel.py +182 -0
  85. bytedigger_engine-0.1.0/lib/timeout_policy.py +198 -0
  86. bytedigger_engine-0.1.0/lib/util/__init__.py +0 -0
  87. bytedigger_engine-0.1.0/lib/util/path_classifier.py +44 -0
  88. bytedigger_engine-0.1.0/lib/verdict_parse.py +175 -0
  89. bytedigger_engine-0.1.0/lib/verdict_resolution.py +52 -0
  90. bytedigger_engine-0.1.0/lib/worktree_root.py +24 -0
  91. bytedigger_engine-0.1.0/llm_subprocess.py +2694 -0
  92. bytedigger_engine-0.1.0/net_new_delta.py +78 -0
  93. bytedigger_engine-0.1.0/precommit_lints.py +26 -0
  94. bytedigger_engine-0.1.0/presence_triad.py +94 -0
  95. bytedigger_engine-0.1.0/pyproject.toml +100 -0
  96. bytedigger_engine-0.1.0/red_lint_checks.py +69 -0
  97. bytedigger_engine-0.1.0/reentry_ac.py +97 -0
  98. bytedigger_engine-0.1.0/reject_log.py +185 -0
  99. bytedigger_engine-0.1.0/reject_stats.py +73 -0
  100. bytedigger_engine-0.1.0/reproducibility.py +69 -0
  101. bytedigger_engine-0.1.0/resume_key_lint.py +244 -0
  102. bytedigger_engine-0.1.0/run.py +244 -0
  103. bytedigger_engine-0.1.0/scope_inverse.py +35 -0
  104. bytedigger_engine-0.1.0/scripts/__init__.py +0 -0
  105. bytedigger_engine-0.1.0/scripts/red_lint/__init__.py +0 -0
  106. bytedigger_engine-0.1.0/scripts/red_lint/rules.yml +125 -0
  107. bytedigger_engine-0.1.0/security/__init__.py +3 -0
  108. bytedigger_engine-0.1.0/security/except-pass-allowlist.txt +27 -0
  109. bytedigger_engine-0.1.0/security/gitleaks.toml +4 -0
  110. bytedigger_engine-0.1.0/security/secure-codegen-fragment.md +8 -0
  111. bytedigger_engine-0.1.0/security/secure-codegen-rules.md +62 -0
  112. bytedigger_engine-0.1.0/security/security_lint.py +254 -0
  113. bytedigger_engine-0.1.0/security/semgrep-rules.yml +191 -0
  114. bytedigger_engine-0.1.0/setup.cfg +4 -0
  115. bytedigger_engine-0.1.0/skip_logic.py +221 -0
  116. bytedigger_engine-0.1.0/spec_cite.py +459 -0
  117. bytedigger_engine-0.1.0/spec_class.py +49 -0
  118. bytedigger_engine-0.1.0/spec_coverage.py +272 -0
  119. bytedigger_engine-0.1.0/stub_passability.py +193 -0
  120. bytedigger_engine-0.1.0/suite_safety.py +73 -0
  121. bytedigger_engine-0.1.0/telemetry_ctx.py +89 -0
  122. bytedigger_engine-0.1.0/tests/test_0015E696_git_read_port.py +416 -0
  123. bytedigger_engine-0.1.0/tests/test_02FF48F4_model_pin_insession.py +433 -0
  124. bytedigger_engine-0.1.0/tests/test_090ED35B_integrity_verdict_trailing.py +364 -0
  125. bytedigger_engine-0.1.0/tests/test_13361031_citation_grounding_enforcement.py +423 -0
  126. bytedigger_engine-0.1.0/tests/test_14B76A6C_test_runner_seam.py +346 -0
  127. bytedigger_engine-0.1.0/tests/test_25e75663_llm_semantic_params.py +705 -0
  128. bytedigger_engine-0.1.0/tests/test_261_PH56SPLIT_stage0_common.py +282 -0
  129. bytedigger_engine-0.1.0/tests/test_291189a0_phase6_step_factory.py +143 -0
  130. bytedigger_engine-0.1.0/tests/test_2FDA949D_model_pin_warn.py +461 -0
  131. bytedigger_engine-0.1.0/tests/test_32ED59E2_effort_lever.py +219 -0
  132. bytedigger_engine-0.1.0/tests/test_360F99CE_phase6_smoke_graceful.py +186 -0
  133. bytedigger_engine-0.1.0/tests/test_3B410663_phase8_write_seam.py +478 -0
  134. bytedigger_engine-0.1.0/tests/test_3E6EBDF4_conftest_envpin.py +151 -0
  135. bytedigger_engine-0.1.0/tests/test_3F13371D_effort_hybrid.py +230 -0
  136. bytedigger_engine-0.1.0/tests/test_3F4B71D4_red_path_fallback_chain.py +526 -0
  137. bytedigger_engine-0.1.0/tests/test_3F5599A6_a2a3_residue.py +507 -0
  138. bytedigger_engine-0.1.0/tests/test_3F5599A6_commit_noop_clean_tree.py +691 -0
  139. bytedigger_engine-0.1.0/tests/test_4238DD14_phase5_validation_bashtest_enum.py +311 -0
  140. bytedigger_engine-0.1.0/tests/test_42E92BE7_green_watchdog_mixin.py +286 -0
  141. bytedigger_engine-0.1.0/tests/test_4961254A_commit_manifest_inversion.py +1093 -0
  142. bytedigger_engine-0.1.0/tests/test_4B50D02B_project_root_git_read.py +251 -0
  143. bytedigger_engine-0.1.0/tests/test_4B9DF7D3_satisfaction_override.py +742 -0
  144. bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1a_backend_selector.py +507 -0
  145. bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1b_in_session.py +718 -0
  146. bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1c_manifest.py +526 -0
  147. bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1d_watchdog_capability.py +675 -0
  148. bytedigger_engine-0.1.0/tests/test_5AC25E83_gitignore_filter_green_fix_commit.py +471 -0
  149. bytedigger_engine-0.1.0/tests/test_5F06E98D_git_write_port.py +408 -0
  150. bytedigger_engine-0.1.0/tests/test_68E964FB_llm_backend_registry.py +485 -0
  151. bytedigger_engine-0.1.0/tests/test_6CAFEB9B_satisfaction_timeout.py +209 -0
  152. bytedigger_engine-0.1.0/tests/test_7C0FDE44_gh639_red_hash_freeze.py +475 -0
  153. bytedigger_engine-0.1.0/tests/test_7C4D70ED_red_executability_check.py +347 -0
  154. bytedigger_engine-0.1.0/tests/test_7CC37589_phantom_revise_capture.py +326 -0
  155. bytedigger_engine-0.1.0/tests/test_7FE193B7_git_read_routing.py +358 -0
  156. bytedigger_engine-0.1.0/tests/test_857C7684_gh690_directed_repair_patch.py +561 -0
  157. bytedigger_engine-0.1.0/tests/test_8C9F758C_suite_boyscout.py +490 -0
  158. bytedigger_engine-0.1.0/tests/test_8D162396_red_loop_reentry_frozen_sha.py +376 -0
  159. bytedigger_engine-0.1.0/tests/test_8F4F8458_audit_gate_git_read.py +209 -0
  160. bytedigger_engine-0.1.0/tests/test_906e37dc_review_findings_audit.py +464 -0
  161. bytedigger_engine-0.1.0/tests/test_9397B99B_suffixmap_git_read_slice3bii.py +235 -0
  162. bytedigger_engine-0.1.0/tests/test_9AB32375_config_provider.py +472 -0
  163. bytedigger_engine-0.1.0/tests/test_9ECBF1F5_stash_capture.py +361 -0
  164. bytedigger_engine-0.1.0/tests/test_9F3A7C21_phase6_pytest_venv_parent_climb.py +365 -0
  165. bytedigger_engine-0.1.0/tests/test_9F74246A_phase8_read_seam.py +299 -0
  166. bytedigger_engine-0.1.0/tests/test_9dd6ae54_integration_class_false_positive.py +103 -0
  167. bytedigger_engine-0.1.0/tests/test_B5719411_gitdiffport.py +452 -0
  168. bytedigger_engine-0.1.0/tests/test_BC45C403_phase6_step_sentinel_resume.py +491 -0
  169. bytedigger_engine-0.1.0/tests/test_BF7890C8_collect_probe_parent_venv.py +406 -0
  170. bytedigger_engine-0.1.0/tests/test_C27F057B_phase8_push_seam.py +176 -0
  171. bytedigger_engine-0.1.0/tests/test_CD3EDB8C_phase6_cite_worktree_root.py +256 -0
  172. bytedigger_engine-0.1.0/tests/test_D5D6A364_git_read_routing_slice2.py +417 -0
  173. bytedigger_engine-0.1.0/tests/test_DB259D22_pricing_load_fail_loud.py +173 -0
  174. bytedigger_engine-0.1.0/tests/test_DC6BD331_git_cwd_single_source.py +302 -0
  175. bytedigger_engine-0.1.0/tests/test_DEA3305C_git_read_routing_slice3b.py +258 -0
  176. bytedigger_engine-0.1.0/tests/test_E843349F_recoverable_policy.py +597 -0
  177. bytedigger_engine-0.1.0/tests/test_E8A5ACAB_phase1_target_repo.py +360 -0
  178. bytedigger_engine-0.1.0/tests/test_EECA708D_reject_reason_capture.py +334 -0
  179. bytedigger_engine-0.1.0/tests/test_EEFD480F_verdict_parse_lib.py +460 -0
  180. bytedigger_engine-0.1.0/tests/test_EEFD480F_waveB_marker_line.py +380 -0
  181. bytedigger_engine-0.1.0/tests/test_F3A8F4FC_phase12_sonnet_downgrade.py +389 -0
  182. bytedigger_engine-0.1.0/tests/test_F53A7F50_explore_target_repo.py +367 -0
  183. bytedigger_engine-0.1.0/tests/test_F7830037_insession_review_normalize.py +501 -0
  184. bytedigger_engine-0.1.0/tests/test_FDDEE42A_run_git_seam.py +165 -0
  185. bytedigger_engine-0.1.0/tests/test_FFEA1913_burn_guard.py +219 -0
  186. bytedigger_engine-0.1.0/tests/test_GH294_constitution_worktree_telemetry.py +344 -0
  187. bytedigger_engine-0.1.0/tests/test_GH374_restart_governor.py +257 -0
  188. bytedigger_engine-0.1.0/tests/test_GH374_step_sentinel_primitive.py +382 -0
  189. bytedigger_engine-0.1.0/tests/test_GH375_tier_model_dispatch.py +676 -0
  190. bytedigger_engine-0.1.0/tests/test_GH439_hard_gate_effort_pin.py +291 -0
  191. bytedigger_engine-0.1.0/tests/test_GH597_model_mix_phase45.py +224 -0
  192. bytedigger_engine-0.1.0/tests/test_GH637_pre_red_persist_order.py +329 -0
  193. bytedigger_engine-0.1.0/tests/test_GH681_cite_prelint_enforce.py +249 -0
  194. bytedigger_engine-0.1.0/tests/test_GH714_collect_probe_rootdir_pinned.py +195 -0
  195. bytedigger_engine-0.1.0/tests/test_GH723_producer_guard_reachability.py +159 -0
  196. bytedigger_engine-0.1.0/tests/test_GH749_ac_parity_single_source.py +227 -0
  197. bytedigger_engine-0.1.0/tests/test_GH781_integrity_verdict_forcing.py +191 -0
  198. bytedigger_engine-0.1.0/tests/test_GH786_integrity_completeness_gate.py +308 -0
  199. bytedigger_engine-0.1.0/tests/test_ab117afa_preserve_events_log.py +167 -0
  200. bytedigger_engine-0.1.0/tests/test_alpha0_BA456198.py +260 -0
  201. bytedigger_engine-0.1.0/tests/test_bounded_spawn.py +201 -0
  202. bytedigger_engine-0.1.0/tests/test_ccbb65dc_straggler_watchdog.py +717 -0
  203. bytedigger_engine-0.1.0/tests/test_checklist_convergence_lib.py +282 -0
  204. bytedigger_engine-0.1.0/tests/test_contracts.py +863 -0
  205. bytedigger_engine-0.1.0/tests/test_ctx_boundary_hardfail.py +497 -0
  206. bytedigger_engine-0.1.0/tests/test_derive_state.py +279 -0
  207. bytedigger_engine-0.1.0/tests/test_disk_truth.py +488 -0
  208. bytedigger_engine-0.1.0/tests/test_e8433b4e_aggregator_partial_floor.py +168 -0
  209. bytedigger_engine-0.1.0/tests/test_engine.py +316 -0
  210. bytedigger_engine-0.1.0/tests/test_engine_B07BC910.py +318 -0
  211. bytedigger_engine-0.1.0/tests/test_engine_W3.py +263 -0
  212. bytedigger_engine-0.1.0/tests/test_engine_W9.py +237 -0
  213. bytedigger_engine-0.1.0/tests/test_engine_path_closure.py +198 -0
  214. bytedigger_engine-0.1.0/tests/test_engine_retry_data_forwarding.py +297 -0
  215. bytedigger_engine-0.1.0/tests/test_error_locus_CCA65EB0.py +351 -0
  216. bytedigger_engine-0.1.0/tests/test_event_log_replay_e2e.py +133 -0
  217. bytedigger_engine-0.1.0/tests/test_event_sink.py +322 -0
  218. bytedigger_engine-0.1.0/tests/test_files_touched.py +186 -0
  219. bytedigger_engine-0.1.0/tests/test_findings_extractor_raw_281c9065.py +230 -0
  220. bytedigger_engine-0.1.0/tests/test_fix_prompt_git_log_cleanup.py +74 -0
  221. bytedigger_engine-0.1.0/tests/test_fix_prompt_language_cleanup.py +64 -0
  222. bytedigger_engine-0.1.0/tests/test_fix_watchdog.py +420 -0
  223. bytedigger_engine-0.1.0/tests/test_forbidden_import_fp_D6B8DF32.py +159 -0
  224. bytedigger_engine-0.1.0/tests/test_frozen_skip_gh531.py +366 -0
  225. bytedigger_engine-0.1.0/tests/test_gh282_pragma_escape.py +303 -0
  226. bytedigger_engine-0.1.0/tests/test_gh282_red_mass_deletion.py +439 -0
  227. bytedigger_engine-0.1.0/tests/test_gh285_c3_timeout_state.py +343 -0
  228. bytedigger_engine-0.1.0/tests/test_gh297_escalate_removal.py +266 -0
  229. bytedigger_engine-0.1.0/tests/test_gh373_authored_boundary.py +519 -0
  230. bytedigger_engine-0.1.0/tests/test_gh379_decorr_verify.py +425 -0
  231. bytedigger_engine-0.1.0/tests/test_gh381_git_cwd_resolver.py +394 -0
  232. bytedigger_engine-0.1.0/tests/test_gh382_repair_fallback_cite_lint.py +466 -0
  233. bytedigger_engine-0.1.0/tests/test_gh386_model_pin_removal.py +174 -0
  234. bytedigger_engine-0.1.0/tests/test_gh388_ac_checklist_satisfaction.py +545 -0
  235. bytedigger_engine-0.1.0/tests/test_gh419_frozen_revise_retry.py +340 -0
  236. bytedigger_engine-0.1.0/tests/test_gh426_fable_model_floor.py +158 -0
  237. bytedigger_engine-0.1.0/tests/test_gh432_ac_checklist_parser_contract.py +461 -0
  238. bytedigger_engine-0.1.0/tests/test_gh436_tamper_whitelist.py +328 -0
  239. bytedigger_engine-0.1.0/tests/test_gh443_delta_retry.py +296 -0
  240. bytedigger_engine-0.1.0/tests/test_gh449_fixcycle_commit.py +522 -0
  241. bytedigger_engine-0.1.0/tests/test_gh451_llm_provider_port.py +272 -0
  242. bytedigger_engine-0.1.0/tests/test_gh452_cost_rollups.py +282 -0
  243. bytedigger_engine-0.1.0/tests/test_gh482_repair_patch_validity.py +462 -0
  244. bytedigger_engine-0.1.0/tests/test_gh484_alarm_thread_safety.py +127 -0
  245. bytedigger_engine-0.1.0/tests/test_gh497_telemetry_hygiene.py +382 -0
  246. bytedigger_engine-0.1.0/tests/test_gh513_spec_authorized_edits.py +143 -0
  247. bytedigger_engine-0.1.0/tests/test_gh514_spend_limit_classify.py +229 -0
  248. bytedigger_engine-0.1.0/tests/test_gh514p1_frozen_review_repoll.py +326 -0
  249. bytedigger_engine-0.1.0/tests/test_gh514p2_phantom_path_filter.py +361 -0
  250. bytedigger_engine-0.1.0/tests/test_gh541_nonfrozen_review_repoll.py +270 -0
  251. bytedigger_engine-0.1.0/tests/test_gh542_collect_probe.py +215 -0
  252. bytedigger_engine-0.1.0/tests/test_gh557_resume_seam_flips.py +301 -0
  253. bytedigger_engine-0.1.0/tests/test_gh569_red_scope_contract.py +369 -0
  254. bytedigger_engine-0.1.0/tests/test_gh576_pause_lane.py +237 -0
  255. bytedigger_engine-0.1.0/tests/test_gh592_surgical_revise.py +429 -0
  256. bytedigger_engine-0.1.0/tests/test_gh594_driver_missing_fail_closed.py +129 -0
  257. bytedigger_engine-0.1.0/tests/test_gh595_red_lint_preflight_batch.py +475 -0
  258. bytedigger_engine-0.1.0/tests/test_gh605_delta_rereview.py +474 -0
  259. bytedigger_engine-0.1.0/tests/test_gh615_findings_normalize.py +249 -0
  260. bytedigger_engine-0.1.0/tests/test_gh625_restart_budget_split.py +663 -0
  261. bytedigger_engine-0.1.0/tests/test_gh631_declared_creates_cite_lint.py +249 -0
  262. bytedigger_engine-0.1.0/tests/test_gh634_ac_uncompilable_directed_repair.py +389 -0
  263. bytedigger_engine-0.1.0/tests/test_gh635_shortcircuit_gate_retry.py +216 -0
  264. bytedigger_engine-0.1.0/tests/test_gh638_delta_rereview_content_vote.py +237 -0
  265. bytedigger_engine-0.1.0/tests/test_gh640_security_lint_self_exempt.py +317 -0
  266. bytedigger_engine-0.1.0/tests/test_gh642_zero_findings_failclosed.py +394 -0
  267. bytedigger_engine-0.1.0/tests/test_gh674_repair_timeout_chunk.py +619 -0
  268. bytedigger_engine-0.1.0/tests/test_gh675_specwriter_cite_grounding.py +267 -0
  269. bytedigger_engine-0.1.0/tests/test_gh682_lite_cite_prelint.py +313 -0
  270. bytedigger_engine-0.1.0/tests/test_gh693_lite_cite_enforce.py +294 -0
  271. bytedigger_engine-0.1.0/tests/test_gh700_shadow_completion.py +368 -0
  272. bytedigger_engine-0.1.0/tests/test_gh705_callsite_stable_prefix.py +462 -0
  273. bytedigger_engine-0.1.0/tests/test_gh705_satisfaction_stable_prefix.py +307 -0
  274. bytedigger_engine-0.1.0/tests/test_gh707_reviewer_repoll_cap.py +350 -0
  275. bytedigger_engine-0.1.0/tests/test_gh724_finalize_preflight.py +146 -0
  276. bytedigger_engine-0.1.0/tests/test_gh726_surgical_parse_failsoft.py +180 -0
  277. bytedigger_engine-0.1.0/tests/test_gh729_cycle2_high_binding_parity.py +474 -0
  278. bytedigger_engine-0.1.0/tests/test_gh747_spec_preflight_batch.py +383 -0
  279. bytedigger_engine-0.1.0/tests/test_gh751_satisfaction_spec_anchor.py +303 -0
  280. bytedigger_engine-0.1.0/tests/test_gh780_manifest_nondict.py +200 -0
  281. bytedigger_engine-0.1.0/tests/test_gh792_native_sentinel_emit.py +662 -0
  282. bytedigger_engine-0.1.0/tests/test_gh795_resolver_emit_seam.py +701 -0
  283. bytedigger_engine-0.1.0/tests/test_gh804_manifest_consumer_holes.py +373 -0
  284. bytedigger_engine-0.1.0/tests/test_gh834fix_model_config_absent.py +74 -0
  285. bytedigger_engine-0.1.0/tests/test_gh863_helper_extraction_gate.py +361 -0
  286. bytedigger_engine-0.1.0/tests/test_git_port.py +456 -0
  287. bytedigger_engine-0.1.0/tests/test_graph_source_DA48BEAC.py +170 -0
  288. bytedigger_engine-0.1.0/tests/test_green_complete_resume_gh483.py +532 -0
  289. bytedigger_engine-0.1.0/tests/test_green_typecheck_baseline_5C14EF32.py +670 -0
  290. bytedigger_engine-0.1.0/tests/test_green_watchdog_complexity_scaling.py +226 -0
  291. bytedigger_engine-0.1.0/tests/test_helper_W10.py +269 -0
  292. bytedigger_engine-0.1.0/tests/test_io_utils.py +227 -0
  293. bytedigger_engine-0.1.0/tests/test_llm_subprocess.py +431 -0
  294. bytedigger_engine-0.1.0/tests/test_llm_subprocess_23680DDA.py +1238 -0
  295. bytedigger_engine-0.1.0/tests/test_llm_subprocess_775D6752.py +1520 -0
  296. bytedigger_engine-0.1.0/tests/test_llm_subprocess_91AF3612.py +373 -0
  297. bytedigger_engine-0.1.0/tests/test_llm_subprocess_E6F86B73.py +205 -0
  298. bytedigger_engine-0.1.0/tests/test_llm_subprocess_W1.py +357 -0
  299. bytedigger_engine-0.1.0/tests/test_llm_subprocess_allowed_tools.py +920 -0
  300. bytedigger_engine-0.1.0/tests/test_llm_subprocess_hard_gate.py +376 -0
  301. bytedigger_engine-0.1.0/tests/test_llm_subprocess_stream_gap.py +482 -0
  302. bytedigger_engine-0.1.0/tests/test_loop_runner.py +296 -0
  303. bytedigger_engine-0.1.0/tests/test_path_classifier_A1D4A4C9.py +150 -0
  304. bytedigger_engine-0.1.0/tests/test_phase5_bounded_run_BFEC3E71.py +713 -0
  305. bytedigger_engine-0.1.0/tests/test_phase5_test_only_verify_gates.py +334 -0
  306. bytedigger_engine-0.1.0/tests/test_phase6_bounded_run_7D2BAD22.py +377 -0
  307. bytedigger_engine-0.1.0/tests/test_phase_05_inject_12334B92.py +110 -0
  308. bytedigger_engine-0.1.0/tests/test_phase_05_inject_BF6CB291.py +468 -0
  309. bytedigger_engine-0.1.0/tests/test_phase_0_research.py +146 -0
  310. bytedigger_engine-0.1.0/tests/test_phase_1_discovery.py +966 -0
  311. bytedigger_engine-0.1.0/tests/test_phase_2_explore.py +945 -0
  312. bytedigger_engine-0.1.0/tests/test_phase_3_clarify.py +617 -0
  313. bytedigger_engine-0.1.0/tests/test_phase_45_ac_dsl_wiring_GH517A2.py +428 -0
  314. bytedigger_engine-0.1.0/tests/test_phase_45_reviewer_cross_check_e94afd31.py +144 -0
  315. bytedigger_engine-0.1.0/tests/test_phase_45_spec_8A9C0F24.py +163 -0
  316. bytedigger_engine-0.1.0/tests/test_phase_45_spec_D02C615D.py +461 -0
  317. bytedigger_engine-0.1.0/tests/test_phase_45_spec_DA5330E9_suffix_map.py +459 -0
  318. bytedigger_engine-0.1.0/tests/test_phase_45_spec_EECB919C.py +452 -0
  319. bytedigger_engine-0.1.0/tests/test_phase_45_spec_cite_fallback_3F5599A6.py +345 -0
  320. bytedigger_engine-0.1.0/tests/test_phase_45_spec_complexity_timeouts.py +176 -0
  321. bytedigger_engine-0.1.0/tests/test_phase_45_spec_complexity_timeouts_D1F51D7A.py +261 -0
  322. bytedigger_engine-0.1.0/tests/test_phase_45_spec_cycle1_verdict.py +353 -0
  323. bytedigger_engine-0.1.0/tests/test_phase_45_spec_lite_citation_autocorrect_32ED4070.py +582 -0
  324. bytedigger_engine-0.1.0/tests/test_phase_45_spec_lite_cycle1_verdict.py +293 -0
  325. bytedigger_engine-0.1.0/tests/test_phase_45_spec_lite_step5_structured_verdict.py +298 -0
  326. bytedigger_engine-0.1.0/tests/test_phase_45_spec_model_aware_timeouts_F88217EB.py +201 -0
  327. bytedigger_engine-0.1.0/tests/test_phase_45_spec_telemetry_D7B5BFB3.py +497 -0
  328. bytedigger_engine-0.1.0/tests/test_phase_45_verdict_synonyms_7f129bca.py +89 -0
  329. bytedigger_engine-0.1.0/tests/test_phase_4_architect.py +551 -0
  330. bytedigger_engine-0.1.0/tests/test_phase_5_32C49788_green_watchdog_token_alert.py +263 -0
  331. bytedigger_engine-0.1.0/tests/test_phase_5_5325B280_three_bugs.py +515 -0
  332. bytedigger_engine-0.1.0/tests/test_phase_5_9EDB7588_commit_idempotency.py +384 -0
  333. bytedigger_engine-0.1.0/tests/test_phase_5_AD14A3ED_red_scope.py +450 -0
  334. bytedigger_engine-0.1.0/tests/test_phase_5_C844CC77_root_sibling_discovery.py +233 -0
  335. bytedigger_engine-0.1.0/tests/test_phase_5_canary_event_type_from_spec_36269734.py +606 -0
  336. bytedigger_engine-0.1.0/tests/test_phase_5_commit_only_paths_7DDD9529.py +396 -0
  337. bytedigger_engine-0.1.0/tests/test_phase_5_gate_structured_verdict.py +279 -0
  338. bytedigger_engine-0.1.0/tests/test_phase_5_gate_verdict_canonical_gh349.py +289 -0
  339. bytedigger_engine-0.1.0/tests/test_phase_5_graphfirst_DA48BEAC.py +318 -0
  340. bytedigger_engine-0.1.0/tests/test_phase_5_green_watchdog_step_pilot.py +114 -0
  341. bytedigger_engine-0.1.0/tests/test_phase_5_haldir_worktree_env_4F5EC99D.py +209 -0
  342. bytedigger_engine-0.1.0/tests/test_phase_5_implement_477B3143.py +46 -0
  343. bytedigger_engine-0.1.0/tests/test_phase_5_implement_53BB3810.py +455 -0
  344. bytedigger_engine-0.1.0/tests/test_phase_5_implement_69AA5237.py +202 -0
  345. bytedigger_engine-0.1.0/tests/test_phase_5_implement_A3398552.py +320 -0
  346. bytedigger_engine-0.1.0/tests/test_phase_5_implement_B1AAACFB_sub1.py +180 -0
  347. bytedigger_engine-0.1.0/tests/test_phase_5_implement_B560A2D3.py +196 -0
  348. bytedigger_engine-0.1.0/tests/test_phase_5_implement_B6247E87.py +409 -0
  349. bytedigger_engine-0.1.0/tests/test_phase_5_implement_B7442146.py +397 -0
  350. bytedigger_engine-0.1.0/tests/test_phase_5_implement_CF9CCFE7.py +63 -0
  351. bytedigger_engine-0.1.0/tests/test_phase_5_implement_F96D3539.py +211 -0
  352. bytedigger_engine-0.1.0/tests/test_phase_5_implement_GH727.py +246 -0
  353. bytedigger_engine-0.1.0/tests/test_phase_5_implement_W11.py +113 -0
  354. bytedigger_engine-0.1.0/tests/test_phase_5_implement_W13.py +109 -0
  355. bytedigger_engine-0.1.0/tests/test_phase_5_implement_W4.py +238 -0
  356. bytedigger_engine-0.1.0/tests/test_phase_5_implement_W7.py +152 -0
  357. bytedigger_engine-0.1.0/tests/test_phase_5_implement_complexity_timeouts.py +126 -0
  358. bytedigger_engine-0.1.0/tests/test_phase_5_implement_emit_safe_severity.py +93 -0
  359. bytedigger_engine-0.1.0/tests/test_phase_5_integration_canary.py +245 -0
  360. bytedigger_engine-0.1.0/tests/test_phase_5_integrity.py +1072 -0
  361. bytedigger_engine-0.1.0/tests/test_phase_5_p0_escalate_585E30E3.py +638 -0
  362. bytedigger_engine-0.1.0/tests/test_phase_5_p1a_suite_safety_585E30E3.py +330 -0
  363. bytedigger_engine-0.1.0/tests/test_phase_5_p1b_reproducibility_585E30E3.py +365 -0
  364. bytedigger_engine-0.1.0/tests/test_phase_5_p3_net_new_added_hard_fail_14F6DCD4.py +442 -0
  365. bytedigger_engine-0.1.0/tests/test_phase_5_phase_1b_default_flip_C0B5C6E1.py +265 -0
  366. bytedigger_engine-0.1.0/tests/test_phase_5_pillar3_mechanical_pytest.py +88 -0
  367. bytedigger_engine-0.1.0/tests/test_phase_5_red_disk_fallback_9F2A50E8.py +432 -0
  368. bytedigger_engine-0.1.0/tests/test_phase_5_retry_cycle_gh348.py +490 -0
  369. bytedigger_engine-0.1.0/tests/test_phase_5_step1_disk_truth.py +322 -0
  370. bytedigger_engine-0.1.0/tests/test_phase_5_step2_verify_red.py +287 -0
  371. bytedigger_engine-0.1.0/tests/test_phase_5_step3_verify_green.py +327 -0
  372. bytedigger_engine-0.1.0/tests/test_phase_5_step4_validation_schema.py +238 -0
  373. bytedigger_engine-0.1.0/tests/test_phase_5_step5_commit_green_code.py +410 -0
  374. bytedigger_engine-0.1.0/tests/test_phase_5_test_only_mode_885AAE33.py +464 -0
  375. bytedigger_engine-0.1.0/tests/test_phase_5_venv_pytest_D8CB354F.py +254 -0
  376. bytedigger_engine-0.1.0/tests/test_phase_6_1F39FB1A_soft_tag.py +945 -0
  377. bytedigger_engine-0.1.0/tests/test_phase_6_CA50885D_suspect_fail_open.py +353 -0
  378. bytedigger_engine-0.1.0/tests/test_phase_6_FEB64BA8_backtick_strip.py +830 -0
  379. bytedigger_engine-0.1.0/tests/test_phase_6_build_scope_prompt.py +310 -0
  380. bytedigger_engine-0.1.0/tests/test_phase_6_commit_fix_code_pre_ref_early_7B6A9AD1.py +335 -0
  381. bytedigger_engine-0.1.0/tests/test_phase_6_commit_fix_tests_8FE3D757.py +860 -0
  382. bytedigger_engine-0.1.0/tests/test_phase_6_degrade_fail_loud_F81D5EF7.py +461 -0
  383. bytedigger_engine-0.1.0/tests/test_phase_6_fix_bash_removed.py +216 -0
  384. bytedigger_engine-0.1.0/tests/test_phase_6_fix_inline_head_tests_65EA1B86.py +624 -0
  385. bytedigger_engine-0.1.0/tests/test_phase_6_fix_integrity.py +545 -0
  386. bytedigger_engine-0.1.0/tests/test_phase_6_fix_structured_verdict.py +484 -0
  387. bytedigger_engine-0.1.0/tests/test_phase_6_fuzzy_citation_match_A37D4F04.py +450 -0
  388. bytedigger_engine-0.1.0/tests/test_phase_6_idle_timeout_invariant.py +116 -0
  389. bytedigger_engine-0.1.0/tests/test_phase_6_last_findings_persist_c834481a.py +433 -0
  390. bytedigger_engine-0.1.0/tests/test_phase_6_mass_unverified_5F9817F6.py +323 -0
  391. bytedigger_engine-0.1.0/tests/test_phase_6_post_fix_pytest_gate_7A940850.py +757 -0
  392. bytedigger_engine-0.1.0/tests/test_phase_6_post_fix_typecheck_gate_GH316.py +906 -0
  393. bytedigger_engine-0.1.0/tests/test_phase_6_postfix_and_polish_3F5599A6.py +470 -0
  394. bytedigger_engine-0.1.0/tests/test_phase_6_r5_skip_guard_3CE7007C.py +364 -0
  395. bytedigger_engine-0.1.0/tests/test_phase_6_review_21792EE7.py +540 -0
  396. bytedigger_engine-0.1.0/tests/test_phase_6_review_E52F241F.py +99 -0
  397. bytedigger_engine-0.1.0/tests/test_phase_6_review_W2.py +370 -0
  398. bytedigger_engine-0.1.0/tests/test_phase_6_review_return_discipline_CF838E6F.py +643 -0
  399. bytedigger_engine-0.1.0/tests/test_phase_6_review_simple_fastpath.py +162 -0
  400. bytedigger_engine-0.1.0/tests/test_phase_6_review_timeout_920C6935.py +238 -0
  401. bytedigger_engine-0.1.0/tests/test_phase_6_reviewer_suspect_rate_D3492E45.py +895 -0
  402. bytedigger_engine-0.1.0/tests/test_phase_6_rubric_trim_5D0D3BD1.py +162 -0
  403. bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_gate_strict_and_9702b73f.py +894 -0
  404. bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_multi_evaluator.py +966 -0
  405. bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_prompt_binding_1C24581F.py +424 -0
  406. bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_structured_verdict.py +507 -0
  407. bytedigger_engine-0.1.0/tests/test_phase_6_stdout_fallback_verdict_4E0BAC38.py +414 -0
  408. bytedigger_engine-0.1.0/tests/test_phase_6_step10_commit_fix_code.py +690 -0
  409. bytedigger_engine-0.1.0/tests/test_phase_6_step7_w1_disk_truth.py +485 -0
  410. bytedigger_engine-0.1.0/tests/test_phase_6_subagent_prior_context_propagation_7ca211d2.py +280 -0
  411. bytedigger_engine-0.1.0/tests/test_phase_6_test_only_note_FF2CB91D.py +339 -0
  412. bytedigger_engine-0.1.0/tests/test_phase_6_verified_only_gate_65695203.py +832 -0
  413. bytedigger_engine-0.1.0/tests/test_phase_7_resume_context.py +228 -0
  414. bytedigger_engine-0.1.0/tests/test_phase_7_step8_disk_truth.py +412 -0
  415. bytedigger_engine-0.1.0/tests/test_phase_7_step8_disk_truth_error.py +383 -0
  416. bytedigger_engine-0.1.0/tests/test_phase_7_step8_disk_truth_subset.py +419 -0
  417. bytedigger_engine-0.1.0/tests/test_phase_7_synthesize.py +682 -0
  418. bytedigger_engine-0.1.0/tests/test_phase_7_synthesize_W11.py +216 -0
  419. bytedigger_engine-0.1.0/tests/test_phase_7_synthesizer_structured_verdict.py +605 -0
  420. bytedigger_engine-0.1.0/tests/test_phase_8_full_suite_delta.py +604 -0
  421. bytedigger_engine-0.1.0/tests/test_phase_8_post_deploy_6CBC19FA.py +137 -0
  422. bytedigger_engine-0.1.0/tests/test_phase_8_post_deploy_W8.py +468 -0
  423. bytedigger_engine-0.1.0/tests/test_phase_8_ship_to_pr_98364258.py +807 -0
  424. bytedigger_engine-0.1.0/tests/test_phase_graph_ensure_EEFC4611.py +227 -0
  425. bytedigger_engine-0.1.0/tests/test_phase_graph_wiring_DA48BEAC.py +265 -0
  426. bytedigger_engine-0.1.0/tests/test_r_prime_ship2a_list_runs.py +379 -0
  427. bytedigger_engine-0.1.0/tests/test_r_prime_ship2b_status_run.py +306 -0
  428. bytedigger_engine-0.1.0/tests/test_register_backend_A60F1FE3.py +459 -0
  429. bytedigger_engine-0.1.0/tests/test_satisfaction_abspath_fix_13854ED4.py +189 -0
  430. bytedigger_engine-0.1.0/tests/test_spec_cite_gh366_367.py +263 -0
  431. bytedigger_engine-0.1.0/tests/test_spec_coverage_extract_ops_label_184717A7.py +223 -0
  432. bytedigger_engine-0.1.0/tests/test_spec_lint_batch_wiring_GH559.py +419 -0
  433. bytedigger_engine-0.1.0/tests/test_spec_retry_cycle.py +219 -0
  434. bytedigger_engine-0.1.0/tests/test_step_retry.py +272 -0
  435. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_FD2592D9.py +548 -0
  436. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_architect_775B49B3.py +683 -0
  437. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_clarify_C59DD079.py +680 -0
  438. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_discovery_3AAB77FA.py +554 -0
  439. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_explore_42376F1B.py +695 -0
  440. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_fix_DACC8E2B.py +722 -0
  441. bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_satisfaction_1A07C325.py +928 -0
  442. bytedigger_engine-0.1.0/tests/test_subprocess_telemetry.py +431 -0
  443. bytedigger_engine-0.1.0/tests/test_timeout_policy_GH285.py +366 -0
  444. bytedigger_engine-0.1.0/tier_gate.py +117 -0
  445. bytedigger_engine-0.1.0/token_consistency.py +55 -0
  446. bytedigger_engine-0.1.0/verdict_anchor.py +205 -0
  447. bytedigger_engine-0.1.0/verdict_gate.py +75 -0
  448. bytedigger_engine-0.1.0/verdict_verify.py +470 -0
  449. bytedigger_engine-0.1.0/workflows/__init__.py +46 -0
  450. bytedigger_engine-0.1.0/workflows/_baseline_delta.py +79 -0
  451. bytedigger_engine-0.1.0/workflows/_recoverable_policy.py +98 -0
  452. bytedigger_engine-0.1.0/workflows/_standards_context.py +103 -0
  453. bytedigger_engine-0.1.0/workflows/_task_description.py +25 -0
  454. bytedigger_engine-0.1.0/workflows/echo.py +18 -0
  455. bytedigger_engine-0.1.0/workflows/graph_source.py +126 -0
  456. bytedigger_engine-0.1.0/workflows/phase_05_inject.py +1086 -0
  457. bytedigger_engine-0.1.0/workflows/phase_0_6_artifact_detect.py +137 -0
  458. bytedigger_engine-0.1.0/workflows/phase_0_research.py +86 -0
  459. bytedigger_engine-0.1.0/workflows/phase_1_discovery.py +543 -0
  460. bytedigger_engine-0.1.0/workflows/phase_2_explore.py +492 -0
  461. bytedigger_engine-0.1.0/workflows/phase_3_clarify.py +380 -0
  462. bytedigger_engine-0.1.0/workflows/phase_45_spec.py +4212 -0
  463. bytedigger_engine-0.1.0/workflows/phase_45_spec_lite.py +1289 -0
  464. bytedigger_engine-0.1.0/workflows/phase_4_architect.py +407 -0
  465. bytedigger_engine-0.1.0/workflows/phase_5_devops_scan.py +391 -0
  466. bytedigger_engine-0.1.0/workflows/phase_5_implement.py +5958 -0
  467. bytedigger_engine-0.1.0/workflows/phase_5_integration_canary.py +233 -0
  468. bytedigger_engine-0.1.0/workflows/phase_5_integrity.py +579 -0
  469. bytedigger_engine-0.1.0/workflows/phase_6_fix_integrity.py +635 -0
  470. bytedigger_engine-0.1.0/workflows/phase_6_review.py +4975 -0
  471. bytedigger_engine-0.1.0/workflows/phase_6_review_simple_fastpath.py +95 -0
  472. bytedigger_engine-0.1.0/workflows/phase_6_smoke.py +119 -0
  473. bytedigger_engine-0.1.0/workflows/phase_7_synthesize.py +739 -0
  474. bytedigger_engine-0.1.0/workflows/phase_8_post_deploy.py +1590 -0
  475. bytedigger_engine-0.1.0/workflows/phase_devops_pipeline.py +69 -0
  476. bytedigger_engine-0.1.0/workflows/phase_workflows_common.py +504 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Guy Lifshitz
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,186 @@
1
+ Metadata-Version: 2.4
2
+ Name: bytedigger-engine
3
+ Version: 0.1.0
4
+ Summary: Verified agentic TDD engine: a frozen, event-sourced RED->validate->GREEN state machine with deterministic anti-reward-hacking gates.
5
+ Author: Guy Lifshitz
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 Guy Lifshitz
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Keywords: tdd,agents,llm,code-generation,verification,reward-hacking
29
+ Classifier: Development Status :: 3 - Alpha
30
+ Classifier: Intended Audience :: Developers
31
+ Classifier: License :: OSI Approved :: MIT License
32
+ Classifier: Programming Language :: Python :: 3
33
+ Classifier: Topic :: Software Development :: Testing
34
+ Requires-Python: >=3.9
35
+ Description-Content-Type: text/markdown
36
+ License-File: LICENSE
37
+ Requires-Dist: typing_extensions>=4
38
+ Provides-Extra: dbos
39
+ Requires-Dist: dbos==2.22.0; extra == "dbos"
40
+ Provides-Extra: test
41
+ Requires-Dist: pytest>=8; extra == "test"
42
+ Requires-Dist: pytest-timeout>=2.4.0; extra == "test"
43
+ Requires-Dist: pyyaml>=6; extra == "test"
44
+ Provides-Extra: agentic-pydantic
45
+ Requires-Dist: pydantic-ai<3,>=2.0; extra == "agentic-pydantic"
46
+ Provides-Extra: security
47
+ Requires-Dist: semgrep>=1.60; extra == "security"
48
+ Dynamic: license-file
49
+
50
+ # ByteDigger
51
+
52
+ ByteDigger is a phased, gate-enforced build pipeline for AI code generation.
53
+ TDD is mandatory, reviews are scored, and skipping is blocked: an event-sourced
54
+ RED → validate → GREEN state machine with deterministic gates that make
55
+ reward-hacking expensive instead of easy.
56
+
57
+ Most agentic coding failures aren't capability failures — they're verification
58
+ failures. Agents game their own acceptance signal: weakening assertions,
59
+ mocking the unit under test, passing a scoped suite while breaking the full
60
+ one. ByteDigger treats those as first-class failure modes and gates them with
61
+ cheap deterministic checks, not with more LLM judgment.
62
+
63
+ ## What it does
64
+
65
+ - **Frozen state machine, single mutation point.** Every phase (research → spec
66
+ → RED → validate → GREEN → review → synthesize) is a registered workflow run
67
+ by one engine. State is derived by replaying an append-only JSONL event log —
68
+ there is no mutable state file to drift or race.
69
+ - **RED-first, hard-gated.** A failing test is written and independently
70
+ verified before implementation. An LLM validation gate sits between RED and
71
+ GREEN and cannot be skipped.
72
+ - **Deterministic anti-gaming lints, run as code:**
73
+ - stub-passability: rejects a RED that mocks its own unit under test
74
+ - test-integrity diff guard: classifies post-RED test edits, hard-fails on
75
+ assertion gaming
76
+ - scope-inverse: flags implementation writes outside the spec's file allowlist
77
+ - spec-cite / spec-coverage / helper-extraction / suite-safety and friends
78
+ - **Durable execution, no required services.** The default durable backend is
79
+ `native` (stdlib, per-phase sentinels): a killed run resumes from its last
80
+ completed step. An optional [DBOS](https://www.dbos.dev)-backed backend is
81
+ available via the `[dbos]` extra.
82
+
83
+ ## Install
84
+
85
+ ```bash
86
+ python3 -m venv .venv && source .venv/bin/activate
87
+
88
+ pip install . # core: no runtime dependencies
89
+ pip install ".[test]" # + pytest, to run the suite
90
+ pip install ".[dbos]" # optional: DBOS durable-execution backend
91
+ pip install ".[agentic-pydantic]" # optional: provider-agnostic agentic backend
92
+ ```
93
+
94
+ The core installs with **zero runtime dependencies** — stdlib plus the LLM
95
+ backend of your choice. DBOS is strictly optional: the engine defaults to the
96
+ dependency-free `native` durable backend; install `[dbos]` only if you set
97
+ `HAL_ENGINE_DURABLE_BACKEND=dbos`.
98
+
99
+ ## Quickstart
100
+
101
+ ```bash
102
+ # list registered workflows
103
+ bytedigger-engine --list
104
+
105
+ # round-trip smoke: run the echo workflow with an event log
106
+ bytedigger-engine --workflow echo --ctx-json '{"question":"hello"}' \
107
+ --event-log /tmp/engine-events.jsonl
108
+
109
+ # derive state by replaying the log
110
+ bytedigger-engine --derive-state /tmp/engine-events.jsonl
111
+
112
+ # test suite (from a source checkout)
113
+ python3 -m pytest tests/
114
+ ```
115
+
116
+ ### Project mode
117
+
118
+ The entrypoint auto-detects its context: run from an ordinary project
119
+ directory it uses neutral defaults and writes all state under
120
+ `<cwd>/.hal-build/` — nothing touches any host install. To force neutral mode
121
+ explicitly, pass `--no-hal` or set `HAL_ENGINE_NEUTRAL=1`:
122
+
123
+ ```bash
124
+ # from any project checkout — artifacts land in ./.hal-build/
125
+ bytedigger-engine --workflow echo --ctx-json '{}' --event-log .hal-build/events.jsonl
126
+
127
+ # explicit overrides (equivalent)
128
+ bytedigger-engine --no-hal --workflow echo --ctx-json '{}'
129
+ HAL_ENGINE_NEUTRAL=1 bytedigger-engine --workflow echo --ctx-json '{}'
130
+ ```
131
+
132
+ LLM steps are subprocess-based and backend-pluggable: any CLI that accepts a
133
+ prompt on stdin and prints to stdout works. Deterministic phases and the full
134
+ test suite run without any LLM configured.
135
+
136
+ ## Backends: text vs agentic
137
+
138
+ Two reference backends live in `lib/reference_backends/`:
139
+
140
+ - **`anthropic-api`** (text) — Anthropic Messages API, stdlib-only (urllib).
141
+ For opaque-text phases (no file writes, no tool use). Requires
142
+ `ANTHROPIC_API_KEY`.
143
+ - **`pydantic-openai`** (agentic) — **experimental** — provider-agnostic agent
144
+ (write files, run tests) on any OpenAI-compatible provider via
145
+ [Pydantic AI](https://ai.pydantic.dev) v2. Install with the
146
+ `[agentic-pydantic]` extra. Requires `AZURE_OPENAI_KEY` +
147
+ `AZURE_OPENAI_ENDPOINT` (optional `PYDANTIC_BACKEND_DEPLOYMENT`). The
148
+ workspace root must be a git repository — the write manifest is a
149
+ pre-state-aware git diff (ground truth, never model self-report). Bash /
150
+ run_tests are restricted by default to an argv0 allowlist executed without a
151
+ shell; treat the allowlist as accident protection, not a security boundary.
152
+
153
+ ## Boundary
154
+
155
+ The engine core is host-decoupled by construction and CI-enforced: a
156
+ core-boundary lint (`SYSTEM/cli/build/core-boundary-lint.py`) scans the
157
+ transitive import closure of `core_manifest.json` for machine-specific paths,
158
+ environment coupling, and denylisted imports, and a flag-routing lint keeps
159
+ environment reads behind the `config_provider` seam.
160
+
161
+ ## Repository layout
162
+
163
+ The engine lives at `SYSTEM/cli/build/engine_py/`, mirroring the upstream
164
+ nesting: engine code resolves sibling tooling (deterministic lints, the
165
+ security rule pack) by relative path, so the extracted tree keeps the same
166
+ shape. Packaging flattens it — `pip install .` exposes the modules top-level.
167
+ Flattening the tree itself is upstream follow-up work.
168
+
169
+ This tree is extracted from the upstream engine by
170
+ `tools/extract_from_hal.py` (manifest-driven; `pyproject.toml`, `README.md`
171
+ and `LICENSE` are owned here and never overwritten by extraction). The
172
+ pre-extraction ByteDigger Claude Code plugin (TypeScript/hooks pipeline) is
173
+ preserved under [`legacy-plugin/`](legacy-plugin/) — see its
174
+ [README](legacy-plugin/README.md) and
175
+ [the article](legacy-plugin/docs/article.md) on how the gate-enforced pipeline
176
+ came to be.
177
+
178
+ ## Non-goals
179
+
180
+ Multi-agent orchestration frameworks are well covered elsewhere. This project
181
+ is deliberately narrow: one sequential engine, one event log, and a growing set
182
+ of deterministic gates that keep generated code honest.
183
+
184
+ ## License
185
+
186
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,137 @@
1
+ # ByteDigger
2
+
3
+ ByteDigger is a phased, gate-enforced build pipeline for AI code generation.
4
+ TDD is mandatory, reviews are scored, and skipping is blocked: an event-sourced
5
+ RED → validate → GREEN state machine with deterministic gates that make
6
+ reward-hacking expensive instead of easy.
7
+
8
+ Most agentic coding failures aren't capability failures — they're verification
9
+ failures. Agents game their own acceptance signal: weakening assertions,
10
+ mocking the unit under test, passing a scoped suite while breaking the full
11
+ one. ByteDigger treats those as first-class failure modes and gates them with
12
+ cheap deterministic checks, not with more LLM judgment.
13
+
14
+ ## What it does
15
+
16
+ - **Frozen state machine, single mutation point.** Every phase (research → spec
17
+ → RED → validate → GREEN → review → synthesize) is a registered workflow run
18
+ by one engine. State is derived by replaying an append-only JSONL event log —
19
+ there is no mutable state file to drift or race.
20
+ - **RED-first, hard-gated.** A failing test is written and independently
21
+ verified before implementation. An LLM validation gate sits between RED and
22
+ GREEN and cannot be skipped.
23
+ - **Deterministic anti-gaming lints, run as code:**
24
+ - stub-passability: rejects a RED that mocks its own unit under test
25
+ - test-integrity diff guard: classifies post-RED test edits, hard-fails on
26
+ assertion gaming
27
+ - scope-inverse: flags implementation writes outside the spec's file allowlist
28
+ - spec-cite / spec-coverage / helper-extraction / suite-safety and friends
29
+ - **Durable execution, no required services.** The default durable backend is
30
+ `native` (stdlib, per-phase sentinels): a killed run resumes from its last
31
+ completed step. An optional [DBOS](https://www.dbos.dev)-backed backend is
32
+ available via the `[dbos]` extra.
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ python3 -m venv .venv && source .venv/bin/activate
38
+
39
+ pip install . # core: no runtime dependencies
40
+ pip install ".[test]" # + pytest, to run the suite
41
+ pip install ".[dbos]" # optional: DBOS durable-execution backend
42
+ pip install ".[agentic-pydantic]" # optional: provider-agnostic agentic backend
43
+ ```
44
+
45
+ The core installs with **zero runtime dependencies** — stdlib plus the LLM
46
+ backend of your choice. DBOS is strictly optional: the engine defaults to the
47
+ dependency-free `native` durable backend; install `[dbos]` only if you set
48
+ `HAL_ENGINE_DURABLE_BACKEND=dbos`.
49
+
50
+ ## Quickstart
51
+
52
+ ```bash
53
+ # list registered workflows
54
+ bytedigger-engine --list
55
+
56
+ # round-trip smoke: run the echo workflow with an event log
57
+ bytedigger-engine --workflow echo --ctx-json '{"question":"hello"}' \
58
+ --event-log /tmp/engine-events.jsonl
59
+
60
+ # derive state by replaying the log
61
+ bytedigger-engine --derive-state /tmp/engine-events.jsonl
62
+
63
+ # test suite (from a source checkout)
64
+ python3 -m pytest tests/
65
+ ```
66
+
67
+ ### Project mode
68
+
69
+ The entrypoint auto-detects its context: run from an ordinary project
70
+ directory it uses neutral defaults and writes all state under
71
+ `<cwd>/.hal-build/` — nothing touches any host install. To force neutral mode
72
+ explicitly, pass `--no-hal` or set `HAL_ENGINE_NEUTRAL=1`:
73
+
74
+ ```bash
75
+ # from any project checkout — artifacts land in ./.hal-build/
76
+ bytedigger-engine --workflow echo --ctx-json '{}' --event-log .hal-build/events.jsonl
77
+
78
+ # explicit overrides (equivalent)
79
+ bytedigger-engine --no-hal --workflow echo --ctx-json '{}'
80
+ HAL_ENGINE_NEUTRAL=1 bytedigger-engine --workflow echo --ctx-json '{}'
81
+ ```
82
+
83
+ LLM steps are subprocess-based and backend-pluggable: any CLI that accepts a
84
+ prompt on stdin and prints to stdout works. Deterministic phases and the full
85
+ test suite run without any LLM configured.
86
+
87
+ ## Backends: text vs agentic
88
+
89
+ Two reference backends live in `lib/reference_backends/`:
90
+
91
+ - **`anthropic-api`** (text) — Anthropic Messages API, stdlib-only (urllib).
92
+ For opaque-text phases (no file writes, no tool use). Requires
93
+ `ANTHROPIC_API_KEY`.
94
+ - **`pydantic-openai`** (agentic) — **experimental** — provider-agnostic agent
95
+ (write files, run tests) on any OpenAI-compatible provider via
96
+ [Pydantic AI](https://ai.pydantic.dev) v2. Install with the
97
+ `[agentic-pydantic]` extra. Requires `AZURE_OPENAI_KEY` +
98
+ `AZURE_OPENAI_ENDPOINT` (optional `PYDANTIC_BACKEND_DEPLOYMENT`). The
99
+ workspace root must be a git repository — the write manifest is a
100
+ pre-state-aware git diff (ground truth, never model self-report). Bash /
101
+ run_tests are restricted by default to an argv0 allowlist executed without a
102
+ shell; treat the allowlist as accident protection, not a security boundary.
103
+
104
+ ## Boundary
105
+
106
+ The engine core is host-decoupled by construction and CI-enforced: a
107
+ core-boundary lint (`SYSTEM/cli/build/core-boundary-lint.py`) scans the
108
+ transitive import closure of `core_manifest.json` for machine-specific paths,
109
+ environment coupling, and denylisted imports, and a flag-routing lint keeps
110
+ environment reads behind the `config_provider` seam.
111
+
112
+ ## Repository layout
113
+
114
+ The engine lives at `SYSTEM/cli/build/engine_py/`, mirroring the upstream
115
+ nesting: engine code resolves sibling tooling (deterministic lints, the
116
+ security rule pack) by relative path, so the extracted tree keeps the same
117
+ shape. Packaging flattens it — `pip install .` exposes the modules top-level.
118
+ Flattening the tree itself is upstream follow-up work.
119
+
120
+ This tree is extracted from the upstream engine by
121
+ `tools/extract_from_hal.py` (manifest-driven; `pyproject.toml`, `README.md`
122
+ and `LICENSE` are owned here and never overwritten by extraction). The
123
+ pre-extraction ByteDigger Claude Code plugin (TypeScript/hooks pipeline) is
124
+ preserved under [`legacy-plugin/`](legacy-plugin/) — see its
125
+ [README](legacy-plugin/README.md) and
126
+ [the article](legacy-plugin/docs/article.md) on how the gate-enforced pipeline
127
+ came to be.
128
+
129
+ ## Non-goals
130
+
131
+ Multi-agent orchestration frameworks are well covered elsewhere. This project
132
+ is deliberately narrow: one sequential engine, one event log, and a growing set
133
+ of deterministic gates that keep generated code honest.
134
+
135
+ ## License
136
+
137
+ MIT — see [LICENSE](LICENSE).