code-mower 1.2.0__tar.gz → 1.2.1__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.2.0 → code_mower-1.2.1}/PKG-INFO +8 -7
- {code_mower-1.2.0 → code_mower-1.2.1}/README.md +7 -6
- {code_mower-1.2.0 → code_mower-1.2.1}/pyproject.toml +1 -1
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/__init__.py +1 -1
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/campaign_adapters.py +13 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower.egg-info/PKG-INFO +8 -7
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_campaign_adapters.py +97 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_release_hygiene.py +51 -47
- {code_mower-1.2.0 → code_mower-1.2.1}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/LICENSE +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/MANIFEST.in +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/NOTICE +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/SUPPORT.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/requirements/requirements.txt +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/setup.cfg +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/antigravity_sdk_probe.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/audit_limits.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/audit_progress.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/board.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/board_store.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/bootstrap.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/builder_runs.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/results.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/campaign_discovery.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/checks.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/clear_stale.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/adoption_runs.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/finding_outcomes.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/operations.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/productivity.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/productivity_windows.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/tokens.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/cloud_client/work_types.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/config.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/controller.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/decisions.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/devin_api.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/devin_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/adoption.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/audit_limits.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_human_token.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/jira.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/file_locks.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/gate_health.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/git_identity.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/grok_build_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/init.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/jira_cloud.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/jira_mutations.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/jira_pr_sync.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/devin_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/grok_build.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_configs/muse_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_delivery.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/lane_status.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/migration.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/migration_install.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/muse_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/next_steps.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/package.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/package_content.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/package_manifest.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/package_paths.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/package_rendering.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/package_static.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/participants.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/plan_context.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/productivity_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/prompts.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_credentials.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_registry.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/exit_codes.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/release_campaigns.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/release_qualify.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/release_readiness.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/reviewer_spend.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/secrets.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/session.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/session_lease.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/README.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/claude.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/codex.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/cursor.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/devin.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/generic.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/product-support/status_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/tracker_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/tracker_queue.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/versioning.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/work_orders.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower/workflow_actionlint.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower.egg-info/SOURCES.txt +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/builder-experiment.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/calibration-corpus.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/code-mower.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/context-packs.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/README.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/claude.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/codex.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/cursor.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/devin.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/generic.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/aider.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/claude_audit.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/claude_review.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/codex.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/cursor_cloud_agent.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/devin.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/devin_cli.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/gitar.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/greptile.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/local_llm.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/muse_cli.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers/qodo.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/providers.yml +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_adoption_diagnostics.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_adoption_result_semantics.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_adoption_run_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_antigravity_sdk_probe.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_audit_comment_posture.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_audit_limits.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_board.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_board_lease.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_builder_experiment.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_builder_identity.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_builder_runs.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_calibration_truth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_campaign_discovery.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_campaign_gh_auth_and_issue_binding_817.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_campaign_retry_evidence_711.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_checks.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_claude_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_clear_stale.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_cloud_client.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_cloud_manifest.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_cloud_reports.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_codex_audit_env_preflight.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_codex_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_controller.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_decision_audit_integration.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_decisions.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_devin_api.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_devin_builder_lane.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_devin_cli_audit_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_devin_provider_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_campaign_auth.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_campaign_readiness.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_output.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_privacy.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_provider_local_audit_setup.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_registry.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_runtime.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_self_hosted_runner.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_doctor_supervised_pilot.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_file_locks.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_fork_pr_guard.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_gate_automerge.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_gate_health.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_hosted_dispatch_profile.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_init_actionlint.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_init_build_loop.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_jira_adoption.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_jira_cloud.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_jira_mutations.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_jira_pr_sync.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_lane_delivery_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_lane_status.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_migration_rehearsal.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_migration_setup_drift.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_next_steps.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_package_install_failure_taxonomy.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_participant_sessions.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_plan_context.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_pr_outcome_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_pr_outcome_coverage.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_productivity_metrics_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_productivity_report.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_productivity_windows.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_prompts.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_credentials.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_fixture_contracts.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_local_cli.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_git.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_process.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_release_campaigns.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_release_qualify.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_remote_qualification_failure_reason_819.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_reviewer_finding_outcome_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_reviewer_metrics_core.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_reviewer_spend.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_session_lease.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_supervised_pilot_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_tracker_config.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_tracker_contract.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_tracker_queue.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_trailer_comment_labeler.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/tests/test_work_orders.py +0 -0
- {code_mower-1.2.0 → code_mower-1.2.1}/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.2.
|
|
3
|
+
Version: 1.2.1
|
|
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
|
|
@@ -56,8 +56,8 @@ Default cloud bundles exclude source code, raw diffs, raw model transcripts,
|
|
|
56
56
|
raw stdout/stderr, auth output, and secrets.
|
|
57
57
|
|
|
58
58
|
Documentation on `main` follows the source on `main`. If you install the
|
|
59
|
-
published `code-mower==1.2.
|
|
60
|
-
[`v1.2.
|
|
59
|
+
published `code-mower==1.2.1` package, use the documentation from the matching
|
|
60
|
+
[`v1.2.1` tag](https://github.com/codemower-ai/code-mower/tree/v1.2.1) so the
|
|
61
61
|
commands and package stay aligned as development continues.
|
|
62
62
|
|
|
63
63
|
## Design Principles
|
|
@@ -252,7 +252,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
252
252
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
253
253
|
|
|
254
254
|
The current package-index announcement entry point is the tagged
|
|
255
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.2.
|
|
255
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.2.1/docs/try-in-10-minutes.md)
|
|
256
256
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
257
257
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
258
258
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -367,7 +367,7 @@ Provider-contract baseline for the next release train:
|
|
|
367
367
|
|
|
368
368
|
For release verification,
|
|
369
369
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
370
|
-
the package-index procedure for `v1.2.
|
|
370
|
+
the package-index procedure for `v1.2.1` / `code-mower==1.2.1`. The
|
|
371
371
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
372
372
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
373
373
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -561,8 +561,8 @@ measurement work.
|
|
|
561
561
|
|
|
562
562
|
## Installation Status
|
|
563
563
|
|
|
564
|
-
The current package-index release baseline is `v1.2.
|
|
565
|
-
install spec `code-mower==1.2.
|
|
564
|
+
The current package-index release baseline is `v1.2.1`, with pinned package
|
|
565
|
+
install spec `code-mower==1.2.1`. Release evidence is recorded on the GitHub
|
|
566
566
|
release and in the first-user install rehearsal. The public repository is
|
|
567
567
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
568
568
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -675,6 +675,7 @@ first so local work exercises the same package entrypoint users install.
|
|
|
675
675
|
- [v1.1.1 Release Notes](docs/v111-release-notes.md)
|
|
676
676
|
- [v1.1.2 Release Notes](docs/v112-release-notes.md)
|
|
677
677
|
- [v1.2 Release Notes](docs/v12-release-notes.md)
|
|
678
|
+
- [v1.2.1 Release Notes](docs/v121-release-notes.md)
|
|
678
679
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
679
680
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
680
681
|
|
|
@@ -26,8 +26,8 @@ Default cloud bundles exclude source code, raw diffs, raw model transcripts,
|
|
|
26
26
|
raw stdout/stderr, auth output, and secrets.
|
|
27
27
|
|
|
28
28
|
Documentation on `main` follows the source on `main`. If you install the
|
|
29
|
-
published `code-mower==1.2.
|
|
30
|
-
[`v1.2.
|
|
29
|
+
published `code-mower==1.2.1` package, use the documentation from the matching
|
|
30
|
+
[`v1.2.1` tag](https://github.com/codemower-ai/code-mower/tree/v1.2.1) so the
|
|
31
31
|
commands and package stay aligned as development continues.
|
|
32
32
|
|
|
33
33
|
## Design Principles
|
|
@@ -222,7 +222,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
222
222
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
223
223
|
|
|
224
224
|
The current package-index announcement entry point is the tagged
|
|
225
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.2.
|
|
225
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.2.1/docs/try-in-10-minutes.md)
|
|
226
226
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
227
227
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
228
228
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -337,7 +337,7 @@ Provider-contract baseline for the next release train:
|
|
|
337
337
|
|
|
338
338
|
For release verification,
|
|
339
339
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
340
|
-
the package-index procedure for `v1.2.
|
|
340
|
+
the package-index procedure for `v1.2.1` / `code-mower==1.2.1`. The
|
|
341
341
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
342
342
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
343
343
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -531,8 +531,8 @@ measurement work.
|
|
|
531
531
|
|
|
532
532
|
## Installation Status
|
|
533
533
|
|
|
534
|
-
The current package-index release baseline is `v1.2.
|
|
535
|
-
install spec `code-mower==1.2.
|
|
534
|
+
The current package-index release baseline is `v1.2.1`, with pinned package
|
|
535
|
+
install spec `code-mower==1.2.1`. Release evidence is recorded on the GitHub
|
|
536
536
|
release and in the first-user install rehearsal. The public repository is
|
|
537
537
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
538
538
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -645,6 +645,7 @@ first so local work exercises the same package entrypoint users install.
|
|
|
645
645
|
- [v1.1.1 Release Notes](docs/v111-release-notes.md)
|
|
646
646
|
- [v1.1.2 Release Notes](docs/v112-release-notes.md)
|
|
647
647
|
- [v1.2 Release Notes](docs/v12-release-notes.md)
|
|
648
|
+
- [v1.2.1 Release Notes](docs/v121-release-notes.md)
|
|
648
649
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
649
650
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
650
651
|
|
|
@@ -570,6 +570,19 @@ def build_qualification_prompt(
|
|
|
570
570
|
)
|
|
571
571
|
if target_runtime:
|
|
572
572
|
lines.append(f"- target_runtime: {target_runtime}")
|
|
573
|
+
if provider == "claude":
|
|
574
|
+
lines.extend(
|
|
575
|
+
[
|
|
576
|
+
"",
|
|
577
|
+
"Claude timing arithmetic (mandatory): report every step elapsed_seconds",
|
|
578
|
+
"as a non-negative integer number of seconds. Include an overhead step for",
|
|
579
|
+
"measured setup or serialization time outside the named checks. Set the",
|
|
580
|
+
"top-level elapsed_seconds to the exact arithmetic sum of the numeric step",
|
|
581
|
+
"elapsed_seconds values you emit; never use a separately measured or",
|
|
582
|
+
"estimated total. Before responding, add those emitted values again and",
|
|
583
|
+
"confirm exact equality.",
|
|
584
|
+
]
|
|
585
|
+
)
|
|
573
586
|
lines.extend(
|
|
574
587
|
[
|
|
575
588
|
"",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.1
|
|
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
|
|
@@ -56,8 +56,8 @@ Default cloud bundles exclude source code, raw diffs, raw model transcripts,
|
|
|
56
56
|
raw stdout/stderr, auth output, and secrets.
|
|
57
57
|
|
|
58
58
|
Documentation on `main` follows the source on `main`. If you install the
|
|
59
|
-
published `code-mower==1.2.
|
|
60
|
-
[`v1.2.
|
|
59
|
+
published `code-mower==1.2.1` package, use the documentation from the matching
|
|
60
|
+
[`v1.2.1` tag](https://github.com/codemower-ai/code-mower/tree/v1.2.1) so the
|
|
61
61
|
commands and package stay aligned as development continues.
|
|
62
62
|
|
|
63
63
|
## Design Principles
|
|
@@ -252,7 +252,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
252
252
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
253
253
|
|
|
254
254
|
The current package-index announcement entry point is the tagged
|
|
255
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.2.
|
|
255
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.2.1/docs/try-in-10-minutes.md)
|
|
256
256
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
257
257
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
258
258
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -367,7 +367,7 @@ Provider-contract baseline for the next release train:
|
|
|
367
367
|
|
|
368
368
|
For release verification,
|
|
369
369
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
370
|
-
the package-index procedure for `v1.2.
|
|
370
|
+
the package-index procedure for `v1.2.1` / `code-mower==1.2.1`. The
|
|
371
371
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
372
372
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
373
373
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -561,8 +561,8 @@ measurement work.
|
|
|
561
561
|
|
|
562
562
|
## Installation Status
|
|
563
563
|
|
|
564
|
-
The current package-index release baseline is `v1.2.
|
|
565
|
-
install spec `code-mower==1.2.
|
|
564
|
+
The current package-index release baseline is `v1.2.1`, with pinned package
|
|
565
|
+
install spec `code-mower==1.2.1`. Release evidence is recorded on the GitHub
|
|
566
566
|
release and in the first-user install rehearsal. The public repository is
|
|
567
567
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
568
568
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -675,6 +675,7 @@ first so local work exercises the same package entrypoint users install.
|
|
|
675
675
|
- [v1.1.1 Release Notes](docs/v111-release-notes.md)
|
|
676
676
|
- [v1.1.2 Release Notes](docs/v112-release-notes.md)
|
|
677
677
|
- [v1.2 Release Notes](docs/v12-release-notes.md)
|
|
678
|
+
- [v1.2.1 Release Notes](docs/v121-release-notes.md)
|
|
678
679
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
679
680
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
680
681
|
|
|
@@ -398,6 +398,35 @@ class ArgvBuilderTests(unittest.TestCase):
|
|
|
398
398
|
prompt,
|
|
399
399
|
)
|
|
400
400
|
|
|
401
|
+
def test_claude_prompt_requires_deterministic_timing_arithmetic(self) -> None:
|
|
402
|
+
prompt = campaign_adapters.build_qualification_prompt(
|
|
403
|
+
provider="claude",
|
|
404
|
+
release_tag="v1.0.0",
|
|
405
|
+
package_spec="code-mower==1.0.0",
|
|
406
|
+
package_identity="code-mower",
|
|
407
|
+
normalized_version="1.0.0",
|
|
408
|
+
qualification_context="cold_install",
|
|
409
|
+
starting_version="",
|
|
410
|
+
)
|
|
411
|
+
self.assertIn("non-negative integer number of seconds", prompt)
|
|
412
|
+
self.assertIn("exact arithmetic sum", prompt)
|
|
413
|
+
self.assertIn("never use a separately measured", prompt)
|
|
414
|
+
self.assertIn("Include an overhead step", prompt)
|
|
415
|
+
|
|
416
|
+
def test_non_claude_prompts_omit_claude_timing_rule(self) -> None:
|
|
417
|
+
for provider in ("codex", "antigravity", "muse", "devin_cli"):
|
|
418
|
+
with self.subTest(provider=provider):
|
|
419
|
+
prompt = campaign_adapters.build_qualification_prompt(
|
|
420
|
+
provider=provider,
|
|
421
|
+
release_tag="v1.0.0",
|
|
422
|
+
package_spec="code-mower==1.0.0",
|
|
423
|
+
package_identity="code-mower",
|
|
424
|
+
normalized_version="1.0.0",
|
|
425
|
+
qualification_context="cold_install",
|
|
426
|
+
starting_version="",
|
|
427
|
+
)
|
|
428
|
+
self.assertNotIn("Claude timing arithmetic", prompt)
|
|
429
|
+
|
|
401
430
|
def test_guidance_schema_enforces_step_id_taxonomy(self) -> None:
|
|
402
431
|
step_id_schema = campaign_adapters.ADOPTION_RESULT_JSON_SCHEMA[
|
|
403
432
|
"properties"
|
|
@@ -876,6 +905,74 @@ class AdapterTransportTests(unittest.TestCase):
|
|
|
876
905
|
self.assertEqual(json.loads(output.read_text(encoding="utf-8")), _adoption_result("claude"))
|
|
877
906
|
self.assertNotIn("SECRET-NOISE", output.read_text(encoding="utf-8"))
|
|
878
907
|
|
|
908
|
+
def test_claude_rejects_inconsistent_timing_without_retry(self) -> None:
|
|
909
|
+
calls = 0
|
|
910
|
+
inconsistent = _adoption_result(
|
|
911
|
+
"claude",
|
|
912
|
+
elapsed_seconds=20,
|
|
913
|
+
steps=[
|
|
914
|
+
{
|
|
915
|
+
"id": "package_install",
|
|
916
|
+
"status": "pass",
|
|
917
|
+
"elapsed_seconds": 8,
|
|
918
|
+
"warning_count": 0,
|
|
919
|
+
"owner_action_count": 0,
|
|
920
|
+
},
|
|
921
|
+
{
|
|
922
|
+
"id": "doctor",
|
|
923
|
+
"status": "pass",
|
|
924
|
+
"elapsed_seconds": 4,
|
|
925
|
+
"warning_count": 0,
|
|
926
|
+
"owner_action_count": 0,
|
|
927
|
+
},
|
|
928
|
+
],
|
|
929
|
+
)
|
|
930
|
+
|
|
931
|
+
def runner(
|
|
932
|
+
argv: Any, prompt_input: Any, timeout: int, workdir: Path, child_env: Any
|
|
933
|
+
) -> Any:
|
|
934
|
+
nonlocal calls
|
|
935
|
+
calls += 1
|
|
936
|
+
stdout = json.dumps({"is_error": False, "structured_output": inconsistent})
|
|
937
|
+
return subprocess.CompletedProcess(list(argv), 0, stdout=stdout, stderr="")
|
|
938
|
+
|
|
939
|
+
code, output, _tmp = self._run("claude", runner)
|
|
940
|
+
self.assertNotEqual(code, 0)
|
|
941
|
+
self.assertEqual(calls, 1)
|
|
942
|
+
self.assertFalse(output.exists())
|
|
943
|
+
|
|
944
|
+
def test_claude_accepts_exact_integer_step_sum(self) -> None:
|
|
945
|
+
exact = _adoption_result(
|
|
946
|
+
"claude",
|
|
947
|
+
elapsed_seconds=12,
|
|
948
|
+
steps=[
|
|
949
|
+
{
|
|
950
|
+
"id": "package_install",
|
|
951
|
+
"status": "pass",
|
|
952
|
+
"elapsed_seconds": 8,
|
|
953
|
+
"warning_count": 0,
|
|
954
|
+
"owner_action_count": 0,
|
|
955
|
+
},
|
|
956
|
+
{
|
|
957
|
+
"id": "doctor",
|
|
958
|
+
"status": "pass",
|
|
959
|
+
"elapsed_seconds": 4,
|
|
960
|
+
"warning_count": 0,
|
|
961
|
+
"owner_action_count": 0,
|
|
962
|
+
},
|
|
963
|
+
],
|
|
964
|
+
)
|
|
965
|
+
|
|
966
|
+
def runner(
|
|
967
|
+
argv: Any, prompt_input: Any, timeout: int, workdir: Path, child_env: Any
|
|
968
|
+
) -> Any:
|
|
969
|
+
stdout = json.dumps({"is_error": False, "structured_output": exact})
|
|
970
|
+
return subprocess.CompletedProcess(list(argv), 0, stdout=stdout, stderr="")
|
|
971
|
+
|
|
972
|
+
code, output, _tmp = self._run("claude", runner)
|
|
973
|
+
self.assertEqual(code, 0)
|
|
974
|
+
self.assertEqual(json.loads(output.read_text(encoding="utf-8")), exact)
|
|
975
|
+
|
|
879
976
|
def test_claude_rejects_is_error_true_envelope_even_with_valid_fenced_result(self) -> None:
|
|
880
977
|
"""A valid Claude error envelope must fail closed even if result contains fenced JSON."""
|
|
881
978
|
valid_payload = _adoption_result("claude")
|
|
@@ -65,7 +65,7 @@ from scripts import guard_package_workflows, privacy_scan
|
|
|
65
65
|
|
|
66
66
|
class ReleaseHygieneTests(unittest.TestCase):
|
|
67
67
|
def test_version_is_current_supervised_pilot_release(self) -> None:
|
|
68
|
-
self.assertEqual(__version__, "1.2.
|
|
68
|
+
self.assertEqual(__version__, "1.2.1")
|
|
69
69
|
|
|
70
70
|
def test_dogfood_repo_has_real_root_config(self) -> None:
|
|
71
71
|
config_path = ROOT / "code-mower.yml"
|
|
@@ -216,7 +216,7 @@ class ReleaseHygieneTests(unittest.TestCase):
|
|
|
216
216
|
self.assertIn("Cold Install Vs Upgrade", install)
|
|
217
217
|
self.assertIn("Switching Between pipx And uv", install)
|
|
218
218
|
self.assertIn("uv tool install --python 3.12 --reinstall --refresh-package", install)
|
|
219
|
-
self.assertIn("code-mower==1.2.
|
|
219
|
+
self.assertIn("code-mower==1.2.1", troubleshooting)
|
|
220
220
|
self.assertNotIn("code-mower==0.8.0b1", troubleshooting)
|
|
221
221
|
self.assertIn("pipx uninstall code-mower", install)
|
|
222
222
|
for env_name in ("PIPX_HOME", "PIPX_BIN_DIR", "PIPX_LOG_DIR"):
|
|
@@ -1100,7 +1100,7 @@ exit 1
|
|
|
1100
1100
|
)
|
|
1101
1101
|
|
|
1102
1102
|
self.assertNotEqual(completed.returncode, 0)
|
|
1103
|
-
self.assertIn("pipx install code-mower==1.2.
|
|
1103
|
+
self.assertIn("pipx install code-mower==1.2.1", completed.stderr)
|
|
1104
1104
|
self.assertIn("scripts/dev-python -m venv .venv", completed.stderr)
|
|
1105
1105
|
self.assertIn(".venv/bin/code-mower", completed.stderr)
|
|
1106
1106
|
self.assertNotIn("PYTHONPATH=src", completed.stderr)
|
|
@@ -3238,10 +3238,10 @@ jobs:
|
|
|
3238
3238
|
|
|
3239
3239
|
cases = (
|
|
3240
3240
|
(
|
|
3241
|
-
'CODE_MOWER_STANDALONE_REF="v1.2.
|
|
3241
|
+
'CODE_MOWER_STANDALONE_REF="v1.2.1"\n',
|
|
3242
3242
|
"pass",
|
|
3243
3243
|
"matches_running_package",
|
|
3244
|
-
"v1.2.
|
|
3244
|
+
"v1.2.1",
|
|
3245
3245
|
),
|
|
3246
3246
|
(
|
|
3247
3247
|
'CODE_MOWER_STANDALONE_REF="v0.9.1-beta.1"\n',
|
|
@@ -3272,12 +3272,12 @@ jobs:
|
|
|
3272
3272
|
|
|
3273
3273
|
payload = migration._standalone_pin_drift_summary(
|
|
3274
3274
|
repo,
|
|
3275
|
-
package_version="1.2.
|
|
3275
|
+
package_version="1.2.1",
|
|
3276
3276
|
)
|
|
3277
3277
|
|
|
3278
3278
|
self.assertEqual(payload["status"], status)
|
|
3279
3279
|
self.assertEqual(payload["reason"], reason)
|
|
3280
|
-
self.assertEqual(payload["expected_ref"], "v1.2.
|
|
3280
|
+
self.assertEqual(payload["expected_ref"], "v1.2.1")
|
|
3281
3281
|
if current_ref is None:
|
|
3282
3282
|
self.assertNotIn("current_ref", payload)
|
|
3283
3283
|
else:
|
|
@@ -3298,7 +3298,7 @@ jobs:
|
|
|
3298
3298
|
|
|
3299
3299
|
payload = migration._standalone_pin_drift_summary(
|
|
3300
3300
|
repo,
|
|
3301
|
-
package_version="1.2.
|
|
3301
|
+
package_version="1.2.1",
|
|
3302
3302
|
)
|
|
3303
3303
|
|
|
3304
3304
|
self.assertEqual(payload["status"], "warn")
|
|
@@ -3361,7 +3361,7 @@ jobs:
|
|
|
3361
3361
|
"standalone_pin": {
|
|
3362
3362
|
"status": "skip",
|
|
3363
3363
|
"reason": "pin_file_absent",
|
|
3364
|
-
"expected_ref": "v1.2.
|
|
3364
|
+
"expected_ref": "v1.2.1",
|
|
3365
3365
|
},
|
|
3366
3366
|
"builder_hint": {
|
|
3367
3367
|
"status": "skip",
|
|
@@ -3373,7 +3373,7 @@ jobs:
|
|
|
3373
3373
|
|
|
3374
3374
|
rendered = migration.render_setup_drift_text(payload)
|
|
3375
3375
|
|
|
3376
|
-
self.assertIn("Standalone pin: SKIP pin_file_absent expected=v1.2.
|
|
3376
|
+
self.assertIn("Standalone pin: SKIP pin_file_absent expected=v1.2.1", rendered)
|
|
3377
3377
|
|
|
3378
3378
|
def test_setup_drift_reports_builder_hint_when_builders_omitted(self) -> None:
|
|
3379
3379
|
from code_mower import migration
|
|
@@ -5553,11 +5553,11 @@ printf 'repo:%s:%s:%s\\n' "${lane}" "${stdin_flag}" "${token}"
|
|
|
5553
5553
|
(output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
|
|
5554
5554
|
)
|
|
5555
5555
|
self.assertIn(
|
|
5556
|
-
'version = "1.2.
|
|
5556
|
+
'version = "1.2.1"',
|
|
5557
5557
|
(output_dir / "pyproject.toml").read_text(encoding="utf-8"),
|
|
5558
5558
|
)
|
|
5559
5559
|
self.assertIn(
|
|
5560
|
-
'__version__ = "1.2.
|
|
5560
|
+
'__version__ = "1.2.1"',
|
|
5561
5561
|
(output_dir / "src/code_mower/__init__.py").read_text(
|
|
5562
5562
|
encoding="utf-8"
|
|
5563
5563
|
),
|
|
@@ -7562,7 +7562,7 @@ def main():
|
|
|
7562
7562
|
"pip",
|
|
7563
7563
|
"install",
|
|
7564
7564
|
"--no-cache-dir",
|
|
7565
|
-
"code-mower==1.2.
|
|
7565
|
+
"code-mower==1.2.1",
|
|
7566
7566
|
]
|
|
7567
7567
|
|
|
7568
7568
|
def fake_run_step(*args: object, **kwargs: object) -> subprocess.CompletedProcess[str]:
|
|
@@ -7629,7 +7629,7 @@ def main():
|
|
|
7629
7629
|
self.assertTrue(code_mower_migration._package_spec_uses_package_index("code-mower"))
|
|
7630
7630
|
self.assertTrue(
|
|
7631
7631
|
code_mower_migration._package_spec_uses_package_index(
|
|
7632
|
-
"code-mower==1.2.
|
|
7632
|
+
"code-mower==1.2.1"
|
|
7633
7633
|
)
|
|
7634
7634
|
)
|
|
7635
7635
|
self.assertFalse(code_mower_migration._package_spec_uses_package_index("."))
|
|
@@ -7638,7 +7638,7 @@ def main():
|
|
|
7638
7638
|
)
|
|
7639
7639
|
self.assertFalse(
|
|
7640
7640
|
code_mower_migration._package_spec_uses_package_index(
|
|
7641
|
-
"git+https://github.com/codemower-ai/code-mower.git@v1.2.
|
|
7641
|
+
"git+https://github.com/codemower-ai/code-mower.git@v1.2.1"
|
|
7642
7642
|
)
|
|
7643
7643
|
)
|
|
7644
7644
|
|
|
@@ -7648,7 +7648,7 @@ def main():
|
|
|
7648
7648
|
|
|
7649
7649
|
with self.assertRaisesRegex(ValueError, "--allow-package-index"):
|
|
7650
7650
|
code_mower_migration.run_package_install_rehearsal(
|
|
7651
|
-
package_spec="code-mower==1.2.
|
|
7651
|
+
package_spec="code-mower==1.2.1",
|
|
7652
7652
|
work_dir=work_dir,
|
|
7653
7653
|
)
|
|
7654
7654
|
|
|
@@ -7676,7 +7676,7 @@ def main():
|
|
|
7676
7676
|
[
|
|
7677
7677
|
"package-install-rehearsal",
|
|
7678
7678
|
"--package-spec",
|
|
7679
|
-
"code-mower==1.2.
|
|
7679
|
+
"code-mower==1.2.1",
|
|
7680
7680
|
"--allow-package-index",
|
|
7681
7681
|
"--upgrade-pip",
|
|
7682
7682
|
"--pip-no-cache",
|
|
@@ -7732,10 +7732,10 @@ def main():
|
|
|
7732
7732
|
payload = release_readiness.render_release_readiness(ROOT)
|
|
7733
7733
|
|
|
7734
7734
|
self.assertEqual(payload["status"], "pass")
|
|
7735
|
-
self.assertEqual(payload["version"], "1.2.
|
|
7736
|
-
self.assertEqual(payload["release_tag"], "v1.2.
|
|
7737
|
-
self.assertEqual(payload["alpha_tag"], "v1.2.
|
|
7738
|
-
self.assertEqual(payload["package_index_spec"], "code-mower==1.2.
|
|
7735
|
+
self.assertEqual(payload["version"], "1.2.1")
|
|
7736
|
+
self.assertEqual(payload["release_tag"], "v1.2.1")
|
|
7737
|
+
self.assertEqual(payload["alpha_tag"], "v1.2.1")
|
|
7738
|
+
self.assertEqual(payload["package_index_spec"], "code-mower==1.2.1")
|
|
7739
7739
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
7740
7740
|
self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
|
|
7741
7741
|
self.assertEqual(
|
|
@@ -7751,9 +7751,9 @@ def main():
|
|
|
7751
7751
|
self.assertEqual(check_ids["public-support-redaction-guidance"]["status"], "pass")
|
|
7752
7752
|
commands = {action["id"]: action["command"] for action in payload["next_actions"]}
|
|
7753
7753
|
urls = {action["id"]: action.get("url", "") for action in payload["next_actions"]}
|
|
7754
|
-
self.assertIn("--ref v1.2.
|
|
7754
|
+
self.assertIn("--ref v1.2.1", commands["dry-run-release-workflow"])
|
|
7755
7755
|
self.assertNotIn("--ref main", commands["dry-run-release-workflow"])
|
|
7756
|
-
self.assertIn("--ref v1.2.
|
|
7756
|
+
self.assertIn("--ref v1.2.1", commands["publish-testpypi-candidate"])
|
|
7757
7757
|
self.assertNotIn("--ref main", commands["publish-testpypi-candidate"])
|
|
7758
7758
|
self.assertIn("publish_testpypi=true", commands["publish-testpypi-candidate"])
|
|
7759
7759
|
self.assertIn("publish_pypi=false", commands["publish-testpypi-candidate"])
|
|
@@ -7790,7 +7790,7 @@ def main():
|
|
|
7790
7790
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
7791
7791
|
check = check_ids["materialized-package-version-consistency"]
|
|
7792
7792
|
self.assertEqual(check["status"], "fail")
|
|
7793
|
-
self.assertEqual(check["detail"]["source_version"], "1.2.
|
|
7793
|
+
self.assertEqual(check["detail"]["source_version"], "1.2.1")
|
|
7794
7794
|
self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
|
|
7795
7795
|
|
|
7796
7796
|
def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
|
|
@@ -7894,20 +7894,20 @@ def main():
|
|
|
7894
7894
|
"v1.0.0-rc.1",
|
|
7895
7895
|
)
|
|
7896
7896
|
self.assertEqual(
|
|
7897
|
-
release_readiness._release_tag_for_version("1.2.
|
|
7898
|
-
"v1.2.
|
|
7897
|
+
release_readiness._release_tag_for_version("1.2.1"),
|
|
7898
|
+
"v1.2.1",
|
|
7899
7899
|
)
|
|
7900
7900
|
self.assertEqual(
|
|
7901
|
-
code_mower_versioning.release_tag_for_version("1.2.
|
|
7902
|
-
"v1.2.
|
|
7901
|
+
code_mower_versioning.release_tag_for_version("1.2.1"),
|
|
7902
|
+
"v1.2.1",
|
|
7903
7903
|
)
|
|
7904
7904
|
|
|
7905
7905
|
def test_public_release_baseline_helpers_derive_announcement_links(self) -> None:
|
|
7906
7906
|
self.assertEqual(
|
|
7907
7907
|
code_mower_versioning.public_baseline_sentence(__version__),
|
|
7908
7908
|
(
|
|
7909
|
-
"The current package-index release baseline is `v1.2.
|
|
7910
|
-
"with pinned package install spec `code-mower==1.2.
|
|
7909
|
+
"The current package-index release baseline is `v1.2.1`, "
|
|
7910
|
+
"with pinned package install spec `code-mower==1.2.1`. "
|
|
7911
7911
|
"Release evidence is recorded on the GitHub release and in the "
|
|
7912
7912
|
"first-user install rehearsal."
|
|
7913
7913
|
),
|
|
@@ -7916,7 +7916,7 @@ def main():
|
|
|
7916
7916
|
code_mower_versioning.tagged_doc_url(__version__),
|
|
7917
7917
|
(
|
|
7918
7918
|
"https://github.com/codemower-ai/code-mower/blob/"
|
|
7919
|
-
"v1.2.
|
|
7919
|
+
"v1.2.1/docs/try-in-10-minutes.md"
|
|
7920
7920
|
),
|
|
7921
7921
|
)
|
|
7922
7922
|
|
|
@@ -7969,12 +7969,12 @@ def main():
|
|
|
7969
7969
|
|
|
7970
7970
|
readme = (ROOT / "README.md").read_text(encoding="utf-8")
|
|
7971
7971
|
sessions = (ROOT / "docs" / "sessions.md").read_text(encoding="utf-8")
|
|
7972
|
-
release_notes = (ROOT / "docs" / "
|
|
7972
|
+
release_notes = (ROOT / "docs" / "v121-release-notes.md").read_text(
|
|
7973
7973
|
encoding="utf-8"
|
|
7974
7974
|
)
|
|
7975
7975
|
self.assertIn("Documentation on `main` follows the source on `main`", readme)
|
|
7976
|
-
self.assertIn("available in `code-mower==1.2.
|
|
7977
|
-
self.assertIn("# Code Mower v1.2.
|
|
7976
|
+
self.assertIn("available in `code-mower==1.2.1`", sessions)
|
|
7977
|
+
self.assertIn("# Code Mower v1.2.1 Release Notes", release_notes)
|
|
7978
7978
|
self.assertIn("The privacy boundary is unchanged.", release_notes)
|
|
7979
7979
|
self.assertLess(
|
|
7980
7980
|
readme.index("[v1.1 Release Notes](docs/v11-release-notes.md)"),
|
|
@@ -7984,6 +7984,10 @@ def main():
|
|
|
7984
7984
|
readme.index("[v1.1.2 Release Notes](docs/v112-release-notes.md)"),
|
|
7985
7985
|
readme.index("[v1.2 Release Notes](docs/v12-release-notes.md)"),
|
|
7986
7986
|
)
|
|
7987
|
+
self.assertLess(
|
|
7988
|
+
readme.index("[v1.2 Release Notes](docs/v12-release-notes.md)"),
|
|
7989
|
+
readme.index("[v1.2.1 Release Notes](docs/v121-release-notes.md)"),
|
|
7990
|
+
)
|
|
7987
7991
|
|
|
7988
7992
|
def test_current_release_docs_record_package_index_procedure(self) -> None:
|
|
7989
7993
|
readme = (ROOT / "README.md").read_text(encoding="utf-8")
|
|
@@ -8005,15 +8009,15 @@ def main():
|
|
|
8005
8009
|
)
|
|
8006
8010
|
|
|
8007
8011
|
current_status = (
|
|
8008
|
-
"The current package-index release baseline is `v1.2.
|
|
8009
|
-
"pinned package install spec `code-mower==1.2.
|
|
8012
|
+
"The current package-index release baseline is `v1.2.1`, with "
|
|
8013
|
+
"pinned package install spec `code-mower==1.2.1`. Release "
|
|
8010
8014
|
"evidence is recorded on the GitHub release and in the first-user "
|
|
8011
8015
|
"install rehearsal."
|
|
8012
8016
|
)
|
|
8013
8017
|
for text in (readme, current_state, rollout):
|
|
8014
8018
|
self.assertIn(current_status, " ".join(text.split()))
|
|
8015
8019
|
self.assertIn(
|
|
8016
|
-
"The current package-index release entrypoint is `code-mower==1.2.
|
|
8020
|
+
"The current package-index release entrypoint is `code-mower==1.2.1`",
|
|
8017
8021
|
public_release,
|
|
8018
8022
|
)
|
|
8019
8023
|
self.assertIn("The v1.0 supervised-pilot release includes", public_release)
|
|
@@ -8023,7 +8027,7 @@ def main():
|
|
|
8023
8027
|
)
|
|
8024
8028
|
|
|
8025
8029
|
self.assertIn(
|
|
8026
|
-
"The current public-release baseline is `v1.2.
|
|
8030
|
+
"The current public-release baseline is `v1.2.1`",
|
|
8027
8031
|
oss_checklist,
|
|
8028
8032
|
)
|
|
8029
8033
|
self.assertIn(
|
|
@@ -8054,7 +8058,7 @@ def main():
|
|
|
8054
8058
|
" ".join(first_user.split()),
|
|
8055
8059
|
)
|
|
8056
8060
|
self.assertIn("never substitute mutable `main`", first_user)
|
|
8057
|
-
self.assertEqual(first_user.count(" --ref v1.2.
|
|
8061
|
+
self.assertEqual(first_user.count(" --ref v1.2.1 \\"), 2)
|
|
8058
8062
|
self.assertNotIn(" --ref main \\", first_user)
|
|
8059
8063
|
self.assertIn("-f publish_testpypi=true", first_user)
|
|
8060
8064
|
self.assertIn("-f publish_pypi=false", first_user)
|
|
@@ -8066,23 +8070,23 @@ def main():
|
|
|
8066
8070
|
first_user,
|
|
8067
8071
|
)
|
|
8068
8072
|
self.assertNotIn(
|
|
8069
|
-
"The latest public-package rehearsal for `v1.2.
|
|
8073
|
+
"The latest public-package rehearsal for `v1.2.1` was run",
|
|
8070
8074
|
first_user,
|
|
8071
8075
|
)
|
|
8072
|
-
self.assertNotIn("TestPyPI is not\npublished for `1.2.
|
|
8076
|
+
self.assertNotIn("TestPyPI is not\npublished for `1.2.1`", first_user)
|
|
8073
8077
|
for text in (readme, current_state, rollout):
|
|
8074
8078
|
self.assertNotIn(
|
|
8075
|
-
"published on PyPI as `code-mower==1.2.
|
|
8079
|
+
"published on PyPI as `code-mower==1.2.1`",
|
|
8076
8080
|
text,
|
|
8077
8081
|
)
|
|
8078
8082
|
self.assertNotIn(
|
|
8079
8083
|
"latest 10/10 public-package readiness proof for "
|
|
8080
|
-
"`code-mower==1.2.
|
|
8084
|
+
"`code-mower==1.2.1`",
|
|
8081
8085
|
text,
|
|
8082
8086
|
)
|
|
8083
8087
|
self.assertNotIn(
|
|
8084
8088
|
"public PyPI package-install rehearsal from "
|
|
8085
|
-
"`code-mower==1.2.
|
|
8089
|
+
"`code-mower==1.2.1`",
|
|
8086
8090
|
text,
|
|
8087
8091
|
)
|
|
8088
8092
|
self.assertNotIn("beta.52: 10/10 first-user readiness", text)
|
|
@@ -8382,7 +8386,7 @@ def main():
|
|
|
8382
8386
|
|
|
8383
8387
|
self.assertIn("Python 3.12 or newer", install)
|
|
8384
8388
|
self.assertIn('pipx install --python "$CODE_MOWER_PYTHON"', install)
|
|
8385
|
-
self.assertIn("uv tool install --python 3.12 code-mower==1.2.
|
|
8389
|
+
self.assertIn("uv tool install --python 3.12 code-mower==1.2.1", install)
|
|
8386
8390
|
self.assertIn(
|
|
8387
8391
|
'PIP_NO_CACHE_DIR=1 pipx install --force --python "$CODE_MOWER_PYTHON"',
|
|
8388
8392
|
install,
|
|
@@ -8476,7 +8480,7 @@ def main():
|
|
|
8476
8480
|
/ "v101-effectiveness-assessment.md",
|
|
8477
8481
|
}
|
|
8478
8482
|
stale_phrases = (
|
|
8479
|
-
"pipx install --python python3.12 code-mower==1.2.
|
|
8483
|
+
"pipx install --python python3.12 code-mower==1.2.1",
|
|
8480
8484
|
"Use only after TestPyPI passes.",
|
|
8481
8485
|
"future newest betas until 1.0",
|
|
8482
8486
|
"during v0.7 adoption",
|
|
@@ -8776,7 +8780,7 @@ def main():
|
|
|
8776
8780
|
"doctor --adoption --repo codemower-ai/code-mower",
|
|
8777
8781
|
doctor_step["command"],
|
|
8778
8782
|
)
|
|
8779
|
-
self.assertIn("code-mower==1.2.
|
|
8783
|
+
self.assertIn("code-mower==1.2.1", package_step["command"])
|
|
8780
8784
|
self.assertIn("--allow-package-index", package_step["command"])
|
|
8781
8785
|
self.assertIn("current published PyPI package", package_step["why"])
|
|
8782
8786
|
self.assertIn("first_user_readiness", package_step["why"])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|