code-mower 1.1.0__tar.gz → 1.1.2__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-1.1.0 → code_mower-1.1.2}/PKG-INFO +7 -5
- {code_mower-1.1.0 → code_mower-1.1.2}/README.md +6 -4
- {code_mower-1.1.0 → code_mower-1.1.2}/pyproject.toml +1 -1
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/__init__.py +1 -1
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/campaign_adapters.py +14 -2
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/adoption.py +11 -1
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/runner.py +7 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/jira_cloud.py +41 -15
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/release_campaigns.py +507 -18
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/release_qualify.py +25 -1
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/tracker_queue.py +11 -4
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/PKG-INFO +7 -5
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/SOURCES.txt +2 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_board.py +19 -6
- code_mower-1.1.2/tests/test_campaign_gh_auth_and_issue_binding_817.py +902 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_cli_audit_pr.py +7 -2
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_cloud.py +38 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_release_campaigns.py +455 -11
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_release_hygiene.py +45 -45
- code_mower-1.1.2/tests/test_remote_qualification_failure_reason_819.py +116 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_tracker_queue.py +10 -5
- {code_mower-1.1.0 → code_mower-1.1.2}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/LICENSE +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/MANIFEST.in +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/NOTICE +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/SUPPORT.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/requirements/requirements.txt +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/setup.cfg +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/antigravity_sdk_probe.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_limits.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_progress.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/board.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/board_store.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/bootstrap.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/builder_runs.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/results.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/campaign_discovery.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/checks.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/clear_stale.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/adoption_runs.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/finding_outcomes.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/operations.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/productivity.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/productivity_windows.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/tokens.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/work_types.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/config.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/controller.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/decisions.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/devin_api.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/devin_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/audit_limits.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_human_token.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/jira.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/file_locks.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/gate_health.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/git_identity.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/grok_build_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/init.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/jira_mutations.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/jira_pr_sync.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/devin_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/grok_build.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/muse_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_delivery.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_status.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_install.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/muse_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/next_steps.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_content.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_manifest.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_paths.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_rendering.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_static.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/participants.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/plan_context.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/productivity_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/prompts.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_credentials.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_registry.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/exit_codes.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/release_readiness.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/reviewer_spend.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/secrets.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/session.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/README.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/claude.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/codex.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/cursor.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/devin.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/generic.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/status_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/tracker_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/versioning.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/work_orders.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/workflow_actionlint.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/builder-experiment.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/calibration-corpus.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/code-mower.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/context-packs.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/README.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/claude.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/codex.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/cursor.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/devin.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/generic.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/aider.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/claude_audit.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/claude_review.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/codex.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/cursor_cloud_agent.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/devin.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/devin_cli.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/gitar.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/greptile.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/local_llm.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/muse_cli.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/qodo.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers.yml +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_adoption_diagnostics.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_adoption_result_semantics.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_adoption_run_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_antigravity_sdk_probe.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_audit_comment_posture.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_audit_limits.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_builder_experiment.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_builder_identity.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_builder_runs.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_calibration_truth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_campaign_adapters.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_campaign_discovery.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_campaign_retry_evidence_711.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_checks.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_claude_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_clear_stale.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_client.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_manifest.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_reports.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_codex_audit_env_preflight.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_codex_audit_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_controller.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_decision_audit_integration.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_decisions.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_api.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_builder_lane.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_provider_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_campaign_auth.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_campaign_readiness.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_output.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_privacy.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_local_audit_setup.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_registry.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_runtime.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_self_hosted_runner.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_supervised_pilot.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_file_locks.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_fork_pr_guard.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_gate_automerge.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_gate_health.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_hosted_dispatch_profile.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_init_actionlint.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_init_build_loop.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_adoption.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_mutations.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_pr_sync.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_lane_delivery_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_lane_status.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_migration_rehearsal.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_migration_setup_drift.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_next_steps.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_package_install_failure_taxonomy.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_participant_sessions.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_plan_context.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_pr_outcome_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_pr_outcome_coverage.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_productivity_metrics_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_productivity_report.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_productivity_windows.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_prompts.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_credentials.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_fixture_contracts.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_local_cli.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_git.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_process.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_release_qualify.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_reviewer_finding_outcome_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_reviewer_metrics_core.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_reviewer_spend.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_supervised_pilot_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_tracker_config.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_tracker_contract.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_trailer_comment_labeler.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_work_orders.py +0 -0
- {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_work_type_contract.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.2
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/codemower-ai/code-mower
|
|
@@ -245,7 +245,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
245
245
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
246
246
|
|
|
247
247
|
The current package-index announcement entry point is the tagged
|
|
248
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.
|
|
248
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.2/docs/try-in-10-minutes.md)
|
|
249
249
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
250
250
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
251
251
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -348,7 +348,7 @@ Provider-contract baseline for the next release train:
|
|
|
348
348
|
|
|
349
349
|
For release verification,
|
|
350
350
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
351
|
-
the package-index procedure for `v1.1.
|
|
351
|
+
the package-index procedure for `v1.1.2` / `code-mower==1.1.2`. The
|
|
352
352
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
353
353
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
354
354
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -542,8 +542,8 @@ measurement work.
|
|
|
542
542
|
|
|
543
543
|
## Installation Status
|
|
544
544
|
|
|
545
|
-
The current package-index release baseline is `v1.1.
|
|
546
|
-
install spec `code-mower==1.1.
|
|
545
|
+
The current package-index release baseline is `v1.1.2`, with pinned package
|
|
546
|
+
install spec `code-mower==1.1.2`. Release evidence is recorded on the GitHub
|
|
547
547
|
release and in the first-user install rehearsal. The public repository is
|
|
548
548
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
549
549
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -629,6 +629,8 @@ first so local work exercises the same package entrypoint users install.
|
|
|
629
629
|
- [v1.0.13 Release Notes](docs/v1013-release-notes.md)
|
|
630
630
|
- [v1.0.14 Release Notes](docs/v1014-release-notes.md)
|
|
631
631
|
- [v1.0.15 Release Notes](docs/v1015-release-notes.md)
|
|
632
|
+
- [v1.1.1 Release Notes](docs/v111-release-notes.md)
|
|
633
|
+
- [v1.1.2 Release Notes](docs/v112-release-notes.md)
|
|
632
634
|
- [v1.1 Release Notes](docs/v11-release-notes.md)
|
|
633
635
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
634
636
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
@@ -215,7 +215,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
215
215
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
216
216
|
|
|
217
217
|
The current package-index announcement entry point is the tagged
|
|
218
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.
|
|
218
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.2/docs/try-in-10-minutes.md)
|
|
219
219
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
220
220
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
221
221
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -318,7 +318,7 @@ Provider-contract baseline for the next release train:
|
|
|
318
318
|
|
|
319
319
|
For release verification,
|
|
320
320
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
321
|
-
the package-index procedure for `v1.1.
|
|
321
|
+
the package-index procedure for `v1.1.2` / `code-mower==1.1.2`. The
|
|
322
322
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
323
323
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
324
324
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -512,8 +512,8 @@ measurement work.
|
|
|
512
512
|
|
|
513
513
|
## Installation Status
|
|
514
514
|
|
|
515
|
-
The current package-index release baseline is `v1.1.
|
|
516
|
-
install spec `code-mower==1.1.
|
|
515
|
+
The current package-index release baseline is `v1.1.2`, with pinned package
|
|
516
|
+
install spec `code-mower==1.1.2`. Release evidence is recorded on the GitHub
|
|
517
517
|
release and in the first-user install rehearsal. The public repository is
|
|
518
518
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
519
519
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -599,6 +599,8 @@ first so local work exercises the same package entrypoint users install.
|
|
|
599
599
|
- [v1.0.13 Release Notes](docs/v1013-release-notes.md)
|
|
600
600
|
- [v1.0.14 Release Notes](docs/v1014-release-notes.md)
|
|
601
601
|
- [v1.0.15 Release Notes](docs/v1015-release-notes.md)
|
|
602
|
+
- [v1.1.1 Release Notes](docs/v111-release-notes.md)
|
|
603
|
+
- [v1.1.2 Release Notes](docs/v112-release-notes.md)
|
|
602
604
|
- [v1.1 Release Notes](docs/v11-release-notes.md)
|
|
603
605
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
604
606
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
@@ -604,8 +604,20 @@ def build_qualification_prompt(
|
|
|
604
604
|
else "runtime_class is python_<major>.<minor>; provider and"
|
|
605
605
|
),
|
|
606
606
|
"executor are lowercase safe identifiers; steps is a non-empty list of",
|
|
607
|
-
"{id, status, elapsed_seconds, warning_count, owner_action_count} with",
|
|
608
|
-
"
|
|
607
|
+
"{id, status, elapsed_seconds, warning_count, owner_action_count} with an",
|
|
608
|
+
"optional failure_reason on a failed package_install step and nowhere else.",
|
|
609
|
+
"A failed package_install step must carry exactly one failure_reason:",
|
|
610
|
+
"network for connection or TLS failures (connection refused, timeout,",
|
|
611
|
+
"DNS, SSL or certificate validation), package_index for a missing version",
|
|
612
|
+
"or 404 from the package index, runtime for Python or dependency",
|
|
613
|
+
"incompatibility (unsupported Python version, missing module, conflicting",
|
|
614
|
+
"dependencies), sandbox_permission for permission, disk, or sandbox",
|
|
615
|
+
"denials (permission denied, disk full, read-only filesystem). Use",
|
|
616
|
+
"unknown only for a command that was actually attempted and cannot be",
|
|
617
|
+
"classified from local diagnostics. Report only the closed reason word;",
|
|
618
|
+
"never include raw output, logs, paths, commands, source, diffs,",
|
|
619
|
+
"transcripts, or secrets. Step id is",
|
|
620
|
+
"one of board, doctor, lanes_status, overhead, package_install or a namespaced",
|
|
609
621
|
"<namespace>__<name> provider extension (both halves lowercase safe",
|
|
610
622
|
"identifiers); any other id is rejected. Status is one of",
|
|
611
623
|
"pass, fail, warn, unavailable, planned. A step with a",
|
|
@@ -599,6 +599,7 @@ def check_adoption_campaign_readiness(
|
|
|
599
599
|
which_fn: Callable[[str], str | None] = shutil.which,
|
|
600
600
|
command_runner: Any = None,
|
|
601
601
|
auth_probe_runner: Any = None,
|
|
602
|
+
gh_auth_probe: Any = None,
|
|
602
603
|
capability_runner: Any = None,
|
|
603
604
|
token_dir: Path | None = None,
|
|
604
605
|
providers: Sequence[str] = DEFAULT_CAMPAIGN_PROVIDERS,
|
|
@@ -606,7 +607,14 @@ def check_adoption_campaign_readiness(
|
|
|
606
607
|
provider_profile: str = "",
|
|
607
608
|
provider_config_dir: Path | None = None,
|
|
608
609
|
) -> tuple[DoctorCheck, ...]:
|
|
609
|
-
"""Validate release campaign readiness across configured providers and storage.
|
|
610
|
+
"""Validate release campaign readiness across configured providers and storage.
|
|
611
|
+
|
|
612
|
+
``gh_auth_probe`` is the optional zero-argument GitHub credential probe the
|
|
613
|
+
campaign command uses (``release_campaigns.AuthProbe``). Supplied, a
|
|
614
|
+
GitHub-comment hosted lane with no token variable exported is credentialed
|
|
615
|
+
when `gh` is already authenticated, so this report and an actual dispatch
|
|
616
|
+
reach the same verdict; omitted, the verdict is environment-only.
|
|
617
|
+
"""
|
|
610
618
|
from code_mower import lane_status
|
|
611
619
|
from code_mower.campaign_adapters import (
|
|
612
620
|
check_antigravity_readiness,
|
|
@@ -959,6 +967,7 @@ def check_adoption_campaign_readiness(
|
|
|
959
967
|
credential_file=provider_credential_file,
|
|
960
968
|
profile=provider_profile,
|
|
961
969
|
config_dir=provider_config_dir,
|
|
970
|
+
auth_probe=gh_auth_probe,
|
|
962
971
|
)
|
|
963
972
|
effective_env = current_env
|
|
964
973
|
|
|
@@ -980,6 +989,7 @@ def check_adoption_campaign_readiness(
|
|
|
980
989
|
credential_file=provider_credential_file,
|
|
981
990
|
profile=provider_profile,
|
|
982
991
|
config_dir=provider_config_dir,
|
|
992
|
+
auth_probe=gh_auth_probe,
|
|
983
993
|
)
|
|
984
994
|
dispatch_blockers = hosted_dispatch_blockers(dispatch_profile)
|
|
985
995
|
dispatch_summary = {
|
|
@@ -277,6 +277,8 @@ def run_doctor(
|
|
|
277
277
|
)
|
|
278
278
|
|
|
279
279
|
if adoption:
|
|
280
|
+
from code_mower import release_campaigns
|
|
281
|
+
|
|
280
282
|
checks.extend(
|
|
281
283
|
check_adoption_campaign_readiness(
|
|
282
284
|
config=config,
|
|
@@ -286,6 +288,11 @@ def run_doctor(
|
|
|
286
288
|
provider_credential_file=provider_credential_file,
|
|
287
289
|
provider_profile=provider_profile,
|
|
288
290
|
provider_config_dir=provider_config_dir,
|
|
291
|
+
# Report the same credential verdict the campaign command
|
|
292
|
+
# reaches: a GitHub-comment hosted lane dispatches through `gh`,
|
|
293
|
+
# so an authenticated CLI is credentials even with no token
|
|
294
|
+
# variable exported. Doctor and dispatch must not disagree.
|
|
295
|
+
gh_auth_probe=release_campaigns.run_gh_auth_probe,
|
|
289
296
|
)
|
|
290
297
|
)
|
|
291
298
|
|
|
@@ -83,16 +83,17 @@ MAX_ATTEMPTS = 4
|
|
|
83
83
|
BACKOFF_BASE_SECONDS = 0.5
|
|
84
84
|
BACKOFF_CAP_SECONDS = 8.0
|
|
85
85
|
RETRY_AFTER_CAP_SECONDS = 60
|
|
86
|
-
SEARCH_PAGE_SIZE =
|
|
86
|
+
SEARCH_PAGE_SIZE = 25
|
|
87
87
|
SEARCH_MAX_ISSUES = 200
|
|
88
88
|
#: Maximum enhanced-JQL page fetches per search call. This bound is
|
|
89
89
|
#: independent of the count of collected usable issues so that empty or
|
|
90
90
|
#: unusable pages with fresh continuation tokens cannot loop forever.
|
|
91
|
-
SEARCH_MAX_PAGES =
|
|
91
|
+
SEARCH_MAX_PAGES = 40
|
|
92
92
|
#: Create-metadata page size and maximum page fetches per discovery call.
|
|
93
93
|
CREATEMETA_PAGE_SIZE = 50
|
|
94
94
|
CREATEMETA_MAX_PAGES = 8
|
|
95
95
|
MAX_REQUIRED_CREATE_FIELDS = 64
|
|
96
|
+
MAX_ISSUE_TYPES = 256
|
|
96
97
|
KEYCHAIN_TIMEOUT_SECONDS = 10
|
|
97
98
|
MAX_METADATA_VALUE_LENGTH = 128
|
|
98
99
|
MAX_LABEL_LENGTH = 128
|
|
@@ -261,6 +262,21 @@ def _bounded_labels(value: Any) -> list[str]:
|
|
|
261
262
|
return sorted(set(names))[:MAX_LABELS]
|
|
262
263
|
|
|
263
264
|
|
|
265
|
+
def _bounded_issue_types(value: Any) -> list[dict[str, str]]:
|
|
266
|
+
issue_types: list[dict[str, str]] = []
|
|
267
|
+
seen_ids: set[str] = set()
|
|
268
|
+
entries = value if isinstance(value, list) else []
|
|
269
|
+
for entry in entries:
|
|
270
|
+
if not isinstance(entry, Mapping):
|
|
271
|
+
continue
|
|
272
|
+
type_id = _bounded_str(entry.get("id"), 32)
|
|
273
|
+
if not type_id or not _TOKEN_ID_RE.fullmatch(type_id) or type_id in seen_ids:
|
|
274
|
+
continue
|
|
275
|
+
seen_ids.add(type_id)
|
|
276
|
+
issue_types.append({"id": type_id, "name": _bounded_str(entry.get("name"))})
|
|
277
|
+
return issue_types
|
|
278
|
+
|
|
279
|
+
|
|
264
280
|
def default_keychain_runner(argv: Sequence[str], env: Mapping[str, str]) -> str:
|
|
265
281
|
"""Read one generic-password entry through the macOS ``security`` CLI.
|
|
266
282
|
|
|
@@ -1059,12 +1075,30 @@ class JiraReadClient:
|
|
|
1059
1075
|
Follows bounded create-metadata pagination. Repeated or malformed
|
|
1060
1076
|
pagination state fails closed instead of presenting a partial page
|
|
1061
1077
|
as the exhaustive set. A response with no pagination keys is one
|
|
1062
|
-
exhaustive page.
|
|
1078
|
+
exhaustive page. Jira sites that return 404 for create metadata fall
|
|
1079
|
+
back to the project issue-type endpoint; other failures remain visible.
|
|
1063
1080
|
"""
|
|
1064
1081
|
if not _PROJECT_ID_RE.fullmatch(project_id):
|
|
1065
1082
|
raise ValueError("project_id must be a bounded numeric id")
|
|
1066
1083
|
quoted = urllib.parse.quote(project_id, safe="")
|
|
1067
1084
|
path = f"/rest/api/3/issue/createmeta/{quoted}/issuetypes"
|
|
1085
|
+
try:
|
|
1086
|
+
return self._get_createmeta_issue_types(path)
|
|
1087
|
+
except JiraApiError as exc:
|
|
1088
|
+
if exc.code != "jira_not_found":
|
|
1089
|
+
raise
|
|
1090
|
+
raw_types = self.request_list(
|
|
1091
|
+
"GET",
|
|
1092
|
+
"/rest/api/3/issuetype/project",
|
|
1093
|
+
query={"projectId": project_id},
|
|
1094
|
+
endpoint="issueTypeProject",
|
|
1095
|
+
)
|
|
1096
|
+
if len(raw_types) > MAX_ISSUE_TYPES:
|
|
1097
|
+
raise JiraApiError("jira_unavailable", endpoint="issueTypeProject")
|
|
1098
|
+
return _bounded_issue_types(raw_types)
|
|
1099
|
+
|
|
1100
|
+
def _get_createmeta_issue_types(self, path: str) -> list[dict[str, str]]:
|
|
1101
|
+
"""Read bounded create-metadata pages from one validated path."""
|
|
1068
1102
|
issue_types: list[dict[str, str]] = []
|
|
1069
1103
|
seen_ids: set[str] = set()
|
|
1070
1104
|
start_at = 0
|
|
@@ -1082,18 +1116,10 @@ class JiraReadClient:
|
|
|
1082
1116
|
raw_types = data.get("issueTypes")
|
|
1083
1117
|
if not isinstance(raw_types, list):
|
|
1084
1118
|
raise JiraApiError("jira_unavailable", endpoint="createMeta")
|
|
1085
|
-
for entry in raw_types:
|
|
1086
|
-
if not
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
if not type_id or not _TOKEN_ID_RE.fullmatch(type_id):
|
|
1090
|
-
continue
|
|
1091
|
-
if type_id in seen_ids:
|
|
1092
|
-
continue
|
|
1093
|
-
seen_ids.add(type_id)
|
|
1094
|
-
issue_types.append(
|
|
1095
|
-
{"id": type_id, "name": _bounded_str(entry.get("name"))}
|
|
1096
|
-
)
|
|
1119
|
+
for entry in _bounded_issue_types(raw_types):
|
|
1120
|
+
if entry["id"] not in seen_ids:
|
|
1121
|
+
seen_ids.add(entry["id"])
|
|
1122
|
+
issue_types.append(entry)
|
|
1097
1123
|
if "total" not in data and "startAt" not in data:
|
|
1098
1124
|
break
|
|
1099
1125
|
total = _parse_createmeta_total(data, endpoint="createMeta")
|