code-mower 0.5.0b6__tar.gz → 0.5.0b7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_mower-0.5.0b6/src/code_mower.egg-info → code_mower-0.5.0b7}/PKG-INFO +13 -6
- code_mower-0.5.0b6/PKG-INFO → code_mower-0.5.0b7/README.md +12 -17
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/pyproject.toml +1 -1
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/__init__.py +1 -1
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/models.py +25 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/output.py +13 -0
- code_mower-0.5.0b6/README.md → code_mower-0.5.0b7/src/code_mower.egg-info/PKG-INFO +24 -5
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_output.py +13 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_registry.py +8 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_release_hygiene.py +34 -34
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/LICENSE +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/MANIFEST.in +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/NOTICE +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/SUPPORT.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/requirements/requirements.txt +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/setup.cfg +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/checks.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/clear_stale.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cli.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/operations.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/config.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/init.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_content.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_manifest.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_static.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/prompts.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_registry.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/secrets.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/versioning.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/SOURCES.txt +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/aider.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/claude_audit.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/codex.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/devin.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/gitar.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/greptile.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/qodo.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers.yml +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_checks.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_clear_stale.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_client.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_reviewer_metrics_core.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b7
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -98,11 +98,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
python3.12 --version
|
|
101
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
101
|
+
pipx install --python python3.12 code-mower==0.5.0b7
|
|
102
102
|
code-mower --version
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
`0.5.
|
|
105
|
+
`0.5.0b7` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
106
106
|
line, use the explicit beta version above or allow prereleases with:
|
|
107
107
|
|
|
108
108
|
```bash
|
|
@@ -174,7 +174,8 @@ The cloud value loop is:
|
|
|
174
174
|
2. inspect the metadata-only bundle or dogfood preview;
|
|
175
175
|
3. upload only with `--yes`; and
|
|
176
176
|
4. use [CodeMower.com](https://codemower.com) to see repo rollups, provider/lens
|
|
177
|
-
signal, cost/latency, noisy lanes,
|
|
177
|
+
signal, cost/latency, noisy lanes, next-lane recommendations, and
|
|
178
|
+
token-safe evidence/detail pages over time.
|
|
178
179
|
|
|
179
180
|
Start with a dry run:
|
|
180
181
|
|
|
@@ -184,6 +185,12 @@ code-mower cloud dogfood --json
|
|
|
184
185
|
|
|
185
186
|
Nothing uploads unless you pass `--yes`.
|
|
186
187
|
|
|
188
|
+
Current dogfood uploads, historical catch-up imports, and calibrated
|
|
189
|
+
reviewer/lens evidence are intentionally separate. Imported GitHub Actions
|
|
190
|
+
history can prove activity and upload health; it should not be treated as
|
|
191
|
+
reviewer-quality evidence until it is calibrated against known-clean and
|
|
192
|
+
known-blocked cases.
|
|
193
|
+
|
|
187
194
|
To connect to [CodeMower.com](https://codemower.com), sign in at
|
|
188
195
|
[https://codemower.com/login](https://codemower.com/login), create or receive a
|
|
189
196
|
team token, then run:
|
|
@@ -239,9 +246,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
239
246
|
|
|
240
247
|
## Installation Status
|
|
241
248
|
|
|
242
|
-
The current public beta is `v0.5.0-beta.
|
|
249
|
+
The current public beta is `v0.5.0-beta.7` from
|
|
243
250
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
|
|
244
|
-
is published as `code-mower==0.5.
|
|
251
|
+
is published as `code-mower==0.5.0b7` on
|
|
245
252
|
[PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
|
|
246
253
|
auditable source for tags, build artifacts, and release notes.
|
|
247
254
|
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: code-mower
|
|
3
|
-
Version: 0.5.0b6
|
|
4
|
-
Summary: Multi-reviewer AI code audit orchestration
|
|
5
|
-
License-Expression: Apache-2.0
|
|
6
|
-
Requires-Python: >=3.11
|
|
7
|
-
Description-Content-Type: text/markdown
|
|
8
|
-
License-File: LICENSE
|
|
9
|
-
License-File: NOTICE
|
|
10
|
-
Requires-Dist: PyYAML>=6.0
|
|
11
|
-
Dynamic: license-file
|
|
12
|
-
|
|
13
1
|
# Code Mower
|
|
14
2
|
|
|
15
3
|
Code Mower helps teams set up AI peer-programmer and reviewer lanes on real
|
|
@@ -98,11 +86,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
98
86
|
|
|
99
87
|
```bash
|
|
100
88
|
python3.12 --version
|
|
101
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
89
|
+
pipx install --python python3.12 code-mower==0.5.0b7
|
|
102
90
|
code-mower --version
|
|
103
91
|
```
|
|
104
92
|
|
|
105
|
-
`0.5.
|
|
93
|
+
`0.5.0b7` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
106
94
|
line, use the explicit beta version above or allow prereleases with:
|
|
107
95
|
|
|
108
96
|
```bash
|
|
@@ -174,7 +162,8 @@ The cloud value loop is:
|
|
|
174
162
|
2. inspect the metadata-only bundle or dogfood preview;
|
|
175
163
|
3. upload only with `--yes`; and
|
|
176
164
|
4. use [CodeMower.com](https://codemower.com) to see repo rollups, provider/lens
|
|
177
|
-
signal, cost/latency, noisy lanes,
|
|
165
|
+
signal, cost/latency, noisy lanes, next-lane recommendations, and
|
|
166
|
+
token-safe evidence/detail pages over time.
|
|
178
167
|
|
|
179
168
|
Start with a dry run:
|
|
180
169
|
|
|
@@ -184,6 +173,12 @@ code-mower cloud dogfood --json
|
|
|
184
173
|
|
|
185
174
|
Nothing uploads unless you pass `--yes`.
|
|
186
175
|
|
|
176
|
+
Current dogfood uploads, historical catch-up imports, and calibrated
|
|
177
|
+
reviewer/lens evidence are intentionally separate. Imported GitHub Actions
|
|
178
|
+
history can prove activity and upload health; it should not be treated as
|
|
179
|
+
reviewer-quality evidence until it is calibrated against known-clean and
|
|
180
|
+
known-blocked cases.
|
|
181
|
+
|
|
187
182
|
To connect to [CodeMower.com](https://codemower.com), sign in at
|
|
188
183
|
[https://codemower.com/login](https://codemower.com/login), create or receive a
|
|
189
184
|
team token, then run:
|
|
@@ -239,9 +234,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
239
234
|
|
|
240
235
|
## Installation Status
|
|
241
236
|
|
|
242
|
-
The current public beta is `v0.5.0-beta.
|
|
237
|
+
The current public beta is `v0.5.0-beta.7` from
|
|
243
238
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
|
|
244
|
-
is published as `code-mower==0.5.
|
|
239
|
+
is published as `code-mower==0.5.0b7` on
|
|
245
240
|
[PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
|
|
246
241
|
auditable source for tags, build artifacts, and release notes.
|
|
247
242
|
|
|
@@ -57,6 +57,30 @@ class DoctorReport:
|
|
|
57
57
|
return STATUS_WARN
|
|
58
58
|
return STATUS_PASS
|
|
59
59
|
|
|
60
|
+
@property
|
|
61
|
+
def run_plan(self) -> tuple[dict[str, Any], ...]:
|
|
62
|
+
"""Return the structured doctor run plan when a report contains one."""
|
|
63
|
+
|
|
64
|
+
for check in self.checks:
|
|
65
|
+
if check.name != "doctor.plan" or not isinstance(check.detail, Mapping):
|
|
66
|
+
continue
|
|
67
|
+
stages = check.detail.get("stages")
|
|
68
|
+
if not isinstance(stages, list):
|
|
69
|
+
return ()
|
|
70
|
+
plan: list[dict[str, Any]] = []
|
|
71
|
+
for stage in stages:
|
|
72
|
+
if not isinstance(stage, Mapping):
|
|
73
|
+
continue
|
|
74
|
+
plan.append(
|
|
75
|
+
{
|
|
76
|
+
"id": str(stage.get("id", "")),
|
|
77
|
+
"group": str(stage.get("group", "")),
|
|
78
|
+
"optional": bool(stage.get("optional", False)),
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
return tuple(plan)
|
|
82
|
+
return ()
|
|
83
|
+
|
|
60
84
|
def group_summary(self) -> dict[str, dict[str, int | str]]:
|
|
61
85
|
summary: dict[str, dict[str, int | str]] = {}
|
|
62
86
|
for group_id, label in GROUP_LABELS.items():
|
|
@@ -91,6 +115,7 @@ class DoctorReport:
|
|
|
91
115
|
"failures": self.failures,
|
|
92
116
|
"warnings": self.warnings,
|
|
93
117
|
},
|
|
118
|
+
"run_plan": list(self.run_plan),
|
|
94
119
|
"groups": self.group_summary(),
|
|
95
120
|
"checks": [check.as_dict() for check in self.checks],
|
|
96
121
|
}
|
|
@@ -39,6 +39,16 @@ def _format_status_summary(report: DoctorReport) -> str:
|
|
|
39
39
|
return ", ".join(parts)
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
def _format_run_plan(report: DoctorReport) -> str | None:
|
|
43
|
+
if not report.run_plan:
|
|
44
|
+
return None
|
|
45
|
+
stages = []
|
|
46
|
+
for stage in report.run_plan:
|
|
47
|
+
suffix = " optional" if stage.get("optional") else ""
|
|
48
|
+
stages.append(f"{stage.get('id', '')} ({stage.get('group', '')}{suffix})")
|
|
49
|
+
return ", ".join(stages)
|
|
50
|
+
|
|
51
|
+
|
|
42
52
|
def _format_check(check: DoctorCheck) -> list[str]:
|
|
43
53
|
lane = f" [{check.lane}]" if check.lane else ""
|
|
44
54
|
lines = [f"- {check.status.upper()} {check.name}{lane}: {check.message}"]
|
|
@@ -57,6 +67,9 @@ def render_doctor_text(report: DoctorReport) -> str:
|
|
|
57
67
|
]
|
|
58
68
|
if report.profile:
|
|
59
69
|
lines.append(f"Profile: {report.profile}")
|
|
70
|
+
run_plan = _format_run_plan(report)
|
|
71
|
+
if run_plan:
|
|
72
|
+
lines.append(f"Run plan: {run_plan}")
|
|
60
73
|
lines.append(f"Checks: {_format_status_summary(report)}")
|
|
61
74
|
lines.append("")
|
|
62
75
|
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: code-mower
|
|
3
|
+
Version: 0.5.0b7
|
|
4
|
+
Summary: Multi-reviewer AI code audit orchestration
|
|
5
|
+
License-Expression: Apache-2.0
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
License-File: NOTICE
|
|
10
|
+
Requires-Dist: PyYAML>=6.0
|
|
11
|
+
Dynamic: license-file
|
|
12
|
+
|
|
1
13
|
# Code Mower
|
|
2
14
|
|
|
3
15
|
Code Mower helps teams set up AI peer-programmer and reviewer lanes on real
|
|
@@ -86,11 +98,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
86
98
|
|
|
87
99
|
```bash
|
|
88
100
|
python3.12 --version
|
|
89
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
101
|
+
pipx install --python python3.12 code-mower==0.5.0b7
|
|
90
102
|
code-mower --version
|
|
91
103
|
```
|
|
92
104
|
|
|
93
|
-
`0.5.
|
|
105
|
+
`0.5.0b7` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
94
106
|
line, use the explicit beta version above or allow prereleases with:
|
|
95
107
|
|
|
96
108
|
```bash
|
|
@@ -162,7 +174,8 @@ The cloud value loop is:
|
|
|
162
174
|
2. inspect the metadata-only bundle or dogfood preview;
|
|
163
175
|
3. upload only with `--yes`; and
|
|
164
176
|
4. use [CodeMower.com](https://codemower.com) to see repo rollups, provider/lens
|
|
165
|
-
signal, cost/latency, noisy lanes,
|
|
177
|
+
signal, cost/latency, noisy lanes, next-lane recommendations, and
|
|
178
|
+
token-safe evidence/detail pages over time.
|
|
166
179
|
|
|
167
180
|
Start with a dry run:
|
|
168
181
|
|
|
@@ -172,6 +185,12 @@ code-mower cloud dogfood --json
|
|
|
172
185
|
|
|
173
186
|
Nothing uploads unless you pass `--yes`.
|
|
174
187
|
|
|
188
|
+
Current dogfood uploads, historical catch-up imports, and calibrated
|
|
189
|
+
reviewer/lens evidence are intentionally separate. Imported GitHub Actions
|
|
190
|
+
history can prove activity and upload health; it should not be treated as
|
|
191
|
+
reviewer-quality evidence until it is calibrated against known-clean and
|
|
192
|
+
known-blocked cases.
|
|
193
|
+
|
|
175
194
|
To connect to [CodeMower.com](https://codemower.com), sign in at
|
|
176
195
|
[https://codemower.com/login](https://codemower.com/login), create or receive a
|
|
177
196
|
team token, then run:
|
|
@@ -227,9 +246,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
227
246
|
|
|
228
247
|
## Installation Status
|
|
229
248
|
|
|
230
|
-
The current public beta is `v0.5.0-beta.
|
|
249
|
+
The current public beta is `v0.5.0-beta.7` from
|
|
231
250
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
|
|
232
|
-
is published as `code-mower==0.5.
|
|
251
|
+
is published as `code-mower==0.5.0b7` on
|
|
233
252
|
[PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
|
|
234
253
|
auditable source for tags, build artifacts, and release notes.
|
|
235
254
|
|
|
@@ -26,6 +26,14 @@ class DoctorOutputTests(unittest.TestCase):
|
|
|
26
26
|
name="doctor.plan",
|
|
27
27
|
status=STATUS_PASS,
|
|
28
28
|
message="doctor run plan: load-inputs, select-profile, runtime, providers",
|
|
29
|
+
detail={
|
|
30
|
+
"stages": [
|
|
31
|
+
{"id": "load-inputs", "group": "runtime", "optional": False},
|
|
32
|
+
{"id": "select-profile", "group": "runtime", "optional": False},
|
|
33
|
+
{"id": "runtime", "group": "runtime", "optional": False},
|
|
34
|
+
{"id": "providers", "group": "providers", "optional": False},
|
|
35
|
+
]
|
|
36
|
+
},
|
|
29
37
|
),
|
|
30
38
|
DoctorCheck(
|
|
31
39
|
name="runtime.python",
|
|
@@ -59,6 +67,11 @@ class DoctorOutputTests(unittest.TestCase):
|
|
|
59
67
|
|
|
60
68
|
rendered = output.render_doctor_text(report)
|
|
61
69
|
|
|
70
|
+
self.assertIn(
|
|
71
|
+
"Run plan: load-inputs (runtime), select-profile (runtime), "
|
|
72
|
+
"runtime (runtime), providers (providers)",
|
|
73
|
+
rendered,
|
|
74
|
+
)
|
|
62
75
|
self.assertIn("Checks: 7 total, 2 warnings, 1 skipped", rendered)
|
|
63
76
|
self.assertLess(rendered.index("Setup"), rendered.index("Runtime"))
|
|
64
77
|
self.assertLess(rendered.index("Runtime"), rendered.index("Provider lanes"))
|
|
@@ -54,6 +54,14 @@ class DoctorRegistryTests(unittest.TestCase):
|
|
|
54
54
|
tuple(stage["id"] for stage in plan_check.detail["stages"]),
|
|
55
55
|
("load-inputs", "select-profile", "runtime", "providers", "github", "cloud"),
|
|
56
56
|
)
|
|
57
|
+
self.assertEqual(
|
|
58
|
+
tuple(stage["id"] for stage in report.run_plan),
|
|
59
|
+
("load-inputs", "select-profile", "runtime", "providers", "github", "cloud"),
|
|
60
|
+
)
|
|
61
|
+
self.assertEqual(
|
|
62
|
+
tuple(stage["id"] for stage in report.as_dict()["run_plan"]),
|
|
63
|
+
("load-inputs", "select-profile", "runtime", "providers", "github", "cloud"),
|
|
64
|
+
)
|
|
57
65
|
|
|
58
66
|
|
|
59
67
|
if __name__ == "__main__":
|
|
@@ -47,7 +47,7 @@ from scripts import privacy_scan
|
|
|
47
47
|
|
|
48
48
|
class ReleaseHygieneTests(unittest.TestCase):
|
|
49
49
|
def test_version_is_current_v05_prerelease(self) -> None:
|
|
50
|
-
self.assertEqual(__version__, "0.5.
|
|
50
|
+
self.assertEqual(__version__, "0.5.0b7")
|
|
51
51
|
|
|
52
52
|
def test_release_workflow_verifies_downloaded_distributions_before_publish(self) -> None:
|
|
53
53
|
workflow = (ROOT / ".github/workflows/release.yml").read_text(encoding="utf-8")
|
|
@@ -158,7 +158,7 @@ class ReleaseHygieneTests(unittest.TestCase):
|
|
|
158
158
|
self.assertIn(
|
|
159
159
|
(
|
|
160
160
|
"code-mower migration package-install-rehearsal --package-spec "
|
|
161
|
-
"code-mower==0.5.
|
|
161
|
+
"code-mower==0.5.0b7 --json"
|
|
162
162
|
),
|
|
163
163
|
help_text,
|
|
164
164
|
)
|
|
@@ -1367,8 +1367,8 @@ printf '%s\\n' "${lane}"
|
|
|
1367
1367
|
fromlist=["current_alpha_package_spec"],
|
|
1368
1368
|
)
|
|
1369
1369
|
self.assertEqual(
|
|
1370
|
-
legacy_module.current_alpha_package_spec("0.5.
|
|
1371
|
-
"code-mower==0.5.
|
|
1370
|
+
legacy_module.current_alpha_package_spec("0.5.0b7"),
|
|
1371
|
+
"code-mower==0.5.0b7",
|
|
1372
1372
|
)
|
|
1373
1373
|
finally:
|
|
1374
1374
|
sys.path[:] = original_path
|
|
@@ -1405,7 +1405,7 @@ printf '%s\\n' "${lane}"
|
|
|
1405
1405
|
"-c",
|
|
1406
1406
|
(
|
|
1407
1407
|
"from tools import code_mower_package_content as c; "
|
|
1408
|
-
"print(c.current_alpha_package_spec('0.5.
|
|
1408
|
+
"print(c.current_alpha_package_spec('0.5.0b7'))"
|
|
1409
1409
|
),
|
|
1410
1410
|
],
|
|
1411
1411
|
cwd=tmp_path,
|
|
@@ -1418,7 +1418,7 @@ printf '%s\\n' "${lane}"
|
|
|
1418
1418
|
self.assertEqual(completed.returncode, 0, completed.stderr)
|
|
1419
1419
|
self.assertEqual(
|
|
1420
1420
|
completed.stdout.strip(),
|
|
1421
|
-
"code-mower==0.5.
|
|
1421
|
+
"code-mower==0.5.0b7",
|
|
1422
1422
|
)
|
|
1423
1423
|
|
|
1424
1424
|
def test_package_rendering_legacy_fallback_stays_valid_yaml_subset(self) -> None:
|
|
@@ -1494,11 +1494,11 @@ printf '%s\\n' "${lane}"
|
|
|
1494
1494
|
(output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
|
|
1495
1495
|
)
|
|
1496
1496
|
self.assertIn(
|
|
1497
|
-
'version = "0.5.
|
|
1497
|
+
'version = "0.5.0b7"',
|
|
1498
1498
|
(output_dir / "pyproject.toml").read_text(encoding="utf-8"),
|
|
1499
1499
|
)
|
|
1500
1500
|
self.assertIn(
|
|
1501
|
-
'__version__ = "0.5.
|
|
1501
|
+
'__version__ = "0.5.0b7"',
|
|
1502
1502
|
(output_dir / "src/code_mower/__init__.py").read_text(
|
|
1503
1503
|
encoding="utf-8"
|
|
1504
1504
|
),
|
|
@@ -2967,7 +2967,7 @@ def main():
|
|
|
2967
2967
|
{
|
|
2968
2968
|
"status": "pass",
|
|
2969
2969
|
"package_spec": "code-mower",
|
|
2970
|
-
"version": "code-mower 0.5.
|
|
2970
|
+
"version": "code-mower 0.5.0b7",
|
|
2971
2971
|
"work_dir": "/tmp/code-mower-rehearsal",
|
|
2972
2972
|
"toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
|
|
2973
2973
|
"step_count": 1,
|
|
@@ -3079,7 +3079,7 @@ def main():
|
|
|
3079
3079
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3080
3080
|
toy_repo=toy_repo,
|
|
3081
3081
|
outputs=outputs,
|
|
3082
|
-
version="code-mower 0.5.
|
|
3082
|
+
version="code-mower 0.5.0b7",
|
|
3083
3083
|
steps=[
|
|
3084
3084
|
{
|
|
3085
3085
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3158,7 +3158,7 @@ def main():
|
|
|
3158
3158
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3159
3159
|
toy_repo=toy_repo,
|
|
3160
3160
|
outputs=outputs,
|
|
3161
|
-
version="code-mower 0.5.
|
|
3161
|
+
version="code-mower 0.5.0b7",
|
|
3162
3162
|
steps=[
|
|
3163
3163
|
{
|
|
3164
3164
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3220,7 +3220,7 @@ def main():
|
|
|
3220
3220
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3221
3221
|
toy_repo=toy_repo,
|
|
3222
3222
|
outputs=outputs,
|
|
3223
|
-
version="code-mower 0.5.
|
|
3223
|
+
version="code-mower 0.5.0b7",
|
|
3224
3224
|
steps=[
|
|
3225
3225
|
{
|
|
3226
3226
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3286,24 +3286,24 @@ def main():
|
|
|
3286
3286
|
)
|
|
3287
3287
|
self.assertEqual(
|
|
3288
3288
|
code_mower_migration._resolve_install_package_spec(
|
|
3289
|
-
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.
|
|
3289
|
+
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.7",
|
|
3290
3290
|
base_dir=package,
|
|
3291
3291
|
),
|
|
3292
|
-
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.
|
|
3292
|
+
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.7",
|
|
3293
3293
|
)
|
|
3294
3294
|
self.assertEqual(
|
|
3295
3295
|
code_mower_migration._resolve_install_package_spec(
|
|
3296
|
-
"code-mower==0.5.
|
|
3296
|
+
"code-mower==0.5.0b7",
|
|
3297
3297
|
base_dir=package,
|
|
3298
3298
|
),
|
|
3299
|
-
"code-mower==0.5.
|
|
3299
|
+
"code-mower==0.5.0b7",
|
|
3300
3300
|
)
|
|
3301
3301
|
|
|
3302
3302
|
def test_package_install_rehearsal_supports_index_aware_pip_install(self) -> None:
|
|
3303
3303
|
self.assertEqual(
|
|
3304
3304
|
code_mower_migration._pip_install_command(
|
|
3305
3305
|
Path("/tmp/venv/bin/python"),
|
|
3306
|
-
"code-mower==0.5.
|
|
3306
|
+
"code-mower==0.5.0b7",
|
|
3307
3307
|
pip_index_url="https://test.pypi.org/simple/",
|
|
3308
3308
|
pip_extra_index_urls=["https://pypi.org/simple/"],
|
|
3309
3309
|
),
|
|
@@ -3316,7 +3316,7 @@ def main():
|
|
|
3316
3316
|
"https://test.pypi.org/simple/",
|
|
3317
3317
|
"--extra-index-url",
|
|
3318
3318
|
"https://pypi.org/simple/",
|
|
3319
|
-
"code-mower==0.5.
|
|
3319
|
+
"code-mower==0.5.0b7",
|
|
3320
3320
|
],
|
|
3321
3321
|
)
|
|
3322
3322
|
|
|
@@ -3336,10 +3336,10 @@ def main():
|
|
|
3336
3336
|
payload = release_readiness.render_release_readiness(ROOT)
|
|
3337
3337
|
|
|
3338
3338
|
self.assertEqual(payload["status"], "pass")
|
|
3339
|
-
self.assertEqual(payload["version"], "0.5.
|
|
3340
|
-
self.assertEqual(payload["release_tag"], "v0.5.0-beta.
|
|
3341
|
-
self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.
|
|
3342
|
-
self.assertEqual(payload["package_index_spec"], "code-mower==0.5.
|
|
3339
|
+
self.assertEqual(payload["version"], "0.5.0b7")
|
|
3340
|
+
self.assertEqual(payload["release_tag"], "v0.5.0-beta.7")
|
|
3341
|
+
self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.7")
|
|
3342
|
+
self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b7")
|
|
3343
3343
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
3344
3344
|
self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
|
|
3345
3345
|
self.assertEqual(
|
|
@@ -3388,7 +3388,7 @@ def main():
|
|
|
3388
3388
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
3389
3389
|
check = check_ids["materialized-package-version-consistency"]
|
|
3390
3390
|
self.assertEqual(check["status"], "fail")
|
|
3391
|
-
self.assertEqual(check["detail"]["source_version"], "0.5.
|
|
3391
|
+
self.assertEqual(check["detail"]["source_version"], "0.5.0b7")
|
|
3392
3392
|
self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
|
|
3393
3393
|
|
|
3394
3394
|
def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
|
|
@@ -3468,20 +3468,20 @@ def main():
|
|
|
3468
3468
|
|
|
3469
3469
|
def test_release_readiness_tag_derivation_supports_release_stages(self) -> None:
|
|
3470
3470
|
self.assertEqual(
|
|
3471
|
-
release_readiness._release_tag_for_version("0.5.
|
|
3472
|
-
"v0.5.0-beta.
|
|
3471
|
+
release_readiness._release_tag_for_version("0.5.0b7"),
|
|
3472
|
+
"v0.5.0-beta.7",
|
|
3473
3473
|
)
|
|
3474
3474
|
self.assertEqual(
|
|
3475
|
-
code_mower_versioning.release_tag_for_version("0.5.
|
|
3476
|
-
"v0.5.0-beta.
|
|
3475
|
+
code_mower_versioning.release_tag_for_version("0.5.0b7"),
|
|
3476
|
+
"v0.5.0-beta.7",
|
|
3477
3477
|
)
|
|
3478
3478
|
self.assertEqual(
|
|
3479
|
-
release_readiness._release_tag_for_version("0.5.
|
|
3480
|
-
"v0.5.0-beta.
|
|
3479
|
+
release_readiness._release_tag_for_version("0.5.0b7"),
|
|
3480
|
+
"v0.5.0-beta.7",
|
|
3481
3481
|
)
|
|
3482
3482
|
self.assertEqual(
|
|
3483
|
-
code_mower_versioning.release_tag_for_version("0.5.
|
|
3484
|
-
"v0.5.0-beta.
|
|
3483
|
+
code_mower_versioning.release_tag_for_version("0.5.0b7"),
|
|
3484
|
+
"v0.5.0-beta.7",
|
|
3485
3485
|
)
|
|
3486
3486
|
self.assertEqual(
|
|
3487
3487
|
release_readiness._release_tag_for_version("1.0.0rc1"),
|
|
@@ -3510,8 +3510,8 @@ def main():
|
|
|
3510
3510
|
next_steps.current_alpha_package_spec(),
|
|
3511
3511
|
)
|
|
3512
3512
|
self.assertEqual(
|
|
3513
|
-
code_mower_package_content.current_alpha_package_spec("0.5.
|
|
3514
|
-
"code-mower==0.5.
|
|
3513
|
+
code_mower_package_content.current_alpha_package_spec("0.5.0b7"),
|
|
3514
|
+
"code-mower==0.5.0b7",
|
|
3515
3515
|
)
|
|
3516
3516
|
self.assertNotIn(next_steps.current_public_tag(), package_content_text)
|
|
3517
3517
|
self.assertNotIn("v0.0.0", package_content_text)
|
|
@@ -3683,7 +3683,7 @@ def main():
|
|
|
3683
3683
|
step for step in plan["steps"] if step["id"] == "package-install-rehearsal"
|
|
3684
3684
|
)
|
|
3685
3685
|
self.assertIn("doctor --v05", doctor_step["command"])
|
|
3686
|
-
self.assertIn("code-mower==0.5.
|
|
3686
|
+
self.assertIn("code-mower==0.5.0b7", package_step["command"])
|
|
3687
3687
|
self.assertIn("current published PyPI prerelease", package_step["why"])
|
|
3688
3688
|
self.assertIn("first_user_readiness", package_step["why"])
|
|
3689
3689
|
self.assertEqual(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|