code-mower 0.5.0b6__tar.gz → 0.5.0b7__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 (255) hide show
  1. {code_mower-0.5.0b6/src/code_mower.egg-info → code_mower-0.5.0b7}/PKG-INFO +13 -6
  2. code_mower-0.5.0b6/PKG-INFO → code_mower-0.5.0b7/README.md +12 -17
  3. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/pyproject.toml +1 -1
  4. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/__init__.py +1 -1
  5. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/models.py +25 -0
  6. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/output.py +13 -0
  7. code_mower-0.5.0b6/README.md → code_mower-0.5.0b7/src/code_mower.egg-info/PKG-INFO +24 -5
  8. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_output.py +13 -0
  9. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_registry.py +8 -0
  10. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_release_hygiene.py +34 -34
  11. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/CODE_OF_CONDUCT.md +0 -0
  12. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/LICENSE +0 -0
  13. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/MANIFEST.in +0 -0
  14. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/NOTICE +0 -0
  15. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/SUPPORT.md +0 -0
  16. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/requirements/requirements.txt +0 -0
  17. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/setup.cfg +0 -0
  18. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/__init__.py +0 -0
  19. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/_base.py +0 -0
  20. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  21. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/gitar.py +0 -0
  22. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/greptile.py +0 -0
  23. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/adapters/qodo.py +0 -0
  24. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  25. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/audit_handoff_log.py +0 -0
  26. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/audit_labeler_lib.py +0 -0
  27. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/audit_progress.py +0 -0
  28. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/blind_review_artifacts.py +0 -0
  29. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/blind_review_coordinator.py +0 -0
  30. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/bootstrap.py +0 -0
  31. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/builder_experiment.py +0 -0
  32. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/__init__.py +0 -0
  33. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/arms.py +0 -0
  34. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/auto_discovery.py +0 -0
  35. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/commands.py +0 -0
  36. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/context_inputs.py +0 -0
  37. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/corpus.py +0 -0
  38. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/evidence.py +0 -0
  39. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/evidence_report.py +0 -0
  40. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/identity.py +0 -0
  41. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/metrics.py +0 -0
  42. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/overlap.py +0 -0
  43. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/planning.py +0 -0
  44. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/policy.py +0 -0
  45. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/results.py +0 -0
  46. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/run_results.py +0 -0
  47. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/run_status.py +0 -0
  48. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/runner.py +0 -0
  49. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/truth.py +0 -0
  50. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/calibration/value_report.py +0 -0
  51. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/checks.py +0 -0
  52. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/claude_audit_pr.py +0 -0
  53. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/claude_cli_bounce.py +0 -0
  54. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/claude_cli_environment.py +0 -0
  55. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/clear_stale.py +0 -0
  56. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cli.py +0 -0
  57. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud.py +0 -0
  58. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/__init__.py +0 -0
  59. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/bundle.py +0 -0
  60. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/doctor.py +0 -0
  61. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/dogfood.py +0 -0
  62. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/endpoints.py +0 -0
  63. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/errors.py +0 -0
  64. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/events.py +0 -0
  65. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/export.py +0 -0
  66. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/git_metadata.py +0 -0
  67. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/manifest.py +0 -0
  68. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/operations.py +0 -0
  69. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/reports.py +0 -0
  70. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/setup.py +0 -0
  71. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/cloud_client/upload.py +0 -0
  72. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_calibration.py +0 -0
  73. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_context_packs.py +0 -0
  74. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_merge.py +0 -0
  75. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/code_mower_telemetry.py +0 -0
  76. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  77. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_env_preflight.py +0 -0
  78. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_pr.py +0 -0
  79. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  80. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  81. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/config.py +0 -0
  82. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor.py +0 -0
  83. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/__init__.py +0 -0
  84. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/cloud.py +0 -0
  85. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/common.py +0 -0
  86. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github.py +0 -0
  87. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions.py +0 -0
  88. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  89. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  90. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  91. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  92. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  93. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  94. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  95. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  96. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_api.py +0 -0
  97. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_branch.py +0 -0
  98. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_config.py +0 -0
  99. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_provider.py +0 -0
  100. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/github_repo.py +0 -0
  101. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/groups.py +0 -0
  102. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/presets.py +0 -0
  103. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/privacy.py +0 -0
  104. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  105. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  106. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  107. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_env.py +0 -0
  108. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  109. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  110. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  111. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  112. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  113. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  114. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  115. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  116. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  117. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  118. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/providers.py +0 -0
  119. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/registry.py +0 -0
  120. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/runner.py +0 -0
  121. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/runtime.py +0 -0
  122. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  123. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  124. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  125. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/init.py +0 -0
  126. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/__init__.py +0 -0
  127. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/aider.py +0 -0
  128. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  129. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/claude.py +0 -0
  130. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/codex.py +0 -0
  131. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/devin.py +0 -0
  132. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  133. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  134. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/lane_configs/local_llm.py +0 -0
  135. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_audit_pr.py +0 -0
  136. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_bakeoff.py +0 -0
  137. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_calibration.py +0 -0
  138. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/local_llm_profiles.py +0 -0
  139. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration.py +0 -0
  140. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_install.py +0 -0
  141. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_mirror.py +0 -0
  142. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_readiness.py +0 -0
  143. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/migration_rehearsal.py +0 -0
  144. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/next_steps.py +0 -0
  145. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package.py +0 -0
  146. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_content.py +0 -0
  147. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_manifest.py +0 -0
  148. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_paths.py +0 -0
  149. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_rendering.py +0 -0
  150. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/package_static.py +0 -0
  151. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/prompts.py +0 -0
  152. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_registry.py +0 -0
  153. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/__init__.py +0 -0
  154. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/comments.py +0 -0
  155. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/git.py +0 -0
  156. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/github_auth.py +0 -0
  157. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/github_pr.py +0 -0
  158. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/process.py +0 -0
  159. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/repo_paths.py +0 -0
  160. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/text_schema.py +0 -0
  161. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  162. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/provider_runners/workspace.py +0 -0
  163. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/release_readiness.py +0 -0
  164. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/reviewer_metrics.py +0 -0
  165. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/saas_reviewer_labeler.py +0 -0
  166. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/secrets.py +0 -0
  167. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/builder-experiment.example.json +0 -0
  168. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  169. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/calibration-corpus.json +0 -0
  170. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/code-mower.example.yml +0 -0
  171. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/context-packs.example.json +0 -0
  172. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  173. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  174. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  175. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  176. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  177. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  178. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  179. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  180. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/code_mower +0 -0
  181. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  182. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  183. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  184. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  185. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  186. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/providers.yml +0 -0
  187. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  188. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  189. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  190. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  191. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/trailer_comment_labeler.py +0 -0
  192. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower/versioning.py +0 -0
  193. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/SOURCES.txt +0 -0
  194. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/dependency_links.txt +0 -0
  195. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/entry_points.txt +0 -0
  196. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/requires.txt +0 -0
  197. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/src/code_mower.egg-info/top_level.txt +0 -0
  198. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/builder-experiment.example.json +0 -0
  199. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/calibration-corpus.example.json +0 -0
  200. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/calibration-corpus.json +0 -0
  201. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/code-mower.yml.j2 +0 -0
  202. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/context-packs.example.json +0 -0
  203. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/cursor/BUGBOT.md +0 -0
  204. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/acp_bridge.yml +0 -0
  205. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/aider.yml +0 -0
  206. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/antigravity_cli.yml +0 -0
  207. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/claude_audit.yml +0 -0
  208. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/claude_review.yml +0 -0
  209. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/coderabbit_cli.yml +0 -0
  210. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/codex.yml +0 -0
  211. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/cursor_bugbot.yml +0 -0
  212. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/devin.yml +0 -0
  213. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/gemini_cli.yml +0 -0
  214. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/gitar.yml +0 -0
  215. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/greptile.yml +0 -0
  216. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/hermes_cli.yml +0 -0
  217. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/local_llm.yml +0 -0
  218. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers/qodo.yml +0 -0
  219. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/providers.yml +0 -0
  220. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/reviewer-spend.example.json +0 -0
  221. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/reviewer-value-report.example.md +0 -0
  222. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  223. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  224. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  225. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  226. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  227. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  228. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  229. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  230. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_calibration_truth.py +0 -0
  231. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_checks.py +0 -0
  232. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_claude_cli_bounce.py +0 -0
  233. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_clear_stale.py +0 -0
  234. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_client.py +0 -0
  235. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_git_metadata.py +0 -0
  236. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_manifest.py +0 -0
  237. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_cloud_reports.py +0 -0
  238. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  239. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_actions_cost_summary.py +0 -0
  240. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_actions_failure_selection.py +0 -0
  241. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_boundaries.py +0 -0
  242. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_github_checks.py +0 -0
  243. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_privacy.py +0 -0
  244. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_provider_env_required.py +0 -0
  245. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_provider_env_tokens.py +0 -0
  246. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_doctor_provider_probe.py +0 -0
  247. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_local_llm_github_helpers.py +0 -0
  248. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_comments.py +0 -0
  249. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_git.py +0 -0
  250. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_github_pr.py +0 -0
  251. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_process.py +0 -0
  252. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_repo_paths.py +0 -0
  253. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_text_schema.py +0 -0
  254. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_provider_runners_workspace.py +0 -0
  255. {code_mower-0.5.0b6 → code_mower-0.5.0b7}/tests/test_reviewer_metrics_core.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 0.5.0b6
