code-mower 0.5.0b9__tar.gz → 0.5.0b11__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.
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/PKG-INFO +12 -8
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/README.md +11 -7
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/pyproject.toml +1 -1
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/__init__.py +1 -1
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/claude_audit_pr.py +15 -78
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/clear_stale.py +18 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cli.py +40 -75
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud.py +5 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/operations.py +11 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/codex_audit_pr.py +32 -65
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/init.py +122 -1
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/package_content.py +17 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/package_manifest.py +10 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/__init__.py +20 -0
- code_mower-0.5.0b11/src/code_mower/provider_runners/pr_worktree.py +152 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/code-mower.example.yml +6 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/providers.yml +6 -2
- code_mower-0.5.0b11/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +41 -0
- code_mower-0.5.0b11/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +47 -0
- code_mower-0.5.0b11/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +34 -0
- code_mower-0.5.0b11/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +58 -0
- code_mower-0.5.0b11/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +57 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower.egg-info/PKG-INFO +12 -8
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower.egg-info/SOURCES.txt +7 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/claude_audit.yml +3 -1
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/codex.yml +3 -1
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers.yml +6 -2
- code_mower-0.5.0b11/templates/workflows/audit-label-cleanup.yml.j2 +41 -0
- code_mower-0.5.0b11/templates/workflows/hosted-bridge.yml.j2 +47 -0
- code_mower-0.5.0b11/templates/workflows/local-cli-audit.yml.j2 +34 -0
- code_mower-0.5.0b11/templates/workflows/saas-reviewer-labeler.yml.j2 +58 -0
- code_mower-0.5.0b11/templates/workflows/trailer-comment-labeler.yml.j2 +57 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_clear_stale.py +5 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_cloud_client.py +8 -0
- code_mower-0.5.0b11/tests/test_provider_runners_pr_worktree.py +115 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_release_hygiene.py +242 -37
- code_mower-0.5.0b9/templates/workflows/audit-label-cleanup.yml.j2 +0 -10
- code_mower-0.5.0b9/templates/workflows/hosted-bridge.yml.j2 +0 -10
- code_mower-0.5.0b9/templates/workflows/local-cli-audit.yml.j2 +0 -10
- code_mower-0.5.0b9/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -10
- code_mower-0.5.0b9/templates/workflows/trailer-comment-labeler.yml.j2 +0 -10
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/LICENSE +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/MANIFEST.in +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/NOTICE +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/SUPPORT.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/requirements/requirements.txt +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/setup.cfg +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/checks.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/config.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/migration.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/package.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/package_static.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/prompts.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_registry.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/secrets.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower/versioning.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/aider.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/devin.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/gitar.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/greptile.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/providers/qodo.yml +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_checks.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_output.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_doctor_registry.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.5.0b9 → code_mower-0.5.0b11}/tests/test_reviewer_metrics_core.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b11
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -98,11 +98,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
python3.12 --version
|
|
101
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
101
|
+
pipx install --python python3.12 code-mower==0.5.0b11
|
|
102
102
|
code-mower --version
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
`0.5.
|
|
105
|
+
`0.5.0b11` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
106
106
|
line, use the explicit beta version above or allow prereleases with:
|
|
107
107
|
|
|
108
108
|
```bash
|
|
@@ -143,6 +143,10 @@ every disposition before using it for lane promotion or merge policy.
|
|
|
143
143
|
Full walkthrough: [docs/try-in-10-minutes.md](docs/try-in-10-minutes.md).
|
|
144
144
|
First-time command map: [docs/launch-command-surface.md](docs/launch-command-surface.md).
|
|
145
145
|
|
|
146
|
+
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
147
|
+
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
148
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b11`.
|
|
149
|
+
|
|
146
150
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
147
151
|
|
|
148
152
|
You should, at first. Code Mower is not a replacement for a good local agent or
|
|
@@ -246,11 +250,11 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
246
250
|
|
|
247
251
|
## Installation Status
|
|
248
252
|
|
|
249
|
-
The current public beta is `v0.5.0-beta.
|
|
250
|
-
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower),
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
253
|
+
The current public beta is `v0.5.0-beta.11` from
|
|
254
|
+
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
255
|
+
as `code-mower==0.5.0b11` on [PyPI](https://pypi.org/project/code-mower/).
|
|
256
|
+
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
257
|
+
release notes.
|
|
254
258
|
|
|
255
259
|
For source checkout development and release rehearsal, use:
|
|
256
260
|
|
|
@@ -86,11 +86,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
python3.12 --version
|
|
89
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
89
|
+
pipx install --python python3.12 code-mower==0.5.0b11
|
|
90
90
|
code-mower --version
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
`0.5.
|
|
93
|
+
`0.5.0b11` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
94
94
|
line, use the explicit beta version above or allow prereleases with:
|
|
95
95
|
|
|
96
96
|
```bash
|
|
@@ -131,6 +131,10 @@ every disposition before using it for lane promotion or merge policy.
|
|
|
131
131
|
Full walkthrough: [docs/try-in-10-minutes.md](docs/try-in-10-minutes.md).
|
|
132
132
|
First-time command map: [docs/launch-command-surface.md](docs/launch-command-surface.md).
|
|
133
133
|
|
|
134
|
+
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
135
|
+
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
136
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b11`.
|
|
137
|
+
|
|
134
138
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
135
139
|
|
|
136
140
|
You should, at first. Code Mower is not a replacement for a good local agent or
|
|
@@ -234,11 +238,11 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
234
238
|
|
|
235
239
|
## Installation Status
|
|
236
240
|
|
|
237
|
-
The current public beta is `v0.5.0-beta.
|
|
238
|
-
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower),
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
241
|
+
The current public beta is `v0.5.0-beta.11` from
|
|
242
|
+
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
243
|
+
as `code-mower==0.5.0b11` on [PyPI](https://pypi.org/project/code-mower/).
|
|
244
|
+
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
245
|
+
release notes.
|
|
242
246
|
|
|
243
247
|
For source checkout development and release rehearsal, use:
|
|
244
248
|
|
|
@@ -32,13 +32,17 @@ if __package__ in {None, "", "tools"}:
|
|
|
32
32
|
from tools.provider_runners import (
|
|
33
33
|
clip_text as _clip_text,
|
|
34
34
|
fetch_pull_request,
|
|
35
|
+
fetch_base_ref_sha as _shared_fetch_base_ref_sha,
|
|
36
|
+
fetch_pr_head_sha as _shared_fetch_pr_head_sha,
|
|
35
37
|
limit_comment_body,
|
|
36
38
|
one_line as _one_line,
|
|
37
39
|
parse_repo_paths as _parse_repo_paths,
|
|
38
40
|
post_pr_comment,
|
|
41
|
+
FetchedHeadMismatch,
|
|
39
42
|
repost_audit_verdict_artifact,
|
|
40
43
|
require_exact_keys as _require_exact_keys,
|
|
41
44
|
resolve_github_token_from_stdin_or_env,
|
|
45
|
+
run_git_text as _shared_run_git_text,
|
|
42
46
|
write_audit_verdict_artifact,
|
|
43
47
|
)
|
|
44
48
|
except ImportError: # pragma: no cover - direct script execution fallback
|
|
@@ -51,13 +55,17 @@ if __package__ in {None, "", "tools"}:
|
|
|
51
55
|
from provider_runners import ( # type: ignore
|
|
52
56
|
clip_text as _clip_text,
|
|
53
57
|
fetch_pull_request,
|
|
58
|
+
fetch_base_ref_sha as _shared_fetch_base_ref_sha,
|
|
59
|
+
fetch_pr_head_sha as _shared_fetch_pr_head_sha,
|
|
54
60
|
limit_comment_body,
|
|
55
61
|
one_line as _one_line,
|
|
56
62
|
parse_repo_paths as _parse_repo_paths,
|
|
57
63
|
post_pr_comment,
|
|
64
|
+
FetchedHeadMismatch,
|
|
58
65
|
repost_audit_verdict_artifact,
|
|
59
66
|
require_exact_keys as _require_exact_keys,
|
|
60
67
|
resolve_github_token_from_stdin_or_env,
|
|
68
|
+
run_git_text as _shared_run_git_text,
|
|
61
69
|
write_audit_verdict_artifact,
|
|
62
70
|
)
|
|
63
71
|
else: # pragma: no cover - exercised after package extraction.
|
|
@@ -65,8 +73,11 @@ else: # pragma: no cover - exercised after package extraction.
|
|
|
65
73
|
from .audit_progress import AuditProgress, run_subprocess_with_progress
|
|
66
74
|
from .claude_cli_environment import clean_claude_cli_env, env_flag
|
|
67
75
|
from .provider_runners import (
|
|
76
|
+
FetchedHeadMismatch,
|
|
68
77
|
clip_text as _clip_text,
|
|
78
|
+
fetch_base_ref_sha as _shared_fetch_base_ref_sha,
|
|
69
79
|
fetch_pull_request,
|
|
80
|
+
fetch_pr_head_sha as _shared_fetch_pr_head_sha,
|
|
70
81
|
limit_comment_body,
|
|
71
82
|
one_line as _one_line,
|
|
72
83
|
parse_repo_paths as _parse_repo_paths,
|
|
@@ -74,6 +85,7 @@ else: # pragma: no cover - exercised after package extraction.
|
|
|
74
85
|
repost_audit_verdict_artifact,
|
|
75
86
|
require_exact_keys as _require_exact_keys,
|
|
76
87
|
resolve_github_token_from_stdin_or_env,
|
|
88
|
+
run_git_text as _shared_run_git_text,
|
|
77
89
|
write_audit_verdict_artifact,
|
|
78
90
|
)
|
|
79
91
|
|
|
@@ -175,15 +187,6 @@ class ClaudeAuditResult:
|
|
|
175
187
|
verdict_artifact_path: Optional[Path] = None
|
|
176
188
|
|
|
177
189
|
|
|
178
|
-
class FetchedHeadMismatch(RuntimeError):
|
|
179
|
-
def __init__(self, expected_sha: str, actual_sha: str) -> None:
|
|
180
|
-
self.expected_sha = expected_sha
|
|
181
|
-
self.actual_sha = actual_sha
|
|
182
|
-
super().__init__(
|
|
183
|
-
f"fetched PR head {actual_sha} does not match expected {expected_sha}"
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
|
|
187
190
|
@dataclass(frozen=True)
|
|
188
191
|
class DiffContext:
|
|
189
192
|
stat: str
|
|
@@ -365,81 +368,15 @@ def _timeout_output(value: Any) -> str:
|
|
|
365
368
|
|
|
366
369
|
|
|
367
370
|
def _run_git(local_repo: Path, args: List[str], *, timeout: int = 60) -> str:
|
|
368
|
-
|
|
369
|
-
["git", "-C", str(local_repo), *args],
|
|
370
|
-
check=True,
|
|
371
|
-
text=True,
|
|
372
|
-
capture_output=True,
|
|
373
|
-
timeout=timeout,
|
|
374
|
-
)
|
|
375
|
-
return result.stdout
|
|
371
|
+
return _shared_run_git_text(local_repo, args, timeout=timeout)
|
|
376
372
|
|
|
377
373
|
|
|
378
374
|
def _fetch_base_sha_for_diff(local_repo: Path, base_ref: str) -> str:
|
|
379
|
-
|
|
380
|
-
if base_ref.startswith("origin/"):
|
|
381
|
-
remote_branch = base_ref[len("origin/") :]
|
|
382
|
-
local_ref = f"refs/remotes/origin/{remote_branch}"
|
|
383
|
-
fetch_refspec = f"+{remote_branch}:{local_ref}"
|
|
384
|
-
elif base_ref.startswith("refs/heads/"):
|
|
385
|
-
remote_branch = base_ref[len("refs/heads/") :]
|
|
386
|
-
local_ref = f"refs/remotes/origin/{remote_branch}"
|
|
387
|
-
fetch_refspec = f"+{base_ref}:{local_ref}"
|
|
388
|
-
elif "/" not in base_ref:
|
|
389
|
-
local_ref = f"refs/remotes/origin/{base_ref}"
|
|
390
|
-
fetch_refspec = f"+{base_ref}:{local_ref}"
|
|
391
|
-
else:
|
|
392
|
-
local_ref = f"refs/code-mower/base/{os.getpid()}-{secrets.token_hex(8)}"
|
|
393
|
-
fetch_refspec = f"+{base_ref}:{local_ref}"
|
|
394
|
-
temporary_ref = True
|
|
395
|
-
try:
|
|
396
|
-
subprocess.run(
|
|
397
|
-
["git", "-C", str(local_repo), "fetch", "origin", fetch_refspec],
|
|
398
|
-
check=True,
|
|
399
|
-
capture_output=True,
|
|
400
|
-
text=True,
|
|
401
|
-
)
|
|
402
|
-
return _run_git(
|
|
403
|
-
local_repo,
|
|
404
|
-
["rev-parse", "--verify", f"{local_ref}^{{commit}}"],
|
|
405
|
-
).strip()
|
|
406
|
-
finally:
|
|
407
|
-
if temporary_ref:
|
|
408
|
-
subprocess.run(
|
|
409
|
-
["git", "-C", str(local_repo), "update-ref", "-d", local_ref],
|
|
410
|
-
check=False,
|
|
411
|
-
capture_output=True,
|
|
412
|
-
text=True,
|
|
413
|
-
)
|
|
375
|
+
return _shared_fetch_base_ref_sha(local_repo, base_ref)
|
|
414
376
|
|
|
415
377
|
|
|
416
378
|
def _fetch_pr_head_sha_for_diff(local_repo: Path, pr_number: int) -> str:
|
|
417
|
-
|
|
418
|
-
try:
|
|
419
|
-
subprocess.run(
|
|
420
|
-
[
|
|
421
|
-
"git",
|
|
422
|
-
"-C",
|
|
423
|
-
str(local_repo),
|
|
424
|
-
"fetch",
|
|
425
|
-
"origin",
|
|
426
|
-
f"+pull/{pr_number}/head:{local_ref}",
|
|
427
|
-
],
|
|
428
|
-
check=True,
|
|
429
|
-
capture_output=True,
|
|
430
|
-
text=True,
|
|
431
|
-
)
|
|
432
|
-
return _run_git(
|
|
433
|
-
local_repo,
|
|
434
|
-
["rev-parse", "--verify", f"{local_ref}^{{commit}}"],
|
|
435
|
-
).strip()
|
|
436
|
-
finally:
|
|
437
|
-
subprocess.run(
|
|
438
|
-
["git", "-C", str(local_repo), "update-ref", "-d", local_ref],
|
|
439
|
-
check=False,
|
|
440
|
-
capture_output=True,
|
|
441
|
-
text=True,
|
|
442
|
-
)
|
|
379
|
+
return _shared_fetch_pr_head_sha(local_repo, pr_number)
|
|
443
380
|
|
|
444
381
|
|
|
445
382
|
def _clip_bytes(text: str, max_bytes: int) -> Tuple[str, bool]:
|
|
@@ -80,6 +80,9 @@ class StaleClearResult:
|
|
|
80
80
|
reason: str
|
|
81
81
|
requeue_added: bool = False
|
|
82
82
|
dispatch_requested: bool = False
|
|
83
|
+
trusted_terminal_status: Optional[str] = None
|
|
84
|
+
trusted_terminal_sha: Optional[str] = None
|
|
85
|
+
trusted_terminal_author: Optional[str] = None
|
|
83
86
|
|
|
84
87
|
|
|
85
88
|
def _comment_created_at(comment: dict[str, Any]) -> str:
|
|
@@ -148,6 +151,9 @@ def resolve_stale_clear_decision(
|
|
|
148
151
|
f"terminal label is current: {current_comment.status} by "
|
|
149
152
|
f"{current_comment.author} for {current_comment.reviewed_sha}"
|
|
150
153
|
),
|
|
154
|
+
trusted_terminal_status=current_comment.status,
|
|
155
|
+
trusted_terminal_sha=current_comment.reviewed_sha,
|
|
156
|
+
trusted_terminal_author=current_comment.author,
|
|
151
157
|
)
|
|
152
158
|
return StaleClearResult(
|
|
153
159
|
LabelDecision(
|
|
@@ -164,6 +170,9 @@ def resolve_stale_clear_decision(
|
|
|
164
170
|
"terminal audit label mismatch for current trusted "
|
|
165
171
|
f"{current_comment.status} result"
|
|
166
172
|
),
|
|
173
|
+
trusted_terminal_status=current_comment.status,
|
|
174
|
+
trusted_terminal_sha=current_comment.reviewed_sha,
|
|
175
|
+
trusted_terminal_author=current_comment.author,
|
|
167
176
|
)
|
|
168
177
|
|
|
169
178
|
decision = LabelDecision(
|
|
@@ -179,6 +188,9 @@ def resolve_stale_clear_decision(
|
|
|
179
188
|
decision,
|
|
180
189
|
"terminal audit label is stale or lacks a current trusted Head SHA",
|
|
181
190
|
requeue_added=config.needs_label not in label_set,
|
|
191
|
+
trusted_terminal_status=current_comment.status if current_comment else None,
|
|
192
|
+
trusted_terminal_sha=current_comment.reviewed_sha if current_comment else None,
|
|
193
|
+
trusted_terminal_author=current_comment.author if current_comment else None,
|
|
182
194
|
)
|
|
183
195
|
|
|
184
196
|
|
|
@@ -356,6 +368,12 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
|
|
|
356
368
|
"decision": result.decision.__dict__ if result.decision else None,
|
|
357
369
|
"requeue_added": result.requeue_added,
|
|
358
370
|
"dispatch_requested": dispatch_requested,
|
|
371
|
+
"trusted_terminal": {
|
|
372
|
+
"status": result.trusted_terminal_status,
|
|
373
|
+
"reviewed_sha": result.trusted_terminal_sha,
|
|
374
|
+
"author": result.trusted_terminal_author,
|
|
375
|
+
"head_bound": bool(result.trusted_terminal_sha),
|
|
376
|
+
},
|
|
359
377
|
}
|
|
360
378
|
if args.json or args.dry_run:
|
|
361
379
|
print(json.dumps(output, indent=2, sort_keys=True))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
2
|
+
"""Command dispatcher for the packaged Code Mower CLI."""
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
@@ -11,82 +11,47 @@ import urllib.error
|
|
|
11
11
|
import urllib.request
|
|
12
12
|
from collections.abc import Callable
|
|
13
13
|
from pathlib import Path
|
|
14
|
-
|
|
15
14
|
if __package__ in {None, ""}:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
from tools import (
|
|
21
|
-
antigravity_cli_audit_pr,
|
|
22
|
-
blind_review_coordinator,
|
|
23
|
-
bootstrap as code_mower_bootstrap,
|
|
24
|
-
claude_audit_pr,
|
|
25
|
-
claude_cli_bounce,
|
|
26
|
-
clear_stale,
|
|
27
|
-
coderabbit_cli_audit_pr,
|
|
28
|
-
codex_audit_env_preflight,
|
|
29
|
-
codex_audit_pr,
|
|
30
|
-
codex_audit_schema_smoke,
|
|
31
|
-
hermes_cli_audit_pr,
|
|
32
|
-
code_mower_builder_experiment,
|
|
33
|
-
code_mower_cloud,
|
|
34
|
-
code_mower_config,
|
|
35
|
-
code_mower_calibration,
|
|
36
|
-
code_mower_context_packs,
|
|
37
|
-
code_mower_doctor,
|
|
38
|
-
code_mower_init,
|
|
39
|
-
code_mower_merge,
|
|
40
|
-
code_mower_next_steps,
|
|
41
|
-
code_mower_package,
|
|
42
|
-
code_mower_prompts,
|
|
43
|
-
code_mower_telemetry,
|
|
44
|
-
migration as code_mower_migration,
|
|
45
|
-
gemini_cli_audit_pr,
|
|
46
|
-
local_llm_bakeoff,
|
|
47
|
-
local_llm_calibration,
|
|
48
|
-
local_llm_audit_pr,
|
|
49
|
-
local_llm_profiles,
|
|
50
|
-
reviewer_metrics,
|
|
51
|
-
saas_reviewer_labeler,
|
|
52
|
-
trailer_comment_labeler,
|
|
15
|
+
raise SystemExit(
|
|
16
|
+
"code_mower.cli is a packaged entrypoint. Install Code Mower with "
|
|
17
|
+
"`pipx install code-mower==0.5.0b11`, or run source checkouts with "
|
|
18
|
+
"`PYTHONPATH=src python -m code_mower.cli`."
|
|
53
19
|
)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
from . import trailer_comment_labeler
|
|
20
|
+
|
|
21
|
+
from . import __version__
|
|
22
|
+
from . import antigravity_cli_audit_pr
|
|
23
|
+
from . import blind_review_coordinator
|
|
24
|
+
from . import bootstrap as code_mower_bootstrap
|
|
25
|
+
from . import builder_experiment as code_mower_builder_experiment
|
|
26
|
+
from . import checks as code_mower_checks
|
|
27
|
+
from . import claude_audit_pr
|
|
28
|
+
from . import claude_cli_bounce
|
|
29
|
+
from . import clear_stale
|
|
30
|
+
from . import cloud as code_mower_cloud
|
|
31
|
+
from . import coderabbit_cli_audit_pr
|
|
32
|
+
from . import codex_audit_env_preflight
|
|
33
|
+
from . import codex_audit_pr
|
|
34
|
+
from . import codex_audit_schema_smoke
|
|
35
|
+
from . import code_mower_calibration
|
|
36
|
+
from . import code_mower_context_packs
|
|
37
|
+
from . import code_mower_merge
|
|
38
|
+
from . import code_mower_telemetry
|
|
39
|
+
from . import config as code_mower_config
|
|
40
|
+
from . import doctor as code_mower_doctor
|
|
41
|
+
from . import gemini_cli_audit_pr
|
|
42
|
+
from . import hermes_cli_audit_pr
|
|
43
|
+
from . import init as code_mower_init
|
|
44
|
+
from . import local_llm_audit_pr
|
|
45
|
+
from . import local_llm_bakeoff
|
|
46
|
+
from . import local_llm_calibration
|
|
47
|
+
from . import local_llm_profiles
|
|
48
|
+
from . import migration as code_mower_migration
|
|
49
|
+
from . import next_steps as code_mower_next_steps
|
|
50
|
+
from . import package as code_mower_package
|
|
51
|
+
from . import prompts as code_mower_prompts
|
|
52
|
+
from . import reviewer_metrics
|
|
53
|
+
from . import saas_reviewer_labeler
|
|
54
|
+
from . import trailer_comment_labeler
|
|
90
55
|
|
|
91
56
|
|
|
92
57
|
def _has_positional_config(argv: list[str], options_with_values: set[str]) -> bool:
|
|
@@ -602,6 +602,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
602
602
|
print(f"Repository: {result['repo_slug']}")
|
|
603
603
|
print(f"Runs: {result['run_count']}")
|
|
604
604
|
print("Provenance: imported history (not calibration evidence)")
|
|
605
|
+
guidance = result.get("catch_up", {}).get("trust_guidance", {})
|
|
606
|
+
if guidance:
|
|
607
|
+
print(f"Use for: {guidance.get('use_for', '')}")
|
|
608
|
+
print(f"Do not use for: {guidance.get('do_not_use_for', '')}")
|
|
609
|
+
print(f"Next: {guidance.get('next_step', '')}")
|
|
605
610
|
print(f"Bundle: {result['export']['output_dir']}")
|
|
606
611
|
print(f"Events: {result['export']['event_count']}")
|
|
607
612
|
if result["status"] == "uploaded":
|
|
@@ -23,6 +23,16 @@ from .setup import DEFAULT_INSTALL_ID_ENV, DEFAULT_TEAM_ID_ENV
|
|
|
23
23
|
from .upload import build_upload_payload, post_upload_payload
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
CATCH_UP_TRUST_GUIDANCE = {
|
|
27
|
+
"use_for": "historical activity context and dashboard coverage backfill",
|
|
28
|
+
"do_not_use_for": "reviewer or lens accuracy, lane promotion, or merge-gate policy",
|
|
29
|
+
"next_step": (
|
|
30
|
+
"run current dogfood uploads plus reviewer-runs or calibration evidence "
|
|
31
|
+
"before making provider/lens decisions"
|
|
32
|
+
),
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
26
36
|
def build_catch_up_summary(
|
|
27
37
|
*,
|
|
28
38
|
repo_slug: str,
|
|
@@ -63,6 +73,7 @@ def build_catch_up_summary(
|
|
|
63
73
|
"source_category": "history",
|
|
64
74
|
"history_only": True,
|
|
65
75
|
"calibration_evidence": False,
|
|
76
|
+
"trust_guidance": CATCH_UP_TRUST_GUIDANCE,
|
|
66
77
|
"git_ref_included": include_git_ref,
|
|
67
78
|
"workflow_counts": dict(sorted(workflow_counts.items())),
|
|
68
79
|
"status_counts": dict(sorted(status_counts.items())),
|