code-mower 0.6.0b1__tar.gz → 0.6.0b2__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.6.0b1 → code_mower-0.6.0b2}/PKG-INFO +11 -5
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/README.md +10 -4
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/pyproject.toml +1 -1
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/__init__.py +1 -1
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud.py +117 -7
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/__init__.py +24 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/doctor.py +25 -15
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/operations.py +116 -32
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/setup.py +6 -0
- code_mower-0.6.0b2/src/code_mower/cloud_client/tokens.py +404 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/package_manifest.py +1 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower.egg-info/PKG-INFO +11 -5
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower.egg-info/SOURCES.txt +1 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/builder-provenance.yml.j2 +1 -1
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_cloud_client.py +360 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_release_hygiene.py +53 -53
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/LICENSE +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/MANIFEST.in +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/NOTICE +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/SUPPORT.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/requirements/requirements.txt +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/setup.cfg +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/antigravity_sdk_probe.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/audit_limits.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/builder_runs.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/checks.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/clear_stale.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/config.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/decisions.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/audit_limits.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_human_token.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/gate_health.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/grok_build_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/init.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/grok_build.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/lane_status.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/migration.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/observe.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/package.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/package_content.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/package_static.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/plan_context.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/prompts.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_registry.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/exit_codes.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/reviewer_spend.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/secrets.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lanes/README.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lanes/claude.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lanes/codex.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lanes/cursor.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lanes/generic.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/product-support/status_report.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/versioning.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/work_orders.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower/workflow_actionlint.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/calibration-corpus.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/context-packs.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/lanes/README.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/lanes/claude.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/lanes/codex.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/lanes/cursor.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/lanes/generic.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/aider.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/claude_audit.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/codex.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/devin.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/gitar.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/greptile.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers/qodo.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/providers.yml +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/code-mower-gate.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_antigravity_sdk_probe.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_audit_comment_posture.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_audit_limits.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_builder_experiment.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_builder_identity.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_builder_runs.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_checks.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_claude_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_clear_stale.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_codex_audit_env_preflight.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_codex_audit_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_decision_audit_integration.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_decisions.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_output.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_provider_local_audit_setup.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_registry.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_runtime.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_doctor_self_hosted_runner.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_gate_health.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_init_actionlint.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_init_build_loop.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_lane_status.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_observe.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_plan_context.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_prompts.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_fixture_contracts.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_local_cli.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_reviewer_metrics_core.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_reviewer_spend.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_trailer_comment_labeler.py +0 -0
- {code_mower-0.6.0b1 → code_mower-0.6.0b2}/tests/test_work_orders.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.0b2
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -117,7 +117,7 @@ observable.
|
|
|
117
117
|
| C. Builder experiment | You want to compare authoring loops before trusting them broadly. | Use a work order or experiment spec, run `code-mower builder-experiment run` around an explicit command, then review the source-free `authoringRun` artifact and normal audit evidence. | [Builder Experiments](docs/builder-experiments.md) |
|
|
118
118
|
|
|
119
119
|
The v0.6 beta announcement entry point is the tagged
|
|
120
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.6.0-beta.
|
|
120
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.6.0-beta.2/docs/try-in-10-minutes.md)
|
|
121
121
|
guide.
|
|
122
122
|
|
|
123
123
|
## What Calibration Does And Does Not Prove
|
|
@@ -147,7 +147,7 @@ Provider-contract baseline for the next release train:
|
|
|
147
147
|
|
|
148
148
|
For release verification,
|
|
149
149
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
150
|
-
the package-index procedure for `v0.6.0-beta.
|
|
150
|
+
the package-index procedure for `v0.6.0-beta.2` / `code-mower==0.6.0b2`. The
|
|
151
151
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
152
152
|
|
|
153
153
|
## Optional: Plan Before Coding
|
|
@@ -272,6 +272,12 @@ code-mower cloud setup \
|
|
|
272
272
|
--out ~/.config/code-mower/tokens/your-laptop.env
|
|
273
273
|
```
|
|
274
274
|
|
|
275
|
+
`cloud setup` stores a private `0600` token env file and records it as the
|
|
276
|
+
current local cloud profile. Future `cloud doctor`, `cloud upload`, `cloud
|
|
277
|
+
dogfood`, `cloud reviewer-runs`, and `cloud repo-sync` commands can load that
|
|
278
|
+
profile automatically; pass `--install-id` or `--token-file` when a machine has
|
|
279
|
+
multiple stored profiles.
|
|
280
|
+
|
|
275
281
|
Cloud sharing details, historical catch-up, and repo-sync commands live in
|
|
276
282
|
[docs/cloud-sharing.md](docs/cloud-sharing.md).
|
|
277
283
|
|
|
@@ -322,8 +328,8 @@ measurement work.
|
|
|
322
328
|
|
|
323
329
|
## Installation Status
|
|
324
330
|
|
|
325
|
-
The current public beta baseline is `v0.6.0-beta.
|
|
326
|
-
install spec `code-mower==0.6.
|
|
331
|
+
The current public beta baseline is `v0.6.0-beta.2`, with pinned package-index
|
|
332
|
+
install spec `code-mower==0.6.0b2`. Release evidence is recorded on the GitHub
|
|
327
333
|
release and in the first-user install rehearsal. The public repository is
|
|
328
334
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
329
335
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -102,7 +102,7 @@ observable.
|
|
|
102
102
|
| C. Builder experiment | You want to compare authoring loops before trusting them broadly. | Use a work order or experiment spec, run `code-mower builder-experiment run` around an explicit command, then review the source-free `authoringRun` artifact and normal audit evidence. | [Builder Experiments](docs/builder-experiments.md) |
|
|
103
103
|
|
|
104
104
|
The v0.6 beta announcement entry point is the tagged
|
|
105
|
-
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.6.0-beta.
|
|
105
|
+
[Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.6.0-beta.2/docs/try-in-10-minutes.md)
|
|
106
106
|
guide.
|
|
107
107
|
|
|
108
108
|
## What Calibration Does And Does Not Prove
|
|
@@ -132,7 +132,7 @@ Provider-contract baseline for the next release train:
|
|
|
132
132
|
|
|
133
133
|
For release verification,
|
|
134
134
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
135
|
-
the package-index procedure for `v0.6.0-beta.
|
|
135
|
+
the package-index procedure for `v0.6.0-beta.2` / `code-mower==0.6.0b2`. The
|
|
136
136
|
GitHub release records the workflow and rehearsal evidence for the exact tag.
|
|
137
137
|
|
|
138
138
|
## Optional: Plan Before Coding
|
|
@@ -257,6 +257,12 @@ code-mower cloud setup \
|
|
|
257
257
|
--out ~/.config/code-mower/tokens/your-laptop.env
|
|
258
258
|
```
|
|
259
259
|
|
|
260
|
+
`cloud setup` stores a private `0600` token env file and records it as the
|
|
261
|
+
current local cloud profile. Future `cloud doctor`, `cloud upload`, `cloud
|
|
262
|
+
dogfood`, `cloud reviewer-runs`, and `cloud repo-sync` commands can load that
|
|
263
|
+
profile automatically; pass `--install-id` or `--token-file` when a machine has
|
|
264
|
+
multiple stored profiles.
|
|
265
|
+
|
|
260
266
|
Cloud sharing details, historical catch-up, and repo-sync commands live in
|
|
261
267
|
[docs/cloud-sharing.md](docs/cloud-sharing.md).
|
|
262
268
|
|
|
@@ -307,8 +313,8 @@ measurement work.
|
|
|
307
313
|
|
|
308
314
|
## Installation Status
|
|
309
315
|
|
|
310
|
-
The current public beta baseline is `v0.6.0-beta.
|
|
311
|
-
install spec `code-mower==0.6.
|
|
316
|
+
The current public beta baseline is `v0.6.0-beta.2`, with pinned package-index
|
|
317
|
+
install spec `code-mower==0.6.0b2`. Release evidence is recorded on the GitHub
|
|
312
318
|
release and in the first-user install rehearsal. The public repository is
|
|
313
319
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
|
|
314
320
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
@@ -42,6 +42,9 @@ if __package__ in {None, ""}:
|
|
|
42
42
|
read_token_file as _read_token_file,
|
|
43
43
|
render_bundle_readme,
|
|
44
44
|
render_cloud_doctor_text,
|
|
45
|
+
require_upload_token,
|
|
46
|
+
resolve_cloud_endpoint,
|
|
47
|
+
resolve_cloud_token,
|
|
45
48
|
render_setup_env,
|
|
46
49
|
repo_slug_from_remote as _repo_slug_from_remote,
|
|
47
50
|
repo_sync_output_name as _repo_sync_output_name,
|
|
@@ -92,6 +95,9 @@ else: # pragma: no cover - exercised after package extraction.
|
|
|
92
95
|
read_token_file as _read_token_file,
|
|
93
96
|
render_bundle_readme,
|
|
94
97
|
render_cloud_doctor_text,
|
|
98
|
+
require_upload_token,
|
|
99
|
+
resolve_cloud_endpoint,
|
|
100
|
+
resolve_cloud_token,
|
|
95
101
|
render_setup_env,
|
|
96
102
|
repo_slug_from_remote as _repo_slug_from_remote,
|
|
97
103
|
repo_sync_output_name as _repo_sync_output_name,
|
|
@@ -137,8 +143,11 @@ __all__ = [
|
|
|
137
143
|
"build_cloud_bundle",
|
|
138
144
|
"build_upload_payload",
|
|
139
145
|
"post_upload_payload",
|
|
146
|
+
"require_upload_token",
|
|
140
147
|
"render_bundle_readme",
|
|
141
148
|
"render_setup_env",
|
|
149
|
+
"resolve_cloud_endpoint",
|
|
150
|
+
"resolve_cloud_token",
|
|
142
151
|
"run_cloud_doctor",
|
|
143
152
|
"run_cloud_setup",
|
|
144
153
|
"validate_metadata_payload",
|
|
@@ -290,6 +299,23 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
290
299
|
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
291
300
|
)
|
|
292
301
|
upload.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
302
|
+
upload.add_argument(
|
|
303
|
+
"--token-file",
|
|
304
|
+
type=Path,
|
|
305
|
+
default=None,
|
|
306
|
+
help="token env file or raw token file to use when token env is not set",
|
|
307
|
+
)
|
|
308
|
+
upload.add_argument(
|
|
309
|
+
"--token-dir",
|
|
310
|
+
type=Path,
|
|
311
|
+
default=None,
|
|
312
|
+
help="directory with Code Mower Cloud token profiles",
|
|
313
|
+
)
|
|
314
|
+
upload.add_argument(
|
|
315
|
+
"--install-id",
|
|
316
|
+
default="",
|
|
317
|
+
help="stored token profile name to use when token env is not set",
|
|
318
|
+
)
|
|
293
319
|
upload.add_argument("--include-reports", action="store_true")
|
|
294
320
|
upload.add_argument("--dry-run", action="store_true")
|
|
295
321
|
upload.add_argument(
|
|
@@ -312,6 +338,23 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
312
338
|
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
313
339
|
)
|
|
314
340
|
doctor.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
341
|
+
doctor.add_argument(
|
|
342
|
+
"--token-file",
|
|
343
|
+
type=Path,
|
|
344
|
+
default=None,
|
|
345
|
+
help="token env file or raw token file to check when token env is not set",
|
|
346
|
+
)
|
|
347
|
+
doctor.add_argument(
|
|
348
|
+
"--token-dir",
|
|
349
|
+
type=Path,
|
|
350
|
+
default=None,
|
|
351
|
+
help="directory with Code Mower Cloud token profiles",
|
|
352
|
+
)
|
|
353
|
+
doctor.add_argument(
|
|
354
|
+
"--install-id",
|
|
355
|
+
default="",
|
|
356
|
+
help="stored token profile name to check when token env is not set",
|
|
357
|
+
)
|
|
315
358
|
doctor.add_argument(
|
|
316
359
|
"--probe-service",
|
|
317
360
|
action="store_true",
|
|
@@ -354,6 +397,18 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
354
397
|
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
355
398
|
)
|
|
356
399
|
dogfood.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
400
|
+
dogfood.add_argument(
|
|
401
|
+
"--token-file",
|
|
402
|
+
type=Path,
|
|
403
|
+
default=None,
|
|
404
|
+
help="token env file or raw token file to use when token env is not set",
|
|
405
|
+
)
|
|
406
|
+
dogfood.add_argument(
|
|
407
|
+
"--token-dir",
|
|
408
|
+
type=Path,
|
|
409
|
+
default=None,
|
|
410
|
+
help="directory with Code Mower Cloud token profiles",
|
|
411
|
+
)
|
|
357
412
|
dogfood.add_argument("--include-reports", action="store_true")
|
|
358
413
|
dogfood.add_argument(
|
|
359
414
|
"--yes",
|
|
@@ -389,6 +444,18 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
389
444
|
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
390
445
|
)
|
|
391
446
|
catch_up.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
447
|
+
catch_up.add_argument(
|
|
448
|
+
"--token-file",
|
|
449
|
+
type=Path,
|
|
450
|
+
default=None,
|
|
451
|
+
help="token env file or raw token file to use when token env is not set",
|
|
452
|
+
)
|
|
453
|
+
catch_up.add_argument(
|
|
454
|
+
"--token-dir",
|
|
455
|
+
type=Path,
|
|
456
|
+
default=None,
|
|
457
|
+
help="directory with Code Mower Cloud token profiles",
|
|
458
|
+
)
|
|
392
459
|
catch_up.add_argument(
|
|
393
460
|
"--yes",
|
|
394
461
|
action="store_true",
|
|
@@ -451,6 +518,18 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
451
518
|
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
452
519
|
)
|
|
453
520
|
reviewer_runs.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
521
|
+
reviewer_runs.add_argument(
|
|
522
|
+
"--token-file",
|
|
523
|
+
type=Path,
|
|
524
|
+
default=None,
|
|
525
|
+
help="token env file or raw token file to use when token env is not set",
|
|
526
|
+
)
|
|
527
|
+
reviewer_runs.add_argument(
|
|
528
|
+
"--token-dir",
|
|
529
|
+
type=Path,
|
|
530
|
+
default=None,
|
|
531
|
+
help="directory with Code Mower Cloud token profiles",
|
|
532
|
+
)
|
|
454
533
|
reviewer_runs.add_argument(
|
|
455
534
|
"--yes",
|
|
456
535
|
action="store_true",
|
|
@@ -498,6 +577,18 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
498
577
|
default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
|
|
499
578
|
)
|
|
500
579
|
repo_sync.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
|
|
580
|
+
repo_sync.add_argument(
|
|
581
|
+
"--token-file",
|
|
582
|
+
type=Path,
|
|
583
|
+
default=None,
|
|
584
|
+
help="token env file or raw token file to use when token env is not set",
|
|
585
|
+
)
|
|
586
|
+
repo_sync.add_argument(
|
|
587
|
+
"--token-dir",
|
|
588
|
+
type=Path,
|
|
589
|
+
default=None,
|
|
590
|
+
help="directory with Code Mower Cloud token profiles",
|
|
591
|
+
)
|
|
501
592
|
repo_sync.add_argument("--include-reports", action="store_true")
|
|
502
593
|
repo_sync.add_argument(
|
|
503
594
|
"--yes",
|
|
@@ -535,6 +626,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
535
626
|
print(f"Token: {result['token_prefix']}")
|
|
536
627
|
if result["status"] == "written":
|
|
537
628
|
print(f"Load it with: {result['shell']}")
|
|
629
|
+
print(f"Current profile: {result['current_profile']}")
|
|
538
630
|
return 0
|
|
539
631
|
if args.command == "export":
|
|
540
632
|
events = [
|
|
@@ -569,11 +661,18 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
569
661
|
bundle_dir=args.bundle_dir,
|
|
570
662
|
include_reports=args.include_reports,
|
|
571
663
|
)
|
|
664
|
+
token_resolution = resolve_cloud_token(
|
|
665
|
+
token_env=args.token_env,
|
|
666
|
+
token_file=args.token_file,
|
|
667
|
+
token_dir=args.token_dir,
|
|
668
|
+
install_id=args.install_id,
|
|
669
|
+
)
|
|
670
|
+
resolved_endpoint = resolve_cloud_endpoint(args.endpoint, token_resolution)
|
|
572
671
|
dry_run = args.dry_run or not args.yes
|
|
573
672
|
if dry_run:
|
|
574
673
|
preview = {
|
|
575
674
|
"mode": "cloud-upload-dry-run",
|
|
576
|
-
"endpoint":
|
|
675
|
+
"endpoint": resolved_endpoint,
|
|
577
676
|
"would_upload": False,
|
|
578
677
|
"requires_yes": not args.yes,
|
|
579
678
|
"upload_mode": payload["upload_mode"],
|
|
@@ -592,14 +691,14 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
592
691
|
print(f"Events: {preview['event_count']}")
|
|
593
692
|
print("Network: skipped (pass --yes to upload)")
|
|
594
693
|
return 0
|
|
595
|
-
token =
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
694
|
+
token = require_upload_token(
|
|
695
|
+
endpoint=resolved_endpoint,
|
|
696
|
+
resolution=token_resolution,
|
|
697
|
+
local_endpoint=_is_local_http_endpoint(resolved_endpoint),
|
|
698
|
+
)
|
|
600
699
|
result = post_upload_payload(
|
|
601
700
|
payload=payload,
|
|
602
|
-
endpoint=
|
|
701
|
+
endpoint=resolved_endpoint,
|
|
603
702
|
token=token,
|
|
604
703
|
timeout=args.timeout,
|
|
605
704
|
)
|
|
@@ -615,6 +714,9 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
615
714
|
bundle_dir=args.bundle_dir,
|
|
616
715
|
endpoint=args.endpoint,
|
|
617
716
|
token_env=args.token_env,
|
|
717
|
+
token_file=args.token_file,
|
|
718
|
+
token_dir=args.token_dir,
|
|
719
|
+
install_id=args.install_id,
|
|
618
720
|
probe_service=args.probe_service,
|
|
619
721
|
timeout=args.timeout,
|
|
620
722
|
)
|
|
@@ -636,6 +738,8 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
636
738
|
source=args.source,
|
|
637
739
|
endpoint=args.endpoint,
|
|
638
740
|
token_env=args.token_env,
|
|
741
|
+
token_file=args.token_file,
|
|
742
|
+
token_dir=args.token_dir,
|
|
639
743
|
include_reports=args.include_reports,
|
|
640
744
|
yes=args.yes,
|
|
641
745
|
timeout=args.timeout,
|
|
@@ -664,6 +768,8 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
664
768
|
limit=args.limit,
|
|
665
769
|
endpoint=args.endpoint,
|
|
666
770
|
token_env=args.token_env,
|
|
771
|
+
token_file=args.token_file,
|
|
772
|
+
token_dir=args.token_dir,
|
|
667
773
|
yes=args.yes,
|
|
668
774
|
timeout=args.timeout,
|
|
669
775
|
include_git_ref=args.include_git_ref,
|
|
@@ -700,6 +806,8 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
700
806
|
offset=args.offset,
|
|
701
807
|
endpoint=args.endpoint,
|
|
702
808
|
token_env=args.token_env,
|
|
809
|
+
token_file=args.token_file,
|
|
810
|
+
token_dir=args.token_dir,
|
|
703
811
|
yes=args.yes,
|
|
704
812
|
timeout=args.timeout,
|
|
705
813
|
include_git_ref=args.include_git_ref,
|
|
@@ -733,6 +841,8 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
733
841
|
limit=args.limit,
|
|
734
842
|
endpoint=args.endpoint,
|
|
735
843
|
token_env=args.token_env,
|
|
844
|
+
token_file=args.token_file,
|
|
845
|
+
token_dir=args.token_dir,
|
|
736
846
|
include_reports=args.include_reports,
|
|
737
847
|
include_git_ref=args.include_git_ref,
|
|
738
848
|
yes=args.yes,
|
|
@@ -93,6 +93,19 @@ from .setup import (
|
|
|
93
93
|
token_prefix,
|
|
94
94
|
write_setup_env_file,
|
|
95
95
|
)
|
|
96
|
+
from .tokens import (
|
|
97
|
+
CURRENT_PROFILE_FILENAME,
|
|
98
|
+
DEFAULT_TOKEN_DIR,
|
|
99
|
+
CloudTokenResolution,
|
|
100
|
+
default_token_dir,
|
|
101
|
+
display_token_path,
|
|
102
|
+
read_token_profile,
|
|
103
|
+
require_upload_token,
|
|
104
|
+
resolve_cloud_endpoint,
|
|
105
|
+
resolve_cloud_identity,
|
|
106
|
+
resolve_cloud_token,
|
|
107
|
+
write_current_token_profile,
|
|
108
|
+
)
|
|
96
109
|
from .upload import (
|
|
97
110
|
UPLOAD_SCHEMA,
|
|
98
111
|
build_upload_payload,
|
|
@@ -113,10 +126,13 @@ __all__ = [
|
|
|
113
126
|
"SAFE_REPORT_KINDS",
|
|
114
127
|
"UPLOAD_SCHEMA",
|
|
115
128
|
"CloudBundleError",
|
|
129
|
+
"CloudTokenResolution",
|
|
130
|
+
"CURRENT_PROFILE_FILENAME",
|
|
116
131
|
"DEFAULT_INSTALL_ID_ENV",
|
|
117
132
|
"DEFAULT_SETUP_INSTALL_ID",
|
|
118
133
|
"DEFAULT_TEAM_ID_ENV",
|
|
119
134
|
"DEFAULT_TOKEN_ENV",
|
|
135
|
+
"DEFAULT_TOKEN_DIR",
|
|
120
136
|
"DEFAULT_UPLOAD_ENDPOINT",
|
|
121
137
|
"DogfoodPlan",
|
|
122
138
|
"EVENT_SCHEMA",
|
|
@@ -132,7 +148,9 @@ __all__ = [
|
|
|
132
148
|
"catch_up_upload",
|
|
133
149
|
"dashboard_url_for_endpoint",
|
|
134
150
|
"default_setup_path",
|
|
151
|
+
"default_token_dir",
|
|
135
152
|
"detect_repo_slug",
|
|
153
|
+
"display_token_path",
|
|
136
154
|
"default_dogfood_reports",
|
|
137
155
|
"dogfood_upload",
|
|
138
156
|
"event_id_from_github_run",
|
|
@@ -150,6 +168,7 @@ __all__ = [
|
|
|
150
168
|
"post_upload_payload",
|
|
151
169
|
"probe_cloud_service",
|
|
152
170
|
"read_token_file",
|
|
171
|
+
"read_token_profile",
|
|
153
172
|
"render_bundle_readme",
|
|
154
173
|
"render_cloud_doctor_text",
|
|
155
174
|
"render_setup_env",
|
|
@@ -157,6 +176,10 @@ __all__ = [
|
|
|
157
176
|
"repo_sync_output_name",
|
|
158
177
|
"repo_sync_upload",
|
|
159
178
|
"report_path_from_manifest",
|
|
179
|
+
"require_upload_token",
|
|
180
|
+
"resolve_cloud_endpoint",
|
|
181
|
+
"resolve_cloud_identity",
|
|
182
|
+
"resolve_cloud_token",
|
|
160
183
|
"resolve_setup_token",
|
|
161
184
|
"reviewer_runs_upload",
|
|
162
185
|
"run_cloud_doctor",
|
|
@@ -176,4 +199,5 @@ __all__ = [
|
|
|
176
199
|
"validate_metadata_payload",
|
|
177
200
|
"validate_upload_endpoint",
|
|
178
201
|
"write_setup_env_file",
|
|
202
|
+
"write_current_token_profile",
|
|
179
203
|
]
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import os
|
|
6
5
|
import shlex
|
|
7
6
|
from pathlib import Path
|
|
8
7
|
from typing import Any
|
|
@@ -18,6 +17,10 @@ from .endpoints import (
|
|
|
18
17
|
validate_upload_endpoint,
|
|
19
18
|
)
|
|
20
19
|
from .errors import CloudBundleError
|
|
20
|
+
from .tokens import (
|
|
21
|
+
resolve_cloud_endpoint,
|
|
22
|
+
resolve_cloud_token,
|
|
23
|
+
)
|
|
21
24
|
from .upload import build_upload_payload
|
|
22
25
|
|
|
23
26
|
|
|
@@ -84,12 +87,22 @@ def run_cloud_doctor(
|
|
|
84
87
|
bundle_dir: Path,
|
|
85
88
|
endpoint: str,
|
|
86
89
|
token_env: str,
|
|
90
|
+
token_file: Path | None = None,
|
|
91
|
+
token_dir: Path | None = None,
|
|
92
|
+
install_id: str = "",
|
|
87
93
|
require_token: bool = True,
|
|
88
94
|
probe_service: bool = False,
|
|
89
95
|
timeout: float = 5.0,
|
|
90
96
|
) -> dict[str, Any]:
|
|
91
97
|
checks: list[dict[str, Any]] = []
|
|
92
98
|
endpoint_is_valid = False
|
|
99
|
+
token_resolution = resolve_cloud_token(
|
|
100
|
+
token_env=token_env,
|
|
101
|
+
token_file=token_file,
|
|
102
|
+
token_dir=token_dir,
|
|
103
|
+
install_id=install_id,
|
|
104
|
+
)
|
|
105
|
+
endpoint = resolve_cloud_endpoint(endpoint, token_resolution)
|
|
93
106
|
|
|
94
107
|
try:
|
|
95
108
|
_validate_upload_endpoint(endpoint)
|
|
@@ -122,13 +135,13 @@ def run_cloud_doctor(
|
|
|
122
135
|
}
|
|
123
136
|
)
|
|
124
137
|
|
|
125
|
-
|
|
126
|
-
if token_present:
|
|
138
|
+
if token_resolution.has_token:
|
|
127
139
|
checks.append(
|
|
128
140
|
{
|
|
129
141
|
"name": "token",
|
|
130
142
|
"status": "pass",
|
|
131
|
-
"message":
|
|
143
|
+
"message": token_resolution.message,
|
|
144
|
+
"detail": token_resolution.safe_detail(),
|
|
132
145
|
}
|
|
133
146
|
)
|
|
134
147
|
elif is_local_http_endpoint(endpoint):
|
|
@@ -137,8 +150,9 @@ def run_cloud_doctor(
|
|
|
137
150
|
"name": "token",
|
|
138
151
|
"status": "warn",
|
|
139
152
|
"message": (
|
|
140
|
-
f"{
|
|
153
|
+
f"{token_resolution.message}; local configless ingest may still work"
|
|
141
154
|
),
|
|
155
|
+
"detail": token_resolution.safe_detail(),
|
|
142
156
|
}
|
|
143
157
|
)
|
|
144
158
|
elif not require_token:
|
|
@@ -146,11 +160,9 @@ def run_cloud_doctor(
|
|
|
146
160
|
{
|
|
147
161
|
"name": "token",
|
|
148
162
|
"status": "warn",
|
|
149
|
-
"message": f"{
|
|
150
|
-
"
|
|
151
|
-
|
|
152
|
-
f"{token_env} before using --yes."
|
|
153
|
-
),
|
|
163
|
+
"message": f"{token_resolution.message}; upload will remain disabled",
|
|
164
|
+
"detail": token_resolution.safe_detail(),
|
|
165
|
+
"remediation": token_resolution.remediation,
|
|
154
166
|
}
|
|
155
167
|
)
|
|
156
168
|
else:
|
|
@@ -158,11 +170,9 @@ def run_cloud_doctor(
|
|
|
158
170
|
{
|
|
159
171
|
"name": "token",
|
|
160
172
|
"status": "fail",
|
|
161
|
-
"message":
|
|
162
|
-
"
|
|
163
|
-
|
|
164
|
-
"running cloud upload --yes."
|
|
165
|
-
),
|
|
173
|
+
"message": token_resolution.message,
|
|
174
|
+
"detail": token_resolution.safe_detail(),
|
|
175
|
+
"remediation": token_resolution.remediation,
|
|
166
176
|
}
|
|
167
177
|
)
|
|
168
178
|
|