code-mower 1.0.13__tar.gz → 1.0.14__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 (408) hide show
  1. {code_mower-1.0.13 → code_mower-1.0.14}/PKG-INFO +12 -5
  2. {code_mower-1.0.13 → code_mower-1.0.14}/README.md +11 -4
  3. {code_mower-1.0.13 → code_mower-1.0.14}/pyproject.toml +1 -1
  4. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/__init__.py +1 -1
  5. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/devin_api.py +9 -7
  6. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
  7. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower.egg-info/PKG-INFO +12 -5
  8. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/builder-provenance.yml.j2 +1 -1
  9. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_devin_api.py +55 -0
  10. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_release_hygiene.py +47 -46
  11. {code_mower-1.0.13 → code_mower-1.0.14}/CODE_OF_CONDUCT.md +0 -0
  12. {code_mower-1.0.13 → code_mower-1.0.14}/LICENSE +0 -0
  13. {code_mower-1.0.13 → code_mower-1.0.14}/MANIFEST.in +0 -0
  14. {code_mower-1.0.13 → code_mower-1.0.14}/NOTICE +0 -0
  15. {code_mower-1.0.13 → code_mower-1.0.14}/SUPPORT.md +0 -0
  16. {code_mower-1.0.13 → code_mower-1.0.14}/requirements/requirements.txt +0 -0
  17. {code_mower-1.0.13 → code_mower-1.0.14}/setup.cfg +0 -0
  18. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/adapters/__init__.py +0 -0
  19. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/adapters/_base.py +0 -0
  20. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  21. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/adapters/gitar.py +0 -0
  22. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/adapters/greptile.py +0 -0
  23. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/adapters/qodo.py +0 -0
  24. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  25. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/antigravity_sdk_probe.py +0 -0
  26. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/audit_handoff_log.py +0 -0
  27. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/audit_labeler_lib.py +0 -0
  28. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/audit_limits.py +0 -0
  29. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/audit_progress.py +0 -0
  30. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/blind_review_artifacts.py +0 -0
  31. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/blind_review_coordinator.py +0 -0
  32. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/board.py +0 -0
  33. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/board_store.py +0 -0
  34. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/bootstrap.py +0 -0
  35. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/builder_experiment.py +0 -0
  36. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/builder_runs.py +0 -0
  37. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/__init__.py +0 -0
  38. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/arms.py +0 -0
  39. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/auto_discovery.py +0 -0
  40. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/commands.py +0 -0
  41. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/context_inputs.py +0 -0
  42. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/corpus.py +0 -0
  43. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/effect_report.py +0 -0
  44. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/evidence.py +0 -0
  45. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/evidence_report.py +0 -0
  46. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/identity.py +0 -0
  47. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/metrics.py +0 -0
  48. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/overlap.py +0 -0
  49. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/planning.py +0 -0
  50. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/policy.py +0 -0
  51. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/results.py +0 -0
  52. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/run_results.py +0 -0
  53. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/run_status.py +0 -0
  54. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/runner.py +0 -0
  55. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/truth.py +0 -0
  56. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/calibration/value_report.py +0 -0
  57. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/campaign_adapters.py +0 -0
  58. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/campaign_discovery.py +0 -0
  59. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/checks.py +0 -0
  60. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/claude_audit_pr.py +0 -0
  61. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/claude_cli_bounce.py +0 -0
  62. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/claude_cli_environment.py +0 -0
  63. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/clear_stale.py +0 -0
  64. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cli.py +0 -0
  65. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud.py +0 -0
  66. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/__init__.py +0 -0
  67. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/adoption_runs.py +0 -0
  68. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/bundle.py +0 -0
  69. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/doctor.py +0 -0
  70. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/dogfood.py +0 -0
  71. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/endpoints.py +0 -0
  72. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/errors.py +0 -0
  73. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/events.py +0 -0
  74. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/export.py +0 -0
  75. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/git_metadata.py +0 -0
  76. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/manifest.py +0 -0
  77. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/operations.py +0 -0
  78. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
  79. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/productivity.py +0 -0
  80. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/reports.py +0 -0
  81. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/setup.py +0 -0
  82. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/tokens.py +0 -0
  83. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/upload.py +0 -0
  84. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/cloud_client/work_types.py +0 -0
  85. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/code_mower_calibration.py +0 -0
  86. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/code_mower_context_packs.py +0 -0
  87. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/code_mower_merge.py +0 -0
  88. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/code_mower_telemetry.py +0 -0
  89. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  90. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/codex_audit_env_preflight.py +0 -0
  91. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/codex_audit_pr.py +0 -0
  92. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  93. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  94. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/config.py +0 -0
  95. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/controller.py +0 -0
  96. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/decisions.py +0 -0
  97. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/devin_cli_audit_pr.py +0 -0
  98. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor.py +0 -0
  99. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/__init__.py +0 -0
  100. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/adoption.py +0 -0
  101. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/audit_limits.py +0 -0
  102. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
  103. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/cloud.py +0 -0
  104. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/common.py +0 -0
  105. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github.py +0 -0
  106. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions.py +0 -0
  107. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  108. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  109. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  110. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  111. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  112. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  113. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  114. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  115. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_api.py +0 -0
  116. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_branch.py +0 -0
  117. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_config.py +0 -0
  118. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_human_token.py +0 -0
  119. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_provider.py +0 -0
  120. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_repo.py +0 -0
  121. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
  122. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/groups.py +0 -0
  123. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/models.py +0 -0
  124. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/output.py +0 -0
  125. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/presets.py +0 -0
  126. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/privacy.py +0 -0
  127. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  128. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  129. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  130. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_env.py +0 -0
  131. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  132. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  133. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
  134. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  135. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  136. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  137. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  138. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  139. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  140. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  141. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  142. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  143. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/providers.py +0 -0
  144. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/registry.py +0 -0
  145. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/runner.py +0 -0
  146. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/runtime.py +0 -0
  147. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  148. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
  149. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
  150. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/file_locks.py +0 -0
  151. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/gate_health.py +0 -0
  152. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  153. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/git_identity.py +0 -0
  154. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/grok_build_audit_pr.py +0 -0
  155. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  156. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/init.py +0 -0
  157. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/__init__.py +0 -0
  158. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/aider.py +0 -0
  159. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  160. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/claude.py +0 -0
  161. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/codex.py +0 -0
  162. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/devin.py +0 -0
  163. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/devin_cli.py +0 -0
  164. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  165. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/grok_build.py +0 -0
  166. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  167. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/local_llm.py +0 -0
  168. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_configs/muse_cli.py +0 -0
  169. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_delivery.py +0 -0
  170. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/lane_status.py +0 -0
  171. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/local_llm_audit_pr.py +0 -0
  172. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/local_llm_bakeoff.py +0 -0
  173. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/local_llm_calibration.py +0 -0
  174. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/local_llm_profiles.py +0 -0
  175. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/migration.py +0 -0
  176. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/migration_install.py +0 -0
  177. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/migration_mirror.py +0 -0
  178. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/migration_readiness.py +0 -0
  179. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/migration_rehearsal.py +0 -0
  180. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/muse_cli_audit_pr.py +0 -0
  181. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/next_steps.py +0 -0
  182. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/package.py +0 -0
  183. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/package_content.py +0 -0
  184. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/package_manifest.py +0 -0
  185. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/package_paths.py +0 -0
  186. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/package_rendering.py +0 -0
  187. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/package_static.py +0 -0
  188. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/participants.py +0 -0
  189. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/plan_context.py +0 -0
  190. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/productivity_report.py +0 -0
  191. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/prompts.py +0 -0
  192. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_registry.py +0 -0
  193. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/__init__.py +0 -0
  194. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/comments.py +0 -0
  195. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/exit_codes.py +0 -0
  196. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/git.py +0 -0
  197. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/github_auth.py +0 -0
  198. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/github_pr.py +0 -0
  199. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  200. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/process.py +0 -0
  201. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/repo_paths.py +0 -0
  202. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/text_schema.py +0 -0
  203. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  204. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/provider_runners/workspace.py +0 -0
  205. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/providers/__init__.py +0 -0
  206. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/providers/local_cli.py +0 -0
  207. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/providers/provenance.py +0 -0
  208. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/release_campaigns.py +0 -0
  209. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/release_qualify.py +0 -0
  210. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/release_readiness.py +0 -0
  211. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/reviewer_metrics.py +0 -0
  212. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/reviewer_spend.py +0 -0
  213. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/saas_reviewer_labeler.py +0 -0
  214. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/secrets.py +0 -0
  215. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/session.py +0 -0
  216. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/builder-experiment.example.json +0 -0
  217. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  218. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/calibration-corpus.json +0 -0
  219. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/code-mower.example.yml +0 -0
  220. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/context-packs.example.json +0 -0
  221. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  222. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  223. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  224. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  225. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  226. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  227. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  228. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
  229. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  230. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/README.md +0 -0
  231. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/claude.md +0 -0
  232. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/codex.md +0 -0
  233. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/cursor.md +0 -0
  234. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/devin.md +0 -0
  235. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/generic.md +0 -0
  236. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
  237. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/code_mower +0 -0
  238. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  239. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  240. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  241. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  242. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
  243. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  244. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/product-support/status_report.py +0 -0
  245. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/providers.yml +0 -0
  246. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  247. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  248. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  249. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  250. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  251. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  252. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
  253. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  254. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  255. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  256. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  257. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
  258. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  259. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  260. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  261. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  262. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  263. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
  264. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/trailer_comment_labeler.py +0 -0
  265. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/versioning.py +0 -0
  266. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/work_orders.py +0 -0
  267. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower/workflow_actionlint.py +0 -0
  268. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower.egg-info/SOURCES.txt +0 -0
  269. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower.egg-info/dependency_links.txt +0 -0
  270. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower.egg-info/entry_points.txt +0 -0
  271. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower.egg-info/requires.txt +0 -0
  272. {code_mower-1.0.13 → code_mower-1.0.14}/src/code_mower.egg-info/top_level.txt +0 -0
  273. {code_mower-1.0.13 → code_mower-1.0.14}/templates/builder-experiment.example.json +0 -0
  274. {code_mower-1.0.13 → code_mower-1.0.14}/templates/calibration-corpus.example.json +0 -0
  275. {code_mower-1.0.13 → code_mower-1.0.14}/templates/calibration-corpus.json +0 -0
  276. {code_mower-1.0.13 → code_mower-1.0.14}/templates/code-mower.yml.j2 +0 -0
  277. {code_mower-1.0.13 → code_mower-1.0.14}/templates/context-packs.example.json +0 -0
  278. {code_mower-1.0.13 → code_mower-1.0.14}/templates/cursor/BUGBOT.md +0 -0
  279. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/README.md +0 -0
  280. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/claude.md +0 -0
  281. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/codex.md +0 -0
  282. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/cursor.md +0 -0
  283. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/devin.md +0 -0
  284. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/generic.md +0 -0
  285. {code_mower-1.0.13 → code_mower-1.0.14}/templates/lanes/run_mac_lane.sh +0 -0
  286. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/acp_bridge.yml +0 -0
  287. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/aider.yml +0 -0
  288. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/antigravity_cli.yml +0 -0
  289. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/claude_audit.yml +0 -0
  290. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/claude_review.yml +0 -0
  291. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/coderabbit_cli.yml +0 -0
  292. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/codex.yml +0 -0
  293. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/cursor_bugbot.yml +0 -0
  294. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/cursor_cloud_agent.yml +0 -0
  295. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/devin.yml +0 -0
  296. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/devin_cli.yml +0 -0
  297. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/gemini_cli.yml +0 -0
  298. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/gitar.yml +0 -0
  299. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/greptile.yml +0 -0
  300. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/hermes_cli.yml +0 -0
  301. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/local_llm.yml +0 -0
  302. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/muse_cli.yml +0 -0
  303. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers/qodo.yml +0 -0
  304. {code_mower-1.0.13 → code_mower-1.0.14}/templates/providers.yml +0 -0
  305. {code_mower-1.0.13 → code_mower-1.0.14}/templates/reviewer-spend.example.json +0 -0
  306. {code_mower-1.0.13 → code_mower-1.0.14}/templates/reviewer-value-report.example.md +0 -0
  307. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  308. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  309. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  310. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  311. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  312. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/code-mower-gate.yml.j2 +0 -0
  313. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  314. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  315. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  316. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  317. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  318. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  319. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  320. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  321. {code_mower-1.0.13 → code_mower-1.0.14}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  322. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_adoption_diagnostics.py +0 -0
  323. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_adoption_result_semantics.py +0 -0
  324. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_adoption_run_contract.py +0 -0
  325. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_antigravity_sdk_probe.py +0 -0
  326. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_audit_comment_posture.py +0 -0
  327. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_audit_limits.py +0 -0
  328. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_board.py +0 -0
  329. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_builder_experiment.py +0 -0
  330. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_builder_identity.py +0 -0
  331. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_builder_runs.py +0 -0
  332. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_calibration_effect_report.py +0 -0
  333. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_calibration_truth.py +0 -0
  334. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_campaign_adapters.py +0 -0
  335. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_campaign_discovery.py +0 -0
  336. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_campaign_retry_evidence_711.py +0 -0
  337. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_checks.py +0 -0
  338. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_claude_audit_pr.py +0 -0
  339. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_claude_cli_bounce.py +0 -0
  340. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_clear_stale.py +0 -0
  341. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_cloud_client.py +0 -0
  342. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_cloud_git_metadata.py +0 -0
  343. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_cloud_manifest.py +0 -0
  344. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_cloud_reports.py +0 -0
  345. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  346. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_codex_audit_env_preflight.py +0 -0
  347. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_codex_audit_pr.py +0 -0
  348. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_controller.py +0 -0
  349. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_decision_audit_integration.py +0 -0
  350. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_decisions.py +0 -0
  351. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_devin_builder_lane.py +0 -0
  352. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_devin_cli_audit_pr.py +0 -0
  353. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_devin_provider_contract.py +0 -0
  354. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_actions_cost_summary.py +0 -0
  355. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_actions_failure_selection.py +0 -0
  356. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_boundaries.py +0 -0
  357. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_campaign_auth.py +0 -0
  358. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_campaign_readiness.py +0 -0
  359. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_github_checks.py +0 -0
  360. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_output.py +0 -0
  361. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_privacy.py +0 -0
  362. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_provider_env_required.py +0 -0
  363. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_provider_env_tokens.py +0 -0
  364. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_provider_local_audit_setup.py +0 -0
  365. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_provider_probe.py +0 -0
  366. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_provider_review_hygiene.py +0 -0
  367. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_registry.py +0 -0
  368. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_runtime.py +0 -0
  369. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_self_hosted_runner.py +0 -0
  370. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_doctor_supervised_pilot.py +0 -0
  371. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_file_locks.py +0 -0
  372. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_fork_pr_guard.py +0 -0
  373. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_gate_automerge.py +0 -0
  374. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_gate_health.py +0 -0
  375. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_hosted_dispatch_profile.py +0 -0
  376. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_init_actionlint.py +0 -0
  377. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_init_build_loop.py +0 -0
  378. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_lane_delivery_contract.py +0 -0
  379. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_lane_status.py +0 -0
  380. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_local_llm_github_helpers.py +0 -0
  381. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_migration_rehearsal.py +0 -0
  382. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_migration_setup_drift.py +0 -0
  383. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_next_steps.py +0 -0
  384. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_package_install_failure_taxonomy.py +0 -0
  385. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_participant_sessions.py +0 -0
  386. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_plan_context.py +0 -0
  387. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_pr_outcome_contract.py +0 -0
  388. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_productivity_metrics_contract.py +0 -0
  389. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_productivity_report.py +0 -0
  390. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_prompts.py +0 -0
  391. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_fixture_contracts.py +0 -0
  392. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_local_cli.py +0 -0
  393. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_comments.py +0 -0
  394. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_git.py +0 -0
  395. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_github_pr.py +0 -0
  396. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_pr_worktree.py +0 -0
  397. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_process.py +0 -0
  398. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_repo_paths.py +0 -0
  399. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_text_schema.py +0 -0
  400. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_provider_runners_workspace.py +0 -0
  401. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_release_campaigns.py +0 -0
  402. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_release_qualify.py +0 -0
  403. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_reviewer_metrics_core.py +0 -0
  404. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_reviewer_spend.py +0 -0
  405. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_supervised_pilot_contract.py +0 -0
  406. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_trailer_comment_labeler.py +0 -0
  407. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_work_orders.py +0 -0
  408. {code_mower-1.0.13 → code_mower-1.0.14}/tests/test_work_type_contract.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 1.0.13
