code-mower 1.1.0__tar.gz → 1.1.2__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 (431) hide show
  1. {code_mower-1.1.0 → code_mower-1.1.2}/PKG-INFO +7 -5
  2. {code_mower-1.1.0 → code_mower-1.1.2}/README.md +6 -4
  3. {code_mower-1.1.0 → code_mower-1.1.2}/pyproject.toml +1 -1
  4. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/__init__.py +1 -1
  5. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/campaign_adapters.py +14 -2
  6. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/adoption.py +11 -1
  7. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/runner.py +7 -0
  8. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/jira_cloud.py +41 -15
  9. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/release_campaigns.py +507 -18
  10. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/release_qualify.py +25 -1
  11. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
  12. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/tracker_queue.py +11 -4
  13. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/PKG-INFO +7 -5
  14. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/SOURCES.txt +2 -0
  15. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/builder-provenance.yml.j2 +1 -1
  16. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_board.py +19 -6
  17. code_mower-1.1.2/tests/test_campaign_gh_auth_and_issue_binding_817.py +902 -0
  18. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_cli_audit_pr.py +7 -2
  19. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_cloud.py +38 -0
  20. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_release_campaigns.py +455 -11
  21. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_release_hygiene.py +45 -45
  22. code_mower-1.1.2/tests/test_remote_qualification_failure_reason_819.py +116 -0
  23. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_tracker_queue.py +10 -5
  24. {code_mower-1.1.0 → code_mower-1.1.2}/CODE_OF_CONDUCT.md +0 -0
  25. {code_mower-1.1.0 → code_mower-1.1.2}/LICENSE +0 -0
  26. {code_mower-1.1.0 → code_mower-1.1.2}/MANIFEST.in +0 -0
  27. {code_mower-1.1.0 → code_mower-1.1.2}/NOTICE +0 -0
  28. {code_mower-1.1.0 → code_mower-1.1.2}/SUPPORT.md +0 -0
  29. {code_mower-1.1.0 → code_mower-1.1.2}/requirements/requirements.txt +0 -0
  30. {code_mower-1.1.0 → code_mower-1.1.2}/setup.cfg +0 -0
  31. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/__init__.py +0 -0
  32. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/_base.py +0 -0
  33. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  34. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/gitar.py +0 -0
  35. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/greptile.py +0 -0
  36. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/adapters/qodo.py +0 -0
  37. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  38. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/antigravity_sdk_probe.py +0 -0
  39. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_handoff_log.py +0 -0
  40. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_labeler_lib.py +0 -0
  41. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_limits.py +0 -0
  42. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/audit_progress.py +0 -0
  43. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/blind_review_artifacts.py +0 -0
  44. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/blind_review_coordinator.py +0 -0
  45. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/board.py +0 -0
  46. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/board_store.py +0 -0
  47. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/bootstrap.py +0 -0
  48. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/builder_experiment.py +0 -0
  49. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/builder_runs.py +0 -0
  50. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/__init__.py +0 -0
  51. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/arms.py +0 -0
  52. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/auto_discovery.py +0 -0
  53. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/commands.py +0 -0
  54. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/context_inputs.py +0 -0
  55. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/corpus.py +0 -0
  56. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/effect_report.py +0 -0
  57. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/evidence.py +0 -0
  58. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/evidence_report.py +0 -0
  59. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/identity.py +0 -0
  60. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/metrics.py +0 -0
  61. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/overlap.py +0 -0
  62. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/planning.py +0 -0
  63. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/policy.py +0 -0
  64. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/results.py +0 -0
  65. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/run_results.py +0 -0
  66. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/run_status.py +0 -0
  67. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/runner.py +0 -0
  68. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/truth.py +0 -0
  69. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/calibration/value_report.py +0 -0
  70. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/campaign_discovery.py +0 -0
  71. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/checks.py +0 -0
  72. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/claude_audit_pr.py +0 -0
  73. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/claude_cli_bounce.py +0 -0
  74. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/claude_cli_environment.py +0 -0
  75. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/clear_stale.py +0 -0
  76. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cli.py +0 -0
  77. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud.py +0 -0
  78. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/__init__.py +0 -0
  79. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/adoption_runs.py +0 -0
  80. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/bundle.py +0 -0
  81. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/doctor.py +0 -0
  82. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/dogfood.py +0 -0
  83. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/endpoints.py +0 -0
  84. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/errors.py +0 -0
  85. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/events.py +0 -0
  86. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/export.py +0 -0
  87. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/finding_outcomes.py +0 -0
  88. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/git_metadata.py +0 -0
  89. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/manifest.py +0 -0
  90. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/operations.py +0 -0
  91. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/pr_outcomes.py +0 -0
  92. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/productivity.py +0 -0
  93. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/productivity_windows.py +0 -0
  94. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/reports.py +0 -0
  95. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/setup.py +0 -0
  96. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/tokens.py +0 -0
  97. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/upload.py +0 -0
  98. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/cloud_client/work_types.py +0 -0
  99. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_calibration.py +0 -0
  100. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_context_packs.py +0 -0
  101. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_merge.py +0 -0
  102. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/code_mower_telemetry.py +0 -0
  103. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  104. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_env_preflight.py +0 -0
  105. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_pr.py +0 -0
  106. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  107. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  108. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/config.py +0 -0
  109. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/controller.py +0 -0
  110. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/decisions.py +0 -0
  111. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/devin_api.py +0 -0
  112. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/devin_cli_audit_pr.py +0 -0
  113. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor.py +0 -0
  114. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/__init__.py +0 -0
  115. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/audit_limits.py +0 -0
  116. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
  117. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/cloud.py +0 -0
  118. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/common.py +0 -0
  119. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github.py +0 -0
  120. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions.py +0 -0
  121. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  122. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  123. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  124. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  125. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  126. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  127. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  128. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  129. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_api.py +0 -0
  130. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_branch.py +0 -0
  131. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_config.py +0 -0
  132. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_human_token.py +0 -0
  133. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_provider.py +0 -0
  134. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_repo.py +0 -0
  135. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
  136. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/groups.py +0 -0
  137. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/jira.py +0 -0
  138. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/models.py +0 -0
  139. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/output.py +0 -0
  140. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/presets.py +0 -0
  141. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/privacy.py +0 -0
  142. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  143. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  144. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  145. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_env.py +0 -0
  146. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  147. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  148. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
  149. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  150. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  151. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  152. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  153. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  154. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  155. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  156. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  157. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  158. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/providers.py +0 -0
  159. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/registry.py +0 -0
  160. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/runtime.py +0 -0
  161. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  162. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
  163. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
  164. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/file_locks.py +0 -0
  165. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/gate_health.py +0 -0
  166. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  167. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/git_identity.py +0 -0
  168. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/grok_build_audit_pr.py +0 -0
  169. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  170. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/init.py +0 -0
  171. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/jira_mutations.py +0 -0
  172. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/jira_pr_sync.py +0 -0
  173. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/__init__.py +0 -0
  174. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/aider.py +0 -0
  175. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  176. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/claude.py +0 -0
  177. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/codex.py +0 -0
  178. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/devin.py +0 -0
  179. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/devin_cli.py +0 -0
  180. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  181. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/grok_build.py +0 -0
  182. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  183. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/local_llm.py +0 -0
  184. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_configs/muse_cli.py +0 -0
  185. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_delivery.py +0 -0
  186. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/lane_status.py +0 -0
  187. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_audit_pr.py +0 -0
  188. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_bakeoff.py +0 -0
  189. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_calibration.py +0 -0
  190. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/local_llm_profiles.py +0 -0
  191. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration.py +0 -0
  192. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_install.py +0 -0
  193. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_mirror.py +0 -0
  194. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_readiness.py +0 -0
  195. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/migration_rehearsal.py +0 -0
  196. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/muse_cli_audit_pr.py +0 -0
  197. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/next_steps.py +0 -0
  198. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package.py +0 -0
  199. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_content.py +0 -0
  200. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_manifest.py +0 -0
  201. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_paths.py +0 -0
  202. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_rendering.py +0 -0
  203. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/package_static.py +0 -0
  204. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/participants.py +0 -0
  205. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/plan_context.py +0 -0
  206. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/productivity_report.py +0 -0
  207. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/prompts.py +0 -0
  208. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_credentials.py +0 -0
  209. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_registry.py +0 -0
  210. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/__init__.py +0 -0
  211. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/comments.py +0 -0
  212. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/exit_codes.py +0 -0
  213. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/git.py +0 -0
  214. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/github_auth.py +0 -0
  215. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/github_pr.py +0 -0
  216. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  217. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/process.py +0 -0
  218. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/repo_paths.py +0 -0
  219. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/text_schema.py +0 -0
  220. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  221. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/provider_runners/workspace.py +0 -0
  222. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/providers/__init__.py +0 -0
  223. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/providers/local_cli.py +0 -0
  224. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/providers/provenance.py +0 -0
  225. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/release_readiness.py +0 -0
  226. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/reviewer_metrics.py +0 -0
  227. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/reviewer_spend.py +0 -0
  228. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/saas_reviewer_labeler.py +0 -0
  229. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/secrets.py +0 -0
  230. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/session.py +0 -0
  231. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/builder-experiment.example.json +0 -0
  232. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  233. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/calibration-corpus.json +0 -0
  234. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/code-mower.example.yml +0 -0
  235. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/context-packs.example.json +0 -0
  236. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  237. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  238. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  239. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  240. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  241. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  242. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  243. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
  244. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  245. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/README.md +0 -0
  246. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/claude.md +0 -0
  247. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/codex.md +0 -0
  248. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/cursor.md +0 -0
  249. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/devin.md +0 -0
  250. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/generic.md +0 -0
  251. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
  252. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/code_mower +0 -0
  253. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  254. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  255. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  256. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  257. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
  258. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  259. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/product-support/status_report.py +0 -0
  260. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/providers.yml +0 -0
  261. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  262. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  263. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  264. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  265. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  266. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  267. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
  268. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  269. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  270. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  271. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  272. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
  273. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  274. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  275. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  276. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  277. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  278. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
  279. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/tracker_contract.py +0 -0
  280. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/trailer_comment_labeler.py +0 -0
  281. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/versioning.py +0 -0
  282. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/work_orders.py +0 -0
  283. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower/workflow_actionlint.py +0 -0
  284. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/dependency_links.txt +0 -0
  285. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/entry_points.txt +0 -0
  286. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/requires.txt +0 -0
  287. {code_mower-1.1.0 → code_mower-1.1.2}/src/code_mower.egg-info/top_level.txt +0 -0
  288. {code_mower-1.1.0 → code_mower-1.1.2}/templates/builder-experiment.example.json +0 -0
  289. {code_mower-1.1.0 → code_mower-1.1.2}/templates/calibration-corpus.example.json +0 -0
  290. {code_mower-1.1.0 → code_mower-1.1.2}/templates/calibration-corpus.json +0 -0
  291. {code_mower-1.1.0 → code_mower-1.1.2}/templates/code-mower.yml.j2 +0 -0
  292. {code_mower-1.1.0 → code_mower-1.1.2}/templates/context-packs.example.json +0 -0
  293. {code_mower-1.1.0 → code_mower-1.1.2}/templates/cursor/BUGBOT.md +0 -0
  294. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/README.md +0 -0
  295. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/claude.md +0 -0
  296. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/codex.md +0 -0
  297. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/cursor.md +0 -0
  298. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/devin.md +0 -0
  299. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/generic.md +0 -0
  300. {code_mower-1.1.0 → code_mower-1.1.2}/templates/lanes/run_mac_lane.sh +0 -0
  301. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/acp_bridge.yml +0 -0
  302. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/aider.yml +0 -0
  303. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/antigravity_cli.yml +0 -0
  304. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/claude_audit.yml +0 -0
  305. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/claude_review.yml +0 -0
  306. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/coderabbit_cli.yml +0 -0
  307. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/codex.yml +0 -0
  308. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/cursor_bugbot.yml +0 -0
  309. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/cursor_cloud_agent.yml +0 -0
  310. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/devin.yml +0 -0
  311. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/devin_cli.yml +0 -0
  312. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/gemini_cli.yml +0 -0
  313. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/gitar.yml +0 -0
  314. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/greptile.yml +0 -0
  315. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/hermes_cli.yml +0 -0
  316. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/local_llm.yml +0 -0
  317. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/muse_cli.yml +0 -0
  318. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers/qodo.yml +0 -0
  319. {code_mower-1.1.0 → code_mower-1.1.2}/templates/providers.yml +0 -0
  320. {code_mower-1.1.0 → code_mower-1.1.2}/templates/reviewer-spend.example.json +0 -0
  321. {code_mower-1.1.0 → code_mower-1.1.2}/templates/reviewer-value-report.example.md +0 -0
  322. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  323. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  324. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  325. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  326. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  327. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/code-mower-gate.yml.j2 +0 -0
  328. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  329. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  330. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  331. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  332. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  333. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  334. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  335. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  336. {code_mower-1.1.0 → code_mower-1.1.2}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  337. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_adoption_diagnostics.py +0 -0
  338. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_adoption_result_semantics.py +0 -0
  339. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_adoption_run_contract.py +0 -0
  340. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_antigravity_cli_audit_pr.py +0 -0
  341. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_antigravity_sdk_probe.py +0 -0
  342. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_audit_comment_posture.py +0 -0
  343. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_audit_limits.py +0 -0
  344. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_builder_experiment.py +0 -0
  345. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_builder_identity.py +0 -0
  346. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_builder_runs.py +0 -0
  347. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_calibration_effect_report.py +0 -0
  348. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_calibration_truth.py +0 -0
  349. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_campaign_adapters.py +0 -0
  350. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_campaign_discovery.py +0 -0
  351. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_campaign_retry_evidence_711.py +0 -0
  352. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_checks.py +0 -0
  353. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_claude_audit_pr.py +0 -0
  354. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_claude_cli_bounce.py +0 -0
  355. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_clear_stale.py +0 -0
  356. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_client.py +0 -0
  357. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_git_metadata.py +0 -0
  358. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_manifest.py +0 -0
  359. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_cloud_reports.py +0 -0
  360. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  361. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_codex_audit_env_preflight.py +0 -0
  362. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_codex_audit_pr.py +0 -0
  363. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_controller.py +0 -0
  364. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_decision_audit_integration.py +0 -0
  365. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_decisions.py +0 -0
  366. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_api.py +0 -0
  367. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_builder_lane.py +0 -0
  368. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_devin_provider_contract.py +0 -0
  369. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_actions_cost_summary.py +0 -0
  370. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_actions_failure_selection.py +0 -0
  371. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_boundaries.py +0 -0
  372. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_campaign_auth.py +0 -0
  373. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_campaign_readiness.py +0 -0
  374. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_github_checks.py +0 -0
  375. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_output.py +0 -0
  376. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_privacy.py +0 -0
  377. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_env_required.py +0 -0
  378. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_env_tokens.py +0 -0
  379. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_local_audit_setup.py +0 -0
  380. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_probe.py +0 -0
  381. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_provider_review_hygiene.py +0 -0
  382. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_registry.py +0 -0
  383. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_runtime.py +0 -0
  384. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_self_hosted_runner.py +0 -0
  385. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_doctor_supervised_pilot.py +0 -0
  386. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_file_locks.py +0 -0
  387. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_fork_pr_guard.py +0 -0
  388. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_gate_automerge.py +0 -0
  389. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_gate_health.py +0 -0
  390. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_hosted_dispatch_profile.py +0 -0
  391. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_init_actionlint.py +0 -0
  392. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_init_build_loop.py +0 -0
  393. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_adoption.py +0 -0
  394. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_mutations.py +0 -0
  395. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_jira_pr_sync.py +0 -0
  396. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_lane_delivery_contract.py +0 -0
  397. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_lane_status.py +0 -0
  398. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_local_llm_github_helpers.py +0 -0
  399. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_migration_rehearsal.py +0 -0
  400. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_migration_setup_drift.py +0 -0
  401. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_next_steps.py +0 -0
  402. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_package_install_failure_taxonomy.py +0 -0
  403. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_participant_sessions.py +0 -0
  404. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_plan_context.py +0 -0
  405. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_pr_outcome_contract.py +0 -0
  406. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_pr_outcome_coverage.py +0 -0
  407. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_productivity_metrics_contract.py +0 -0
  408. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_productivity_report.py +0 -0
  409. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_productivity_windows.py +0 -0
  410. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_prompts.py +0 -0
  411. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_credentials.py +0 -0
  412. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_fixture_contracts.py +0 -0
  413. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_local_cli.py +0 -0
  414. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_comments.py +0 -0
  415. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_git.py +0 -0
  416. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_github_pr.py +0 -0
  417. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_pr_worktree.py +0 -0
  418. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_process.py +0 -0
  419. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_repo_paths.py +0 -0
  420. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_text_schema.py +0 -0
  421. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_provider_runners_workspace.py +0 -0
  422. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_release_qualify.py +0 -0
  423. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_reviewer_finding_outcome_contract.py +0 -0
  424. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_reviewer_metrics_core.py +0 -0
  425. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_reviewer_spend.py +0 -0
  426. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_supervised_pilot_contract.py +0 -0
  427. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_tracker_config.py +0 -0
  428. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_tracker_contract.py +0 -0
  429. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_trailer_comment_labeler.py +0 -0
  430. {code_mower-1.1.0 → code_mower-1.1.2}/tests/test_work_orders.py +0 -0
  431. {code_mower-1.1.0 → code_mower-1.1.2}/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.1.0
