code-mower 1.3.1__tar.gz → 1.4.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 (503) hide show
  1. code_mower-1.4.0/PKG-INFO +336 -0
  2. code_mower-1.4.0/README.md +300 -0
  3. {code_mower-1.3.1 → code_mower-1.4.0}/pyproject.toml +2 -2
  4. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/__init__.py +1 -1
  5. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/board.py +16 -0
  6. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cli.py +4 -1
  7. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud.py +36 -1
  8. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/__init__.py +18 -0
  9. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/events.py +11 -0
  10. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/export.py +8 -4
  11. code_mower-1.4.0/src/code_mower/cloud_client/git_metadata.py +344 -0
  12. code_mower-1.4.0/src/code_mower/cloud_client/manifest.py +90 -0
  13. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/operations.py +98 -6
  14. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/tokens.py +61 -2
  15. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/upload.py +29 -1
  16. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/config.py +24 -0
  17. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_command.py +5 -5
  18. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_delivery.py +9 -5
  19. code_mower-1.4.0/src/code_mower/context_graph.py +279 -0
  20. code_mower-1.4.0/src/code_mower/context_graph_command.py +167 -0
  21. code_mower-1.4.0/src/code_mower/context_graph_lifecycle.py +3524 -0
  22. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_guided.py +6 -5
  23. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_prepare.py +3 -2
  24. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_store.py +17 -2
  25. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/devin_api.py +32 -121
  26. code_mower-1.4.0/src/code_mower/devin_readiness.py +1061 -0
  27. code_mower-1.4.0/src/code_mower/devin_review.py +178 -0
  28. code_mower-1.4.0/src/code_mower/devin_sessions.py +439 -0
  29. code_mower-1.4.0/src/code_mower/devin_work_orders.py +556 -0
  30. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor.py +9 -0
  31. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/__init__.py +3 -0
  32. code_mower-1.4.0/src/code_mower/doctor_checks/devin.py +189 -0
  33. code_mower-1.4.0/src/code_mower/doctor_checks/provider_local_cli_commands.py +30 -0
  34. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/providers.py +50 -0
  35. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/registry.py +8 -0
  36. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/runner.py +46 -1
  37. code_mower-1.4.0/src/code_mower/github_builder_evidence.py +131 -0
  38. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/init.py +45 -2
  39. code_mower-1.4.0/src/code_mower/local_cli_commands.py +39 -0
  40. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/migration_install.py +71 -22
  41. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/migration_readiness.py +84 -2
  42. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/migration_rehearsal.py +24 -1
  43. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/next_steps.py +32 -0
  44. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/package.py +164 -1
  45. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/package_content.py +1 -1
  46. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/package_manifest.py +44 -0
  47. code_mower-1.4.0/src/code_mower/participants.py +383 -0
  48. code_mower-1.4.0/src/code_mower/provider_capabilities.py +191 -0
  49. code_mower-1.4.0/src/code_mower/provider_capabilities.schema.json +93 -0
  50. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_registry.py +9 -3
  51. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/release_campaigns.py +54 -11
  52. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/release_qualify.py +4 -3
  53. code_mower-1.4.0/src/code_mower/release_readiness.py +1888 -0
  54. code_mower-1.4.0/src/code_mower/remote_session.py +361 -0
  55. code_mower-1.4.0/src/code_mower/remote_session.schema.json +130 -0
  56. code_mower-1.4.0/src/code_mower/remote_session_cli.py +76 -0
  57. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/session.py +48 -8
  58. code_mower-1.4.0/src/code_mower/slack_contract.py +154 -0
  59. code_mower-1.4.0/src/code_mower/slack_contract.schema.json +552 -0
  60. code_mower-1.4.0/src/code_mower/slack_ingress.py +440 -0
  61. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/providers.yml +23 -3
  62. code_mower-1.4.0/src/code_mower/templates/slack/app-manifest.json +36 -0
  63. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
  64. code_mower-1.4.0/src/code_mower.egg-info/PKG-INFO +336 -0
  65. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower.egg-info/SOURCES.txt +32 -0
  66. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower.egg-info/requires.txt +1 -0
  67. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/devin.yml +13 -3
  68. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/devin_cli.yml +10 -0
  69. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers.yml +23 -3
  70. code_mower-1.4.0/templates/slack/app-manifest.json +36 -0
  71. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/builder-provenance.yml.j2 +1 -1
  72. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_cloud_client.py +1052 -1
  73. code_mower-1.4.0/tests/test_cloud_git_metadata.py +211 -0
  74. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_delivery.py +44 -5
  75. code_mower-1.4.0/tests/test_context_graph.py +389 -0
  76. code_mower-1.4.0/tests/test_context_graph_lifecycle.py +3186 -0
  77. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_guided.py +69 -0
  78. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_devin_api.py +28 -1
  79. code_mower-1.4.0/tests/test_devin_capabilities.py +356 -0
  80. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_devin_provider_contract.py +4 -1
  81. code_mower-1.4.0/tests/test_devin_review.py +416 -0
  82. code_mower-1.4.0/tests/test_devin_sessions.py +388 -0
  83. code_mower-1.4.0/tests/test_devin_setup_readiness.py +1895 -0
  84. code_mower-1.4.0/tests/test_devin_work_orders.py +999 -0
  85. code_mower-1.4.0/tests/test_documentation.py +147 -0
  86. code_mower-1.4.0/tests/test_github_builder_evidence.py +80 -0
  87. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_migration_rehearsal.py +17 -1
  88. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_participant_sessions.py +59 -0
  89. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_release_campaigns.py +91 -2
  90. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_release_hygiene.py +2988 -137
  91. code_mower-1.4.0/tests/test_remote_session.py +354 -0
  92. code_mower-1.4.0/tests/test_slack_contract.py +174 -0
  93. code_mower-1.4.0/tests/test_slack_ingress.py +487 -0
  94. code_mower-1.3.1/PKG-INFO +0 -708
  95. code_mower-1.3.1/README.md +0 -673
  96. code_mower-1.3.1/src/code_mower/cloud_client/git_metadata.py +0 -46
  97. code_mower-1.3.1/src/code_mower/cloud_client/manifest.py +0 -39
  98. code_mower-1.3.1/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -47
  99. code_mower-1.3.1/src/code_mower/participants.py +0 -179
  100. code_mower-1.3.1/src/code_mower/release_readiness.py +0 -567
  101. code_mower-1.3.1/src/code_mower.egg-info/PKG-INFO +0 -708
  102. code_mower-1.3.1/tests/test_cloud_git_metadata.py +0 -60
  103. {code_mower-1.3.1 → code_mower-1.4.0}/CODE_OF_CONDUCT.md +0 -0
  104. {code_mower-1.3.1 → code_mower-1.4.0}/LICENSE +0 -0
  105. {code_mower-1.3.1 → code_mower-1.4.0}/MANIFEST.in +0 -0
  106. {code_mower-1.3.1 → code_mower-1.4.0}/NOTICE +0 -0
  107. {code_mower-1.3.1 → code_mower-1.4.0}/SUPPORT.md +0 -0
  108. {code_mower-1.3.1 → code_mower-1.4.0}/requirements/requirements.txt +0 -0
  109. {code_mower-1.3.1 → code_mower-1.4.0}/setup.cfg +0 -0
  110. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/adapters/__init__.py +0 -0
  111. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/adapters/_base.py +0 -0
  112. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  113. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/adapters/gitar.py +0 -0
  114. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/adapters/greptile.py +0 -0
  115. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/adapters/qodo.py +0 -0
  116. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  117. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/antigravity_sdk_probe.py +0 -0
  118. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/audit_handoff_log.py +0 -0
  119. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/audit_labeler_lib.py +0 -0
  120. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/audit_limits.py +0 -0
  121. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/audit_progress.py +0 -0
  122. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/blind_review_artifacts.py +0 -0
  123. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/blind_review_coordinator.py +0 -0
  124. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/board_store.py +0 -0
  125. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/bootstrap.py +0 -0
  126. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/builder_experiment.py +0 -0
  127. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/builder_runs.py +0 -0
  128. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/__init__.py +0 -0
  129. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/arms.py +0 -0
  130. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/auto_discovery.py +0 -0
  131. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/commands.py +0 -0
  132. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/context_inputs.py +0 -0
  133. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/corpus.py +0 -0
  134. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/effect_report.py +0 -0
  135. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/evidence.py +0 -0
  136. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/evidence_report.py +0 -0
  137. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/identity.py +0 -0
  138. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/metrics.py +0 -0
  139. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/overlap.py +0 -0
  140. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/planning.py +0 -0
  141. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/policy.py +0 -0
  142. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/results.py +0 -0
  143. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/run_results.py +0 -0
  144. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/run_status.py +0 -0
  145. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/runner.py +0 -0
  146. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/truth.py +0 -0
  147. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/calibration/value_report.py +0 -0
  148. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/campaign_adapters.py +0 -0
  149. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/campaign_discovery.py +0 -0
  150. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/checks.py +0 -0
  151. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/claude_audit_pr.py +0 -0
  152. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/claude_cli_bounce.py +0 -0
  153. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/claude_cli_environment.py +0 -0
  154. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/clear_stale.py +0 -0
  155. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/adoption_runs.py +0 -0
  156. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/bundle.py +0 -0
  157. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/doctor.py +0 -0
  158. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/dogfood.py +0 -0
  159. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/endpoints.py +0 -0
  160. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/errors.py +0 -0
  161. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/finding_outcomes.py +0 -0
  162. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
  163. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/productivity.py +0 -0
  164. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/productivity_windows.py +0 -0
  165. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/reports.py +0 -0
  166. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/setup.py +0 -0
  167. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/cloud_client/work_types.py +0 -0
  168. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/code_mower_calibration.py +0 -0
  169. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/code_mower_context_packs.py +0 -0
  170. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/code_mower_merge.py +0 -0
  171. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/code_mower_telemetry.py +0 -0
  172. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  173. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/codex_audit_env_preflight.py +0 -0
  174. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/codex_audit_pr.py +0 -0
  175. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  176. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  177. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_audit.py +0 -0
  178. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_connections.py +0 -0
  179. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_contract.py +0 -0
  180. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_packets.py +0 -0
  181. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_readiness.py +0 -0
  182. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_review.py +0 -0
  183. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/context_session.py +0 -0
  184. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/controller.py +0 -0
  185. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/coworker_mcp.py +0 -0
  186. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/coworker_retrieval.py +0 -0
  187. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/decisions.py +0 -0
  188. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/devin_cli_audit_pr.py +0 -0
  189. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/adoption.py +0 -0
  190. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/audit_limits.py +0 -0
  191. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
  192. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/cloud.py +0 -0
  193. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/common.py +0 -0
  194. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github.py +0 -0
  195. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions.py +0 -0
  196. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  197. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  198. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  199. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  200. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  201. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  202. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  203. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  204. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_api.py +0 -0
  205. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_branch.py +0 -0
  206. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_config.py +0 -0
  207. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_human_token.py +0 -0
  208. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_provider.py +0 -0
  209. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_repo.py +0 -0
  210. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
  211. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/groups.py +0 -0
  212. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/jira.py +0 -0
  213. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/models.py +0 -0
  214. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/output.py +0 -0
  215. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/presets.py +0 -0
  216. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/privacy.py +0 -0
  217. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  218. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  219. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  220. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_env.py +0 -0
  221. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  222. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  223. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
  224. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  225. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  226. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  227. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  228. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  229. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  230. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  231. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  232. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/runtime.py +0 -0
  233. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  234. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
  235. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
  236. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/file_locks.py +0 -0
  237. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/gate_health.py +0 -0
  238. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  239. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/git_identity.py +0 -0
  240. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/grok_build_audit_pr.py +0 -0
  241. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  242. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/jira_cloud.py +0 -0
  243. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/jira_mutations.py +0 -0
  244. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/jira_pr_sync.py +0 -0
  245. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/__init__.py +0 -0
  246. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/aider.py +0 -0
  247. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  248. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/claude.py +0 -0
  249. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/codex.py +0 -0
  250. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/devin.py +0 -0
  251. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/devin_cli.py +0 -0
  252. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  253. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/grok_build.py +0 -0
  254. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  255. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/local_llm.py +0 -0
  256. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_configs/muse_cli.py +0 -0
  257. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_delivery.py +0 -0
  258. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/lane_status.py +0 -0
  259. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/local_llm_audit_pr.py +0 -0
  260. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/local_llm_bakeoff.py +0 -0
  261. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/local_llm_calibration.py +0 -0
  262. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/local_llm_profiles.py +0 -0
  263. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/migration.py +0 -0
  264. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/migration_mirror.py +0 -0
  265. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/muse_cli_audit_pr.py +0 -0
  266. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/package_paths.py +0 -0
  267. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/package_rendering.py +0 -0
  268. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/package_static.py +0 -0
  269. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/plan_context.py +0 -0
  270. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/productivity_report.py +0 -0
  271. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/prompts.py +0 -0
  272. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_credentials.py +0 -0
  273. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/__init__.py +0 -0
  274. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/comments.py +0 -0
  275. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/exit_codes.py +0 -0
  276. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/git.py +0 -0
  277. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/github_auth.py +0 -0
  278. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/github_pr.py +0 -0
  279. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  280. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/process.py +0 -0
  281. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/repo_paths.py +0 -0
  282. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/text_schema.py +0 -0
  283. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  284. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/provider_runners/workspace.py +0 -0
  285. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/providers/__init__.py +0 -0
  286. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/providers/local_cli.py +0 -0
  287. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/providers/provenance.py +0 -0
  288. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/reviewer_metrics.py +0 -0
  289. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/reviewer_spend.py +0 -0
  290. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/saas_reviewer_labeler.py +0 -0
  291. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/secrets.py +0 -0
  292. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/session_lease.py +0 -0
  293. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/builder-experiment.example.json +0 -0
  294. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  295. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/calibration-corpus.json +0 -0
  296. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/code-mower.example.yml +0 -0
  297. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/context-packs.example.json +0 -0
  298. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  299. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  300. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  301. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  302. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  303. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  304. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  305. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
  306. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  307. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/README.md +0 -0
  308. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/claude.md +0 -0
  309. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/codex.md +0 -0
  310. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/cursor.md +0 -0
  311. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/devin.md +0 -0
  312. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/generic.md +0 -0
  313. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
  314. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/code_mower +0 -0
  315. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  316. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  317. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  318. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  319. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
  320. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  321. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/product-support/status_report.py +0 -0
  322. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  323. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  324. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  325. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  326. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  327. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  328. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
  329. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  330. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  331. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  332. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  333. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
  334. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  335. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  336. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  337. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  338. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  339. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
  340. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/tracker_contract.py +0 -0
  341. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/tracker_queue.py +0 -0
  342. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/trailer_comment_labeler.py +0 -0
  343. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/versioning.py +0 -0
  344. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/work_orders.py +0 -0
  345. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/workflow_actionlint.py +0 -0
  346. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower/yaml_subset.py +0 -0
  347. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower.egg-info/dependency_links.txt +0 -0
  348. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower.egg-info/entry_points.txt +0 -0
  349. {code_mower-1.3.1 → code_mower-1.4.0}/src/code_mower.egg-info/top_level.txt +0 -0
  350. {code_mower-1.3.1 → code_mower-1.4.0}/templates/builder-experiment.example.json +0 -0
  351. {code_mower-1.3.1 → code_mower-1.4.0}/templates/calibration-corpus.example.json +0 -0
  352. {code_mower-1.3.1 → code_mower-1.4.0}/templates/calibration-corpus.json +0 -0
  353. {code_mower-1.3.1 → code_mower-1.4.0}/templates/code-mower.yml.j2 +0 -0
  354. {code_mower-1.3.1 → code_mower-1.4.0}/templates/context-packs.example.json +0 -0
  355. {code_mower-1.3.1 → code_mower-1.4.0}/templates/cursor/BUGBOT.md +0 -0
  356. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/README.md +0 -0
  357. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/claude.md +0 -0
  358. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/codex.md +0 -0
  359. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/cursor.md +0 -0
  360. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/devin.md +0 -0
  361. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/generic.md +0 -0
  362. {code_mower-1.3.1 → code_mower-1.4.0}/templates/lanes/run_mac_lane.sh +0 -0
  363. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/acp_bridge.yml +0 -0
  364. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/aider.yml +0 -0
  365. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/antigravity_cli.yml +0 -0
  366. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/claude_audit.yml +0 -0
  367. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/claude_review.yml +0 -0
  368. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/coderabbit_cli.yml +0 -0
  369. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/codex.yml +0 -0
  370. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/cursor_bugbot.yml +0 -0
  371. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/cursor_cloud_agent.yml +0 -0
  372. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/gemini_cli.yml +0 -0
  373. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/gitar.yml +0 -0
  374. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/greptile.yml +0 -0
  375. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/hermes_cli.yml +0 -0
  376. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/local_llm.yml +0 -0
  377. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/muse_cli.yml +0 -0
  378. {code_mower-1.3.1 → code_mower-1.4.0}/templates/providers/qodo.yml +0 -0
  379. {code_mower-1.3.1 → code_mower-1.4.0}/templates/reviewer-spend.example.json +0 -0
  380. {code_mower-1.3.1 → code_mower-1.4.0}/templates/reviewer-value-report.example.md +0 -0
  381. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  382. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  383. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  384. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  385. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  386. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/code-mower-gate.yml.j2 +0 -0
  387. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  388. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  389. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  390. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  391. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  392. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  393. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  394. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  395. {code_mower-1.3.1 → code_mower-1.4.0}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  396. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_adoption_diagnostics.py +0 -0
  397. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_adoption_result_semantics.py +0 -0
  398. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_adoption_run_contract.py +0 -0
  399. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_antigravity_cli_audit_pr.py +0 -0
  400. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_antigravity_sdk_probe.py +0 -0
  401. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_audit_comment_posture.py +0 -0
  402. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_audit_limits.py +0 -0
  403. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_board.py +0 -0
  404. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_board_lease.py +0 -0
  405. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_builder_experiment.py +0 -0
  406. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_builder_identity.py +0 -0
  407. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_builder_runs.py +0 -0
  408. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_calibration_effect_report.py +0 -0
  409. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_calibration_truth.py +0 -0
  410. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_campaign_adapters.py +0 -0
  411. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_campaign_discovery.py +0 -0
  412. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_campaign_gh_auth_and_issue_binding_817.py +0 -0
  413. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_campaign_retry_evidence_711.py +0 -0
  414. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_checks.py +0 -0
  415. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_claude_audit_pr.py +0 -0
  416. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_claude_cli_bounce.py +0 -0
  417. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_clear_stale.py +0 -0
  418. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_cloud_manifest.py +0 -0
  419. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_cloud_reports.py +0 -0
  420. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  421. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_codex_audit_env_preflight.py +0 -0
  422. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_codex_audit_pr.py +0 -0
  423. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_audit.py +0 -0
  424. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_command.py +0 -0
  425. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_connections.py +0 -0
  426. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_contract.py +0 -0
  427. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_packets.py +0 -0
  428. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_prepare.py +0 -0
  429. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_readiness.py +0 -0
  430. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_review.py +0 -0
  431. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_context_session.py +0 -0
  432. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_controller.py +0 -0
  433. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_coworker_mcp.py +0 -0
  434. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_coworker_retrieval.py +0 -0
  435. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_decision_audit_integration.py +0 -0
  436. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_decisions.py +0 -0
  437. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_devin_builder_lane.py +0 -0
  438. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_devin_cli_audit_pr.py +0 -0
  439. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_actions_cost_summary.py +0 -0
  440. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_actions_failure_selection.py +0 -0
  441. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_boundaries.py +0 -0
  442. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_campaign_auth.py +0 -0
  443. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_campaign_readiness.py +0 -0
  444. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_github_checks.py +0 -0
  445. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_output.py +0 -0
  446. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_privacy.py +0 -0
  447. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_provider_env_required.py +0 -0
  448. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_provider_env_tokens.py +0 -0
  449. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_provider_local_audit_setup.py +0 -0
  450. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_provider_probe.py +0 -0
  451. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_provider_review_hygiene.py +0 -0
  452. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_registry.py +0 -0
  453. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_runtime.py +0 -0
  454. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_self_hosted_runner.py +0 -0
  455. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_doctor_supervised_pilot.py +0 -0
  456. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_file_locks.py +0 -0
  457. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_fork_pr_guard.py +0 -0
  458. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_gate_automerge.py +0 -0
  459. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_gate_health.py +0 -0
  460. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_hosted_dispatch_profile.py +0 -0
  461. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_init_actionlint.py +0 -0
  462. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_init_build_loop.py +0 -0
  463. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_jira_adoption.py +0 -0
  464. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_jira_cloud.py +0 -0
  465. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_jira_mutations.py +0 -0
  466. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_jira_pr_sync.py +0 -0
  467. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_lane_delivery_contract.py +0 -0
  468. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_lane_status.py +0 -0
  469. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_local_llm_github_helpers.py +0 -0
  470. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_migration_setup_drift.py +0 -0
  471. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_next_steps.py +0 -0
  472. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_package_install_failure_taxonomy.py +0 -0
  473. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_plan_context.py +0 -0
  474. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_pr_outcome_contract.py +0 -0
  475. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_pr_outcome_coverage.py +0 -0
  476. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_productivity_metrics_contract.py +0 -0
  477. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_productivity_report.py +0 -0
  478. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_productivity_windows.py +0 -0
  479. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_prompts.py +0 -0
  480. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_credentials.py +0 -0
  481. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_fixture_contracts.py +0 -0
  482. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_local_cli.py +0 -0
  483. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_comments.py +0 -0
  484. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_git.py +0 -0
  485. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_github_pr.py +0 -0
  486. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_pr_worktree.py +0 -0
  487. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_process.py +0 -0
  488. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_repo_paths.py +0 -0
  489. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_text_schema.py +0 -0
  490. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_provider_runners_workspace.py +0 -0
  491. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_release_qualify.py +0 -0
  492. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_remote_qualification_failure_reason_819.py +0 -0
  493. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_reviewer_finding_outcome_contract.py +0 -0
  494. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_reviewer_metrics_core.py +0 -0
  495. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_reviewer_spend.py +0 -0
  496. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_session_lease.py +0 -0
  497. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_supervised_pilot_contract.py +0 -0
  498. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_tracker_config.py +0 -0
  499. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_tracker_contract.py +0 -0
  500. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_tracker_queue.py +0 -0
  501. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_trailer_comment_labeler.py +0 -0
  502. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_work_orders.py +0 -0
  503. {code_mower-1.3.1 → code_mower-1.4.0}/tests/test_work_type_contract.py +0 -0