3
+ Version: 1.0.14
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/codemower-ai/code-mower
@@ -241,7 +241,7 @@ agent report its actual host posture, exact installed version, doctor result,
241
241
  Board URL, and any owner-only click-list before it mutates the repo.
242
242
 
243
243
  The current package-index announcement entry point is the tagged
244
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.13/docs/try-in-10-minutes.md)
244
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.14/docs/try-in-10-minutes.md)
245
245
  guide. The v1.0 supervised-pilot release includes the native Board, the
246
246
  controller dry-run and policy contract, adoption and upgrade hardening from
247
247
  recent install rehearsals, package-index release checks, provider-diversity
@@ -300,6 +300,12 @@ versioned Python on `PATH` outside the user home before falling back to its
300
300
  own running interpreter, so a pipx- or uv-installed CLI stops handing Claude's
301
301
  strict macOS sandbox an interpreter under the denied home tree. An explicit
302
302
  `CODE_MOWER_PYTHON` remains authoritative.
303
+ The v1.0.14 patch corrects hosted Devin qualification result precedence: a
304
+ valid closed structured result is accepted even while the session still
305
+ reports `running` / `waiting_for_user`, so a finished informational Devin
306
+ attempt is no longer recorded as owner-blocked. An explicit terminal API
307
+ failure and a `waiting_for_approval` session still take precedence over any
308
+ structured output.
303
309
  Package-only users can start from the public package rather than a source
