code-mower 1.5.2__tar.gz → 1.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_mower-1.5.2 → code_mower-1.6.0}/PKG-INFO +14 -14
- {code_mower-1.5.2 → code_mower-1.6.0}/README.md +13 -13
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/README.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/board-data-contract.md +21 -5
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/board-service-lifecycle.md +86 -35
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-benchmarking.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-data-contract.md +12 -0
- code_mower-1.6.0/docs/control-surface-telemetry.md +92 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/current-state-and-roadmap.md +55 -44
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/early-adopter-invite-runbook.md +2 -2
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/first-user-install-rehearsal.md +12 -12
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/graphify-setup.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/install.md +27 -24
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/jira-cloud-setup.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/launch-command-surface.md +4 -3
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/orchestrator-prompt-pack.md +10 -9
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/provider-matrix.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/public-release-checklist.md +14 -9
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/pypi-release.md +25 -21
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/quickstart.md +16 -15
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/release-history.md +3 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/sessions.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/slack-setup.md +9 -8
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/troubleshooting.md +20 -11
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/try-in-10-minutes.md +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/upgrade-existing-repo.md +8 -8
- code_mower-1.6.0/docs/v160-qualification.md +59 -0
- code_mower-1.6.0/docs/v160-release-notes.md +106 -0
- code_mower-1.6.0/docs/v160-release-runbook.md +160 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/pyproject.toml +4 -1
- code_mower-1.6.0/release.yml +46 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/__init__.py +1 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_labeler_lib.py +185 -22
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board.py +131 -12
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_service.py +624 -44
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_lineage.py +40 -4
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_lineage_producer.py +25 -25
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/bundle.py +1 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/endpoints.py +5 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/events.py +7 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/operations.py +36 -9
- code_mower-1.6.0/src/code_mower/control_surface_session_summary.accepted.json +1069 -0
- code_mower-1.6.0/src/code_mower/control_surface_session_summary.expectations.json +46 -0
- code_mower-1.6.0/src/code_mower/control_surface_session_summary.fixture-manifest.json +32 -0
- code_mower-1.6.0/src/code_mower/control_surface_session_summary.rejected.json +985 -0
- code_mower-1.6.0/src/code_mower/control_surface_session_summary.schema.json +989 -0
- code_mower-1.6.0/src/code_mower/control_surface_summary.py +588 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/controller.py +12 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor.py +50 -6
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/__init__.py +14 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/adoption.py +95 -21
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/campaign_auth.py +24 -8
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/models.py +13 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/output.py +10 -3
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/runner.py +8 -0
- code_mower-1.6.0/src/code_mower/doctor_checks/share_safe.py +208 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/gate_health.py +38 -10
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_status.py +352 -21
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_manifest.py +39 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/github_pr.py +34 -12
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_readiness.py +39 -12
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/saas_reviewer_labeler.py +19 -19
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +48 -2
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/PKG-INFO +14 -14
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/SOURCES.txt +14 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board.py +164 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_service.py +771 -34
- code_mower-1.6.0/tests/test_comment_history.py +104 -0
- code_mower-1.6.0/tests/test_control_surface_summary.py +415 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_controller.py +32 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_cli_audit_pr.py +10 -4
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_review.py +4 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_campaign_auth.py +15 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_campaign_readiness.py +180 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_output.py +48 -3
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_registry.py +4 -0
- code_mower-1.6.0/tests/test_doctor_share_safe.py +271 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_gate_health.py +61 -0
- code_mower-1.6.0/tests/test_lane_status.py +2192 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_labels.py +5 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_projection.py +11 -2
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_producer_artifacts.py +4 -2
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_producer_publication.py +45 -7
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_minimal_lineage_transport.py +15 -1
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_pr_outcome_coverage.py +120 -9
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_github_pr.py +35 -9
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_contract.py +71 -43
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_hygiene.py +30 -26
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_v142.py +10 -10
- code_mower-1.5.2/release.yml +0 -35
- code_mower-1.5.2/tests/test_lane_status.py +0 -866
- {code_mower-1.5.2 → code_mower-1.6.0}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/LICENSE +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/MANIFEST.in +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/NOTICE +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/SUPPORT.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/acp-bridge-spike.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/architecture.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/README.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha4.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha5.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha6.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha8.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha9.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/authoring-intelligence.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/board-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/build-loop-in-30-minutes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/build-loop.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/builder-experiments.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/builders-grok-cursor.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/calibration-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/calibration-pilot.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-contributor-runbook.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-sharing.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/code-structure-roadmap.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/commercial-boundary.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-connections.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-delivery.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-graph-lifecycle.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-graph-queries.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-packet-schema.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-provider-contract.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-setup.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-peer-support-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-review-parity.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-setup-prompt.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-work-orders.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/doctrine-lens-proof-v2.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/documentation-lifecycle.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/early-adopter-v05.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/first-run-transcript.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/first-user-demo-transcript.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/friendly-user-rollout-v05.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/github-setup.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/graphify-evaluation.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/jira-adoption-rehearsal.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lane-promotion-policy.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/README.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/claude.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/codex.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/cursor.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/devin.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/lens-calibration-report.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/local-audit-runner.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/mirror-removal-runbook.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/operational-evidence.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/oss-v1-checklist.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/package-customization.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/participant-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/planning-work-orders.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/post-v08-effectiveness-assessment.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/prd-addendum-v05-beta.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/privacy-threat-model.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/provider-calibration-scorecard.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/provider-diversity-provenance.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/release-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/repo-strategy.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/reviewer-value-report.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/sample-doctor-output.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/self-hosted-mac-runner.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/slack-contract.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/slack-ingress.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/supervised-pilot-contract.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/supervisor-contract.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/tracker-data-contract.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v06-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v06-truth-baseline.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v08-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v09-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v10-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v101-effectiveness-assessment.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v101-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1010-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1011-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1012-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1013-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1014-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1015-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v102-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v103-installation-documentation-audit.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v103-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v104-installation-documentation-audit.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v104-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v105-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v106-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v107-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v108-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v109-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v11-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v111-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v112-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v12-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v121-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v122-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v130-context-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v130-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v131-guided-context-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v131-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v140-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v140-release-runbook.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v141-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v141-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v142-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v142-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v150-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v150-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v150-release-runbook.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v151-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v151-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v151-release-runbook.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v152-qualification.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v152-release-notes.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/docs/v152-release-runbook.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/requirements/requirements.txt +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/setup.cfg +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/antigravity_sdk_probe.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_limits.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_progress.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_publication.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_local_observation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_observation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_observation.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_remote_observation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_store.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/bootstrap.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/branch_policy.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_runs.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/results.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/campaign_adapters.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/campaign_discovery.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/checks.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/clear_stale.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/adoption_runs.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/export.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/finding_outcomes.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/productivity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/productivity_windows.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/tokens.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/work_types.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/config.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_audit.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_command.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_connections.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_delivery.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_command.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_connection.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_lifecycle.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_query.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_guided.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_packets.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_prepare.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_readiness.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_review.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_session.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_store.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/coworker_mcp.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/coworker_retrieval.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/decisions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_api.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_readiness.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_review.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_sessions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_work_orders.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/docs_lifecycle.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/audit_limits.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/devin.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_human_token.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/jira.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/file_locks.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/git_identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/github_builder_evidence.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/grok_build_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/init.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/jira_cloud.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/jira_mutations.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/jira_pr_sync.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/devin_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/grok_build.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/muse_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_delivery.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_handoff.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_runtime.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_cli_commands.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_install.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/muse_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/next_steps.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/operational_evidence.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_content.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_paths.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_rendering.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_static.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/participants.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/plan_context.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/productivity_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/prompts.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_capabilities.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_capabilities.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_credentials.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_registry.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/exit_codes.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/lineage.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/providers/provenance.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_campaigns.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_metadata.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_qualify.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/remote_session.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/remote_session.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/remote_session_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/review_authority.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/reviewer_spend.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/role_eligibility.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/role_eligibility.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/secrets.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/session.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/session_current.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/session_lease.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_contract.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_ingress.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_readiness.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_setup.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_checkpoint.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_codex.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract.fixtures.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract_v2.fixtures.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract_v2.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract_v2.schema.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/code-mower.example.yml +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/cursor/BUGBOT.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/README.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/claude.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/codex.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/cursor.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/devin.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/generic.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/lineage-producer.sh +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/status_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/providers.yml +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/slack/app-manifest.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/slack/hosted-app-manifest.json +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/builder-lineage-producer.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/local-audit-publication.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/local-audit-request.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/tracker_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/tracker_queue.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/versioning.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/work_orders.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/workflow_actionlint.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/yaml_subset.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_diagnostics.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_polish_1015.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_polish_955.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_result_semantics.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_run_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_antigravity_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_antigravity_sdk_probe.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_comment_posture.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_labeler_identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_limits.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_publication.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_lease.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_local_observation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_observation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_qualification.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_remote_observation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_branch_policy.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_builder_experiment.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_builder_identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_builder_runs.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_calibration_truth.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_adapters.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_discovery.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_gh_auth_and_issue_binding_817.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_retry_evidence_711.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_checks.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_claude_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_clear_stale.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_client.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_manifest.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_reports.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_codex_audit_env_preflight.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_codex_audit_pr.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_codex_campaign_auth_modes.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_audit.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_command.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_connections.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_delivery.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph_connection.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph_lifecycle.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph_query.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_guided.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_packets.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_prepare.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_readiness.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_review.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_session.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_coworker_mcp.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_coworker_retrieval.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_decision_audit_integration.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_decisions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_api.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_builder_lane.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_capabilities.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_provider_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_sessions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_setup_readiness.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_work_orders.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_docs_lifecycle.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_privacy.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_local_audit_setup.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_runtime.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_self_hosted_runner.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_supervised_pilot.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_documentation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_documented_commands.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_file_locks.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_fork_pr_guard.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_gate_automerge.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_github_builder_evidence.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_hosted_dispatch_profile.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_init_actionlint.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_init_build_loop.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_init_builders_cold_start.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_adoption.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_cloud.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_mutations.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_pr_sync.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lane_delivery_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lane_handoff.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lane_writer_identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_activation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_admission.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_creation.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_producer_state.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_migration_rehearsal.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_migration_setup_drift.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_minimal_lineage_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_minimal_lineage_packaging.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_next_steps.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_operational_evidence.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_package_install_failure_taxonomy.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_participant_sessions.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_plan_context.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_pr_outcome_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_productivity_metrics_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_productivity_report.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_productivity_windows.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_prompts.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_credentials.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_fixture_contracts.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_local_cli.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_git.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_process.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_campaigns.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_identity.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_qualify.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_v141.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_remote_observer_doctor_1053.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_remote_qualification_failure_reason_819.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_remote_session.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_reviewer_finding_outcome_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_reviewer_metrics_core.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_reviewer_spend.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_role_eligibility.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_safe_init_1054.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_session_current.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_session_lease.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_slack_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_slack_ingress.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_slack_setup.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_supervised_pilot_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_supervisor.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_supervisor_v2.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_tracker_config.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_tracker_contract.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_tracker_queue.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_trailer_comment_labeler.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_work_orders.py +0 -0
- {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_work_type_contract.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.0
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/codemower-ai/code-mower
|
|
@@ -46,13 +46,13 @@ It is not a drop-in unattended merge gate. Humans still own credentials,
|
|
|
46
46
|
repository policy, reviewer promotion, and exceptional decisions.
|
|
47
47
|
|
|
48
48
|
<!-- code-mower:release-facts:start -->
|
|
49
|
-
This source defines Code Mower `v1.
|
|
50
|
-
`code-mower==1.
|
|
49
|
+
This source defines Code Mower `v1.6.0`, with package spec
|
|
50
|
+
`code-mower==1.6.0`. Confirm the release tag on GitHub Releases and the package
|
|
51
51
|
version on the selected index before using an index install command; source version
|
|
52
52
|
and publication state are separate facts.
|
|
53
53
|
Python 3.12 or newer is required.
|
|
54
|
-
See the [release notes](https://github.com/codemower-ai/code-mower/blob/main/docs/
|
|
55
|
-
and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/
|
|
54
|
+
See the [release notes](https://github.com/codemower-ai/code-mower/blob/main/docs/v160-release-notes.md)
|
|
55
|
+
and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/v160-qualification.md).
|
|
56
56
|
<!-- code-mower:release-facts:end -->
|
|
57
57
|
Historical v1.4.x artifacts and qualification records remain unchanged.
|
|
58
58
|
The v1.4.2 release did not claim the bounded hosted Devin canary tracked by
|
|
@@ -60,9 +60,9 @@ The v1.4.2 release did not claim the bounded hosted Devin canary tracked by
|
|
|
60
60
|
not claimed by its immutable qualification record.
|
|
61
61
|
|
|
62
62
|
Documentation on `main` follows the source on `main`. For an installed release,
|
|
63
|
-
read its immutable versioned guide,
|
|
64
|
-
[`v1.
|
|
65
|
-
|
|
63
|
+
read its immutable versioned guide. After v1.6.0 publication, use the
|
|
64
|
+
[`v1.6.0` guide](https://github.com/codemower-ai/code-mower/blob/v1.6.0/docs/try-in-10-minutes.md).
|
|
65
|
+
Confirm the tag and package exist before using pinned install commands.
|
|
66
66
|
|
|
67
67
|
## What Code Mower Adds
|
|
68
68
|
|
|
@@ -138,7 +138,7 @@ ID with `session lease renew --session-id SESSION_ID` or `session lease release
|
|
|
138
138
|
--dry-run` or `--no-lease` for read-only work.
|
|
139
139
|
|
|
140
140
|
Codex, Claude Code, and Cursor are qualified for the shared session, telemetry,
|
|
141
|
-
lease, and Jira-authority contract in the current v1.
|
|
141
|
+
lease, and Jira-authority contract in the current v1.6.0 source line. Devin, Grok
|
|
142
142
|
Bot, Antigravity,
|
|
143
143
|
Muse, and custom hosts are recognized for briefs and provenance, while their
|
|
144
144
|
execution remains an explicit handoff or provider-specific transport. See
|
|
@@ -266,7 +266,7 @@ and the [Cloud Data Contract](https://github.com/codemower-ai/code-mower/blob/ma
|
|
|
266
266
|
|
|
267
267
|
## Optional Hosted Slack
|
|
268
268
|
|
|
269
|
-
v1.
|
|
269
|
+
v1.6.0 retains the basic Slack control surface introduced in v1.5.0 for one
|
|
270
270
|
private workspace and one authorized private, unshared channel. A Code Mower
|
|
271
271
|
team administrator opens
|
|
272
272
|
**Setup → Manage Slack integration** in the hosted dashboard and completes OAuth
|
|
@@ -295,7 +295,7 @@ for both workflows, supported behavior, and the trust boundary.
|
|
|
295
295
|
|
|
296
296
|
## Current Capabilities And Limits
|
|
297
297
|
|
|
298
|
-
| Area | v1.
|
|
298
|
+
| Area | v1.6.0 posture |
|
|
299
299
|
| --- | --- |
|
|
300
300
|
| Default builders and reviewers | Claude Code + Codex |
|
|
301
301
|
| Session hosts | Codex, Claude Code, and Cursor qualified; other identities recognized but require explicit handoff/provider transport |
|
|
@@ -305,11 +305,11 @@ for both workflows, supported behavior, and the trust boundary.
|
|
|
305
305
|
| Forge and merge gate | GitHub |
|
|
306
306
|
| Cloud | Optional metadata/report upload; no upload by default |
|
|
307
307
|
| Graphify | Optional bounded local repository-graph provider behind the packet contract; no default dependency and no network access for the provider |
|
|
308
|
-
| Slack | Optional hosted OAuth and `/codemower` control surface for one private workspace/channel; exact bindings, qualified supervisor, and numeric caps gate work |
|
|
308
|
+
| Slack | Optional hosted OAuth and `/codemower` control surface for one private workspace/channel; exact bindings, qualified supervisor, and numeric caps gate work; metadata-only lifecycle summaries require exact hosted capability acceptance |
|
|
309
309
|
|
|
310
310
|
GitLab, Bitbucket, broad unattended rollout, uncalibrated merge gates, Devin
|
|
311
311
|
peer-orchestrator/reviewer parity, a hosted work-order CLI, a required Graphify
|
|
312
|
-
dependency, Slack
|
|
312
|
+
dependency, Slack-to-Board links, and rich Slack UX are outside v1.6.0. The current priorities
|
|
313
313
|
and boundaries are recorded in
|
|
314
314
|
[Current State And Roadmap](https://github.com/codemower-ai/code-mower/blob/main/docs/current-state-and-roadmap.md).
|
|
315
315
|
|
|
@@ -317,7 +317,7 @@ and boundaries are recorded in
|
|
|
317
317
|
|
|
318
318
|
Graphify's optional bounded provider foundation landed in v1.4.0; its complete
|
|
319
319
|
qualified integration, scorecard and query behavior shipped in v1.4.1 and
|
|
320
|
-
remain available in v1.
|
|
320
|
+
remain available in v1.6.0. It is separately installed into an operator-owned
|
|
321
321
|
environment, explicitly activated, and outside the base dependency set: a
|
|
322
322
|
default Claude + Codex install adds no Graphify dependency, no indexer, no
|
|
323
323
|
background service, and no watcher.
|
|
@@ -10,13 +10,13 @@ It is not a drop-in unattended merge gate. Humans still own credentials,
|
|
|
10
10
|
repository policy, reviewer promotion, and exceptional decisions.
|
|
11
11
|
|
|
12
12
|
<!-- code-mower:release-facts:start -->
|
|
13
|
-
This source defines Code Mower `v1.
|
|
14
|
-
`code-mower==1.
|
|
13
|
+
This source defines Code Mower `v1.6.0`, with package spec
|
|
14
|
+
`code-mower==1.6.0`. Confirm the release tag on GitHub Releases and the package
|
|
15
15
|
version on the selected index before using an index install command; source version
|
|
16
16
|
and publication state are separate facts.
|
|
17
17
|
Python 3.12 or newer is required.
|
|
18
|
-
See the [release notes](https://github.com/codemower-ai/code-mower/blob/main/docs/
|
|
19
|
-
and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/
|
|
18
|
+
See the [release notes](https://github.com/codemower-ai/code-mower/blob/main/docs/v160-release-notes.md)
|
|
19
|
+
and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/v160-qualification.md).
|
|
20
20
|
<!-- code-mower:release-facts:end -->
|
|
21
21
|
Historical v1.4.x artifacts and qualification records remain unchanged.
|
|
22
22
|
The v1.4.2 release did not claim the bounded hosted Devin canary tracked by
|
|
@@ -24,9 +24,9 @@ The v1.4.2 release did not claim the bounded hosted Devin canary tracked by
|
|
|
24
24
|
not claimed by its immutable qualification record.
|
|
25
25
|
|
|
26
26
|
Documentation on `main` follows the source on `main`. For an installed release,
|
|
27
|
-
read its immutable versioned guide,
|
|
28
|
-
[`v1.
|
|
29
|
-
|
|
27
|
+
read its immutable versioned guide. After v1.6.0 publication, use the
|
|
28
|
+
[`v1.6.0` guide](https://github.com/codemower-ai/code-mower/blob/v1.6.0/docs/try-in-10-minutes.md).
|
|
29
|
+
Confirm the tag and package exist before using pinned install commands.
|
|
30
30
|
|
|
31
31
|
## What Code Mower Adds
|
|
32
32
|
|
|
@@ -102,7 +102,7 @@ ID with `session lease renew --session-id SESSION_ID` or `session lease release
|
|
|
102
102
|
--dry-run` or `--no-lease` for read-only work.
|
|
103
103
|
|
|
104
104
|
Codex, Claude Code, and Cursor are qualified for the shared session, telemetry,
|
|
105
|
-
lease, and Jira-authority contract in the current v1.
|
|
105
|
+
lease, and Jira-authority contract in the current v1.6.0 source line. Devin, Grok
|
|
106
106
|
Bot, Antigravity,
|
|
107
107
|
Muse, and custom hosts are recognized for briefs and provenance, while their
|
|
108
108
|
execution remains an explicit handoff or provider-specific transport. See
|
|
@@ -230,7 +230,7 @@ and the [Cloud Data Contract](https://github.com/codemower-ai/code-mower/blob/ma
|
|
|
230
230
|
|
|
231
231
|
## Optional Hosted Slack
|
|
232
232
|
|
|
233
|
-
v1.
|
|
233
|
+
v1.6.0 retains the basic Slack control surface introduced in v1.5.0 for one
|
|
234
234
|
private workspace and one authorized private, unshared channel. A Code Mower
|
|
235
235
|
team administrator opens
|
|
236
236
|
**Setup → Manage Slack integration** in the hosted dashboard and completes OAuth
|
|
@@ -259,7 +259,7 @@ for both workflows, supported behavior, and the trust boundary.
|
|
|
259
259
|
|
|
260
260
|
## Current Capabilities And Limits
|
|
261
261
|
|
|
262
|
-
| Area | v1.
|
|
262
|
+
| Area | v1.6.0 posture |
|
|
263
263
|
| --- | --- |
|
|
264
264
|
| Default builders and reviewers | Claude Code + Codex |
|
|
265
265
|
| Session hosts | Codex, Claude Code, and Cursor qualified; other identities recognized but require explicit handoff/provider transport |
|
|
@@ -269,11 +269,11 @@ for both workflows, supported behavior, and the trust boundary.
|
|
|
269
269
|
| Forge and merge gate | GitHub |
|
|
270
270
|
| Cloud | Optional metadata/report upload; no upload by default |
|
|
271
271
|
| Graphify | Optional bounded local repository-graph provider behind the packet contract; no default dependency and no network access for the provider |
|
|
272
|
-
| Slack | Optional hosted OAuth and `/codemower` control surface for one private workspace/channel; exact bindings, qualified supervisor, and numeric caps gate work |
|
|
272
|
+
| Slack | Optional hosted OAuth and `/codemower` control surface for one private workspace/channel; exact bindings, qualified supervisor, and numeric caps gate work; metadata-only lifecycle summaries require exact hosted capability acceptance |
|
|
273
273
|
|
|
274
274
|
GitLab, Bitbucket, broad unattended rollout, uncalibrated merge gates, Devin
|
|
275
275
|
peer-orchestrator/reviewer parity, a hosted work-order CLI, a required Graphify
|
|
276
|
-
dependency, Slack
|
|
276
|
+
dependency, Slack-to-Board links, and rich Slack UX are outside v1.6.0. The current priorities
|
|
277
277
|
and boundaries are recorded in
|
|
278
278
|
[Current State And Roadmap](https://github.com/codemower-ai/code-mower/blob/main/docs/current-state-and-roadmap.md).
|
|
279
279
|
|
|
@@ -281,7 +281,7 @@ and boundaries are recorded in
|
|
|
281
281
|
|
|
282
282
|
Graphify's optional bounded provider foundation landed in v1.4.0; its complete
|
|
283
283
|
qualified integration, scorecard and query behavior shipped in v1.4.1 and
|
|
284
|
-
remain available in v1.
|
|
284
|
+
remain available in v1.6.0. It is separately installed into an operator-owned
|
|
285
285
|
environment, explicitly activated, and outside the base dependency set: a
|
|
286
286
|
default Claude + Codex install adds no Graphify dependency, no indexer, no
|
|
287
287
|
background service, and no watcher.
|
|
@@ -40,6 +40,6 @@ historical release evidence and are not current operating guidance.
|
|
|
40
40
|
|
|
41
41
|
## Lifecycle
|
|
42
42
|
|
|
43
|
-
The manifest currently classifies
|
|
43
|
+
The manifest currently classifies 63 supporting, 56 frozen, and 5 archived document(s).
|
|
44
44
|
See [Documentation lifecycle](documentation-lifecycle.md) before adding, moving,
|
|
45
45
|
or changing release-sensitive documentation.
|
|
@@ -915,11 +915,27 @@ touched. Pruning needs `--yes` and never signals any process.
|
|
|
915
915
|
|
|
916
916
|
`code-mower board list` emits `code_mower.boardInventory.v1`, a local inventory
|
|
917
917
|
of visible Code Mower Board listeners. It reports loopback URL, PID, process
|
|
918
|
-
name,
|
|
919
|
-
`restart_recommended`,
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
918
|
+
name, identity-verified repository, invoking version, serving version,
|
|
919
|
+
installed package version, `restart_recommended`, managed-service identity,
|
|
920
|
+
health, and next action. An identity-verified transient row carries a
|
|
921
|
+
stop-and-install `promotion_command`; a stale managed row carries
|
|
922
|
+
`restart_command`. Both commands use the redacted
|
|
923
|
+
working-directory placeholder `--repo-path .`.
|
|
924
|
+
|
|
925
|
+
`code-mower board list --repo OWNER/REPO` includes a row only when the Board's
|
|
926
|
+
`/api/identity` response establishes that repository. Command-line repo hints
|
|
927
|
+
never satisfy this filter, so legacy, malformed, and unresponsive listeners
|
|
928
|
+
fail closed. The `filter` block counts matched, identity-unverified, and
|
|
929
|
+
other-repository rows without exposing local paths. Local cwd paths are
|
|
930
|
+
redacted by default; `--show-local-paths` is for local debugging only. If the
|
|
931
|
+
host blocks listener inspection, the command reports an unavailable inventory
|
|
932
|
+
instead of calling GitHub or reading repository content.
|
|
933
|
+
|
|
934
|
+
The invoking CLI sets `restart_recommended` when `serving_version` differs
|
|
935
|
+
from `invoking_version`, even if the process reports that its own serving and
|
|
936
|
+
installed versions agree. The `local_boards` block in `lanes status` is this
|
|
937
|
+
same enriched inventory, so its text and JSON expose the same versions,
|
|
938
|
+
managed-service fields, and guidance.
|
|
923
939
|
|
|
924
940
|
`code-mower board stop --port PORT --yes` and `code-mower board stop --pid PID
|
|
925
941
|
--yes` emit `code_mower.boardStop.v1`. Stop only sends a local termination
|
|
@@ -62,14 +62,13 @@ comes back with stale arguments, fails the gate instead of passing on a single
|
|
|
62
62
|
early probe. The payload reports `delayed_health` with its state, the settle and
|
|
63
63
|
refresh windows, and how many refreshes it took.
|
|
64
64
|
|
|
65
|
-
When that window closes without a validating binding,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
remove it.
|
|
65
|
+
When that window closes without a validating binding, an in-place restart or an
|
|
66
|
+
unchanged install reports `delayed_health_failed`, because no definition was
|
|
67
|
+
replaced. A new apply is different: a fresh install is removed again, while a
|
|
68
|
+
replacement restores and verifies the previous binding. Those operations report
|
|
69
|
+
`apply_failed` when the pre-operation state is verified and `rollback_failed`
|
|
70
|
+
with a recovery command when neither state can be verified. The payload keeps
|
|
71
|
+
the failed `delayed_health` evidence alongside the reconciliation result.
|
|
73
72
|
|
|
74
73
|
## Fail-closed refusals
|
|
75
74
|
|
|
@@ -144,18 +143,50 @@ and the `board stop` keepalive guard could no longer see it. That case reports
|
|
|
144
143
|
`remove_incomplete` and leaves the definition in place.
|
|
145
144
|
|
|
146
145
|
`--replace` is the only way to take over an existing definition for a port, and
|
|
147
|
-
the replacement is atomic: the definition file is swapped with `os.replace`,
|
|
148
|
-
|
|
149
|
-
`
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
146
|
+
the replacement is atomic: the definition file is swapped with `os.replace`,
|
|
147
|
+
then the terminal result is decided from the host state rather than from a
|
|
148
|
+
`launchctl` return code. The final reconciliation re-reads the definition,
|
|
149
|
+
launchd's running pid and argument vector, the process checkout and supervisor,
|
|
150
|
+
exclusive port ownership, repository identity, installed version and serving
|
|
151
|
+
version. Success means those reads prove the new definition and new process. A
|
|
152
|
+
failed apply means the same reads prove the restored definition and restored
|
|
153
|
+
process. JSON carries that evidence in `reconciliation`; text prints exactly one
|
|
154
|
+
verified state.
|
|
155
|
+
|
|
156
|
+
This matters because `launchctl bootstrap` can register and start a job before
|
|
157
|
+
reporting a timeout or permission-boundary failure. When the new binding passes
|
|
158
|
+
the whole serving gate, replacement succeeded and no rollback is attempted. If
|
|
159
|
+
it does not pass, rollback unloads it before restoring the backup and performs
|
|
160
|
+
the same complete read against the previous binding. A result never calls both
|
|
161
|
+
replacement and rollback successful. If neither binding can be verified, the
|
|
162
|
+
operation reports `rollback_failed` with one recovery command and the checkout
|
|
163
|
+
where that command must run.
|
|
164
|
+
|
|
165
|
+
A failed first install has absence as its rollback target. That result re-reads
|
|
166
|
+
the definition, launchd job and unfiltered listener inventory after cleanup;
|
|
167
|
+
only no definition, no job and an available inventory with zero listeners on
|
|
168
|
+
the target port is verified absence. An unavailable inventory or any surviving
|
|
169
|
+
listener is unresolved `rollback_failed`, with the same exact recovery command.
|
|
170
|
+
|
|
171
|
+
Rollback version checks use the identity/version evidence captured from the old
|
|
172
|
+
Board before it is stopped. A byte-for-byte restored older Board therefore
|
|
173
|
+
validates as the previous state even when the command performing the replacement
|
|
174
|
+
comes from a newer installation. A readable definition whose job was already
|
|
175
|
+
unloaded has no running version to capture; after restoration, its complete
|
|
176
|
+
binding is checked against the normal current-version contract. Missing version
|
|
177
|
+
evidence remains unresolved when a prior job was loaded or its state was unknown.
|
|
178
|
+
If the prior definition was unreadable,
|
|
179
|
+
`--replace` knowingly discarded bytes that could not be backed up; removing a
|
|
180
|
+
failed replacement is then reported as unresolved cleanup, never as a restored
|
|
181
|
+
previous service.
|
|
182
|
+
|
|
183
|
+
The swap is the point at which the original contents stop existing, so it
|
|
184
|
+
happens only once the old job is established as unloaded -- a `bootout` that
|
|
185
|
+
succeeded, or the same positively-confirmed absence `remove` requires. Writing
|
|
186
|
+
over a job launchd still holds would fail the bootstrap anyway (launchd will not
|
|
187
|
+
accept a label its domain already holds), so that case refuses as
|
|
188
|
+
`unload_failed`. A write that fails outright leaves the previous definition on
|
|
189
|
+
disk untouched; recovery loads and verifies that definition again.
|
|
159
190
|
|
|
160
191
|
The backup that rollback restores is read before any of that -- before a log
|
|
161
192
|
directory is created, before the old job is booted out, before a byte is
|
|
@@ -201,6 +232,22 @@ whatever the installing shell happened to have. If the package cannot be located
|
|
|
201
232
|
on a canonical path, the request is refused before anything is applied. A
|
|
202
233
|
console-script definition carries no `PYTHONPATH` at all.
|
|
203
234
|
|
|
235
|
+
### Recording and the supported argument surface
|
|
236
|
+
|
|
237
|
+
`board serve` is an interactive process and does not record events unless
|
|
238
|
+
`--record-events` is passed. A managed `board service` is intended to preserve
|
|
239
|
+
local history while it stays open, so `service render`, `service install` and
|
|
240
|
+
`service restart` enable recording by default; pass `--no-record-events` to all
|
|
241
|
+
three when the managed Board should remain read-only. That choice is part of the
|
|
242
|
+
rendered argument vector, so changing it requires `restart --replace`.
|
|
243
|
+
|
|
244
|
+
The service commands accept the durable binding options they can reproduce:
|
|
245
|
+
`--repo`, `--repo-path`, `--host`, `--port`, and the recording choice. Options
|
|
246
|
+
that tune one interactive `board serve` process, such as custom store paths,
|
|
247
|
+
limits, refresh intervals, retention, or `--open`, are not `board service`
|
|
248
|
+
arguments. Review the exact supported service argv with `service render`; do not
|
|
249
|
+
copy an arbitrary `board serve` command after the `service` subcommand.
|
|
250
|
+
|
|
204
251
|
### Logs
|
|
205
252
|
|
|
206
253
|
The definition sends both output streams to `<repo>/.code-mower/board/logs`.
|
|
@@ -299,24 +346,28 @@ Selectors are not exclusive: every selector supplied must agree on one binding.
|
|
|
299
346
|
not be proven to release the port rather than be undone.
|
|
300
347
|
|
|
301
348
|
`board list` marks each Board `managed` with its service label, or transient,
|
|
302
|
-
and says when that service's supervision is unconfirmed.
|
|
349
|
+
and says when that service's supervision is unconfirmed. Use `code-mower board
|
|
350
|
+
list --repo OWNER/REPO --json` to filter on the repository established by each
|
|
351
|
+
listener's `/api/identity` response. A legacy, malformed, or unresponsive
|
|
352
|
+
listener cannot satisfy the filter even when its process command line contains
|
|
353
|
+
that repository. Omit `--repo` to inspect those unverified rows globally.
|
|
303
354
|
|
|
304
|
-
|
|
305
|
-
filter the returned rows by their identity-verified `repo` value. The command
|
|
306
|
-
does not accept `--repo`. Responsive rows carry `serving_version`,
|
|
355
|
+
Responsive rows carry `invoking_version`, `serving_version`,
|
|
307
356
|
`installed_version`, `restart_recommended`, `managed`, and `service_label`.
|
|
357
|
+
Staleness is computed by the invoking CLI as well as read from the process, so
|
|
358
|
+
an old Board cannot declare itself current merely because its own serving and
|
|
359
|
+
installed versions agree.
|
|
308
360
|
For one known listener, `GET /api/identity` is the compact identity/version
|
|
309
|
-
probe and `GET /api/status` carries the full `board.version` block.
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
stale
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
those planned command shapes with v1.5.2.
|
|
361
|
+
probe and `GET /api/status` carries the full `board.version` block. `lanes
|
|
362
|
+
status` presents the same inventory fields and service identity as `board
|
|
363
|
+
list`.
|
|
364
|
+
|
|
365
|
+
Every identity-verified transient row includes a copyable `promotion_command`
|
|
366
|
+
that stops the exact repo/port listener and then installs the service. Every
|
|
367
|
+
stale managed row includes its exact `restart_command`. The commands keep local
|
|
368
|
+
paths redacted with `--repo-path .`; run them from the intended checkout, where
|
|
369
|
+
the service lifecycle's origin guard verifies the repository before applying a
|
|
370
|
+
definition.
|
|
320
371
|
|
|
321
372
|
A `launchctl` that cannot be probed at all is one of those unconfirmed cases,
|
|
322
373
|
not an empty inventory. On macOS the installed definitions are enumerated even
|
|
@@ -5,7 +5,7 @@ reports, and the local Board without a hosted account. CodeMower.com is an
|
|
|
5
5
|
optional destination for longitudinal team reporting and future aggregate
|
|
6
6
|
benchmarks.
|
|
7
7
|
|
|
8
|
-
## Current v1.
|
|
8
|
+
## Current v1.6.0 Client Surface
|
|
9
9
|
|
|
10
10
|
The current client can:
|
|
11
11
|
|
|
@@ -249,6 +249,18 @@ identifiers that did not report cost; it is metadata-only and must never
|
|
|
249
249
|
contain commands, paths, auth output, or secrets. Missing cost is omitted,
|
|
250
250
|
never serialized as zero.
|
|
251
251
|
|
|
252
|
+
Shared local spend ledgers may contain attempts for several repositories. An
|
|
253
|
+
attempt with an explicit different `repo_slug` is isolated to that repository
|
|
254
|
+
and does not suppress coverage in the repository currently being synced. A
|
|
255
|
+
builder run recorded before PR creation may omit `pr_number`; the command links
|
|
256
|
+
it only when its recorded branch equals exactly one GitHub `headRefName` in the
|
|
257
|
+
fetched PR population. Missing or ambiguous branch matches remain fail-closed.
|
|
258
|
+
No branch prefix, author, PR body marker, or issue prose is used for this join.
|
|
259
|
+
|
|
260
|
+
Dollar coverage remains provider-reported. Subscription access, token counts,
|
|
261
|
+
or elapsed time are not silently converted to `cost_usd`; an explicit,
|
|
262
|
+
versioned allocation policy would be a separate data source and contract.
|
|
263
|
+
|
|
252
264
|
Builder evidence fails closed: a `*.cloud-event.json` file that cannot be
|
|
253
265
|
read, parsed, or recognized as a `builder_run` event is never silently
|
|
254
266
|
omitted. A failure attributable to a PR via its filename is recorded on that
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Control-surface session summaries
|
|
2
|
+
|
|
3
|
+
This supporting contract describes the metadata-only lifecycle summaries used
|
|
4
|
+
by the optional [Slack integration](slack-setup.md). Installation and Slack
|
|
5
|
+
administration remain in the Slack guide. General upload behavior remains in
|
|
6
|
+
the [cloud data contract](cloud-data-contract.md), and local work presentation
|
|
7
|
+
remains in the [Board data contract](board-data-contract.md).
|
|
8
|
+
|
|
9
|
+
## Boundary
|
|
10
|
+
|
|
11
|
+
`code_mower.controlSurfaceSessionSummary.v1` is a closed specialization of the
|
|
12
|
+
existing `code_mower.benchmarkEvent.v1` envelope. It reports one meaningful
|
|
13
|
+
session observation rather than a command, message, or transcript stream. The
|
|
14
|
+
packaged schema and fixtures are the normative machine-readable contract:
|
|
15
|
+
|
|
16
|
+
- `control_surface_session_summary.schema.json`;
|
|
17
|
+
- `control_surface_session_summary.accepted.json`;
|
|
18
|
+
- `control_surface_session_summary.rejected.json`;
|
|
19
|
+
- `control_surface_session_summary.expectations.json`;
|
|
20
|
+
- `control_surface_session_summary.fixture-manifest.json`.
|
|
21
|
+
|
|
22
|
+
The summary allows an opaque Code Mower correlation key, repository slug,
|
|
23
|
+
categorical provider, lifecycle state and outcome, observation time, operation
|
|
24
|
+
counts, closed lifecycle reason, bounded owner action, optional pull-request
|
|
25
|
+
metadata, and already available elapsed-time or Devin ACU measurements. The
|
|
26
|
+
producer hashes its local logical session into a 32-character key before
|
|
27
|
+
building the event. It never forwards a Slack identity or provider session
|
|
28
|
+
reference.
|
|
29
|
+
|
|
30
|
+
The lifecycle state, reason, and owner action form one closed policy triple.
|
|
31
|
+
Routine status observations use `none`; owner waits use `answer_question` or
|
|
32
|
+
`respond_to_approval`; failures and suspensions use `inspect_failure`.
|
|
33
|
+
`collect` observations with `result_not_ready` or `result_unavailable` use
|
|
34
|
+
`inspect_provider` regardless of whether the provider is still pending,
|
|
35
|
+
running, owner-waiting, or terminal. This preserves both facts: the provider
|
|
36
|
+
state remains truthful, and the missing result remains visible as the current
|
|
37
|
+
owner action. Unsupported combinations fail closed.
|
|
38
|
+
|
|
39
|
+
The closed validator rejects unknown root, dimension, metric, and tool
|
|
40
|
+
provenance fields. Tool provenance is limited to the fixed Code Mower reporter
|
|
41
|
+
identity, a bounded package version, and a coarse local/CI runtime category. Task
|
|
42
|
+
text, messages, answers, prompts, response URLs, Slack identities, source,
|
|
43
|
+
diffs, transcripts, tokens, paths, context or graph data, provider references,
|
|
44
|
+
and raw output cannot enter this event.
|
|
45
|
+
|
|
46
|
+
## Local Board projection
|
|
47
|
+
|
|
48
|
+
Slack-requested work uses the existing public remote-session lifecycle and
|
|
49
|
+
local Board adapter. The adapter maps `pending`, `running`, owner-waiting,
|
|
50
|
+
completion, failure, suspension, termination, archival, and uncertainty into
|
|
51
|
+
the same Board phases used by other remote work. This is local observation;
|
|
52
|
+
it does not require cloud access and grants no dispatch or merge authority.
|
|
53
|
+
|
|
54
|
+
## Hosted capability gate
|
|
55
|
+
|
|
56
|
+
Production emission stays disabled until the hosted service advertises this
|
|
57
|
+
exact closed object:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"accepting": true,
|
|
62
|
+
"capability_version": 1,
|
|
63
|
+
"fixture_manifest_sha256": "<sha256 of the exact packaged fixture manifest bytes>",
|
|
64
|
+
"schema": "code_mower.controlSurfaceSessionSummaryCapability.v1",
|
|
65
|
+
"summary_schema": "code_mower.controlSurfaceSessionSummary.v1"
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Every field must match, and unknown fields fail closed. A missing capability,
|
|
70
|
+
version mismatch, digest mismatch, or `accepting: false` leaves operation local
|
|
71
|
+
only. Client rollback stops new emission without rewriting accepted rows.
|
|
72
|
+
The client reads this object from
|
|
73
|
+
`GET /api/health` at `capabilities.control_surface_session_summary`; the cloud
|
|
74
|
+
doctor exposes an accepted exact match in its service-check detail.
|
|
75
|
+
|
|
76
|
+
After acceptance, the producer emits the first observation and then only a
|
|
77
|
+
meaningful lifecycle, operation-count, owner-action, or pull-request change.
|
|
78
|
+
Timestamp-only changes and changing elapsed time or usage on a nonterminal
|
|
79
|
+
session do not create another event. Terminal elapsed-time or usage changes
|
|
80
|
+
remain meaningful reconciliation evidence.
|
|
81
|
+
|
|
82
|
+
The hosted service must vendor the five packaged resources byte-for-byte,
|
|
83
|
+
scope repository identity through authenticated tenant policy, and implement
|
|
84
|
+
the retention, export, deletion, tenant-isolation, and aggregate-reconciliation
|
|
85
|
+
expectations in the packaged expectations fixture.
|
|
86
|
+
|
|
87
|
+
## Contract changes
|
|
88
|
+
|
|
89
|
+
The fixture manifest hashes exact UTF-8 file bytes. It does not hash itself;
|
|
90
|
+
the hosted capability advertises the SHA-256 of the manifest bytes separately.
|
|
91
|
+
After qualification, changing the schema or any fixture requires a new schema
|
|
92
|
+
or manifest version. Do not refresh hashes in place to accept changed meaning.
|
|
@@ -22,15 +22,17 @@ dry-run-first.
|
|
|
22
22
|
|
|
23
23
|
## Current Source And Published Baseline
|
|
24
24
|
|
|
25
|
-
This source defines Code Mower `v1.
|
|
26
|
-
`code-mower==1.
|
|
25
|
+
This source defines Code Mower `v1.6.0`, with package spec
|
|
26
|
+
`code-mower==1.6.0`. Confirm the release tag on GitHub Releases and the package
|
|
27
27
|
version on the selected index before using an index install command; source
|
|
28
|
-
version and publication state are separate facts.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
version and publication state are separate facts. The latest published baseline
|
|
29
|
+
remains `v1.5.2` until the entry gates and qualification contract for #1105 are
|
|
30
|
+
complete. See the
|
|
31
|
+
[v1.6.0 release notes](https://github.com/codemower-ai/code-mower/blob/main/docs/v160-release-notes.md),
|
|
32
|
+
[qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/v160-qualification.md),
|
|
33
|
+
and [candidate runbook](v160-release-runbook.md). The GitHub Release and #1105
|
|
34
|
+
will carry observed source SHA, artifact digests, canary, soak, publication,
|
|
35
|
+
and reinstall evidence after those observations exist.
|
|
34
36
|
Historical v1.4.x artifacts and qualification records remain unchanged.
|
|
35
37
|
|
|
36
38
|
`v1.4.0`, `v1.4.1` and `v1.4.2` have all shipped, and the v1.4.0 and v1.4.1
|
|
@@ -133,10 +135,12 @@ future hosted-service work.
|
|
|
133
135
|
- Graphify's bounded provider foundation shipped in v1.4.0; its complete
|
|
134
136
|
qualified integration, scorecard and query behavior shipped in v1.4.1. It
|
|
135
137
|
remains optional and has no default dependency.
|
|
136
|
-
- Slack in v1.
|
|
138
|
+
- Slack in v1.6.0 retains one private workspace with explicit member, repository
|
|
137
139
|
and private-channel mappings plus private start, status, answer and
|
|
138
|
-
confirmed-cancel interactions.
|
|
139
|
-
|
|
140
|
+
confirmed-cancel interactions. Metadata-only lifecycle summaries remain
|
|
141
|
+
disabled until the hosted service advertises the exact accepted contract.
|
|
142
|
+
Slack-to-Board links, Slack Connect, public channels and richer Slack UX are
|
|
143
|
+
deferred.
|
|
140
144
|
- Provider cost fields remain unknown when the provider does not return them.
|
|
141
145
|
- A successful release campaign proves installation and operational transport,
|
|
142
146
|
not builder quality or reviewer promotion readiness.
|
|
@@ -147,32 +151,36 @@ future hosted-service work.
|
|
|
147
151
|
|
|
148
152
|
## Current Release And v1.6.0
|
|
149
153
|
|
|
150
|
-
`v1.5.2` is released and
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
154
|
+
`v1.5.2` is released and remains the current supported package. The `v1.6.0`
|
|
155
|
+
source line now contains the completed doctor taxonomy, atomic Board replacement,
|
|
156
|
+
identity-verified Board inventory and version guidance, neutral `unmanaged`
|
|
157
|
+
state for ordinary pull requests with no Code Mower provenance, share-safe
|
|
158
|
+
adoption diagnostics, cross-repository cost isolation, and the closed
|
|
159
|
+
metadata-only control-surface summary contract. Visible malformed Code Mower
|
|
160
|
+
claims remain actionable and fail-closed. The optional client
|
|
161
|
+
emitter remains fail-closed unless the hosted service advertises the exact
|
|
162
|
+
accepted contract identity.
|
|
163
|
+
|
|
164
|
+
The [v1.6.0 milestone](https://github.com/codemower-ai/code-mower/milestone/2),
|
|
165
|
+
[epic #1066](https://github.com/codemower-ai/code-mower/issues/1066), and
|
|
166
|
+
[release issue #1105](https://github.com/codemower-ai/code-mower/issues/1105)
|
|
167
|
+
are the live trackers. All immutable-candidate entry gates are complete. Board
|
|
168
|
+
clarity #1063 merged through PR #1109, and audit-history hardening #1104 merged
|
|
169
|
+
through PR #1107. Hosted PR #542 merged at
|
|
170
|
+
`bcddaa25c633f2dcf8fa2077d6ecb8004c1d8f88`; production deployment
|
|
171
|
+
`6581697672` succeeded in two steps; production deployment
|
|
172
|
+
`dpl_HxhK4CHrYPkCCzjxS9rGjSuBG8C8` is Ready; authenticated health advertises the
|
|
173
|
+
exact accepting contract; the migration ledger is 79/79; and one sanitized
|
|
174
|
+
probe was accepted exactly once and isolated to `jeff-internal`. Public evidence
|
|
175
|
+
is recorded in
|
|
176
|
+
[#978 comment 5770184083](https://github.com/codemower-ai/code-mower/issues/978#issuecomment-5770184083).
|
|
177
|
+
|
|
178
|
+
After the release PR merges, #1105 serializes the one immutable build, bounded
|
|
179
|
+
private Slack canary, local-versus-hosted reconciliation, 24-hour soak, two
|
|
180
|
+
independent installation passes, exact-head release audits, publication, and
|
|
181
|
+
canonical reinstall. #978 remains open until the retained candidate completes
|
|
182
|
+
the canary and local-versus-hosted aggregate reconciliation. None of those
|
|
183
|
+
post-merge observations is claimed by this source preparation.
|
|
176
184
|
|
|
177
185
|
## Near-Term Roadmap
|
|
178
186
|
|
|
@@ -338,13 +346,16 @@ administration/readiness; #920 consumes the immutable candidate to obtain one
|
|
|
338
346
|
accepted completion and one accepted confirmed cancellation under an explicit
|
|
339
347
|
numeric cap while preserving every attempt and reservation; #923 records the
|
|
340
348
|
tag, publication and independent reinstall evidence.
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
349
|
+
The v1.6.0 source adds capability-gated, metadata-only lifecycle summaries to
|
|
350
|
+
the local Board and optional cloud emitter. Slack-to-Board links and rich UX
|
|
351
|
+
remain deferred. Slack consumes the durable lifecycle instead of scraping
|
|
352
|
+
terminal or Board output and carries no raw private context or private reviewer
|
|
353
|
+
findings.
|
|
354
|
+
|
|
355
|
+
The source implementation and qualification contract are complete. This
|
|
356
|
+
statement covers the basic v1.5.0 interaction boundary.
|
|
357
|
+
Consult #923 and the GitHub Release for the observed v1.5.0 lifecycle, canary,
|
|
358
|
+
publication and canonical reinstall state.
|
|
348
359
|
|
|
349
360
|
## Delivery Order
|
|
350
361
|
|