code-mower 0.5.0b32__tar.gz → 0.5.0b33__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 (272) hide show
  1. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/PKG-INFO +6 -6
  2. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/README.md +5 -5
  3. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/pyproject.toml +1 -1
  4. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/__init__.py +1 -1
  5. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cli.py +1 -1
  6. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/export.py +8 -5
  7. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/migration_readiness.py +1 -1
  8. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower.egg-info/PKG-INFO +6 -6
  9. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_cloud_client.py +5 -1
  10. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_local_cli.py +2 -2
  11. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_release_hygiene.py +36 -36
  12. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/CODE_OF_CONDUCT.md +0 -0
  13. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/LICENSE +0 -0
  14. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/MANIFEST.in +0 -0
  15. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/NOTICE +0 -0
  16. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/SUPPORT.md +0 -0
  17. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/requirements/requirements.txt +0 -0
  18. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/setup.cfg +0 -0
  19. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/adapters/__init__.py +0 -0
  20. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/adapters/_base.py +0 -0
  21. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  22. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/adapters/gitar.py +0 -0
  23. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/adapters/greptile.py +0 -0
  24. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/adapters/qodo.py +0 -0
  25. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  26. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/audit_handoff_log.py +0 -0
  27. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/audit_labeler_lib.py +0 -0
  28. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/audit_progress.py +0 -0
  29. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/blind_review_artifacts.py +0 -0
  30. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/blind_review_coordinator.py +0 -0
  31. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/bootstrap.py +0 -0
  32. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/builder_experiment.py +0 -0
  33. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/__init__.py +0 -0
  34. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/arms.py +0 -0
  35. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/auto_discovery.py +0 -0
  36. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/commands.py +0 -0
  37. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/context_inputs.py +0 -0
  38. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/corpus.py +0 -0
  39. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/effect_report.py +0 -0
  40. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/evidence.py +0 -0
  41. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/evidence_report.py +0 -0
  42. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/identity.py +0 -0
  43. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/metrics.py +0 -0
  44. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/overlap.py +0 -0
  45. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/planning.py +0 -0
  46. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/policy.py +0 -0
  47. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/results.py +0 -0
  48. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/run_results.py +0 -0
  49. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/run_status.py +0 -0
  50. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/runner.py +0 -0
  51. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/truth.py +0 -0
  52. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/calibration/value_report.py +0 -0
  53. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/checks.py +0 -0
  54. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/claude_audit_pr.py +0 -0
  55. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/claude_cli_bounce.py +0 -0
  56. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/claude_cli_environment.py +0 -0
  57. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/clear_stale.py +0 -0
  58. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud.py +0 -0
  59. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/__init__.py +0 -0
  60. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/bundle.py +0 -0
  61. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/doctor.py +0 -0
  62. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/dogfood.py +0 -0
  63. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/endpoints.py +0 -0
  64. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/errors.py +0 -0
  65. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/events.py +0 -0
  66. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/git_metadata.py +0 -0
  67. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/manifest.py +0 -0
  68. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/operations.py +0 -0
  69. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/reports.py +0 -0
  70. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/setup.py +0 -0
  71. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/cloud_client/upload.py +0 -0
  72. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/code_mower_calibration.py +0 -0
  73. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/code_mower_context_packs.py +0 -0
  74. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/code_mower_merge.py +0 -0
  75. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/code_mower_telemetry.py +0 -0
  76. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  77. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/codex_audit_env_preflight.py +0 -0
  78. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/codex_audit_pr.py +0 -0
  79. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  80. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  81. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/config.py +0 -0
  82. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor.py +0 -0
  83. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/__init__.py +0 -0
  84. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/cloud.py +0 -0
  85. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/common.py +0 -0
  86. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github.py +0 -0
  87. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions.py +0 -0
  88. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  89. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  90. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  91. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  92. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  93. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  94. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  95. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  96. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_api.py +0 -0
  97. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_branch.py +0 -0
  98. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_config.py +0 -0
  99. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_provider.py +0 -0
  100. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/github_repo.py +0 -0
  101. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/groups.py +0 -0
  102. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/models.py +0 -0
  103. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/output.py +0 -0
  104. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/presets.py +0 -0
  105. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/privacy.py +0 -0
  106. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  107. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  108. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  109. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_env.py +0 -0
  110. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  111. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  112. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  113. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  114. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  115. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  116. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  117. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  118. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  119. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  120. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  121. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/providers.py +0 -0
  122. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/registry.py +0 -0
  123. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/runner.py +0 -0
  124. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/runtime.py +0 -0
  125. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  126. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  127. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  128. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/init.py +0 -0
  129. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/__init__.py +0 -0
  130. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/aider.py +0 -0
  131. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  132. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/claude.py +0 -0
  133. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/codex.py +0 -0
  134. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/devin.py +0 -0
  135. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  136. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  137. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/lane_configs/local_llm.py +0 -0
  138. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/local_llm_audit_pr.py +0 -0
  139. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/local_llm_bakeoff.py +0 -0
  140. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/local_llm_calibration.py +0 -0
  141. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/local_llm_profiles.py +0 -0
  142. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/migration.py +0 -0
  143. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/migration_install.py +0 -0
  144. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/migration_mirror.py +0 -0
  145. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/migration_rehearsal.py +0 -0
  146. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/next_steps.py +0 -0
  147. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/package.py +0 -0
  148. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/package_content.py +0 -0
  149. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/package_manifest.py +0 -0
  150. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/package_paths.py +0 -0
  151. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/package_rendering.py +0 -0
  152. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/package_static.py +0 -0
  153. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/prompts.py +0 -0
  154. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_registry.py +0 -0
  155. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/__init__.py +0 -0
  156. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/comments.py +0 -0
  157. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/git.py +0 -0
  158. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/github_auth.py +0 -0
  159. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/github_pr.py +0 -0
  160. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  161. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/process.py +0 -0
  162. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/repo_paths.py +0 -0
  163. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/text_schema.py +0 -0
  164. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  165. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/provider_runners/workspace.py +0 -0
  166. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/providers/__init__.py +0 -0
  167. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/providers/local_cli.py +0 -0
  168. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/providers/provenance.py +0 -0
  169. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/release_readiness.py +0 -0
  170. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/reviewer_metrics.py +0 -0
  171. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/saas_reviewer_labeler.py +0 -0
  172. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/secrets.py +0 -0
  173. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/builder-experiment.example.json +0 -0
  174. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  175. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/calibration-corpus.json +0 -0
  176. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/code-mower.example.yml +0 -0
  177. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/context-packs.example.json +0 -0
  178. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  179. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  180. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  181. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  182. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  183. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  184. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  185. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  186. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/product-support/code_mower +0 -0
  187. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  188. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  189. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  190. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  191. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  192. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/providers.yml +0 -0
  193. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  194. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  195. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  196. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  197. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  198. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  199. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  200. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  201. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  202. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/trailer_comment_labeler.py +0 -0
  203. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/versioning.py +0 -0
  204. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower/work_orders.py +0 -0
  205. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower.egg-info/SOURCES.txt +0 -0
  206. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower.egg-info/dependency_links.txt +0 -0
  207. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower.egg-info/entry_points.txt +0 -0
  208. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower.egg-info/requires.txt +0 -0
  209. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/src/code_mower.egg-info/top_level.txt +0 -0
  210. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/builder-experiment.example.json +0 -0
  211. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/calibration-corpus.example.json +0 -0
  212. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/calibration-corpus.json +0 -0
  213. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/code-mower.yml.j2 +0 -0
  214. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/context-packs.example.json +0 -0
  215. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/cursor/BUGBOT.md +0 -0
  216. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/acp_bridge.yml +0 -0
  217. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/aider.yml +0 -0
  218. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/antigravity_cli.yml +0 -0
  219. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/claude_audit.yml +0 -0
  220. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/claude_review.yml +0 -0
  221. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/coderabbit_cli.yml +0 -0
  222. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/codex.yml +0 -0
  223. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/cursor_bugbot.yml +0 -0
  224. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/devin.yml +0 -0
  225. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/gemini_cli.yml +0 -0
  226. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/gitar.yml +0 -0
  227. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/greptile.yml +0 -0
  228. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/hermes_cli.yml +0 -0
  229. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/local_llm.yml +0 -0
  230. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers/qodo.yml +0 -0
  231. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/providers.yml +0 -0
  232. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/reviewer-spend.example.json +0 -0
  233. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/reviewer-value-report.example.md +0 -0
  234. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  235. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  236. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  237. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  238. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  239. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  240. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  241. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  242. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_calibration_effect_report.py +0 -0
  243. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_calibration_truth.py +0 -0
  244. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_checks.py +0 -0
  245. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_claude_cli_bounce.py +0 -0
  246. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_clear_stale.py +0 -0
  247. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_cloud_git_metadata.py +0 -0
  248. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_cloud_manifest.py +0 -0
  249. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_cloud_reports.py +0 -0
  250. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  251. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_actions_cost_summary.py +0 -0
  252. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_actions_failure_selection.py +0 -0
  253. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_boundaries.py +0 -0
  254. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_github_checks.py +0 -0
  255. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_output.py +0 -0
  256. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_privacy.py +0 -0
  257. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_provider_env_required.py +0 -0
  258. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_provider_env_tokens.py +0 -0
  259. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_provider_probe.py +0 -0
  260. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_provider_review_hygiene.py +0 -0
  261. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_doctor_registry.py +0 -0
  262. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_local_llm_github_helpers.py +0 -0
  263. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_comments.py +0 -0
  264. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_git.py +0 -0
  265. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_github_pr.py +0 -0
  266. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_pr_worktree.py +0 -0
  267. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_process.py +0 -0
  268. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_repo_paths.py +0 -0
  269. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_text_schema.py +0 -0
  270. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_provider_runners_workspace.py +0 -0
  271. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_reviewer_metrics_core.py +0 -0
  272. {code_mower-0.5.0b32 → code_mower-0.5.0b33}/tests/test_work_orders.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 0.5.0b32