304
310
  checkout.
305
311
 
@@ -332,7 +338,7 @@ Provider-contract baseline for the next release train:
332
338
 
333
339
  For release verification,
334
340
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
335
- the package-index procedure for `v1.0.13` / `code-mower==1.0.13`. The
341
+ the package-index procedure for `v1.0.14` / `code-mower==1.0.14`. The
336
342
  GitHub release records the workflow and rehearsal evidence for the exact tag.
337
343
  After publication, [Release Qualification](docs/release-qualification.md)
338
344
  coordinates provider-specific install and operational checks without treating
@@ -526,8 +532,8 @@ measurement work.
526
532
 
527
533
  ## Installation Status
528
534
 
529
- The current package-index release baseline is `v1.0.13`, with pinned package
530
- install spec `code-mower==1.0.13`. Release evidence is recorded on the GitHub
535
+ The current package-index release baseline is `v1.0.14`, with pinned package
536
+ install spec `code-mower==1.0.14`. Release evidence is recorded on the GitHub
531
537
  release and in the first-user install rehearsal. The public repository is
532
538
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
533
539
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -609,6 +615,7 @@ first so local work exercises the same package entrypoint users install.
609
615
  - [v1.0.11 Release Notes](docs/v1011-release-notes.md)
610
616
  - [v1.0.12 Release Notes](docs/v1012-release-notes.md)
