orbi-cli 0.7.30__tar.gz → 0.7.32__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.
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/PKG-INFO +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/pyproject.toml +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/__init__.py +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/clarify.py +13 -22
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli_commands.py +12 -45
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli_parser.py +3 -3
- orbi_cli-0.7.32/src/orbi/draft.py +853 -0
- orbi_cli-0.7.32/src/orbi/draft_cli.py +248 -0
- orbi_cli-0.7.32/src/orbi/draft_marker.py +137 -0
- orbi_cli-0.7.32/src/orbi/extensions/draft_tools.ts +131 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/journal.py +5 -0
- orbi_cli-0.7.32/src/orbi/ops_delivery.py +137 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_command.py +115 -86
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/runner.py +14 -71
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/session_command.py +44 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/split_command.py +51 -34
- orbi_cli-0.7.32/src/orbi/ticket_criteria.py +38 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi_cli.egg-info/PKG-INFO +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi_cli.egg-info/SOURCES.txt +16 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_blocked_comment.py +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_bootstrap_adapters.py +2 -2
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_bootstrap_delivery.py +2 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_bootstrap_preflight.py +5 -5
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_bootstrap_release.py +1 -1
- orbi_cli-0.7.32/tests/test_bootstrap_runner_claim_resume.py +1025 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_failure_report.py +570 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_main.py +1059 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_milestone.py +1024 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_outcome.py +1095 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_prompt.py +886 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_reconcile.py +546 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_session.py +816 -0
- orbi_cli-0.7.32/tests/test_bootstrap_runner_tickets.py +668 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_clarify.py +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_concurrency_e2e.py +1 -1
- orbi_cli-0.7.32/tests/test_draft.py +1176 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ops_e2e.py +8 -12
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_orbi.py +3 -3
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_resume_continue_e2e.py +2 -10
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_resume_e2e.py +1 -10
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_resume_pr.py +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_run_id_e2e.py +1 -10
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_runner_config.py +1 -1
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_runner_health.py +5 -4
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_seam.py +5 -6
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_size_ratchet.py +86 -2
- orbi_cli-0.7.32/tests/test_suite_hygiene.py +112 -0
- orbi_cli-0.7.30/tests/test_bootstrap_runner.py +0 -7459
- orbi_cli-0.7.30/tests/test_suite_hygiene.py +0 -63
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/LICENSE +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/README.md +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/docs/licenses/sustainable-use-license.md +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/setup.cfg +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/amend_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/base_ci_red.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/blocked_comment.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/branch_reclaim.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/check_permission.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/checks.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/claim.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli_doctor.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli_source.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli_status.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/cli_ticket_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/comment_kind.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/comment_rest_id.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/comment_trust.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/config.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/delivery_comment.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/delivery_labels.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/delivery_scene.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/engine_source.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/example_config.toml +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/extensions/clarify_verdict.ts +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/failure.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/failure_report.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/gh_response.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/git_identity.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/git_transport.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/github.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/github_feedback.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/gitops.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/human_review.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/language.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/language_terms.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/launchd_deploy.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/merge_exec.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/merge_gate.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/merge_handoff.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/milestone.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/milestone_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/notify.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_activity.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_idle.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_process.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_recovery.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_session.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pi_stream_log.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pilot_setup.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pilot_slots.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/pr_verification.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/progress.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/progress_display.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/progress_outcome.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/progress_summary.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release_closeout.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release_comments.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release_declaration.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release_git.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release_notes.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/release_run.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/repo_config.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/resume_scan.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/resume_verification.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/review_merge.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/review_rounds.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/review_verdict.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/run_state.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/runner_health.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/runner_marker.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/runner_source.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/scene.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/scheduler.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/scheduler_units.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/setup_checks.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/setup_config.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/source_pool.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/status_observe.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/suggest.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/systemd_deploy.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/ticket_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/ticket_command_registry.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi/user_summary.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi_cli.egg-info/dependency_links.txt +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi_cli.egg-info/entry_points.txt +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/src/orbi_cli.egg-info/top_level.txt +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_agents_md.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_amend_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_apply_label_patch.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_base_branch_failure.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_base_ci_red.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_bootstrap_pi.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_branch_reclaim.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_check_permission.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ci_failure_issue_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ci_failure_triage.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ci_macos_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ci_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_claude_plugin.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_cli_golden.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_cli_install.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_cli_milestone.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_cli_packaging.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_cli_source.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_cli_ticket_commands.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_command_receipt_contract.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_comment_identity.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_comment_readers_contract.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_comment_rest_id.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_comment_trust.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_constitution.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_coverage_gate.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_deliver_pr_fakes.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_delivery_branch_delete.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_delivery_labels.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_delivery_scene.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docker_docs.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docker_entrypoint.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docker_image_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_i18n.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_issue_shapes.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_labels.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_mermaid.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_releases.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_single_source.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_docs_site.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_engine_source.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_failure.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_failure_report.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_fix_needed_loop.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_gh_read_retry.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_gh_response.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_git_base_smoke.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_git_merge_smoke.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_git_network_retry.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_git_transport.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_github.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_github_fakes.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_gitops.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_gitops_fakes.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_human_review.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_import_graph.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_install_sh.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_issue_1367.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_issue_461.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_issue_template_config.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_journal.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_journal_events.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_launchd_deploy.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_license.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_merge_exec_extraction.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_message_language.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_milestone_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_notify.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_orbi_dashboard.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_orbi_exporter.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_patch_ratchet.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_activity.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_child_reap.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_extensions.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_provider_templates.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_recovery.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pi_session.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pilot_setup.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pilot_slots.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pr_issue_link_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_pr_verification.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_prerequisite_check.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_progress.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_progress_wiring.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_prompt_contract.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_public_contracts.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_public_helpers.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_publish_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_release_docs_workflow.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_release_extraction.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_release_ticket_templates.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_repo_config.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_review_merge.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_review_verdict.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_run_artifacts.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_run_id_fixture.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_runner_source_freshness.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_scene.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_scheduler.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_setup_output_golden.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_split_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_src_layout.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_status_observe.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_steering_review.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_suggest.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_systemd_deploy.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_systemd_timer.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ticket_command.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_ticket_command_registration.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_user_acceptance_contract.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_user_summary.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/tests/test_versioned_comment_block.py +0 -0
- {orbi_cli-0.7.30 → orbi_cli-0.7.32}/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.
|
|
3
|
+
Version: 0.7.32
|
|
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.
|
|
47
|
+
version = "0.7.32"
|
|
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"
|
|
@@ -51,7 +51,8 @@ from pathlib import Path
|
|
|
51
51
|
from string import Formatter
|
|
52
52
|
from typing import TYPE_CHECKING
|
|
53
53
|
|
|
54
|
-
from orbi import language, notify, user_summary
|
|
54
|
+
from orbi import draft_marker, language, notify, user_summary
|
|
55
|
+
from orbi.ticket_criteria import TICKET_CHECK_CRITERIA
|
|
55
56
|
from orbi.delivery_labels import NEEDS_DETAIL_LABEL, READY_LABEL
|
|
56
57
|
from orbi.github import (
|
|
57
58
|
authenticated_github_login, comment_issue, edit_issue, issue_comments,
|
|
@@ -99,27 +100,8 @@ CLARIFY_SYSTEM_PROMPT = (
|
|
|
99
100
|
"only the Issue text, and judge what it says rather than the shape "
|
|
100
101
|
"it is written in: separate template headings are optional, so a "
|
|
101
102
|
"missing heading is never a missing piece.\n\n"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
"what a user sees or does differently once the change ships. A "
|
|
105
|
-
"concrete runtime failure — an error, a crash, a wrong returned "
|
|
106
|
-
"value, a reproduced misbehavior named with its evidence — is such "
|
|
107
|
-
"a result together with its unambiguous implied correction (\"it "
|
|
108
|
-
"should not do this\"), even when no goal is written out "
|
|
109
|
-
"explicitly.\n"
|
|
110
|
-
"2. acceptance_condition — the ticket states an acceptance "
|
|
111
|
-
"condition: a concrete way to tell a finished delivery from an "
|
|
112
|
-
"unfinished one. Historical diagnostic evidence is not one: a run "
|
|
113
|
-
"that already happened, a count from an earlier attempt or a "
|
|
114
|
-
"symptom read from a log says what the author observed, not what "
|
|
115
|
-
"the delivery must achieve. Report this check only when no "
|
|
116
|
-
"condition is stated at all, and never invent a target, a cleanup "
|
|
117
|
-
"policy or a delivery scope for it.\n"
|
|
118
|
-
"3. single_outcome — the ticket is one runtime outcome: one fix or "
|
|
119
|
-
"one change, not several unrelated things. One failing behavior, "
|
|
120
|
-
"or several symptoms of the same behavior, is one outcome no "
|
|
121
|
-
"matter how many bullets or sentences describe it; report this "
|
|
122
|
-
"check only when the text bundles independent deliverables.\n\n"
|
|
103
|
+
+ TICKET_CHECK_CRITERIA
|
|
104
|
+
+ "\n\n"
|
|
123
105
|
"Answer by calling the clarify_verdict tool exactly once: it is "
|
|
124
106
|
"the only tool in this session, and the run ends with that call. Do "
|
|
125
107
|
"not answer in prose.\n\n"
|
|
@@ -936,6 +918,15 @@ def enforce(issue: dict, config: RunnerConfig, source_repo: str,
|
|
|
936
918
|
# ticket claimable, and the next tick would judge it again — the gate
|
|
937
919
|
# would repeat instead of stopping.
|
|
938
920
|
ready_label = config.dispatch_label or READY_LABEL
|
|
921
|
+
if draft_marker.own_draft_unchanged(issue):
|
|
922
|
+
# Issue #2041: `orbi draft` already judged this exact body with
|
|
923
|
+
# THIS function before the person ever saw it, and nobody has
|
|
924
|
+
# edited it since (the marker's fingerprint still matches). Orbi
|
|
925
|
+
# does not bounce its own drafts: the check would repeat a
|
|
926
|
+
# judgment it already made, and a draft that failed it after the
|
|
927
|
+
# rewrite is the person's to submit — not the gate's to stop.
|
|
928
|
+
event("clarify_draft_skipped", issue=issue["number"])
|
|
929
|
+
return True
|
|
939
930
|
if already_stopped(issue, source_repo):
|
|
940
931
|
# Issue #1904: the automation re-added the claim label without
|
|
941
932
|
# touching the text. The stop already named the missing pieces
|
|
@@ -11,7 +11,6 @@ loading stay in the entry module, which owns the diagnostics.
|
|
|
11
11
|
"""
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
-
import json
|
|
15
14
|
import logging
|
|
16
15
|
import re
|
|
17
16
|
import sys
|
|
@@ -20,6 +19,7 @@ from pathlib import Path
|
|
|
20
19
|
from orbi import (
|
|
21
20
|
cli_status,
|
|
22
21
|
config as config_domain,
|
|
22
|
+
draft_cli,
|
|
23
23
|
engine_source,
|
|
24
24
|
notify,
|
|
25
25
|
pilot_setup,
|
|
@@ -33,11 +33,7 @@ from orbi.cli_ticket_command import command_ticket_command
|
|
|
33
33
|
from orbi.delivery_labels import READY_LABEL
|
|
34
34
|
from orbi.milestone_command import MilestoneSetError, milestone_set
|
|
35
35
|
from orbi.runner import freeze_base, run_command
|
|
36
|
-
from orbi.session_command import
|
|
37
|
-
find_session_file,
|
|
38
|
-
follow_session_file,
|
|
39
|
-
format_session_line,
|
|
40
|
-
)
|
|
36
|
+
from orbi.session_command import command_session
|
|
41
37
|
|
|
42
38
|
LOGGER = logging.getLogger("orbi.cli")
|
|
43
39
|
|
|
@@ -194,6 +190,15 @@ def command_add(config: config_domain.RunnerConfig, args, parser) -> int:
|
|
|
194
190
|
return 0
|
|
195
191
|
|
|
196
192
|
|
|
193
|
+
def command_draft(config: config_domain.RunnerConfig, args, parser) -> int:
|
|
194
|
+
"""Draft one request into deliverable Issues, or create the draft."""
|
|
195
|
+
return draft_cli.run_draft(
|
|
196
|
+
config, _selected_repo(config, args, parser),
|
|
197
|
+
request=args.request, session_dir=args.session_dir,
|
|
198
|
+
create=args.create,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
|
|
197
202
|
def command_suggest(config: config_domain.RunnerConfig, args, parser) -> int:
|
|
198
203
|
repo = _selected_repo(config, args, parser)
|
|
199
204
|
return suggest.run_suggest(
|
|
@@ -202,45 +207,6 @@ def command_suggest(config: config_domain.RunnerConfig, args, parser) -> int:
|
|
|
202
207
|
)
|
|
203
208
|
|
|
204
209
|
|
|
205
|
-
def command_session(config: config_domain.RunnerConfig, args, parser) -> int:
|
|
206
|
-
path = find_session_file(config.repo_dir)
|
|
207
|
-
if path is None:
|
|
208
|
-
print(
|
|
209
|
-
f"no pi session under {config.repo_dir / '.worktrees'}: "
|
|
210
|
-
"no Pi is running",
|
|
211
|
-
file=sys.stderr,
|
|
212
|
-
)
|
|
213
|
-
return 1
|
|
214
|
-
if not args.follow:
|
|
215
|
-
if args.pretty:
|
|
216
|
-
with path.open("r", encoding="utf-8") as handle:
|
|
217
|
-
for line in handle:
|
|
218
|
-
line = line.strip()
|
|
219
|
-
if not line:
|
|
220
|
-
continue
|
|
221
|
-
try:
|
|
222
|
-
record = json.loads(line)
|
|
223
|
-
except json.JSONDecodeError:
|
|
224
|
-
continue
|
|
225
|
-
if isinstance(record, dict):
|
|
226
|
-
print(format_session_line(record))
|
|
227
|
-
else:
|
|
228
|
-
print(path)
|
|
229
|
-
return 0
|
|
230
|
-
for line in follow_session_file(path):
|
|
231
|
-
if args.pretty:
|
|
232
|
-
try:
|
|
233
|
-
record = json.loads(line)
|
|
234
|
-
except json.JSONDecodeError:
|
|
235
|
-
continue
|
|
236
|
-
if isinstance(record, dict):
|
|
237
|
-
print(format_session_line(record))
|
|
238
|
-
else:
|
|
239
|
-
print(line)
|
|
240
|
-
sys.stdout.flush()
|
|
241
|
-
return 0
|
|
242
|
-
|
|
243
|
-
|
|
244
210
|
def command_install_units(config: config_domain.RunnerConfig, args,
|
|
245
211
|
parser) -> int:
|
|
246
212
|
print(install_units_command(config, args.installed_dir))
|
|
@@ -375,6 +341,7 @@ def command_status(config: config_domain.RunnerConfig, args, parser) -> int:
|
|
|
375
341
|
COMMAND_HANDLERS = {
|
|
376
342
|
"add": command_add,
|
|
377
343
|
"suggest": command_suggest,
|
|
344
|
+
"draft": command_draft,
|
|
378
345
|
"status": command_status,
|
|
379
346
|
"session": command_session,
|
|
380
347
|
"install-units": command_install_units,
|
|
@@ -13,7 +13,7 @@ import argparse
|
|
|
13
13
|
import os
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
|
|
16
|
-
from orbi import __version__, cli_ticket_command, notify, suggest
|
|
16
|
+
from orbi import __version__, cli_ticket_command, draft_cli, notify, suggest
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def build_parser(description: str) -> argparse.ArgumentParser:
|
|
@@ -24,8 +24,7 @@ def build_parser(description: str) -> argparse.ArgumentParser:
|
|
|
24
24
|
)
|
|
25
25
|
parser = argparse.ArgumentParser(description=description, parents=[common])
|
|
26
26
|
parser.add_argument(
|
|
27
|
-
"--version", action="version",
|
|
28
|
-
version=f"orbi {__version__}",
|
|
27
|
+
"--version", action="version", version=f"orbi {__version__}",
|
|
29
28
|
)
|
|
30
29
|
# The subcommand is OPTIONAL — with no subcommand the
|
|
31
30
|
# installed CLI runs one Runner tick (the systemd ExecStart is the
|
|
@@ -43,6 +42,7 @@ def build_parser(description: str) -> argparse.ArgumentParser:
|
|
|
43
42
|
help="source repo (default: first configured source)",
|
|
44
43
|
)
|
|
45
44
|
suggest.register_cli(subparsers, common)
|
|
45
|
+
draft_cli.register_cli(subparsers, common)
|
|
46
46
|
status_parser = subparsers.add_parser(
|
|
47
47
|
"status", parents=[common],
|
|
48
48
|
help="show every active delivery with attributed local activity, "
|