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.
Files changed (681) hide show
  1. {code_mower-1.5.2 → code_mower-1.6.0}/PKG-INFO +14 -14
  2. {code_mower-1.5.2 → code_mower-1.6.0}/README.md +13 -13
  3. {code_mower-1.5.2 → code_mower-1.6.0}/docs/README.md +1 -1
  4. {code_mower-1.5.2 → code_mower-1.6.0}/docs/board-data-contract.md +21 -5
  5. {code_mower-1.5.2 → code_mower-1.6.0}/docs/board-service-lifecycle.md +86 -35
  6. {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-benchmarking.md +1 -1
  7. {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-data-contract.md +12 -0
  8. code_mower-1.6.0/docs/control-surface-telemetry.md +92 -0
  9. {code_mower-1.5.2 → code_mower-1.6.0}/docs/current-state-and-roadmap.md +55 -44
  10. {code_mower-1.5.2 → code_mower-1.6.0}/docs/early-adopter-invite-runbook.md +2 -2
  11. {code_mower-1.5.2 → code_mower-1.6.0}/docs/first-user-install-rehearsal.md +12 -12
  12. {code_mower-1.5.2 → code_mower-1.6.0}/docs/graphify-setup.md +1 -1
  13. {code_mower-1.5.2 → code_mower-1.6.0}/docs/install.md +27 -24
  14. {code_mower-1.5.2 → code_mower-1.6.0}/docs/jira-cloud-setup.md +1 -1
  15. {code_mower-1.5.2 → code_mower-1.6.0}/docs/launch-command-surface.md +4 -3
  16. {code_mower-1.5.2 → code_mower-1.6.0}/docs/orchestrator-prompt-pack.md +10 -9
  17. {code_mower-1.5.2 → code_mower-1.6.0}/docs/provider-matrix.md +1 -1
  18. {code_mower-1.5.2 → code_mower-1.6.0}/docs/public-release-checklist.md +14 -9
  19. {code_mower-1.5.2 → code_mower-1.6.0}/docs/pypi-release.md +25 -21
  20. {code_mower-1.5.2 → code_mower-1.6.0}/docs/quickstart.md +16 -15
  21. {code_mower-1.5.2 → code_mower-1.6.0}/docs/release-history.md +3 -0
  22. {code_mower-1.5.2 → code_mower-1.6.0}/docs/sessions.md +1 -1
  23. {code_mower-1.5.2 → code_mower-1.6.0}/docs/slack-setup.md +9 -8
  24. {code_mower-1.5.2 → code_mower-1.6.0}/docs/troubleshooting.md +20 -11
  25. {code_mower-1.5.2 → code_mower-1.6.0}/docs/try-in-10-minutes.md +1 -1
  26. {code_mower-1.5.2 → code_mower-1.6.0}/docs/upgrade-existing-repo.md +8 -8
  27. code_mower-1.6.0/docs/v160-qualification.md +59 -0
  28. code_mower-1.6.0/docs/v160-release-notes.md +106 -0
  29. code_mower-1.6.0/docs/v160-release-runbook.md +160 -0
  30. {code_mower-1.5.2 → code_mower-1.6.0}/pyproject.toml +4 -1
  31. code_mower-1.6.0/release.yml +46 -0
  32. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/__init__.py +1 -1
  33. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_labeler_lib.py +185 -22
  34. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board.py +131 -12
  35. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_service.py +624 -44
  36. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_lineage.py +40 -4
  37. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_lineage_producer.py +25 -25
  38. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/bundle.py +1 -0
  39. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/endpoints.py +5 -0
  40. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/events.py +7 -0
  41. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/operations.py +36 -9
  42. code_mower-1.6.0/src/code_mower/control_surface_session_summary.accepted.json +1069 -0
  43. code_mower-1.6.0/src/code_mower/control_surface_session_summary.expectations.json +46 -0
  44. code_mower-1.6.0/src/code_mower/control_surface_session_summary.fixture-manifest.json +32 -0
  45. code_mower-1.6.0/src/code_mower/control_surface_session_summary.rejected.json +985 -0
  46. code_mower-1.6.0/src/code_mower/control_surface_session_summary.schema.json +989 -0
  47. code_mower-1.6.0/src/code_mower/control_surface_summary.py +588 -0
  48. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/controller.py +12 -1
  49. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor.py +50 -6
  50. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/__init__.py +14 -0
  51. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/adoption.py +95 -21
  52. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/campaign_auth.py +24 -8
  53. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/models.py +13 -0
  54. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/output.py +10 -3
  55. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/runner.py +8 -0
  56. code_mower-1.6.0/src/code_mower/doctor_checks/share_safe.py +208 -0
  57. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/gate_health.py +38 -10
  58. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_status.py +352 -21
  59. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_manifest.py +39 -0
  60. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/github_pr.py +34 -12
  61. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_readiness.py +39 -12
  62. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/saas_reviewer_labeler.py +19 -19
  63. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +48 -2
  64. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/PKG-INFO +14 -14
  65. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/SOURCES.txt +14 -0
  66. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board.py +164 -1
  67. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_service.py +771 -34
  68. code_mower-1.6.0/tests/test_comment_history.py +104 -0
  69. code_mower-1.6.0/tests/test_control_surface_summary.py +415 -0
  70. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_controller.py +32 -0
  71. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_cli_audit_pr.py +10 -4
  72. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_review.py +4 -1
  73. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_campaign_auth.py +15 -0
  74. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_campaign_readiness.py +180 -1
  75. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_output.py +48 -3
  76. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_registry.py +4 -0
  77. code_mower-1.6.0/tests/test_doctor_share_safe.py +271 -0
  78. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_gate_health.py +61 -0
  79. code_mower-1.6.0/tests/test_lane_status.py +2192 -0
  80. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_labels.py +5 -1
  81. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_projection.py +11 -2
  82. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_producer_artifacts.py +4 -2
  83. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_producer_publication.py +45 -7
  84. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_minimal_lineage_transport.py +15 -1
  85. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_pr_outcome_coverage.py +120 -9
  86. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_github_pr.py +35 -9
  87. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_contract.py +71 -43
  88. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_hygiene.py +30 -26
  89. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_v142.py +10 -10
  90. code_mower-1.5.2/release.yml +0 -35
  91. code_mower-1.5.2/tests/test_lane_status.py +0 -866
  92. {code_mower-1.5.2 → code_mower-1.6.0}/CODE_OF_CONDUCT.md +0 -0
  93. {code_mower-1.5.2 → code_mower-1.6.0}/LICENSE +0 -0
  94. {code_mower-1.5.2 → code_mower-1.6.0}/MANIFEST.in +0 -0
  95. {code_mower-1.5.2 → code_mower-1.6.0}/NOTICE +0 -0
  96. {code_mower-1.5.2 → code_mower-1.6.0}/SUPPORT.md +0 -0
  97. {code_mower-1.5.2 → code_mower-1.6.0}/docs/acp-bridge-spike.md +0 -0
  98. {code_mower-1.5.2 → code_mower-1.6.0}/docs/architecture.md +0 -0
  99. {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/README.md +0 -0
  100. {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha4.md +0 -0
  101. {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha5.md +0 -0
  102. {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha6.md +0 -0
  103. {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha8.md +0 -0
  104. {code_mower-1.5.2 → code_mower-1.6.0}/docs/archive/first-user-install-rehearsal-alpha9.md +0 -0
  105. {code_mower-1.5.2 → code_mower-1.6.0}/docs/authoring-intelligence.md +0 -0
  106. {code_mower-1.5.2 → code_mower-1.6.0}/docs/board-qualification.md +0 -0
  107. {code_mower-1.5.2 → code_mower-1.6.0}/docs/build-loop-in-30-minutes.md +0 -0
  108. {code_mower-1.5.2 → code_mower-1.6.0}/docs/build-loop.md +0 -0
  109. {code_mower-1.5.2 → code_mower-1.6.0}/docs/builder-experiments.md +0 -0
  110. {code_mower-1.5.2 → code_mower-1.6.0}/docs/builders-grok-cursor.md +0 -0
  111. {code_mower-1.5.2 → code_mower-1.6.0}/docs/calibration-notes.md +0 -0
  112. {code_mower-1.5.2 → code_mower-1.6.0}/docs/calibration-pilot.md +0 -0
  113. {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-contributor-runbook.md +0 -0
  114. {code_mower-1.5.2 → code_mower-1.6.0}/docs/cloud-sharing.md +0 -0
  115. {code_mower-1.5.2 → code_mower-1.6.0}/docs/code-structure-roadmap.md +0 -0
  116. {code_mower-1.5.2 → code_mower-1.6.0}/docs/commercial-boundary.md +0 -0
  117. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-connections.md +0 -0
  118. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-delivery.md +0 -0
  119. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-graph-lifecycle.md +0 -0
  120. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-graph-queries.md +0 -0
  121. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-packet-schema.md +0 -0
  122. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-provider-contract.md +0 -0
  123. {code_mower-1.5.2 → code_mower-1.6.0}/docs/context-setup.md +0 -0
  124. {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-peer-support-qualification.md +0 -0
  125. {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-review-parity.md +0 -0
  126. {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-setup-prompt.md +0 -0
  127. {code_mower-1.5.2 → code_mower-1.6.0}/docs/devin-work-orders.md +0 -0
  128. {code_mower-1.5.2 → code_mower-1.6.0}/docs/doctrine-lens-proof-v2.md +0 -0
  129. {code_mower-1.5.2 → code_mower-1.6.0}/docs/documentation-lifecycle.md +0 -0
  130. {code_mower-1.5.2 → code_mower-1.6.0}/docs/early-adopter-v05.md +0 -0
  131. {code_mower-1.5.2 → code_mower-1.6.0}/docs/first-run-transcript.md +0 -0
  132. {code_mower-1.5.2 → code_mower-1.6.0}/docs/first-user-demo-transcript.md +0 -0
  133. {code_mower-1.5.2 → code_mower-1.6.0}/docs/friendly-user-rollout-v05.md +0 -0
  134. {code_mower-1.5.2 → code_mower-1.6.0}/docs/github-setup.md +0 -0
  135. {code_mower-1.5.2 → code_mower-1.6.0}/docs/graphify-evaluation.md +0 -0
  136. {code_mower-1.5.2 → code_mower-1.6.0}/docs/jira-adoption-rehearsal.md +0 -0
  137. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lane-promotion-policy.md +0 -0
  138. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/README.md +0 -0
  139. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/claude.md +0 -0
  140. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/codex.md +0 -0
  141. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/cursor.md +0 -0
  142. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lanes/devin.md +0 -0
  143. {code_mower-1.5.2 → code_mower-1.6.0}/docs/lens-calibration-report.md +0 -0
  144. {code_mower-1.5.2 → code_mower-1.6.0}/docs/local-audit-runner.md +0 -0
  145. {code_mower-1.5.2 → code_mower-1.6.0}/docs/mirror-removal-runbook.md +0 -0
  146. {code_mower-1.5.2 → code_mower-1.6.0}/docs/operational-evidence.md +0 -0
  147. {code_mower-1.5.2 → code_mower-1.6.0}/docs/oss-v1-checklist.md +0 -0
  148. {code_mower-1.5.2 → code_mower-1.6.0}/docs/package-customization.md +0 -0
  149. {code_mower-1.5.2 → code_mower-1.6.0}/docs/participant-qualification.md +0 -0
  150. {code_mower-1.5.2 → code_mower-1.6.0}/docs/planning-work-orders.md +0 -0
  151. {code_mower-1.5.2 → code_mower-1.6.0}/docs/post-v08-effectiveness-assessment.md +0 -0
  152. {code_mower-1.5.2 → code_mower-1.6.0}/docs/prd-addendum-v05-beta.md +0 -0
  153. {code_mower-1.5.2 → code_mower-1.6.0}/docs/privacy-threat-model.md +0 -0
  154. {code_mower-1.5.2 → code_mower-1.6.0}/docs/provider-calibration-scorecard.md +0 -0
  155. {code_mower-1.5.2 → code_mower-1.6.0}/docs/provider-diversity-provenance.md +0 -0
  156. {code_mower-1.5.2 → code_mower-1.6.0}/docs/release-qualification.md +0 -0
  157. {code_mower-1.5.2 → code_mower-1.6.0}/docs/repo-strategy.md +0 -0
  158. {code_mower-1.5.2 → code_mower-1.6.0}/docs/reviewer-value-report.md +0 -0
  159. {code_mower-1.5.2 → code_mower-1.6.0}/docs/sample-doctor-output.md +0 -0
  160. {code_mower-1.5.2 → code_mower-1.6.0}/docs/self-hosted-mac-runner.md +0 -0
  161. {code_mower-1.5.2 → code_mower-1.6.0}/docs/slack-contract.md +0 -0
  162. {code_mower-1.5.2 → code_mower-1.6.0}/docs/slack-ingress.md +0 -0
  163. {code_mower-1.5.2 → code_mower-1.6.0}/docs/supervised-pilot-contract.md +0 -0
  164. {code_mower-1.5.2 → code_mower-1.6.0}/docs/supervisor-contract.md +0 -0
  165. {code_mower-1.5.2 → code_mower-1.6.0}/docs/tracker-data-contract.md +0 -0
  166. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v06-release-notes.md +0 -0
  167. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v06-truth-baseline.md +0 -0
  168. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v08-release-notes.md +0 -0
  169. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v09-release-notes.md +0 -0
  170. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v10-release-notes.md +0 -0
  171. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v101-effectiveness-assessment.md +0 -0
  172. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v101-release-notes.md +0 -0
  173. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1010-release-notes.md +0 -0
  174. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1011-release-notes.md +0 -0
  175. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1012-release-notes.md +0 -0
  176. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1013-release-notes.md +0 -0
  177. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1014-release-notes.md +0 -0
  178. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v1015-release-notes.md +0 -0
  179. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v102-release-notes.md +0 -0
  180. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v103-installation-documentation-audit.md +0 -0
  181. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v103-release-notes.md +0 -0
  182. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v104-installation-documentation-audit.md +0 -0
  183. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v104-release-notes.md +0 -0
  184. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v105-release-notes.md +0 -0
  185. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v106-release-notes.md +0 -0
  186. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v107-release-notes.md +0 -0
  187. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v108-release-notes.md +0 -0
  188. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v109-release-notes.md +0 -0
  189. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v11-release-notes.md +0 -0
  190. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v111-release-notes.md +0 -0
  191. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v112-release-notes.md +0 -0
  192. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v12-release-notes.md +0 -0
  193. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v121-release-notes.md +0 -0
  194. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v122-release-notes.md +0 -0
  195. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v130-context-qualification.md +0 -0
  196. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v130-release-notes.md +0 -0
  197. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v131-guided-context-qualification.md +0 -0
  198. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v131-release-notes.md +0 -0
  199. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v140-release-notes.md +0 -0
  200. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v140-release-runbook.md +0 -0
  201. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v141-qualification.md +0 -0
  202. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v141-release-notes.md +0 -0
  203. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v142-qualification.md +0 -0
  204. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v142-release-notes.md +0 -0
  205. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v150-qualification.md +0 -0
  206. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v150-release-notes.md +0 -0
  207. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v150-release-runbook.md +0 -0
  208. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v151-qualification.md +0 -0
  209. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v151-release-notes.md +0 -0
  210. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v151-release-runbook.md +0 -0
  211. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v152-qualification.md +0 -0
  212. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v152-release-notes.md +0 -0
  213. {code_mower-1.5.2 → code_mower-1.6.0}/docs/v152-release-runbook.md +0 -0
  214. {code_mower-1.5.2 → code_mower-1.6.0}/requirements/requirements.txt +0 -0
  215. {code_mower-1.5.2 → code_mower-1.6.0}/setup.cfg +0 -0
  216. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/__init__.py +0 -0
  217. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/_base.py +0 -0
  218. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  219. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/gitar.py +0 -0
  220. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/greptile.py +0 -0
  221. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/adapters/qodo.py +0 -0
  222. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  223. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/antigravity_sdk_probe.py +0 -0
  224. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_handoff_log.py +0 -0
  225. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_limits.py +0 -0
  226. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_progress.py +0 -0
  227. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/audit_publication.py +0 -0
  228. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/blind_review_artifacts.py +0 -0
  229. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/blind_review_coordinator.py +0 -0
  230. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_local_observation.py +0 -0
  231. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_observation.py +0 -0
  232. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_observation.schema.json +0 -0
  233. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_remote_observation.py +0 -0
  234. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/board_store.py +0 -0
  235. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/bootstrap.py +0 -0
  236. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/branch_policy.py +0 -0
  237. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_experiment.py +0 -0
  238. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/builder_runs.py +0 -0
  239. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/__init__.py +0 -0
  240. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/arms.py +0 -0
  241. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/auto_discovery.py +0 -0
  242. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/commands.py +0 -0
  243. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/context_inputs.py +0 -0
  244. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/corpus.py +0 -0
  245. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/effect_report.py +0 -0
  246. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/evidence.py +0 -0
  247. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/evidence_report.py +0 -0
  248. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/identity.py +0 -0
  249. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/metrics.py +0 -0
  250. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/overlap.py +0 -0
  251. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/planning.py +0 -0
  252. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/policy.py +0 -0
  253. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/results.py +0 -0
  254. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/run_results.py +0 -0
  255. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/run_status.py +0 -0
  256. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/runner.py +0 -0
  257. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/truth.py +0 -0
  258. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/calibration/value_report.py +0 -0
  259. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/campaign_adapters.py +0 -0
  260. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/campaign_discovery.py +0 -0
  261. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/checks.py +0 -0
  262. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/claude_audit_pr.py +0 -0
  263. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/claude_cli_bounce.py +0 -0
  264. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/claude_cli_environment.py +0 -0
  265. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/clear_stale.py +0 -0
  266. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cli.py +0 -0
  267. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud.py +0 -0
  268. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/__init__.py +0 -0
  269. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/adoption_runs.py +0 -0
  270. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/doctor.py +0 -0
  271. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/dogfood.py +0 -0
  272. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/errors.py +0 -0
  273. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/export.py +0 -0
  274. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/finding_outcomes.py +0 -0
  275. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/git_metadata.py +0 -0
  276. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/manifest.py +0 -0
  277. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
  278. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/productivity.py +0 -0
  279. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/productivity_windows.py +0 -0
  280. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/reports.py +0 -0
  281. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/setup.py +0 -0
  282. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/tokens.py +0 -0
  283. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/upload.py +0 -0
  284. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/cloud_client/work_types.py +0 -0
  285. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_calibration.py +0 -0
  286. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_context_packs.py +0 -0
  287. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_merge.py +0 -0
  288. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/code_mower_telemetry.py +0 -0
  289. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  290. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_env_preflight.py +0 -0
  291. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_pr.py +0 -0
  292. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  293. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  294. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/config.py +0 -0
  295. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_audit.py +0 -0
  296. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_command.py +0 -0
  297. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_connections.py +0 -0
  298. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_contract.py +0 -0
  299. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_delivery.py +0 -0
  300. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph.py +0 -0
  301. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_command.py +0 -0
  302. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_connection.py +0 -0
  303. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_lifecycle.py +0 -0
  304. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_graph_query.py +0 -0
  305. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_guided.py +0 -0
  306. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_packets.py +0 -0
  307. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_prepare.py +0 -0
  308. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_readiness.py +0 -0
  309. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_review.py +0 -0
  310. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_session.py +0 -0
  311. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/context_store.py +0 -0
  312. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/coworker_mcp.py +0 -0
  313. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/coworker_retrieval.py +0 -0
  314. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/decisions.py +0 -0
  315. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_api.py +0 -0
  316. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_cli_audit_pr.py +0 -0
  317. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_readiness.py +0 -0
  318. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_review.py +0 -0
  319. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_sessions.py +0 -0
  320. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/devin_work_orders.py +0 -0
  321. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/docs_lifecycle.py +0 -0
  322. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/audit_limits.py +0 -0
  323. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/cloud.py +0 -0
  324. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/common.py +0 -0
  325. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/devin.py +0 -0
  326. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github.py +0 -0
  327. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions.py +0 -0
  328. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  329. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  330. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  331. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  332. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  333. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  334. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  335. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  336. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_api.py +0 -0
  337. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_branch.py +0 -0
  338. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_config.py +0 -0
  339. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_human_token.py +0 -0
  340. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_provider.py +0 -0
  341. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_repo.py +0 -0
  342. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
  343. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/groups.py +0 -0
  344. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/jira.py +0 -0
  345. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/presets.py +0 -0
  346. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/privacy.py +0 -0
  347. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  348. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  349. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  350. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_env.py +0 -0
  351. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  352. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  353. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
  354. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  355. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  356. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  357. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  358. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  359. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  360. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  361. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  362. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  363. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/providers.py +0 -0
  364. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/registry.py +0 -0
  365. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/runtime.py +0 -0
  366. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  367. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
  368. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
  369. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/file_locks.py +0 -0
  370. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  371. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/git_identity.py +0 -0
  372. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/github_builder_evidence.py +0 -0
  373. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/grok_build_audit_pr.py +0 -0
  374. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  375. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/init.py +0 -0
  376. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/jira_cloud.py +0 -0
  377. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/jira_mutations.py +0 -0
  378. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/jira_pr_sync.py +0 -0
  379. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/__init__.py +0 -0
  380. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/aider.py +0 -0
  381. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  382. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/claude.py +0 -0
  383. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/codex.py +0 -0
  384. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/devin.py +0 -0
  385. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/devin_cli.py +0 -0
  386. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  387. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/grok_build.py +0 -0
  388. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  389. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/local_llm.py +0 -0
  390. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_configs/muse_cli.py +0 -0
  391. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_delivery.py +0 -0
  392. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_handoff.py +0 -0
  393. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/lane_runtime.py +0 -0
  394. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_cli_commands.py +0 -0
  395. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_audit_pr.py +0 -0
  396. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_bakeoff.py +0 -0
  397. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_calibration.py +0 -0
  398. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/local_llm_profiles.py +0 -0
  399. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration.py +0 -0
  400. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_install.py +0 -0
  401. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_mirror.py +0 -0
  402. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_readiness.py +0 -0
  403. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/migration_rehearsal.py +0 -0
  404. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/muse_cli_audit_pr.py +0 -0
  405. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/next_steps.py +0 -0
  406. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/operational_evidence.py +0 -0
  407. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package.py +0 -0
  408. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_content.py +0 -0
  409. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_paths.py +0 -0
  410. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_rendering.py +0 -0
  411. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/package_static.py +0 -0
  412. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/participants.py +0 -0
  413. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/plan_context.py +0 -0
  414. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/productivity_report.py +0 -0
  415. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/prompts.py +0 -0
  416. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_capabilities.py +0 -0
  417. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_capabilities.schema.json +0 -0
  418. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_credentials.py +0 -0
  419. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_registry.py +0 -0
  420. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/__init__.py +0 -0
  421. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/comments.py +0 -0
  422. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/exit_codes.py +0 -0
  423. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/git.py +0 -0
  424. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/github_auth.py +0 -0
  425. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/lineage.py +0 -0
  426. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  427. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/process.py +0 -0
  428. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/repo_paths.py +0 -0
  429. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/text_schema.py +0 -0
  430. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  431. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/provider_runners/workspace.py +0 -0
  432. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/providers/__init__.py +0 -0
  433. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/providers/local_cli.py +0 -0
  434. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/providers/provenance.py +0 -0
  435. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_campaigns.py +0 -0
  436. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_identity.py +0 -0
  437. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_metadata.py +0 -0
  438. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/release_qualify.py +0 -0
  439. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/remote_session.py +0 -0
  440. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/remote_session.schema.json +0 -0
  441. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/remote_session_cli.py +0 -0
  442. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/review_authority.py +0 -0
  443. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/reviewer_metrics.py +0 -0
  444. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/reviewer_spend.py +0 -0
  445. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/role_eligibility.py +0 -0
  446. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/role_eligibility.schema.json +0 -0
  447. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/secrets.py +0 -0
  448. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/session.py +0 -0
  449. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/session_current.py +0 -0
  450. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/session_lease.py +0 -0
  451. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_contract.py +0 -0
  452. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_contract.schema.json +0 -0
  453. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_ingress.py +0 -0
  454. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_readiness.py +0 -0
  455. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/slack_setup.py +0 -0
  456. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor.py +0 -0
  457. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_checkpoint.py +0 -0
  458. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_codex.py +0 -0
  459. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract.fixtures.json +0 -0
  460. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract.py +0 -0
  461. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract.schema.json +0 -0
  462. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract_v2.fixtures.json +0 -0
  463. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract_v2.py +0 -0
  464. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/supervisor_contract_v2.schema.json +0 -0
  465. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/builder-experiment.example.json +0 -0
  466. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  467. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/calibration-corpus.json +0 -0
  468. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/code-mower.example.yml +0 -0
  469. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/context-packs.example.json +0 -0
  470. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/cursor/BUGBOT.md +0 -0
  471. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  472. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  473. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  474. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  475. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  476. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  477. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  478. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
  479. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  480. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/README.md +0 -0
  481. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/claude.md +0 -0
  482. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/codex.md +0 -0
  483. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/cursor.md +0 -0
  484. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/devin.md +0 -0
  485. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/generic.md +0 -0
  486. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/lineage-producer.sh +0 -0
  487. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
  488. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/code_mower +0 -0
  489. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  490. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  491. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  492. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  493. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
  494. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  495. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/product-support/status_report.py +0 -0
  496. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/providers.yml +0 -0
  497. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  498. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  499. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/slack/app-manifest.json +0 -0
  500. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/slack/hosted-app-manifest.json +0 -0
  501. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  502. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  503. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/builder-lineage-producer.yml.j2 +0 -0
  504. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +0 -0
  505. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  506. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  507. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  508. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  509. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  510. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  511. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/local-audit-publication.yml.j2 +0 -0
  512. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/local-audit-request.yml.j2 +0 -0
  513. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  514. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
  515. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  516. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  517. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  518. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  519. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  520. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
  521. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/tracker_contract.py +0 -0
  522. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/tracker_queue.py +0 -0
  523. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/trailer_comment_labeler.py +0 -0
  524. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/versioning.py +0 -0
  525. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/work_orders.py +0 -0
  526. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/workflow_actionlint.py +0 -0
  527. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower/yaml_subset.py +0 -0
  528. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/dependency_links.txt +0 -0
  529. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/entry_points.txt +0 -0
  530. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/requires.txt +0 -0
  531. {code_mower-1.5.2 → code_mower-1.6.0}/src/code_mower.egg-info/top_level.txt +0 -0
  532. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_diagnostics.py +0 -0
  533. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_polish_1015.py +0 -0
  534. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_polish_955.py +0 -0
  535. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_result_semantics.py +0 -0
  536. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_adoption_run_contract.py +0 -0
  537. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_antigravity_cli_audit_pr.py +0 -0
  538. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_antigravity_sdk_probe.py +0 -0
  539. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_comment_posture.py +0 -0
  540. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_labeler_identity.py +0 -0
  541. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_limits.py +0 -0
  542. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_audit_publication.py +0 -0
  543. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_lease.py +0 -0
  544. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_local_observation.py +0 -0
  545. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_observation.py +0 -0
  546. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_qualification.py +0 -0
  547. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_board_remote_observation.py +0 -0
  548. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_branch_policy.py +0 -0
  549. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_builder_experiment.py +0 -0
  550. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_builder_identity.py +0 -0
  551. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_builder_runs.py +0 -0
  552. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_calibration_effect_report.py +0 -0
  553. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_calibration_truth.py +0 -0
  554. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_adapters.py +0 -0
  555. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_discovery.py +0 -0
  556. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_gh_auth_and_issue_binding_817.py +0 -0
  557. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_campaign_retry_evidence_711.py +0 -0
  558. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_checks.py +0 -0
  559. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_claude_audit_pr.py +0 -0
  560. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_claude_cli_bounce.py +0 -0
  561. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_clear_stale.py +0 -0
  562. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_client.py +0 -0
  563. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_git_metadata.py +0 -0
  564. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_manifest.py +0 -0
  565. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_cloud_reports.py +0 -0
  566. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  567. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_codex_audit_env_preflight.py +0 -0
  568. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_codex_audit_pr.py +0 -0
  569. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_codex_campaign_auth_modes.py +0 -0
  570. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_audit.py +0 -0
  571. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_command.py +0 -0
  572. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_connections.py +0 -0
  573. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_contract.py +0 -0
  574. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_delivery.py +0 -0
  575. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph.py +0 -0
  576. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph_connection.py +0 -0
  577. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph_lifecycle.py +0 -0
  578. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_graph_query.py +0 -0
  579. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_guided.py +0 -0
  580. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_packets.py +0 -0
  581. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_prepare.py +0 -0
  582. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_readiness.py +0 -0
  583. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_review.py +0 -0
  584. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_context_session.py +0 -0
  585. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_coworker_mcp.py +0 -0
  586. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_coworker_retrieval.py +0 -0
  587. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_decision_audit_integration.py +0 -0
  588. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_decisions.py +0 -0
  589. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_api.py +0 -0
  590. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_builder_lane.py +0 -0
  591. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_capabilities.py +0 -0
  592. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_provider_contract.py +0 -0
  593. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_sessions.py +0 -0
  594. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_setup_readiness.py +0 -0
  595. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_devin_work_orders.py +0 -0
  596. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_docs_lifecycle.py +0 -0
  597. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_actions_cost_summary.py +0 -0
  598. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_actions_failure_selection.py +0 -0
  599. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_boundaries.py +0 -0
  600. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_github_checks.py +0 -0
  601. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_privacy.py +0 -0
  602. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_env_required.py +0 -0
  603. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_env_tokens.py +0 -0
  604. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_local_audit_setup.py +0 -0
  605. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_probe.py +0 -0
  606. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_provider_review_hygiene.py +0 -0
  607. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_runtime.py +0 -0
  608. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_self_hosted_runner.py +0 -0
  609. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_doctor_supervised_pilot.py +0 -0
  610. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_documentation.py +0 -0
  611. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_documented_commands.py +0 -0
  612. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_file_locks.py +0 -0
  613. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_fork_pr_guard.py +0 -0
  614. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_gate_automerge.py +0 -0
  615. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_github_builder_evidence.py +0 -0
  616. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_hosted_dispatch_profile.py +0 -0
  617. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_init_actionlint.py +0 -0
  618. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_init_build_loop.py +0 -0
  619. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_init_builders_cold_start.py +0 -0
  620. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_adoption.py +0 -0
  621. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_cloud.py +0 -0
  622. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_mutations.py +0 -0
  623. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_jira_pr_sync.py +0 -0
  624. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lane_delivery_contract.py +0 -0
  625. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lane_handoff.py +0 -0
  626. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lane_writer_identity.py +0 -0
  627. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_activation.py +0 -0
  628. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_consumer_admission.py +0 -0
  629. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_creation.py +0 -0
  630. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_lineage_producer_state.py +0 -0
  631. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_local_llm_github_helpers.py +0 -0
  632. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_migration_rehearsal.py +0 -0
  633. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_migration_setup_drift.py +0 -0
  634. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_minimal_lineage_contract.py +0 -0
  635. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_minimal_lineage_packaging.py +0 -0
  636. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_next_steps.py +0 -0
  637. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_operational_evidence.py +0 -0
  638. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_package_install_failure_taxonomy.py +0 -0
  639. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_participant_sessions.py +0 -0
  640. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_plan_context.py +0 -0
  641. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_pr_outcome_contract.py +0 -0
  642. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_productivity_metrics_contract.py +0 -0
  643. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_productivity_report.py +0 -0
  644. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_productivity_windows.py +0 -0
  645. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_prompts.py +0 -0
  646. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_credentials.py +0 -0
  647. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_fixture_contracts.py +0 -0
  648. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_local_cli.py +0 -0
  649. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_comments.py +0 -0
  650. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_git.py +0 -0
  651. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_pr_worktree.py +0 -0
  652. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_process.py +0 -0
  653. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_repo_paths.py +0 -0
  654. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_text_schema.py +0 -0
  655. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_provider_runners_workspace.py +0 -0
  656. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_campaigns.py +0 -0
  657. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_identity.py +0 -0
  658. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_qualify.py +0 -0
  659. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_release_v141.py +0 -0
  660. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_remote_observer_doctor_1053.py +0 -0
  661. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_remote_qualification_failure_reason_819.py +0 -0
  662. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_remote_session.py +0 -0
  663. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_reviewer_finding_outcome_contract.py +0 -0
  664. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_reviewer_metrics_core.py +0 -0
  665. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_reviewer_spend.py +0 -0
  666. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_role_eligibility.py +0 -0
  667. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_safe_init_1054.py +0 -0
  668. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_session_current.py +0 -0
  669. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_session_lease.py +0 -0
  670. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_slack_contract.py +0 -0
  671. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_slack_ingress.py +0 -0
  672. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_slack_setup.py +0 -0
  673. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_supervised_pilot_contract.py +0 -0
  674. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_supervisor.py +0 -0
  675. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_supervisor_v2.py +0 -0
  676. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_tracker_config.py +0 -0
  677. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_tracker_contract.py +0 -0
  678. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_tracker_queue.py +0 -0
  679. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_trailer_comment_labeler.py +0 -0
  680. {code_mower-1.5.2 → code_mower-1.6.0}/tests/test_work_orders.py +0 -0
  681. {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.5.2
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.5.2`, with package spec
50
- `code-mower==1.5.2`. Confirm the release tag on GitHub Releases and the package
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/v152-release-notes.md)
55
- and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/v152-qualification.md).
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, such as the
64
- [`v1.5.2` guide](https://github.com/codemower-ai/code-mower/blob/v1.5.2/docs/try-in-10-minutes.md),
65
- and confirm the tag and package exist before using pinned install commands.
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.5.2 release. Devin, Grok
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.5.2 retains the basic Slack control surface introduced in v1.5.0 for one
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.5.2 posture |
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 telemetry/Board links, and rich Slack UX are outside v1.5.2. The current priorities
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.5.2. It is separately installed into an operator-owned
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.5.2`, with package spec
14
- `code-mower==1.5.2`. Confirm the release tag on GitHub Releases and the package
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/v152-release-notes.md)
19
- and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/v152-qualification.md).
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, such as the
28
- [`v1.5.2` guide](https://github.com/codemower-ai/code-mower/blob/v1.5.2/docs/try-in-10-minutes.md),
29
- and confirm the tag and package exist before using pinned install commands.
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.5.2 release. Devin, Grok
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.5.2 retains the basic Slack control surface introduced in v1.5.0 for one
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.5.2 posture |
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 telemetry/Board links, and rich Slack UX are outside v1.5.2. The current priorities
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.5.2. It is separately installed into an operator-owned
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 62 supporting, 53 frozen, and 5 archived document(s).
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, parsed repo hint, serving version, installed package version,
919
- `restart_recommended`, health, and next action. Local cwd paths are redacted by
920
- default; `--show-local-paths` is for local debugging only. If the host blocks
921
- listener inspection, the command reports an unavailable inventory instead of
922
- calling GitHub or reading repository content.
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, the operation reports
66
- `delayed_health_failed`: the service applied but its binding never validated.
67
- This is the one failure that is *not* in the fail-closed table below, and the
68
- difference matters. The refusals below are decided before anything is applied
69
- and leave no local state behind; `delayed_health_failed` is decided after
70
- launchd already holds the job, so the definition stays installed and
71
- `board service status` keeps reporting the failing binding until you repair or
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`, and
148
- a failed bootstrap restores exactly the previous definition or reports
149
- `rollback_failed`. The swap is also the point at which the original contents
150
- stop existing, so it happens only once the old job is established as unloaded --
151
- a `bootout` that succeeded, or the same positively-confirmed absence `remove`
152
- requires. Writing over a job launchd still holds would fail the bootstrap anyway
153
- (launchd will not accept a label its domain already holds) and the rollback
154
- would then preserve the replacement rather than an original that is by then
155
- gone, so that case refuses as `unload_failed` and changes nothing. A write that fails outright leaves the previous definition on
156
- disk untouched, so recovery there is to load it again rather than to restore it;
157
- either way the payload's `rollback` field says whether the previous service came
158
- back.
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
- In v1.5.2 the inventory is global: use `code-mower board list --json`, then
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. Static HTML
310
- and `lanes status` are not version-verification surfaces in this release.
311
-
312
- When a transient Board needs to survive logout, stop it with the exact selector
313
- reported by `board list`, then review and install a managed definition with
314
- `board service render` and `board service install`. When a managed Board is
315
- stale, use `board service restart` with the same repository path and port.
316
- Repository-filtered inventory, version parity in `lanes status`, and copyable
317
- promotion/restart guidance are tracked for v1.6.0 in
318
- [#1063](https://github.com/codemower-ai/code-mower/issues/1063); do not use
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.5.2 Client Surface
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.5.2`, with package spec
26
- `code-mower==1.5.2`. Confirm the release tag on GitHub Releases and the package
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. See the
29
- [v1.5.2 release notes](https://github.com/codemower-ai/code-mower/blob/main/docs/v152-release-notes.md)
30
- and [qualification contract](https://github.com/codemower-ai/code-mower/blob/main/docs/v152-qualification.md).
31
- After publication, the GitHub Release and linked release issue carry the
32
- observed source SHA, artifact digests, canary outcomes, publication run and
33
- reinstall evidence.
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.5.2 supports one private workspace with explicit member, repository
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. Telemetry, Board links, Slack Connect, public
139
- channels and richer Slack UX remain planned v1.6 work.
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 is the current supported package. It retains the
151
- basic Slack boundary from v1.5.0 and adds the five reliability revisions from
152
- #1050: hosted-install clarity, host-independent tests, lane-exact audit seals,
153
- checkout-free remote doctor, safe existing-repository initialization, and
154
- clearer status/version reporting.
155
-
156
- The [v1.6.0 milestone](https://github.com/codemower-ai/code-mower/milestone/2)
157
- and [epic #1066](https://github.com/codemower-ai/code-mower/issues/1066) are the
158
- live trackers. The planned children are:
159
-
160
- 1. Board inventory filters, version parity, stale detection, and service
161
- guidance ([#1063](https://github.com/codemower-ai/code-mower/issues/1063));
162
- 2. doctor warning taxonomy and hosted-posture scope
163
- ([#1064](https://github.com/codemower-ai/code-mower/issues/1064));
164
- 3. hosted adoption prompts, current documentation, and a normal 24-hour release
165
- soak with two independent install or upgrade passes
166
- ([#1065](https://github.com/codemower-ai/code-mower/issues/1065));
167
- 4. the closed, versioned optional Slack telemetry contract and OSS emitters
168
- ([#921](https://github.com/codemower-ai/code-mower/issues/921)); and
169
- 5. hosted validation, aggregation, export/deletion, and fresh authenticated
170
- views for that contract
171
- ([#978](https://github.com/codemower-ai/code-mower/issues/978)).
172
-
173
- #1063, #1064, and the documentation portion of #1065 can proceed in parallel.
174
- #921 freezes the shared contract and fixtures before #978 enables hosted
175
- ingest. None of this planned work is part of v1.5.2.
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
- Slack telemetry/Board/cloud links and rich UX remain v1.6.0. Slack consumes the
342
- durable lifecycle instead of scraping terminal or Board output and carries no
343
- raw private context or private reviewer findings.
344
-
345
- The source implementation and qualification contract are complete. Consult #923
346
- and the GitHub Release for the observed lifecycle, canary, publication and
347
- canonical reinstall state.
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