611
617
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
618
+ - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
612
619
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
613
620
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
614
621
  - [Demo Calibration Example](examples/demo-calibration/README.md)
@@ -211,7 +211,7 @@ agent report its actual host posture, exact installed version, doctor result,
211
211
  Board URL, and any owner-only click-list before it mutates the repo.
212
212
 
213
213
  The current package-index announcement entry point is the tagged
214
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.13/docs/try-in-10-minutes.md)
214
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.14/docs/try-in-10-minutes.md)
215
215
  guide. The v1.0 supervised-pilot release includes the native Board, the
216
216
  controller dry-run and policy contract, adoption and upgrade hardening from
217
217
  recent install rehearsals, package-index release checks, provider-diversity
@@ -270,6 +270,12 @@ versioned Python on `PATH` outside the user home before falling back to its
270
270
  own running interpreter, so a pipx- or uv-installed CLI stops handing Claude's
271
271
  strict macOS sandbox an interpreter under the denied home tree. An explicit
272
272
  `CODE_MOWER_PYTHON` remains authoritative.
273
+ The v1.0.14 patch corrects hosted Devin qualification result precedence: a
274
+ valid closed structured result is accepted even while the session still
275
+ reports `running` / `waiting_for_user`, so a finished informational Devin
276
+ attempt is no longer recorded as owner-blocked. An explicit terminal API
277
+ failure and a `waiting_for_approval` session still take precedence over any
278
+ structured output.
273
279
  Package-only users can start from the public package rather than a source
274
280
  checkout.
275
281
 
@@ -302,7 +308,7 @@ Provider-contract baseline for the next release train:
302
308
 
303
309
  For release verification,
304
310
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
305
- the package-index procedure for `v1.0.13` / `code-mower==1.0.13`. The
311
+ the package-index procedure for `v1.0.14` / `code-mower==1.0.14`. The
306
312
  GitHub release records the workflow and rehearsal evidence for the exact tag.
307
313
  After publication, [Release Qualification](docs/release-qualification.md)
308
314
  coordinates provider-specific install and operational checks without treating
@@ -496,8 +502,8 @@ measurement work.
496
502
 
497
503
  ## Installation Status
498
504
 
499
- The current package-index release baseline is `v1.0.13`, with pinned package
500
- install spec `code-mower==1.0.13`. Release evidence is recorded on the GitHub
505
+ The current package-index release baseline is `v1.0.14`, with pinned package
506
+ install spec `code-mower==1.0.14`. Release evidence is recorded on the GitHub
501
507
  release and in the first-user install rehearsal. The public repository is
502
508
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
503
509
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -579,6 +585,7 @@ first so local work exercises the same package entrypoint users install.
579
585
  - [v1.0.11 Release Notes](docs/v1011-release-notes.md)
580
586
  - [v1.0.12 Release Notes](docs/v1012-release-notes.md)
581
587
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
588
+ - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
582
589
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
583
590
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
584
591
  - [Demo Calibration Example](examples/demo-calibration/README.md)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "1.0.13"
7
+ version = "1.0.14"
8
8
  description = "Multi-reviewer AI code audit orchestration"
9
9
  requires-python = ">=3.12"
10
10
  readme = "README.md"
@@ -1,3 +1,3 @@
1
1
  """Code Mower package."""
2
2
 
3
- __version__ = "1.0.13"
3
+ __version__ = "1.0.14"
@@ -238,13 +238,6 @@ def poll_devin_session(
238
238
  return "failed", None, exc.code
239
239
  status = str(data.get("status") or "")
240
240
  detail = str(data.get("status_detail") or "")
241
- if detail in {"waiting_for_user", "waiting_for_approval"}:
242
- return "owner_action", None, "devin_waiting_for_owner"
243
- if status == "exit" or detail == "finished":
244
- result = data.get("structured_output")
245
- if isinstance(result, dict):
246
- return "complete", dict(result), ""
247
- return "failed", None, "hosted_result_rejected"
248
241
  if status in {"error", "suspended"} or detail in {
249
242
  "error",
250
243
  "usage_limit_exceeded",
@@ -256,4 +249,13 @@ def poll_devin_session(
256
249
  "total_session_limit_exceeded",
257
250
  }:
258
251
  return "failed", None, "devin_session_failed"
252
+ if detail == "waiting_for_approval":
253
+ return "owner_action", None, "devin_waiting_for_owner"
254
+ result = data.get("structured_output")
255
+ if isinstance(result, dict):
256
+ return "complete", dict(result), ""
257
+ if detail == "waiting_for_user":
258
+ return "owner_action", None, "devin_waiting_for_owner"
259
+ if status == "exit" or detail == "finished":
260
+ return "failed", None, "hosted_result_rejected"
259
261
  return "running", None, ""
@@ -8,7 +8,7 @@ permissions:
8
8
  contents: read
9
9
 
10
10
  env:
11
- CODE_MOWER_PACKAGE_SPEC: code-mower==1.0.13
11
+ CODE_MOWER_PACKAGE_SPEC: code-mower==1.0.14
12
12
 
13
13
  jobs:
14
14
  auto-record:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-mower
3
- Version: 1.0.13
3
+ Version: 1.0.14
4
4
  Summary: Multi-reviewer AI code audit orchestration
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/codemower-ai/code-mower
@@ -241,7 +241,7 @@ agent report its actual host posture, exact installed version, doctor result,
241
241
  Board URL, and any owner-only click-list before it mutates the repo.
242
242
 
243
243
  The current package-index announcement entry point is the tagged
244
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.13/docs/try-in-10-minutes.md)
244
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.0.14/docs/try-in-10-minutes.md)
245
245
  guide. The v1.0 supervised-pilot release includes the native Board, the