3
+ Version: 0.5.0b7
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.11
@@ -98,11 +98,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
98
98
 
99
99
  ```bash
100
100
  python3.12 --version
101
- pipx install --python python3.12 code-mower==0.5.0b6
101
+ pipx install --python python3.12 code-mower==0.5.0b7
102
102
  code-mower --version
103
103
  ```
104
104
 
105
- `0.5.0b6` is a beta release. Until Code Mower publishes a stable `1.0`
105
+ `0.5.0b7` is a beta release. Until Code Mower publishes a stable `1.0`
106
106
  line, use the explicit beta version above or allow prereleases with:
107
107
 
108
108
  ```bash
@@ -174,7 +174,8 @@ The cloud value loop is:
174
174
  2. inspect the metadata-only bundle or dogfood preview;
175
175
  3. upload only with `--yes`; and
176
176
  4. use [CodeMower.com](https://codemower.com) to see repo rollups, provider/lens
177
- signal, cost/latency, noisy lanes, and next-lane recommendations over time.
177
+ signal, cost/latency, noisy lanes, next-lane recommendations, and
178
+ token-safe evidence/detail pages over time.
178
179
 
179
180
  Start with a dry run:
180
181
 
@@ -184,6 +185,12 @@ code-mower cloud dogfood --json
184
185
 
185
186
  Nothing uploads unless you pass `--yes`.
186
187
 
188
+ Current dogfood uploads, historical catch-up imports, and calibrated
189
+ reviewer/lens evidence are intentionally separate. Imported GitHub Actions
190
+ history can prove activity and upload health; it should not be treated as
191
+ reviewer-quality evidence until it is calibrated against known-clean and
192
+ known-blocked cases.
193
+
187
194
  To connect to [CodeMower.com](https://codemower.com), sign in at
188
195
  [https://codemower.com/login](https://codemower.com/login), create or receive a
189
196
  team token, then run:
@@ -239,9 +246,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
239
246
 
240
247
  ## Installation Status
241
248
 
242
- The current public beta is `v0.5.0-beta.6` from
249
+ The current public beta is `v0.5.0-beta.7` from
243
250
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
244
- is published as `code-mower==0.5.0b6` on
251
+ is published as `code-mower==0.5.0b7` on
245
252
  [PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
246
253
  auditable source for tags, build artifacts, and release notes.
247
254
 
@@ -1,15 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: code-mower
3
- Version: 0.5.0b6
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
- Dynamic: license-file
12
-
13
1
  # Code Mower
14
2
 
15
3
  Code Mower helps teams set up AI peer-programmer and reviewer lanes on real
@@ -98,11 +86,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
98
86
 
99
87
  ```bash