@@ -0,0 +1,336 @@
1
+ Metadata-Version: 2.4
2
+ Name: code-mower
3
+ Version: 1.4.0
4
+ Summary: Multi-reviewer AI code audit orchestration
5
+ License-Expression: Apache-2.0
6
+ Project-URL: Homepage, https://github.com/codemower-ai/code-mower
7
+ Project-URL: Documentation, https://github.com/codemower-ai/code-mower#readme
8
+ Project-URL: Repository, https://github.com/codemower-ai/code-mower
9
+ Project-URL: Issues, https://github.com/codemower-ai/code-mower/issues
10
+ Project-URL: Changelog, https://github.com/codemower-ai/code-mower/blob/main/CHANGELOG.md
11
+ Keywords: ai,code-review,github-actions,developer-tools
12
+ Classifier: Environment :: Console
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Software Development :: Quality Assurance
19
+ Requires-Python: >=3.12
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ License-File: NOTICE
23
+ Requires-Dist: PyYAML>=6.0
24
+ Requires-Dist: packaging>=23.2
25
+ Provides-Extra: coworker
26
+ Requires-Dist: mcp<2.3,>=2.2.0; extra == "coworker"
27
+ Requires-Dist: httpx2<3,>=2.12; extra == "coworker"
28
+ Requires-Dist: PyJWT[crypto]<3,>=2.10; extra == "coworker"
29
+ Requires-Dist: keyring<26,>=25; extra == "coworker"
30
+ Provides-Extra: test
31
+ Requires-Dist: build>=1.2; extra == "test"
32
+ Requires-Dist: pytest>=8.0; extra == "test"
33
+ Requires-Dist: ruff>=0.8; extra == "test"
34
+ Requires-Dist: twine>=5.0; extra == "test"
35
+ Dynamic: license-file
36
+
37
+ # Code Mower
38
+
39
+ Code Mower adds a supervised operating layer around AI coding agents. It helps
40
+ teams give one builder ownership of a change, obtain independent reviews on the
41
+ current pull-request head, recover stalled work, and measure which builder and
42
+ reviewer combinations are useful on their own codebase.
43
+
44
+ The current release is supervised-pilot, bring-your-own-agent-loop software.
45
+ It is not a drop-in unattended merge gate. Humans still own credentials,
46
+ repository policy, reviewer promotion, and exceptional decisions.
47
+
48
+ The current package-index release baseline is `v1.4.0`, with pinned package
49
+ install spec `code-mower==1.4.0`. Release evidence is recorded on the GitHub
50
+ release and in the first-user install rehearsal.
51
+
52
+ Documentation on `main` follows the source on `main`. When using the published
53
+ package, start with the
54
+ [`v1.4.0` guide](https://github.com/codemower-ai/code-mower/blob/v1.4.0/docs/try-in-10-minutes.md).
55
+
56
+ ## What Code Mower Adds
57
+
58
+ You can run Claude Code, Codex, Devin, or another coding agent directly. Code
59
+ Mower supplies the shared workflow around them:
60
+
61
+ - one orchestrator and one writer per branch;
62
+ - provider-neutral work orders, handoffs, status, and recovery;
63
+ - independent, structured reviews bound to the current PR head;
64
+ - repository-specific calibration before a reviewer gains merge authority;
65
+ - local reports for quality, latency, cost, interventions, and outcomes;
66
+ - setup diagnostics for provider auth, GitHub permissions, and private-repo
67
+ Actions cost; and
68
+ - optional, explicitly authorized organizational context and metadata sharing.
69
+
70
+ The default setup is deliberately small: Claude Code and Codex. Additional
71
+ participants are opt-in and keep their own execution, privacy, cost, and
72
+ promotion requirements.
73
+
74
+ ## Start Here
75
+
76
+ Code Mower requires Python 3.12 or newer. A laptop or workstation should use
77
+ one stable `pipx` installation:
78
+
79
+ ```bash
80
+ python3.12 --version
81
+ export CODE_MOWER_PYTHON="$(command -v python3.12)"
82
+ pipx install --python "$CODE_MOWER_PYTHON" code-mower==1.4.0
83
+ command -v code-mower
84
+ code-mower --version
85
+ ```
86
+
87
+ Hosted agents and CI machines can use `uv tool install`; contributors should
88
+ use `scripts/dev-python` and an editable virtual environment. The
89
+ [Install And Bootstrap](docs/install.md) guide gives the exact cold-install,
90
+ upgrade, optional Coworker, and contributor commands.
91
+
92
+ From the repository you want to pilot:
93
+
94
+ ```bash
95
+ code-mower init --easy
96
+ code-mower init --easy --apply --output-dir .code-mower.generated
97
+ code-mower doctor --adoption --repo OWNER/REPO
98
+ code-mower lanes status --repo OWNER/REPO
99
+ ```
100
+
101
+ `init --easy` previews the Claude + Codex setup and changes nothing. `--apply`
102
+ writes a reviewable generated tree; it does not copy those files into your
103
+ repository, start a provider, enable auto-merge, or upload data. Review and
104
+ edit the generated configuration before opening the setup PR.
105
+
106
+ To inspect representative output first, use the
107
+ [synthetic calibration example](examples/demo-calibration/README.md) and
108
+ [Board demo](examples/board-demo/README.md).
109
+
110
+ Follow [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md) to run Codex
111
+ and Claude manually against that first PR. Automation tokens, recurring
112
+ dispatch, branch-protection changes, and auto-merge are not prerequisites for
113
+ the manual reviewer-gate pilot.
114
+
115
+ After the first peer-review loop works, follow
116
+ [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md) to add automated
117
+ builder dispatch and the stricter promoted-pilot repository settings.
118
+
119
+ ## Participants And Sessions
120
+
121
+ Choose participants interactively or explicitly:
122
+
123
+ ```bash
124
+ code-mower init --interactive
125
+ code-mower init --with claude,codex,devin
126
+ ```
127
+
128
+ Both commands preview by default. Add `--apply` only when you are ready to
129
+ write the generated setup.
130
+
131
+ The agent that starts a session is the implicit orchestrator:
132
+
133
+ ```bash
134
+ code-mower session start \
135
+ --repo OWNER/REPO \
136
+ --with claude,codex,devin \
137
+ --host codex
138
+ ```
139
+
140
+ `session start` saves an operating brief and takes the local single-orchestrator
141
+ lease. It does not launch every selected product. The host uses the execution
142
+ paths available for each participant and records explicit handoffs where Code
143
+ Mower has no automatic transport.
144
+
145
+ Codex, Claude Code, and Cursor are qualified for the shared session, telemetry,
146
+ lease, and Jira-authority contract in v1.4.0. Devin, Grok Bot, Antigravity,
147
+ Muse, and custom hosts are recognized for briefs and provenance, while their
148
+ execution remains an explicit handoff or provider-specific transport. See
149
+ [Participants And Sessions](docs/sessions.md) and the
150
+ [Provider Matrix](docs/provider-matrix.md).
151
+
152
+ ## Optional Organizational Context
153
+
154
+ The base installation works without an organizational-memory provider. The
155
+ optional Coworker integration gives approved Claude, Codex, and Devin roles the same
156
+ bounded, cited evidence through an explicitly selected private account. Account
157
+ identity and credentials stay outside the repository.
158
+
159
+ After installing the optional dependencies and connecting an approved account,
160
+ the guided path carries one work item through retrieval, builder delivery,
161
+ current-head attachment, independent review, and private feedback:
162
+
163
+ ```bash
164
+ code-mower session start --repo OWNER/REPO --host codex --work-item EXAMPLE-123
165
+ code-mower session context prepare .code-mower/sessions/SESSION.json
166
+ code-mower session context deliver .code-mower/sessions/SESSION.json
167
+ code-mower session context attach .code-mower/sessions/SESSION.json --pr 42
168
+ code-mower session context feedback .code-mower/sessions/SESSION.json \
169
+ --reviewer claude
170
+ ```
171
+
172
+ Every delivery and feedback read reauthorizes online. Private evidence and
173
+ private review findings must not be copied into tracked files or public logs.
174
+ Start with [Optional Organizational Context Setup](docs/context-setup.md).
175
+
176
+ ## Roles
177
+
178
+ - **Orchestrator:** the hosting agent by default; coordinates the work item,
179
+ assignments, evidence, reviews, recovery, and owner actions.
180
+ - **Builder:** the only writer for its PR branch.
181
+ - **Reviewer:** an independent current-head audit. A builder's own review does
182
+ not satisfy the peer-review requirement.
183
+ - **Merge authority:** repository policy. Selecting a participant never grants
184
+ it.
185
+ - **Context provider:** supplies approved evidence; it cannot build, review,
186
+ orchestrate, write to the tracker, or merge.
187
+
188
+ Code Mower records builder provenance for Claude Code, Codex, Cursor-style
189
+ hosted builders, Devin, and other authoring lanes. Its generated templates now
190
+ support the supervised issue-to-merge loop end to end, with provider-specific
191
+ adapters handling product differences.
192
+
193
+ ## What Calibration Does And Does Not Prove
194
+
195
+ The generated starter corpus proves that the command and report paths work. It
196
+ does not prove that a reviewer should gate merges.
197
+
198
+ Bootstrap a draft from recent repository history:
199
+
200
+ ```bash
201
+ code-mower calibration auto-discover \
202
+ --repo OWNER/REPO \
203
+ --last-n 20 \
204
+ --output .code-mower/draft-calibration-corpus.json
205
+ ```
206
+
207
+ Review every proposed disposition. Promote a lane only after known-clean and
208
+ known-blocked evidence satisfies the
209
+ [lane promotion policy](docs/lane-promotion-policy.md).
210
+
211
+ ## Local Status And Board
212
+
213
+ `lanes status` is the concise terminal view. The optional Board serves the same
214
+ redacted metadata on loopback:
215
+
216
+ ```bash
217
+ code-mower lanes status --repo OWNER/REPO
218
+ code-mower productivity report --repo OWNER/REPO
219
+ code-mower board serve --repo OWNER/REPO
220
+ ```
221
+
222
+ Plain `board serve` is read-only. Add `--record-events` to append throttled,
223
+ metadata-only local history:
224
+
225
+ ```bash
226
+ code-mower board serve --repo OWNER/REPO --record-events
227
+ code-mower board record --repo OWNER/REPO
228
+ code-mower board events
229
+ code-mower board doctor --repo OWNER/REPO
230
+ code-mower board reset --repo OWNER/REPO --yes
231
+ ```
232
+
233
+ The Board includes the owner queue, reviewer verdict history and spend/latency
234
+ when those local inputs exist. Local paths are redacted by default. The Board
235
+ does not upload data.
236
+
237
+ ## Optional Cloud Sharing
238
+
239
+ The OSS package works without CodeMower.com. Cloud sharing is an explicit,
240
+ dry-run-first path for sanitized metadata and selected reports:
241
+
242
+ ```bash
243
+ code-mower cloud dogfood --json
244
+ code-mower cloud board-snapshot --repo-slug OWNER/REPO --json
245
+ ```
246
+
247
+ Neither command uploads without `--yes`. Default bundles exclude source code,
248
+ raw diffs, model transcripts, raw stdout/stderr, auth output, issue body text,
249
+ local secret values, and secrets. See [Cloud Sharing](docs/cloud-sharing.md)
250
+ and the [Cloud Data Contract](docs/cloud-data-contract.md).
251
+
252
+ ## Current Capabilities And Limits
253
+
254
+ | Area | v1.4.0 posture |
255
+ | --- | --- |
256
+ | Default builders and reviewers | Claude Code + Codex |
257
+ | Session hosts | Codex, Claude Code, and Cursor qualified; other identities recognized but require explicit handoff/provider transport |
258
+ | Devin | Maintained local builder and hosted release-qualification transport; local review remains informational and Devin is not yet a qualified peer orchestrator |
259
+ | Organizational context | Optional Coworker delivery to approved Claude/Codex/Devin roles |
260
+ | Work trackers | GitHub Issues by default; Jira Cloud is optional and guarded |
261
+ | Forge and merge gate | GitHub |
262
+ | Cloud | Optional metadata/report upload; no upload by default |
263
+ | Graphify | Optional bounded local repository-graph provider behind the packet contract; no default dependency and no network access for the provider |
264
+ | Slack | Command and authenticated bounded ingress foundation only; no Slack worker delivery, results, or orchestration authority |
265
+
266
+ GitLab, Bitbucket, broad unattended rollout, uncalibrated merge gates, Devin
267
+ peer-orchestrator/reviewer parity, a required Graphify dependency, and Slack
268
+ worker delivery are not shipped in v1.4.0. The current priorities and
269
+ boundaries are recorded in
270
+ [Current State And Roadmap](docs/current-state-and-roadmap.md).
271
+
272
+ ## Documentation
273
+
274
+ ### Install And First Use
275
+
276
+ - [Install And Bootstrap](docs/install.md)
277
+ - [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md)
278
+ - [Upgrade An Existing Repository](docs/upgrade-existing-repo.md)
279
+ - [Quickstart Reference](docs/quickstart.md)
280
+ - [Troubleshooting](docs/troubleshooting.md)
281
+ - [First Run Transcript](docs/first-run-transcript.md)
282
+
283
+ ### Sessions, Builders, And Reviewers
284
+
285
+ - [Participants And Sessions](docs/sessions.md)
286
+ - [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md)
287
+ - [Build Loop Operations](docs/build-loop.md)
288
+ - [Planning And Work Orders](docs/planning-work-orders.md)
289
+ - [Builder Experiments](docs/builder-experiments.md)
290
+ - [Orchestrator Prompt Pack](docs/orchestrator-prompt-pack.md)
291
+ - [Provider Matrix](docs/provider-matrix.md)
292
+ - [Provider Calibration Scorecard](docs/provider-calibration-scorecard.md)
293
+ - [Devin Peer-Support Qualification](docs/devin-peer-support-qualification.md)
294
+ - [Lane Standing Instructions](docs/lanes/README.md)
295
+ - [Codex Lane](docs/lanes/codex.md)
296
+ - [Claude Lane](docs/lanes/claude.md)
297
+ - [Cursor Lane](docs/lanes/cursor.md)
298
+ - [Devin Lane](docs/lanes/devin.md)
299
+ - [Self-Hosted Mac Runner](docs/self-hosted-mac-runner.md)
300
+ - [Local Audit Runner](docs/local-audit-runner.md)
301
+
302
+ ### Context And Trackers
303
+
304
+ - [Optional Organizational Context Setup](docs/context-setup.md)
305
+ - [Coworker Connections](docs/context-connections.md)
306
+ - [Context Delivery And Private Review](docs/context-delivery.md)
307
+ - [Context Provider Contract](docs/context-provider-contract.md)
308
+ - [Context Packet Schema](docs/context-packet-schema.md)
309
+ - [Jira Cloud Setup](docs/jira-cloud-setup.md)
310
+ - [Jira Adoption Rehearsal](docs/jira-adoption-rehearsal.md)
311
+ - [Work Tracker Data Contract](docs/tracker-data-contract.md)
312
+
313
+ ### Trust, Operations, And Project Records
314
+
315
+ - [Architecture](docs/architecture.md)
316
+ - [Current State And Roadmap](docs/current-state-and-roadmap.md)
317
+ - [Lane Promotion Policy](docs/lane-promotion-policy.md)
318
+ - [Privacy And Threat Model](docs/privacy-threat-model.md)
319
+ - [Board Data Contract](docs/board-data-contract.md)
320
+ - [Cloud Data Contract](docs/cloud-data-contract.md)
321
+ - [Release Qualification](docs/release-qualification.md)
322
+ - [Public Release Checklist](docs/public-release-checklist.md)
323
+ - [v1.4.0 Release Notes](docs/v140-release-notes.md)
324
+ - [Release History And Archived Plans](docs/release-history.md)
325
+ - [Changelog](CHANGELOG.md)
326
+ - [Contributing](CONTRIBUTING.md)
327
+ - [Support](SUPPORT.md)
328
+ - [Security Policy](SECURITY.md)
329
+ - [Code of Conduct](CODE_OF_CONDUCT.md)
330
+
331
+ ## License
332
+
333
+ The Code Mower open-source core is licensed under Apache-2.0. Hosted reporting,
334
+ managed integrations, private telemetry and benchmark products, enterprise
335
+ controls, and support are separate commercial surfaces unless licensed
336
+ otherwise.
@@ -0,0 +1,300 @@
1
+ # Code Mower
2
+
3
+ Code Mower adds a supervised operating layer around AI coding agents. It helps
4
+ teams give one builder ownership of a change, obtain independent reviews on the
5
+ current pull-request head, recover stalled work, and measure which builder and
6
+ reviewer combinations are useful on their own codebase.
7
+
8
+ The current release is supervised-pilot, bring-your-own-agent-loop software.
9
+ It is not a drop-in unattended merge gate. Humans still own credentials,
10
+ repository policy, reviewer promotion, and exceptional decisions.
11
+
12
+ The current package-index release baseline is `v1.4.0`, with pinned package
13
+ install spec `code-mower==1.4.0`. Release evidence is recorded on the GitHub
14
+ release and in the first-user install rehearsal.
15
+
16
+ Documentation on `main` follows the source on `main`. When using the published
17
+ package, start with the
18
+ [`v1.4.0` guide](https://github.com/codemower-ai/code-mower/blob/v1.4.0/docs/try-in-10-minutes.md).
19
+
20
+ ## What Code Mower Adds
21
+
22
+ You can run Claude Code, Codex, Devin, or another coding agent directly. Code
23
+ Mower supplies the shared workflow around them:
24
+
25
+ - one orchestrator and one writer per branch;
26
+ - provider-neutral work orders, handoffs, status, and recovery;
27
+ - independent, structured reviews bound to the current PR head;
28
+ - repository-specific calibration before a reviewer gains merge authority;
29
+ - local reports for quality, latency, cost, interventions, and outcomes;
30
+ - setup diagnostics for provider auth, GitHub permissions, and private-repo
31
+ Actions cost; and
32
+ - optional, explicitly authorized organizational context and metadata sharing.
33
+
34
+ The default setup is deliberately small: Claude Code and Codex. Additional
35
+ participants are opt-in and keep their own execution, privacy, cost, and
36
+ promotion requirements.
37
+
38
+ ## Start Here
39
+
40
+ Code Mower requires Python 3.12 or newer. A laptop or workstation should use
41
+ one stable `pipx` installation:
42
+
43
+ ```bash
44
+ python3.12 --version
45
+ export CODE_MOWER_PYTHON="$(command -v python3.12)"
46
+ pipx install --python "$CODE_MOWER_PYTHON" code-mower==1.4.0
47
+ command -v code-mower
48
+ code-mower --version
49
+ ```
50
+
51
+ Hosted agents and CI machines can use `uv tool install`; contributors should
52
+ use `scripts/dev-python` and an editable virtual environment. The
53
+ [Install And Bootstrap](docs/install.md) guide gives the exact cold-install,
54
+ upgrade, optional Coworker, and contributor commands.
55
+
56
+ From the repository you want to pilot:
57
+
58
+ ```bash
59
+ code-mower init --easy
60
+ code-mower init --easy --apply --output-dir .code-mower.generated
61
+ code-mower doctor --adoption --repo OWNER/REPO
62
+ code-mower lanes status --repo OWNER/REPO
63
+ ```
64
+
65
+ `init --easy` previews the Claude + Codex setup and changes nothing. `--apply`
66
+ writes a reviewable generated tree; it does not copy those files into your
67
+ repository, start a provider, enable auto-merge, or upload data. Review and
68
+ edit the generated configuration before opening the setup PR.
69
+
70
+ To inspect representative output first, use the
71
+ [synthetic calibration example](examples/demo-calibration/README.md) and
72
+ [Board demo](examples/board-demo/README.md).
73
+
74
+ Follow [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md) to run Codex
75
+ and Claude manually against that first PR. Automation tokens, recurring
76
+ dispatch, branch-protection changes, and auto-merge are not prerequisites for
77
+ the manual reviewer-gate pilot.
78
+
79
+ After the first peer-review loop works, follow
80
+ [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md) to add automated
81
+ builder dispatch and the stricter promoted-pilot repository settings.
82
+
83
+ ## Participants And Sessions
84
+
85
+ Choose participants interactively or explicitly:
86
+
87
+ ```bash
88
+ code-mower init --interactive
89
+ code-mower init --with claude,codex,devin
90
+ ```
91
+
92
+ Both commands preview by default. Add `--apply` only when you are ready to
93
+ write the generated setup.
94
+
95
+ The agent that starts a session is the implicit orchestrator:
96
+
97
+ ```bash
98
+ code-mower session start \
99
+ --repo OWNER/REPO \
100
+ --with claude,codex,devin \
101
+ --host codex
102
+ ```
103
+
104
+ `session start` saves an operating brief and takes the local single-orchestrator
105
+ lease. It does not launch every selected product. The host uses the execution
106
+ paths available for each participant and records explicit handoffs where Code
107
+ Mower has no automatic transport.
108
+
109
+ Codex, Claude Code, and Cursor are qualified for the shared session, telemetry,
110
+ lease, and Jira-authority contract in v1.4.0. Devin, Grok Bot, Antigravity,
111
+ Muse, and custom hosts are recognized for briefs and provenance, while their
112
+ execution remains an explicit handoff or provider-specific transport. See
113
+ [Participants And Sessions](docs/sessions.md) and the
114
+ [Provider Matrix](docs/provider-matrix.md).
115
+
116
+ ## Optional Organizational Context
117
+
118
+ The base installation works without an organizational-memory provider. The
119
+ optional Coworker integration gives approved Claude, Codex, and Devin roles the same
120
+ bounded, cited evidence through an explicitly selected private account. Account
121
+ identity and credentials stay outside the repository.
122
+
123
+ After installing the optional dependencies and connecting an approved account,
124
+ the guided path carries one work item through retrieval, builder delivery,
125
+ current-head attachment, independent review, and private feedback:
126
+
127
+ ```bash
128
+ code-mower session start --repo OWNER/REPO --host codex --work-item EXAMPLE-123
129
+ code-mower session context prepare .code-mower/sessions/SESSION.json
130
+ code-mower session context deliver .code-mower/sessions/SESSION.json
131
+ code-mower session context attach .code-mower/sessions/SESSION.json --pr 42
132
+ code-mower session context feedback .code-mower/sessions/SESSION.json \
133
+ --reviewer claude
134
+ ```
135
+
136
+ Every delivery and feedback read reauthorizes online. Private evidence and
137
+ private review findings must not be copied into tracked files or public logs.
138
+ Start with [Optional Organizational Context Setup](docs/context-setup.md).
139
+
140
+ ## Roles
141
+
142
+ - **Orchestrator:** the hosting agent by default; coordinates the work item,
143
+ assignments, evidence, reviews, recovery, and owner actions.
144
+ - **Builder:** the only writer for its PR branch.
145
+ - **Reviewer:** an independent current-head audit. A builder's own review does
146
+ not satisfy the peer-review requirement.
147
+ - **Merge authority:** repository policy. Selecting a participant never grants
148
+ it.
149
+ - **Context provider:** supplies approved evidence; it cannot build, review,
150
+ orchestrate, write to the tracker, or merge.
151
+
152
+ Code Mower records builder provenance for Claude Code, Codex, Cursor-style
153
+ hosted builders, Devin, and other authoring lanes. Its generated templates now
154
+ support the supervised issue-to-merge loop end to end, with provider-specific
155
+ adapters handling product differences.
156
+
157
+ ## What Calibration Does And Does Not Prove
158
+
159
+ The generated starter corpus proves that the command and report paths work. It
160
+ does not prove that a reviewer should gate merges.
161
+
162
+ Bootstrap a draft from recent repository history:
163
+
164
+ ```bash
165
+ code-mower calibration auto-discover \
166
+ --repo OWNER/REPO \
167
+ --last-n 20 \
168
+ --output .code-mower/draft-calibration-corpus.json
169
+ ```
170
+
171
+ Review every proposed disposition. Promote a lane only after known-clean and
172
+ known-blocked evidence satisfies the
173
+ [lane promotion policy](docs/lane-promotion-policy.md).
174
+
175
+ ## Local Status And Board
176
+
177
+ `lanes status` is the concise terminal view. The optional Board serves the same
178
+ redacted metadata on loopback:
179
+
180
+ ```bash
181
+ code-mower lanes status --repo OWNER/REPO
182
+ code-mower productivity report --repo OWNER/REPO
183
+ code-mower board serve --repo OWNER/REPO
184
+ ```
185
+
186
+ Plain `board serve` is read-only. Add `--record-events` to append throttled,
187
+ metadata-only local history:
188
+
189
+ ```bash
190
+ code-mower board serve --repo OWNER/REPO --record-events
191
+ code-mower board record --repo OWNER/REPO
192
+ code-mower board events
193
+ code-mower board doctor --repo OWNER/REPO
194
+ code-mower board reset --repo OWNER/REPO --yes
195
+ ```
196
+
197
+ The Board includes the owner queue, reviewer verdict history and spend/latency
198
+ when those local inputs exist. Local paths are redacted by default. The Board
199
+ does not upload data.
200
+
201
+ ## Optional Cloud Sharing
202
+
203
+ The OSS package works without CodeMower.com. Cloud sharing is an explicit,
204
+ dry-run-first path for sanitized metadata and selected reports:
205
+
206
+ ```bash
207
+ code-mower cloud dogfood --json
208
+ code-mower cloud board-snapshot --repo-slug OWNER/REPO --json
209
+ ```
210
+
211
+ Neither command uploads without `--yes`. Default bundles exclude source code,
212
+ raw diffs, model transcripts, raw stdout/stderr, auth output, issue body text,
213
+ local secret values, and secrets. See [Cloud Sharing](docs/cloud-sharing.md)
214
+ and the [Cloud Data Contract](docs/cloud-data-contract.md).
215
+
216
+ ## Current Capabilities And Limits
217
+
218
+ | Area | v1.4.0 posture |
219
+ | --- | --- |
220
+ | Default builders and reviewers | Claude Code + Codex |
221
+ | Session hosts | Codex, Claude Code, and Cursor qualified; other identities recognized but require explicit handoff/provider transport |
222
+ | Devin | Maintained local builder and hosted release-qualification transport; local review remains informational and Devin is not yet a qualified peer orchestrator |
223
+ | Organizational context | Optional Coworker delivery to approved Claude/Codex/Devin roles |
224
+ | Work trackers | GitHub Issues by default; Jira Cloud is optional and guarded |
225
+ | Forge and merge gate | GitHub |
226
+ | Cloud | Optional metadata/report upload; no upload by default |
227
+ | Graphify | Optional bounded local repository-graph provider behind the packet contract; no default dependency and no network access for the provider |
228
+ | Slack | Command and authenticated bounded ingress foundation only; no Slack worker delivery, results, or orchestration authority |
229
+
230
+ GitLab, Bitbucket, broad unattended rollout, uncalibrated merge gates, Devin
231
+ peer-orchestrator/reviewer parity, a required Graphify dependency, and Slack
232
+ worker delivery are not shipped in v1.4.0. The current priorities and
233
+ boundaries are recorded in
234
+ [Current State And Roadmap](docs/current-state-and-roadmap.md).
235
+
236
+ ## Documentation
237
+
238
+ ### Install And First Use
239
+
240
+ - [Install And Bootstrap](docs/install.md)
241
+ - [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md)
242
+ - [Upgrade An Existing Repository](docs/upgrade-existing-repo.md)
243
+ - [Quickstart Reference](docs/quickstart.md)
244
+ - [Troubleshooting](docs/troubleshooting.md)
245
+ - [First Run Transcript](docs/first-run-transcript.md)
246
+
247
+ ### Sessions, Builders, And Reviewers
248
+
249
+ - [Participants And Sessions](docs/sessions.md)
250
+ - [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md)
251
+ - [Build Loop Operations](docs/build-loop.md)
252
+ - [Planning And Work Orders](docs/planning-work-orders.md)
253
+ - [Builder Experiments](docs/builder-experiments.md)
254
+ - [Orchestrator Prompt Pack](docs/orchestrator-prompt-pack.md)
255
+ - [Provider Matrix](docs/provider-matrix.md)
256
+ - [Provider Calibration Scorecard](docs/provider-calibration-scorecard.md)
257
+ - [Devin Peer-Support Qualification](docs/devin-peer-support-qualification.md)
258
+ - [Lane Standing Instructions](docs/lanes/README.md)
259
+ - [Codex Lane](docs/lanes/codex.md)
260
+ - [Claude Lane](docs/lanes/claude.md)
261
+ - [Cursor Lane](docs/lanes/cursor.md)
262
+ - [Devin Lane](docs/lanes/devin.md)
263
+ - [Self-Hosted Mac Runner](docs/self-hosted-mac-runner.md)
264
+ - [Local Audit Runner](docs/local-audit-runner.md)
265
+
266
+ ### Context And Trackers
267
+
268
+ - [Optional Organizational Context Setup](docs/context-setup.md)
269
+ - [Coworker Connections](docs/context-connections.md)
270
+ - [Context Delivery And Private Review](docs/context-delivery.md)
271
+ - [Context Provider Contract](docs/context-provider-contract.md)
272
+ - [Context Packet Schema](docs/context-packet-schema.md)
273
+ - [Jira Cloud Setup](docs/jira-cloud-setup.md)
274
+ - [Jira Adoption Rehearsal](docs/jira-adoption-rehearsal.md)
275
+ - [Work Tracker Data Contract](docs/tracker-data-contract.md)
276
+
277
+ ### Trust, Operations, And Project Records
278
+
279
+ - [Architecture](docs/architecture.md)
280
+ - [Current State And Roadmap](docs/current-state-and-roadmap.md)
281
+ - [Lane Promotion Policy](docs/lane-promotion-policy.md)
282
+ - [Privacy And Threat Model](docs/privacy-threat-model.md)
283
+ - [Board Data Contract](docs/board-data-contract.md)
284
+ - [Cloud Data Contract](docs/cloud-data-contract.md)
285
+ - [Release Qualification](docs/release-qualification.md)
286
+ - [Public Release Checklist](docs/public-release-checklist.md)
287
+ - [v1.4.0 Release Notes](docs/v140-release-notes.md)
288
+ - [Release History And Archived Plans](docs/release-history.md)
289
+ - [Changelog](CHANGELOG.md)
290
+ - [Contributing](CONTRIBUTING.md)
291
+ - [Support](SUPPORT.md)
292
+ - [Security Policy](SECURITY.md)
293
+ - [Code of Conduct](CODE_OF_CONDUCT.md)
294
+
295
+ ## License
296
+
297
+ The Code Mower open-source core is licensed under Apache-2.0. Hosted reporting,
298
+ managed integrations, private telemetry and benchmark products, enterprise
299
+ controls, and support are separate commercial surfaces unless licensed
300
+ otherwise.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "1.3.1"
7
+ version = "1.4.0"
8
8
  description = "Multi-reviewer AI code audit orchestration"
9
9
  requires-python = ">=3.12"
10
10
  readme = "README.md"
@@ -19,7 +19,7 @@ classifiers = [
19
19
  "Programming Language :: Python :: 3.14",
20
20
  "Topic :: Software Development :: Quality Assurance",
21
21
  ]
22
- dependencies = ["PyYAML>=6.0"]
22
+ dependencies = ["PyYAML>=6.0", "packaging>=23.2"]
23
23
 
24
24
  [project.urls]
25
25
  Homepage = "https://github.com/codemower-ai/code-mower"
@@ -1,3 +1,3 @@
1
1
  """Code Mower package."""
2
2
 
3
- __version__ = "1.3.1"
3
+ __version__ = "1.4.0"
@@ -101,6 +101,22 @@ def _campaigns_path(config: BoardConfig) -> Path:
101
101
  return Path(config.repo_path) / DEFAULT_CAMPAIGNS_RELATIVE_PATH
102
102
 
103
103
 
104
+ def resolved_metadata_paths(config: BoardConfig) -> dict[str, str]:
105
+ """Return the local metadata input paths one config resolves to.
106
+
107
+ A caller that collects against a different source tree can bind these
108
+ explicitly, so the live Code Mower metadata inputs stay the ones it means
109
+ rather than following the collection source's repo path.
110
+ """
111
+
112
+ return {
113
+ "store_path": str(_store_path(config)),
114
+ "spend_path": str(_spend_path(config)),
115
+ "agent_adapters_path": str(_agent_adapters_path(config)),
116
+ "campaigns_path": str(_campaigns_path(config)),
117
+ }
118
+
119
+
104
120
  def _is_loopback(host: str) -> bool:
105
121
  return host in {"localhost", "::1"} or host.startswith("127.")
106
122