code-mower 0.6.0b3__tar.gz → 0.9.0b1__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 (352) hide show
  1. {code_mower-0.6.0b3/src/code_mower.egg-info → code_mower-0.9.0b1}/PKG-INFO +72 -13
  2. code_mower-0.6.0b3/PKG-INFO → code_mower-0.9.0b1/README.md +68 -26
  3. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/pyproject.toml +5 -3
  4. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/__init__.py +1 -1
  5. code_mower-0.9.0b1/src/code_mower/board.py +1277 -0
  6. code_mower-0.9.0b1/src/code_mower/board_store.py +269 -0
  7. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/bootstrap.py +5 -5
  8. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cli.py +10 -4
  9. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud.py +90 -0
  10. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/__init__.py +4 -0
  11. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/bundle.py +1 -0
  12. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/events.py +233 -1
  13. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/operations.py +124 -0
  14. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor.py +74 -1
  15. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/adoption.py +20 -12
  16. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/common.py +2 -0
  17. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github.py +2 -0
  18. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_human_token.py +78 -10
  19. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_review_hygiene.py +53 -30
  20. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/providers.py +74 -2
  21. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/runner.py +8 -0
  22. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/runtime.py +5 -5
  23. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -3
  24. code_mower-0.9.0b1/src/code_mower/git_identity.py +15 -0
  25. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/init.py +3 -3
  26. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_status.py +51 -6
  27. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/migration.py +352 -2
  28. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/migration_install.py +26 -21
  29. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/migration_rehearsal.py +30 -7
  30. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/next_steps.py +4 -4
  31. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/package_content.py +3 -2
  32. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/package_manifest.py +3 -0
  33. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/package_static.py +19 -2
  34. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/providers/provenance.py +1 -1
  35. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/release_readiness.py +3 -0
  36. {code_mower-0.6.0b3 → code_mower-0.9.0b1/src/code_mower}/templates/lanes/README.md +2 -1
  37. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/code_mower +4 -4
  38. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +2 -2
  39. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/versioning.py +2 -2
  40. code_mower-0.6.0b3/README.md → code_mower-0.9.0b1/src/code_mower.egg-info/PKG-INFO +85 -11
  41. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower.egg-info/SOURCES.txt +5 -0
  42. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower.egg-info/requires.txt +2 -0
  43. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/builder-provenance.yml.j2 +2 -2
  44. code_mower-0.9.0b1/tests/test_board.py +1048 -0
  45. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_cloud_client.py +226 -0
  46. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_github_checks.py +65 -0
  47. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_provider_review_hygiene.py +4 -6
  48. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_registry.py +155 -0
  49. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_self_hosted_runner.py +31 -0
  50. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_lane_status.py +59 -1
  51. code_mower-0.9.0b1/tests/test_migration_setup_drift.py +82 -0
  52. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_release_hygiene.py +513 -43
  53. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/CODE_OF_CONDUCT.md +0 -0
  54. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/LICENSE +0 -0
  55. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/MANIFEST.in +0 -0
  56. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/NOTICE +0 -0
  57. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/SUPPORT.md +0 -0
  58. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/requirements/requirements.txt +0 -0
  59. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/setup.cfg +0 -0
  60. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/adapters/__init__.py +0 -0
  61. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/adapters/_base.py +0 -0
  62. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  63. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/adapters/gitar.py +0 -0
  64. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/adapters/greptile.py +0 -0
  65. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/adapters/qodo.py +0 -0
  66. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  67. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/antigravity_sdk_probe.py +0 -0
  68. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/audit_handoff_log.py +0 -0
  69. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/audit_labeler_lib.py +0 -0
  70. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/audit_limits.py +0 -0
  71. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/audit_progress.py +0 -0
  72. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/blind_review_artifacts.py +0 -0
  73. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/blind_review_coordinator.py +0 -0
  74. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/builder_experiment.py +0 -0
  75. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/builder_runs.py +0 -0
  76. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/__init__.py +0 -0
  77. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/arms.py +0 -0
  78. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/auto_discovery.py +0 -0
  79. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/commands.py +0 -0
  80. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/context_inputs.py +0 -0
  81. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/corpus.py +0 -0
  82. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/effect_report.py +0 -0
  83. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/evidence.py +0 -0
  84. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/evidence_report.py +0 -0
  85. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/identity.py +0 -0
  86. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/metrics.py +0 -0
  87. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/overlap.py +0 -0
  88. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/planning.py +0 -0
  89. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/policy.py +0 -0
  90. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/results.py +0 -0
  91. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/run_results.py +0 -0
  92. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/run_status.py +0 -0
  93. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/runner.py +0 -0
  94. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/truth.py +0 -0
  95. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/calibration/value_report.py +0 -0
  96. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/checks.py +0 -0
  97. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/claude_audit_pr.py +0 -0
  98. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/claude_cli_bounce.py +0 -0
  99. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/claude_cli_environment.py +0 -0
  100. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/clear_stale.py +0 -0
  101. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/doctor.py +0 -0
  102. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/dogfood.py +0 -0
  103. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/endpoints.py +0 -0
  104. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/errors.py +0 -0
  105. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/export.py +0 -0
  106. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/git_metadata.py +0 -0
  107. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/manifest.py +0 -0
  108. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/reports.py +0 -0
  109. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/setup.py +0 -0
  110. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/tokens.py +0 -0
  111. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/cloud_client/upload.py +0 -0
  112. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/code_mower_calibration.py +0 -0
  113. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/code_mower_context_packs.py +0 -0
  114. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/code_mower_merge.py +0 -0
  115. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/code_mower_telemetry.py +0 -0
  116. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  117. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/codex_audit_env_preflight.py +0 -0
  118. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/codex_audit_pr.py +0 -0
  119. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  120. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  121. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/config.py +0 -0
  122. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/decisions.py +0 -0
  123. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/__init__.py +0 -0
  124. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/audit_limits.py +0 -0
  125. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/cloud.py +0 -0
  126. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions.py +0 -0
  127. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  128. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  129. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  130. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  131. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  132. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  133. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  134. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  135. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_api.py +0 -0
  136. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_branch.py +0 -0
  137. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_config.py +0 -0
  138. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_provider.py +0 -0
  139. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/github_repo.py +0 -0
  140. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/groups.py +0 -0
  141. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/models.py +0 -0
  142. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/output.py +0 -0
  143. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/presets.py +0 -0
  144. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/privacy.py +0 -0
  145. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  146. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  147. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  148. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_env.py +0 -0
  149. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  150. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  151. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
  152. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  153. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  154. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  155. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  156. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  157. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  158. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  159. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  160. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/registry.py +0 -0
  161. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  162. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/gate_health.py +0 -0
  163. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  164. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/grok_build_audit_pr.py +0 -0
  165. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  166. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/__init__.py +0 -0
  167. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/aider.py +0 -0
  168. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  169. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/claude.py +0 -0
  170. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/codex.py +0 -0
  171. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/devin.py +0 -0
  172. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  173. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/grok_build.py +0 -0
  174. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  175. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/lane_configs/local_llm.py +0 -0
  176. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/local_llm_audit_pr.py +0 -0
  177. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/local_llm_bakeoff.py +0 -0
  178. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/local_llm_calibration.py +0 -0
  179. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/local_llm_profiles.py +0 -0
  180. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/migration_mirror.py +0 -0
  181. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/migration_readiness.py +0 -0
  182. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/observe.py +0 -0
  183. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/package.py +0 -0
  184. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/package_paths.py +0 -0
  185. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/package_rendering.py +0 -0
  186. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/plan_context.py +0 -0
  187. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/prompts.py +0 -0
  188. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_registry.py +0 -0
  189. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/__init__.py +0 -0
  190. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/comments.py +0 -0
  191. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/exit_codes.py +0 -0
  192. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/git.py +0 -0
  193. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/github_auth.py +0 -0
  194. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/github_pr.py +0 -0
  195. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  196. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/process.py +0 -0
  197. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/repo_paths.py +0 -0
  198. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/text_schema.py +0 -0
  199. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  200. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/provider_runners/workspace.py +0 -0
  201. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/providers/__init__.py +0 -0
  202. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/providers/local_cli.py +0 -0
  203. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/reviewer_metrics.py +0 -0
  204. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/reviewer_spend.py +0 -0
  205. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/saas_reviewer_labeler.py +0 -0
  206. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/secrets.py +0 -0
  207. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/builder-experiment.example.json +0 -0
  208. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  209. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/calibration-corpus.json +0 -0
  210. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/code-mower.example.yml +0 -0
  211. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/context-packs.example.json +0 -0
  212. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  213. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  214. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  215. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  216. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  217. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  218. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  219. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
  220. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  221. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lanes/claude.md +0 -0
  222. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lanes/codex.md +0 -0
  223. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lanes/cursor.md +0 -0
  224. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lanes/generic.md +0 -0
  225. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
  226. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  227. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  228. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  229. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  230. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  231. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/product-support/status_report.py +0 -0
  232. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/providers.yml +0 -0
  233. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  234. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  235. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  236. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  237. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  238. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  239. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
  240. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  241. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  242. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  243. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  244. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
  245. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  246. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  247. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  248. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  249. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  250. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
  251. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/trailer_comment_labeler.py +0 -0
  252. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/work_orders.py +0 -0
  253. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower/workflow_actionlint.py +0 -0
  254. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower.egg-info/dependency_links.txt +0 -0
  255. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower.egg-info/entry_points.txt +0 -0
  256. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/src/code_mower.egg-info/top_level.txt +0 -0
  257. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/builder-experiment.example.json +0 -0
  258. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/calibration-corpus.example.json +0 -0
  259. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/calibration-corpus.json +0 -0
  260. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/code-mower.yml.j2 +0 -0
  261. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/context-packs.example.json +0 -0
  262. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/cursor/BUGBOT.md +0 -0
  263. {code_mower-0.6.0b3/src/code_mower → code_mower-0.9.0b1}/templates/lanes/README.md +0 -0
  264. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/lanes/claude.md +0 -0
  265. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/lanes/codex.md +0 -0
  266. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/lanes/cursor.md +0 -0
  267. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/lanes/generic.md +0 -0
  268. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/lanes/run_mac_lane.sh +0 -0
  269. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/acp_bridge.yml +0 -0
  270. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/aider.yml +0 -0
  271. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/antigravity_cli.yml +0 -0
  272. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/claude_audit.yml +0 -0
  273. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/claude_review.yml +0 -0
  274. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/coderabbit_cli.yml +0 -0
  275. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/codex.yml +0 -0
  276. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/cursor_bugbot.yml +0 -0
  277. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/devin.yml +0 -0
  278. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/gemini_cli.yml +0 -0
  279. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/gitar.yml +0 -0
  280. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/greptile.yml +0 -0
  281. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/hermes_cli.yml +0 -0
  282. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/local_llm.yml +0 -0
  283. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers/qodo.yml +0 -0
  284. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/providers.yml +0 -0
  285. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/reviewer-spend.example.json +0 -0
  286. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/reviewer-value-report.example.md +0 -0
  287. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  288. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  289. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  290. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  291. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  292. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/code-mower-gate.yml.j2 +0 -0
  293. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  294. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  295. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  296. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  297. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  298. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  299. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  300. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  301. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  302. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_antigravity_sdk_probe.py +0 -0
  303. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_audit_comment_posture.py +0 -0
  304. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_audit_limits.py +0 -0
  305. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_builder_experiment.py +0 -0
  306. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_builder_identity.py +0 -0
  307. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_builder_runs.py +0 -0
  308. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_calibration_effect_report.py +0 -0
  309. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_calibration_truth.py +0 -0
  310. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_checks.py +0 -0
  311. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_claude_audit_pr.py +0 -0
  312. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_claude_cli_bounce.py +0 -0
  313. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_clear_stale.py +0 -0
  314. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_cloud_git_metadata.py +0 -0
  315. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_cloud_manifest.py +0 -0
  316. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_cloud_reports.py +0 -0
  317. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  318. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_codex_audit_env_preflight.py +0 -0
  319. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_codex_audit_pr.py +0 -0
  320. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_decision_audit_integration.py +0 -0
  321. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_decisions.py +0 -0
  322. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_actions_cost_summary.py +0 -0
  323. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_actions_failure_selection.py +0 -0
  324. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_boundaries.py +0 -0
  325. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_output.py +0 -0
  326. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_privacy.py +0 -0
  327. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_provider_env_required.py +0 -0
  328. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_provider_env_tokens.py +0 -0
  329. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_provider_local_audit_setup.py +0 -0
  330. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_provider_probe.py +0 -0
  331. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_doctor_runtime.py +0 -0
  332. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_gate_health.py +0 -0
  333. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_init_actionlint.py +0 -0
  334. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_init_build_loop.py +0 -0
  335. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_local_llm_github_helpers.py +0 -0
  336. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_observe.py +0 -0
  337. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_plan_context.py +0 -0
  338. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_prompts.py +0 -0
  339. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_fixture_contracts.py +0 -0
  340. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_local_cli.py +0 -0
  341. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_comments.py +0 -0
  342. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_git.py +0 -0
  343. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_github_pr.py +0 -0
  344. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_pr_worktree.py +0 -0
  345. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_process.py +0 -0
  346. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_repo_paths.py +0 -0
  347. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_text_schema.py +0 -0
  348. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_provider_runners_workspace.py +0 -0
  349. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_reviewer_metrics_core.py +0 -0
  350. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_reviewer_spend.py +0 -0
  351. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_trailer_comment_labeler.py +0 -0
  352. {code_mower-0.6.0b3 → code_mower-0.9.0b1}/tests/test_work_orders.py +0 -0