100
88
  python3.12 --version
101
- pipx install --python python3.12 code-mower==0.5.0b6
89
+ pipx install --python python3.12 code-mower==0.5.0b7
102
90
  code-mower --version
103
91
  ```
104
92
 
105
- `0.5.0b6` is a beta release. Until Code Mower publishes a stable `1.0`
93
+ `0.5.0b7` is a beta release. Until Code Mower publishes a stable `1.0`
106
94
  line, use the explicit beta version above or allow prereleases with:
107
95
 
108
96
  ```bash
@@ -174,7 +162,8 @@ The cloud value loop is:
174
162
  2. inspect the metadata-only bundle or dogfood preview;
175
163
  3. upload only with `--yes`; and
176
164
  4. use [CodeMower.com](https://codemower.com) to see repo rollups, provider/lens
177
- signal, cost/latency, noisy lanes, and next-lane recommendations over time.
165
+ signal, cost/latency, noisy lanes, next-lane recommendations, and
166
+ token-safe evidence/detail pages over time.
178
167
 
179
168
  Start with a dry run:
180
169
 
@@ -184,6 +173,12 @@ code-mower cloud dogfood --json
184
173
 
185
174
  Nothing uploads unless you pass `--yes`.
186
175
 
176
+ Current dogfood uploads, historical catch-up imports, and calibrated
177
+ reviewer/lens evidence are intentionally separate. Imported GitHub Actions
178
+ history can prove activity and upload health; it should not be treated as
179
+ reviewer-quality evidence until it is calibrated against known-clean and
180
+ known-blocked cases.
181
+
187
182
  To connect to [CodeMower.com](https://codemower.com), sign in at
188
183
  [https://codemower.com/login](https://codemower.com/login), create or receive a
189
184
  team token, then run:
@@ -239,9 +234,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
239
234
 
240
235
  ## Installation Status
241
236
 
242
- The current public beta is `v0.5.0-beta.6` from
237
+ The current public beta is `v0.5.0-beta.7` from
243
238
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
244
- is published as `code-mower==0.5.0b6` on
239
+ is published as `code-mower==0.5.0b7` on
245
240
  [PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
246
241
  auditable source for tags, build artifacts, and release notes.
247
242
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "0.5.0b6"
7
+ version = "0.5.0b7"
8
8
  description = "Multi-reviewer AI code audit orchestration"
9
9
  requires-python = ">=3.11"
10
10
  readme = "README.md"
@@ -1,3 +1,3 @@
1
1
  """Code Mower package."""
2
2
 
3
- __version__ = "0.5.0b6"
3
+ __version__ = "0.5.0b7"
@@ -57,6 +57,30 @@ class DoctorReport:
57
57
  return STATUS_WARN
58
58
  return STATUS_PASS
59
59
 
60
+ @property
61
+ def run_plan(self) -> tuple[dict[str, Any], ...]:
62
+ """Return the structured doctor run plan when a report contains one."""
63
+
64
+ for check in self.checks:
65
+ if check.name != "doctor.plan" or not isinstance(check.detail, Mapping):
66
+ continue
67
+ stages = check.detail.get("stages")
68
+ if not isinstance(stages, list):
69
+ return ()
70
+ plan: list[dict[str, Any]] = []
71
+ for stage in stages:
72
+ if not isinstance(stage, Mapping):
73
+ continue
74
+ plan.append(
75
+ {
76
+ "id": str(stage.get("id", "")),
77
+ "group": str(stage.get("group", "")),
78
+ "optional": bool(stage.get("optional", False)),
79
+ }
80
+ )
81
+ return tuple(plan)
82
+ return ()
83
+
60
84
  def group_summary(self) -> dict[str, dict[str, int | str]]:
61
85
  summary: dict[str, dict[str, int | str]] = {}
62
86
  for group_id, label in GROUP_LABELS.items():
@@ -91,6 +115,7 @@ class DoctorReport:
91
115
  "failures": self.failures,
92
116
  "warnings": self.warnings,
93
117
  },
118
+ "run_plan": list(self.run_plan),
94
119
  "groups": self.group_summary(),
95
120
  "checks": [check.as_dict() for check in self.checks],
96
121
  }
@@ -39,6 +39,16 @@ def _format_status_summary(report: DoctorReport) -> str:
39
39
  return ", ".join(parts)
40
40
 
41
41
 
42
+ def _format_run_plan(report: DoctorReport) -> str | None:
43
+ if not report.run_plan:
44
+ return None
45
+ stages = []
46
+ for stage in report.run_plan:
47
+ suffix = " optional" if stage.get("optional") else ""
48
+ stages.append(f"{stage.get('id', '')} ({stage.get('group', '')}{suffix})")
49
+ return ", ".join(stages)
50
+
51
+
42
52
  def _format_check(check: DoctorCheck) -> list[str]:
43
53
  lane = f" [{check.lane}]" if check.lane else ""
44
54
  lines = [f"- {check.status.upper()} {check.name}{lane}: {check.message}"]
@@ -57,6 +67,9 @@ def render_doctor_text(report: DoctorReport) -> str:
57
67
  ]
58
68
  if report.profile:
59
69
  lines.append(f"Profile: {report.profile}")
70
+ run_plan = _format_run_plan(report)
71
+ if run_plan:
72
+ lines.append(f"Run plan: {run_plan}")
60
73
  lines.append(f"Checks: {_format_status_summary(report)}")
61
74
  lines.append("")
62
75
 
@@ -1,3 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: code-mower
3
+ Version: 0.5.0b7
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
+ Dynamic: license-file
12
+
1
13
  # Code Mower
2
14
 
3
15
  Code Mower helps teams set up AI peer-programmer and reviewer lanes on real
@@ -86,11 +98,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
86
98
 
87
99
  ```bash
88
100
  python3.12 --version
89
- pipx install --python python3.12 code-mower==0.5.0b6
101
+ pipx install --python python3.12 code-mower==0.5.0b7
90
102
  code-mower --version
91
103
  ```
92
104
 
93
- `0.5.0b6` is a beta release. Until Code Mower publishes a stable `1.0`
105
+ `0.5.0b7` is a beta release. Until Code Mower publishes a stable `1.0`
94
106
  line, use the explicit beta version above or allow prereleases with:
95
107
 
96
108
  ```bash
@@ -162,7 +174,8 @@ The cloud value loop is:
162
174
  2. inspect the metadata-only bundle or dogfood preview;
163
175
  3. upload only with `--yes`; and
164
176
  4. use [CodeMower.com](https://codemower.com) to see repo rollups, provider/lens
165
- signal, cost/latency, noisy lanes, and next-lane recommendations over time.
177
+ signal, cost/latency, noisy lanes, next-lane recommendations, and
178
+ token-safe evidence/detail pages over time.
166
179
 
167
180
  Start with a dry run:
168
181
 
@@ -172,6 +185,12 @@ code-mower cloud dogfood --json
172
185
 
173
186
  Nothing uploads unless you pass `--yes`.
174
187
 
188
+ Current dogfood uploads, historical catch-up imports, and calibrated
189
+ reviewer/lens evidence are intentionally separate. Imported GitHub Actions
190
+ history can prove activity and upload health; it should not be treated as
191
+ reviewer-quality evidence until it is calibrated against known-clean and
192
+ known-blocked cases.
193
+
175
194
  To connect to [CodeMower.com](https://codemower.com), sign in at
176
195
  [https://codemower.com/login](https://codemower.com/login), create or receive a
177
196
  team token, then run:
@@ -227,9 +246,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
227
246
 
228
247
  ## Installation Status
229
248
 
230
- The current public beta is `v0.5.0-beta.6` from
249
+ The current public beta is `v0.5.0-beta.7` from
231
250
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and it
232
- is published as `code-mower==0.5.0b6` on
251
+ is published as `code-mower==0.5.0b7` on
233
252
  [PyPI](https://pypi.org/project/code-mower/). GitHub releases remain the
234
253
  auditable source for tags, build artifacts, and release notes.
235
254
 
@@ -26,6 +26,14 @@ class DoctorOutputTests(unittest.TestCase):
26
26
  name="doctor.plan",
27
27
  status=STATUS_PASS,
28
28
  message="doctor run plan: load-inputs, select-profile, runtime, providers",
29
+ detail={
30
+ "stages": [
31
+ {"id": "load-inputs", "group": "runtime", "optional": False},
32
+ {"id": "select-profile", "group": "runtime", "optional": False},
33
+ {"id": "runtime", "group": "runtime", "optional": False},
34
+ {"id": "providers", "group": "providers", "optional": False},
35
+ ]
36
+ },
29
37
  ),
30
38
  DoctorCheck(
31
39
  name="runtime.python",
@@ -59,6 +67,11 @@ class DoctorOutputTests(unittest.TestCase):
59
67
 
60
68
  rendered = output.render_doctor_text(report)
61
69
 
70
+ self.assertIn(
71
+ "Run plan: load-inputs (runtime), select-profile (runtime), "
72
+ "runtime (runtime), providers (providers)",
73
+ rendered,
74
+ )
62
75
  self.assertIn("Checks: 7 total, 2 warnings, 1 skipped", rendered)
63
76
  self.assertLess(rendered.index("Setup"), rendered.index("Runtime"))
64
77
  self.assertLess(rendered.index("Runtime"), rendered.index("Provider lanes"))
@@ -54,6 +54,14 @@ class DoctorRegistryTests(unittest.TestCase):
54
54
  tuple(stage["id"] for stage in plan_check.detail["stages"]),
55
55
  ("load-inputs", "select-profile", "runtime", "providers", "github", "cloud"),
56
56
  )
57
+ self.assertEqual(
58
+ tuple(stage["id"] for stage in report.run_plan),
59
+ ("load-inputs", "select-profile", "runtime", "providers", "github", "cloud"),
60
+ )
61
+ self.assertEqual(
62
+ tuple(stage["id"] for stage in report.as_dict()["run_plan"]),
63
+ ("load-inputs", "select-profile", "runtime", "providers", "github", "cloud"),
64
+ )
57
65
 
58
66
 
59
67
  if __name__ == "__main__":
@@ -47,7 +47,7 @@ from scripts import privacy_scan
47
47
 
48
48
  class ReleaseHygieneTests(unittest.TestCase):
49
49
  def test_version_is_current_v05_prerelease(self) -> None:
50
- self.assertEqual(__version__, "0.5.0b6")
50
+ self.assertEqual(__version__, "0.5.0b7")
51
51
 
52
52
  def test_release_workflow_verifies_downloaded_distributions_before_publish(self) -> None:
53
53
  workflow = (ROOT / ".github/workflows/release.yml").read_text(encoding="utf-8")
@@ -158,7 +158,7 @@ class ReleaseHygieneTests(unittest.TestCase):
158
158
  self.assertIn(
159
159
  (
160
160
  "code-mower migration package-install-rehearsal --package-spec "
161
- "code-mower==0.5.0b6 --json"
161
+ "code-mower==0.5.0b7 --json"
162
162
  ),
163
163
  help_text,
164
164
  )
@@ -1367,8 +1367,8 @@ printf '%s\\n' "${lane}"
1367
1367
  fromlist=["current_alpha_package_spec"],
1368
1368
  )
1369
1369
  self.assertEqual(
1370
- legacy_module.current_alpha_package_spec("0.5.0b6"),
1371
- "code-mower==0.5.0b6",
1370
+ legacy_module.current_alpha_package_spec("0.5.0b7"),
1371
+ "code-mower==0.5.0b7",
1372
1372
  )
1373
1373
  finally:
1374
1374
  sys.path[:] = original_path
@@ -1405,7 +1405,7 @@ printf '%s\\n' "${lane}"
1405
1405
  "-c",
1406
1406
  (
1407
1407
  "from tools import code_mower_package_content as c; "
1408
- "print(c.current_alpha_package_spec('0.5.0b6'))"
1408
+ "print(c.current_alpha_package_spec('0.5.0b7'))"
1409
1409
  ),
1410
1410
  ],
1411
1411
  cwd=tmp_path,
@@ -1418,7 +1418,7 @@ printf '%s\\n' "${lane}"
1418
1418
  self.assertEqual(completed.returncode, 0, completed.stderr)
1419
1419
  self.assertEqual(
1420
1420
  completed.stdout.strip(),
1421
- "code-mower==0.5.0b6",
1421
+ "code-mower==0.5.0b7",
1422
1422
  )
1423
1423
 
1424
1424
  def test_package_rendering_legacy_fallback_stays_valid_yaml_subset(self) -> None:
@@ -1494,11 +1494,11 @@ printf '%s\\n' "${lane}"
1494
1494
  (output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
1495
1495
  )
1496
1496
  self.assertIn(
1497
- 'version = "0.5.0b6"',
1497
+ 'version = "0.5.0b7"',
1498
1498
  (output_dir / "pyproject.toml").read_text(encoding="utf-8"),
1499
1499
  )
1500
1500
  self.assertIn(
1501
- '__version__ = "0.5.0b6"',
1501
+ '__version__ = "0.5.0b7"',
1502
1502
  (output_dir / "src/code_mower/__init__.py").read_text(
1503
1503
  encoding="utf-8"
1504
1504
  ),
@@ -2967,7 +2967,7 @@ def main():
2967
2967
  {
2968
2968
  "status": "pass",
2969
2969
  "package_spec": "code-mower",
2970
- "version": "code-mower 0.5.0b6",
2970
+ "version": "code-mower 0.5.0b7",
2971
2971
  "work_dir": "/tmp/code-mower-rehearsal",
2972
2972
  "toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
2973
2973
  "step_count": 1,
@@ -3079,7 +3079,7 @@ def main():
3079
3079
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3080
3080
  toy_repo=toy_repo,
3081
3081
  outputs=outputs,
3082
- version="code-mower 0.5.0b6",
3082
+ version="code-mower 0.5.0b7",
3083
3083
  steps=[
3084
3084
  {
3085
3085
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3158,7 +3158,7 @@ def main():
3158
3158
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3159
3159
  toy_repo=toy_repo,
3160
3160
  outputs=outputs,
3161
- version="code-mower 0.5.0b6",
3161
+ version="code-mower 0.5.0b7",
3162
3162
  steps=[
3163
3163
  {
3164
3164
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3220,7 +3220,7 @@ def main():
3220
3220
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3221
3221
  toy_repo=toy_repo,
3222
3222
  outputs=outputs,
3223
- version="code-mower 0.5.0b6",
3223
+ version="code-mower 0.5.0b7",
3224
3224
  steps=[
3225
3225
  {
3226
3226
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3286,24 +3286,24 @@ def main():
3286
3286
  )
3287
3287
  self.assertEqual(
3288
3288
  code_mower_migration._resolve_install_package_spec(
3289
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.6",
3289
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.7",
3290
3290
  base_dir=package,
3291
3291
  ),
3292
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.6",
3292
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.7",
3293
3293
  )
3294
3294
  self.assertEqual(
3295
3295
  code_mower_migration._resolve_install_package_spec(
3296
- "code-mower==0.5.0b6",
3296
+ "code-mower==0.5.0b7",
3297
3297
  base_dir=package,
3298
3298
  ),
3299
- "code-mower==0.5.0b6",
3299
+ "code-mower==0.5.0b7",
3300
3300
  )
3301
3301
 
3302
3302
  def test_package_install_rehearsal_supports_index_aware_pip_install(self) -> None:
3303
3303
  self.assertEqual(
3304
3304
  code_mower_migration._pip_install_command(
3305
3305
  Path("/tmp/venv/bin/python"),
3306
- "code-mower==0.5.0b6",
3306
+ "code-mower==0.5.0b7",
3307
3307
  pip_index_url="https://test.pypi.org/simple/",
3308
3308
  pip_extra_index_urls=["https://pypi.org/simple/"],
3309
3309
  ),
@@ -3316,7 +3316,7 @@ def main():
3316
3316
  "https://test.pypi.org/simple/",
3317
3317
  "--extra-index-url",
3318
3318
  "https://pypi.org/simple/",
3319
- "code-mower==0.5.0b6",
3319
+ "code-mower==0.5.0b7",
3320
3320
  ],
3321
3321
  )
3322
3322
 
@@ -3336,10 +3336,10 @@ def main():
3336
3336
  payload = release_readiness.render_release_readiness(ROOT)
3337
3337
 
3338
3338
  self.assertEqual(payload["status"], "pass")
3339
- self.assertEqual(payload["version"], "0.5.0b6")
3340
- self.assertEqual(payload["release_tag"], "v0.5.0-beta.6")
3341
- self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.6")
3342
- self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b6")
3339
+ self.assertEqual(payload["version"], "0.5.0b7")
3340
+ self.assertEqual(payload["release_tag"], "v0.5.0-beta.7")
3341
+ self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.7")
3342
+ self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b7")
3343
3343
  check_ids = {check["id"]: check for check in payload["checks"]}
3344
3344
  self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
3345
3345
  self.assertEqual(
@@ -3388,7 +3388,7 @@ def main():
3388
3388
  check_ids = {check["id"]: check for check in payload["checks"]}
3389
3389
  check = check_ids["materialized-package-version-consistency"]
3390
3390
  self.assertEqual(check["status"], "fail")
3391
- self.assertEqual(check["detail"]["source_version"], "0.5.0b6")
3391
+ self.assertEqual(check["detail"]["source_version"], "0.5.0b7")
3392
3392
  self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
3393
3393
 
3394
3394
  def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
@@ -3468,20 +3468,20 @@ def main():
3468
3468
 
3469
3469
  def test_release_readiness_tag_derivation_supports_release_stages(self) -> None:
3470
3470
  self.assertEqual(
3471
- release_readiness._release_tag_for_version("0.5.0b6"),
3472
- "v0.5.0-beta.6",
3471
+ release_readiness._release_tag_for_version("0.5.0b7"),
3472
+ "v0.5.0-beta.7",
3473
3473
  )
3474
3474
  self.assertEqual(
3475
- code_mower_versioning.release_tag_for_version("0.5.0b6"),
3476
- "v0.5.0-beta.6",
3475
+ code_mower_versioning.release_tag_for_version("0.5.0b7"),
3476
+ "v0.5.0-beta.7",
3477
3477
  )
3478
3478
  self.assertEqual(
3479
- release_readiness._release_tag_for_version("0.5.0b6"),
3480
- "v0.5.0-beta.6",
3479
+ release_readiness._release_tag_for_version("0.5.0b7"),
3480
+ "v0.5.0-beta.7",
3481
3481
  )
3482
3482
  self.assertEqual(
3483
- code_mower_versioning.release_tag_for_version("0.5.0b6"),
3484
- "v0.5.0-beta.6",
3483
+ code_mower_versioning.release_tag_for_version("0.5.0b7"),
3484
+ "v0.5.0-beta.7",
3485
3485
  )
3486
3486
  self.assertEqual(
3487
3487
  release_readiness._release_tag_for_version("1.0.0rc1"),
@@ -3510,8 +3510,8 @@ def main():
3510
3510
  next_steps.current_alpha_package_spec(),
3511
3511
  )
3512
3512
  self.assertEqual(
3513
- code_mower_package_content.current_alpha_package_spec("0.5.0b6"),
3514
- "code-mower==0.5.0b6",
3513
+ code_mower_package_content.current_alpha_package_spec("0.5.0b7"),
3514
+ "code-mower==0.5.0b7",
3515
3515
  )
3516
3516
  self.assertNotIn(next_steps.current_public_tag(), package_content_text)
3517
3517
  self.assertNotIn("v0.0.0", package_content_text)
@@ -3683,7 +3683,7 @@ def main():
3683
3683
  step for step in plan["steps"] if step["id"] == "package-install-rehearsal"
3684
3684
  )
3685
3685
  self.assertIn("doctor --v05", doctor_step["command"])
3686
- self.assertIn("code-mower==0.5.0b6", package_step["command"])
3686
+ self.assertIn("code-mower==0.5.0b7", package_step["command"])
3687
3687
  self.assertIn("current published PyPI prerelease", package_step["why"])
3688
3688
  self.assertIn("first_user_readiness", package_step["why"])
3689
3689
  self.assertEqual(
File without changes
File without changes
File without changes
File without changes
File without changes