246
246
  controller dry-run and policy contract, adoption and upgrade hardening from
247
247
  recent install rehearsals, package-index release checks, provider-diversity
@@ -300,6 +300,12 @@ versioned Python on `PATH` outside the user home before falling back to its
300
300
  own running interpreter, so a pipx- or uv-installed CLI stops handing Claude's
301
301
  strict macOS sandbox an interpreter under the denied home tree. An explicit
302
302
  `CODE_MOWER_PYTHON` remains authoritative.
303
+ The v1.0.14 patch corrects hosted Devin qualification result precedence: a
304
+ valid closed structured result is accepted even while the session still
305
+ reports `running` / `waiting_for_user`, so a finished informational Devin
306
+ attempt is no longer recorded as owner-blocked. An explicit terminal API
307
+ failure and a `waiting_for_approval` session still take precedence over any
308
+ structured output.
303
309
  Package-only users can start from the public package rather than a source
304
310
  checkout.
305
311
 
@@ -332,7 +338,7 @@ Provider-contract baseline for the next release train:
332
338
 
333
339
  For release verification,
334
340
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
335
- the package-index procedure for `v1.0.13` / `code-mower==1.0.13`. The
341
+ the package-index procedure for `v1.0.14` / `code-mower==1.0.14`. The
336
342
  GitHub release records the workflow and rehearsal evidence for the exact tag.
337
343
  After publication, [Release Qualification](docs/release-qualification.md)
338
344
  coordinates provider-specific install and operational checks without treating
@@ -526,8 +532,8 @@ measurement work.
526
532
 
527
533
  ## Installation Status
528
534
 
529
- The current package-index release baseline is `v1.0.13`, with pinned package
530
- install spec `code-mower==1.0.13`. Release evidence is recorded on the GitHub
535
+ The current package-index release baseline is `v1.0.14`, with pinned package
536
+ install spec `code-mower==1.0.14`. Release evidence is recorded on the GitHub
531
537
  release and in the first-user install rehearsal. The public repository is
532
538
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
533
539
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -609,6 +615,7 @@ first so local work exercises the same package entrypoint users install.
609
615
  - [v1.0.11 Release Notes](docs/v1011-release-notes.md)
610
616
  - [v1.0.12 Release Notes](docs/v1012-release-notes.md)
611
617
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
618
+ - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
612
619
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
613
620
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
614
621
  - [Demo Calibration Example](examples/demo-calibration/README.md)
@@ -8,7 +8,7 @@ permissions:
8
8
  contents: read
9
9
 
10
10
  env:
11
- CODE_MOWER_PACKAGE_SPEC: code-mower==1.0.13
11
+ CODE_MOWER_PACKAGE_SPEC: code-mower==1.0.14
12
12
 
13
13
  jobs:
14
14
  auto-record:
@@ -172,6 +172,61 @@ class DevinApiModuleTests(unittest.TestCase):
172
172
  ("failed", None, "devin_session_failed"),
173
173
  )
174
174
 
175
+ def test_poll_accepts_structured_result_while_devin_waits_for_user(self) -> None:
176
+ result = _adoption_result()
177
+ runner = _FakeApiRunner(
178
+ [
179
+ {
180
+ "status": "running",
181
+ "status_detail": "waiting_for_user",
182
+ "structured_output": result,
183
+ }
184
+ ]
185
+ )
186
+
187
+ self.assertEqual(
188
+ devin_api.poll_devin_session(
189
+ "org-test", "devin-1", "key", api_runner=runner
190
+ ),
191
+ ("complete", result, ""),
192
+ )
193
+
194
+ def test_poll_keeps_terminal_failure_ahead_of_structured_output(self) -> None:
195
+ runner = _FakeApiRunner(
196
+ [
197
+ {
198
+ "status": "error",
199
+ "status_detail": "out_of_credits",
200
+ "structured_output": _adoption_result(),
201
+ }
202
+ ]
203
+ )
204
+
205
+ self.assertEqual(
206
+ devin_api.poll_devin_session(
207
+ "org-test", "devin-1", "key", api_runner=runner
208
+ ),
209
+ ("failed", None, "devin_session_failed"),
210
+ )
211
+
212
+ def test_poll_keeps_owner_approval_ahead_of_structured_output(self) -> None:
213
+ runner = _FakeApiRunner(
214
+ [
215
+ {
216
+ "status": "running",
217
+ "status_detail": "waiting_for_approval",
218
+ "structured_output": _adoption_result(),
219
+ }
220
+ ]
221
+ )
222
+
223
+ self.assertEqual(
224
+ devin_api.poll_devin_session(
225
+ "org-test", "devin-1", "key", api_runner=runner
226
+ ),
227
+ ("owner_action", None, "devin_waiting_for_owner"),
228
+ )
229
+
175
230
 
176
231
  class DevinCampaignApiTests(unittest.TestCase):
