code-mower 0.5.0b35__tar.gz → 0.5.0b37__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.0b35 → code_mower-0.5.0b37}/PKG-INFO +6 -6
  2. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/README.md +5 -5
  3. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/pyproject.toml +1 -1
  4. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/__init__.py +1 -1
  5. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cli.py +1 -1
  6. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/events.py +9 -0
  7. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/code_mower_calibration.py +4 -7
  8. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower.egg-info/PKG-INFO +6 -6
  9. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_calibration_effect_report.py +57 -0
  10. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_cloud_client.py +29 -0
  11. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_release_hygiene.py +34 -34
  12. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/CODE_OF_CONDUCT.md +0 -0
  13. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/LICENSE +0 -0
  14. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/MANIFEST.in +0 -0
  15. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/NOTICE +0 -0
  16. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/SUPPORT.md +0 -0
  17. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/requirements/requirements.txt +0 -0
  18. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/setup.cfg +0 -0
  19. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/adapters/__init__.py +0 -0
  20. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/adapters/_base.py +0 -0
  21. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  22. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/adapters/gitar.py +0 -0
  23. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/adapters/greptile.py +0 -0
  24. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/adapters/qodo.py +0 -0
  25. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  26. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/audit_handoff_log.py +0 -0
  27. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/audit_labeler_lib.py +0 -0
  28. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/audit_progress.py +0 -0
  29. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/blind_review_artifacts.py +0 -0
  30. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/blind_review_coordinator.py +0 -0
  31. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/bootstrap.py +0 -0
  32. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/builder_experiment.py +0 -0
  33. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/__init__.py +0 -0
  34. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/arms.py +0 -0
  35. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/auto_discovery.py +0 -0
  36. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/commands.py +0 -0
  37. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/context_inputs.py +0 -0
  38. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/corpus.py +0 -0
  39. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/effect_report.py +0 -0
  40. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/evidence.py +0 -0
  41. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/evidence_report.py +0 -0
  42. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/identity.py +0 -0
  43. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/metrics.py +0 -0
  44. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/overlap.py +0 -0
  45. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/planning.py +0 -0
  46. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/policy.py +0 -0
  47. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/results.py +0 -0
  48. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/run_results.py +0 -0
  49. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/run_status.py +0 -0
  50. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/runner.py +0 -0
  51. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/truth.py +0 -0
  52. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/calibration/value_report.py +0 -0
  53. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/checks.py +0 -0
  54. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/claude_audit_pr.py +0 -0
  55. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/claude_cli_bounce.py +0 -0
  56. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/claude_cli_environment.py +0 -0
  57. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/clear_stale.py +0 -0
  58. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud.py +0 -0
  59. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/__init__.py +0 -0
  60. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/bundle.py +0 -0
  61. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/doctor.py +0 -0
  62. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/dogfood.py +0 -0
  63. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/endpoints.py +0 -0
  64. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/errors.py +0 -0
  65. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/export.py +0 -0
  66. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/git_metadata.py +0 -0
  67. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/manifest.py +0 -0
  68. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/operations.py +0 -0
  69. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/reports.py +0 -0
  70. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/setup.py +0 -0
  71. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/cloud_client/upload.py +0 -0
  72. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/code_mower_context_packs.py +0 -0
  73. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/code_mower_merge.py +0 -0
  74. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/code_mower_telemetry.py +0 -0
  75. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  76. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/codex_audit_env_preflight.py +0 -0
  77. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/codex_audit_pr.py +0 -0
  78. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  79. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  80. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/config.py +0 -0
  81. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor.py +0 -0
  82. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/__init__.py +0 -0
  83. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/cloud.py +0 -0
  84. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/common.py +0 -0
  85. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github.py +0 -0
  86. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions.py +0 -0
  87. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  88. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  89. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  90. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  91. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  92. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  93. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  94. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  95. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_api.py +0 -0
  96. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_branch.py +0 -0
  97. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_config.py +0 -0
  98. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_provider.py +0 -0
  99. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/github_repo.py +0 -0
  100. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/groups.py +0 -0
  101. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/models.py +0 -0
  102. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/output.py +0 -0
  103. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/presets.py +0 -0
  104. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/privacy.py +0 -0
  105. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  106. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  107. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  108. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_env.py +0 -0
  109. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  110. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  111. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  112. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  113. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  114. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  115. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  116. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  117. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  118. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  119. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  120. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/providers.py +0 -0
  121. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/registry.py +0 -0
  122. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/runner.py +0 -0
  123. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/runtime.py +0 -0
  124. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  125. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  126. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  127. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/init.py +0 -0
  128. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/__init__.py +0 -0
  129. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/aider.py +0 -0
  130. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  131. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/claude.py +0 -0
  132. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/codex.py +0 -0
  133. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/devin.py +0 -0
  134. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  135. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  136. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/lane_configs/local_llm.py +0 -0
  137. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/local_llm_audit_pr.py +0 -0
  138. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/local_llm_bakeoff.py +0 -0
  139. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/local_llm_calibration.py +0 -0
  140. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/local_llm_profiles.py +0 -0
  141. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/migration.py +0 -0
  142. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/migration_install.py +0 -0
  143. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/migration_mirror.py +0 -0
  144. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/migration_readiness.py +0 -0
  145. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/migration_rehearsal.py +0 -0
  146. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/next_steps.py +0 -0
  147. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/package.py +0 -0
  148. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/package_content.py +0 -0
  149. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/package_manifest.py +0 -0
  150. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/package_paths.py +0 -0
  151. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/package_rendering.py +0 -0
  152. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/package_static.py +0 -0
  153. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/prompts.py +0 -0
  154. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_registry.py +0 -0
  155. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/__init__.py +0 -0
  156. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/comments.py +0 -0
  157. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/git.py +0 -0
  158. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/github_auth.py +0 -0
  159. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/github_pr.py +0 -0
  160. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  161. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/process.py +0 -0
  162. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/repo_paths.py +0 -0
  163. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/text_schema.py +0 -0
  164. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  165. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/provider_runners/workspace.py +0 -0
  166. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/providers/__init__.py +0 -0
  167. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/providers/local_cli.py +0 -0
  168. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/providers/provenance.py +0 -0
  169. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/release_readiness.py +0 -0
  170. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/reviewer_metrics.py +0 -0
  171. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/saas_reviewer_labeler.py +0 -0
  172. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/secrets.py +0 -0
  173. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/builder-experiment.example.json +0 -0
  174. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  175. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/calibration-corpus.json +0 -0
  176. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/code-mower.example.yml +0 -0
  177. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/context-packs.example.json +0 -0
  178. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  179. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  180. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  181. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  182. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  183. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  184. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  185. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  186. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/product-support/code_mower +0 -0
  187. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  188. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  189. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  190. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  191. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  192. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/providers.yml +0 -0
  193. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  194. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  195. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  196. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  197. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  198. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  199. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  200. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  201. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  202. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/trailer_comment_labeler.py +0 -0
  203. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/versioning.py +0 -0
  204. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower/work_orders.py +0 -0
  205. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower.egg-info/SOURCES.txt +0 -0
  206. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower.egg-info/dependency_links.txt +0 -0
  207. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower.egg-info/entry_points.txt +0 -0
  208. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower.egg-info/requires.txt +0 -0
  209. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/src/code_mower.egg-info/top_level.txt +0 -0
  210. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/builder-experiment.example.json +0 -0
  211. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/calibration-corpus.example.json +0 -0
  212. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/calibration-corpus.json +0 -0
  213. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/code-mower.yml.j2 +0 -0
  214. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/context-packs.example.json +0 -0
  215. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/cursor/BUGBOT.md +0 -0
  216. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/acp_bridge.yml +0 -0
  217. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/aider.yml +0 -0
  218. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/antigravity_cli.yml +0 -0
  219. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/claude_audit.yml +0 -0
  220. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/claude_review.yml +0 -0
  221. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/coderabbit_cli.yml +0 -0
  222. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/codex.yml +0 -0
  223. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/cursor_bugbot.yml +0 -0
  224. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/devin.yml +0 -0
  225. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/gemini_cli.yml +0 -0
  226. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/gitar.yml +0 -0
  227. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/greptile.yml +0 -0
  228. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/hermes_cli.yml +0 -0
  229. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/local_llm.yml +0 -0
  230. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers/qodo.yml +0 -0
  231. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/providers.yml +0 -0
  232. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/reviewer-spend.example.json +0 -0
  233. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/reviewer-value-report.example.md +0 -0
  234. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  235. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  236. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  237. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  238. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  239. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  240. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  241. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  242. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_calibration_truth.py +0 -0
  243. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_checks.py +0 -0
  244. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_claude_cli_bounce.py +0 -0
  245. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_clear_stale.py +0 -0
  246. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_cloud_git_metadata.py +0 -0
  247. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_cloud_manifest.py +0 -0
  248. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_cloud_reports.py +0 -0
  249. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  250. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_actions_cost_summary.py +0 -0
  251. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_actions_failure_selection.py +0 -0
  252. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_boundaries.py +0 -0
  253. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_github_checks.py +0 -0
  254. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_output.py +0 -0
  255. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_privacy.py +0 -0
  256. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_provider_env_required.py +0 -0
  257. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_provider_env_tokens.py +0 -0
  258. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_provider_probe.py +0 -0
  259. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_provider_review_hygiene.py +0 -0
  260. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_doctor_registry.py +0 -0
  261. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_local_llm_github_helpers.py +0 -0
  262. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_local_cli.py +0 -0
  263. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_comments.py +0 -0
  264. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_git.py +0 -0
  265. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_github_pr.py +0 -0
  266. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_pr_worktree.py +0 -0
  267. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_process.py +0 -0
  268. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_repo_paths.py +0 -0
  269. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_text_schema.py +0 -0
  270. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_provider_runners_workspace.py +0 -0
  271. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/tests/test_reviewer_metrics_core.py +0 -0
  272. {code_mower-0.5.0b35 → code_mower-0.5.0b37}/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.0b35
