code-mower 0.5.0b38__tar.gz → 0.5.0b39__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.0b38 → code_mower-0.5.0b39}/PKG-INFO +6 -6
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/README.md +5 -5
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/pyproject.toml +1 -1
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/__init__.py +1 -1
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cli.py +1 -1
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/grok_build_audit_pr.py +14 -1
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower.egg-info/PKG-INFO +6 -6
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_local_cli.py +74 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_release_hygiene.py +34 -34
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/LICENSE +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/MANIFEST.in +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/NOTICE +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/SUPPORT.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/requirements/requirements.txt +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/setup.cfg +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/checks.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/clear_stale.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/operations.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/config.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/init.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/grok_build.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/migration.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/package.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/package_content.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/package_manifest.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/package_static.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/prompts.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_registry.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/secrets.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/versioning.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower/work_orders.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower.egg-info/SOURCES.txt +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/aider.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/claude_audit.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/codex.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/devin.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/gitar.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/greptile.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers/qodo.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/providers.yml +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_checks.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_clear_stale.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_cloud_client.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_output.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_doctor_registry.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_reviewer_metrics_core.py +0 -0
- {code_mower-0.5.0b38 → code_mower-0.5.0b39}/tests/test_work_orders.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.0b39
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -103,11 +103,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
105
|
python3.12 --version
|
|
106
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
106
|
+
pipx install --python python3.12 code-mower==0.5.0b39
|
|
107
107
|
code-mower --version
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
`0.5.
|
|
110
|
+
`0.5.0b39` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
111
111
|
line, use the explicit beta version above or allow prereleases with:
|
|
112
112
|
|
|
113
113
|
```bash
|
|
@@ -150,7 +150,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
150
150
|
|
|
151
151
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
152
152
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
153
|
-
the latest 10/10 public-package readiness proof for `code-mower==0.5.
|
|
153
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b39`.
|
|
154
154
|
|
|
155
155
|
## Optional: Plan Before Coding
|
|
156
156
|
|
|
@@ -291,9 +291,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
291
291
|
|
|
292
292
|
## Installation Status
|
|
293
293
|
|
|
294
|
-
The current public beta is `v0.5.0-beta.
|
|
294
|
+
The current public beta is `v0.5.0-beta.39` from
|
|
295
295
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
296
|
-
as `code-mower==0.5.
|
|
296
|
+
as `code-mower==0.5.0b39` on [PyPI](https://pypi.org/project/code-mower/).
|
|
297
297
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
298
298
|
release notes.
|
|
299
299
|
|
|
@@ -88,11 +88,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
90
|
python3.12 --version
|
|
91
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
91
|
+
pipx install --python python3.12 code-mower==0.5.0b39
|
|
92
92
|
code-mower --version
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
`0.5.
|
|
95
|
+
`0.5.0b39` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
96
96
|
line, use the explicit beta version above or allow prereleases with:
|
|
97
97
|
|
|
98
98
|
```bash
|
|
@@ -135,7 +135,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
135
135
|
|
|
136
136
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
137
137
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
138
|
-
the latest 10/10 public-package readiness proof for `code-mower==0.5.
|
|
138
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b39`.
|
|
139
139
|
|
|
140
140
|
## Optional: Plan Before Coding
|
|
141
141
|
|
|
@@ -276,9 +276,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
276
276
|
|
|
277
277
|
## Installation Status
|
|
278
278
|
|
|
279
|
-
The current public beta is `v0.5.0-beta.
|
|
279
|
+
The current public beta is `v0.5.0-beta.39` from
|
|
280
280
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
281
|
-
as `code-mower==0.5.
|
|
281
|
+
as `code-mower==0.5.0b39` on [PyPI](https://pypi.org/project/code-mower/).
|
|
282
282
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
283
283
|
release notes.
|
|
284
284
|
|
|
@@ -14,7 +14,7 @@ from pathlib import Path
|
|
|
14
14
|
if __package__ in {None, ""}:
|
|
15
15
|
raise SystemExit(
|
|
16
16
|
"code_mower.cli is a packaged entrypoint. Install Code Mower with "
|
|
17
|
-
"`pipx install code-mower==0.5.
|
|
17
|
+
"`pipx install code-mower==0.5.0b39`, or run source checkouts with "
|
|
18
18
|
"`PYTHONPATH=src python -m code_mower.cli`."
|
|
19
19
|
)
|
|
20
20
|
|
|
@@ -39,6 +39,7 @@ DEFAULT_GROK_COMMAND = "grok"
|
|
|
39
39
|
DEFAULT_GROK_MODE = "grok-build-audit"
|
|
40
40
|
DEFAULT_GROK_OUTPUT_STEM = "grok-build"
|
|
41
41
|
DEFAULT_GROK_DISPLAY_NAME = "Grok Build"
|
|
42
|
+
DEFAULT_GROK_MAX_TURNS = 4
|
|
42
43
|
DEFAULT_GROK_MODEL_ENV = "GROK_MODEL"
|
|
43
44
|
CODE_MOWER_GROK_MODEL_ENV = "CODE_MOWER_GROK_MODEL"
|
|
44
45
|
GROK_AMBIENT_HOME_ENV = "GROK_BUILD_USE_AMBIENT_HOME"
|
|
@@ -161,6 +162,7 @@ def run_grok_build_audit(
|
|
|
161
162
|
prompt_dir: Path | None = None,
|
|
162
163
|
max_diff_bytes: int = gemini_cli_audit_pr.DEFAULT_MAX_DIFF_BYTES,
|
|
163
164
|
timeout_seconds: int = gemini_cli_audit_pr.DEFAULT_TIMEOUT_SECONDS,
|
|
165
|
+
grok_max_turns: int = DEFAULT_GROK_MAX_TURNS,
|
|
164
166
|
output_dir: Path | None = None,
|
|
165
167
|
grok_api_key: str | None = None,
|
|
166
168
|
repo_path: Path | None = None,
|
|
@@ -234,6 +236,7 @@ def run_grok_build_audit(
|
|
|
234
236
|
diagnostics["base_ref"] = base_ref if repo_path is not None else None
|
|
235
237
|
diagnostics["cli_transport"] = "prompt_file"
|
|
236
238
|
diagnostics["preserve_ambient_home"] = allow_ambient_home
|
|
239
|
+
diagnostics["grok_max_turns"] = max(1, grok_max_turns)
|
|
237
240
|
|
|
238
241
|
started = time.monotonic()
|
|
239
242
|
grok_model = resolve_grok_model()
|
|
@@ -263,7 +266,7 @@ def run_grok_build_audit(
|
|
|
263
266
|
"--disable-web-search",
|
|
264
267
|
"--no-memory",
|
|
265
268
|
"--max-turns",
|
|
266
|
-
|
|
269
|
+
str(max(1, grok_max_turns)),
|
|
267
270
|
]
|
|
268
271
|
if grok_model:
|
|
269
272
|
grok_args.extend(["--model", grok_model])
|
|
@@ -381,6 +384,15 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
381
384
|
default=gemini_cli_audit_pr.DEFAULT_MAX_DIFF_BYTES,
|
|
382
385
|
)
|
|
383
386
|
parser.add_argument("--timeout", type=int, default=gemini_cli_audit_pr.DEFAULT_TIMEOUT_SECONDS)
|
|
387
|
+
parser.add_argument(
|
|
388
|
+
"--grok-max-turns",
|
|
389
|
+
type=int,
|
|
390
|
+
default=DEFAULT_GROK_MAX_TURNS,
|
|
391
|
+
help=(
|
|
392
|
+
"Maximum Grok Build agent turns for a PR audit. The smoke probe can "
|
|
393
|
+
"use one turn, but real audits need enough room to return verdict JSON."
|
|
394
|
+
),
|
|
395
|
+
)
|
|
384
396
|
parser.add_argument("--output-dir", type=Path, default=None)
|
|
385
397
|
parser.add_argument("--json", action="store_true")
|
|
386
398
|
parser.add_argument(
|
|
@@ -416,6 +428,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
416
428
|
prompt_dir=args.prompt_dir,
|
|
417
429
|
max_diff_bytes=args.max_diff_bytes,
|
|
418
430
|
timeout_seconds=args.timeout,
|
|
431
|
+
grok_max_turns=args.grok_max_turns,
|
|
419
432
|
output_dir=args.output_dir,
|
|
420
433
|
grok_api_key=grok_api_key,
|
|
421
434
|
repo_path=args.repo_path,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b39
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -103,11 +103,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
105
|
python3.12 --version
|
|
106
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
106
|
+
pipx install --python python3.12 code-mower==0.5.0b39
|
|
107
107
|
code-mower --version
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
`0.5.
|
|
110
|
+
`0.5.0b39` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
111
111
|
line, use the explicit beta version above or allow prereleases with:
|
|
112
112
|
|
|
113
113
|
```bash
|
|
@@ -150,7 +150,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
150
150
|
|
|
151
151
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
152
152
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
153
|
-
the latest 10/10 public-package readiness proof for `code-mower==0.5.
|
|
153
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b39`.
|
|
154
154
|
|
|
155
155
|
## Optional: Plan Before Coding
|
|
156
156
|
|
|
@@ -291,9 +291,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
291
291
|
|
|
292
292
|
## Installation Status
|
|
293
293
|
|
|
294
|
-
The current public beta is `v0.5.0-beta.
|
|
294
|
+
The current public beta is `v0.5.0-beta.39` from
|
|
295
295
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
296
|
-
as `code-mower==0.5.
|
|
296
|
+
as `code-mower==0.5.0b39` on [PyPI](https://pypi.org/project/code-mower/).
|
|
297
297
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
298
298
|
release notes.
|
|
299
299
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import json
|
|
3
4
|
import os
|
|
5
|
+
import subprocess
|
|
4
6
|
from pathlib import Path
|
|
5
7
|
|
|
6
8
|
from code_mower.provider_registry import REFERENCE_PROVIDERS
|
|
@@ -403,6 +405,78 @@ def test_grok_build_runner_prefers_code_mower_model_env(monkeypatch) -> None:
|
|
|
403
405
|
assert grok_build_audit_pr.resolve_grok_model() == "grok-4.6-build"
|
|
404
406
|
|
|
405
407
|
|
|
408
|
+
def test_grok_build_runner_uses_configurable_audit_turn_budget(
|
|
409
|
+
monkeypatch,
|
|
410
|
+
tmp_path: Path,
|
|
411
|
+
) -> None:
|
|
412
|
+
calls: list[list[str]] = []
|
|
413
|
+
|
|
414
|
+
monkeypatch.setattr(
|
|
415
|
+
grok_build_audit_pr.gemini_cli_audit_pr,
|
|
416
|
+
"fetch_pull_request",
|
|
417
|
+
lambda repo, pr_number, *, token: {"head": {"sha": "abc123"}},
|
|
418
|
+
)
|
|
419
|
+
monkeypatch.setattr(
|
|
420
|
+
grok_build_audit_pr.gemini_cli_audit_pr,
|
|
421
|
+
"fetch_local_checkout_diff",
|
|
422
|
+
lambda repo_path, *, base_ref: ("abc123", "diff --git a/a b/a\n"),
|
|
423
|
+
)
|
|
424
|
+
monkeypatch.setattr(
|
|
425
|
+
grok_build_audit_pr.gemini_cli_audit_pr,
|
|
426
|
+
"_local_head_sha",
|
|
427
|
+
lambda repo_path: "abc123",
|
|
428
|
+
)
|
|
429
|
+
monkeypatch.setattr(
|
|
430
|
+
grok_build_audit_pr.gemini_cli_audit_pr,
|
|
431
|
+
"build_prompt",
|
|
432
|
+
lambda **kwargs: ("review prompt", {}),
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
def fake_run(args, **kwargs):
|
|
436
|
+
calls.append(list(args))
|
|
437
|
+
return subprocess.CompletedProcess(
|
|
438
|
+
args,
|
|
439
|
+
0,
|
|
440
|
+
stdout=json.dumps(
|
|
441
|
+
{
|
|
442
|
+
"text": json.dumps(
|
|
443
|
+
{
|
|
444
|
+
"verdict": "pass",
|
|
445
|
+
"summary": "No findings.",
|
|
446
|
+
"findings": [],
|
|
447
|
+
}
|
|
448
|
+
)
|
|
449
|
+
}
|
|
450
|
+
),
|
|
451
|
+
stderr="",
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
monkeypatch.setattr(grok_build_audit_pr.subprocess, "run", fake_run)
|
|
455
|
+
|
|
456
|
+
default_payload = grok_build_audit_pr.run_grok_build_audit(
|
|
457
|
+
repo="owner/repo",
|
|
458
|
+
pr_number=7,
|
|
459
|
+
github_token="token",
|
|
460
|
+
command="grok",
|
|
461
|
+
repo_path=tmp_path,
|
|
462
|
+
allow_ambient_home=True,
|
|
463
|
+
)
|
|
464
|
+
custom_payload = grok_build_audit_pr.run_grok_build_audit(
|
|
465
|
+
repo="owner/repo",
|
|
466
|
+
pr_number=7,
|
|
467
|
+
github_token="token",
|
|
468
|
+
command="grok",
|
|
469
|
+
repo_path=tmp_path,
|
|
470
|
+
allow_ambient_home=True,
|
|
471
|
+
grok_max_turns=8,
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
assert default_payload["diagnostics"]["grok_max_turns"] == 4
|
|
475
|
+
assert custom_payload["diagnostics"]["grok_max_turns"] == 8
|
|
476
|
+
assert calls[0][calls[0].index("--max-turns") + 1] == "4"
|
|
477
|
+
assert calls[1][calls[1].index("--max-turns") + 1] == "8"
|
|
478
|
+
|
|
479
|
+
|
|
406
480
|
def test_provider_lane_tool_provenance_marks_hosted_model_as_vendor_hidden() -> None:
|
|
407
481
|
lane = {
|
|
408
482
|
"driver": "saas_event",
|
|
@@ -49,7 +49,7 @@ from scripts import privacy_scan
|
|
|
49
49
|
|
|
50
50
|
class ReleaseHygieneTests(unittest.TestCase):
|
|
51
51
|
def test_version_is_current_v05_prerelease(self) -> None:
|
|
52
|
-
self.assertEqual(__version__, "0.5.
|
|
52
|
+
self.assertEqual(__version__, "0.5.0b39")
|
|
53
53
|
|
|
54
54
|
def test_release_workflow_verifies_downloaded_distributions_before_publish(self) -> None:
|
|
55
55
|
workflow = (ROOT / ".github/workflows/release.yml").read_text(encoding="utf-8")
|
|
@@ -204,7 +204,7 @@ class ReleaseHygieneTests(unittest.TestCase):
|
|
|
204
204
|
self.assertIn(
|
|
205
205
|
(
|
|
206
206
|
"code-mower migration package-install-rehearsal --package-spec "
|
|
207
|
-
"code-mower==0.5.
|
|
207
|
+
"code-mower==0.5.0b39 --json"
|
|
208
208
|
),
|
|
209
209
|
help_text,
|
|
210
210
|
)
|
|
@@ -1629,8 +1629,8 @@ printf '%s\\n' "${lane}"
|
|
|
1629
1629
|
fromlist=["current_alpha_package_spec"],
|
|
1630
1630
|
)
|
|
1631
1631
|
self.assertEqual(
|
|
1632
|
-
legacy_module.current_alpha_package_spec("0.5.
|
|
1633
|
-
"code-mower==0.5.
|
|
1632
|
+
legacy_module.current_alpha_package_spec("0.5.0b39"),
|
|
1633
|
+
"code-mower==0.5.0b39",
|
|
1634
1634
|
)
|
|
1635
1635
|
finally:
|
|
1636
1636
|
sys.path[:] = original_path
|
|
@@ -1667,7 +1667,7 @@ printf '%s\\n' "${lane}"
|
|
|
1667
1667
|
"-c",
|
|
1668
1668
|
(
|
|
1669
1669
|
"from tools import code_mower_package_content as c; "
|
|
1670
|
-
"print(c.current_alpha_package_spec('0.5.
|
|
1670
|
+
"print(c.current_alpha_package_spec('0.5.0b39'))"
|
|
1671
1671
|
),
|
|
1672
1672
|
],
|
|
1673
1673
|
cwd=tmp_path,
|
|
@@ -1680,7 +1680,7 @@ printf '%s\\n' "${lane}"
|
|
|
1680
1680
|
self.assertEqual(completed.returncode, 0, completed.stderr)
|
|
1681
1681
|
self.assertEqual(
|
|
1682
1682
|
completed.stdout.strip(),
|
|
1683
|
-
"code-mower==0.5.
|
|
1683
|
+
"code-mower==0.5.0b39",
|
|
1684
1684
|
)
|
|
1685
1685
|
|
|
1686
1686
|
def test_package_rendering_legacy_fallback_stays_valid_yaml_subset(self) -> None:
|
|
@@ -1756,11 +1756,11 @@ printf '%s\\n' "${lane}"
|
|
|
1756
1756
|
(output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
|
|
1757
1757
|
)
|
|
1758
1758
|
self.assertIn(
|
|
1759
|
-
'version = "0.5.
|
|
1759
|
+
'version = "0.5.0b39"',
|
|
1760
1760
|
(output_dir / "pyproject.toml").read_text(encoding="utf-8"),
|
|
1761
1761
|
)
|
|
1762
1762
|
self.assertIn(
|
|
1763
|
-
'__version__ = "0.5.
|
|
1763
|
+
'__version__ = "0.5.0b39"',
|
|
1764
1764
|
(output_dir / "src/code_mower/__init__.py").read_text(
|
|
1765
1765
|
encoding="utf-8"
|
|
1766
1766
|
),
|
|
@@ -3295,7 +3295,7 @@ def main():
|
|
|
3295
3295
|
{
|
|
3296
3296
|
"status": "pass",
|
|
3297
3297
|
"package_spec": "code-mower",
|
|
3298
|
-
"version": "code-mower 0.5.
|
|
3298
|
+
"version": "code-mower 0.5.0b39",
|
|
3299
3299
|
"work_dir": "/tmp/code-mower-rehearsal",
|
|
3300
3300
|
"toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
|
|
3301
3301
|
"step_count": 1,
|
|
@@ -3407,7 +3407,7 @@ def main():
|
|
|
3407
3407
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3408
3408
|
toy_repo=toy_repo,
|
|
3409
3409
|
outputs=outputs,
|
|
3410
|
-
version="code-mower 0.5.
|
|
3410
|
+
version="code-mower 0.5.0b39",
|
|
3411
3411
|
steps=[
|
|
3412
3412
|
{
|
|
3413
3413
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3486,7 +3486,7 @@ def main():
|
|
|
3486
3486
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3487
3487
|
toy_repo=toy_repo,
|
|
3488
3488
|
outputs=outputs,
|
|
3489
|
-
version="code-mower 0.5.
|
|
3489
|
+
version="code-mower 0.5.0b39",
|
|
3490
3490
|
steps=[
|
|
3491
3491
|
{
|
|
3492
3492
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3548,7 +3548,7 @@ def main():
|
|
|
3548
3548
|
scorecard = code_mower_migration._first_user_readiness_scorecard(
|
|
3549
3549
|
toy_repo=toy_repo,
|
|
3550
3550
|
outputs=outputs,
|
|
3551
|
-
version="code-mower 0.5.
|
|
3551
|
+
version="code-mower 0.5.0b39",
|
|
3552
3552
|
steps=[
|
|
3553
3553
|
{
|
|
3554
3554
|
"command": ["code-mower", "doctor", "--easy", "--json"],
|
|
@@ -3614,24 +3614,24 @@ def main():
|
|
|
3614
3614
|
)
|
|
3615
3615
|
self.assertEqual(
|
|
3616
3616
|
code_mower_migration._resolve_install_package_spec(
|
|
3617
|
-
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.
|
|
3617
|
+
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.39",
|
|
3618
3618
|
base_dir=package,
|
|
3619
3619
|
),
|
|
3620
|
-
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.
|
|
3620
|
+
"git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.39",
|
|
3621
3621
|
)
|
|
3622
3622
|
self.assertEqual(
|
|
3623
3623
|
code_mower_migration._resolve_install_package_spec(
|
|
3624
|
-
"code-mower==0.5.
|
|
3624
|
+
"code-mower==0.5.0b39",
|
|
3625
3625
|
base_dir=package,
|
|
3626
3626
|
),
|
|
3627
|
-
"code-mower==0.5.
|
|
3627
|
+
"code-mower==0.5.0b39",
|
|
3628
3628
|
)
|
|
3629
3629
|
|
|
3630
3630
|
def test_package_install_rehearsal_supports_index_aware_pip_install(self) -> None:
|
|
3631
3631
|
self.assertEqual(
|
|
3632
3632
|
code_mower_migration._pip_install_command(
|
|
3633
3633
|
Path("/tmp/venv/bin/python"),
|
|
3634
|
-
"code-mower==0.5.
|
|
3634
|
+
"code-mower==0.5.0b39",
|
|
3635
3635
|
pip_index_url="https://test.pypi.org/simple/",
|
|
3636
3636
|
pip_extra_index_urls=["https://pypi.org/simple/"],
|
|
3637
3637
|
),
|
|
@@ -3644,7 +3644,7 @@ def main():
|
|
|
3644
3644
|
"https://test.pypi.org/simple/",
|
|
3645
3645
|
"--extra-index-url",
|
|
3646
3646
|
"https://pypi.org/simple/",
|
|
3647
|
-
"code-mower==0.5.
|
|
3647
|
+
"code-mower==0.5.0b39",
|
|
3648
3648
|
],
|
|
3649
3649
|
)
|
|
3650
3650
|
|
|
@@ -3664,10 +3664,10 @@ def main():
|
|
|
3664
3664
|
payload = release_readiness.render_release_readiness(ROOT)
|
|
3665
3665
|
|
|
3666
3666
|
self.assertEqual(payload["status"], "pass")
|
|
3667
|
-
self.assertEqual(payload["version"], "0.5.
|
|
3668
|
-
self.assertEqual(payload["release_tag"], "v0.5.0-beta.
|
|
3669
|
-
self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.
|
|
3670
|
-
self.assertEqual(payload["package_index_spec"], "code-mower==0.5.
|
|
3667
|
+
self.assertEqual(payload["version"], "0.5.0b39")
|
|
3668
|
+
self.assertEqual(payload["release_tag"], "v0.5.0-beta.39")
|
|
3669
|
+
self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.39")
|
|
3670
|
+
self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b39")
|
|
3671
3671
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
3672
3672
|
self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
|
|
3673
3673
|
self.assertEqual(
|
|
@@ -3716,7 +3716,7 @@ def main():
|
|
|
3716
3716
|
check_ids = {check["id"]: check for check in payload["checks"]}
|
|
3717
3717
|
check = check_ids["materialized-package-version-consistency"]
|
|
3718
3718
|
self.assertEqual(check["status"], "fail")
|
|
3719
|
-
self.assertEqual(check["detail"]["source_version"], "0.5.
|
|
3719
|
+
self.assertEqual(check["detail"]["source_version"], "0.5.0b39")
|
|
3720
3720
|
self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
|
|
3721
3721
|
|
|
3722
3722
|
def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
|
|
@@ -3796,20 +3796,20 @@ def main():
|
|
|
3796
3796
|
|
|
3797
3797
|
def test_release_readiness_tag_derivation_supports_release_stages(self) -> None:
|
|
3798
3798
|
self.assertEqual(
|
|
3799
|
-
release_readiness._release_tag_for_version("0.5.
|
|
3800
|
-
"v0.5.0-beta.
|
|
3799
|
+
release_readiness._release_tag_for_version("0.5.0b39"),
|
|
3800
|
+
"v0.5.0-beta.39",
|
|
3801
3801
|
)
|
|
3802
3802
|
self.assertEqual(
|
|
3803
|
-
code_mower_versioning.release_tag_for_version("0.5.
|
|
3804
|
-
"v0.5.0-beta.
|
|
3803
|
+
code_mower_versioning.release_tag_for_version("0.5.0b39"),
|
|
3804
|
+
"v0.5.0-beta.39",
|
|
3805
3805
|
)
|
|
3806
3806
|
self.assertEqual(
|
|
3807
|
-
release_readiness._release_tag_for_version("0.5.
|
|
3808
|
-
"v0.5.0-beta.
|
|
3807
|
+
release_readiness._release_tag_for_version("0.5.0b39"),
|
|
3808
|
+
"v0.5.0-beta.39",
|
|
3809
3809
|
)
|
|
3810
3810
|
self.assertEqual(
|
|
3811
|
-
code_mower_versioning.release_tag_for_version("0.5.
|
|
3812
|
-
"v0.5.0-beta.
|
|
3811
|
+
code_mower_versioning.release_tag_for_version("0.5.0b39"),
|
|
3812
|
+
"v0.5.0-beta.39",
|
|
3813
3813
|
)
|
|
3814
3814
|
self.assertEqual(
|
|
3815
3815
|
release_readiness._release_tag_for_version("1.0.0rc1"),
|
|
@@ -3838,8 +3838,8 @@ def main():
|
|
|
3838
3838
|
next_steps.current_alpha_package_spec(),
|
|
3839
3839
|
)
|
|
3840
3840
|
self.assertEqual(
|
|
3841
|
-
code_mower_package_content.current_alpha_package_spec("0.5.
|
|
3842
|
-
"code-mower==0.5.
|
|
3841
|
+
code_mower_package_content.current_alpha_package_spec("0.5.0b39"),
|
|
3842
|
+
"code-mower==0.5.0b39",
|
|
3843
3843
|
)
|
|
3844
3844
|
self.assertNotIn(next_steps.current_public_tag(), package_content_text)
|
|
3845
3845
|
self.assertNotIn("v0.0.0", package_content_text)
|
|
@@ -4011,7 +4011,7 @@ def main():
|
|
|
4011
4011
|
step for step in plan["steps"] if step["id"] == "package-install-rehearsal"
|
|
4012
4012
|
)
|
|
4013
4013
|
self.assertIn("doctor --v05", doctor_step["command"])
|
|
4014
|
-
self.assertIn("code-mower==0.5.
|
|
4014
|
+
self.assertIn("code-mower==0.5.0b39", package_step["command"])
|
|
4015
4015
|
self.assertIn("current published PyPI prerelease", package_step["why"])
|
|
4016
4016
|
self.assertIn("first_user_readiness", package_step["why"])
|
|
4017
4017
|
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
|