177
232
  def _campaign(
@@ -65,7 +65,7 @@ from scripts import guard_package_workflows, privacy_scan
65
65
 
66
66
  class ReleaseHygieneTests(unittest.TestCase):
67
67
  def test_version_is_current_supervised_pilot_release(self) -> None:
68
- self.assertEqual(__version__, "1.0.13")
68
+ self.assertEqual(__version__, "1.0.14")
69
69
 
70
70
  def test_dogfood_repo_has_real_root_config(self) -> None:
71
71
  config_path = ROOT / "code-mower.yml"
@@ -216,7 +216,7 @@ class ReleaseHygieneTests(unittest.TestCase):
216
216
  self.assertIn("Cold Install Vs Upgrade", install)
217
217
  self.assertIn("Switching Between pipx And uv", install)
218
218
  self.assertIn("uv tool install --python 3.12 --reinstall --refresh-package", install)
219
- self.assertIn("code-mower==1.0.13", troubleshooting)
219
+ self.assertIn("code-mower==1.0.14", troubleshooting)
220
220
  self.assertNotIn("code-mower==0.8.0b1", troubleshooting)
221
221
  self.assertIn("pipx uninstall code-mower", install)
222
222
  for env_name in ("PIPX_HOME", "PIPX_BIN_DIR", "PIPX_LOG_DIR"):
@@ -1099,7 +1099,7 @@ exit 1
1099
1099
  )
1100
1100
 
1101
1101
  self.assertNotEqual(completed.returncode, 0)
1102
- self.assertIn("pipx install code-mower==1.0.13", completed.stderr)
1102
+ self.assertIn("pipx install code-mower==1.0.14", completed.stderr)
1103
1103
  self.assertIn("scripts/dev-python -m venv .venv", completed.stderr)
1104
1104
  self.assertIn(".venv/bin/code-mower", completed.stderr)
1105
1105
  self.assertNotIn("PYTHONPATH=src", completed.stderr)
@@ -3237,10 +3237,10 @@ jobs:
3237
3237
 