@@ -1,16 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 0.6.0b3
3
+ Version: 0.9.0b1
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
- Requires-Python: >=3.11
6
+ Requires-Python: >=3.12
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
9
  License-File: NOTICE
10
10
  Requires-Dist: PyYAML>=6.0
11
11
  Provides-Extra: test
12
+ Requires-Dist: build>=1.2; extra == "test"
12
13
  Requires-Dist: pytest>=8.0; extra == "test"
13
14
  Requires-Dist: ruff>=0.8; extra == "test"
15
+ Requires-Dist: twine>=5.0; extra == "test"
14
16
  Dynamic: license-file
15
17
 
16
18
  # Code Mower
@@ -62,6 +64,8 @@ for a real repository. It checks your runtime, GitHub setup, provider CLIs,
62
64
  token posture, optional cloud setup, private-repo Actions cost traps, and
63
65
  first-run adoption gaps. `--preflight` remains the compatibility preset for
64
66
  older scripts; `--adoption` adds explicit repo targeting and setup guidance.
67
+ Use `--hosted-builders` or `--orchestrator-only` when the current machine is
68
+ observing/coordinating lanes and will not run local Codex or Claude wrappers.
65
69
 
66
70
  Example, shortened:
67
71
 
@@ -86,9 +90,43 @@ boundaries visible before you promote any reviewer lane.
86
90
 
87
91
  See a fuller static transcript: [docs/first-run-transcript.md](docs/first-run-transcript.md).
88
92
 
93
+ For an existing repository that already has Code Mower generated workflows or
94
+ wrappers, run `code-mower migration setup-drift --repo-path .` before copying a
95
+ fresh `.code-mower.generated` tree. It is read-only and reports path-level
96
+ classifications (`same`, `differs`, `new`, `repo-only`,
97
+ `missing-from-output`) without file contents or diffs.
98
+
89
99
  After `init` and `doctor`, use `code-mower lanes status --repo OWNER/REPO` to
90
100
  see active builder/reviewer lanes, gate/check state, recent Code Mower
91
- workflows, local AgentTrail boards when present, and the next operator action.
101
+ workflows, local board/process hints when present, and the next operator
102
+ action. Text and JSON output redact local cwd paths by default; use
103
+ `--show-local-paths` only for local debugging.
104
+
105
+ For the same redacted metadata in a local browser view, run
106
+ `code-mower board serve --repo OWNER/REPO` and open the printed localhost URL.
107
+ Plain `board serve` is read-only. If the default Board port is busy, the CLI
108
+ uses a nearby free loopback port and prints the URL; an explicit `--port` stays
109
+ strict and reports a friendly conflict. To build local history while the browser
110
+ view is open, run `code-mower board serve --repo OWNER/REPO --record-events`; it
111
+ records at most one snapshot every 60 seconds by default. To append one snapshot
112
+ without serving the browser view, run
113
+ `code-mower board record --repo OWNER/REPO` from the repository checkout; it
114
+ writes metadata-only snapshots to `.code-mower/board/events.jsonl` with default
115
+ 14-day and 500-event retention. `code-mower board events` prints recent stored
116
+ events without calling GitHub. `code-mower board doctor --repo OWNER/REPO`
117
+ checks Board inputs and local history without exposing local paths by default.
118
+ `code-mower board reset --repo OWNER/REPO --yes` clears only the local Board
119
+ history file. The Board also shows an owner queue, and it
120
+ summarizes reviewer verdict history and spend/latency from local board events
121
+ plus `.code-mower/reviewer-spend.json` when those files exist. Local agents can
122
+ publish opt-in status cards by writing metadata-only JSON files to
123
+ `.code-mower/board/agents/*.json`; the Board redacts local paths by default and
124
+ does not upload those cards.
125
+ The local JSON contracts are documented in
126
+ [Board Data Contract](docs/board-data-contract.md).
127
+ When a team wants the same operator picture on CodeMower.com, run
128
+ `code-mower cloud board-snapshot --repo-slug OWNER/REPO --json` to inspect a
129
+ zero-report, metadata-only mirror event, then add `--yes` only after review.
92
130
 
93
131
  ## See The Value Shape First
94
132
 
@@ -96,8 +134,10 @@ If you want to understand the product before installing anything, start with
96
134
  the checked-in demo calibration package:
97
135
 
98
136
  - [examples/demo-calibration/README.md](examples/demo-calibration/README.md)
137
+ - [examples/board-demo/README.md](examples/board-demo/README.md)
99
138
  - [examples/demo-calibration/reviewer-value-report.md](examples/demo-calibration/reviewer-value-report.md)
100
139
  - [docs/first-user-demo-transcript.md](docs/first-user-demo-transcript.md)
140
+ - [docs/post-v08-effectiveness-assessment.md](docs/post-v08-effectiveness-assessment.md)
101
141
 
102
142
  The example is intentionally tiny and synthetic: one known-clean control, one
103
143
  known-blocked control, and three reviewer lanes. It shows the decision Code
@@ -111,15 +151,23 @@ Cold adopters should start with the reviewer gate, then add builders, then
111
151
  measure builder experiments; provider experiments come after that base loop is
112
152
  observable.
113
153
 
154
+ Install first from the [Install And Bootstrap](docs/install.md) matrix: pipx for
155
+ laptops, uv tool installs for hosted agents or CI boxes, and an editable venv
156
+ for Code Mower contributors. All paths require Python 3.12 or newer. For
157
+ upgrades, record `command -v code-mower` and `code-mower --version` before and
158
+ after reinstalling, especially when switching between pipx and uv.
159
+
114
160
  | Path | Use When | Route | Guide |
115
161
  | --- | --- | --- | --- |
116
162
  | A. Reviewer gate in 10 minutes | You want one audited PR before recurring workflows or builder dispatch. | Install, run `init --easy`, run `doctor --adoption --repo OWNER/REPO`, open a small setup PR, run Codex and Claude audits, then merge manually when the audit evidence is clean. | [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md) |
117
163
  | B. Build loop in 30 minutes | You want builders plus an orchestrator pattern after the reviewer gate works. | Complete path A, then add the automation token, require `code-mower/gate` from Any source, enable repository auto-merge, prove the self-hosted Mac lane runner with `doctor --runner`, run `init --builders`, and dispatch the first issue. | [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md) |
118
164
  | C. Builder experiment | You want to compare authoring loops before trusting them broadly. | Use a work order or experiment spec, run `code-mower builder-experiment run` around an explicit command, then review the source-free `authoringRun` artifact and normal audit evidence. | [Builder Experiments](docs/builder-experiments.md) |
119
165
 
120
- The v0.6 beta announcement entry point is the tagged
121
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.6.0-beta.3/docs/try-in-10-minutes.md)
122
- guide.
166
+ The current package-index announcement entry point is the tagged
167
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.9.0-beta.1/docs/try-in-10-minutes.md)
168
+ guide. The v0.9 beta includes the completed native Board work plus the adoption
169
+ and upgrade hardening from recent install rehearsals, so package-only users can
170
+ start from the public package rather than a source checkout.
123
171
 
124
172
  ## What Calibration Does And Does Not Prove
125
173
 
@@ -148,7 +196,7 @@ Provider-contract baseline for the next release train:
148
196
 
149
197
  For release verification,
150
198
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
151
- the package-index procedure for `v0.6.0-beta.3` / `code-mower==0.6.0b3`. The
199
+ the package-index procedure for `v0.9.0-beta.1` / `code-mower==0.9.0b1`. The
152
200
  GitHub release records the workflow and rehearsal evidence for the exact tag.
153
201
 
154
202
  ## Optional: Plan Before Coding
@@ -254,6 +302,9 @@ code-mower cloud dogfood --json
254
302
  ```
255
303
 
256
304
  Nothing uploads unless you pass `--yes`.
305
+ For the hosted Board mirror specifically,
306
+ `code-mower cloud board-snapshot --repo-slug OWNER/REPO --json` exports one
307
+ metadata-only event and zero reports; add `--yes` to upload it after inspection.
257
308
 
258
309
  Current dogfood uploads, historical catch-up imports, and calibrated
259
310
  reviewer/lens evidence are intentionally separate. Imported GitHub Actions
@@ -312,12 +363,14 @@ engineer can:
312
363
  2. understand the local/cloud trust boundary;
313
364
  3. run `init --easy` and `doctor --adoption --repo OWNER/REPO`;
314
365
  4. run `lanes status --repo OWNER/REPO` to see active lanes and gate state;
315
- 5. detect and run the repo's native lint/test/build surface instead of assuming
366
+ 5. run `board serve --repo OWNER/REPO` when you want the same state in a local
367
+ browser view;
368
+ 6. detect and run the repo's native lint/test/build surface instead of assuming
316
369
  every project uses the same tools;
317
- 6. produce a local value report from known PR outcomes;
318
- 7. decide which lanes should stay informational, selective, or merge-gating;
370
+ 7. produce a local value report from known PR outcomes;
371
+ 8. decide which lanes should stay informational, selective, or merge-gating;
319
372
  and
320
- 8. optionally upload sanitized metadata to CodeMower.com and see useful team
373
+ 9. optionally upload sanitized metadata to CodeMower.com and see useful team
321
374
  dashboard signal.
322
375
 
323
376
  Build-loop templates extend the same loop from "who reviews best?" to "which AI
@@ -329,8 +382,8 @@ measurement work.
329
382
 
330
383
  ## Installation Status
331
384
 
332
- The current public beta baseline is `v0.6.0-beta.3`, with pinned package-index
333
- install spec `code-mower==0.6.0b3`. Release evidence is recorded on the GitHub
385
+ The current package-index beta baseline is `v0.9.0-beta.1`, with pinned package
386
+ install spec `code-mower==0.9.0b1`. Release evidence is recorded on the GitHub
334
387
  release and in the first-user install rehearsal. The public repository is
335
388
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
336
389
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -370,6 +423,7 @@ first so local work exercises the same package entrypoint users install.
370
423
 
371
424
  ## Docs Map
372
425
 
426
+ - [Install And Bootstrap](docs/install.md)
373
427
  - [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md)
374
428
  - [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md)
375
429
  - [Quickstart Reference](docs/quickstart.md)
@@ -391,13 +445,18 @@ first so local work exercises the same package entrypoint users install.
391
445
  - [Launch Command Surface](docs/launch-command-surface.md)
392
446
  - [v0.6 Truth Baseline](docs/v06-truth-baseline.md)
393
447
  - [v0.6 Release Notes](docs/v06-release-notes.md)
448
+ - [v0.8 Release Notes](docs/v08-release-notes.md)
449
+ - [v0.9 Release Notes](docs/v09-release-notes.md)
450
+ - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
394
451
  - [Demo Calibration Example](examples/demo-calibration/README.md)
452
+ - [Board Demo Rehearsal](examples/board-demo/README.md)
395
453
  - [PyPI Release Runbook](docs/pypi-release.md)
396
454
  - [Sample Doctor Output](docs/sample-doctor-output.md)
397
455
  - [Architecture](docs/architecture.md)
398
456
  - [Lane Promotion Policy](docs/lane-promotion-policy.md)
399
457
  - [Cloud Sharing](docs/cloud-sharing.md)
400
458
  - [Cloud Data Contract](docs/cloud-data-contract.md)
459
+ - [Board Data Contract](docs/board-data-contract.md)
401
460
  - [Privacy And Threat Model](docs/privacy-threat-model.md)
402
461
  - [Current State And Roadmap](docs/current-state-and-roadmap.md)
403
462
  - [Public Release Checklist](docs/public-release-checklist.md)
@@ -1,18 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: code-mower
3
- Version: 0.6.0b3
4
- Summary: Multi-reviewer AI code audit orchestration
5
- License-Expression: Apache-2.0
6
- Requires-Python: >=3.11
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- License-File: NOTICE
10
- Requires-Dist: PyYAML>=6.0
11
- Provides-Extra: test
12
- Requires-Dist: pytest>=8.0; extra == "test"
13
- Requires-Dist: ruff>=0.8; extra == "test"
14
- Dynamic: license-file
15
-
16
1
  # Code Mower
17
2
 
18
3
  Code Mower helps teams set up AI peer-programmer and reviewer lanes on real
@@ -62,6 +47,8 @@ for a real repository. It checks your runtime, GitHub setup, provider CLIs,
62
47
  token posture, optional cloud setup, private-repo Actions cost traps, and
63
48
  first-run adoption gaps. `--preflight` remains the compatibility preset for
64
49
  older scripts; `--adoption` adds explicit repo targeting and setup guidance.
50
+ Use `--hosted-builders` or `--orchestrator-only` when the current machine is
51
+ observing/coordinating lanes and will not run local Codex or Claude wrappers.
65
52
 
66
53
  Example, shortened:
67
54
 
@@ -86,9 +73,43 @@ boundaries visible before you promote any reviewer lane.
86
73
 
87
74
  See a fuller static transcript: [docs/first-run-transcript.md](docs/first-run-transcript.md).
88
75
 
76
+ For an existing repository that already has Code Mower generated workflows or
77
+ wrappers, run `code-mower migration setup-drift --repo-path .` before copying a
78
+ fresh `.code-mower.generated` tree. It is read-only and reports path-level
79
+ classifications (`same`, `differs`, `new`, `repo-only`,
80
+ `missing-from-output`) without file contents or diffs.
81
+
89
82
  After `init` and `doctor`, use `code-mower lanes status --repo OWNER/REPO` to
90
83
  see active builder/reviewer lanes, gate/check state, recent Code Mower
91
- workflows, local AgentTrail boards when present, and the next operator action.
84
+ workflows, local board/process hints when present, and the next operator
85
+ action. Text and JSON output redact local cwd paths by default; use
86
+ `--show-local-paths` only for local debugging.
87
+
88
+ For the same redacted metadata in a local browser view, run
89
+ `code-mower board serve --repo OWNER/REPO` and open the printed localhost URL.
90
+ Plain `board serve` is read-only. If the default Board port is busy, the CLI
91
+ uses a nearby free loopback port and prints the URL; an explicit `--port` stays
92
+ strict and reports a friendly conflict. To build local history while the browser
93
+ view is open, run `code-mower board serve --repo OWNER/REPO --record-events`; it
94
+ records at most one snapshot every 60 seconds by default. To append one snapshot
95
+ without serving the browser view, run
96
+ `code-mower board record --repo OWNER/REPO` from the repository checkout; it
97
+ writes metadata-only snapshots to `.code-mower/board/events.jsonl` with default
98
+ 14-day and 500-event retention. `code-mower board events` prints recent stored
99
+ events without calling GitHub. `code-mower board doctor --repo OWNER/REPO`
100
+ checks Board inputs and local history without exposing local paths by default.
101
+ `code-mower board reset --repo OWNER/REPO --yes` clears only the local Board
102
+ history file. The Board also shows an owner queue, and it
103
+ summarizes reviewer verdict history and spend/latency from local board events
104
+ plus `.code-mower/reviewer-spend.json` when those files exist. Local agents can
105
+ publish opt-in status cards by writing metadata-only JSON files to
106
+ `.code-mower/board/agents/*.json`; the Board redacts local paths by default and
107
+ does not upload those cards.
108
+ The local JSON contracts are documented in
109
+ [Board Data Contract](docs/board-data-contract.md).
110
+ When a team wants the same operator picture on CodeMower.com, run
111
+ `code-mower cloud board-snapshot --repo-slug OWNER/REPO --json` to inspect a
112
+ zero-report, metadata-only mirror event, then add `--yes` only after review.
92
113
 
93
114
  ## See The Value Shape First
94
115
 
@@ -96,8 +117,10 @@ If you want to understand the product before installing anything, start with
96
117
  the checked-in demo calibration package:
97
118
 
98
119
  - [examples/demo-calibration/README.md](examples/demo-calibration/README.md)
120
+ - [examples/board-demo/README.md](examples/board-demo/README.md)
99
121
  - [examples/demo-calibration/reviewer-value-report.md](examples/demo-calibration/reviewer-value-report.md)
100
122
  - [docs/first-user-demo-transcript.md](docs/first-user-demo-transcript.md)
123
+ - [docs/post-v08-effectiveness-assessment.md](docs/post-v08-effectiveness-assessment.md)
101
124
 
102
125
  The example is intentionally tiny and synthetic: one known-clean control, one
103
126
  known-blocked control, and three reviewer lanes. It shows the decision Code
@@ -111,15 +134,23 @@ Cold adopters should start with the reviewer gate, then add builders, then
111
134
  measure builder experiments; provider experiments come after that base loop is
112
135
  observable.
113
136
 
137
+ Install first from the [Install And Bootstrap](docs/install.md) matrix: pipx for
138
+ laptops, uv tool installs for hosted agents or CI boxes, and an editable venv
139
+ for Code Mower contributors. All paths require Python 3.12 or newer. For
140
+ upgrades, record `command -v code-mower` and `code-mower --version` before and
141
+ after reinstalling, especially when switching between pipx and uv.
142
+
114
143
  | Path | Use When | Route | Guide |
115
144
  | --- | --- | --- | --- |
116
145
  | A. Reviewer gate in 10 minutes | You want one audited PR before recurring workflows or builder dispatch. | Install, run `init --easy`, run `doctor --adoption --repo OWNER/REPO`, open a small setup PR, run Codex and Claude audits, then merge manually when the audit evidence is clean. | [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md) |
117
146
  | B. Build loop in 30 minutes | You want builders plus an orchestrator pattern after the reviewer gate works. | Complete path A, then add the automation token, require `code-mower/gate` from Any source, enable repository auto-merge, prove the self-hosted Mac lane runner with `doctor --runner`, run `init --builders`, and dispatch the first issue. | [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md) |
118
147
  | C. Builder experiment | You want to compare authoring loops before trusting them broadly. | Use a work order or experiment spec, run `code-mower builder-experiment run` around an explicit command, then review the source-free `authoringRun` artifact and normal audit evidence. | [Builder Experiments](docs/builder-experiments.md) |
119
148
 
120
- The v0.6 beta announcement entry point is the tagged
121
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.6.0-beta.3/docs/try-in-10-minutes.md)
122
- guide.
149
+ The current package-index announcement entry point is the tagged
150
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v0.9.0-beta.1/docs/try-in-10-minutes.md)
151
+ guide. The v0.9 beta includes the completed native Board work plus the adoption
152
+ and upgrade hardening from recent install rehearsals, so package-only users can
153
+ start from the public package rather than a source checkout.
123
154
 
124
155
  ## What Calibration Does And Does Not Prove
125
156
 
@@ -148,7 +179,7 @@ Provider-contract baseline for the next release train:
148
179
 
149
180
  For release verification,
150
181
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
151
- the package-index procedure for `v0.6.0-beta.3` / `code-mower==0.6.0b3`. The
182
+ the package-index procedure for `v0.9.0-beta.1` / `code-mower==0.9.0b1`. The
152
183
  GitHub release records the workflow and rehearsal evidence for the exact tag.
153
184
 
154
185
  ## Optional: Plan Before Coding
@@ -254,6 +285,9 @@ code-mower cloud dogfood --json
254
285
  ```
255
286
 
256
287
  Nothing uploads unless you pass `--yes`.
288
+ For the hosted Board mirror specifically,
289
+ `code-mower cloud board-snapshot --repo-slug OWNER/REPO --json` exports one
290
+ metadata-only event and zero reports; add `--yes` to upload it after inspection.
257
291
 
258
292
  Current dogfood uploads, historical catch-up imports, and calibrated
259
293
  reviewer/lens evidence are intentionally separate. Imported GitHub Actions
@@ -312,12 +346,14 @@ engineer can:
312
346
  2. understand the local/cloud trust boundary;
313
347
  3. run `init --easy` and `doctor --adoption --repo OWNER/REPO`;
314
348
  4. run `lanes status --repo OWNER/REPO` to see active lanes and gate state;
315
- 5. detect and run the repo's native lint/test/build surface instead of assuming
349
+ 5. run `board serve --repo OWNER/REPO` when you want the same state in a local
350
+ browser view;
351
+ 6. detect and run the repo's native lint/test/build surface instead of assuming
316
352
  every project uses the same tools;
317
- 6. produce a local value report from known PR outcomes;
318
- 7. decide which lanes should stay informational, selective, or merge-gating;
353
+ 7. produce a local value report from known PR outcomes;
354
+ 8. decide which lanes should stay informational, selective, or merge-gating;
319
355
  and
320
- 8. optionally upload sanitized metadata to CodeMower.com and see useful team
356
+ 9. optionally upload sanitized metadata to CodeMower.com and see useful team
321
357
  dashboard signal.
322
358
 
323
359
  Build-loop templates extend the same loop from "who reviews best?" to "which AI
@@ -329,8 +365,8 @@ measurement work.
329
365
 
330
366
  ## Installation Status
331
367
 
332
- The current public beta baseline is `v0.6.0-beta.3`, with pinned package-index
333
- install spec `code-mower==0.6.0b3`. Release evidence is recorded on the GitHub
368
+ The current package-index beta baseline is `v0.9.0-beta.1`, with pinned package
369
+ install spec `code-mower==0.9.0b1`. Release evidence is recorded on the GitHub
334
370
  release and in the first-user install rehearsal. The public repository is
335
371
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
336
372
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -370,6 +406,7 @@ first so local work exercises the same package entrypoint users install.
370
406
 
371
407
  ## Docs Map
372
408
 
409
+ - [Install And Bootstrap](docs/install.md)
373
410
  - [Try Code Mower In 10 Minutes](docs/try-in-10-minutes.md)
374
411
  - [Build Loop In 30 Minutes](docs/build-loop-in-30-minutes.md)
375
412
  - [Quickstart Reference](docs/quickstart.md)
@@ -391,13 +428,18 @@ first so local work exercises the same package entrypoint users install.
391
428
  - [Launch Command Surface](docs/launch-command-surface.md)
392
429
  - [v0.6 Truth Baseline](docs/v06-truth-baseline.md)
393
430
  - [v0.6 Release Notes](docs/v06-release-notes.md)
431
+ - [v0.8 Release Notes](docs/v08-release-notes.md)
432
+ - [v0.9 Release Notes](docs/v09-release-notes.md)
433
+ - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
394
434
  - [Demo Calibration Example](examples/demo-calibration/README.md)
435
+ - [Board Demo Rehearsal](examples/board-demo/README.md)
395
436
  - [PyPI Release Runbook](docs/pypi-release.md)
396
437
  - [Sample Doctor Output](docs/sample-doctor-output.md)
397
438
  - [Architecture](docs/architecture.md)
398
439
  - [Lane Promotion Policy](docs/lane-promotion-policy.md)
399
440
  - [Cloud Sharing](docs/cloud-sharing.md)
400
441
  - [Cloud Data Contract](docs/cloud-data-contract.md)
442
+ - [Board Data Contract](docs/board-data-contract.md)
401
443
  - [Privacy And Threat Model](docs/privacy-threat-model.md)
402
444
  - [Current State And Roadmap](docs/current-state-and-roadmap.md)
403
445
  - [Public Release Checklist](docs/public-release-checklist.md)
@@ -4,17 +4,19 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "0.6.0b3"
7
+ version = "0.9.0b1"
8
8
  description = "Multi-reviewer AI code audit orchestration"
9
- requires-python = ">=3.11"
9
+ requires-python = ">=3.12"
10
10
  readme = "README.md"
11
11
  license = "Apache-2.0"
12
12
  dependencies = ["PyYAML>=6.0"]
13
13
 
14
14
  [project.optional-dependencies]
15
15
  test = [
16
+ "build>=1.2",
16
17
  "pytest>=8.0",
17
18
  "ruff>=0.8",
19
+ "twine>=5.0",
18
20
  ]
19
21
 
20
22
  [project.scripts]
@@ -43,7 +45,7 @@ code_mower = [
43
45
  ]
44
46
 
45
47
  [tool.ruff]
46
- target-version = "py311"
48
+ target-version = "py312"
47
49
  line-length = 100
48
50
 
49
51
  [tool.ruff.lint]
@@ -1,3 +1,3 @@
1
1
  """Code Mower package."""
2
2
 
3
- __version__ = "0.6.0b3"
3
+ __version__ = "0.9.0b1"