code-mower 0.5.0b13__tar.gz → 0.5.0b14__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 (268) hide show
  1. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/PKG-INFO +6 -6
  2. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/README.md +5 -5
  3. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/pyproject.toml +1 -1
  4. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/__init__.py +1 -1
  5. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/__init__.py +2 -0
  6. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/results.py +41 -1
  7. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cli.py +1 -1
  8. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower.egg-info/PKG-INFO +6 -6
  9. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_calibration_truth.py +59 -0
  10. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_release_hygiene.py +34 -34
  11. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/CODE_OF_CONDUCT.md +0 -0
  12. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/LICENSE +0 -0
  13. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/MANIFEST.in +0 -0
  14. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/NOTICE +0 -0
  15. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/SUPPORT.md +0 -0
  16. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/requirements/requirements.txt +0 -0
  17. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/setup.cfg +0 -0
  18. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/adapters/__init__.py +0 -0
  19. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/adapters/_base.py +0 -0
  20. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  21. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/adapters/gitar.py +0 -0
  22. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/adapters/greptile.py +0 -0
  23. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/adapters/qodo.py +0 -0
  24. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  25. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/audit_handoff_log.py +0 -0
  26. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/audit_labeler_lib.py +0 -0
  27. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/audit_progress.py +0 -0
  28. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/blind_review_artifacts.py +0 -0
  29. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/blind_review_coordinator.py +0 -0
  30. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/bootstrap.py +0 -0
  31. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/builder_experiment.py +0 -0
  32. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/arms.py +0 -0
  33. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/auto_discovery.py +0 -0
  34. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/commands.py +0 -0
  35. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/context_inputs.py +0 -0
  36. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/corpus.py +0 -0
  37. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/effect_report.py +0 -0
  38. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/evidence.py +0 -0
  39. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/evidence_report.py +0 -0
  40. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/identity.py +0 -0
  41. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/metrics.py +0 -0
  42. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/overlap.py +0 -0
  43. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/planning.py +0 -0
  44. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/policy.py +0 -0
  45. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/run_results.py +0 -0
  46. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/run_status.py +0 -0
  47. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/runner.py +0 -0
  48. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/truth.py +0 -0
  49. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/calibration/value_report.py +0 -0
  50. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/checks.py +0 -0
  51. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/claude_audit_pr.py +0 -0
  52. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/claude_cli_bounce.py +0 -0
  53. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/claude_cli_environment.py +0 -0
  54. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/clear_stale.py +0 -0
  55. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud.py +0 -0
  56. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/__init__.py +0 -0
  57. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/bundle.py +0 -0
  58. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/doctor.py +0 -0
  59. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/dogfood.py +0 -0
  60. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/endpoints.py +0 -0
  61. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/errors.py +0 -0
  62. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/events.py +0 -0
  63. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/export.py +0 -0
  64. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/git_metadata.py +0 -0
  65. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/manifest.py +0 -0
  66. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/operations.py +0 -0
  67. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/reports.py +0 -0
  68. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/setup.py +0 -0
  69. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/cloud_client/upload.py +0 -0
  70. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/code_mower_calibration.py +0 -0
  71. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/code_mower_context_packs.py +0 -0
  72. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/code_mower_merge.py +0 -0
  73. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/code_mower_telemetry.py +0 -0
  74. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  75. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/codex_audit_env_preflight.py +0 -0
  76. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/codex_audit_pr.py +0 -0
  77. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  78. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  79. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/config.py +0 -0
  80. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor.py +0 -0
  81. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/__init__.py +0 -0
  82. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/cloud.py +0 -0
  83. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/common.py +0 -0
  84. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github.py +0 -0
  85. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions.py +0 -0
  86. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  87. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  88. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  89. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  90. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  91. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  92. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  93. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  94. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_api.py +0 -0
  95. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_branch.py +0 -0
  96. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_config.py +0 -0
  97. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_provider.py +0 -0
  98. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/github_repo.py +0 -0
  99. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/groups.py +0 -0
  100. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/models.py +0 -0
  101. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/output.py +0 -0
  102. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/presets.py +0 -0
  103. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/privacy.py +0 -0
  104. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  105. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  106. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  107. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_env.py +0 -0
  108. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  109. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  110. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  111. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  112. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  113. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  114. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  115. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  116. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  117. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  118. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/providers.py +0 -0
  119. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/registry.py +0 -0
  120. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/runner.py +0 -0
  121. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/runtime.py +0 -0
  122. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  123. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  124. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  125. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/init.py +0 -0
  126. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/__init__.py +0 -0
  127. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/aider.py +0 -0
  128. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  129. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/claude.py +0 -0
  130. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/codex.py +0 -0
  131. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/devin.py +0 -0
  132. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  133. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  134. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/lane_configs/local_llm.py +0 -0
  135. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/local_llm_audit_pr.py +0 -0
  136. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/local_llm_bakeoff.py +0 -0
  137. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/local_llm_calibration.py +0 -0
  138. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/local_llm_profiles.py +0 -0
  139. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/migration.py +0 -0
  140. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/migration_install.py +0 -0
  141. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/migration_mirror.py +0 -0
  142. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/migration_readiness.py +0 -0
  143. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/migration_rehearsal.py +0 -0
  144. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/next_steps.py +0 -0
  145. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/package.py +0 -0
  146. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/package_content.py +0 -0
  147. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/package_manifest.py +0 -0
  148. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/package_paths.py +0 -0
  149. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/package_rendering.py +0 -0
  150. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/package_static.py +0 -0
  151. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/prompts.py +0 -0
  152. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_registry.py +0 -0
  153. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/__init__.py +0 -0
  154. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/comments.py +0 -0
  155. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/git.py +0 -0
  156. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/github_auth.py +0 -0
  157. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/github_pr.py +0 -0
  158. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  159. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/process.py +0 -0
  160. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/repo_paths.py +0 -0
  161. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/text_schema.py +0 -0
  162. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  163. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/provider_runners/workspace.py +0 -0
  164. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/providers/__init__.py +0 -0
  165. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/providers/local_cli.py +0 -0
  166. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/providers/provenance.py +0 -0
  167. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/release_readiness.py +0 -0
  168. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/reviewer_metrics.py +0 -0
  169. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/saas_reviewer_labeler.py +0 -0
  170. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/secrets.py +0 -0
  171. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/builder-experiment.example.json +0 -0
  172. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  173. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/calibration-corpus.json +0 -0
  174. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/code-mower.example.yml +0 -0
  175. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/context-packs.example.json +0 -0
  176. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  177. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  178. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  179. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  180. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  181. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  182. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  183. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  184. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/product-support/code_mower +0 -0
  185. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  186. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  187. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  188. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  189. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  190. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/providers.yml +0 -0
  191. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  192. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  193. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  194. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  195. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  196. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  197. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  198. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  199. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  200. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/trailer_comment_labeler.py +0 -0
  201. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower/versioning.py +0 -0
  202. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower.egg-info/SOURCES.txt +0 -0
  203. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower.egg-info/dependency_links.txt +0 -0
  204. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower.egg-info/entry_points.txt +0 -0
  205. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower.egg-info/requires.txt +0 -0
  206. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/src/code_mower.egg-info/top_level.txt +0 -0
  207. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/builder-experiment.example.json +0 -0
  208. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/calibration-corpus.example.json +0 -0
  209. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/calibration-corpus.json +0 -0
  210. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/code-mower.yml.j2 +0 -0
  211. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/context-packs.example.json +0 -0
  212. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/cursor/BUGBOT.md +0 -0
  213. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/acp_bridge.yml +0 -0
  214. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/aider.yml +0 -0
  215. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/antigravity_cli.yml +0 -0
  216. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/claude_audit.yml +0 -0
  217. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/claude_review.yml +0 -0
  218. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/coderabbit_cli.yml +0 -0
  219. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/codex.yml +0 -0
  220. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/cursor_bugbot.yml +0 -0
  221. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/devin.yml +0 -0
  222. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/gemini_cli.yml +0 -0
  223. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/gitar.yml +0 -0
  224. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/greptile.yml +0 -0
  225. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/hermes_cli.yml +0 -0
  226. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/local_llm.yml +0 -0
  227. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers/qodo.yml +0 -0
  228. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/providers.yml +0 -0
  229. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/reviewer-spend.example.json +0 -0
  230. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/reviewer-value-report.example.md +0 -0
  231. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  232. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  233. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  234. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  235. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  236. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  237. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  238. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  239. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_calibration_effect_report.py +0 -0
  240. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_checks.py +0 -0
  241. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_claude_cli_bounce.py +0 -0
  242. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_clear_stale.py +0 -0
  243. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_cloud_client.py +0 -0
  244. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_cloud_git_metadata.py +0 -0
  245. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_cloud_manifest.py +0 -0
  246. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_cloud_reports.py +0 -0
  247. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  248. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_actions_cost_summary.py +0 -0
  249. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_actions_failure_selection.py +0 -0
  250. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_boundaries.py +0 -0
  251. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_github_checks.py +0 -0
  252. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_output.py +0 -0
  253. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_privacy.py +0 -0
  254. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_provider_env_required.py +0 -0
  255. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_provider_env_tokens.py +0 -0
  256. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_provider_probe.py +0 -0
  257. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_doctor_registry.py +0 -0
  258. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_local_llm_github_helpers.py +0 -0
  259. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_local_cli.py +0 -0
  260. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_comments.py +0 -0
  261. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_git.py +0 -0
  262. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_github_pr.py +0 -0
  263. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_pr_worktree.py +0 -0
  264. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_process.py +0 -0
  265. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_repo_paths.py +0 -0
  266. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_text_schema.py +0 -0
  267. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/tests/test_provider_runners_workspace.py +0 -0
  268. {code_mower-0.5.0b13 → code_mower-0.5.0b14}/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.0b13
