code-mower 0.5.0b7__tar.gz → 0.5.0b8__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.0b7 → code_mower-0.5.0b8}/PKG-INFO +5 -5
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/README.md +4 -4
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/pyproject.toml +1 -1
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/__init__.py +1 -1
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud.py +1 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/operations.py +60 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower.egg-info/PKG-INFO +5 -5
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_cloud_client.py +54 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_release_hygiene.py +39 -34
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/LICENSE +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/MANIFEST.in +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/NOTICE +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/SUPPORT.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/requirements/requirements.txt +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/setup.cfg +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/checks.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/clear_stale.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cli.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/config.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/init.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/migration.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/package.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/package_content.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/package_manifest.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/package_static.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/prompts.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_registry.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/secrets.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower/versioning.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower.egg-info/SOURCES.txt +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/aider.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/claude_audit.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/codex.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/devin.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/gitar.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/greptile.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers/qodo.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/providers.yml +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_checks.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_clear_stale.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_output.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_doctor_registry.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.5.0b7 → code_mower-0.5.0b8}/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.0b8
|
|
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.0b8
|
|
102
102
|
code-mower --version
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
`0.5.
|
|
105
|
+
`0.5.0b8` 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
|
|
@@ -246,9 +246,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
246
246
|
|
|
247
247
|
## Installation Status
|
|
248
248
|
|
|
249
|
-
The current public beta is `v0.5.0-beta.
|
|
249
|
+
The current public beta is `v0.5.0-beta.8` from
|
|
250
250
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
|
|
251
|
-
is published as `code-mower==0.5.
|
|
251
|
+
is published as `code-mower==0.5.0b8` on
|
|
252
252
|
[PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
|
|
253
253
|
auditable source for tags, build artifacts, and release notes.
|
|
254
254
|
|
|
@@ -86,11 +86,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
python3.12 --version
|
|
89
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
89
|
+
pipx install --python python3.12 code-mower==0.5.0b8
|
|
90
90
|
code-mower --version
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
`0.5.
|
|
93
|
+
`0.5.0b8` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
94
94
|
line, use the explicit beta version above or allow prereleases with:
|
|
95
95
|
|
|
96
96
|
```bash
|
|
@@ -234,9 +234,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
234
234
|
|
|
235
235
|
## Installation Status
|
|
236
236
|
|
|
237
|
-
The current public beta is `v0.5.0-beta.
|
|
237
|
+
The current public beta is `v0.5.0-beta.8` from
|
|
238
238
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
|
|
239
|
-
is published as `code-mower==0.5.
|
|
239
|
+
is published as `code-mower==0.5.0b8` on
|
|
240
240
|
[PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
|
|
241
241
|
auditable source for tags, build artifacts, and release notes.
|
|
242
242
|
|
|
@@ -601,6 +601,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
601
601
|
print(f"Status: {result['status']}")
|
|
602
602
|
print(f"Repository: {result['repo_slug']}")
|
|
603
603
|
print(f"Runs: {result['run_count']}")
|
|
604
|
+
print("Provenance: imported history (not calibration evidence)")
|
|
604
605
|
print(f"Bundle: {result['export']['output_dir']}")
|
|
605
606
|
print(f"Events: {result['export']['event_count']}")
|
|
606
607
|
if result["status"] == "uploaded":
|
|
@@ -23,6 +23,56 @@ from .setup import DEFAULT_INSTALL_ID_ENV, DEFAULT_TEAM_ID_ENV
|
|
|
23
23
|
from .upload import build_upload_payload, post_upload_payload
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def build_catch_up_summary(
|
|
27
|
+
*,
|
|
28
|
+
repo_slug: str,
|
|
29
|
+
runs: list[dict[str, Any]],
|
|
30
|
+
events: list[dict[str, Any]],
|
|
31
|
+
requested_limit: int,
|
|
32
|
+
include_git_ref: bool,
|
|
33
|
+
) -> dict[str, Any]:
|
|
34
|
+
"""Summarize imported GitHub Actions history without exposing ref details."""
|
|
35
|
+
|
|
36
|
+
def increment(target: dict[str, int], raw: object) -> None:
|
|
37
|
+
value = str(raw or "").strip() or "unknown"
|
|
38
|
+
target[value] = target.get(value, 0) + 1
|
|
39
|
+
|
|
40
|
+
workflow_counts: dict[str, int] = {}
|
|
41
|
+
status_counts: dict[str, int] = {}
|
|
42
|
+
conclusion_counts: dict[str, int] = {}
|
|
43
|
+
created_values: list[str] = []
|
|
44
|
+
updated_values: list[str] = []
|
|
45
|
+
|
|
46
|
+
for run in runs:
|
|
47
|
+
increment(workflow_counts, run.get("name"))
|
|
48
|
+
increment(status_counts, run.get("status"))
|
|
49
|
+
increment(conclusion_counts, run.get("conclusion"))
|
|
50
|
+
created_at = str(run.get("createdAt") or "").strip()
|
|
51
|
+
updated_at = str(run.get("updatedAt") or "").strip()
|
|
52
|
+
if created_at:
|
|
53
|
+
created_values.append(created_at)
|
|
54
|
+
if updated_at:
|
|
55
|
+
updated_values.append(updated_at)
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
"repo_slug": repo_slug,
|
|
59
|
+
"requested_limit": requested_limit,
|
|
60
|
+
"run_count": len(runs),
|
|
61
|
+
"event_count": len(events),
|
|
62
|
+
"provenance": "imported_history",
|
|
63
|
+
"source_category": "history",
|
|
64
|
+
"history_only": True,
|
|
65
|
+
"calibration_evidence": False,
|
|
66
|
+
"git_ref_included": include_git_ref,
|
|
67
|
+
"workflow_counts": dict(sorted(workflow_counts.items())),
|
|
68
|
+
"status_counts": dict(sorted(status_counts.items())),
|
|
69
|
+
"conclusion_counts": dict(sorted(conclusion_counts.items())),
|
|
70
|
+
"oldest_run_at": min(created_values) if created_values else "",
|
|
71
|
+
"newest_run_at": max(created_values) if created_values else "",
|
|
72
|
+
"last_updated_at": max(updated_values) if updated_values else "",
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
26
76
|
def dogfood_upload(
|
|
27
77
|
*,
|
|
28
78
|
repo_path: Path,
|
|
@@ -157,6 +207,13 @@ def catch_up_upload(
|
|
|
157
207
|
)
|
|
158
208
|
for run in runs
|
|
159
209
|
]
|
|
210
|
+
catch_up_summary = build_catch_up_summary(
|
|
211
|
+
repo_slug=detected_repo_slug,
|
|
212
|
+
runs=runs,
|
|
213
|
+
events=events,
|
|
214
|
+
requested_limit=limit,
|
|
215
|
+
include_git_ref=include_git_ref,
|
|
216
|
+
)
|
|
160
217
|
export_result = build_cloud_bundle(
|
|
161
218
|
reports=[],
|
|
162
219
|
events=events,
|
|
@@ -178,6 +235,7 @@ def catch_up_upload(
|
|
|
178
235
|
"status": "doctor_failed",
|
|
179
236
|
"repo_slug": detected_repo_slug,
|
|
180
237
|
"run_count": len(runs),
|
|
238
|
+
"catch_up": catch_up_summary,
|
|
181
239
|
"export": export_result,
|
|
182
240
|
"doctor": doctor_result,
|
|
183
241
|
}
|
|
@@ -188,6 +246,7 @@ def catch_up_upload(
|
|
|
188
246
|
"status": "dry_run",
|
|
189
247
|
"repo_slug": detected_repo_slug,
|
|
190
248
|
"run_count": len(runs),
|
|
249
|
+
"catch_up": catch_up_summary,
|
|
191
250
|
"export": export_result,
|
|
192
251
|
"doctor": doctor_result,
|
|
193
252
|
"upload": build_dogfood_dry_run_preview(endpoint=endpoint, payload=payload),
|
|
@@ -202,6 +261,7 @@ def catch_up_upload(
|
|
|
202
261
|
"status": "uploaded",
|
|
203
262
|
"repo_slug": detected_repo_slug,
|
|
204
263
|
"run_count": len(runs),
|
|
264
|
+
"catch_up": catch_up_summary,
|
|
205
265
|
"export": export_result,
|
|
206
266
|
"doctor": doctor_result,
|
|
207
267
|
"upload": post_upload_payload(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b8
|
|
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.0b8
|
|
102
102
|
code-mower --version
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
`0.5.
|
|
105
|
+
`0.5.0b8` 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
|
|
@@ -246,9 +246,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
246
246
|
|
|
247
247
|
## Installation Status
|
|
248
248
|
|
|
249
|
-
The current public beta is `v0.5.0-beta.
|
|
249
|
+
The current public beta is `v0.5.0-beta.8` from
|
|
250
250
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
|
|
251
|
-
is published as `code-mower==0.5.
|
|
251
|
+
is published as `code-mower==0.5.0b8` on
|
|
252
252
|
[PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
|
|
253
253
|
auditable source for tags, build artifacts, and release notes.
|
|
254
254
|
|
|
@@ -28,6 +28,60 @@ from code_mower.cloud_client import (
|
|
|
28
28
|
from code_mower import cloud as cloud_cli
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
def test_cloud_catch_up_summary_separates_history_from_calibration() -> None:
|
|
32
|
+
runs = [
|
|
33
|
+
{
|
|
34
|
+
"name": "CI",
|
|
35
|
+
"status": "completed",
|
|
36
|
+
"conclusion": "success",
|
|
37
|
+
"createdAt": "2026-06-15T00:00:00Z",
|
|
38
|
+
"updatedAt": "2026-06-15T00:01:00Z",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "CI",
|
|
42
|
+
"status": "completed",
|
|
43
|
+
"conclusion": "failure",
|
|
44
|
+
"createdAt": "2026-06-16T00:00:00Z",
|
|
45
|
+
"updatedAt": "2026-06-16T00:02:00Z",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "Dogfood",
|
|
49
|
+
"status": "in_progress",
|
|
50
|
+
"conclusion": "",
|
|
51
|
+
"createdAt": "2026-06-17T00:00:00Z",
|
|
52
|
+
"updatedAt": "2026-06-17T00:03:00Z",
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
summary = cloud_operations.build_catch_up_summary(
|
|
57
|
+
repo_slug="owner/repo",
|
|
58
|
+
runs=runs,
|
|
59
|
+
events=[{"event_type": "workflow_run"} for _ in runs],
|
|
60
|
+
requested_limit=50,
|
|
61
|
+
include_git_ref=False,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
assert summary["repo_slug"] == "owner/repo"
|
|
65
|
+
assert summary["requested_limit"] == 50
|
|
66
|
+
assert summary["run_count"] == 3
|
|
67
|
+
assert summary["event_count"] == 3
|
|
68
|
+
assert summary["provenance"] == "imported_history"
|
|
69
|
+
assert summary["source_category"] == "history"
|
|
70
|
+
assert summary["history_only"] is True
|
|
71
|
+
assert summary["calibration_evidence"] is False
|
|
72
|
+
assert summary["git_ref_included"] is False
|
|
73
|
+
assert summary["workflow_counts"] == {"CI": 2, "Dogfood": 1}
|
|
74
|
+
assert summary["status_counts"] == {"completed": 2, "in_progress": 1}
|
|
75
|
+
assert summary["conclusion_counts"] == {
|
|
76
|
+
"failure": 1,
|
|
77
|
+
"success": 1,
|
|
78
|
+
"unknown": 1,
|
|
79
|
+
}
|
|
80
|
+
assert summary["oldest_run_at"] == "2026-06-15T00:00:00Z"
|
|
81
|
+
assert summary["newest_run_at"] == "2026-06-17T00:00:00Z"
|
|
82
|
+
assert summary["last_updated_at"] == "2026-06-17T00:03:00Z"
|
|
83
|
+
|
|
84
|
+
|
|
31
85
|
def test_cloud_setup_round_trip_writes_private_file() -> None:
|
|
32
86
|
with tempfile.TemporaryDirectory() as tmp:
|
|
33
87
|
root = Path(tmp)
|
|
@@ -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.0b8")
|
|
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.0b8 --json"
|
|
162
162
|
),
|
|
163
163
|
help_text,
|
|
164
164
|
)
|
|
@@ -607,6 +607,11 @@ class ReleaseHygieneTests(unittest.TestCase):
|
|
|
607
607
|
self.assertEqual(result["mode"], "cloud-catch-up")
|
|
608
608
|
self.assertEqual(result["status"], "dry_run")
|
|
609
609
|
self.assertEqual(result["run_count"], 1)
|
|
610
|
+
self.assertEqual(result["catch_up"]["provenance"], "imported_history")
|
|
611
|
+
self.assertTrue(result["catch_up"]["history_only"])
|
|
612
|
+
self.assertFalse(result["catch_up"]["calibration_evidence"])
|
|
613
|
+
self.assertEqual(result["catch_up"]["workflow_counts"], {"CI": 1})
|
|
614
|
+
self.assertEqual(result["catch_up"]["conclusion_counts"], {"success": 1})
|
|
610
615
|
self.assertEqual(result["export"]["event_count"], 1)
|
|
611
616
|
self.assertFalse(result["upload"]["would_upload"])
|
|
612
617
|
event = manifest["events"][0]
|
|
@@ -1367,8 +1372,8 @@ printf '%s\\n' "${lane}"
|
|
|
1367
1372
|
fromlist=["current_alpha_package_spec"],
|
|
1368
1373
|
)
|
|
1369
1374
|
self.assertEqual(
|
|
1370
|
-
legacy_module.current_alpha_package_spec("0.5.
|
|
1371
|
-
"code-mower==0.5.
|
|
1375
|
+
legacy_module.current_alpha_package_spec("0.5.0b8"),
|
|
1376
|
+
"code-mower==0.5.0b8",
|
|
1372
1377
|
)
|
|
1373
1378
|
finally:
|
|
1374
1379
|
sys.path[:] = original_path
|
|
@@ -1405,7 +1410,7 @@ printf '%s\\n' "${lane}"
|
|
|
1405
1410
|
"-c",
|
|
1406
1411
|
(
|
|
1407
1412
|
"from tools import code_mower_package_content as c; "
|
|
1408
|
-
"print(c.current_alpha_package_spec('0.5.
|
|
1413
|
+
"print(c.current_alpha_package_spec('0.5.0b8'))"
|
|
1409
1414
|
),
|
|
1410
1415
|
],
|
|
1411
1416
|
cwd=tmp_path,
|
|
@@ -1418,7 +1423,7 @@ printf '%s\\n' "${lane}"
|
|
|
1418
1423
|
self.assertEqual(completed.returncode, 0, completed.stderr)
|
|
1419
1424
|
self.assertEqual(
|
|
1420
1425
|
completed.stdout.strip(),
|
|
1421
|
-
"code-mower==0.5.
|
|
1426
|
+
"code-mower==0.5.0b8",
|
|
1422
1427
|
)
|
|
1423
1428
|
|
|
1424
1429
|
def test_package_rendering_legacy_fallback_stays_valid_yaml_subset(self) -> None:
|
|
@@ -1494,11 +1499,11 @@ printf '%s\\n' "${lane}"
|
|
|
1494
1499
|
(output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
|
|
1495
1500
|
)
|
|
1496
1501
|
self.assertIn(
|
|
1497
|
-
'version = "0.5.
|
|
1502
|
+
'version = "0.5.0b8"',
|
|
1498
1503
|
(output_dir / "pyproject.toml").read_text(encoding="utf-8"),
|
|
1499
1504
|
)
|
|
1500
1505
|
self.assertIn(
|
|
1501
|
-
'__version__ = "0.5.
|
|
1506
|
+
'__version__ = "0.5.0b8"',
|
|
1502
1507
|
(output_dir / "src/code_mower/__init__.py").read_text(
|
|
1503
1508
|
encoding="utf-8"
|
|
1504
1509
|
),
|
|
@@ -2967,7 +2972,7 @@ def main():
|
|
|
2967
2972
|
{
|
|
2968
2973
|
"status": "pass",
|
|
2969
2974
|
"package_spec": "code-mower",
|
|
2970
|
-
"version": "code-mower 0.5.
|
|
2975
|
+
"version": "code-mower 0.5.0b8",
|
|
2971
2976
|
"work_dir": "/tmp/code-mower-rehearsal",
|
|
2972
2977
|
"toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
|
|
2973
2978
|
"step_count": 1,
|
|
@@ -3079,7 +3084,7 @@ def main():
|
|
|
3079
3084
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3080
3085
|
toy_repo=toy_repo,
|
|
3081
3086
|
outputs=outputs,
|
|
3082
|
-
version="code-mower 0.5.
|
|
3087
|
+
version="code-mower 0.5.0b8",
|
|
3083
3088
|
steps=[
|
|
3084
3089
|
{
|
|
3085
3090
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3158,7 +3163,7 @@ def main():
|
|
|
3158
3163
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3159
3164
|
toy_repo=toy_repo,
|
|
3160
3165
|
outputs=outputs,
|
|
3161
|
-
version="code-mower 0.5.
|
|
3166
|
+
version="code-mower 0.5.0b8",
|
|
3162
3167
|
steps=[
|
|
3163
3168
|
{
|
|
3164
3169
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3220,7 +3225,7 @@ def main():
|
|
|
3220
3225
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3221
3226
|
toy_repo=toy_repo,
|
|
3222
3227
|
outputs=outputs,
|
|
3223
|
-
version="code-mower 0.5.
|
|
3228
|
+
version="code-mower 0.5.0b8",
|
|
3224
3229
|
steps=[
|
|
3225
3230
|
{
|
|
3226
3231
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3286,24 +3291,24 @@ def main():
|
|
|
3286
3291
|
)
|
|
3287
3292
|
self.assertEqual(
|
|
3288
3293
|
code_mower_migration._resolve_install_package_spec(
|
|
3289
|
-
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.
|
|
3294
|
+
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.8",
|
|
3290
3295
|
base_dir=package,
|
|
3291
3296
|
),
|
|
3292
|
-
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.
|
|
3297
|
+
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.8",
|
|
3293
3298
|
)
|
|
3294
3299
|
self.assertEqual(
|
|
3295
3300
|
code_mower_migration._resolve_install_package_spec(
|
|
3296
|
-
"code-mower==0.5.
|
|
3301
|
+
"code-mower==0.5.0b8",
|
|
3297
3302
|
base_dir=package,
|
|
3298
3303
|
),
|
|
3299
|
-
"code-mower==0.5.
|
|
3304
|
+
"code-mower==0.5.0b8",
|
|
3300
3305
|
)
|
|
3301
3306
|
|
|
3302
3307
|
def test_package_install_rehearsal_supports_index_aware_pip_install(self) -> None:
|
|
3303
3308
|
self.assertEqual(
|
|
3304
3309
|
code_mower_migration._pip_install_command(
|
|
3305
3310
|
Path("/tmp/venv/bin/python"),
|
|
3306
|
-
"code-mower==0.5.
|
|
3311
|
+
"code-mower==0.5.0b8",
|
|
3307
3312
|
pip_index_url="https://test.pypi.org/simple/",
|
|
3308
3313
|
pip_extra_index_urls=["https://pypi.org/simple/"],
|
|
3309
3314
|
),
|
|
@@ -3316,7 +3321,7 @@ def main():
|
|
|
3316
3321
|
"https://test.pypi.org/simple/",
|
|
3317
3322
|
"--extra-index-url",
|
|
3318
3323
|
"https://pypi.org/simple/",
|
|
3319
|
-
"code-mower==0.5.
|
|
3324
|
+
"code-mower==0.5.0b8",
|
|
3320
3325
|
],
|
|
3321
3326
|
)
|
|
3322
3327
|
|
|
@@ -3336,10 +3341,10 @@ def main():
|
|
|
3336
3341
|
payload = release_readiness.render_release_readiness(ROOT)
|
|
3337
3342
|
|
|
3338
3343
|
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.
|
|
3344
|
+
self.assertEqual(payload["version"], "0.5.0b8")
|
|
3345
|
+
self.assertEqual(payload["release_tag"], "v0.5.0-beta.8")
|
|
3346
|
+
self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.8")
|
|
3347
|
+
self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b8")
|
|
3343
3348
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
3344
3349
|
self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
|
|
3345
3350
|
self.assertEqual(
|
|
@@ -3388,7 +3393,7 @@ def main():
|
|
|
3388
3393
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
3389
3394
|
check = check_ids["materialized-package-version-consistency"]
|
|
3390
3395
|
self.assertEqual(check["status"], "fail")
|
|
3391
|
-
self.assertEqual(check["detail"]["source_version"], "0.5.
|
|
3396
|
+
self.assertEqual(check["detail"]["source_version"], "0.5.0b8")
|
|
3392
3397
|
self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
|
|
3393
3398
|
|
|
3394
3399
|
def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
|
|
@@ -3468,20 +3473,20 @@ def main():
|
|
|
3468
3473
|
|
|
3469
3474
|
def test_release_readiness_tag_derivation_supports_release_stages(self) -> None:
|
|
3470
3475
|
self.assertEqual(
|
|
3471
|
-
release_readiness._release_tag_for_version("0.5.
|
|
3472
|
-
"v0.5.0-beta.
|
|
3476
|
+
release_readiness._release_tag_for_version("0.5.0b8"),
|
|
3477
|
+
"v0.5.0-beta.8",
|
|
3473
3478
|
)
|
|
3474
3479
|
self.assertEqual(
|
|
3475
|
-
code_mower_versioning.release_tag_for_version("0.5.
|
|
3476
|
-
"v0.5.0-beta.
|
|
3480
|
+
code_mower_versioning.release_tag_for_version("0.5.0b8"),
|
|
3481
|
+
"v0.5.0-beta.8",
|
|
3477
3482
|
)
|
|
3478
3483
|
self.assertEqual(
|
|
3479
|
-
release_readiness._release_tag_for_version("0.5.
|
|
3480
|
-
"v0.5.0-beta.
|
|
3484
|
+
release_readiness._release_tag_for_version("0.5.0b8"),
|
|
3485
|
+
"v0.5.0-beta.8",
|
|
3481
3486
|
)
|
|
3482
3487
|
self.assertEqual(
|
|
3483
|
-
code_mower_versioning.release_tag_for_version("0.5.
|
|
3484
|
-
"v0.5.0-beta.
|
|
3488
|
+
code_mower_versioning.release_tag_for_version("0.5.0b8"),
|
|
3489
|
+
"v0.5.0-beta.8",
|
|
3485
3490
|
)
|
|
3486
3491
|
self.assertEqual(
|
|
3487
3492
|
release_readiness._release_tag_for_version("1.0.0rc1"),
|
|
@@ -3510,8 +3515,8 @@ def main():
|
|
|
3510
3515
|
next_steps.current_alpha_package_spec(),
|
|
3511
3516
|
)
|
|
3512
3517
|
self.assertEqual(
|
|
3513
|
-
code_mower_package_content.current_alpha_package_spec("0.5.
|
|
3514
|
-
"code-mower==0.5.
|
|
3518
|
+
code_mower_package_content.current_alpha_package_spec("0.5.0b8"),
|
|
3519
|
+
"code-mower==0.5.0b8",
|
|
3515
3520
|
)
|
|
3516
3521
|
self.assertNotIn(next_steps.current_public_tag(), package_content_text)
|
|
3517
3522
|
self.assertNotIn("v0.0.0", package_content_text)
|
|
@@ -3683,7 +3688,7 @@ def main():
|
|
|
3683
3688
|
step for step in plan["steps"] if step["id"] == "package-install-rehearsal"
|
|
3684
3689
|
)
|
|
3685
3690
|
self.assertIn("doctor --v05", doctor_step["command"])
|
|
3686
|
-
self.assertIn("code-mower==0.5.
|
|
3691
|
+
self.assertIn("code-mower==0.5.0b8", package_step["command"])
|
|
3687
3692
|
self.assertIn("current published PyPI prerelease", package_step["why"])
|
|
3688
3693
|
self.assertIn("first_user_readiness", package_step["why"])
|
|
3689
3694
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|