code-mower 1.0.13__tar.gz → 1.0.15__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 (416) hide show
  1. {code_mower-1.0.13 → code_mower-1.0.15}/PKG-INFO +20 -5
  2. {code_mower-1.0.13 → code_mower-1.0.15}/README.md +19 -4
  3. {code_mower-1.0.13 → code_mower-1.0.15}/pyproject.toml +1 -1
  4. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/__init__.py +1 -1
  5. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud.py +131 -3
  6. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/__init__.py +58 -0
  7. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/bundle.py +1 -0
  8. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/events.py +165 -23
  9. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/export.py +13 -1
  10. code_mower-1.0.15/src/code_mower/cloud_client/finding_outcomes.py +205 -0
  11. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/operations.py +670 -11
  12. code_mower-1.0.15/src/code_mower/cloud_client/pr_outcomes.py +958 -0
  13. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/productivity.py +2 -0
  14. code_mower-1.0.15/src/code_mower/cloud_client/productivity_windows.py +720 -0
  15. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/devin_api.py +139 -19
  16. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor.py +20 -0
  17. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/adoption.py +162 -35
  18. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/runner.py +6 -0
  19. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_manifest.py +7 -0
  20. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/productivity_report.py +69 -11
  21. code_mower-1.0.15/src/code_mower/provider_credentials.py +568 -0
  22. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/release_campaigns.py +764 -145
  23. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/release_qualify.py +33 -0
  24. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/reviewer_spend.py +42 -5
  25. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/builder-provenance.yml.j2 +1 -1
  26. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/PKG-INFO +20 -5
  27. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/SOURCES.txt +7 -0
  28. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/builder-provenance.yml.j2 +1 -1
  29. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_campaign_retry_evidence_711.py +76 -0
  30. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_api.py +55 -0
  31. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_campaign_readiness.py +207 -0
  32. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_pr_outcome_contract.py +41 -0
  33. code_mower-1.0.15/tests/test_pr_outcome_coverage.py +3401 -0
  34. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_productivity_report.py +120 -2
  35. code_mower-1.0.15/tests/test_productivity_windows.py +1209 -0
  36. code_mower-1.0.15/tests/test_provider_credentials.py +864 -0
  37. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_release_campaigns.py +11588 -10287
  38. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_release_hygiene.py +48 -46
  39. code_mower-1.0.15/tests/test_reviewer_finding_outcome_contract.py +488 -0
  40. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_reviewer_spend.py +205 -0
  41. code_mower-1.0.13/src/code_mower/cloud_client/pr_outcomes.py +0 -160
  42. {code_mower-1.0.13 → code_mower-1.0.15}/CODE_OF_CONDUCT.md +0 -0
  43. {code_mower-1.0.13 → code_mower-1.0.15}/LICENSE +0 -0
  44. {code_mower-1.0.13 → code_mower-1.0.15}/MANIFEST.in +0 -0
  45. {code_mower-1.0.13 → code_mower-1.0.15}/NOTICE +0 -0
  46. {code_mower-1.0.13 → code_mower-1.0.15}/SUPPORT.md +0 -0
  47. {code_mower-1.0.13 → code_mower-1.0.15}/requirements/requirements.txt +0 -0
  48. {code_mower-1.0.13 → code_mower-1.0.15}/setup.cfg +0 -0
  49. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/__init__.py +0 -0
  50. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/_base.py +0 -0
  51. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/cursor_bugbot.py +0 -0
  52. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/gitar.py +0 -0
  53. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/greptile.py +0 -0
  54. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/adapters/qodo.py +0 -0
  55. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
  56. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/antigravity_sdk_probe.py +0 -0
  57. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_handoff_log.py +0 -0
  58. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_labeler_lib.py +0 -0
  59. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_limits.py +0 -0
  60. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/audit_progress.py +0 -0
  61. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/blind_review_artifacts.py +0 -0
  62. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/blind_review_coordinator.py +0 -0
  63. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/board.py +0 -0
  64. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/board_store.py +0 -0
  65. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/bootstrap.py +0 -0
  66. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/builder_experiment.py +0 -0
  67. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/builder_runs.py +0 -0
  68. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/__init__.py +0 -0
  69. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/arms.py +0 -0
  70. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/auto_discovery.py +0 -0
  71. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/commands.py +0 -0
  72. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/context_inputs.py +0 -0
  73. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/corpus.py +0 -0
  74. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/effect_report.py +0 -0
  75. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/evidence.py +0 -0
  76. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/evidence_report.py +0 -0
  77. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/identity.py +0 -0
  78. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/metrics.py +0 -0
  79. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/overlap.py +0 -0
  80. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/planning.py +0 -0
  81. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/policy.py +0 -0
  82. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/results.py +0 -0
  83. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/run_results.py +0 -0
  84. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/run_status.py +0 -0
  85. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/runner.py +0 -0
  86. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/truth.py +0 -0
  87. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/calibration/value_report.py +0 -0
  88. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/campaign_adapters.py +0 -0
  89. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/campaign_discovery.py +0 -0
  90. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/checks.py +0 -0
  91. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/claude_audit_pr.py +0 -0
  92. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/claude_cli_bounce.py +0 -0
  93. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/claude_cli_environment.py +0 -0
  94. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/clear_stale.py +0 -0
  95. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cli.py +0 -0
  96. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/adoption_runs.py +0 -0
  97. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/doctor.py +0 -0
  98. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/dogfood.py +0 -0
  99. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/endpoints.py +0 -0
  100. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/errors.py +0 -0
  101. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/git_metadata.py +0 -0
  102. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/manifest.py +0 -0
  103. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/reports.py +0 -0
  104. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/setup.py +0 -0
  105. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/tokens.py +0 -0
  106. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/upload.py +0 -0
  107. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/cloud_client/work_types.py +0 -0
  108. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_calibration.py +0 -0
  109. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_context_packs.py +0 -0
  110. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_merge.py +0 -0
  111. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/code_mower_telemetry.py +0 -0
  112. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
  113. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_env_preflight.py +0 -0
  114. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_pr.py +0 -0
  115. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_schema_smoke.py +0 -0
  116. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/codex_audit_verdict.schema.json +0 -0
  117. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/config.py +0 -0
  118. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/controller.py +0 -0
  119. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/decisions.py +0 -0
  120. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/devin_cli_audit_pr.py +0 -0
  121. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/__init__.py +0 -0
  122. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/audit_limits.py +0 -0
  123. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/campaign_auth.py +0 -0
  124. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/cloud.py +0 -0
  125. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/common.py +0 -0
  126. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github.py +0 -0
  127. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions.py +0 -0
  128. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
  129. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
  130. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
  131. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
  132. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
  133. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
  134. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
  135. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
  136. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_api.py +0 -0
  137. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_branch.py +0 -0
  138. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_config.py +0 -0
  139. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_human_token.py +0 -0
  140. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_provider.py +0 -0
  141. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_repo.py +0 -0
  142. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/github_trusted_authors.py +0 -0
  143. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/groups.py +0 -0
  144. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/models.py +0 -0
  145. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/output.py +0 -0
  146. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/presets.py +0 -0
  147. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/privacy.py +0 -0
  148. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
  149. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
  150. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
  151. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_env.py +0 -0
  152. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
  153. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
  154. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_audit_setup.py +0 -0
  155. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
  156. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
  157. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
  158. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe.py +0 -0
  159. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
  160. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
  161. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
  162. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
  163. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
  164. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/providers.py +0 -0
  165. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/registry.py +0 -0
  166. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/runtime.py +0 -0
  167. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
  168. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/self_hosted_runner.py +0 -0
  169. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/doctor_checks/supervised_pilot.py +0 -0
  170. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/file_locks.py +0 -0
  171. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/gate_health.py +0 -0
  172. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/gemini_cli_audit_pr.py +0 -0
  173. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/git_identity.py +0 -0
  174. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/grok_build_audit_pr.py +0 -0
  175. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/hermes_cli_audit_pr.py +0 -0
  176. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/init.py +0 -0
  177. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/__init__.py +0 -0
  178. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/aider.py +0 -0
  179. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
  180. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/claude.py +0 -0
  181. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/codex.py +0 -0
  182. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/devin.py +0 -0
  183. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/devin_cli.py +0 -0
  184. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/gemini_cli.py +0 -0
  185. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/grok_build.py +0 -0
  186. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/hermes_cli.py +0 -0
  187. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/local_llm.py +0 -0
  188. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_configs/muse_cli.py +0 -0
  189. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_delivery.py +0 -0
  190. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/lane_status.py +0 -0
  191. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_audit_pr.py +0 -0
  192. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_bakeoff.py +0 -0
  193. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_calibration.py +0 -0
  194. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/local_llm_profiles.py +0 -0
  195. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration.py +0 -0
  196. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_install.py +0 -0
  197. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_mirror.py +0 -0
  198. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_readiness.py +0 -0
  199. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/migration_rehearsal.py +0 -0
  200. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/muse_cli_audit_pr.py +0 -0
  201. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/next_steps.py +0 -0
  202. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package.py +0 -0
  203. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_content.py +0 -0
  204. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_paths.py +0 -0
  205. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_rendering.py +0 -0
  206. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/package_static.py +0 -0
  207. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/participants.py +0 -0
  208. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/plan_context.py +0 -0
  209. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/prompts.py +0 -0
  210. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_registry.py +0 -0
  211. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/__init__.py +0 -0
  212. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/comments.py +0 -0
  213. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/exit_codes.py +0 -0
  214. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/git.py +0 -0
  215. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/github_auth.py +0 -0
  216. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/github_pr.py +0 -0
  217. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/pr_worktree.py +0 -0
  218. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/process.py +0 -0
  219. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/repo_paths.py +0 -0
  220. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/text_schema.py +0 -0
  221. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
  222. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/provider_runners/workspace.py +0 -0
  223. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/providers/__init__.py +0 -0
  224. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/providers/local_cli.py +0 -0
  225. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/providers/provenance.py +0 -0
  226. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/release_readiness.py +0 -0
  227. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/reviewer_metrics.py +0 -0
  228. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/saas_reviewer_labeler.py +0 -0
  229. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/secrets.py +0 -0
  230. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/session.py +0 -0
  231. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/builder-experiment.example.json +0 -0
  232. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/calibration-corpus.example.json +0 -0
  233. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/calibration-corpus.json +0 -0
  234. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/code-mower.example.yml +0 -0
  235. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/context-packs.example.json +0 -0
  236. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
  237. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
  238. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
  239. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
  240. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
  241. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/operability.md +0 -0
  242. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
  243. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/plan-conformance.md +0 -0
  244. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
  245. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/README.md +0 -0
  246. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/claude.md +0 -0
  247. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/codex.md +0 -0
  248. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/cursor.md +0 -0
  249. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/devin.md +0 -0
  250. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/generic.md +0 -0
  251. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/lanes/run_mac_lane.sh +0 -0
  252. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/code_mower +0 -0
  253. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
  254. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
  255. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
  256. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
  257. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/run_devin_cli_audit_pr.sh +0 -0
  258. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
  259. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/product-support/status_report.py +0 -0
  260. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/providers.yml +0 -0
  261. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/reviewer-spend.example.json +0 -0
  262. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
  263. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  264. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  265. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  266. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  267. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/code-mower-gate.yml.j2 +0 -0
  268. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  269. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
  270. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  271. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
  272. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/needs-owner-notify.yml.j2 +0 -0
  273. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  274. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
  275. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  276. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  277. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  278. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/templates/workflows/weekly-status.yml.j2 +0 -0
  279. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/trailer_comment_labeler.py +0 -0
  280. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/versioning.py +0 -0
  281. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/work_orders.py +0 -0
  282. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower/workflow_actionlint.py +0 -0
  283. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/dependency_links.txt +0 -0
  284. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/entry_points.txt +0 -0
  285. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/requires.txt +0 -0
  286. {code_mower-1.0.13 → code_mower-1.0.15}/src/code_mower.egg-info/top_level.txt +0 -0
  287. {code_mower-1.0.13 → code_mower-1.0.15}/templates/builder-experiment.example.json +0 -0
  288. {code_mower-1.0.13 → code_mower-1.0.15}/templates/calibration-corpus.example.json +0 -0
  289. {code_mower-1.0.13 → code_mower-1.0.15}/templates/calibration-corpus.json +0 -0
  290. {code_mower-1.0.13 → code_mower-1.0.15}/templates/code-mower.yml.j2 +0 -0
  291. {code_mower-1.0.13 → code_mower-1.0.15}/templates/context-packs.example.json +0 -0
  292. {code_mower-1.0.13 → code_mower-1.0.15}/templates/cursor/BUGBOT.md +0 -0
  293. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/README.md +0 -0
  294. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/claude.md +0 -0
  295. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/codex.md +0 -0
  296. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/cursor.md +0 -0
  297. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/devin.md +0 -0
  298. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/generic.md +0 -0
  299. {code_mower-1.0.13 → code_mower-1.0.15}/templates/lanes/run_mac_lane.sh +0 -0
  300. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/acp_bridge.yml +0 -0
  301. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/aider.yml +0 -0
  302. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/antigravity_cli.yml +0 -0
  303. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/claude_audit.yml +0 -0
  304. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/claude_review.yml +0 -0
  305. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/coderabbit_cli.yml +0 -0
  306. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/codex.yml +0 -0
  307. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/cursor_bugbot.yml +0 -0
  308. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/cursor_cloud_agent.yml +0 -0
  309. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/devin.yml +0 -0
  310. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/devin_cli.yml +0 -0
  311. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/gemini_cli.yml +0 -0
  312. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/gitar.yml +0 -0
  313. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/greptile.yml +0 -0
  314. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/hermes_cli.yml +0 -0
  315. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/local_llm.yml +0 -0
  316. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/muse_cli.yml +0 -0
  317. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers/qodo.yml +0 -0
  318. {code_mower-1.0.13 → code_mower-1.0.15}/templates/providers.yml +0 -0
  319. {code_mower-1.0.13 → code_mower-1.0.15}/templates/reviewer-spend.example.json +0 -0
  320. {code_mower-1.0.13 → code_mower-1.0.15}/templates/reviewer-value-report.example.md +0 -0
  321. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
  322. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
  323. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-agent-pr-labeler.yml.j2 +0 -0
  324. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-fix-round-dispatch.yml.j2 +0 -0
  325. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-gate-health.yml.j2 +0 -0
  326. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/code-mower-gate.yml.j2 +0 -0
  327. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/dispatch-lanes.yml.j2 +0 -0
  328. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/hosted-bridge.yml.j2 +0 -0
  329. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/lane-mac-runner.yml.j2 +0 -0
  330. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/local-cli-audit.yml.j2 +0 -0
  331. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
  332. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/review-clear-stale.yml.j2 +0 -0
  333. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
  334. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/self-hosted-local-audit.yml.j2 +0 -0
  335. {code_mower-1.0.13 → code_mower-1.0.15}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
  336. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_adoption_diagnostics.py +0 -0
  337. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_adoption_result_semantics.py +0 -0
  338. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_adoption_run_contract.py +0 -0
  339. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_antigravity_sdk_probe.py +0 -0
  340. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_audit_comment_posture.py +0 -0
  341. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_audit_limits.py +0 -0
  342. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_board.py +0 -0
  343. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_builder_experiment.py +0 -0
  344. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_builder_identity.py +0 -0
  345. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_builder_runs.py +0 -0
  346. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_calibration_effect_report.py +0 -0
  347. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_calibration_truth.py +0 -0
  348. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_campaign_adapters.py +0 -0
  349. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_campaign_discovery.py +0 -0
  350. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_checks.py +0 -0
  351. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_claude_audit_pr.py +0 -0
  352. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_claude_cli_bounce.py +0 -0
  353. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_clear_stale.py +0 -0
  354. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_client.py +0 -0
  355. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_git_metadata.py +0 -0
  356. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_manifest.py +0 -0
  357. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_cloud_reports.py +0 -0
  358. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_coderabbit_cli_audit_pr.py +0 -0
  359. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_codex_audit_env_preflight.py +0 -0
  360. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_codex_audit_pr.py +0 -0
  361. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_controller.py +0 -0
  362. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_decision_audit_integration.py +0 -0
  363. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_decisions.py +0 -0
  364. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_builder_lane.py +0 -0
  365. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_cli_audit_pr.py +0 -0
  366. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_devin_provider_contract.py +0 -0
  367. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_actions_cost_summary.py +0 -0
  368. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_actions_failure_selection.py +0 -0
  369. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_boundaries.py +0 -0
  370. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_campaign_auth.py +0 -0
  371. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_github_checks.py +0 -0
  372. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_output.py +0 -0
  373. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_privacy.py +0 -0
  374. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_env_required.py +0 -0
  375. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_env_tokens.py +0 -0
  376. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_local_audit_setup.py +0 -0
  377. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_probe.py +0 -0
  378. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_provider_review_hygiene.py +0 -0
  379. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_registry.py +0 -0
  380. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_runtime.py +0 -0
  381. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_self_hosted_runner.py +0 -0
  382. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_doctor_supervised_pilot.py +0 -0
  383. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_file_locks.py +0 -0
  384. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_fork_pr_guard.py +0 -0
  385. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_gate_automerge.py +0 -0
  386. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_gate_health.py +0 -0
  387. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_hosted_dispatch_profile.py +0 -0
  388. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_init_actionlint.py +0 -0
  389. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_init_build_loop.py +0 -0
  390. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_lane_delivery_contract.py +0 -0
  391. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_lane_status.py +0 -0
  392. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_local_llm_github_helpers.py +0 -0
  393. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_migration_rehearsal.py +0 -0
  394. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_migration_setup_drift.py +0 -0
  395. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_next_steps.py +0 -0
  396. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_package_install_failure_taxonomy.py +0 -0
  397. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_participant_sessions.py +0 -0
  398. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_plan_context.py +0 -0
  399. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_productivity_metrics_contract.py +0 -0
  400. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_prompts.py +0 -0
  401. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_fixture_contracts.py +0 -0
  402. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_local_cli.py +0 -0
  403. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_comments.py +0 -0
  404. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_git.py +0 -0
  405. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_github_pr.py +0 -0
  406. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_pr_worktree.py +0 -0
  407. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_process.py +0 -0
  408. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_repo_paths.py +0 -0
  409. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_text_schema.py +0 -0
  410. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_provider_runners_workspace.py +0 -0
  411. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_release_qualify.py +0 -0
  412. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_reviewer_metrics_core.py +0 -0
  413. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_supervised_pilot_contract.py +0 -0
  414. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_trailer_comment_labeler.py +0 -0
  415. {code_mower-1.0.13 → code_mower-1.0.15}/tests/test_work_orders.py +0 -0
  416. {code_mower-1.0.13 → code_mower-1.0.15}/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.15
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.15/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,19 @@ 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.
309
+ The v1.0.15 release makes measurement and release operations more trustworthy:
310
+ productivity reports prefer live GitHub current state while retaining clearly
311
+ labeled historical Board observations, release campaigns can discover trusted
312
+ results on their explicitly linked release PR, provider credentials survive
313
+ restarts through fail-closed profiles, and new metadata-only contracts cover
314
+ reviewer finding outcomes, normalized productivity windows, and PR cost
315
+ coverage.
303
316
  Package-only users can start from the public package rather than a source