3
+ Version: 1.1.2
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
@@ -245,7 +245,7 @@ agent report its actual host posture, exact installed version, doctor result,
245
245
  Board URL, and any owner-only click-list before it mutates the repo.
246
246
 
247
247
  The current package-index announcement entry point is the tagged
248
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.0/docs/try-in-10-minutes.md)
248
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.2/docs/try-in-10-minutes.md)
249
249
  guide. The v1.0 supervised-pilot release includes the native Board, the
250
250
  controller dry-run and policy contract, adoption and upgrade hardening from
251
251
  recent install rehearsals, package-index release checks, provider-diversity
@@ -348,7 +348,7 @@ Provider-contract baseline for the next release train:
348
348
 
349
349
  For release verification,
350
350
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
351
- the package-index procedure for `v1.1.0` / `code-mower==1.1.0`. The
351
+ the package-index procedure for `v1.1.2` / `code-mower==1.1.2`. The
352
352
  GitHub release records the workflow and rehearsal evidence for the exact tag.
353
353
  After publication, [Release Qualification](docs/release-qualification.md)
354
354
  coordinates provider-specific install and operational checks without treating
@@ -542,8 +542,8 @@ measurement work.
542
542
 
543
543
  ## Installation Status
544
544
 
545
- The current package-index release baseline is `v1.1.0`, with pinned package
546
- install spec `code-mower==1.1.0`. Release evidence is recorded on the GitHub
545
+ The current package-index release baseline is `v1.1.2`, with pinned package
546
+ install spec `code-mower==1.1.2`. Release evidence is recorded on the GitHub
547
547
  release and in the first-user install rehearsal. The public repository is