3238
3238
  cases = (
3239
3239
  (
3240
- 'CODE_MOWER_STANDALONE_REF="v1.0.13"\n',
3240
+ 'CODE_MOWER_STANDALONE_REF="v1.0.14"\n',
3241
3241
  "pass",
3242
3242
  "matches_running_package",
3243
- "v1.0.13",
3243
+ "v1.0.14",
3244
3244
  ),
3245
3245
  (
3246
3246
  'CODE_MOWER_STANDALONE_REF="v0.9.1-beta.1"\n',
@@ -3271,12 +3271,12 @@ jobs:
3271
3271
 
3272
3272
  payload = migration._standalone_pin_drift_summary(
3273
3273
  repo,
3274
- package_version="1.0.13",
3274
+ package_version="1.0.14",
3275
3275
  )
3276
3276
 
3277
3277
  self.assertEqual(payload["status"], status)
3278
3278
  self.assertEqual(payload["reason"], reason)
3279
- self.assertEqual(payload["expected_ref"], "v1.0.13")
3279
+ self.assertEqual(payload["expected_ref"], "v1.0.14")
3280
3280
  if current_ref is None:
3281
3281
  self.assertNotIn("current_ref", payload)
3282
3282
  else:
@@ -3297,7 +3297,7 @@ jobs:
3297
3297
 
3298
3298
  payload = migration._standalone_pin_drift_summary(
3299
3299
  repo,
3300
- package_version="1.0.13",
3300
+ package_version="1.0.14",
3301
3301
  )
3302
3302
 
3303
3303
  self.assertEqual(payload["status"], "warn")
@@ -3360,7 +3360,7 @@ jobs:
3360
3360
  "standalone_pin": {
3361
3361
  "status": "skip",
3362
3362
  "reason": "pin_file_absent",
3363
- "expected_ref": "v1.0.13",
3363
+ "expected_ref": "v1.0.14",
3364
3364
  },
3365
3365
  "builder_hint": {
3366
3366
  "status": "skip",
@@ -3372,7 +3372,7 @@ jobs:
3372
3372
 
3373
3373
  rendered = migration.render_setup_drift_text(payload)
3374
3374
 
3375
- self.assertIn("Standalone pin: SKIP pin_file_absent expected=v1.0.13", rendered)
3375
+ self.assertIn("Standalone pin: SKIP pin_file_absent expected=v1.0.14", rendered)
3376
3376
 
3377
3377
  def test_setup_drift_reports_builder_hint_when_builders_omitted(self) -> None:
3378
3378
  from code_mower import migration
@@ -5552,11 +5552,11 @@ printf 'repo:%s:%s:%s\\n' "${lane}" "${stdin_flag}" "${token}"
5552
5552
  (output_dir / "src/code_mower/cloud_client/dogfood.py").is_file()
5553
5553
  )
5554
5554
  self.assertIn(
5555
- 'version = "1.0.13"',
5555
+ 'version = "1.0.14"',
5556
5556
  (output_dir / "pyproject.toml").read_text(encoding="utf-8"),
5557
5557
  )
5558
5558
  self.assertIn(
5559
- '__version__ = "1.0.13"',
5559
+ '__version__ = "1.0.14"',
5560
5560
  (output_dir / "src/code_mower/__init__.py").read_text(
5561
5561
  encoding="utf-8"
5562
5562
  ),
@@ -7561,7 +7561,7 @@ def main():
7561
7561
  "pip",
7562
7562
  "install",
7563
7563
  "--no-cache-dir",
7564
- "code-mower==1.0.13",
7564
+ "code-mower==1.0.14",
7565
7565
  ]
7566
7566
 
7567
7567
  def fake_run_step(*args: object, **kwargs: object) -> subprocess.CompletedProcess[str]:
@@ -7628,7 +7628,7 @@ def main():
7628
7628
  self.assertTrue(code_mower_migration._package_spec_uses_package_index("code-mower"))
7629
7629
  self.assertTrue(
7630
7630
  code_mower_migration._package_spec_uses_package_index(
7631
- "code-mower==1.0.13"
7631
+ "code-mower==1.0.14"
7632
7632
  )
7633
7633
  )
7634
7634
  self.assertFalse(code_mower_migration._package_spec_uses_package_index("."))
@@ -7637,7 +7637,7 @@ def main():
7637
7637
  )
7638
7638
  self.assertFalse(
7639
7639
  code_mower_migration._package_spec_uses_package_index(
7640
- "git+https://github.com/codemower-ai/code-mower.git@v1.0.13"
7640
+ "git+https://github.com/codemower-ai/code-mower.git@v1.0.14"
7641
7641
  )
7642
7642
  )
7643
7643
 
@@ -7647,7 +7647,7 @@ def main():
7647
7647
 
7648
7648
  with self.assertRaisesRegex(ValueError, "--allow-package-index"):
7649
7649
  code_mower_migration.run_package_install_rehearsal(
7650
- package_spec="code-mower==1.0.13",
7650
+ package_spec="code-mower==1.0.14",
7651
7651
  work_dir=work_dir,
7652
7652
  )
7653
7653
 
@@ -7675,7 +7675,7 @@ def main():
7675
7675
  [
7676
7676
  "package-install-rehearsal",
7677
7677
  "--package-spec",
7678
- "code-mower==1.0.13",
7678
+ "code-mower==1.0.14",
7679
7679
  "--allow-package-index",
7680
7680
  "--upgrade-pip",
7681
7681
  "--pip-no-cache",
@@ -7731,10 +7731,10 @@ def main():
7731
7731
  payload = release_readiness.render_release_readiness(ROOT)
7732
7732
 
7733
7733
  self.assertEqual(payload["status"], "pass")
7734
- self.assertEqual(payload["version"], "1.0.13")
7735
- self.assertEqual(payload["release_tag"], "v1.0.13")
7736
- self.assertEqual(payload["alpha_tag"], "v1.0.13")
7737
- self.assertEqual(payload["package_index_spec"], "code-mower==1.0.13")
7734
+ self.assertEqual(payload["version"], "1.0.14")
7735
+ self.assertEqual(payload["release_tag"], "v1.0.14")
7736
+ self.assertEqual(payload["alpha_tag"], "v1.0.14")
7737
+ self.assertEqual(payload["package_index_spec"], "code-mower==1.0.14")
7738
7738
  check_ids = {check["id"]: check for check in payload["checks"]}
7739
7739
  self.assertEqual(check_ids["package-version-consistency"]["status"], "pass")
7740
7740
  self.assertEqual(
@@ -7750,9 +7750,9 @@ def main():
7750
7750
  self.assertEqual(check_ids["public-support-redaction-guidance"]["status"], "pass")
7751
7751
  commands = {action["id"]: action["command"] for action in payload["next_actions"]}
7752
7752
  urls = {action["id"]: action.get("url", "") for action in payload["next_actions"]}
7753
- self.assertIn("--ref v1.0.13", commands["dry-run-release-workflow"])
7753
+ self.assertIn("--ref v1.0.14", commands["dry-run-release-workflow"])
7754
7754
  self.assertNotIn("--ref main", commands["dry-run-release-workflow"])
7755
- self.assertIn("--ref v1.0.13", commands["publish-testpypi-candidate"])
7755
+ self.assertIn("--ref v1.0.14", commands["publish-testpypi-candidate"])
7756
7756
  self.assertNotIn("--ref main", commands["publish-testpypi-candidate"])
7757
7757
  self.assertIn("publish_testpypi=true", commands["publish-testpypi-candidate"])
7758
7758
  self.assertIn("publish_pypi=false", commands["publish-testpypi-candidate"])
@@ -7789,7 +7789,7 @@ def main():
7789
7789
  check_ids = {check["id"]: check for check in payload["checks"]}
7790
7790
  check = check_ids["materialized-package-version-consistency"]
7791
7791
  self.assertEqual(check["status"], "fail")
7792
- self.assertEqual(check["detail"]["source_version"], "1.0.13")
7792
+ self.assertEqual(check["detail"]["source_version"], "1.0.14")
7793
7793
  self.assertEqual(check["detail"]["generated_init_version"], "0.0.0")
7794
7794
 
7795
7795
  def test_public_support_docs_are_packaged_and_privacy_forward(self) -> None:
@@ -7893,20 +7893,20 @@ def main():
7893
7893
  "v1.0.0-rc.1",
7894
7894
  )
7895
7895
  self.assertEqual(
7896
- release_readiness._release_tag_for_version("1.0.13"),
7897
- "v1.0.13",
7896
+ release_readiness._release_tag_for_version("1.0.14"),
7897
+ "v1.0.14",
7898
7898
  )
7899
7899
  self.assertEqual(
7900
- code_mower_versioning.release_tag_for_version("1.0.13"),
7901
- "v1.0.13",
7900
+ code_mower_versioning.release_tag_for_version("1.0.14"),
7901
+ "v1.0.14",
7902
7902
  )
7903
7903
 
7904
7904
  def test_public_release_baseline_helpers_derive_announcement_links(self) -> None:
7905
7905
  self.assertEqual(
7906
7906
  code_mower_versioning.public_baseline_sentence(__version__),
7907
7907
  (
7908
- "The current package-index release baseline is `v1.0.13`, "
7909
- "with pinned package install spec `code-mower==1.0.13`. "
7908
+ "The current package-index release baseline is `v1.0.14`, "
7909
+ "with pinned package install spec `code-mower==1.0.14`. "
7910
7910
  "Release evidence is recorded on the GitHub release and in the "
7911
7911
  "first-user install rehearsal."
7912
7912
  ),
@@ -7915,7 +7915,7 @@ def main():
7915
7915
  code_mower_versioning.tagged_doc_url(__version__),
7916
7916
  (
7917
7917
  "https://github.com/codemower-ai/code-mower/blob/"
7918
- "v1.0.13/docs/try-in-10-minutes.md"
7918
+ "v1.0.14/docs/try-in-10-minutes.md"
7919
7919
  ),
7920
7920
  )
7921
7921
 
@@ -7968,15 +7968,15 @@ def main():
7968
7968
  )
7969
7969
 
7970
7970
  current_status = (
7971
- "The current package-index release baseline is `v1.0.13`, with "
7972
- "pinned package install spec `code-mower==1.0.13`. Release "
7971
+ "The current package-index release baseline is `v1.0.14`, with "
7972
+ "pinned package install spec `code-mower==1.0.14`. Release "
7973
7973
  "evidence is recorded on the GitHub release and in the first-user "
7974
7974
  "install rehearsal."
7975
7975
  )
7976
7976
  for text in (readme, current_state, rollout):
7977
7977
  self.assertIn(current_status, " ".join(text.split()))
7978
7978
  self.assertIn(
7979
- "The current package-index release entrypoint is `code-mower==1.0.13`",
7979
+ "The current package-index release entrypoint is `code-mower==1.0.14`",
7980
7980
  public_release,
7981
7981
  )
7982
7982
  self.assertIn("The v1.0 supervised-pilot release includes", public_release)
@@ -7986,7 +7986,7 @@ def main():
7986
7986
  )
