code-mower 1.0.13__tar.gz → 1.0.15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_mower-1.0.13 → code_mower-1.0.15}/PKG-INFO +20 -5
- {code_mower-1.0.13 → code_mower-1.0.15}/README.md +19 -4
- {code_mower-1.0.13 → code_mower-1.0.15}/pyproject.toml +1 -1
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/__init__.py +1 -1
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud.py +131 -3
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/__init__.py +58 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/bundle.py +1 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/events.py +165 -23
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/export.py +13 -1
- code_mower-1.0.15/src/code_mower/cloud_client/finding_outcomes.py +205 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/operations.py +670 -11
- code_mower-1.0.15/src/code_mower/cloud_client/pr_outcomes.py +958 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/productivity.py +2 -0
- code_mower-1.0.15/src/code_mower/cloud_client/productivity_windows.py +720 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/devin_api.py +139 -19
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor.py +20 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/adoption.py +162 -35
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/runner.py +6 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_manifest.py +7 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/productivity_report.py +69 -11
- code_mower-1.0.15/src/code_mower/provider_credentials.py +568 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/release_campaigns.py +764 -145
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/release_qualify.py +33 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/reviewer_spend.py +42 -5
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/PKG-INFO +20 -5
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/SOURCES.txt +7 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_campaign_retry_evidence_711.py +76 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_api.py +55 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_campaign_readiness.py +207 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_pr_outcome_contract.py +41 -0
- code_mower-1.0.15/tests/test_pr_outcome_coverage.py +3401 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_productivity_report.py +120 -2
- code_mower-1.0.15/tests/test_productivity_windows.py +1209 -0
- code_mower-1.0.15/tests/test_provider_credentials.py +864 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_release_campaigns.py +11588 -10287
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_release_hygiene.py +48 -46
- code_mower-1.0.15/tests/test_reviewer_finding_outcome_contract.py +488 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_reviewer_spend.py +205 -0
- code_mower-1.0.13/src/code_mower/cloud_client/pr_outcomes.py +0 -160
- {code_mower-1.0.13 → code_mower-1.0.15}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/LICENSE +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/MANIFEST.in +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/NOTICE +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/SUPPORT.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/requirements/requirements.txt +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/setup.cfg +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/antigravity_sdk_probe.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_limits.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_progress.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/board.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/board_store.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/bootstrap.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/builder_runs.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/results.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/campaign_adapters.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/campaign_discovery.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/checks.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/clear_stale.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/adoption_runs.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/tokens.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/work_types.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/config.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/controller.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/decisions.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/devin_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/audit_limits.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_human_token.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/file_locks.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/gate_health.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/git_identity.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/grok_build_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/init.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/devin_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/grok_build.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/muse_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_delivery.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_status.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_install.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/muse_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/next_steps.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_content.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_paths.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_rendering.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_static.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/participants.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/plan_context.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/prompts.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_registry.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/exit_codes.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/release_readiness.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/secrets.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/session.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/README.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/claude.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/codex.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/cursor.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/devin.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/generic.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/status_report.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/versioning.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/work_orders.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/workflow_actionlint.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/builder-experiment.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/calibration-corpus.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/code-mower.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/context-packs.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/README.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/claude.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/codex.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/cursor.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/devin.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/generic.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/aider.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/claude_audit.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/claude_review.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/codex.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/cursor_cloud_agent.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/devin.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/devin_cli.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/gitar.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/greptile.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/local_llm.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/muse_cli.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/qodo.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers.yml +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_adoption_diagnostics.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_adoption_result_semantics.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_adoption_run_contract.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_antigravity_sdk_probe.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_audit_comment_posture.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_audit_limits.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_board.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_builder_experiment.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_builder_identity.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_builder_runs.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_calibration_truth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_campaign_adapters.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_campaign_discovery.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_checks.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_claude_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_clear_stale.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_client.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_manifest.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_reports.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_codex_audit_env_preflight.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_codex_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_controller.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_decision_audit_integration.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_decisions.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_builder_lane.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_cli_audit_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_provider_contract.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_campaign_auth.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_output.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_privacy.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_local_audit_setup.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_registry.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_runtime.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_self_hosted_runner.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_supervised_pilot.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_file_locks.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_fork_pr_guard.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_gate_automerge.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_gate_health.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_hosted_dispatch_profile.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_init_actionlint.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_init_build_loop.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_lane_delivery_contract.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_lane_status.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_migration_rehearsal.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_migration_setup_drift.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_next_steps.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_package_install_failure_taxonomy.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_participant_sessions.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_plan_context.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_productivity_metrics_contract.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_prompts.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_fixture_contracts.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_local_cli.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_git.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_process.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_release_qualify.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_reviewer_metrics_core.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_supervised_pilot_contract.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_trailer_comment_labeler.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_work_orders.py +0 -0
- {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_work_type_contract.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.15
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/codemower-ai/code-mower
|
|
@@ -241,7 +241,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
241
241
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
242
242
|
|
|
243
243
|
The current package-index announcement entry point is the tagged
|
|
244
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.
|
|
244
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.15/docs/try-in-10-minutes.md)
|
|
245
245
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
246
246
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
247
247
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -300,6 +300,19 @@ versioned Python on `PATH` outside the user home before falling back to its
|
|
|
300
300
|
own running interpreter, so a pipx- or uv-installed CLI stops handing Claude's
|
|
301
301
|
strict macOS sandbox an interpreter under the denied home tree. An explicit
|
|
302
302
|
`CODE_MOWER_PYTHON` remains authoritative.
|
|
303
|
+
The v1.0.14 patch corrects hosted Devin qualification result precedence: a
|
|
304
|
+
valid closed structured result is accepted even while the session still
|
|
305
|
+
reports `running` / `waiting_for_user`, so a finished informational Devin
|
|
306
|
+
attempt is no longer recorded as owner-blocked. An explicit terminal API
|
|
307
|
+
failure and a `waiting_for_approval` session still take precedence over any
|
|
308
|
+
structured output.
|
|
309
|
+
The v1.0.15 release makes measurement and release operations more trustworthy:
|
|
310
|
+
productivity reports prefer live GitHub current state while retaining clearly
|
|
311
|
+
labeled historical Board observations, release campaigns can discover trusted
|
|
312
|
+
results on their explicitly linked release PR, provider credentials survive
|
|
313
|
+
restarts through fail-closed profiles, and new metadata-only contracts cover
|
|
314
|
+
reviewer finding outcomes, normalized productivity windows, and PR cost
|
|
315
|
+
coverage.
|
|
303
316
|
Package-only users can start from the public package rather than a source
|
|
304
317
|
checkout.
|
|
305
318
|
|
|
@@ -332,7 +345,7 @@ Provider-contract baseline for the next release train:
|
|
|
332
345
|
|
|
333
346
|
For release verification,
|
|
334
347
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
335
|
-
the package-index procedure for `v1.0.
|
|
348
|
+
the package-index procedure for `v1.0.15` / `code-mower==1.0.15`. The
|
|
336
349
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
337
350
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
338
351
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -526,8 +539,8 @@ measurement work.
|
|
|
526
539
|
|
|
527
540
|
## Installation Status
|
|
528
541
|
|
|
529
|
-
The current package-index release baseline is `v1.0.
|
|
530
|
-
install spec `code-mower==1.0.
|
|
542
|
+
The current package-index release baseline is `v1.0.15`, with pinned package
|
|
543
|
+
install spec `code-mower==1.0.15`. Release evidence is recorded on the GitHub
|
|
531
544
|
release and in the first-user install rehearsal. The public repository is
|
|
532
545
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
533
546
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -609,6 +622,8 @@ first so local work exercises the same package entrypoint users install.
|
|
|
609
622
|
- [v1.0.11 Release Notes](docs/v1011-release-notes.md)
|
|
610
623
|
- [v1.0.12 Release Notes](docs/v1012-release-notes.md)
|
|
611
624
|
- [v1.0.13 Release Notes](docs/v1013-release-notes.md)
|
|
625
|
+
- [v1.0.14 Release Notes](docs/v1014-release-notes.md)
|
|
626
|
+
- [v1.0.15 Release Notes](docs/v1015-release-notes.md)
|
|
612
627
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
613
628
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
614
629
|
- [Demo Calibration Example](examples/demo-calibration/README.md)
|
|
@@ -211,7 +211,7 @@ agent report its actual host posture, exact installed version, doctor result,
|
|
|
211
211
|
Board URL, and any owner-only click-list before it mutates the repo.
|
|
212
212
|
|
|
213
213
|
The current package-index announcement entry point is the tagged
|
|
214
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.
|
|
214
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.15/docs/try-in-10-minutes.md)
|
|
215
215
|
guide. The v1.0 supervised-pilot release includes the native Board, the
|
|
216
216
|
controller dry-run and policy contract, adoption and upgrade hardening from
|
|
217
217
|
recent install rehearsals, package-index release checks, provider-diversity
|
|
@@ -270,6 +270,19 @@ versioned Python on `PATH` outside the user home before falling back to its
|
|
|
270
270
|
own running interpreter, so a pipx- or uv-installed CLI stops handing Claude's
|
|
271
271
|
strict macOS sandbox an interpreter under the denied home tree. An explicit
|
|
272
272
|
`CODE_MOWER_PYTHON` remains authoritative.
|
|
273
|
+
The v1.0.14 patch corrects hosted Devin qualification result precedence: a
|
|
274
|
+
valid closed structured result is accepted even while the session still
|
|
275
|
+
reports `running` / `waiting_for_user`, so a finished informational Devin
|
|
276
|
+
attempt is no longer recorded as owner-blocked. An explicit terminal API
|
|
277
|
+
failure and a `waiting_for_approval` session still take precedence over any
|
|
278
|
+
structured output.
|
|
279
|
+
The v1.0.15 release makes measurement and release operations more trustworthy:
|
|
280
|
+
productivity reports prefer live GitHub current state while retaining clearly
|
|
281
|
+
labeled historical Board observations, release campaigns can discover trusted
|
|
282
|
+
results on their explicitly linked release PR, provider credentials survive
|
|
283
|
+
restarts through fail-closed profiles, and new metadata-only contracts cover
|
|
284
|
+
reviewer finding outcomes, normalized productivity windows, and PR cost
|
|
285
|
+
coverage.
|
|
273
286
|
Package-only users can start from the public package rather than a source
|
|
274
287
|
checkout.
|
|
275
288
|
|
|
@@ -302,7 +315,7 @@ Provider-contract baseline for the next release train:
|
|
|
302
315
|
|
|
303
316
|
For release verification,
|
|
304
317
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
305
|
-
the package-index procedure for `v1.0.
|
|
318
|
+
the package-index procedure for `v1.0.15` / `code-mower==1.0.15`. The
|
|
306
319
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
307
320
|
After publication, [Release Qualification](docs/release-qualification.md)
|
|
308
321
|
coordinates provider-specific install and operational checks without treating
|
|
@@ -496,8 +509,8 @@ measurement work.
|
|
|
496
509
|
|
|
497
510
|
## Installation Status
|
|
498
511
|
|
|
499
|
-
The current package-index release baseline is `v1.0.
|
|
500
|
-
install spec `code-mower==1.0.
|
|
512
|
+
The current package-index release baseline is `v1.0.15`, with pinned package
|
|
513
|
+
install spec `code-mower==1.0.15`. Release evidence is recorded on the GitHub
|
|
501
514
|
release and in the first-user install rehearsal. The public repository is
|
|
502
515
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
503
516
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -579,6 +592,8 @@ first so local work exercises the same package entrypoint users install.
|
|
|
579
592
|
- [v1.0.11 Release Notes](docs/v1011-release-notes.md)
|
|
580
593
|
- [v1.0.12 Release Notes](docs/v1012-release-notes.md)
|
|
581
594
|
- [v1.0.13 Release Notes](docs/v1013-release-notes.md)
|
|
595
|
+
- [v1.0.14 Release Notes](docs/v1014-release-notes.md)
|
|
596
|
+
- [v1.0.15 Release Notes](docs/v1015-release-notes.md)
|
|
582
597
|
- [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
|
|
583
598
|
- [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
|
|
584
599
|
- [Demo Calibration Example](examples/demo-calibration/README.md)
|
|
@@ -32,6 +32,7 @@ if __package__ in {None, ""}:
|
|
|
32
32
|
default_setup_path as _default_setup_path,
|
|
33
33
|
build_upload_payload,
|
|
34
34
|
default_dogfood_reports as _default_dogfood_reports,
|
|
35
|
+
detect_repo_slug as _detect_repo_slug,
|
|
35
36
|
dogfood_upload as _dogfood_upload,
|
|
36
37
|
event_id_from_github_run as _event_id_from_github_run,
|
|
37
38
|
is_local_http_endpoint,
|
|
@@ -50,6 +51,7 @@ if __package__ in {None, ""}:
|
|
|
50
51
|
repo_slug_from_remote as _repo_slug_from_remote,
|
|
51
52
|
repo_sync_output_name as _repo_sync_output_name,
|
|
52
53
|
repo_sync_upload as _repo_sync_upload,
|
|
54
|
+
pr_outcomes_upload as _pr_outcomes_upload,
|
|
53
55
|
resolve_setup_token as _resolve_setup_token,
|
|
54
56
|
reviewer_runs_upload as _reviewer_runs_upload,
|
|
55
57
|
run_cloud_doctor,
|
|
@@ -86,6 +88,7 @@ else: # pragma: no cover - exercised after package extraction.
|
|
|
86
88
|
default_setup_path as _default_setup_path,
|
|
87
89
|
build_upload_payload,
|
|
88
90
|
default_dogfood_reports as _default_dogfood_reports,
|
|
91
|
+
detect_repo_slug as _detect_repo_slug,
|
|
89
92
|
dogfood_upload as _dogfood_upload,
|
|
90
93
|
event_id_from_github_run as _event_id_from_github_run,
|
|
91
94
|
is_local_http_endpoint,
|
|
@@ -104,6 +107,7 @@ else: # pragma: no cover - exercised after package extraction.
|
|
|
104
107
|
repo_slug_from_remote as _repo_slug_from_remote,
|
|
105
108
|
repo_sync_output_name as _repo_sync_output_name,
|
|
106
109
|
repo_sync_upload as _repo_sync_upload,
|
|
110
|
+
pr_outcomes_upload as _pr_outcomes_upload,
|
|
107
111
|
resolve_setup_token as _resolve_setup_token,
|
|
108
112
|
reviewer_runs_upload as _reviewer_runs_upload,
|
|
109
113
|
run_cloud_doctor,
|
|
@@ -125,6 +129,7 @@ DEFAULT_OUTPUT_DIR = ".code-mower/cloud-benchmark-bundle"
|
|
|
125
129
|
DEFAULT_CATCH_UP_OUTPUT_DIR = ".code-mower/cloud-catch-up-bundle"
|
|
126
130
|
DEFAULT_REVIEWER_RUNS_OUTPUT_DIR = ".code-mower/reviewer-run-bundle"
|
|
127
131
|
DEFAULT_REPO_SYNC_OUTPUT_DIR = ".code-mower/cloud-repo-sync"
|
|
132
|
+
DEFAULT_PR_OUTCOMES_OUTPUT_DIR = ".code-mower/cloud-pr-outcomes-bundle"
|
|
128
133
|
DEFAULT_BOARD_SNAPSHOT_OUTPUT_DIR = ".code-mower/cloud-board-snapshot-bundle"
|
|
129
134
|
|
|
130
135
|
# Keep the legacy cloud.py import surface intentional while implementation
|
|
@@ -143,6 +148,7 @@ __all__ = [
|
|
|
143
148
|
"DEFAULT_CATCH_UP_OUTPUT_DIR",
|
|
144
149
|
"DEFAULT_REVIEWER_RUNS_OUTPUT_DIR",
|
|
145
150
|
"DEFAULT_REPO_SYNC_OUTPUT_DIR",
|
|
151
|
+
"DEFAULT_PR_OUTCOMES_OUTPUT_DIR",
|
|
146
152
|
"DEFAULT_BOARD_SNAPSHOT_OUTPUT_DIR",
|
|
147
153
|
"build_cloud_bundle",
|
|
148
154
|
"build_upload_payload",
|
|
@@ -170,6 +176,7 @@ __all__ = [
|
|
|
170
176
|
"_repo_slug_from_remote",
|
|
171
177
|
"_repo_sync_output_name",
|
|
172
178
|
"_repo_sync_upload",
|
|
179
|
+
"_pr_outcomes_upload",
|
|
173
180
|
"_resolve_setup_token",
|
|
174
181
|
"_reviewer_runs_upload",
|
|
175
182
|
"_run_git",
|
|
@@ -468,6 +475,57 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
468
475
|
)
|
|
469
476
|
catch_up.add_argument("--timeout", type=float, default=20.0)
|
|
470
477
|
catch_up.add_argument("--json", action="store_true")
|
|
478
|
+
pr_outcomes = subparsers.add_parser("pr-outcomes")
|
|
479
|
+
pr_outcomes.add_argument("--repo-path", type=Path, default=Path.cwd())
|
|
480
|
+
pr_outcomes.add_argument(
|
|
481
|
+
"--output-dir",
|
|
482
|
+
type=Path,
|
|
483
|
+
default=Path(DEFAULT_PR_OUTCOMES_OUTPUT_DIR),
|
|
484
|
+
)
|
|
485
|
+
pr_outcomes.add_argument("--repo-slug", default="")
|
|
486
|
+
pr_outcomes.add_argument("--team-id", default="")
|
|
487
|
+
pr_outcomes.add_argument("--install-id", default="")
|
|
488
|
+
pr_outcomes.add_argument("--source", default="code-mower-pr-outcomes")
|
|
489
|
+
pr_outcomes.add_argument(
|
|
490
|
+
"--limit",
|
|
491
|
+
type=int,
|
|
492
|
+
default=MAX_EVENT_COUNT,
|
|
493
|
+
help=f"number of PRs to include; max {MAX_EVENT_COUNT}",
|
|
494
|
+
)
|
|
495
|
+
pr_outcomes.add_argument(
|
|
496
|
+
"--spend",
|
|
497
|
+
type=Path,
|
|
498
|
+
default=None,
|
|
499
|
+
help=(
|
|
500
|
+
"reviewer spend ledger to merge into coverage; defaults to "
|
|
501
|
+
".code-mower/reviewer-spend.json when present"
|
|
502
|
+
),
|
|
503
|
+
)
|
|
504
|
+
pr_outcomes.add_argument(
|
|
505
|
+
"--endpoint",
|
|
506
|
+
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
507
|
+
)
|
|
508
|
+
pr_outcomes.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
509
|
+
pr_outcomes.add_argument(
|
|
510
|
+
"--token-file",
|
|
511
|
+
type=Path,
|
|
512
|
+
default=None,
|
|
513
|
+
help="token env file or raw token file to use when token env is not set",
|
|
514
|
+
)
|
|
515
|
+
pr_outcomes.add_argument(
|
|
516
|
+
"--token-dir",
|
|
517
|
+
type=Path,
|
|
518
|
+
default=None,
|
|
519
|
+
help="directory with Code Mower Cloud token profiles",
|
|
520
|
+
)
|
|
521
|
+
pr_outcomes.add_argument(
|
|
522
|
+
"--yes",
|
|
523
|
+
action="store_true",
|
|
524
|
+
help="perform the network upload; without this, pr-outcomes is a dry run",
|
|
525
|
+
)
|
|
526
|
+
pr_outcomes.add_argument("--timeout", type=float, default=20.0)
|
|
527
|
+
pr_outcomes.add_argument("--json", action="store_true")
|
|
528
|
+
|
|
471
529
|
board_snapshot = subparsers.add_parser("board-snapshot")
|
|
472
530
|
board_snapshot.add_argument("--repo-path", type=Path, default=Path.cwd())
|
|
473
531
|
board_snapshot.add_argument(
|
|
@@ -604,10 +662,21 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
604
662
|
repo_sync.add_argument(
|
|
605
663
|
"--mode",
|
|
606
664
|
action="append",
|
|
607
|
-
choices=("dogfood", "catch-up", "reviewer-runs"),
|
|
665
|
+
choices=("dogfood", "catch-up", "reviewer-runs", "pr-outcomes"),
|
|
608
666
|
default=[],
|
|
609
667
|
help="sync mode to run; repeatable, defaults to dogfood and reviewer-runs",
|
|
610
668
|
)
|
|
669
|
+
repo_sync.add_argument(
|
|
670
|
+
"--event",
|
|
671
|
+
action="append",
|
|
672
|
+
default=[],
|
|
673
|
+
metavar="EVENT_TYPE=PATH",
|
|
674
|
+
help=(
|
|
675
|
+
"include structured benchmark events from JSON/JSONL in each repo's "
|
|
676
|
+
"dogfood step; productivity_summary entries also accept "
|
|
677
|
+
"code_mower.productivityWindow.v1 window observations"
|
|
678
|
+
),
|
|
679
|
+
)
|
|
611
680
|
repo_sync.add_argument(
|
|
612
681
|
"--output-dir",
|
|
613
682
|
type=Path,
|
|
@@ -685,7 +754,12 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
685
754
|
return 0
|
|
686
755
|
if args.command == "export":
|
|
687
756
|
events = [
|
|
688
|
-
*_parse_event_args(
|
|
757
|
+
*_parse_event_args(
|
|
758
|
+
args.event,
|
|
759
|
+
repo_slug=args.repo_slug,
|
|
760
|
+
team_id=args.team_id,
|
|
761
|
+
install_id=args.install_id,
|
|
762
|
+
),
|
|
689
763
|
*_spend_events(
|
|
690
764
|
args.spend,
|
|
691
765
|
repo_slug=args.repo_slug,
|
|
@@ -781,11 +855,23 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
781
855
|
print(render_cloud_doctor_text(report), end="")
|
|
782
856
|
return 1 if report["failures"] else 0
|
|
783
857
|
if args.command == "dogfood":
|
|
858
|
+
# Resolve the slug before loading window events so a slugless
|
|
859
|
+
# observation is filled from --repo-slug or the detected repo,
|
|
860
|
+
# exactly as dogfood_upload and repo-sync resolve it below.
|
|
861
|
+
dogfood_repo_slug = args.repo_slug or _detect_repo_slug(
|
|
862
|
+
args.repo_path.expanduser().resolve()
|
|
863
|
+
)
|
|
784
864
|
result = _dogfood_upload(
|
|
785
865
|
repo_path=args.repo_path,
|
|
786
866
|
output_dir=args.output_dir,
|
|
787
867
|
reports=_parse_report_args(args.report),
|
|
788
|
-
events=_parse_event_args(
|
|
868
|
+
events=_parse_event_args(
|
|
869
|
+
args.event,
|
|
870
|
+
repo_slug=dogfood_repo_slug,
|
|
871
|
+
team_id=args.team_id,
|
|
872
|
+
install_id=args.install_id,
|
|
873
|
+
source=args.source,
|
|
874
|
+
),
|
|
789
875
|
spend_path=args.spend,
|
|
790
876
|
repo_slug=args.repo_slug,
|
|
791
877
|
team_id=args.team_id,
|
|
@@ -920,6 +1006,40 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
920
1006
|
elif result["status"] == "dry_run":
|
|
921
1007
|
print("Network: skipped (pass --yes to upload)")
|
|
922
1008
|
return 1 if result["status"] == "doctor_failed" else 0
|
|
1009
|
+
if args.command == "pr-outcomes":
|
|
1010
|
+
result = _pr_outcomes_upload(
|
|
1011
|
+
repo_path=args.repo_path,
|
|
1012
|
+
output_dir=args.output_dir,
|
|
1013
|
+
repo_slug=args.repo_slug,
|
|
1014
|
+
team_id=args.team_id,
|
|
1015
|
+
install_id=args.install_id,
|
|
1016
|
+
source=args.source,
|
|
1017
|
+
limit=args.limit,
|
|
1018
|
+
endpoint=args.endpoint,
|
|
1019
|
+
token_env=args.token_env,
|
|
1020
|
+
token_file=args.token_file,
|
|
1021
|
+
token_dir=args.token_dir,
|
|
1022
|
+
yes=args.yes,
|
|
1023
|
+
timeout=args.timeout,
|
|
1024
|
+
spend_path=args.spend,
|
|
1025
|
+
)
|
|
1026
|
+
if args.json:
|
|
1027
|
+
print(json.dumps(result, indent=2, sort_keys=True))
|
|
1028
|
+
else:
|
|
1029
|
+
print("Code Mower cloud PR outcomes")
|
|
1030
|
+
print(f"Status: {result['status']}")
|
|
1031
|
+
print(f"Repository: {result['repo_slug']}")
|
|
1032
|
+
print(f"PRs examined: {result.get('pr_count', 0)}")
|
|
1033
|
+
print(f"Events: {result['event_count']}")
|
|
1034
|
+
if result["status"] == "uploaded":
|
|
1035
|
+
print(f"Upload status: {result['upload']['status']}")
|
|
1036
|
+
elif result["status"] == "dry_run":
|
|
1037
|
+
print("Network: skipped (pass --yes to upload)")
|
|
1038
|
+
errors = result.get("errors") or []
|
|
1039
|
+
if errors:
|
|
1040
|
+
print(f"Validation errors: {len(errors)}")
|
|
1041
|
+
return 1 if result["status"] == "doctor_failed" else 0
|
|
1042
|
+
|
|
923
1043
|
if args.command == "repo-sync":
|
|
924
1044
|
result = _repo_sync_upload(
|
|
925
1045
|
repo_specs=args.repo,
|
|
@@ -937,6 +1057,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
937
1057
|
include_git_ref=args.include_git_ref,
|
|
938
1058
|
yes=args.yes,
|
|
939
1059
|
timeout=args.timeout,
|
|
1060
|
+
events=args.event,
|
|
940
1061
|
)
|
|
941
1062
|
if args.json:
|
|
942
1063
|
print(json.dumps(result, indent=2, sort_keys=True))
|
|
@@ -951,6 +1072,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
951
1072
|
current = summary.get("current_dogfood", {})
|
|
952
1073
|
history = summary.get("imported_history", {})
|
|
953
1074
|
reviewer = summary.get("reviewer_evidence", {})
|
|
1075
|
+
baseline = summary.get("productivity_baseline", {})
|
|
954
1076
|
print(
|
|
955
1077
|
"Current dogfood: "
|
|
956
1078
|
f"{current.get('steps', 0)} steps, "
|
|
@@ -967,6 +1089,12 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
967
1089
|
f"{reviewer.get('steps', 0)} steps, "
|
|
968
1090
|
f"{reviewer.get('events', 0)} events"
|
|
969
1091
|
)
|
|
1092
|
+
print(
|
|
1093
|
+
"Productivity baseline: "
|
|
1094
|
+
f"{baseline.get('steps', 0)} steps, "
|
|
1095
|
+
f"{baseline.get('events', 0)} events "
|
|
1096
|
+
"(correlation only, no causal claims)"
|
|
1097
|
+
)
|
|
970
1098
|
guidance = (
|
|
971
1099
|
history.get("trust_guidance", {})
|
|
972
1100
|
if isinstance(history, dict)
|
|
@@ -64,6 +64,8 @@ from .doctor import (
|
|
|
64
64
|
from .events import (
|
|
65
65
|
EVENT_SCHEMA,
|
|
66
66
|
GITHUB_RUN_LIST_FIELDS,
|
|
67
|
+
GITHUB_PR_LIST_FIELDS,
|
|
68
|
+
artifact_event_from_dict,
|
|
67
69
|
build_board_snapshot_event,
|
|
68
70
|
build_dogfood_event,
|
|
69
71
|
build_provider_catalog_snapshot_events,
|
|
@@ -72,6 +74,8 @@ from .events import (
|
|
|
72
74
|
load_event_file,
|
|
73
75
|
normalize_event,
|
|
74
76
|
parse_event_args,
|
|
77
|
+
parse_event_file_candidates,
|
|
78
|
+
run_gh_pr_list,
|
|
75
79
|
run_gh_run_list,
|
|
76
80
|
safe_event_type,
|
|
77
81
|
safe_kind,
|
|
@@ -89,12 +93,15 @@ from .manifest import (
|
|
|
89
93
|
)
|
|
90
94
|
from .reports import included_report_payloads
|
|
91
95
|
from .operations import (
|
|
96
|
+
PRODUCTIVITY_BASELINE_TRUST_GUIDANCE,
|
|
92
97
|
board_snapshot_upload,
|
|
93
98
|
catch_up_upload,
|
|
94
99
|
dogfood_upload,
|
|
95
100
|
parse_repo_sync_spec,
|
|
101
|
+
pr_outcomes_upload,
|
|
96
102
|
repo_sync_output_name,
|
|
97
103
|
repo_sync_upload,
|
|
104
|
+
repo_sync_window_events,
|
|
98
105
|
reviewer_runs_upload,
|
|
99
106
|
)
|
|
100
107
|
from .errors import CloudBundleError
|
|
@@ -138,6 +145,23 @@ from .productivity import (
|
|
|
138
145
|
PRODUCTIVITY_WINDOW_GRANULARITIES,
|
|
139
146
|
validate_productivity_summary_payload,
|
|
140
147
|
)
|
|
148
|
+
from .productivity_windows import (
|
|
149
|
+
COMPARISON_BASIS_VALUES,
|
|
150
|
+
PRODUCTIVITY_WINDOW_DIMENSION,
|
|
151
|
+
PRODUCTIVITY_WINDOW_INPUT_SCHEMA,
|
|
152
|
+
TIMING_PROVENANCE_VALUES,
|
|
153
|
+
WINDOW_COUNT_FIELDS,
|
|
154
|
+
WINDOW_SUBJECTS,
|
|
155
|
+
WINDOW_TIMING_FIELDS,
|
|
156
|
+
count_normalized_productivity_window_events,
|
|
157
|
+
is_normalized_productivity_window_event,
|
|
158
|
+
load_productivity_window_events,
|
|
159
|
+
normalize_window_observation,
|
|
160
|
+
productivity_window_event_from_dict,
|
|
161
|
+
productivity_window_event_id,
|
|
162
|
+
productivity_window_to_event,
|
|
163
|
+
validate_productivity_window_event,
|
|
164
|
+
)
|
|
141
165
|
from .pr_outcomes import (
|
|
142
166
|
PR_COST_COVERAGE_VALUES,
|
|
143
167
|
PR_OUTCOME_COST_METRICS,
|
|
@@ -146,6 +170,12 @@ from .pr_outcomes import (
|
|
|
146
170
|
PR_OUTCOME_EVENT_TYPE,
|
|
147
171
|
PR_OUTCOME_SCHEMA,
|
|
148
172
|
PR_OUTCOME_VALUES,
|
|
173
|
+
build_pr_outcome_event,
|
|
174
|
+
load_pr_outcome_observations,
|
|
175
|
+
max_source_freshness,
|
|
176
|
+
pr_outcome_observation_key,
|
|
177
|
+
pr_outcome_observation_record,
|
|
178
|
+
save_pr_outcome_observations,
|
|
149
179
|
validate_pr_outcome_payload,
|
|
150
180
|
)
|
|
151
181
|
from .upload import (
|
|
@@ -186,15 +216,22 @@ __all__ = [
|
|
|
186
216
|
"DEFAULT_DOGFOOD_REPORTS",
|
|
187
217
|
"MAX_EVENT_COUNT",
|
|
188
218
|
"MAX_REPORT_UPLOAD_BYTES",
|
|
219
|
+
"COMPARISON_BASIS_VALUES",
|
|
189
220
|
"PRODUCTIVITY_AGGREGATION_SUBJECTS",
|
|
190
221
|
"PRODUCTIVITY_COUNT_METRICS",
|
|
191
222
|
"PRODUCTIVITY_EVENT_TYPE",
|
|
223
|
+
"PRODUCTIVITY_WINDOW_DIMENSION",
|
|
224
|
+
"PRODUCTIVITY_WINDOW_INPUT_SCHEMA",
|
|
192
225
|
"PRODUCTIVITY_METRIC_UNITS",
|
|
193
226
|
"PRODUCTIVITY_METRICS_SCHEMA",
|
|
194
227
|
"PRODUCTIVITY_REQUIRED_DIMENSIONS",
|
|
195
228
|
"PRODUCTIVITY_TIME_METRICS",
|
|
196
229
|
"PRODUCTIVITY_TOKEN_METRICS",
|
|
197
230
|
"PRODUCTIVITY_WINDOW_GRANULARITIES",
|
|
231
|
+
"TIMING_PROVENANCE_VALUES",
|
|
232
|
+
"WINDOW_COUNT_FIELDS",
|
|
233
|
+
"WINDOW_SUBJECTS",
|
|
234
|
+
"WINDOW_TIMING_FIELDS",
|
|
198
235
|
"PR_COST_COVERAGE_VALUES",
|
|
199
236
|
"PR_OUTCOME_COST_METRICS",
|
|
200
237
|
"PR_OUTCOME_COUNT_METRICS",
|
|
@@ -202,6 +239,12 @@ __all__ = [
|
|
|
202
239
|
"PR_OUTCOME_EVENT_TYPE",
|
|
203
240
|
"PR_OUTCOME_SCHEMA",
|
|
204
241
|
"PR_OUTCOME_VALUES",
|
|
242
|
+
"build_pr_outcome_event",
|
|
243
|
+
"load_pr_outcome_observations",
|
|
244
|
+
"max_source_freshness",
|
|
245
|
+
"pr_outcome_observation_key",
|
|
246
|
+
"pr_outcome_observation_record",
|
|
247
|
+
"save_pr_outcome_observations",
|
|
205
248
|
"WORK_TYPE_SCHEMA",
|
|
206
249
|
"WORK_TYPE_SUPPORTED_EVENT_TYPES",
|
|
207
250
|
"WORK_TYPE_VALUES",
|
|
@@ -220,13 +263,23 @@ __all__ = [
|
|
|
220
263
|
"DogfoodPlan",
|
|
221
264
|
"EVENT_SCHEMA",
|
|
222
265
|
"GITHUB_RUN_LIST_FIELDS",
|
|
266
|
+
"GITHUB_PR_LIST_FIELDS",
|
|
223
267
|
"adoption_event_from_result_dict",
|
|
224
268
|
"adoption_result_to_event",
|
|
269
|
+
"artifact_event_from_dict",
|
|
225
270
|
"build_dogfood_event",
|
|
226
271
|
"build_dogfood_dry_run_preview",
|
|
227
272
|
"build_dogfood_plan",
|
|
228
273
|
"build_provider_catalog_snapshot_events",
|
|
229
274
|
"build_workflow_run_event",
|
|
275
|
+
"count_normalized_productivity_window_events",
|
|
276
|
+
"is_normalized_productivity_window_event",
|
|
277
|
+
"load_productivity_window_events",
|
|
278
|
+
"normalize_window_observation",
|
|
279
|
+
"productivity_window_event_from_dict",
|
|
280
|
+
"productivity_window_event_id",
|
|
281
|
+
"productivity_window_to_event",
|
|
282
|
+
"validate_productivity_window_event",
|
|
230
283
|
"build_cloud_bundle",
|
|
231
284
|
"build_event_upload_payload",
|
|
232
285
|
"build_upload_payload",
|
|
@@ -235,6 +288,7 @@ __all__ = [
|
|
|
235
288
|
"build_provenance_summary",
|
|
236
289
|
"board_snapshot_upload",
|
|
237
290
|
"catch_up_upload",
|
|
291
|
+
"PRODUCTIVITY_BASELINE_TRUST_GUIDANCE",
|
|
238
292
|
"dashboard_url_for_endpoint",
|
|
239
293
|
"default_setup_path",
|
|
240
294
|
"default_token_dir",
|
|
@@ -253,7 +307,9 @@ __all__ = [
|
|
|
253
307
|
"normalize_event",
|
|
254
308
|
"plan_report",
|
|
255
309
|
"parse_repo_sync_spec",
|
|
310
|
+
"repo_sync_window_events",
|
|
256
311
|
"parse_event_args",
|
|
312
|
+
"parse_event_file_candidates",
|
|
257
313
|
"post_upload_payload",
|
|
258
314
|
"probe_cloud_service",
|
|
259
315
|
"read_token_file",
|
|
@@ -262,6 +318,7 @@ __all__ = [
|
|
|
262
318
|
"render_cloud_doctor_text",
|
|
263
319
|
"render_setup_env",
|
|
264
320
|
"repo_slug_from_remote",
|
|
321
|
+
"pr_outcomes_upload",
|
|
265
322
|
"repo_sync_output_name",
|
|
266
323
|
"repo_sync_upload",
|
|
267
324
|
"report_path_from_manifest",
|
|
@@ -274,6 +331,7 @@ __all__ = [
|
|
|
274
331
|
"resolve_work_type_classification",
|
|
275
332
|
"run_cloud_doctor",
|
|
276
333
|
"run_cloud_setup",
|
|
334
|
+
"run_gh_pr_list",
|
|
277
335
|
"run_gh_run_list",
|
|
278
336
|
"run_git",
|
|
279
337
|
"safe_target_name",
|