orbi-cli 0.7.25__tar.gz → 0.7.26__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 (230) hide show
  1. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/PKG-INFO +1 -1
  2. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/pyproject.toml +1 -1
  3. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/__init__.py +1 -1
  4. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi_cli.egg-info/PKG-INFO +1 -1
  5. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_prompt_contract.py +101 -0
  6. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/LICENSE +0 -0
  7. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/README.md +0 -0
  8. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/docs/licenses/sustainable-use-license.md +0 -0
  9. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/setup.cfg +0 -0
  10. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/base_ci_red.py +0 -0
  11. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/blocked_comment.py +0 -0
  12. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/branch_reclaim.py +0 -0
  13. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/check_permission.py +0 -0
  14. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/checks.py +0 -0
  15. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/claim.py +0 -0
  16. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/clarify.py +0 -0
  17. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli.py +0 -0
  18. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli_commands.py +0 -0
  19. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli_doctor.py +0 -0
  20. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli_parser.py +0 -0
  21. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli_source.py +0 -0
  22. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli_status.py +0 -0
  23. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/cli_ticket_command.py +0 -0
  24. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/comment_kind.py +0 -0
  25. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/comment_trust.py +0 -0
  26. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/config.py +0 -0
  27. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/criteria_command.py +0 -0
  28. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/delivery_comment.py +0 -0
  29. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/delivery_labels.py +0 -0
  30. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/delivery_scene.py +0 -0
  31. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/engine_source.py +0 -0
  32. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/example_config.toml +0 -0
  33. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/extensions/clarify_verdict.ts +0 -0
  34. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/failure.py +0 -0
  35. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/failure_report.py +0 -0
  36. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/gh_response.py +0 -0
  37. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/git_identity.py +0 -0
  38. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/git_transport.py +0 -0
  39. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/github.py +0 -0
  40. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/github_feedback.py +0 -0
  41. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/gitops.py +0 -0
  42. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/human_review.py +0 -0
  43. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/journal.py +0 -0
  44. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/language.py +0 -0
  45. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/language_terms.py +0 -0
  46. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/launchd_deploy.py +0 -0
  47. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/merge_exec.py +0 -0
  48. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/merge_gate.py +0 -0
  49. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/merge_handoff.py +0 -0
  50. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/milestone.py +0 -0
  51. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/milestone_command.py +0 -0
  52. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/notify.py +0 -0
  53. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_activity.py +0 -0
  54. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_command.py +0 -0
  55. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_idle.py +0 -0
  56. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_process.py +0 -0
  57. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_recovery.py +0 -0
  58. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_session.py +0 -0
  59. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pi_stream_log.py +0 -0
  60. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pilot_setup.py +0 -0
  61. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pilot_slots.py +0 -0
  62. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/pr_verification.py +0 -0
  63. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/progress.py +0 -0
  64. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/progress_display.py +0 -0
  65. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/progress_outcome.py +0 -0
  66. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/progress_summary.py +0 -0
  67. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release.py +0 -0
  68. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release_closeout.py +0 -0
  69. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release_comments.py +0 -0
  70. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release_declaration.py +0 -0
  71. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release_git.py +0 -0
  72. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release_notes.py +0 -0
  73. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/release_run.py +0 -0
  74. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/repo_config.py +0 -0
  75. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/resume_scan.py +0 -0
  76. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/resume_verification.py +0 -0
  77. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/review_merge.py +0 -0
  78. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/review_rounds.py +0 -0
  79. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/review_verdict.py +0 -0
  80. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/run_state.py +0 -0
  81. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/runner.py +0 -0
  82. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/runner_health.py +0 -0
  83. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/runner_marker.py +0 -0
  84. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/runner_source.py +0 -0
  85. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/scene.py +0 -0
  86. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/scheduler.py +0 -0
  87. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/scheduler_units.py +0 -0
  88. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/session_command.py +0 -0
  89. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/setup_checks.py +0 -0
  90. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/setup_config.py +0 -0
  91. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/source_pool.py +0 -0
  92. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/split_command.py +0 -0
  93. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/status_observe.py +0 -0
  94. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/suggest.py +0 -0
  95. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/systemd_deploy.py +0 -0
  96. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/ticket_command.py +0 -0
  97. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi/user_summary.py +0 -0
  98. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi_cli.egg-info/SOURCES.txt +0 -0
  99. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi_cli.egg-info/dependency_links.txt +0 -0
  100. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi_cli.egg-info/entry_points.txt +0 -0
  101. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/src/orbi_cli.egg-info/top_level.txt +0 -0
  102. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_agents_md.py +0 -0
  103. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_apply_label_patch.py +0 -0
  104. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_base_branch_failure.py +0 -0
  105. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_base_ci_red.py +0 -0
  106. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_blocked_comment.py +0 -0
  107. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_bootstrap_adapters.py +0 -0
  108. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_bootstrap_delivery.py +0 -0
  109. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_bootstrap_pi.py +0 -0
  110. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_bootstrap_preflight.py +0 -0
  111. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_bootstrap_release.py +0 -0
  112. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_bootstrap_runner.py +0 -0
  113. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_branch_reclaim.py +0 -0
  114. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_check_permission.py +0 -0
  115. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_ci_failure_issue_workflow.py +0 -0
  116. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_ci_failure_triage.py +0 -0
  117. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_ci_macos_workflow.py +0 -0
  118. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_ci_workflow.py +0 -0
  119. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_clarify.py +0 -0
  120. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_claude_plugin.py +0 -0
  121. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_cli_golden.py +0 -0
  122. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_cli_install.py +0 -0
  123. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_cli_milestone.py +0 -0
  124. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_cli_packaging.py +0 -0
  125. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_cli_source.py +0 -0
  126. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_cli_ticket_commands.py +0 -0
  127. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_command_receipt_contract.py +0 -0
  128. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_comment_identity.py +0 -0
  129. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_comment_readers_contract.py +0 -0
  130. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_comment_trust.py +0 -0
  131. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_concurrency_e2e.py +0 -0
  132. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_constitution.py +0 -0
  133. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_coverage_gate.py +0 -0
  134. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_criteria_command.py +0 -0
  135. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_deliver_pr_fakes.py +0 -0
  136. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_delivery_branch_delete.py +0 -0
  137. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_delivery_labels.py +0 -0
  138. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_delivery_scene.py +0 -0
  139. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docker_docs.py +0 -0
  140. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docker_entrypoint.py +0 -0
  141. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docker_image_workflow.py +0 -0
  142. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_i18n.py +0 -0
  143. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_issue_shapes.py +0 -0
  144. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_labels.py +0 -0
  145. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_mermaid.py +0 -0
  146. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_releases.py +0 -0
  147. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_single_source.py +0 -0
  148. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_docs_site.py +0 -0
  149. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_engine_source.py +0 -0
  150. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_failure.py +0 -0
  151. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_failure_report.py +0 -0
  152. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_fix_needed_loop.py +0 -0
  153. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_gh_read_retry.py +0 -0
  154. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_gh_response.py +0 -0
  155. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_git_base_smoke.py +0 -0
  156. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_git_merge_smoke.py +0 -0
  157. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_git_network_retry.py +0 -0
  158. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_git_transport.py +0 -0
  159. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_github.py +0 -0
  160. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_github_fakes.py +0 -0
  161. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_gitops.py +0 -0
  162. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_gitops_fakes.py +0 -0
  163. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_human_review.py +0 -0
  164. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_import_graph.py +0 -0
  165. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_install_sh.py +0 -0
  166. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_issue_1367.py +0 -0
  167. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_issue_461.py +0 -0
  168. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_issue_template_config.py +0 -0
  169. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_journal.py +0 -0
  170. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_journal_events.py +0 -0
  171. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_launchd_deploy.py +0 -0
  172. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_license.py +0 -0
  173. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_merge_exec_extraction.py +0 -0
  174. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_message_language.py +0 -0
  175. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_milestone_command.py +0 -0
  176. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_notify.py +0 -0
  177. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_ops_e2e.py +0 -0
  178. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_orbi.py +0 -0
  179. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_orbi_dashboard.py +0 -0
  180. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_orbi_exporter.py +0 -0
  181. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_patch_ratchet.py +0 -0
  182. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pi_activity.py +0 -0
  183. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pi_command.py +0 -0
  184. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pi_extensions.py +0 -0
  185. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pi_provider_templates.py +0 -0
  186. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pi_recovery.py +0 -0
  187. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pi_session.py +0 -0
  188. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pilot_setup.py +0 -0
  189. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pilot_slots.py +0 -0
  190. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pr_issue_link_workflow.py +0 -0
  191. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_pr_verification.py +0 -0
  192. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_prerequisite_check.py +0 -0
  193. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_progress.py +0 -0
  194. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_progress_wiring.py +0 -0
  195. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_public_contracts.py +0 -0
  196. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_public_helpers.py +0 -0
  197. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_publish_workflow.py +0 -0
  198. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_release_docs_workflow.py +0 -0
  199. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_release_extraction.py +0 -0
  200. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_release_ticket_templates.py +0 -0
  201. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_repo_config.py +0 -0
  202. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_resume_continue_e2e.py +0 -0
  203. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_resume_e2e.py +0 -0
  204. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_resume_pr.py +0 -0
  205. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_review_merge.py +0 -0
  206. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_review_verdict.py +0 -0
  207. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_run_artifacts.py +0 -0
  208. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_run_id_e2e.py +0 -0
  209. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_run_id_fixture.py +0 -0
  210. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_runner_config.py +0 -0
  211. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_runner_health.py +0 -0
  212. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_runner_source_freshness.py +0 -0
  213. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_scene.py +0 -0
  214. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_scheduler.py +0 -0
  215. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_seam.py +0 -0
  216. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_setup_output_golden.py +0 -0
  217. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_size_ratchet.py +0 -0
  218. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_split_command.py +0 -0
  219. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_src_layout.py +0 -0
  220. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_status_observe.py +0 -0
  221. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_steering_review.py +0 -0
  222. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_suggest.py +0 -0
  223. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_suite_hygiene.py +0 -0
  224. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_systemd_deploy.py +0 -0
  225. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_systemd_timer.py +0 -0
  226. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_ticket_command.py +0 -0
  227. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_user_acceptance_contract.py +0 -0
  228. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_user_summary.py +0 -0
  229. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_versioned_comment_block.py +0 -0
  230. {orbi_cli-0.7.25 → orbi_cli-0.7.26}/tests/test_worktree_reclaim.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orbi-cli