7987
7987
 
7988
7988
  self.assertIn(
7989
- "The current public-release baseline is `v1.0.13`",
7989
+ "The current public-release baseline is `v1.0.14`",
7990
7990
  oss_checklist,
7991
7991
  )
7992
7992
  self.assertIn(
@@ -8017,7 +8017,7 @@ def main():
8017
8017
  " ".join(first_user.split()),
8018
8018
  )
8019
8019
  self.assertIn("never substitute mutable `main`", first_user)
8020
- self.assertEqual(first_user.count(" --ref v1.0.13 \\"), 2)
8020
+ self.assertEqual(first_user.count(" --ref v1.0.14 \\"), 2)
8021
8021
  self.assertNotIn(" --ref main \\", first_user)
8022
8022
  self.assertIn("-f publish_testpypi=true", first_user)
8023
8023
  self.assertIn("-f publish_pypi=false", first_user)
@@ -8029,23 +8029,23 @@ def main():
8029
8029
  first_user,
8030
8030
  )
8031
8031
  self.assertNotIn(
8032
- "The latest public-package rehearsal for `v1.0.13` was run",
8032
+ "The latest public-package rehearsal for `v1.0.14` was run",
8033
8033
  first_user,
8034
8034
  )
8035
- self.assertNotIn("TestPyPI is not\npublished for `1.0.13`", first_user)
8035
+ self.assertNotIn("TestPyPI is not\npublished for `1.0.14`", first_user)
8036
8036
  for text in (readme, current_state, rollout):
8037
8037
  self.assertNotIn(
8038
- "published on PyPI as `code-mower==1.0.13`",
8038
+ "published on PyPI as `code-mower==1.0.14`",
8039
8039
  text,
8040
8040
  )
8041
8041
  self.assertNotIn(
8042
8042
  "latest 10/10 public-package readiness proof for "
8043
- "`code-mower==1.0.13`",
8043
+ "`code-mower==1.0.14`",
8044
8044
  text,
8045
8045
  )
8046
8046
  self.assertNotIn(
8047
8047
  "public PyPI package-install rehearsal from "
8048
- "`code-mower==1.0.13`",
8048
+ "`code-mower==1.0.14`",
8049
8049
  text,
8050
8050
  )
8051
8051
  self.assertNotIn("beta.52: 10/10 first-user readiness", text)
@@ -8345,7 +8345,7 @@ def main():
8345
8345
 
8346
8346
  self.assertIn("Python 3.12 or newer", install)
8347
8347
  self.assertIn('pipx install --python "$CODE_MOWER_PYTHON"', install)
8348
- self.assertIn("uv tool install --python 3.12 code-mower==1.0.13", install)
8348
+ self.assertIn("uv tool install --python 3.12 code-mower==1.0.14", install)
8349
8349
  self.assertIn(
8350
8350
  'PIP_NO_CACHE_DIR=1 pipx install --force --python "$CODE_MOWER_PYTHON"',
8351
8351
  install,
@@ -8439,7 +8439,7 @@ def main():
8439
8439
  / "v101-effectiveness-assessment.md",
8440
8440
  }
8441
8441
  stale_phrases = (
8442
- "pipx install --python python3.12 code-mower==1.0.13",
8442
+ "pipx install --python python3.12 code-mower==1.0.14",
8443
8443
  "Use only after TestPyPI passes.",
8444
8444
  "future newest betas until 1.0",
8445
8445
  "during v0.7 adoption",
@@ -8492,7 +8492,7 @@ def main():
8492
8492
  troubleshooting = (ROOT / "docs" / "troubleshooting.md").read_text(
8493
8493
  encoding="utf-8",
8494
8494
  )
8495
- release_notes = (ROOT / "docs" / "v1013-release-notes.md").read_text(
8495
+ release_notes = (ROOT / "docs" / "v1014-release-notes.md").read_text(
8496
8496
  encoding="utf-8",
8497
8497
  )
8498
8498
 
@@ -8514,6 +8514,7 @@ def main():
8514
8514
  self.assertIn("[v1.0.11 Release Notes](docs/v1011-release-notes.md)", readme)
8515
8515
  self.assertIn("[v1.0.12 Release Notes](docs/v1012-release-notes.md)", readme)
8516
8516
  self.assertIn("[v1.0.13 Release Notes](docs/v1013-release-notes.md)", readme)
8517
+ self.assertIn("[v1.0.14 Release Notes](docs/v1014-release-notes.md)", readme)
8517
8518
  self.assertIn(
8518
8519
  "[v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)",
8519
8520
  readme,
@@ -8525,7 +8526,7 @@ def main():
8525
8526
  self.assertIn("Manual Audit Wrapper Fails Before Reviewing", troubleshooting)
8526
8527
  self.assertIn("OWNER/REPO:/absolute/path/to/pr-head-checkout", troubleshooting)
8527
8528
  self.assertIn("structured output", " ".join(troubleshooting.split()))
8528
- self.assertIn("Code Mower v1.0.13 Release Notes", release_notes)
8529
+ self.assertIn("Code Mower v1.0.14 Release Notes", release_notes)
8529
8530
  self.assertIn("code-mower release qualify", release_notes)
8530
8531
  self.assertIn("code-mower release campaign", release_notes)
8531
8532
  self.assertIn("code_mower.adoptionResult.v1", release_notes)
@@ -8732,7 +8733,7 @@ def main():
8732
8733
  "doctor --adoption --repo codemower-ai/code-mower",
8733
8734
  doctor_step["command"],
8734
8735
  )
8735
- self.assertIn("code-mower==1.0.13", package_step["command"])
8736
+ self.assertIn("code-mower==1.0.14", package_step["command"])
8736
8737
  self.assertIn("--allow-package-index", package_step["command"])
8737
8738
  self.assertIn("current published PyPI package", package_step["why"])
8738
8739
  self.assertIn("first_user_readiness", package_step["why"])
File without changes
File without changes
File without changes
File without changes
File without changes