3
+ Version: 0.5.0b14
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.11
@@ -101,11 +101,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
101
101
 
102
102
  ```bash
103
103
  python3.12 --version
104
- pipx install --python python3.12 code-mower==0.5.0b13
104
+ pipx install --python python3.12 code-mower==0.5.0b14
105
105
  code-mower --version
106
106
  ```
107
107
 
108
- `0.5.0b13` is a beta release. Until Code Mower publishes a stable `1.0`
108
+ `0.5.0b14` is a beta release. Until Code Mower publishes a stable `1.0`
109
109
  line, use the explicit beta version above or allow prereleases with:
110
110
 
111
111
  ```bash
@@ -148,7 +148,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
148
148
 
149
149
  The current PyPI beta has been rehearsed end-to-end from a clean install:
150
150
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
151
- the latest 10/10 public-package readiness proof for `code-mower==0.5.0b13`.
151
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b14`.
152
152
 
153
153
  ## Why Not Just Run Codex Or Claude Yourself?
154
154
 
@@ -253,9 +253,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
253
253
 
254
254
  ## Installation Status
255
255
 
256
- The current public beta is `v0.5.0-beta.13` from
256
+ The current public beta is `v0.5.0-beta.14` from
257
257
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
258
- as `code-mower==0.5.0b13` on [PyPI](https://pypi.org/project/code-mower/).
258
+ as `code-mower==0.5.0b14` on [PyPI](https://pypi.org/project/code-mower/).
259
259
  GitHub releases remain the auditable source for tags, build artifacts, and
260
260
  release notes.
261
261
 
@@ -86,11 +86,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
86
86
 
87
87
  ```bash
88
88
  python3.12 --version
89
- pipx install --python python3.12 code-mower==0.5.0b13
89
+ pipx install --python python3.12 code-mower==0.5.0b14
90
90
  code-mower --version
91
91
  ```
92
92
 
93
- `0.5.0b13` is a beta release. Until Code Mower publishes a stable `1.0`
93
+ `0.5.0b14` is a beta release. Until Code Mower publishes a stable `1.0`
94
94
  line, use the explicit beta version above or allow prereleases with:
95
95
 
96
96
  ```bash
@@ -133,7 +133,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
133
133
 
134
134
  The current PyPI beta has been rehearsed end-to-end from a clean install:
135
135
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
136
- the latest 10/10 public-package readiness proof for `code-mower==0.5.0b13`.
136
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b14`.
137
137
 
138
138
  ## Why Not Just Run Codex Or Claude Yourself?
139
139
 
@@ -238,9 +238,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
238
238
 
239
239
  ## Installation Status
240
240
 
241
- The current public beta is `v0.5.0-beta.13` from
241
+ The current public beta is `v0.5.0-beta.14` from
242
242
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
243
- as `code-mower==0.5.0b13` on [PyPI](https://pypi.org/project/code-mower/).
243
+ as `code-mower==0.5.0b14` on [PyPI](https://pypi.org/project/code-mower/).
244
244
  GitHub releases remain the auditable source for tags, build artifacts, and
245
245
  release notes.
246
246
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "0.5.0b13"
7
+ version = "0.5.0b14"
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.0b13"
3
+ __version__ = "0.5.0b14"
@@ -58,6 +58,7 @@ from .results import (
58
58
  coderabbit_blocking_findings,
59
59
  infra_run_record,
60
60
  local_llm_findings,
61
+ observed_model_from_summary,
61
62
  run_records_from_summary,
62
63
  )
63
64
  from .run_results import (
@@ -158,6 +159,7 @@ __all__ = [
158
159
  "normalize_run_status_category",
159
160
  "normalize_truth",
160
161
  "normalize_truth_expectation",
162
+ "observed_model_from_summary",
161
163
  "option_value",
162
164
  "parse_int",
163
165
  "parse_repo_path_map",
@@ -88,6 +88,46 @@ def local_llm_findings(run: Mapping[str, Any]) -> list[dict[str, Any]]:
88
88
  return findings
89
89
 
90
90
 
91
+ def observed_model_from_summary(summary: Mapping[str, Any]) -> str:
92
+ """Return explicit or provider-observed model metadata from a run summary."""
93
+
94
+ explicit = str(summary.get("model") or "").strip()
95
+ if explicit:
96
+ return explicit
97
+ stats = summary.get("stats")
98
+ if not isinstance(stats, Mapping):
99
+ return ""
100
+ models = stats.get("models")
101
+ if not isinstance(models, Mapping):
102
+ return ""
103
+ candidates: list[tuple[int, str]] = []
104
+ role_priority = {
105
+ "main": 0,
106
+ "reviewer": 1,
107
+ "default": 2,
108
+ "utility_router": 4,
109
+ }
110
+ for model_name, detail in models.items():
111
+ model = str(model_name or "").strip()
112
+ if not model:
113
+ continue
114
+ priority = 3
115
+ if isinstance(detail, Mapping):
116
+ roles = detail.get("roles")
117
+ if isinstance(roles, Mapping):
118
+ role_ranks = [
119
+ role_priority.get(str(role_name), 3)
120
+ for role_name in roles
121
+ if str(role_name).strip()
122
+ ]
123
+ if role_ranks:
124
+ priority = min(role_ranks)
125
+ candidates.append((priority, model))
126
+ if not candidates:
127
+ return ""
128
+ return sorted(candidates)[0][1]
129
+
130
+
91
131
  def observed_head_field(observed_head_sha: str, head_sha: str) -> dict[str, str]:
92
132
  if observed_head_sha and observed_head_sha != head_sha:
93
133
  return {"observed_head_sha": observed_head_sha}
@@ -165,7 +205,7 @@ def run_records_from_summary(
165
205
  "duration_seconds": summary.get("duration_seconds"),
166
206
  "parse_status": parse_status,
167
207
  "artifact": artifact,
168
- "model": summary.get("model") or "",
208
+ "model": observed_model_from_summary(summary),
169
209
  "repo": repo,
170
210
  "pr_number": pr_number,
171
211
  "head_sha": head_sha,
@@ -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.0b13`, or run source checkouts with "
17
+ "`pipx install code-mower==0.5.0b14`, or run source checkouts with "
18
18
  "`PYTHONPATH=src python -m code_mower.cli`."
19
19
  )
20
20
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 0.5.0b13
3
+ Version: 0.5.0b14
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.11
@@ -101,11 +101,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
101
101
 
102
102
  ```bash
103
103
  python3.12 --version
104
- pipx install --python python3.12 code-mower==0.5.0b13
104
+ pipx install --python python3.12 code-mower==0.5.0b14
105
105
  code-mower --version
106
106
  ```
107
107
 
108
- `0.5.0b13` is a beta release. Until Code Mower publishes a stable `1.0`
108
+ `0.5.0b14` is a beta release. Until Code Mower publishes a stable `1.0`
109
109
  line, use the explicit beta version above or allow prereleases with:
110
110
 
111
111
  ```bash
@@ -148,7 +148,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
148
148
 
149
149
  The current PyPI beta has been rehearsed end-to-end from a clean install:
150
150
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
151
- the latest 10/10 public-package readiness proof for `code-mower==0.5.0b13`.
151
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b14`.
152
152
 
153
153
  ## Why Not Just Run Codex Or Claude Yourself?
154
154
 
@@ -253,9 +253,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
253
253
 
254
254
  ## Installation Status
255
255
 
256
- The current public beta is `v0.5.0-beta.13` from
256
+ The current public beta is `v0.5.0-beta.14` from
257
257
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
258
- as `code-mower==0.5.0b13` on [PyPI](https://pypi.org/project/code-mower/).
258
+ as `code-mower==0.5.0b14` on [PyPI](https://pypi.org/project/code-mower/).
259
259
  GitHub releases remain the auditable source for tags, build artifacts, and
260
260
  release notes.
261
261
 
@@ -21,6 +21,65 @@ class CalibrationTruthTests(unittest.TestCase):
21
21
  path.write_text(json.dumps(payload), encoding="utf-8")
22
22
  return code_mower_calibration.load_corpus(path)
23
23
 
24
+ def test_run_summary_preserves_explicit_cli_model(self) -> None:
25
+ [record] = code_mower_calibration._run_records_from_summary(
26
+ summary={
27
+ "mode": "gemini-cli-audit",
28
+ "repo": "owner/repo",
29
+ "pr_number": 1,
30
+ "model": "gemini-explicit",
31
+ "verdict": {"verdict": "pass", "findings": []},
32
+ },
33
+ item={"repo": "owner/repo", "pr_number": 1, "head_sha": "a" * 40},
34
+ command_result={"summary_path": "/tmp/summary.json", "returncode": 0},
35
+ )
36
+
37
+ self.assertEqual(record["model"], "gemini-explicit")
38
+
39
+ def test_run_summary_infers_google_cli_main_model_from_stats(self) -> None:
40
+ [record] = code_mower_calibration._run_records_from_summary(
41
+ summary={
42
+ "mode": "gemini-cli-audit",
43
+ "repo": "owner/repo",
44
+ "pr_number": 1,
45
+ "verdict": {"verdict": "pass", "findings": []},
46
+ "stats": {
47
+ "models": {
48
+ "gemini-3.1-flash-lite": {
49
+ "roles": {"utility_router": {"totalRequests": 1}}
50
+ },
51
+ "gemini-3.5-flash": {
52
+ "roles": {"main": {"totalRequests": 1}}
53
+ },
54
+ }
55
+ },
56
+ },
57
+ item={"repo": "owner/repo", "pr_number": 1, "head_sha": "a" * 40},
58
+ command_result={"summary_path": "/tmp/summary.json", "returncode": 0},
59
+ )
60
+
61
+ self.assertEqual(record["model"], "gemini-3.5-flash")
62
+
63
+ def test_run_summary_uses_deterministic_model_fallback(self) -> None:
64
+ [record] = code_mower_calibration._run_records_from_summary(
65
+ summary={
66
+ "mode": "antigravity-cli-audit",
67
+ "repo": "owner/repo",
68
+ "pr_number": 1,
69
+ "verdict": {"verdict": "pass", "findings": []},
70
+ "stats": {
71
+ "models": {
72
+ "z-model": {"api": {"totalRequests": 1}},
73
+ "a-model": {"api": {"totalRequests": 1}},
74
+ }
75
+ },
76
+ },
77
+ item={"repo": "owner/repo", "pr_number": 1, "head_sha": "a" * 40},
78
+ command_result={"summary_path": "/tmp/summary.json", "returncode": 0},
79
+ )
80
+
81
+ self.assertEqual(record["model"], "a-model")
82
+
24
83
  def test_starter_value_report_matches_packaged_example(self) -> None:
25
84
  corpus = code_mower_calibration.load_corpus(
26
85
  ROOT / "src/code_mower/templates/calibration-corpus.json"
@@ -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.0b13")
52
+ self.assertEqual(__version__, "0.5.0b14")
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")
@@ -168,7 +168,7 @@ class ReleaseHygieneTests(unittest.TestCase):
168
168
  self.assertIn(
169
169
  (
170
170
  "code-mower migration package-install-rehearsal --package-spec "
171
- "code-mower==0.5.0b13 --json"
171
+ "code-mower==0.5.0b14 --json"
172
172
  ),
173
173
  help_text,
174
174
  )
@@ -1583,8 +1583,8 @@ printf '%s\\n' "${lane}"
1583
1583
  fromlist=["current_alpha_package_spec"],
1584
1584
  )
1585
1585
  self.assertEqual(
1586
- legacy_module.current_alpha_package_spec("0.5.0b13"),
1587
- "code-mower==0.5.0b13",
1586
+ legacy_module.current_alpha_package_spec("0.5.0b14"),
1587
+ "code-mower==0.5.0b14",
1588
1588
  )
1589
1589
  finally:
1590
1590
  sys.path[:] = original_path
@@ -1621,7 +1621,7 @@ printf '%s\\n' "${lane}"
1621
1621
  "-c",
1622
1622
  (
1623
1623
  "from tools import code_mower_package_content as c; "
1624
- "print(c.current_alpha_package_spec('0.5.0b13'))"
1624
+ "print(c.current_alpha_package_spec('0.5.0b14'))"
1625
1625
  ),
1626
1626
  ],
1627
1627
  cwd=tmp_path,
@@ -1634,7 +1634,7 @@ printf '%s\\n' "${lane}"
1634
1634
  self.assertEqual(completed.returncode, 0, completed.stderr)
1635
1635
  self.assertEqual(
1636
1636
  completed.stdout.strip(),
1637
- "code-mower==0.5.0b13",
1637
+ "code-mower==0.5.0b14",
1638
1638
  )
1639
1639
 
1640
1640
  def test_package_rendering_legacy_fallback_stays_valid_yaml_subset(self) -> None:
@@ -1710,11 +1710,11 @@ printf '%s\\n' "${lane}"
1710
1710
  (output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
1711
1711
  )
1712
1712
  self.assertIn(
1713
- 'version = "0.5.0b13"',
1713
+ 'version = "0.5.0b14"',
1714
1714
  (output_dir / "pyproject.toml").read_text(encoding="utf-8"),
1715
1715
  )
1716
1716
  self.assertIn(
1717
- '__version__ = "0.5.0b13"',
1717
+ '__version__ = "0.5.0b14"',
1718
1718
  (output_dir / "src/code_mower/__init__.py").read_text(
1719
1719
  encoding="utf-8"
1720
1720
  ),
@@ -3205,7 +3205,7 @@ def main():
3205
3205
  {
3206
3206
  "status": "pass",
3207
3207
  "package_spec": "code-mower",
3208
- "version": "code-mower 0.5.0b13",
3208
+ "version": "code-mower 0.5.0b14",
3209
3209
  "work_dir": "/tmp/code-mower-rehearsal",
3210
3210
  "toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
3211
3211
  "step_count": 1,
@@ -3317,7 +3317,7 @@ def main():
3317
3317
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3318
3318
  toy_repo=toy_repo,
3319
3319
  outputs=outputs,
3320
- version="code-mower 0.5.0b13",
3320
+ version="code-mower 0.5.0b14",
3321
3321
  steps=[
3322
3322
  {
3323
3323
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3396,7 +3396,7 @@ def main():
3396
3396
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3397
3397
  toy_repo=toy_repo,
3398
3398
  outputs=outputs,
3399
- version="code-mower 0.5.0b13",
3399
+ version="code-mower 0.5.0b14",
3400
3400
  steps=[
3401
3401
  {
3402
3402
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3458,7 +3458,7 @@ def main():
3458
3458
  scorecard = code_mower_migration._first_user_readiness_scorecard(
3459
3459
  toy_repo=toy_repo,
3460
3460
  outputs=outputs,
3461
- version="code-mower 0.5.0b13",
3461
+ version="code-mower 0.5.0b14",
3462
3462
  steps=[
3463
3463
  {
3464
3464
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -3524,24 +3524,24 @@ def main():
3524
3524
  )
3525
3525
  self.assertEqual(
3526
3526
  code_mower_migration._resolve_install_package_spec(
3527
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.13",
3527
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.14",
3528
3528
  base_dir=package,
3529
3529
  ),
3530
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.13",
3530
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.14",
3531
3531
  )
3532
3532
  self.assertEqual(
3533
3533
  code_mower_migration._resolve_install_package_spec(
3534
- "code-mower==0.5.0b13",
3534
+ "code-mower==0.5.0b14",
3535
3535
  base_dir=package,
3536
3536
  ),
3537
- "code-mower==0.5.0b13",
3537
+ "code-mower==0.5.0b14",
3538
3538
  )
3539
3539
 
3540
3540
  def test_package_install_rehearsal_supports_index_aware_pip_install(self) -> None:
3541
3541
  self.assertEqual(
3542
3542
  code_mower_migration._pip_install_command(
3543
3543
  Path("/tmp/venv/bin/python"),
3544
- "code-mower==0.5.0b13",
3544
+ "code-mower==0.5.0b14",
3545
3545
  pip_index_url="https://test.pypi.org/simple/",
3546
3546
  pip_extra_index_urls=["https://pypi.org/simple/"],
3547
3547
  ),
@@ -3554,7 +3554,7 @@ def main():
3554
3554
  "https://test.pypi.org/simple/",
3555
3555
  "--extra-index-url",
3556
3556
  "https://pypi.org/simple/",
3557
- "code-mower==0.5.0b13",
3557
+ "code-mower==0.5.0b14",
3558
3558
  ],
3559
3559
  )
3560
3560
 
@@ -3574,10 +3574,10 @@ def main():
3574
3574
  payload = release_readiness.render_release_readiness(ROOT)
3575
3575
 
3576
3576
  self.assertEqual(payload["status"], "pass")
3577
- self.assertEqual(payload["version"], "0.5.0b13")
3578
- self.assertEqual(payload["release_tag"], "v0.5.0-beta.13")
3579
- self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.13")
3580
- self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b13")
3577
+ self.assertEqual(payload["version"], "0.5.0b14")
3578
+ self.assertEqual(payload["release_tag"], "v0.5.0-beta.14")
3579
+ self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.14")
3580
+ self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b14")
3581
3581
  check_ids = {check["id"]: check for check in payload["checks"]}
3582
3582
  self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
3583
3583
  self.assertEqual(
@@ -3626,7 +3626,7 @@ def main():
3626
3626
  check_ids = {check["id"]: check for check in payload["checks"]}
3627
3627
  check = check_ids["materialized-package-version-consistency"]
3628
3628
  self.assertEqual(check["status"], "fail")
3629
- self.assertEqual(check["detail"]["source_version"], "0.5.0b13")
3629
+ self.assertEqual(check["detail"]["source_version"], "0.5.0b14")
3630
3630
  self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
3631
3631
 
3632
3632
  def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
@@ -3706,20 +3706,20 @@ def main():
3706
3706
 
3707
3707
  def test_release_readiness_tag_derivation_supports_release_stages(self) -> None:
3708
3708
  self.assertEqual(
3709
- release_readiness._release_tag_for_version("0.5.0b13"),
3710
- "v0.5.0-beta.13",
3709
+ release_readiness._release_tag_for_version("0.5.0b14"),
3710
+ "v0.5.0-beta.14",
3711
3711
  )
3712
3712
  self.assertEqual(
3713
- code_mower_versioning.release_tag_for_version("0.5.0b13"),
3714
- "v0.5.0-beta.13",
3713
+ code_mower_versioning.release_tag_for_version("0.5.0b14"),
3714
+ "v0.5.0-beta.14",
3715
3715
  )
3716
3716
  self.assertEqual(
3717
- release_readiness._release_tag_for_version("0.5.0b13"),
3718
- "v0.5.0-beta.13",
3717
+ release_readiness._release_tag_for_version("0.5.0b14"),
3718
+ "v0.5.0-beta.14",
3719
3719
  )
3720
3720
  self.assertEqual(
3721
- code_mower_versioning.release_tag_for_version("0.5.0b13"),
3722
- "v0.5.0-beta.13",
3721
+ code_mower_versioning.release_tag_for_version("0.5.0b14"),
3722
+ "v0.5.0-beta.14",
3723
3723
  )
3724
3724
  self.assertEqual(
3725
3725
  release_readiness._release_tag_for_version("1.0.0rc1"),
@@ -3748,8 +3748,8 @@ def main():
3748
3748
  next_steps.current_alpha_package_spec(),
3749
3749
  )
3750
3750
  self.assertEqual(
3751
- code_mower_package_content.current_alpha_package_spec("0.5.0b13"),
3752
- "code-mower==0.5.0b13",
3751
+ code_mower_package_content.current_alpha_package_spec("0.5.0b14"),
3752
+ "code-mower==0.5.0b14",
3753
3753
  )
3754
3754
  self.assertNotIn(next_steps.current_public_tag(), package_content_text)
3755
3755
  self.assertNotIn("v0.0.0", package_content_text)
@@ -3921,7 +3921,7 @@ def main():
3921
3921
  step for step in plan["steps"] if step["id"] == "package-install-rehearsal"
3922
3922
  )
3923
3923
  self.assertIn("doctor --v05", doctor_step["command"])
3924
- self.assertIn("code-mower==0.5.0b13", package_step["command"])
3924
+ self.assertIn("code-mower==0.5.0b14", package_step["command"])
3925
3925
  self.assertIn("current published PyPI prerelease", package_step["why"])
3926
3926
  self.assertIn("first_user_readiness", package_step["why"])
3927
3927
  self.assertEqual(
File without changes
File without changes
File without changes
File without changes
File without changes