3
- Version: 0.7.25
3
+ Version: 0.7.26
4
4
  Summary: Orbi — local AI development worker: claims GitHub Issues, runs Pi in isolated worktrees, and delivers PRs (GitHub Issues + labels are the only state store).
5
5
  Author: xqliu
6
6
  License-Expression: AGPL-3.0-only OR LicenseRef-Sustainable-Use-1.0
@@ -44,7 +44,7 @@ build-backend = "setuptools.build_meta"
44
44
 
45
45
  [project]
46
46
  name = "orbi-cli"
47
- version = "0.7.25"
47
+ version = "0.7.26"
48
48
  description = "Orbi — local AI development worker: claims GitHub Issues, runs Pi in isolated worktrees, and delivers PRs (GitHub Issues + labels are the only state store)."
49
49
  readme = "README.md"
50
50
  requires-python = ">=3.14"
@@ -18,4 +18,4 @@ the package would shadow the installed package for every process with
18
18
  the checkout root on sys.path. The direct-execution compatibility entry
19
19
  is `python3 -m orbi.cli` (development path only).
20
20
  """
21
- __version__ = "0.7.25"
21
+ __version__ = "0.7.26"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orbi-cli
3
- Version: 0.7.25
3
+ Version: 0.7.26
4
4
  Summary: Orbi — local AI development worker: claims GitHub Issues, runs Pi in isolated worktrees, and delivers PRs (GitHub Issues + labels are the only state store).
5
5
  Author: xqliu
6
6
  License-Expression: AGPL-3.0-only OR LicenseRef-Sustainable-Use-1.0
@@ -886,3 +886,104 @@ def test_prompt_md_step_4_does_not_use_pytest_as_completion_evidence():
886
886
  text = _text(PROMPT)
887
887
  assert "unit tests alone are not completion evidence" in text
888
888
  assert "pytest alone is not completion evidence" not in text
889
+
890
+
891
+ # --- Issue #1980: a delivery changes only what the ticket asks for -----------
892
+
893
+ # The beta incident (Issue #1980) had two shapes on the same evening: ticket
894
+ # #260 -> PR #261 deleted a false-red test file, and ticket #262 -> PR #265
895
+ # removed an `exit 1` CI job from .github/workflows/ci.yml, both unmentioned,
896
+ # review passed, both merged. The base-red gate itself works (#254 paused), so
897
+ # the missing piece is the scope rule: a delivery changes only what the ticket
898
+ # asks for and never edits unrelated code, tests or CI configuration to get its
899
+ # own checks green. Both prompts must state it up front; these tests render the
900
+ # real templates (the exact string Pi receives) so the rule cannot silently
901
+ # drift away.
902
+
903
+ BASE_RED_PROMPT_ITEMS = (
904
+ # The general scope sentence (the ticket's acceptance 1), not a per-file
905
+ # list: unrelated code, tests AND CI configuration are all named.
906
+ ("scope-only-ticket", "change only what the ticket asks for"),
907
+ ("scope-unrelated-files",
908
+ "do not edit unrelated code, tests or ci configuration to make your own "
909
+ "checks pass"),
910
+ # A check already red at the frozen base belongs to the base, not the
911
+ # ticket — the Runner's base-red pause decides it.
912
+ ("scope-base-check-not-mine",
913
+ "a check already failing at "
914
+ "`77e7f0ea54d8e9748f2debfd5a8f49739dd89b66` is not this ticket's to fix"),
915
+ ("base-red-failing-test",
916
+ "already fails at `77e7f0ea54d8e9748f2debfd5a8f49739dd89b66`"),
917
+ ("base-red-outside", "outside this ticket"),
918
+ ("base-red-forbidden-actions", "delete, skip, xfail or edit it"),
919
+ ("base-red-no-weaken", "do not weaken its assertion"),
920
+ ("base-red-leave-failing", "leave it failing"),
921
+ ("base-red-runner-handling", "base-red handling"),
922
+ # Step 5 forbids committing a change whose tests were seen failing; the
923
+ # carve-out keeps that rule from stalling the delivery on the base's own
924
+ # red test (the ticket must still end in a commit).
925
+ ("base-red-step5-carve-out",
926
+ "never includes a test that already fails at "
927
+ "`77e7f0ea54d8e9748f2debfd5a8f49739dd89b66`"),
928
+ )
929
+
930
+
931
+ def test_prompt_md_leaves_a_test_that_already_fails_on_the_base_alone():
932
+ """Issue #1980: the rendered implementer prompt carries the scope sentence
933
+ — change only what the ticket asks for, never unrelated code, tests or CI
934
+ configuration to get checks green — and states that a check already
935
+ failing at the frozen base SHA is outside the ticket, never deleted,
936
+ skipped, xfail-ed or weakened; it stays failing and the Runner's base-red
937
+ handling takes it from there."""
938
+ from orbi import pi_session
939
+
940
+ rendered = pi_session.render_prompt(
941
+ PROMPT.read_text(encoding="utf-8"),
942
+ {"BASE_SHA": "77e7f0ea54d8e9748f2debfd5a8f49739dd89b66",
943
+ "BASE_BRANCH": "main"},
944
+ )
945
+ text = " ".join(rendered.lower().split())
946
+ missing = _missing(text, BASE_RED_PROMPT_ITEMS)
947
+ assert not missing, (
948
+ f"prompt.md does not leave a base-red test alone (Issue #1980): "
949
+ f"{missing}"
950
+ )
951
+ # Rendered against a real base SHA, the rule names that SHA.
952
+ assert "77e7f0ea54d8e9748f2debfd5a8f49739dd89b66" in text
953
+
954
+
955
+ BASE_RED_REVIEW_ITEMS = (
956
+ # Acceptance 2: out-of-scope changes made to get checks green are a
957
+ # blocking finding, and the rule names all three file kinds, so a removed
958
+ # CI job (the #265 shape) is caught like a deleted test (the #261 shape).
959
+ ("review-base-red-scope",
960
+ "out-of-scope changes made to get checks green are a **blocking "
961
+ "finding (blocker)**"),
962
+ ("review-base-red-delete", "deleting, skipping or weakening"),
963
+ ("review-base-red-unrelated", "unrelated existing test"),
964
+ ("review-base-red-other-files",
965
+ "editing unrelated code, tests or ci configuration"),
966
+ ("review-base-red-ci", "disabled ci job"),
967
+ )
968
+
969
+
970
+ def test_prompt_review_md_flags_a_deleted_or_weakened_existing_test():
971
+ """Issue #1980: the rendered review prompt treats out-of-scope changes
972
+ made to get checks green — a deleted or weakened test, unrelated code or
973
+ CI configuration, a disabled CI job — as a blocking finding, so the PR
974
+ that removes the customer's red test or red job is rejected instead of
975
+ merged."""
976
+ from orbi import pi_session
977
+
978
+ rendered = pi_session.render_prompt(
979
+ PROMPT_REVIEW.read_text(encoding="utf-8"),
980
+ {"BASE_SHA": "77e7f0ea54d8e9748f2debfd5a8f49739dd89b66",
981
+ "BASE_BRANCH": "main"},
982
+ )
983
+ text = " ".join(rendered.lower().split())
984
+ missing = _missing(text, BASE_RED_REVIEW_ITEMS)
985
+ assert not missing, (
986
+ f"prompt_review.md does not flag a deleted or weakened existing test "
987
+ f"(Issue #1980): {missing}"
988
+ )
989
+ assert "77e7f0ea54d8e9748f2debfd5a8f49739dd89b66" in text
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes