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