code-mower 0.5.0b29__tar.gz → 0.5.0b31__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.0b29 → code_mower-0.5.0b31}/PKG-INFO +30 -6
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/README.md +29 -5
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/pyproject.toml +1 -1
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/__init__.py +1 -1
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cli.py +13 -1
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud.py +29 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/operations.py +53 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/package_manifest.py +2 -0
- code_mower-0.5.0b31/src/code_mower/work_orders.py +992 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower.egg-info/PKG-INFO +30 -6
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower.egg-info/SOURCES.txt +3 -1
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_cloud_client.py +32 -1
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_local_cli.py +2 -2
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_release_hygiene.py +86 -34
- code_mower-0.5.0b31/tests/test_work_orders.py +320 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/LICENSE +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/MANIFEST.in +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/NOTICE +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/SUPPORT.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/requirements/requirements.txt +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/setup.cfg +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/checks.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/clear_stale.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/config.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/init.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/migration.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/package.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/package_content.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/package_static.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/prompts.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_registry.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/secrets.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower/versioning.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/aider.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/claude_audit.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/codex.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/devin.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/gitar.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/greptile.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers/qodo.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/providers.yml +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_checks.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_clear_stale.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_output.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_doctor_registry.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.5.0b29 → code_mower-0.5.0b31}/tests/test_reviewer_metrics_core.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b31
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -25,6 +25,8 @@ The short version:
|
|
|
25
25
|
AI review tools;
|
|
26
26
|
- run setup diagnostics before a lane can surprise you with spend, source
|
|
27
27
|
exposure, or GitHub Actions churn;
|
|
28
|
+
- turn issue text, external docs, and project doctrine into local work orders
|
|
29
|
+
before an agent starts coding;
|
|
28
30
|
- generate local reviewer value reports from known-clean and known-blocked PRs;
|
|
29
31
|
and
|
|
30
32
|
- optionally share sanitized metadata with [CodeMower.com](https://codemower.com)
|
|
@@ -101,11 +103,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
101
103
|
|
|
102
104
|
```bash
|
|
103
105
|
python3.12 --version
|
|
104
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
106
|
+
pipx install --python python3.12 code-mower==0.5.0b31
|
|
105
107
|
code-mower --version
|
|
106
108
|
```
|
|
107
109
|
|
|
108
|
-
`0.5.
|
|
110
|
+
`0.5.0b31` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
109
111
|
line, use the explicit beta version above or allow prereleases with:
|
|
110
112
|
|
|
111
113
|
```bash
|
|
@@ -148,7 +150,29 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
148
150
|
|
|
149
151
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
150
152
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
151
|
-
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.0b31`.
|
|
154
|
+
|
|
155
|
+
## Optional: Plan Before Coding
|
|
156
|
+
|
|
157
|
+
For larger changes, use GitHub Issues and local work orders as the planning
|
|
158
|
+
surface, then keep pull requests focused on code review and merge readiness:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
code-mower project-context init --project-name "My Product"
|
|
162
|
+
code-mower context add --external ~/Downloads/product-requirements.md
|
|
163
|
+
code-mower plan from-issue \
|
|
164
|
+
--repo OWNER/REPO \
|
|
165
|
+
--title "Add billing settings" \
|
|
166
|
+
--body-file issue-body.md \
|
|
167
|
+
--output .code-mower/work-orders/billing-settings-plan.md
|
|
168
|
+
code-mower work-order draft \
|
|
169
|
+
--issue-plan .code-mower/work-orders/billing-settings-plan.md \
|
|
170
|
+
--output .code-mower/work-orders/billing-settings.md
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The work-order path is local-only by default. External docs are recorded as
|
|
174
|
+
metadata manifests unless you explicitly ask for bounded previews. See
|
|
175
|
+
[docs/planning-work-orders.md](docs/planning-work-orders.md).
|
|
152
176
|
|
|
153
177
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
154
178
|
|
|
@@ -253,9 +277,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
253
277
|
|
|
254
278
|
## Installation Status
|
|
255
279
|
|
|
256
|
-
The current public beta is `v0.5.0-beta.
|
|
280
|
+
The current public beta is `v0.5.0-beta.31` from
|
|
257
281
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
258
|
-
as `code-mower==0.5.
|
|
282
|
+
as `code-mower==0.5.0b31` on [PyPI](https://pypi.org/project/code-mower/).
|
|
259
283
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
260
284
|
release notes.
|
|
261
285
|
|
|
@@ -10,6 +10,8 @@ The short version:
|
|
|
10
10
|
AI review tools;
|
|
11
11
|
- run setup diagnostics before a lane can surprise you with spend, source
|
|
12
12
|
exposure, or GitHub Actions churn;
|
|
13
|
+
- turn issue text, external docs, and project doctrine into local work orders
|
|
14
|
+
before an agent starts coding;
|
|
13
15
|
- generate local reviewer value reports from known-clean and known-blocked PRs;
|
|
14
16
|
and
|
|
15
17
|
- optionally share sanitized metadata with [CodeMower.com](https://codemower.com)
|
|
@@ -86,11 +88,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
86
88
|
|
|
87
89
|
```bash
|
|
88
90
|
python3.12 --version
|
|
89
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
91
|
+
pipx install --python python3.12 code-mower==0.5.0b31
|
|
90
92
|
code-mower --version
|
|
91
93
|
```
|
|
92
94
|
|
|
93
|
-
`0.5.
|
|
95
|
+
`0.5.0b31` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
94
96
|
line, use the explicit beta version above or allow prereleases with:
|
|
95
97
|
|
|
96
98
|
```bash
|
|
@@ -133,7 +135,29 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
133
135
|
|
|
134
136
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
135
137
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
136
|
-
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.0b31`.
|
|
139
|
+
|
|
140
|
+
## Optional: Plan Before Coding
|
|
141
|
+
|
|
142
|
+
For larger changes, use GitHub Issues and local work orders as the planning
|
|
143
|
+
surface, then keep pull requests focused on code review and merge readiness:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
code-mower project-context init --project-name "My Product"
|
|
147
|
+
code-mower context add --external ~/Downloads/product-requirements.md
|
|
148
|
+
code-mower plan from-issue \
|
|
149
|
+
--repo OWNER/REPO \
|
|
150
|
+
--title "Add billing settings" \
|
|
151
|
+
--body-file issue-body.md \
|
|
152
|
+
--output .code-mower/work-orders/billing-settings-plan.md
|
|
153
|
+
code-mower work-order draft \
|
|
154
|
+
--issue-plan .code-mower/work-orders/billing-settings-plan.md \
|
|
155
|
+
--output .code-mower/work-orders/billing-settings.md
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
The work-order path is local-only by default. External docs are recorded as
|
|
159
|
+
metadata manifests unless you explicitly ask for bounded previews. See
|
|
160
|
+
[docs/planning-work-orders.md](docs/planning-work-orders.md).
|
|
137
161
|
|
|
138
162
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
139
163
|
|
|
@@ -238,9 +262,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
238
262
|
|
|
239
263
|
## Installation Status
|
|
240
264
|
|
|
241
|
-
The current public beta is `v0.5.0-beta.
|
|
265
|
+
The current public beta is `v0.5.0-beta.31` from
|
|
242
266
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
243
|
-
as `code-mower==0.5.
|
|
267
|
+
as `code-mower==0.5.0b31` on [PyPI](https://pypi.org/project/code-mower/).
|
|
244
268
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
245
269
|
release notes.
|
|
246
270
|
|
|
@@ -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.0b31`, or run source checkouts with "
|
|
18
18
|
"`PYTHONPATH=src python -m code_mower.cli`."
|
|
19
19
|
)
|
|
20
20
|
|
|
@@ -52,6 +52,7 @@ from . import prompts as code_mower_prompts
|
|
|
52
52
|
from . import reviewer_metrics
|
|
53
53
|
from . import saas_reviewer_labeler
|
|
54
54
|
from . import trailer_comment_labeler
|
|
55
|
+
from . import work_orders as code_mower_work_orders
|
|
55
56
|
from .provider_registry import REFERENCE_PROVIDERS
|
|
56
57
|
from .providers import build_provider_model_env_report
|
|
57
58
|
|
|
@@ -386,6 +387,7 @@ COMMAND_DESCRIPTIONS: dict[str, str] = {
|
|
|
386
387
|
"checks": "Detect and run a repository's native lint/test/build surface.",
|
|
387
388
|
"cloud": "Export or upload sanitized benchmark metadata.",
|
|
388
389
|
"config": "Validate or inspect a Code Mower config.",
|
|
390
|
+
"context": "Record local external planning context manifests.",
|
|
389
391
|
"context-packs": "Build selective surrounding-file context packs.",
|
|
390
392
|
"coderabbit-cli": "Run a CodeRabbit CLI informational lane.",
|
|
391
393
|
"codex-audit": "Run a Codex structured audit lane.",
|
|
@@ -400,12 +402,15 @@ COMMAND_DESCRIPTIONS: dict[str, str] = {
|
|
|
400
402
|
"merge-plan": "Inspect merge-readiness signals and lane labels.",
|
|
401
403
|
"next-steps": "Print the recommended next actions after setup.",
|
|
402
404
|
"package": "Build or inspect package extraction artifacts.",
|
|
405
|
+
"plan": "Create local issue-derived planning artifacts.",
|
|
406
|
+
"project-context": "Create editable local project-context doctrine docs.",
|
|
403
407
|
"prompts": "Inspect prompt/lens customization artifacts.",
|
|
404
408
|
"providers": "List or inspect provider template definitions.",
|
|
405
409
|
"reviewer-metrics": "Compute reviewer metrics and value reports.",
|
|
406
410
|
"saas-reviewer-labeler": "Apply labels from hosted reviewer comments.",
|
|
407
411
|
"telemetry": "Inspect benchmark telemetry/event helpers.",
|
|
408
412
|
"trailer-comment-labeler": "Apply labels from structured audit trailers.",
|
|
413
|
+
"work-order": "Draft implementation work orders and builder experiment seeds.",
|
|
409
414
|
}
|
|
410
415
|
|
|
411
416
|
|
|
@@ -418,10 +423,13 @@ FIRST_USER_COMMANDS = (
|
|
|
418
423
|
"reviewer-metrics",
|
|
419
424
|
"cloud",
|
|
420
425
|
"config",
|
|
426
|
+
"project-context",
|
|
421
427
|
)
|
|
422
428
|
|
|
423
429
|
|
|
424
430
|
def _init_main(argv: list[str]) -> int:
|
|
431
|
+
if argv[:1] == ["project-context"]:
|
|
432
|
+
return code_mower_work_orders.project_context_main(["init", *argv[1:]])
|
|
425
433
|
options_with_values = {"--profile", "--output-dir"}
|
|
426
434
|
if (
|
|
427
435
|
argv[:1] == ["auth"]
|
|
@@ -508,6 +516,7 @@ COMMAND_HANDLERS: dict[str, CommandHandler] = {
|
|
|
508
516
|
"checks": code_mower_checks.main,
|
|
509
517
|
"cloud": code_mower_cloud.main,
|
|
510
518
|
"config": _config_main,
|
|
519
|
+
"context": code_mower_work_orders.context_main,
|
|
511
520
|
"context-packs": code_mower_context_packs.main,
|
|
512
521
|
"coderabbit-cli": coderabbit_cli_audit_pr.main,
|
|
513
522
|
"codex-audit": codex_audit_pr.main,
|
|
@@ -522,12 +531,15 @@ COMMAND_HANDLERS: dict[str, CommandHandler] = {
|
|
|
522
531
|
"merge-plan": code_mower_merge.main,
|
|
523
532
|
"next-steps": code_mower_next_steps.main,
|
|
524
533
|
"package": _package_main,
|
|
534
|
+
"plan": code_mower_work_orders.plan_main,
|
|
535
|
+
"project-context": code_mower_work_orders.project_context_main,
|
|
525
536
|
"prompts": code_mower_prompts.main,
|
|
526
537
|
"providers": _providers_main,
|
|
527
538
|
"reviewer-metrics": reviewer_metrics.main,
|
|
528
539
|
"saas-reviewer-labeler": saas_reviewer_labeler.main,
|
|
529
540
|
"telemetry": code_mower_telemetry.main,
|
|
530
541
|
"trailer-comment-labeler": trailer_comment_labeler.main,
|
|
542
|
+
"work-order": code_mower_work_orders.work_order_main,
|
|
531
543
|
}
|
|
532
544
|
|
|
533
545
|
|
|
@@ -669,6 +669,35 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
669
669
|
print(f"Repositories: {result['repo_count']}")
|
|
670
670
|
print(f"Steps: {result['step_count']}")
|
|
671
671
|
print(f"Errors: {result['error_count']}")
|
|
672
|
+
summary = result.get("data_class_summary", {})
|
|
673
|
+
if isinstance(summary, dict):
|
|
674
|
+
current = summary.get("current_dogfood", {})
|
|
675
|
+
history = summary.get("imported_history", {})
|
|
676
|
+
reviewer = summary.get("reviewer_evidence", {})
|
|
677
|
+
print(
|
|
678
|
+
"Current dogfood: "
|
|
679
|
+
f"{current.get('steps', 0)} steps, "
|
|
680
|
+
f"{current.get('events', 0)} events"
|
|
681
|
+
)
|
|
682
|
+
print(
|
|
683
|
+
"Imported history: "
|
|
684
|
+
f"{history.get('steps', 0)} steps, "
|
|
685
|
+
f"{history.get('events', 0)} events "
|
|
686
|
+
"(not calibration evidence)"
|
|
687
|
+
)
|
|
688
|
+
print(
|
|
689
|
+
"Reviewer evidence: "
|
|
690
|
+
f"{reviewer.get('steps', 0)} steps, "
|
|
691
|
+
f"{reviewer.get('events', 0)} events"
|
|
692
|
+
)
|
|
693
|
+
guidance = (
|
|
694
|
+
history.get("trust_guidance", {})
|
|
695
|
+
if isinstance(history, dict)
|
|
696
|
+
else {}
|
|
697
|
+
)
|
|
698
|
+
if guidance and history.get("events", 0):
|
|
699
|
+
print(f"History use: {guidance.get('use_for', '')}")
|
|
700
|
+
print(f"History next: {guidance.get('next_step', '')}")
|
|
672
701
|
return 0 if result["error_count"] == 0 else 1
|
|
673
702
|
except CloudBundleError as exc:
|
|
674
703
|
print(f"error: {exc}", file=sys.stderr)
|
|
@@ -413,6 +413,58 @@ def repo_sync_output_name(repo_slug: str, repo_path: Path, index: int) -> str:
|
|
|
413
413
|
return f"{cleaned or 'repo'}-{index + 1}"
|
|
414
414
|
|
|
415
415
|
|
|
416
|
+
def build_repo_sync_data_class_summary(
|
|
417
|
+
repos: list[dict[str, Any]],
|
|
418
|
+
) -> dict[str, dict[str, Any]]:
|
|
419
|
+
"""Summarize synced data by dashboard provenance class."""
|
|
420
|
+
|
|
421
|
+
summary: dict[str, dict[str, Any]] = {
|
|
422
|
+
"current_dogfood": {
|
|
423
|
+
"steps": 0,
|
|
424
|
+
"events": 0,
|
|
425
|
+
"description": "current repo metadata and provider inventory",
|
|
426
|
+
},
|
|
427
|
+
"imported_history": {
|
|
428
|
+
"steps": 0,
|
|
429
|
+
"events": 0,
|
|
430
|
+
"description": "sanitized GitHub Actions history",
|
|
431
|
+
"trust_guidance": CATCH_UP_TRUST_GUIDANCE,
|
|
432
|
+
},
|
|
433
|
+
"reviewer_evidence": {
|
|
434
|
+
"steps": 0,
|
|
435
|
+
"events": 0,
|
|
436
|
+
"description": "metadata-only reviewer verdict artifacts",
|
|
437
|
+
},
|
|
438
|
+
}
|
|
439
|
+
for repo in repos:
|
|
440
|
+
steps = repo.get("steps")
|
|
441
|
+
if not isinstance(steps, list):
|
|
442
|
+
continue
|
|
443
|
+
for step in steps:
|
|
444
|
+
if not isinstance(step, dict):
|
|
445
|
+
continue
|
|
446
|
+
mode = str(step.get("mode") or "")
|
|
447
|
+
if mode == "cloud-dogfood":
|
|
448
|
+
target = summary["current_dogfood"]
|
|
449
|
+
target["steps"] += 1
|
|
450
|
+
export = step.get("export")
|
|
451
|
+
if isinstance(export, dict):
|
|
452
|
+
target["events"] += int(export.get("event_count") or 0)
|
|
453
|
+
elif mode == "cloud-catch-up":
|
|
454
|
+
target = summary["imported_history"]
|
|
455
|
+
target["steps"] += 1
|
|
456
|
+
catch_up = step.get("catch_up")
|
|
457
|
+
if isinstance(catch_up, dict):
|
|
458
|
+
target["events"] += int(catch_up.get("event_count") or 0)
|
|
459
|
+
else:
|
|
460
|
+
target["events"] += int(step.get("run_count") or 0)
|
|
461
|
+
elif mode == "cloud-reviewer-runs":
|
|
462
|
+
target = summary["reviewer_evidence"]
|
|
463
|
+
target["steps"] += 1
|
|
464
|
+
target["events"] += int(step.get("event_count") or 0)
|
|
465
|
+
return summary
|
|
466
|
+
|
|
467
|
+
|
|
416
468
|
def repo_sync_upload(
|
|
417
469
|
*,
|
|
418
470
|
repo_specs: list[str],
|
|
@@ -524,5 +576,6 @@ def repo_sync_upload(
|
|
|
524
576
|
"step_count": sum(len(repo["steps"]) for repo in repos),
|
|
525
577
|
"error_count": error_count,
|
|
526
578
|
"modes": selected_modes,
|
|
579
|
+
"data_class_summary": build_repo_sync_data_class_summary(repos),
|
|
527
580
|
"repos": repos,
|
|
528
581
|
}
|
|
@@ -14,6 +14,7 @@ PACKAGE_FILES = (
|
|
|
14
14
|
("tools/code_mower_cli.py", "src/code_mower/cli.py", "core"),
|
|
15
15
|
("tools/code_mower_bootstrap.py", "src/code_mower/bootstrap.py", "core"),
|
|
16
16
|
("tools/code_mower_builder_experiment.py", "src/code_mower/builder_experiment.py", "core"),
|
|
17
|
+
("src/code_mower/work_orders.py", "src/code_mower/work_orders.py", "core"),
|
|
17
18
|
("tools/code_mower_requirements.txt", "requirements/requirements.txt", "tooling"),
|
|
18
19
|
("tools/code_mower_calibration.py", "src/code_mower/code_mower_calibration.py", "core"),
|
|
19
20
|
("src/code_mower/checks.py", "src/code_mower/checks.py", "core"),
|
|
@@ -415,6 +416,7 @@ PACKAGE_FILES = (
|
|
|
415
416
|
("tools/CODE_MOWER_PACKAGE_CUSTOMIZATION.md", "docs/package-customization.md", "doc"),
|
|
416
417
|
("tools/CODE_MOWER_AUTHORING_INTELLIGENCE.md", "docs/authoring-intelligence.md", "doc"),
|
|
417
418
|
("tools/CODE_MOWER_BUILDER_EXPERIMENTS.md", "docs/builder-experiments.md", "doc"),
|
|
419
|
+
("docs/planning-work-orders.md", "docs/planning-work-orders.md", "doc"),
|
|
418
420
|
("tools/CODE_MOWER_CLOUD_BENCHMARKING.md", "docs/cloud-benchmarking.md", "doc"),
|
|
419
421
|
("tools/CODE_MOWER_REPO_STRATEGY.md", "docs/repo-strategy.md", "doc"),
|
|
420
422
|
("tools/CODE_MOWER_COMMERCIAL_BOUNDARY.md", "docs/commercial-boundary.md", "doc"),
|