3
+ Version: 0.5.0b37
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.0b35
106
+ pipx install --python python3.12 code-mower==0.5.0b37
107
107
  code-mower --version
108
108
  ```
109
109
 
110
- `0.5.0b35` is a beta release. Until Code Mower publishes a stable `1.0`
110
+ `0.5.0b37` 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.0b35`.
153
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b37`.
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.35` from
294
+ The current public beta is `v0.5.0-beta.37` from
295
295
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
296
- as `code-mower==0.5.0b35` on [PyPI](https://pypi.org/project/code-mower/).
296
+ as `code-mower==0.5.0b37` 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.0b35
91
+ pipx install --python python3.12 code-mower==0.5.0b37
92
92
  code-mower --version
93
93
  ```
94
94
 
95
- `0.5.0b35` is a beta release. Until Code Mower publishes a stable `1.0`
95
+ `0.5.0b37` 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.0b35`.
138
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b37`.
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.35` from
279
+ The current public beta is `v0.5.0-beta.37` from
280
280
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
281
- as `code-mower==0.5.0b35` on [PyPI](https://pypi.org/project/code-mower/).
281
+ as `code-mower==0.5.0b37` 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.0b35"
7
+ version = "0.5.0b37"
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.0b35"
3
+ __version__ = "0.5.0b37"
@@ -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.0b35`, or run source checkouts with "
17
+ "`pipx install code-mower==0.5.0b37`, or run source checkouts with "
18
18
  "`PYTHONPATH=src python -m code_mower.cli`."
19
19
  )
20
20
 
@@ -294,6 +294,15 @@ def normalize_event(value: dict[str, Any], event_type: str) -> dict[str, Any]:
294
294
  normalized["dimensions"] = {}
295
295
  elif not isinstance(dimensions, dict):
296
296
  raise CloudBundleError("structured event dimensions must be an object")
297
+ if normalized.get("tool") is None and normalized["event_type"] in {
298
+ "lane_policy_snapshot",
299
+ "value_report_snapshot",
300
+ }:
301
+ normalized["tool"] = build_code_mower_tool_provenance(
302
+ source=normalized.get("source") or f"code-mower {normalized['event_type']}",
303
+ version=__version__,
304
+ role="reporter",
305
+ )
297
306
  tool = normalize_tool_provenance(normalized.get("tool"), event=normalized)
298
307
  normalized["tool"] = tool
299
308
  if not normalized["provider"] and tool.get("provider"):
@@ -631,13 +631,10 @@ def main(argv: Sequence[str] | None = None) -> int:
631
631
  )
632
632
  if args.output is not None:
633
633
  args.output.parent.mkdir(parents=True, exist_ok=True)
634
- if args.json:
635
- _write_json(args.output, payload)
636
- else:
637
- args.output.write_text(
638
- render_effect_report_text(payload),
639
- encoding="utf-8",
640
- )
634
+ args.output.write_text(
635
+ render_effect_report_text(payload),
636
+ encoding="utf-8",
637
+ )
641
638
  if args.json:
642
639
  print(json.dumps(payload, indent=2, sort_keys=True))
643
640
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 0.5.0b35
3
+ Version: 0.5.0b37
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.0b35
106
+ pipx install --python python3.12 code-mower==0.5.0b37
107
107
  code-mower --version
108
108
  ```
109
109
 
110
- `0.5.0b35` is a beta release. Until Code Mower publishes a stable `1.0`
110
+ `0.5.0b37` 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.0b35`.
153
+ the latest 10/10 public-package readiness proof for `code-mower==0.5.0b37`.
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.35` from
294
+ The current public beta is `v0.5.0-beta.37` from
295
295
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
296
- as `code-mower==0.5.0b35` on [PyPI](https://pypi.org/project/code-mower/).
296
+ as `code-mower==0.5.0b37` 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
 
@@ -6,6 +6,7 @@ from code_mower.calibration.effect_report import (
6
6
  build_effect_report,
7
7
  reviewer_dimensions,
8
8
  )
9
+ from code_mower.code_mower_calibration import main as calibration_main
9
10
 
10
11
 
11
12
  class CalibrationEffectReportTests(unittest.TestCase):
@@ -129,6 +130,62 @@ class CalibrationEffectReportTests(unittest.TestCase):
129
130
  self.assertEqual(spread["effective_catch_rate_spread"], 1.0)
130
131
  self.assertIsNone(spread["catch_rate_spread"])
131
132
 
133
+ def test_effect_report_output_file_is_markdown_when_json_stdout_requested(self) -> None:
134
+ import contextlib
135
+ import io
136
+ import json
137
+ import tempfile
138
+ from pathlib import Path
139
+
140
+ with tempfile.TemporaryDirectory() as tmp:
141
+ root = Path(tmp)
142
+ corpus = root / "corpus.json"
143
+ output = root / "effect-report.md"
144
+ corpus.write_text(
145
+ json.dumps(
146
+ {
147
+ "version": 1,
148
+ "name": "effect-output-test",
149
+ "corpus": [
150
+ {
151
+ "repo": "owner/repo",
152
+ "pr_number": 1,
153
+ "head_sha": "1" * 40,
154
+ "truth": {"expectation": "known_blocked"},
155
+ "reviewer_runs": [
156
+ {
157
+ "reviewer": "claude-base-audit",
158
+ "status": "blocked",
159
+ "finding_count": 1,
160
+ "expected_blocker_caught": True,
161
+ }
162
+ ],
163
+ }
164
+ ],
165
+ }
166
+ ),
167
+ encoding="utf-8",
168
+ )
169
+
170
+ stdout = io.StringIO()
171
+ with contextlib.redirect_stdout(stdout):
172
+ exit_code = calibration_main(
173
+ [
174
+ "effect-report",
175
+ str(corpus),
176
+ "--output",
177
+ str(output),
178
+ "--json",
179
+ ]
180
+ )
181
+
182
+ self.assertEqual(exit_code, 0)
183
+ self.assertTrue(output.read_text(encoding="utf-8").startswith("# Code Mower"))
184
+ self.assertEqual(
185
+ json.loads(stdout.getvalue())["mode"],
186
+ "code-mower-provider-lens-effect-report",
187
+ )
188
+
132
189
 
133
190
  if __name__ == "__main__":
134
191
  unittest.main()
@@ -225,6 +225,35 @@ def test_cloud_export_builds_metadata_only_bundle_from_client_module() -> None:
225
225
  assert upload["provenance"]["tools"][0]["tool_name"] == "codex"
226
226
 
227
227
 
228
+ def test_cloud_export_defaults_value_report_snapshot_to_code_mower_provenance() -> None:
229
+ with tempfile.TemporaryDirectory() as tmp:
230
+ root = Path(tmp)
231
+
232
+ result = build_cloud_bundle(
233
+ reports=[],
234
+ events=[
235
+ {
236
+ "event_type": "value_report_snapshot",
237
+ "repo_slug": "codemower-ai/code-mower",
238
+ "source": "unit-test-value-report",
239
+ "status": "observed",
240
+ "metrics": {"report_count": 1},
241
+ }
242
+ ],
243
+ output_dir=root / "bundle",
244
+ repo_slug="codemower-ai/code-mower",
245
+ )
246
+
247
+ assert result["provenance"]["benchmark_events_missing_model_provenance"] == 0
248
+ assert result["provenance"]["benchmark_events_missing_tool_version_provenance"] == 0
249
+ upload = build_upload_payload(bundle_dir=root / "bundle")
250
+ event = upload["events"][0]
251
+ assert event["provider"] == "code-mower"
252
+ assert event["tool"]["tool_name"] == "code-mower"
253
+ assert event["tool"]["model_source"] == "not_applicable"
254
+ assert event["tool"]["version_source"] == "package_version"
255
+
256
+
228
257
  def test_cloud_export_accepts_work_order_provenance_event() -> None:
229
258
  with tempfile.TemporaryDirectory() as tmp:
230
259
  root = Path(tmp)
@@ -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.0b35")
52
+ self.assertEqual(__version__, "0.5.0b37")
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.0b35 --json"
206
+ "code-mower==0.5.0b37 --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.0b35"),
1626
- "code-mower==0.5.0b35",
1625
+ legacy_module.current_alpha_package_spec("0.5.0b37"),
1626
+ "code-mower==0.5.0b37",
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.0b35'))"
1663
+ "print(c.current_alpha_package_spec('0.5.0b37'))"
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.0b35",
1676
+ "code-mower==0.5.0b37",
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.0b35"',
1752
+ 'version = "0.5.0b37"',
1753
1753
  (output_dir / "pyproject.toml").read_text(encoding="utf-8"),
1754
1754
  )
1755
1755
  self.assertIn(
1756
- '__version__ = "0.5.0b35"',
1756
+ '__version__ = "0.5.0b37"',
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.0b35",
3291
+ "version": "code-mower 0.5.0b37",
3292
3292
  "work_dir": "/tmp/code-mower-rehearsal",
3293
3293
  "toy_repo": "/tmp/code-mower-rehearsal/toy-repo",
3294
3294
  "step_count": 1,
@@ -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.0b35",
3403
+ version="code-mower 0.5.0b37",
3404
3404
  steps=[
3405
3405
  {
3406
3406
  "command": ["code-mower", "doctor", "--easy", "--json"],
@@ -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.0b35",
3482
+ version="code-mower 0.5.0b37",
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.0b35",
3544
+ version="code-mower 0.5.0b37",
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.35",
3610
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.37",
3611
3611
  base_dir=package,
3612
3612
  ),
3613
- "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.35",
3613
+ "git+https://github.com/codemower-ai/code-mower.git@v0.5.0-beta.37",
3614
3614
  )
3615
3615
  self.assertEqual(
3616
3616
  code_mower_migration._resolve_install_package_spec(
3617
- "code-mower==0.5.0b35",
3617
+ "code-mower==0.5.0b37",
3618
3618
  base_dir=package,
3619
3619
  ),
3620
- "code-mower==0.5.0b35",
3620
+ "code-mower==0.5.0b37",
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.0b35",
3627
+ "code-mower==0.5.0b37",
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.0b35",
3640
+ "code-mower==0.5.0b37",
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.0b35")
3661
- self.assertEqual(payload["release_tag"], "v0.5.0-beta.35")
3662
- self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.35")
3663
- self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b35")
3660
+ self.assertEqual(payload["version"], "0.5.0b37")
3661
+ self.assertEqual(payload["release_tag"], "v0.5.0-beta.37")
3662
+ self.assertEqual(payload["alpha_tag"], "v0.5.0-beta.37")
3663
+ self.assertEqual(payload["package_index_spec"], "code-mower==0.5.0b37")
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.0b35")
3712
+ self.assertEqual(check["detail"]["source_version"], "0.5.0b37")
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.0b35"),
3793
- "v0.5.0-beta.35",
3792
+ release_readiness._release_tag_for_version("0.5.0b37"),
3793
+ "v0.5.0-beta.37",
3794
3794
  )
3795
3795
  self.assertEqual(
3796
- code_mower_versioning.release_tag_for_version("0.5.0b35"),
3797
- "v0.5.0-beta.35",
3796
+ code_mower_versioning.release_tag_for_version("0.5.0b37"),
3797
+ "v0.5.0-beta.37",
3798
3798
  )
3799
3799
  self.assertEqual(
3800
- release_readiness._release_tag_for_version("0.5.0b35"),
3801
- "v0.5.0-beta.35",
3800
+ release_readiness._release_tag_for_version("0.5.0b37"),
3801
+ "v0.5.0-beta.37",
3802
3802
  )
3803
3803
  self.assertEqual(
3804
- code_mower_versioning.release_tag_for_version("0.5.0b35"),
3805
- "v0.5.0-beta.35",
3804
+ code_mower_versioning.release_tag_for_version("0.5.0b37"),
3805
+ "v0.5.0-beta.37",
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.0b35"),
3835
- "code-mower==0.5.0b35",
3834
+ code_mower_package_content.current_alpha_package_spec("0.5.0b37"),
3835
+ "code-mower==0.5.0b37",
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.0b35", package_step["command"])
4007
+ self.assertIn("code-mower==0.5.0b37", 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