304
317
  checkout.
305
318
 
@@ -332,7 +345,7 @@ Provider-contract baseline for the next release train:
332
345
 
333
346
  For release verification,
334
347
  [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
348
+ the package-index procedure for `v1.0.15` / `code-mower==1.0.15`. The
336
349
  GitHub release records the workflow and rehearsal evidence for the exact tag.
337
350
  After publication, [Release Qualification](docs/release-qualification.md)
338
351
  coordinates provider-specific install and operational checks without treating
@@ -526,8 +539,8 @@ measurement work.
526
539
 
527
540
  ## Installation Status
528
541
 
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
542
+ The current package-index release baseline is `v1.0.15`, with pinned package
543
+ install spec `code-mower==1.0.15`. Release evidence is recorded on the GitHub
531
544
  release and in the first-user install rehearsal. The public repository is
532
545
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
533
546
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -609,6 +622,8 @@ first so local work exercises the same package entrypoint users install.
609
622
  - [v1.0.11 Release Notes](docs/v1011-release-notes.md)
610
623
  - [v1.0.12 Release Notes](docs/v1012-release-notes.md)
611
624
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
625
+ - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
626
+ - [v1.0.15 Release Notes](docs/v1015-release-notes.md)
612
627
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
613
628
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
614
629
  - [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.15/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,19 @@ 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.
279
+ The v1.0.15 release makes measurement and release operations more trustworthy:
280
+ productivity reports prefer live GitHub current state while retaining clearly
281
+ labeled historical Board observations, release campaigns can discover trusted
282
+ results on their explicitly linked release PR, provider credentials survive
283
+ restarts through fail-closed profiles, and new metadata-only contracts cover
284
+ reviewer finding outcomes, normalized productivity windows, and PR cost
285
+ coverage.
273
286
  Package-only users can start from the public package rather than a source
274
287
  checkout.
275
288
 
@@ -302,7 +315,7 @@ Provider-contract baseline for the next release train:
302
315
 
303
316
  For release verification,
304
317
  [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
318
+ the package-index procedure for `v1.0.15` / `code-mower==1.0.15`. The
306
319
  GitHub release records the workflow and rehearsal evidence for the exact tag.
307
320
  After publication, [Release Qualification](docs/release-qualification.md)
308
321
  coordinates provider-specific install and operational checks without treating
@@ -496,8 +509,8 @@ measurement work.
496
509
 
497
510
  ## Installation Status
498
511
 
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
512
+ The current package-index release baseline is `v1.0.15`, with pinned package
513
+ install spec `code-mower==1.0.15`. Release evidence is recorded on the GitHub
501
514
  release and in the first-user install rehearsal. The public repository is
502
515
  [codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), and
503
516
  GitHub releases remain the auditable source for tags, build artifacts, and
@@ -579,6 +592,8 @@ first so local work exercises the same package entrypoint users install.
579
592
  - [v1.0.11 Release Notes](docs/v1011-release-notes.md)
580
593
  - [v1.0.12 Release Notes](docs/v1012-release-notes.md)
581
594
  - [v1.0.13 Release Notes](docs/v1013-release-notes.md)
595
+ - [v1.0.14 Release Notes](docs/v1014-release-notes.md)
596
+ - [v1.0.15 Release Notes](docs/v1015-release-notes.md)
582
597
  - [Post-v0.8 Effectiveness Assessment](docs/post-v08-effectiveness-assessment.md)
583
598
  - [v1.0.1 Effectiveness Assessment](docs/v101-effectiveness-assessment.md)
584
599
  - [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.15"
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.15"
@@ -32,6 +32,7 @@ if __package__ in {None, ""}:
32
32
  default_setup_path as _default_setup_path,
33
33
  build_upload_payload,
34
34
  default_dogfood_reports as _default_dogfood_reports,
35
+ detect_repo_slug as _detect_repo_slug,
35
36
  dogfood_upload as _dogfood_upload,
36
37
  event_id_from_github_run as _event_id_from_github_run,
37
38
  is_local_http_endpoint,
@@ -50,6 +51,7 @@ if __package__ in {None, ""}:
50
51
  repo_slug_from_remote as _repo_slug_from_remote,
51
52
  repo_sync_output_name as _repo_sync_output_name,
52
53
  repo_sync_upload as _repo_sync_upload,
54
+ pr_outcomes_upload as _pr_outcomes_upload,
53
55
  resolve_setup_token as _resolve_setup_token,
54
56
  reviewer_runs_upload as _reviewer_runs_upload,
55
57
  run_cloud_doctor,
@@ -86,6 +88,7 @@ else: # pragma: no cover - exercised after package extraction.
86
88
  default_setup_path as _default_setup_path,
87
89
  build_upload_payload,
88
90
  default_dogfood_reports as _default_dogfood_reports,
91
+ detect_repo_slug as _detect_repo_slug,
89
92
  dogfood_upload as _dogfood_upload,
90
93
  event_id_from_github_run as _event_id_from_github_run,
91
94
  is_local_http_endpoint,
@@ -104,6 +107,7 @@ else: # pragma: no cover - exercised after package extraction.
104
107
  repo_slug_from_remote as _repo_slug_from_remote,
105
108
  repo_sync_output_name as _repo_sync_output_name,
106
109
  repo_sync_upload as _repo_sync_upload,
110
+ pr_outcomes_upload as _pr_outcomes_upload,
107
111
  resolve_setup_token as _resolve_setup_token,
108
112
  reviewer_runs_upload as _reviewer_runs_upload,
109
113
  run_cloud_doctor,
@@ -125,6 +129,7 @@ DEFAULT_OUTPUT_DIR = ".code-mower/cloud-benchmark-bundle"
125
129
  DEFAULT_CATCH_UP_OUTPUT_DIR = ".code-mower/cloud-catch-up-bundle"
126
130
  DEFAULT_REVIEWER_RUNS_OUTPUT_DIR = ".code-mower/reviewer-run-bundle"
127
131
  DEFAULT_REPO_SYNC_OUTPUT_DIR = ".code-mower/cloud-repo-sync"
132
+ DEFAULT_PR_OUTCOMES_OUTPUT_DIR = ".code-mower/cloud-pr-outcomes-bundle"
128
133
  DEFAULT_BOARD_SNAPSHOT_OUTPUT_DIR = ".code-mower/cloud-board-snapshot-bundle"
129
134
 
130
135
  # Keep the legacy cloud.py import surface intentional while implementation
@@ -143,6 +148,7 @@ __all__ = [
143
148
  "DEFAULT_CATCH_UP_OUTPUT_DIR",
144
149
  "DEFAULT_REVIEWER_RUNS_OUTPUT_DIR",
145
150
  "DEFAULT_REPO_SYNC_OUTPUT_DIR",
151
+ "DEFAULT_PR_OUTCOMES_OUTPUT_DIR",
146
152
  "DEFAULT_BOARD_SNAPSHOT_OUTPUT_DIR",
147
153
  "build_cloud_bundle",
148
154
  "build_upload_payload",
@@ -170,6 +176,7 @@ __all__ = [
170
176
  "_repo_slug_from_remote",
171
177
  "_repo_sync_output_name",
172
178
  "_repo_sync_upload",
179
+ "_pr_outcomes_upload",
173
180
  "_resolve_setup_token",
174
181
  "_reviewer_runs_upload",
175
182
  "_run_git",
@@ -468,6 +475,57 @@ def main(argv: list[str] | None = None) -> int:
468
475
  )
469
476
  catch_up.add_argument("--timeout", type=float, default=20.0)
470
477
  catch_up.add_argument("--json", action="store_true")
478
+ pr_outcomes = subparsers.add_parser("pr-outcomes")
479
+ pr_outcomes.add_argument("--repo-path", type=Path, default=Path.cwd())
480
+ pr_outcomes.add_argument(
481
+ "--output-dir",
482
+ type=Path,
483
+ default=Path(DEFAULT_PR_OUTCOMES_OUTPUT_DIR),
484
+ )
485
+ pr_outcomes.add_argument("--repo-slug", default="")
486
+ pr_outcomes.add_argument("--team-id", default="")
487
+ pr_outcomes.add_argument("--install-id", default="")
488
+ pr_outcomes.add_argument("--source", default="code-mower-pr-outcomes")
489
+ pr_outcomes.add_argument(
490
+ "--limit",
491
+ type=int,
492
+ default=MAX_EVENT_COUNT,
493
+ help=f"number of PRs to include; max {MAX_EVENT_COUNT}",
494
+ )
495
+ pr_outcomes.add_argument(
496
+ "--spend",
497
+ type=Path,
498
+ default=None,
499
+ help=(
500
+ "reviewer spend ledger to merge into coverage; defaults to "
501
+ ".code-mower/reviewer-spend.json when present"
502
+ ),
503
+ )
504
+ pr_outcomes.add_argument(
505
+ "--endpoint",
506
+ default=os.environ.get("CODE_MOWER_CLOUD_ENDPOINT", DEFAULT_UPLOAD_ENDPOINT),
507
+ )
508
+ pr_outcomes.add_argument("--token-env", default=DEFAULT_TOKEN_ENV)
509
+ pr_outcomes.add_argument(
510
+ "--token-file",
511
+ type=Path,
512
+ default=None,
513
+ help="token env file or raw token file to use when token env is not set",
514
+ )
515
+ pr_outcomes.add_argument(
516
+ "--token-dir",
517
+ type=Path,
518
+ default=None,
519
+ help="directory with Code Mower Cloud token profiles",
520
+ )
521
+ pr_outcomes.add_argument(
522
+ "--yes",
523
+ action="store_true",
524
+ help="perform the network upload; without this, pr-outcomes is a dry run",
525
+ )
526
+ pr_outcomes.add_argument("--timeout", type=float, default=20.0)
527
+ pr_outcomes.add_argument("--json", action="store_true")
528
+
471
529
  board_snapshot = subparsers.add_parser("board-snapshot")
472
530
  board_snapshot.add_argument("--repo-path", type=Path, default=Path.cwd())
473
531
  board_snapshot.add_argument(
@@ -604,10 +662,21 @@ def main(argv: list[str] | None = None) -> int:
604
662
  repo_sync.add_argument(
605
663
  "--mode",
606
664
  action="append",
607
- choices=("dogfood", "catch-up", "reviewer-runs"),
665
+ choices=("dogfood", "catch-up", "reviewer-runs", "pr-outcomes"),
608
666
  default=[],
609
667
  help="sync mode to run; repeatable, defaults to dogfood and reviewer-runs",
610
668
  )
669
+ repo_sync.add_argument(
670
+ "--event",
671
+ action="append",
672
+ default=[],
673
+ metavar="EVENT_TYPE=PATH",
674
+ help=(
675
+ "include structured benchmark events from JSON/JSONL in each repo's "
676
+ "dogfood step; productivity_summary entries also accept "
677
+ "code_mower.productivityWindow.v1 window observations"
678
+ ),
679
+ )
611
680
  repo_sync.add_argument(
612
681
  "--output-dir",
613
682
  type=Path,
@@ -685,7 +754,12 @@ def main(argv: list[str] | None = None) -> int:
685
754
  return 0
686
755
  if args.command == "export":
687
756
  events = [
688
- *_parse_event_args(args.event),
757
+ *_parse_event_args(
758
+ args.event,
759
+ repo_slug=args.repo_slug,
760
+ team_id=args.team_id,
761
+ install_id=args.install_id,
762
+ ),
689
763
  *_spend_events(
690
764
  args.spend,
691
765
  repo_slug=args.repo_slug,
@@ -781,11 +855,23 @@ def main(argv: list[str] | None = None) -> int:
781
855
  print(render_cloud_doctor_text(report), end="")
782
856
  return 1 if report["failures"] else 0
783
857
  if args.command == "dogfood":
858
+ # Resolve the slug before loading window events so a slugless
859
+ # observation is filled from --repo-slug or the detected repo,
860
+ # exactly as dogfood_upload and repo-sync resolve it below.
861
+ dogfood_repo_slug = args.repo_slug or _detect_repo_slug(
862
+ args.repo_path.expanduser().resolve()
863
+ )
784
864
  result = _dogfood_upload(
785
865
  repo_path=args.repo_path,
786
866
  output_dir=args.output_dir,
787
867
  reports=_parse_report_args(args.report),
788
- events=_parse_event_args(args.event),
868
+ events=_parse_event_args(
869
+ args.event,
870
+ repo_slug=dogfood_repo_slug,
871
+ team_id=args.team_id,
872
+ install_id=args.install_id,
873
+ source=args.source,
874
+ ),
789
875
  spend_path=args.spend,
790
876
  repo_slug=args.repo_slug,
791
877
  team_id=args.team_id,
@@ -920,6 +1006,40 @@ def main(argv: list[str] | None = None) -> int:
920
1006
  elif result["status"] == "dry_run":
921
1007
  print("Network: skipped (pass --yes to upload)")
922
1008
  return 1 if result["status"] == "doctor_failed" else 0
1009
+ if args.command == "pr-outcomes":
1010
+ result = _pr_outcomes_upload(
1011
+ repo_path=args.repo_path,
1012
+ output_dir=args.output_dir,
1013
+ repo_slug=args.repo_slug,
1014
+ team_id=args.team_id,
1015
+ install_id=args.install_id,
1016
+ source=args.source,
1017
+ limit=args.limit,
1018
+ endpoint=args.endpoint,
1019
+ token_env=args.token_env,
1020
+ token_file=args.token_file,
1021
+ token_dir=args.token_dir,
1022
+ yes=args.yes,
1023
+ timeout=args.timeout,
1024
+ spend_path=args.spend,
1025
+ )
1026
+ if args.json:
1027
+ print(json.dumps(result, indent=2, sort_keys=True))
1028
+ else:
1029
+ print("Code Mower cloud PR outcomes")
1030
+ print(f"Status: {result['status']}")
1031
+ print(f"Repository: {result['repo_slug']}")
1032
+ print(f"PRs examined: {result.get('pr_count', 0)}")
1033
+ print(f"Events: {result['event_count']}")
1034
+ if result["status"] == "uploaded":
1035
+ print(f"Upload status: {result['upload']['status']}")
1036
+ elif result["status"] == "dry_run":
1037
+ print("Network: skipped (pass --yes to upload)")
1038
+ errors = result.get("errors") or []
1039
+ if errors:
1040
+ print(f"Validation errors: {len(errors)}")
1041
+ return 1 if result["status"] == "doctor_failed" else 0
1042
+
923
1043
  if args.command == "repo-sync":
924
1044
  result = _repo_sync_upload(
925
1045
  repo_specs=args.repo,
@@ -937,6 +1057,7 @@ def main(argv: list[str] | None = None) -> int:
937
1057
  include_git_ref=args.include_git_ref,
938
1058
  yes=args.yes,
939
1059
  timeout=args.timeout,
1060
+ events=args.event,
940
1061
  )
941
1062
  if args.json:
942
1063
  print(json.dumps(result, indent=2, sort_keys=True))
@@ -951,6 +1072,7 @@ def main(argv: list[str] | None = None) -> int:
951
1072
  current = summary.get("current_dogfood", {})
952
1073
  history = summary.get("imported_history", {})
953
1074
  reviewer = summary.get("reviewer_evidence", {})
1075
+ baseline = summary.get("productivity_baseline", {})
954
1076
  print(
955
1077
  "Current dogfood: "
956
1078
  f"{current.get('steps', 0)} steps, "
@@ -967,6 +1089,12 @@ def main(argv: list[str] | None = None) -> int:
967
1089
  f"{reviewer.get('steps', 0)} steps, "
968
1090
  f"{reviewer.get('events', 0)} events"
969
1091
  )
1092
+ print(
1093
+ "Productivity baseline: "
1094
+ f"{baseline.get('steps', 0)} steps, "
1095
+ f"{baseline.get('events', 0)} events "
1096
+ "(correlation only, no causal claims)"
1097
+ )
970
1098
  guidance = (
971
1099
  history.get("trust_guidance", {})
972
1100
  if isinstance(history, dict)
@@ -64,6 +64,8 @@ from .doctor import (
64
64
  from .events import (
65
65
  EVENT_SCHEMA,
66
66
  GITHUB_RUN_LIST_FIELDS,
67
+ GITHUB_PR_LIST_FIELDS,
68
+ artifact_event_from_dict,
67
69
  build_board_snapshot_event,
68
70
  build_dogfood_event,
69
71
  build_provider_catalog_snapshot_events,
@@ -72,6 +74,8 @@ from .events import (
72
74
  load_event_file,
73
75
  normalize_event,
74
76
  parse_event_args,
77
+ parse_event_file_candidates,
78
+ run_gh_pr_list,
75
79
  run_gh_run_list,
76
80
  safe_event_type,
77
81
  safe_kind,
@@ -89,12 +93,15 @@ from .manifest import (
89
93
  )
90
94
  from .reports import included_report_payloads
91
95
  from .operations import (
96
+ PRODUCTIVITY_BASELINE_TRUST_GUIDANCE,
92
97
  board_snapshot_upload,
93
98
  catch_up_upload,
94
99
  dogfood_upload,
95
100
  parse_repo_sync_spec,
101
+ pr_outcomes_upload,
96
102
  repo_sync_output_name,
97
103
  repo_sync_upload,
104
+ repo_sync_window_events,
98
105
  reviewer_runs_upload,
99
106
  )
100
107
  from .errors import CloudBundleError
@@ -138,6 +145,23 @@ from .productivity import (
138
145
  PRODUCTIVITY_WINDOW_GRANULARITIES,
139
146
  validate_productivity_summary_payload,
140
147
  )
148
+ from .productivity_windows import (
149
+ COMPARISON_BASIS_VALUES,
150
+ PRODUCTIVITY_WINDOW_DIMENSION,
151
+ PRODUCTIVITY_WINDOW_INPUT_SCHEMA,
152
+ TIMING_PROVENANCE_VALUES,
153
+ WINDOW_COUNT_FIELDS,
154
+ WINDOW_SUBJECTS,
155
+ WINDOW_TIMING_FIELDS,
156
+ count_normalized_productivity_window_events,
157
+ is_normalized_productivity_window_event,
158
+ load_productivity_window_events,
159
+ normalize_window_observation,
160
+ productivity_window_event_from_dict,
161
+ productivity_window_event_id,
162
+ productivity_window_to_event,
163
+ validate_productivity_window_event,
164
+ )
141
165
  from .pr_outcomes import (
142
166
  PR_COST_COVERAGE_VALUES,
143
167
  PR_OUTCOME_COST_METRICS,
@@ -146,6 +170,12 @@ from .pr_outcomes import (
146
170
  PR_OUTCOME_EVENT_TYPE,
147
171
  PR_OUTCOME_SCHEMA,
148
172
  PR_OUTCOME_VALUES,
173
+ build_pr_outcome_event,
174
+ load_pr_outcome_observations,
175
+ max_source_freshness,
176
+ pr_outcome_observation_key,
177
+ pr_outcome_observation_record,
178
+ save_pr_outcome_observations,
149
179
  validate_pr_outcome_payload,
150
180
  )
151
181
  from .upload import (
@@ -186,15 +216,22 @@ __all__ = [
186
216
  "DEFAULT_DOGFOOD_REPORTS",
187
217
  "MAX_EVENT_COUNT",
188
218
  "MAX_REPORT_UPLOAD_BYTES",
219
+ "COMPARISON_BASIS_VALUES",
189
220
  "PRODUCTIVITY_AGGREGATION_SUBJECTS",
190
221
  "PRODUCTIVITY_COUNT_METRICS",
191
222
  "PRODUCTIVITY_EVENT_TYPE",
223
+ "PRODUCTIVITY_WINDOW_DIMENSION",
224
+ "PRODUCTIVITY_WINDOW_INPUT_SCHEMA",
192
225
  "PRODUCTIVITY_METRIC_UNITS",
193
226
  "PRODUCTIVITY_METRICS_SCHEMA",
194
227
  "PRODUCTIVITY_REQUIRED_DIMENSIONS",
195
228
  "PRODUCTIVITY_TIME_METRICS",
196
229
  "PRODUCTIVITY_TOKEN_METRICS",
197
230
  "PRODUCTIVITY_WINDOW_GRANULARITIES",
231
+ "TIMING_PROVENANCE_VALUES",
232
+ "WINDOW_COUNT_FIELDS",
233
+ "WINDOW_SUBJECTS",
234
+ "WINDOW_TIMING_FIELDS",
198
235
  "PR_COST_COVERAGE_VALUES",
199
236
  "PR_OUTCOME_COST_METRICS",
200
237
  "PR_OUTCOME_COUNT_METRICS",
@@ -202,6 +239,12 @@ __all__ = [
202
239
  "PR_OUTCOME_EVENT_TYPE",
203
240
  "PR_OUTCOME_SCHEMA",
204
241
  "PR_OUTCOME_VALUES",
242
+ "build_pr_outcome_event",
243
+ "load_pr_outcome_observations",
244
+ "max_source_freshness",
245
+ "pr_outcome_observation_key",
246
+ "pr_outcome_observation_record",
247
+ "save_pr_outcome_observations",
205
248
  "WORK_TYPE_SCHEMA",
206
249
  "WORK_TYPE_SUPPORTED_EVENT_TYPES",
207
250
  "WORK_TYPE_VALUES",
@@ -220,13 +263,23 @@ __all__ = [
220
263
  "DogfoodPlan",
221
264
  "EVENT_SCHEMA",
222
265
  "GITHUB_RUN_LIST_FIELDS",
266
+ "GITHUB_PR_LIST_FIELDS",
223
267
  "adoption_event_from_result_dict",
224
268
  "adoption_result_to_event",
269
+ "artifact_event_from_dict",
225
270
  "build_dogfood_event",
226
271
  "build_dogfood_dry_run_preview",
227
272
  "build_dogfood_plan",
228
273
  "build_provider_catalog_snapshot_events",
229
274
  "build_workflow_run_event",
275
+ "count_normalized_productivity_window_events",
276
+ "is_normalized_productivity_window_event",
277
+ "load_productivity_window_events",
278
+ "normalize_window_observation",
279
+ "productivity_window_event_from_dict",
280
+ "productivity_window_event_id",
281
+ "productivity_window_to_event",
282
+ "validate_productivity_window_event",
230
283
  "build_cloud_bundle",
231
284
  "build_event_upload_payload",
232
285
  "build_upload_payload",
@@ -235,6 +288,7 @@ __all__ = [
235
288
  "build_provenance_summary",
236
289
  "board_snapshot_upload",
237
290
  "catch_up_upload",
291
+ "PRODUCTIVITY_BASELINE_TRUST_GUIDANCE",
238
292
  "dashboard_url_for_endpoint",
239
293
  "default_setup_path",
240
294
  "default_token_dir",
@@ -253,7 +307,9 @@ __all__ = [
253
307
  "normalize_event",
254
308
  "plan_report",
255
309
  "parse_repo_sync_spec",
310
+ "repo_sync_window_events",
256
311
  "parse_event_args",
312
+ "parse_event_file_candidates",
257
313
  "post_upload_payload",
258
314
  "probe_cloud_service",
259
315
  "read_token_file",
@@ -262,6 +318,7 @@ __all__ = [
262
318
  "render_cloud_doctor_text",
263
319
  "render_setup_env",
264
320
  "repo_slug_from_remote",
321
+ "pr_outcomes_upload",
265
322
  "repo_sync_output_name",
266
323
  "repo_sync_upload",
267
324
  "report_path_from_manifest",
@@ -274,6 +331,7 @@ __all__ = [
274
331
  "resolve_work_type_classification",
275
332
  "run_cloud_doctor",
276
333
  "run_cloud_setup",
334
+ "run_gh_pr_list",
277
335
  "run_gh_run_list",
278
336
  "run_git",
279
337
  "safe_target_name",
@@ -35,6 +35,7 @@ SAFE_EVENT_TYPES = {
35
35
  "productivity_summary",
36
36
  "provider_catalog_snapshot",
37
37
  "queue_state_snapshot",
38
+ "reviewer_finding_outcome",
38
39
  "reviewer_run",
39
40
  "value_report_snapshot",
40
41
  "work_order",