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.
- bytedigger_engine-0.1.0/LICENSE +21 -0
- bytedigger_engine-0.1.0/PKG-INFO +186 -0
- bytedigger_engine-0.1.0/README.md +137 -0
- bytedigger_engine-0.1.0/ac_dsl.py +552 -0
- bytedigger_engine-0.1.0/audit_gate.py +237 -0
- bytedigger_engine-0.1.0/bytedigger_engine.egg-info/PKG-INFO +186 -0
- bytedigger_engine-0.1.0/bytedigger_engine.egg-info/SOURCES.txt +474 -0
- bytedigger_engine-0.1.0/bytedigger_engine.egg-info/dependency_links.txt +1 -0
- bytedigger_engine-0.1.0/bytedigger_engine.egg-info/entry_points.txt +2 -0
- bytedigger_engine-0.1.0/bytedigger_engine.egg-info/requires.txt +15 -0
- bytedigger_engine-0.1.0/bytedigger_engine.egg-info/top_level.txt +46 -0
- bytedigger_engine-0.1.0/config_provider.py +225 -0
- bytedigger_engine-0.1.0/contracts.py +672 -0
- bytedigger_engine-0.1.0/corpus_extract.py +122 -0
- bytedigger_engine-0.1.0/derive_state.py +303 -0
- bytedigger_engine-0.1.0/engine.py +1042 -0
- bytedigger_engine-0.1.0/error_codes.py +300 -0
- bytedigger_engine-0.1.0/error_locus.py +126 -0
- bytedigger_engine-0.1.0/event_log.py +151 -0
- bytedigger_engine-0.1.0/event_sink.py +87 -0
- bytedigger_engine-0.1.0/execution_provenance.py +50 -0
- bytedigger_engine-0.1.0/findings_sidecar.py +43 -0
- bytedigger_engine-0.1.0/flags_catalog.py +552 -0
- bytedigger_engine-0.1.0/forbidden_import.py +93 -0
- bytedigger_engine-0.1.0/format_conversion_cases.py +65 -0
- bytedigger_engine-0.1.0/helper_extraction.py +94 -0
- bytedigger_engine-0.1.0/io_utils.py +16 -0
- bytedigger_engine-0.1.0/lib/__init__.py +0 -0
- bytedigger_engine-0.1.0/lib/authored_boundary.py +225 -0
- bytedigger_engine-0.1.0/lib/bounded_spawn.py +41 -0
- bytedigger_engine-0.1.0/lib/constitution_loader.py +211 -0
- bytedigger_engine-0.1.0/lib/cost_rollup.py +105 -0
- bytedigger_engine-0.1.0/lib/dbos_list_runs.py +81 -0
- bytedigger_engine-0.1.0/lib/dbos_setup.py +428 -0
- bytedigger_engine-0.1.0/lib/dbos_status_run.py +76 -0
- bytedigger_engine-0.1.0/lib/directed_repair.py +626 -0
- bytedigger_engine-0.1.0/lib/env_limit.py +36 -0
- bytedigger_engine-0.1.0/lib/git_cwd.py +71 -0
- bytedigger_engine-0.1.0/lib/git_port.py +210 -0
- bytedigger_engine-0.1.0/lib/git_write_port.py +96 -0
- bytedigger_engine-0.1.0/lib/llm_provider.py +145 -0
- bytedigger_engine-0.1.0/lib/model_config.py +193 -0
- bytedigger_engine-0.1.0/lib/mypy_baseline.py +88 -0
- bytedigger_engine-0.1.0/lib/observability/emit_resolver.py +40 -0
- bytedigger_engine-0.1.0/lib/phase_sentinel.py +326 -0
- bytedigger_engine-0.1.0/lib/plugins/__init__.py +0 -0
- bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/__init__.py +1 -0
- bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/config.yaml +31 -0
- bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/helper.py +607 -0
- bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/producer_prompt_fragment.md +15 -0
- bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/prompt_fragment.md +21 -0
- bytedigger_engine-0.1.0/lib/plugins/anti_hallucination/semantic_verifier.py +589 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/__init__.py +27 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/delta_retry_prompt.py +51 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/delta_reviewer_prompt.py +165 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/findings_extractor.py +150 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/impl_delta_retry_prompt.py +57 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/restricted_reviewer_prompt.py +58 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/restricted_writer_prompt.py +66 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/surgical_revise.py +157 -0
- bytedigger_engine-0.1.0/lib/plugins/checklist_convergence/verdict_parser.py +85 -0
- bytedigger_engine-0.1.0/lib/plugins/disk_truth/__init__.py +20 -0
- bytedigger_engine-0.1.0/lib/plugins/disk_truth/git_diff.py +190 -0
- bytedigger_engine-0.1.0/lib/plugins/disk_truth/schema.py +152 -0
- bytedigger_engine-0.1.0/lib/plugins/disk_truth/suite_boyscout.py +189 -0
- bytedigger_engine-0.1.0/lib/plugins/disk_truth/test_runner.py +256 -0
- bytedigger_engine-0.1.0/lib/plugins/disk_truth/verdict_parser.py +77 -0
- bytedigger_engine-0.1.0/lib/plugins/review_schema/__init__.py +16 -0
- bytedigger_engine-0.1.0/lib/plugins/review_schema/canonical.py +89 -0
- bytedigger_engine-0.1.0/lib/project_root.py +103 -0
- bytedigger_engine-0.1.0/lib/recoverable_gate.py +134 -0
- bytedigger_engine-0.1.0/lib/reference_backends/__init__.py +6 -0
- bytedigger_engine-0.1.0/lib/reference_backends/agent_sdk.py +292 -0
- bytedigger_engine-0.1.0/lib/reference_backends/anthropic_api.py +299 -0
- bytedigger_engine-0.1.0/lib/reference_backends/anthropic_oauth.py +126 -0
- bytedigger_engine-0.1.0/lib/reference_backends/pydantic_anthropic.py +295 -0
- bytedigger_engine-0.1.0/lib/reference_backends/pydantic_openai.py +737 -0
- bytedigger_engine-0.1.0/lib/restart_governor.py +314 -0
- bytedigger_engine-0.1.0/lib/resume_keying.py +33 -0
- bytedigger_engine-0.1.0/lib/revise_counter.py +78 -0
- bytedigger_engine-0.1.0/lib/run_allowlist.py +417 -0
- bytedigger_engine-0.1.0/lib/spec_defect_ledger.py +178 -0
- bytedigger_engine-0.1.0/lib/spec_retry_cycle.py +119 -0
- bytedigger_engine-0.1.0/lib/step_sentinel.py +182 -0
- bytedigger_engine-0.1.0/lib/timeout_policy.py +198 -0
- bytedigger_engine-0.1.0/lib/util/__init__.py +0 -0
- bytedigger_engine-0.1.0/lib/util/path_classifier.py +44 -0
- bytedigger_engine-0.1.0/lib/verdict_parse.py +175 -0
- bytedigger_engine-0.1.0/lib/verdict_resolution.py +52 -0
- bytedigger_engine-0.1.0/lib/worktree_root.py +24 -0
- bytedigger_engine-0.1.0/llm_subprocess.py +2694 -0
- bytedigger_engine-0.1.0/net_new_delta.py +78 -0
- bytedigger_engine-0.1.0/precommit_lints.py +26 -0
- bytedigger_engine-0.1.0/presence_triad.py +94 -0
- bytedigger_engine-0.1.0/pyproject.toml +100 -0
- bytedigger_engine-0.1.0/red_lint_checks.py +69 -0
- bytedigger_engine-0.1.0/reentry_ac.py +97 -0
- bytedigger_engine-0.1.0/reject_log.py +185 -0
- bytedigger_engine-0.1.0/reject_stats.py +73 -0
- bytedigger_engine-0.1.0/reproducibility.py +69 -0
- bytedigger_engine-0.1.0/resume_key_lint.py +244 -0
- bytedigger_engine-0.1.0/run.py +244 -0
- bytedigger_engine-0.1.0/scope_inverse.py +35 -0
- bytedigger_engine-0.1.0/scripts/__init__.py +0 -0
- bytedigger_engine-0.1.0/scripts/red_lint/__init__.py +0 -0
- bytedigger_engine-0.1.0/scripts/red_lint/rules.yml +125 -0
- bytedigger_engine-0.1.0/security/__init__.py +3 -0
- bytedigger_engine-0.1.0/security/except-pass-allowlist.txt +27 -0
- bytedigger_engine-0.1.0/security/gitleaks.toml +4 -0
- bytedigger_engine-0.1.0/security/secure-codegen-fragment.md +8 -0
- bytedigger_engine-0.1.0/security/secure-codegen-rules.md +62 -0
- bytedigger_engine-0.1.0/security/security_lint.py +254 -0
- bytedigger_engine-0.1.0/security/semgrep-rules.yml +191 -0
- bytedigger_engine-0.1.0/setup.cfg +4 -0
- bytedigger_engine-0.1.0/skip_logic.py +221 -0
- bytedigger_engine-0.1.0/spec_cite.py +459 -0
- bytedigger_engine-0.1.0/spec_class.py +49 -0
- bytedigger_engine-0.1.0/spec_coverage.py +272 -0
- bytedigger_engine-0.1.0/stub_passability.py +193 -0
- bytedigger_engine-0.1.0/suite_safety.py +73 -0
- bytedigger_engine-0.1.0/telemetry_ctx.py +89 -0
- bytedigger_engine-0.1.0/tests/test_0015E696_git_read_port.py +416 -0
- bytedigger_engine-0.1.0/tests/test_02FF48F4_model_pin_insession.py +433 -0
- bytedigger_engine-0.1.0/tests/test_090ED35B_integrity_verdict_trailing.py +364 -0
- bytedigger_engine-0.1.0/tests/test_13361031_citation_grounding_enforcement.py +423 -0
- bytedigger_engine-0.1.0/tests/test_14B76A6C_test_runner_seam.py +346 -0
- bytedigger_engine-0.1.0/tests/test_25e75663_llm_semantic_params.py +705 -0
- bytedigger_engine-0.1.0/tests/test_261_PH56SPLIT_stage0_common.py +282 -0
- bytedigger_engine-0.1.0/tests/test_291189a0_phase6_step_factory.py +143 -0
- bytedigger_engine-0.1.0/tests/test_2FDA949D_model_pin_warn.py +461 -0
- bytedigger_engine-0.1.0/tests/test_32ED59E2_effort_lever.py +219 -0
- bytedigger_engine-0.1.0/tests/test_360F99CE_phase6_smoke_graceful.py +186 -0
- bytedigger_engine-0.1.0/tests/test_3B410663_phase8_write_seam.py +478 -0
- bytedigger_engine-0.1.0/tests/test_3E6EBDF4_conftest_envpin.py +151 -0
- bytedigger_engine-0.1.0/tests/test_3F13371D_effort_hybrid.py +230 -0
- bytedigger_engine-0.1.0/tests/test_3F4B71D4_red_path_fallback_chain.py +526 -0
- bytedigger_engine-0.1.0/tests/test_3F5599A6_a2a3_residue.py +507 -0
- bytedigger_engine-0.1.0/tests/test_3F5599A6_commit_noop_clean_tree.py +691 -0
- bytedigger_engine-0.1.0/tests/test_4238DD14_phase5_validation_bashtest_enum.py +311 -0
- bytedigger_engine-0.1.0/tests/test_42E92BE7_green_watchdog_mixin.py +286 -0
- bytedigger_engine-0.1.0/tests/test_4961254A_commit_manifest_inversion.py +1093 -0
- bytedigger_engine-0.1.0/tests/test_4B50D02B_project_root_git_read.py +251 -0
- bytedigger_engine-0.1.0/tests/test_4B9DF7D3_satisfaction_override.py +742 -0
- bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1a_backend_selector.py +507 -0
- bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1b_in_session.py +718 -0
- bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1c_manifest.py +526 -0
- bytedigger_engine-0.1.0/tests/test_4C03CCED_ship1d_watchdog_capability.py +675 -0
- bytedigger_engine-0.1.0/tests/test_5AC25E83_gitignore_filter_green_fix_commit.py +471 -0
- bytedigger_engine-0.1.0/tests/test_5F06E98D_git_write_port.py +408 -0
- bytedigger_engine-0.1.0/tests/test_68E964FB_llm_backend_registry.py +485 -0
- bytedigger_engine-0.1.0/tests/test_6CAFEB9B_satisfaction_timeout.py +209 -0
- bytedigger_engine-0.1.0/tests/test_7C0FDE44_gh639_red_hash_freeze.py +475 -0
- bytedigger_engine-0.1.0/tests/test_7C4D70ED_red_executability_check.py +347 -0
- bytedigger_engine-0.1.0/tests/test_7CC37589_phantom_revise_capture.py +326 -0
- bytedigger_engine-0.1.0/tests/test_7FE193B7_git_read_routing.py +358 -0
- bytedigger_engine-0.1.0/tests/test_857C7684_gh690_directed_repair_patch.py +561 -0
- bytedigger_engine-0.1.0/tests/test_8C9F758C_suite_boyscout.py +490 -0
- bytedigger_engine-0.1.0/tests/test_8D162396_red_loop_reentry_frozen_sha.py +376 -0
- bytedigger_engine-0.1.0/tests/test_8F4F8458_audit_gate_git_read.py +209 -0
- bytedigger_engine-0.1.0/tests/test_906e37dc_review_findings_audit.py +464 -0
- bytedigger_engine-0.1.0/tests/test_9397B99B_suffixmap_git_read_slice3bii.py +235 -0
- bytedigger_engine-0.1.0/tests/test_9AB32375_config_provider.py +472 -0
- bytedigger_engine-0.1.0/tests/test_9ECBF1F5_stash_capture.py +361 -0
- bytedigger_engine-0.1.0/tests/test_9F3A7C21_phase6_pytest_venv_parent_climb.py +365 -0
- bytedigger_engine-0.1.0/tests/test_9F74246A_phase8_read_seam.py +299 -0
- bytedigger_engine-0.1.0/tests/test_9dd6ae54_integration_class_false_positive.py +103 -0
- bytedigger_engine-0.1.0/tests/test_B5719411_gitdiffport.py +452 -0
- bytedigger_engine-0.1.0/tests/test_BC45C403_phase6_step_sentinel_resume.py +491 -0
- bytedigger_engine-0.1.0/tests/test_BF7890C8_collect_probe_parent_venv.py +406 -0
- bytedigger_engine-0.1.0/tests/test_C27F057B_phase8_push_seam.py +176 -0
- bytedigger_engine-0.1.0/tests/test_CD3EDB8C_phase6_cite_worktree_root.py +256 -0
- bytedigger_engine-0.1.0/tests/test_D5D6A364_git_read_routing_slice2.py +417 -0
- bytedigger_engine-0.1.0/tests/test_DB259D22_pricing_load_fail_loud.py +173 -0
- bytedigger_engine-0.1.0/tests/test_DC6BD331_git_cwd_single_source.py +302 -0
- bytedigger_engine-0.1.0/tests/test_DEA3305C_git_read_routing_slice3b.py +258 -0
- bytedigger_engine-0.1.0/tests/test_E843349F_recoverable_policy.py +597 -0
- bytedigger_engine-0.1.0/tests/test_E8A5ACAB_phase1_target_repo.py +360 -0
- bytedigger_engine-0.1.0/tests/test_EECA708D_reject_reason_capture.py +334 -0
- bytedigger_engine-0.1.0/tests/test_EEFD480F_verdict_parse_lib.py +460 -0
- bytedigger_engine-0.1.0/tests/test_EEFD480F_waveB_marker_line.py +380 -0
- bytedigger_engine-0.1.0/tests/test_F3A8F4FC_phase12_sonnet_downgrade.py +389 -0
- bytedigger_engine-0.1.0/tests/test_F53A7F50_explore_target_repo.py +367 -0
- bytedigger_engine-0.1.0/tests/test_F7830037_insession_review_normalize.py +501 -0
- bytedigger_engine-0.1.0/tests/test_FDDEE42A_run_git_seam.py +165 -0
- bytedigger_engine-0.1.0/tests/test_FFEA1913_burn_guard.py +219 -0
- bytedigger_engine-0.1.0/tests/test_GH294_constitution_worktree_telemetry.py +344 -0
- bytedigger_engine-0.1.0/tests/test_GH374_restart_governor.py +257 -0
- bytedigger_engine-0.1.0/tests/test_GH374_step_sentinel_primitive.py +382 -0
- bytedigger_engine-0.1.0/tests/test_GH375_tier_model_dispatch.py +676 -0
- bytedigger_engine-0.1.0/tests/test_GH439_hard_gate_effort_pin.py +291 -0
- bytedigger_engine-0.1.0/tests/test_GH597_model_mix_phase45.py +224 -0
- bytedigger_engine-0.1.0/tests/test_GH637_pre_red_persist_order.py +329 -0
- bytedigger_engine-0.1.0/tests/test_GH681_cite_prelint_enforce.py +249 -0
- bytedigger_engine-0.1.0/tests/test_GH714_collect_probe_rootdir_pinned.py +195 -0
- bytedigger_engine-0.1.0/tests/test_GH723_producer_guard_reachability.py +159 -0
- bytedigger_engine-0.1.0/tests/test_GH749_ac_parity_single_source.py +227 -0
- bytedigger_engine-0.1.0/tests/test_GH781_integrity_verdict_forcing.py +191 -0
- bytedigger_engine-0.1.0/tests/test_GH786_integrity_completeness_gate.py +308 -0
- bytedigger_engine-0.1.0/tests/test_ab117afa_preserve_events_log.py +167 -0
- bytedigger_engine-0.1.0/tests/test_alpha0_BA456198.py +260 -0
- bytedigger_engine-0.1.0/tests/test_bounded_spawn.py +201 -0
- bytedigger_engine-0.1.0/tests/test_ccbb65dc_straggler_watchdog.py +717 -0
- bytedigger_engine-0.1.0/tests/test_checklist_convergence_lib.py +282 -0
- bytedigger_engine-0.1.0/tests/test_contracts.py +863 -0
- bytedigger_engine-0.1.0/tests/test_ctx_boundary_hardfail.py +497 -0
- bytedigger_engine-0.1.0/tests/test_derive_state.py +279 -0
- bytedigger_engine-0.1.0/tests/test_disk_truth.py +488 -0
- bytedigger_engine-0.1.0/tests/test_e8433b4e_aggregator_partial_floor.py +168 -0
- bytedigger_engine-0.1.0/tests/test_engine.py +316 -0
- bytedigger_engine-0.1.0/tests/test_engine_B07BC910.py +318 -0
- bytedigger_engine-0.1.0/tests/test_engine_W3.py +263 -0
- bytedigger_engine-0.1.0/tests/test_engine_W9.py +237 -0
- bytedigger_engine-0.1.0/tests/test_engine_path_closure.py +198 -0
- bytedigger_engine-0.1.0/tests/test_engine_retry_data_forwarding.py +297 -0
- bytedigger_engine-0.1.0/tests/test_error_locus_CCA65EB0.py +351 -0
- bytedigger_engine-0.1.0/tests/test_event_log_replay_e2e.py +133 -0
- bytedigger_engine-0.1.0/tests/test_event_sink.py +322 -0
- bytedigger_engine-0.1.0/tests/test_files_touched.py +186 -0
- bytedigger_engine-0.1.0/tests/test_findings_extractor_raw_281c9065.py +230 -0
- bytedigger_engine-0.1.0/tests/test_fix_prompt_git_log_cleanup.py +74 -0
- bytedigger_engine-0.1.0/tests/test_fix_prompt_language_cleanup.py +64 -0
- bytedigger_engine-0.1.0/tests/test_fix_watchdog.py +420 -0
- bytedigger_engine-0.1.0/tests/test_forbidden_import_fp_D6B8DF32.py +159 -0
- bytedigger_engine-0.1.0/tests/test_frozen_skip_gh531.py +366 -0
- bytedigger_engine-0.1.0/tests/test_gh282_pragma_escape.py +303 -0
- bytedigger_engine-0.1.0/tests/test_gh282_red_mass_deletion.py +439 -0
- bytedigger_engine-0.1.0/tests/test_gh285_c3_timeout_state.py +343 -0
- bytedigger_engine-0.1.0/tests/test_gh297_escalate_removal.py +266 -0
- bytedigger_engine-0.1.0/tests/test_gh373_authored_boundary.py +519 -0
- bytedigger_engine-0.1.0/tests/test_gh379_decorr_verify.py +425 -0
- bytedigger_engine-0.1.0/tests/test_gh381_git_cwd_resolver.py +394 -0
- bytedigger_engine-0.1.0/tests/test_gh382_repair_fallback_cite_lint.py +466 -0
- bytedigger_engine-0.1.0/tests/test_gh386_model_pin_removal.py +174 -0
- bytedigger_engine-0.1.0/tests/test_gh388_ac_checklist_satisfaction.py +545 -0
- bytedigger_engine-0.1.0/tests/test_gh419_frozen_revise_retry.py +340 -0
- bytedigger_engine-0.1.0/tests/test_gh426_fable_model_floor.py +158 -0
- bytedigger_engine-0.1.0/tests/test_gh432_ac_checklist_parser_contract.py +461 -0
- bytedigger_engine-0.1.0/tests/test_gh436_tamper_whitelist.py +328 -0
- bytedigger_engine-0.1.0/tests/test_gh443_delta_retry.py +296 -0
- bytedigger_engine-0.1.0/tests/test_gh449_fixcycle_commit.py +522 -0
- bytedigger_engine-0.1.0/tests/test_gh451_llm_provider_port.py +272 -0
- bytedigger_engine-0.1.0/tests/test_gh452_cost_rollups.py +282 -0
- bytedigger_engine-0.1.0/tests/test_gh482_repair_patch_validity.py +462 -0
- bytedigger_engine-0.1.0/tests/test_gh484_alarm_thread_safety.py +127 -0
- bytedigger_engine-0.1.0/tests/test_gh497_telemetry_hygiene.py +382 -0
- bytedigger_engine-0.1.0/tests/test_gh513_spec_authorized_edits.py +143 -0
- bytedigger_engine-0.1.0/tests/test_gh514_spend_limit_classify.py +229 -0
- bytedigger_engine-0.1.0/tests/test_gh514p1_frozen_review_repoll.py +326 -0
- bytedigger_engine-0.1.0/tests/test_gh514p2_phantom_path_filter.py +361 -0
- bytedigger_engine-0.1.0/tests/test_gh541_nonfrozen_review_repoll.py +270 -0
- bytedigger_engine-0.1.0/tests/test_gh542_collect_probe.py +215 -0
- bytedigger_engine-0.1.0/tests/test_gh557_resume_seam_flips.py +301 -0
- bytedigger_engine-0.1.0/tests/test_gh569_red_scope_contract.py +369 -0
- bytedigger_engine-0.1.0/tests/test_gh576_pause_lane.py +237 -0
- bytedigger_engine-0.1.0/tests/test_gh592_surgical_revise.py +429 -0
- bytedigger_engine-0.1.0/tests/test_gh594_driver_missing_fail_closed.py +129 -0
- bytedigger_engine-0.1.0/tests/test_gh595_red_lint_preflight_batch.py +475 -0
- bytedigger_engine-0.1.0/tests/test_gh605_delta_rereview.py +474 -0
- bytedigger_engine-0.1.0/tests/test_gh615_findings_normalize.py +249 -0
- bytedigger_engine-0.1.0/tests/test_gh625_restart_budget_split.py +663 -0
- bytedigger_engine-0.1.0/tests/test_gh631_declared_creates_cite_lint.py +249 -0
- bytedigger_engine-0.1.0/tests/test_gh634_ac_uncompilable_directed_repair.py +389 -0
- bytedigger_engine-0.1.0/tests/test_gh635_shortcircuit_gate_retry.py +216 -0
- bytedigger_engine-0.1.0/tests/test_gh638_delta_rereview_content_vote.py +237 -0
- bytedigger_engine-0.1.0/tests/test_gh640_security_lint_self_exempt.py +317 -0
- bytedigger_engine-0.1.0/tests/test_gh642_zero_findings_failclosed.py +394 -0
- bytedigger_engine-0.1.0/tests/test_gh674_repair_timeout_chunk.py +619 -0
- bytedigger_engine-0.1.0/tests/test_gh675_specwriter_cite_grounding.py +267 -0
- bytedigger_engine-0.1.0/tests/test_gh682_lite_cite_prelint.py +313 -0
- bytedigger_engine-0.1.0/tests/test_gh693_lite_cite_enforce.py +294 -0
- bytedigger_engine-0.1.0/tests/test_gh700_shadow_completion.py +368 -0
- bytedigger_engine-0.1.0/tests/test_gh705_callsite_stable_prefix.py +462 -0
- bytedigger_engine-0.1.0/tests/test_gh705_satisfaction_stable_prefix.py +307 -0
- bytedigger_engine-0.1.0/tests/test_gh707_reviewer_repoll_cap.py +350 -0
- bytedigger_engine-0.1.0/tests/test_gh724_finalize_preflight.py +146 -0
- bytedigger_engine-0.1.0/tests/test_gh726_surgical_parse_failsoft.py +180 -0
- bytedigger_engine-0.1.0/tests/test_gh729_cycle2_high_binding_parity.py +474 -0
- bytedigger_engine-0.1.0/tests/test_gh747_spec_preflight_batch.py +383 -0
- bytedigger_engine-0.1.0/tests/test_gh751_satisfaction_spec_anchor.py +303 -0
- bytedigger_engine-0.1.0/tests/test_gh780_manifest_nondict.py +200 -0
- bytedigger_engine-0.1.0/tests/test_gh792_native_sentinel_emit.py +662 -0
- bytedigger_engine-0.1.0/tests/test_gh795_resolver_emit_seam.py +701 -0
- bytedigger_engine-0.1.0/tests/test_gh804_manifest_consumer_holes.py +373 -0
- bytedigger_engine-0.1.0/tests/test_gh834fix_model_config_absent.py +74 -0
- bytedigger_engine-0.1.0/tests/test_gh863_helper_extraction_gate.py +361 -0
- bytedigger_engine-0.1.0/tests/test_git_port.py +456 -0
- bytedigger_engine-0.1.0/tests/test_graph_source_DA48BEAC.py +170 -0
- bytedigger_engine-0.1.0/tests/test_green_complete_resume_gh483.py +532 -0
- bytedigger_engine-0.1.0/tests/test_green_typecheck_baseline_5C14EF32.py +670 -0
- bytedigger_engine-0.1.0/tests/test_green_watchdog_complexity_scaling.py +226 -0
- bytedigger_engine-0.1.0/tests/test_helper_W10.py +269 -0
- bytedigger_engine-0.1.0/tests/test_io_utils.py +227 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess.py +431 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_23680DDA.py +1238 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_775D6752.py +1520 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_91AF3612.py +373 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_E6F86B73.py +205 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_W1.py +357 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_allowed_tools.py +920 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_hard_gate.py +376 -0
- bytedigger_engine-0.1.0/tests/test_llm_subprocess_stream_gap.py +482 -0
- bytedigger_engine-0.1.0/tests/test_loop_runner.py +296 -0
- bytedigger_engine-0.1.0/tests/test_path_classifier_A1D4A4C9.py +150 -0
- bytedigger_engine-0.1.0/tests/test_phase5_bounded_run_BFEC3E71.py +713 -0
- bytedigger_engine-0.1.0/tests/test_phase5_test_only_verify_gates.py +334 -0
- bytedigger_engine-0.1.0/tests/test_phase6_bounded_run_7D2BAD22.py +377 -0
- bytedigger_engine-0.1.0/tests/test_phase_05_inject_12334B92.py +110 -0
- bytedigger_engine-0.1.0/tests/test_phase_05_inject_BF6CB291.py +468 -0
- bytedigger_engine-0.1.0/tests/test_phase_0_research.py +146 -0
- bytedigger_engine-0.1.0/tests/test_phase_1_discovery.py +966 -0
- bytedigger_engine-0.1.0/tests/test_phase_2_explore.py +945 -0
- bytedigger_engine-0.1.0/tests/test_phase_3_clarify.py +617 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_ac_dsl_wiring_GH517A2.py +428 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_reviewer_cross_check_e94afd31.py +144 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_8A9C0F24.py +163 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_D02C615D.py +461 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_DA5330E9_suffix_map.py +459 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_EECB919C.py +452 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_cite_fallback_3F5599A6.py +345 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_complexity_timeouts.py +176 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_complexity_timeouts_D1F51D7A.py +261 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_cycle1_verdict.py +353 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_lite_citation_autocorrect_32ED4070.py +582 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_lite_cycle1_verdict.py +293 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_lite_step5_structured_verdict.py +298 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_model_aware_timeouts_F88217EB.py +201 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_spec_telemetry_D7B5BFB3.py +497 -0
- bytedigger_engine-0.1.0/tests/test_phase_45_verdict_synonyms_7f129bca.py +89 -0
- bytedigger_engine-0.1.0/tests/test_phase_4_architect.py +551 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_32C49788_green_watchdog_token_alert.py +263 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_5325B280_three_bugs.py +515 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_9EDB7588_commit_idempotency.py +384 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_AD14A3ED_red_scope.py +450 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_C844CC77_root_sibling_discovery.py +233 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_canary_event_type_from_spec_36269734.py +606 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_commit_only_paths_7DDD9529.py +396 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_gate_structured_verdict.py +279 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_gate_verdict_canonical_gh349.py +289 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_graphfirst_DA48BEAC.py +318 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_green_watchdog_step_pilot.py +114 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_haldir_worktree_env_4F5EC99D.py +209 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_477B3143.py +46 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_53BB3810.py +455 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_69AA5237.py +202 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_A3398552.py +320 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_B1AAACFB_sub1.py +180 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_B560A2D3.py +196 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_B6247E87.py +409 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_B7442146.py +397 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_CF9CCFE7.py +63 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_F96D3539.py +211 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_GH727.py +246 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_W11.py +113 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_W13.py +109 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_W4.py +238 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_W7.py +152 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_complexity_timeouts.py +126 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_implement_emit_safe_severity.py +93 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_integration_canary.py +245 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_integrity.py +1072 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_p0_escalate_585E30E3.py +638 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_p1a_suite_safety_585E30E3.py +330 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_p1b_reproducibility_585E30E3.py +365 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_p3_net_new_added_hard_fail_14F6DCD4.py +442 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_phase_1b_default_flip_C0B5C6E1.py +265 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_pillar3_mechanical_pytest.py +88 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_red_disk_fallback_9F2A50E8.py +432 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_retry_cycle_gh348.py +490 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_step1_disk_truth.py +322 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_step2_verify_red.py +287 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_step3_verify_green.py +327 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_step4_validation_schema.py +238 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_step5_commit_green_code.py +410 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_test_only_mode_885AAE33.py +464 -0
- bytedigger_engine-0.1.0/tests/test_phase_5_venv_pytest_D8CB354F.py +254 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_1F39FB1A_soft_tag.py +945 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_CA50885D_suspect_fail_open.py +353 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_FEB64BA8_backtick_strip.py +830 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_build_scope_prompt.py +310 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_commit_fix_code_pre_ref_early_7B6A9AD1.py +335 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_commit_fix_tests_8FE3D757.py +860 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_degrade_fail_loud_F81D5EF7.py +461 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_fix_bash_removed.py +216 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_fix_inline_head_tests_65EA1B86.py +624 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_fix_integrity.py +545 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_fix_structured_verdict.py +484 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_fuzzy_citation_match_A37D4F04.py +450 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_idle_timeout_invariant.py +116 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_last_findings_persist_c834481a.py +433 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_mass_unverified_5F9817F6.py +323 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_post_fix_pytest_gate_7A940850.py +757 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_post_fix_typecheck_gate_GH316.py +906 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_postfix_and_polish_3F5599A6.py +470 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_r5_skip_guard_3CE7007C.py +364 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_review_21792EE7.py +540 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_review_E52F241F.py +99 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_review_W2.py +370 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_review_return_discipline_CF838E6F.py +643 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_review_simple_fastpath.py +162 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_review_timeout_920C6935.py +238 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_reviewer_suspect_rate_D3492E45.py +895 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_rubric_trim_5D0D3BD1.py +162 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_gate_strict_and_9702b73f.py +894 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_multi_evaluator.py +966 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_prompt_binding_1C24581F.py +424 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_satisfaction_structured_verdict.py +507 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_stdout_fallback_verdict_4E0BAC38.py +414 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_step10_commit_fix_code.py +690 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_step7_w1_disk_truth.py +485 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_subagent_prior_context_propagation_7ca211d2.py +280 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_test_only_note_FF2CB91D.py +339 -0
- bytedigger_engine-0.1.0/tests/test_phase_6_verified_only_gate_65695203.py +832 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_resume_context.py +228 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_step8_disk_truth.py +412 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_step8_disk_truth_error.py +383 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_step8_disk_truth_subset.py +419 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_synthesize.py +682 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_synthesize_W11.py +216 -0
- bytedigger_engine-0.1.0/tests/test_phase_7_synthesizer_structured_verdict.py +605 -0
- bytedigger_engine-0.1.0/tests/test_phase_8_full_suite_delta.py +604 -0
- bytedigger_engine-0.1.0/tests/test_phase_8_post_deploy_6CBC19FA.py +137 -0
- bytedigger_engine-0.1.0/tests/test_phase_8_post_deploy_W8.py +468 -0
- bytedigger_engine-0.1.0/tests/test_phase_8_ship_to_pr_98364258.py +807 -0
- bytedigger_engine-0.1.0/tests/test_phase_graph_ensure_EEFC4611.py +227 -0
- bytedigger_engine-0.1.0/tests/test_phase_graph_wiring_DA48BEAC.py +265 -0
- bytedigger_engine-0.1.0/tests/test_r_prime_ship2a_list_runs.py +379 -0
- bytedigger_engine-0.1.0/tests/test_r_prime_ship2b_status_run.py +306 -0
- bytedigger_engine-0.1.0/tests/test_register_backend_A60F1FE3.py +459 -0
- bytedigger_engine-0.1.0/tests/test_satisfaction_abspath_fix_13854ED4.py +189 -0
- bytedigger_engine-0.1.0/tests/test_spec_cite_gh366_367.py +263 -0
- bytedigger_engine-0.1.0/tests/test_spec_coverage_extract_ops_label_184717A7.py +223 -0
- bytedigger_engine-0.1.0/tests/test_spec_lint_batch_wiring_GH559.py +419 -0
- bytedigger_engine-0.1.0/tests/test_spec_retry_cycle.py +219 -0
- bytedigger_engine-0.1.0/tests/test_step_retry.py +272 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_FD2592D9.py +548 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_architect_775B49B3.py +683 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_clarify_C59DD079.py +680 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_discovery_3AAB77FA.py +554 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_explore_42376F1B.py +695 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_fix_DACC8E2B.py +722 -0
- bytedigger_engine-0.1.0/tests/test_subagent_return_discipline_satisfaction_1A07C325.py +928 -0
- bytedigger_engine-0.1.0/tests/test_subprocess_telemetry.py +431 -0
- bytedigger_engine-0.1.0/tests/test_timeout_policy_GH285.py +366 -0
- bytedigger_engine-0.1.0/tier_gate.py +117 -0
- bytedigger_engine-0.1.0/token_consistency.py +55 -0
- bytedigger_engine-0.1.0/verdict_anchor.py +205 -0
- bytedigger_engine-0.1.0/verdict_gate.py +75 -0
- bytedigger_engine-0.1.0/verdict_verify.py +470 -0
- bytedigger_engine-0.1.0/workflows/__init__.py +46 -0
- bytedigger_engine-0.1.0/workflows/_baseline_delta.py +79 -0
- bytedigger_engine-0.1.0/workflows/_recoverable_policy.py +98 -0
- bytedigger_engine-0.1.0/workflows/_standards_context.py +103 -0
- bytedigger_engine-0.1.0/workflows/_task_description.py +25 -0
- bytedigger_engine-0.1.0/workflows/echo.py +18 -0
- bytedigger_engine-0.1.0/workflows/graph_source.py +126 -0
- bytedigger_engine-0.1.0/workflows/phase_05_inject.py +1086 -0
- bytedigger_engine-0.1.0/workflows/phase_0_6_artifact_detect.py +137 -0
- bytedigger_engine-0.1.0/workflows/phase_0_research.py +86 -0
- bytedigger_engine-0.1.0/workflows/phase_1_discovery.py +543 -0
- bytedigger_engine-0.1.0/workflows/phase_2_explore.py +492 -0
- bytedigger_engine-0.1.0/workflows/phase_3_clarify.py +380 -0
- bytedigger_engine-0.1.0/workflows/phase_45_spec.py +4212 -0
- bytedigger_engine-0.1.0/workflows/phase_45_spec_lite.py +1289 -0
- bytedigger_engine-0.1.0/workflows/phase_4_architect.py +407 -0
- bytedigger_engine-0.1.0/workflows/phase_5_devops_scan.py +391 -0
- bytedigger_engine-0.1.0/workflows/phase_5_implement.py +5958 -0
- bytedigger_engine-0.1.0/workflows/phase_5_integration_canary.py +233 -0
- bytedigger_engine-0.1.0/workflows/phase_5_integrity.py +579 -0
- bytedigger_engine-0.1.0/workflows/phase_6_fix_integrity.py +635 -0
- bytedigger_engine-0.1.0/workflows/phase_6_review.py +4975 -0
- bytedigger_engine-0.1.0/workflows/phase_6_review_simple_fastpath.py +95 -0
- bytedigger_engine-0.1.0/workflows/phase_6_smoke.py +119 -0
- bytedigger_engine-0.1.0/workflows/phase_7_synthesize.py +739 -0
- bytedigger_engine-0.1.0/workflows/phase_8_post_deploy.py +1590 -0
- bytedigger_engine-0.1.0/workflows/phase_devops_pipeline.py +69 -0
- 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).
|