548
548
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
549
549
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -629,6 +629,8 @@ first so local work exercises the same package entrypoint users install.
629
629
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
630
630
  - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
631
631
  - [v1.0.15 Release Notes](docs/v1015-release-notes.md)
632
+ - [v1.1.1 Release Notes](docs/v111-release-notes.md)
633
+ - [v1.1.2 Release Notes](docs/v112-release-notes.md)
632
634
  - [v1.1 Release Notes](docs/v11-release-notes.md)
633
635
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
634
636
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
@@ -215,7 +215,7 @@ agent report its actual host posture, exact installed version, doctor result,
215
215
  Board URL, and any owner-only click-list before it mutates the repo.
216
216
 
217
217
  The current package-index announcement entry point is the tagged
218
- [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.0/docs/try-in-10-minutes.md)
218
+ [Try Code Mower In 10 Minutes](https://github.com/codemower-ai/code-mower/blob/v1.1.2/docs/try-in-10-minutes.md)
219
219
  guide. The v1.0 supervised-pilot release includes the native Board, the
220
220
  controller dry-run and policy contract, adoption and upgrade hardening from
221
221
  recent install rehearsals, package-index release checks, provider-diversity
@@ -318,7 +318,7 @@ Provider-contract baseline for the next release train:
318
318
 
319
319
  For release verification,
320
320
  [First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
321
- the package-index procedure for `v1.1.0` / `code-mower==1.1.0`. The
321
+ the package-index procedure for `v1.1.2` / `code-mower==1.1.2`. The
322
322
  GitHub release records the workflow and rehearsal evidence for the exact tag.
323
323
  After publication, [Release Qualification](docs/release-qualification.md)
324
324
  coordinates provider-specific install and operational checks without treating
@@ -512,8 +512,8 @@ measurement work.
512
512
 
513
513
  ## Installation Status
514
514
 
515
- The current package-index release baseline is `v1.1.0`, with pinned package
516
- install spec `code-mower==1.1.0`. Release evidence is recorded on the GitHub
515
+ The current package-index release baseline is `v1.1.2`, with pinned package
516
+ install spec `code-mower==1.1.2`. Release evidence is recorded on the GitHub
517
517
  release and in the first-user install rehearsal. The public repository is
518
518
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
519
519
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -599,6 +599,8 @@ first so local work exercises the same package entrypoint users install.
599
599
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
600
600
  - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
601
601
  - [v1.0.15 Release Notes](docs/v1015-release-notes.md)
602
+ - [v1.1.1 Release Notes](docs/v111-release-notes.md)
603
+ - [v1.1.2 Release Notes](docs/v112-release-notes.md)
602
604
  - [v1.1 Release Notes](docs/v11-release-notes.md)
603
605
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
604
606
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-mower"
7
- version = "1.1.0"
7
+ version = "1.1.2"
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.1.0"
3
+ __version__ = "1.1.2"
@@ -604,8 +604,20 @@ def build_qualification_prompt(
604
604
  else "runtime_class is python_<major>.<minor>; provider and"
605
605
  ),
606
606
  "executor are lowercase safe identifiers; steps is a non-empty list of",
607
- "{id, status, elapsed_seconds, warning_count, owner_action_count} with",
608
- "id one of board, doctor, lanes_status, overhead, package_install or a namespaced",
607
+ "{id, status, elapsed_seconds, warning_count, owner_action_count} with an",
608
+ "optional failure_reason on a failed package_install step and nowhere else.",
609
+ "A failed package_install step must carry exactly one failure_reason:",
610
+ "network for connection or TLS failures (connection refused, timeout,",
611
+ "DNS, SSL or certificate validation), package_index for a missing version",
612
+ "or 404 from the package index, runtime for Python or dependency",
613
+ "incompatibility (unsupported Python version, missing module, conflicting",
614
+ "dependencies), sandbox_permission for permission, disk, or sandbox",
615
+ "denials (permission denied, disk full, read-only filesystem). Use",
616
+ "unknown only for a command that was actually attempted and cannot be",
617
+ "classified from local diagnostics. Report only the closed reason word;",
618
+ "never include raw output, logs, paths, commands, source, diffs,",
619
+ "transcripts, or secrets. Step id is",
620
+ "one of board, doctor, lanes_status, overhead, package_install or a namespaced",
609
621
  "<namespace>__<name> provider extension (both halves lowercase safe",
610
622
  "identifiers); any other id is rejected. Status is one of",
611
623
  "pass, fail, warn, unavailable, planned. A step with a",
@@ -599,6 +599,7 @@ def check_adoption_campaign_readiness(
599
599
  which_fn: Callable[[str], str | None] = shutil.which,
600
600
  command_runner: Any = None,
601
601
  auth_probe_runner: Any = None,
602
+ gh_auth_probe: Any = None,
602
603
  capability_runner: Any = None,
603
604
  token_dir: Path | None = None,
604
605
  providers: Sequence[str] = DEFAULT_CAMPAIGN_PROVIDERS,
@@ -606,7 +607,14 @@ def check_adoption_campaign_readiness(
606
607
  provider_profile: str = "",
607
608
  provider_config_dir: Path | None = None,
608
609
  ) -> tuple[DoctorCheck, ...]:
609
- """Validate release campaign readiness across configured providers and storage."""
610
+ """Validate release campaign readiness across configured providers and storage.
611
+
612
+ ``gh_auth_probe`` is the optional zero-argument GitHub credential probe the
613
+ campaign command uses (``release_campaigns.AuthProbe``). Supplied, a
614
+ GitHub-comment hosted lane with no token variable exported is credentialed
615
+ when `gh` is already authenticated, so this report and an actual dispatch
616
+ reach the same verdict; omitted, the verdict is environment-only.
617
+ """
610
618
  from code_mower import lane_status
611
619
  from code_mower.campaign_adapters import (
612
620
  check_antigravity_readiness,
@@ -959,6 +967,7 @@ def check_adoption_campaign_readiness(
959
967
  credential_file=provider_credential_file,
960
968
  profile=provider_profile,
961
969
  config_dir=provider_config_dir,
970
+ auth_probe=gh_auth_probe,
962
971
  )
963
972
  effective_env = current_env
964
973
 
@@ -980,6 +989,7 @@ def check_adoption_campaign_readiness(
980
989
  credential_file=provider_credential_file,
981
990
  profile=provider_profile,
982
991
  config_dir=provider_config_dir,
992
+ auth_probe=gh_auth_probe,
983
993
  )
984
994
  dispatch_blockers = hosted_dispatch_blockers(dispatch_profile)
985
995
  dispatch_summary = {
@@ -277,6 +277,8 @@ def run_doctor(
277
277
  )
278
278
 
279
279
  if adoption:
280
+ from code_mower import release_campaigns
281
+
280
282
  checks.extend(
281
283
  check_adoption_campaign_readiness(
282
284
  config=config,
@@ -286,6 +288,11 @@ def run_doctor(
286
288
  provider_credential_file=provider_credential_file,
287
289
  provider_profile=provider_profile,
288
290
  provider_config_dir=provider_config_dir,
291
+ # Report the same credential verdict the campaign command
292
+ # reaches: a GitHub-comment hosted lane dispatches through `gh`,
293
+ # so an authenticated CLI is credentials even with no token
294
+ # variable exported. Doctor and dispatch must not disagree.
295
+ gh_auth_probe=release_campaigns.run_gh_auth_probe,
289
296
  )
290
297
  )
291
298
 
@@ -83,16 +83,17 @@ MAX_ATTEMPTS = 4
83
83
  BACKOFF_BASE_SECONDS = 0.5
84
84
  BACKOFF_CAP_SECONDS = 8.0
85
85
  RETRY_AFTER_CAP_SECONDS = 60
86
- SEARCH_PAGE_SIZE = 100
86
+ SEARCH_PAGE_SIZE = 25
87
87
  SEARCH_MAX_ISSUES = 200
88
88
  #: Maximum enhanced-JQL page fetches per search call. This bound is
89
89
  #: independent of the count of collected usable issues so that empty or
90
90
  #: unusable pages with fresh continuation tokens cannot loop forever.
91
- SEARCH_MAX_PAGES = 20
91
+ SEARCH_MAX_PAGES = 40
92
92
  #: Create-metadata page size and maximum page fetches per discovery call.
93
93
  CREATEMETA_PAGE_SIZE = 50
94
94
  CREATEMETA_MAX_PAGES = 8
95
95
  MAX_REQUIRED_CREATE_FIELDS = 64
96
+ MAX_ISSUE_TYPES = 256
96
97
  KEYCHAIN_TIMEOUT_SECONDS = 10
97
98
  MAX_METADATA_VALUE_LENGTH = 128
98
99
  MAX_LABEL_LENGTH = 128
@@ -261,6 +262,21 @@ def _bounded_labels(value: Any) -> list[str]:
261
262
  return sorted(set(names))[:MAX_LABELS]
262
263
 
263
264
 
265
+ def _bounded_issue_types(value: Any) -> list[dict[str, str]]:
266
+ issue_types: list[dict[str, str]] = []
267
+ seen_ids: set[str] = set()
268
+ entries = value if isinstance(value, list) else []
269
+ for entry in entries:
270
+ if not isinstance(entry, Mapping):
271
+ continue
272
+ type_id = _bounded_str(entry.get("id"), 32)
273
+ if not type_id or not _TOKEN_ID_RE.fullmatch(type_id) or type_id in seen_ids:
274
+ continue
275
+ seen_ids.add(type_id)
276
+ issue_types.append({"id": type_id, "name": _bounded_str(entry.get("name"))})
277
+ return issue_types
278
+
279
+
264
280
  def default_keychain_runner(argv: Sequence[str], env: Mapping[str, str]) -> str:
265
281
  """Read one generic-password entry through the macOS ``security`` CLI.
266
282
 
@@ -1059,12 +1075,30 @@ class JiraReadClient:
1059
1075
  Follows bounded create-metadata pagination. Repeated or malformed
1060
1076
  pagination state fails closed instead of presenting a partial page
1061
1077
  as the exhaustive set. A response with no pagination keys is one
1062
- exhaustive page.
1078
+ exhaustive page. Jira sites that return 404 for create metadata fall
1079
+ back to the project issue-type endpoint; other failures remain visible.
1063
1080
  """
1064
1081
  if not _PROJECT_ID_RE.fullmatch(project_id):
1065
1082
  raise ValueError("project_id must be a bounded numeric id")
1066
1083
  quoted = urllib.parse.quote(project_id, safe="")
1067
1084
  path = f"/rest/api/3/issue/createmeta/{quoted}/issuetypes"
1085
+ try:
1086
+ return self._get_createmeta_issue_types(path)
1087
+ except JiraApiError as exc:
1088
+ if exc.code != "jira_not_found":
1089
+ raise
1090
+ raw_types = self.request_list(
1091
+ "GET",
1092
+ "/rest/api/3/issuetype/project",
1093
+ query={"projectId": project_id},
1094
+ endpoint="issueTypeProject",
1095
+ )
1096
+ if len(raw_types) > MAX_ISSUE_TYPES:
1097
+ raise JiraApiError("jira_unavailable", endpoint="issueTypeProject")
1098
+ return _bounded_issue_types(raw_types)
1099
+
1100
+ def _get_createmeta_issue_types(self, path: str) -> list[dict[str, str]]:
1101
+ """Read bounded create-metadata pages from one validated path."""
1068
1102
  issue_types: list[dict[str, str]] = []
1069
1103
  seen_ids: set[str] = set()
1070
1104
  start_at = 0
@@ -1082,18 +1116,10 @@ class JiraReadClient:
1082
1116
  raw_types = data.get("issueTypes")
1083
1117
  if not isinstance(raw_types, list):
1084
1118
  raise JiraApiError("jira_unavailable", endpoint="createMeta")
1085
- for entry in raw_types:
1086
- if not isinstance(entry, Mapping):
1087
- continue
1088
- type_id = _bounded_str(entry.get("id"), 32)
1089
- if not type_id or not _TOKEN_ID_RE.fullmatch(type_id):
1090
- continue
1091
- if type_id in seen_ids:
1092
- continue
1093
- seen_ids.add(type_id)
1094
- issue_types.append(
1095
- {"id": type_id, "name": _bounded_str(entry.get("name"))}
1096
- )
1119
+ for entry in _bounded_issue_types(raw_types):
1120
+ if entry["id"] not in seen_ids:
1121
+ seen_ids.add(entry["id"])
1122
+ issue_types.append(entry)
1097
1123
  if "total" not in data and "startAt" not in data:
1098
1124
  break
1099
1125
  total = _parse_createmeta_total(data, endpoint="createMeta")