3
+ Version: 0.5.0b33
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.11
@@ -103,11 +103,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
103
103
 
104
104
  ```bash
105
105
  python3.12 --version
106
- pipx install --python python3.12 code-mower==0.5.0b32
106
+ pipx install --python python3.12 code-mower==0.5.0b33
107
107
  code-mower --version
108
108
  ```
109
109
 
110
- `0.5.0b32` is a beta release. Until Code Mower publishes a stable `1.0`
110
+ `0.5.0b33` is a beta release. Until Code Mower publishes a stable `1.0`
111
111
  line, use the explicit beta version above or allow prereleases with:
112
112
 
113
113
  ```bash
@@ -150,7 +150,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
150
150
 
151
151
  The current PyPI beta has been rehearsed end-to-end from a clean install:
152
152
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
153
- the latest 10/10 public-package readiness proof for `code-mower==0.5.0b32`.
153
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b33`.
154
154
 
155
155
  ## Optional: Plan Before Coding
156
156
 
@@ -291,9 +291,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
291
291
 
292
292
  ## Installation Status
293
293
 
294
- The current public beta is `v0.5.0-beta.32` from
294
+ The current public beta is `v0.5.0-beta.33` from
295
295
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
296
- as `code-mower==0.5.0b32` on [PyPI](https://pypi.org/project/code-mower/).
296
+ as `code-mower==0.5.0b33` on [PyPI](https://pypi.org/project/code-mower/).
297
297
  GitHub releases remain the auditable source for tags, build artifacts, and
298
298
  release notes.
299
299
 
@@ -88,11 +88,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
88
88
 
89
89
  ```bash
90
90
  python3.12 --version
91
- pipx install --python python3.12 code-mower==0.5.0b32
91
+ pipx install --python python3.12 code-mower==0.5.0b33
92
92
  code-mower --version
93
93
  ```
94
94
 
95
- `0.5.0b32` is a beta release. Until Code Mower publishes a stable `1.0`
95
+ `0.5.0b33` is a beta release. Until Code Mower publishes a stable `1.0`
96
96
  line, use the explicit beta version above or allow prereleases with:
97
97
 
98
98
  ```bash
@@ -135,7 +135,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
135
135
 
136
136
  The current PyPI beta has been rehearsed end-to-end from a clean install:
137
137
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
138
- the latest 10/10 public-package readiness proof for `code-mower==0.5.0b32`.
138
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b33`.
139
139
 
140
140
  ## Optional: Plan Before Coding
141
141
 
@@ -276,9 +276,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
276
276
 
277
277
  ## Installation Status
278
278
 
279
- The current public beta is `v0.5.0-beta.32` from
279
+ The current public beta is `v0.5.0-beta.33` from
280
280
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
281
- as `code-mower==0.5.0b32` on [PyPI](https://pypi.org/project/code-mower/).
281
+ as `code-mower==0.5.0b33` on [PyPI](https://pypi.org/project/code-mower/).
282
282
  GitHub releases remain the auditable source for tags, build artifacts, and
283
283
  release notes.
284
284
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "0.5.0b32"
7
+ version = "0.5.0b33"
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.0b32"
3
+ __version__ = "0.5.0b33"
@@ -14,7 +14,7 @@ from pathlib import Path
14
14
  if __package__ in {None, ""}:
15
15
  raise SystemExit(
16
16
  "code_mower.cli is a packaged entrypoint. Install Code Mower with "
17
- "`pipx install code-mower==0.5.0b32`, or run source checkouts with "
17
+ "`pipx install code-mower==0.5.0b33`, or run source checkouts with "
18
18
  "`PYTHONPATH=src python -m code_mower.cli`."
19
19
  )
20
20
 
@@ -191,11 +191,13 @@ def build_cloud_bundle(
191
191
  raise CloudBundleError(
192
192
  f"too many events: {len(included_events)}; max {MAX_EVENT_COUNT}"
193
193
  )
194
+ upload_ready = not anonymous and bool(included_reports or included_events)
195
+ upload_status = "ready_for_dry_run" if upload_ready else "local_export_only"
194
196
  manifest = {
195
197
  "schema": BUNDLE_SCHEMA,
196
198
  "privacy_mode": "anonymous" if anonymous else "metadata_and_reports",
197
- "upload_ready": False,
198
- "upload_status": "local_export_only",
199
+ "upload_ready": upload_ready,
200
+ "upload_status": upload_status,
199
201
  "repo_slug": "" if anonymous else repo_slug,
200
202
  "team_id": "" if anonymous else team_id,
201
203
  "install_id": "" if anonymous else install_id,
@@ -204,7 +206,7 @@ def build_cloud_bundle(
204
206
  "provenance": {} if anonymous else build_provenance_summary(included_events),
205
207
  "excluded_content": list(EXCLUDED_CONTENT),
206
208
  "notes": [
207
- "This bundle is local-only; upload support must present a dry-run before network transfer.",
209
+ "This bundle is local-first and inspectable; upload requires an explicit dry-run and --yes before network transfer.",
208
210
  "Do not include source code, raw diffs, raw transcripts, raw stdout/stderr, auth output, or secrets.",
209
211
  "Reports are copied exactly as supplied; review them before sharing outside your machine.",
210
212
  "Structured events are metadata-only and should not contain source, diffs, transcripts, stdout/stderr, auth output, or secrets.",
@@ -243,7 +245,8 @@ def build_cloud_bundle(
243
245
  "event_count": len(manifest["events"]),
244
246
  "event_types": event_type_counts(manifest["events"]),
245
247
  "provenance": manifest["provenance"],
246
- "upload_ready": False,
248
+ "upload_ready": upload_ready,
249
+ "upload_status": upload_status,
247
250
  }
248
251
 
249
252
 
@@ -379,7 +382,7 @@ def render_bundle_readme(manifest: dict[str, Any]) -> str:
379
382
  "# Code Mower Cloud Benchmark Bundle",
380
383
  "",
381
384
  "This local bundle is the cloud-ready handoff shape for opt-in benchmark reporting.",
382
- "It is not uploaded by the OSS CLI.",
385
+ "It is never uploaded automatically; run `code-mower cloud upload --dry-run` first, then add `--yes` only after inspection.",
383
386
  "",
384
387
  "Excluded by default:",
385
388
  ]
@@ -191,7 +191,7 @@ def first_user_readiness_scorecard(
191
191
  isinstance(cloud_export_payload, dict)
192
192
  and cloud_export_payload.get("mode") == "cloud-export"
193
193
  and len(cloud_export_payload.get("included_reports") or ()) >= 3
194
- and cloud_export_payload.get("upload_ready") is False
194
+ and cloud_export_payload.get("upload_ready") is True
195
195
  )
196
196
  else "fail"
197
197
  ),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 0.5.0b32
3
+ Version: 0.5.0b33
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.11
@@ -103,11 +103,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
103
103
 
104
104
  ```bash
105
105
  python3.12 --version
106
- pipx install --python python3.12 code-mower==0.5.0b32
106
+ pipx install --python python3.12 code-mower==0.5.0b33
107
107
  code-mower --version
108
108
  ```
109
109
 
110
- `0.5.0b32` is a beta release. Until Code Mower publishes a stable `1.0`
110
+ `0.5.0b33` is a beta release. Until Code Mower publishes a stable `1.0`
111
111
  line, use the explicit beta version above or allow prereleases with:
112
112
 
113
113
  ```bash
@@ -150,7 +150,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
150
150
 
151
151
  The current PyPI beta has been rehearsed end-to-end from a clean install:
152
152
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
153
- the latest 10/10 public-package readiness proof for `code-mower==0.5.0b32`.
153
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b33`.
154
154
 
155
155
  ## Optional: Plan Before Coding
156
156
 
@@ -291,9 +291,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
291
291
 
292
292
  ## Installation Status
293
293
 
294
- The current public beta is `v0.5.0-beta.32` from
294
+ The current public beta is `v0.5.0-beta.33` from
295
295
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
296
- as `code-mower==0.5.0b32` on [PyPI](https://pypi.org/project/code-mower/).
296
+ as `code-mower==0.5.0b33` on [PyPI](https://pypi.org/project/code-mower/).
297
297
  GitHub releases remain the auditable source for tags, build artifacts, and
298
298
  release notes.
299
299
 
@@ -210,6 +210,8 @@ def test_cloud_export_builds_metadata_only_bundle_from_client_module() -> None:
210
210
  )
211
211
 
212
212
  assert result["mode"] == "cloud-export"
213
+ assert result["upload_ready"] is True
214
+ assert result["upload_status"] == "ready_for_dry_run"
213
215
  assert (root / "bundle" / BUNDLE_MANIFEST_FILENAME).is_file()
214
216
  upload = build_upload_payload(bundle_dir=root / "bundle")
215
217
  assert upload["upload_mode"] == "metadata_only"
@@ -269,6 +271,8 @@ def test_cloud_export_accepts_work_order_provenance_event() -> None:
269
271
  repo_slug="owner/repo",
270
272
  )
271
273
 
274
+ assert result["upload_ready"] is True
275
+ assert result["upload_status"] == "ready_for_dry_run"
272
276
  assert result["event_types"] == {"work_order": 1}
273
277
  upload = build_upload_payload(bundle_dir=root / "bundle")
274
278
  assert upload["events"][0]["event_type"] == "work_order"
@@ -357,7 +361,7 @@ def test_provenance_summary_preserves_source_quality_fields() -> None:
357
361
  "tool": {
358
362
  "role": "reporter",
359
363
  "tool_name": "code-mower",
360
- "tool_version": "0.5.0b32",
364
+ "tool_version": "0.5.0b33",
361
365
  "provider": "code-mower",
362
366
  "model": "",
363
367
  "model_source": "not_applicable",
@@ -436,11 +436,11 @@ def test_provider_lane_tool_provenance_reads_model_from_selected_profile(
436
436
  def test_code_mower_reporter_provenance_marks_model_not_applicable() -> None:
437
437
  tool = build_code_mower_tool_provenance(
438
438
  source="unit-test",
439
- version="0.5.0b32",
439
+ version="0.5.0b33",
440
440
  )
441
441
 
442
442
  assert tool["tool_name"] == "code-mower"
443
- assert tool["tool_version"] == "0.5.0b32"
443
+ assert tool["tool_version"] == "0.5.0b33"
444
444
  assert tool["provider"] == "code-mower"
445
445
  assert tool["model"] == ""
446
446
  assert tool["model_source"] == "not_applicable"
@@ -49,7 +49,7 @@ from scripts import privacy_scan
49
49
 
50
50
  class ReleaseHygieneTests(unittest.TestCase):
51
51
  def test_version_is_current_v05_prerelease(self) -> None:
52
- self.assertEqual(__version__, "0.5.0b32")
52
+ self.assertEqual(__version__, "0.5.0b33")
53
53
 
54
54
  def test_release_workflow_verifies_downloaded_distributions_before_publish(self) -> None:
55
55
  workflow = (ROOT / ".github/workflows/release.yml").read_text(encoding="utf-8")
@@ -203,7 +203,7 @@ class ReleaseHygieneTests(unittest.TestCase):
203
203
  self.assertIn(
204
204
  (
205
205
  "code-mower migration package-install-rehearsal --package-spec "
206
- "code-mower==0.5.0b32 --json"
206
+ "code-mower==0.5.0b33 --json"
207
207
  ),
208
208
  help_text,
209
209
  )
@@ -1622,8 +1622,8 @@ printf '%s\\n' "${lane}"
1622
1622
  fromlist=["current_alpha_package_spec"],
1623
1623
  )
1624
1624
  self.assertEqual(
1625
- legacy_module.current_alpha_package_spec("0.5.0b32"),
1626
- "code-mower==0.5.0b32",
1625
+ legacy_module.current_alpha_package_spec("0.5.0b33"),
1626
+ "code-mower==0.5.0b33",
1627
1627
  )
1628
1628
  finally:
1629
1629
  sys.path[:] = original_path
@@ -1660,7 +1660,7 @@ printf '%s\\n' "${lane}"
1660
1660
  "-c",
1661
1661
  (
1662
1662
  "from tools import code_mower_package_content as c; "
1663
- "print(c.current_alpha_package_spec('0.5.0b32'))"
1663
+ "print(c.current_alpha_package_spec('0.5.0b33'))"
1664
1664
  ),
1665
1665
  ],
1666
1666
  cwd=tmp_path,
@@ -1673,7 +1673,7 @@ printf '%s\\n' "${lane}"
1673
1673
  self.assertEqual(completed.returncode, 0, completed.stderr)
1674
1674
  self.assertEqual(
1675
1675
  completed.stdout.strip(),
1676
- "code-mower==0.5.0b32",
1676
+ "code-mower==0.5.0b33",
1677
1677
  )
1678
1678
 
1679
1679
  def test_package_rendering_legacy_fallback_stays_valid_yaml_subset(self) -> None:
@@ -1749,11 +1749,11 @@ printf '%s\\n' "${lane}"
1749
1749
  (output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
1750
1750
  )
1751
1751
  self.assertIn(
1752
- 'version = "0.5.0b32"',
1752
+ 'version = "0.5.0b33"',
1753
1753
  (output_dir / "pyproject.toml").read_text(encoding="utf-8"),
1754
1754
  )
1755
1755
  self.assertIn(
1756
- '__version__ = "0.5.0b32"',
1756
+ '__version__ = "0.5.0b33"',
1757
1757
  (output_dir / "src/code_mower/__init__.py").read_text(
1758
1758
  encoding="utf-8"
1759
1759
  ),
@@ -3288,7 +3288,7 @@ def main():
3288
3288
  {
3289
3289
  "status": "pass",
3290
3290
  "package_spec": "code-mower",
3291
- "version": "code-mower 0.5.0b32",
3291
+ "version": "code-mower 0.5.0b33",
3292
3292
  "work_dir": "/tmp/code-mower-rehearsal",
3293
3293
  "toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
3294
3294
  "step_count": 1,
@@ -3376,7 +3376,7 @@ def main():
3376
3376
  {"kind": "lane-policy"},
3377
3377
  {"kind": "value-report"},
3378
3378
  ],
3379
- "upload_ready": False,
3379
+ "upload_ready": True,
3380
3380
  }
3381
3381
  ),
3382
3382
  encoding="utf-8",
@@ -3400,7 +3400,7 @@ def main():
3400
3400
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3401
3401
  toy_repo=toy_repo,
3402
3402
  outputs=outputs,
3403
- version="code-mower 0.5.0b32",
3403
+ version="code-mower 0.5.0b33",
3404
3404
  steps=[
3405
3405
  {
3406
3406
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3455,7 +3455,7 @@ def main():
3455
3455
  {
3456
3456
  "mode": "cloud-export",
3457
3457
  "included_reports": [{}, {}, {}],
3458
- "upload_ready": False,
3458
+ "upload_ready": True,
3459
3459
  }
3460
3460
  ),
3461
3461
  encoding="utf-8",
@@ -3479,7 +3479,7 @@ def main():
3479
3479
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3480
3480
  toy_repo=toy_repo,
3481
3481
  outputs=outputs,
3482
- version="code-mower 0.5.0b32",
3482
+ version="code-mower 0.5.0b33",
3483
3483
  steps=[
3484
3484
  {
3485
3485
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3541,7 +3541,7 @@ def main():
3541
3541
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3542
3542
  toy_repo=toy_repo,
3543
3543
  outputs=outputs,
3544
- version="code-mower 0.5.0b32",
3544
+ version="code-mower 0.5.0b33",
3545
3545
  steps=[
3546
3546
  {
3547
3547
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3607,24 +3607,24 @@ def main():
3607
3607
  )
3608
3608
  self.assertEqual(
3609
3609
  code_mower_migration._resolve_install_package_spec(
3610
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.32",
3610
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.33",
3611
3611
  base_dir=package,
3612
3612
  ),
3613
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.32",
3613
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.33",
3614
3614
  )
3615
3615
  self.assertEqual(
3616
3616
  code_mower_migration._resolve_install_package_spec(
3617
- "code-mower==0.5.0b32",
3617
+ "code-mower==0.5.0b33",
3618
3618
  base_dir=package,
3619
3619
  ),
3620
- "code-mower==0.5.0b32",
3620
+ "code-mower==0.5.0b33",
3621
3621
  )
3622
3622
 
3623
3623
  def test_package_install_rehearsal_supports_index_aware_pip_install(self) -> None:
3624
3624
  self.assertEqual(
3625
3625
  code_mower_migration._pip_install_command(
3626
3626
  Path("/tmp/venv/bin/python"),
3627
- "code-mower==0.5.0b32",
3627
+ "code-mower==0.5.0b33",
3628
3628
  pip_index_url="https://test.pypi.org/simple/",
3629
3629
  pip_extra_index_urls=["https://pypi.org/simple/"],
3630
3630
  ),
@@ -3637,7 +3637,7 @@ def main():
3637
3637
  "https://test.pypi.org/simple/",
3638
3638
  "--extra-index-url",
3639
3639
  "https://pypi.org/simple/",
3640
- "code-mower==0.5.0b32",
3640
+ "code-mower==0.5.0b33",
3641
3641
  ],
3642
3642
  )
3643
3643
 
@@ -3657,10 +3657,10 @@ def main():
3657
3657
  payload = release_readiness.render_release_readiness(ROOT)
3658
3658
 
3659
3659
  self.assertEqual(payload["status"], "pass")
3660
- self.assertEqual(payload["version"], "0.5.0b32")
3661
- self.assertEqual(payload["release_tag"], "v0.5.0-beta.32")
3662
- self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.32")
3663
- self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b32")
3660
+ self.assertEqual(payload["version"], "0.5.0b33")
3661
+ self.assertEqual(payload["release_tag"], "v0.5.0-beta.33")
3662
+ self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.33")
3663
+ self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b33")
3664
3664
  check_ids = {check["id"]: check for check in payload["checks"]}
3665
3665
  self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
3666
3666
  self.assertEqual(
@@ -3709,7 +3709,7 @@ def main():
3709
3709
  check_ids = {check["id"]: check for check in payload["checks"]}
3710
3710
  check = check_ids["materialized-package-version-consistency"]
3711
3711
  self.assertEqual(check["status"], "fail")
3712
- self.assertEqual(check["detail"]["source_version"], "0.5.0b32")
3712
+ self.assertEqual(check["detail"]["source_version"], "0.5.0b33")
3713
3713
  self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
3714
3714
 
3715
3715
  def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
@@ -3789,20 +3789,20 @@ def main():
3789
3789
 
3790
3790
  def test_release_readiness_tag_derivation_supports_release_stages(self) -> None:
3791
3791
  self.assertEqual(
3792
- release_readiness._release_tag_for_version("0.5.0b32"),
3793
- "v0.5.0-beta.32",
3792
+ release_readiness._release_tag_for_version("0.5.0b33"),
3793
+ "v0.5.0-beta.33",
3794
3794
  )
3795
3795
  self.assertEqual(
3796
- code_mower_versioning.release_tag_for_version("0.5.0b32"),
3797
- "v0.5.0-beta.32",
3796
+ code_mower_versioning.release_tag_for_version("0.5.0b33"),
3797
+ "v0.5.0-beta.33",
3798
3798
  )
3799
3799
  self.assertEqual(
3800
- release_readiness._release_tag_for_version("0.5.0b32"),
3801
- "v0.5.0-beta.32",
3800
+ release_readiness._release_tag_for_version("0.5.0b33"),
3801
+ "v0.5.0-beta.33",
3802
3802
  )
3803
3803
  self.assertEqual(
3804
- code_mower_versioning.release_tag_for_version("0.5.0b32"),
3805
- "v0.5.0-beta.32",
3804
+ code_mower_versioning.release_tag_for_version("0.5.0b33"),
3805
+ "v0.5.0-beta.33",
3806
3806
  )
3807
3807
  self.assertEqual(
3808
3808
  release_readiness._release_tag_for_version("1.0.0rc1"),
@@ -3831,8 +3831,8 @@ def main():
3831
3831
  next_steps.current_alpha_package_spec(),
3832
3832
  )
3833
3833
  self.assertEqual(
3834
- code_mower_package_content.current_alpha_package_spec("0.5.0b32"),
3835
- "code-mower==0.5.0b32",
3834
+ code_mower_package_content.current_alpha_package_spec("0.5.0b33"),
3835
+ "code-mower==0.5.0b33",
3836
3836
  )
3837
3837
  self.assertNotIn(next_steps.current_public_tag(), package_content_text)
3838
3838
  self.assertNotIn("v0.0.0", package_content_text)
@@ -4004,7 +4004,7 @@ def main():
4004
4004
  step for step in plan["steps"] if step["id"] == "package-install-rehearsal"
4005
4005
  )
4006
4006
  self.assertIn("doctor --v05", doctor_step["command"])
4007
- self.assertIn("code-mower==0.5.0b32", package_step["command"])
4007
+ self.assertIn("code-mower==0.5.0b33", package_step["command"])
4008
4008
  self.assertIn("current published PyPI prerelease", package_step["why"])
4009
4009
  self.assertIn("first_user_readiness", package_step["why"])
4010
4010
  self.assertEqual(
File without changes
File without changes
File without changes
File without changes
File without changes