orbi-cli 0.7.26__tar.gz → 0.7.28__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.26 → orbi_cli-0.7.28}/PKG-INFO +1 -1
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/pyproject.toml +1 -1
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/__init__.py +1 -1
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/config.py +10 -3
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/example_config.toml +2 -1
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/runner_health.py +19 -15
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi_cli.egg-info/PKG-INFO +1 -1
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_ci_failure_issue_workflow.py +6 -5
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_ci_failure_triage.py +61 -381
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_ci_workflow.py +45 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_runner_config.py +17 -2
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_runner_health.py +46 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/LICENSE +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/README.md +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/docs/licenses/sustainable-use-license.md +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/setup.cfg +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/base_ci_red.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/blocked_comment.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/branch_reclaim.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/check_permission.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/checks.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/claim.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/clarify.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli_commands.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli_doctor.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli_parser.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli_source.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli_status.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/cli_ticket_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/comment_kind.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/comment_trust.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/criteria_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/delivery_comment.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/delivery_labels.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/delivery_scene.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/engine_source.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/extensions/clarify_verdict.ts +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/failure.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/failure_report.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/gh_response.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/git_identity.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/git_transport.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/github.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/github_feedback.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/gitops.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/human_review.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/journal.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/language.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/language_terms.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/launchd_deploy.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/merge_exec.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/merge_gate.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/merge_handoff.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/milestone.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/milestone_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/notify.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_activity.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_idle.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_process.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_recovery.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_session.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pi_stream_log.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pilot_setup.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pilot_slots.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/pr_verification.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/progress.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/progress_display.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/progress_outcome.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/progress_summary.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release_closeout.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release_comments.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release_declaration.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release_git.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release_notes.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/release_run.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/repo_config.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/resume_scan.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/resume_verification.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/review_merge.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/review_rounds.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/review_verdict.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/run_state.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/runner.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/runner_marker.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/runner_source.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/scene.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/scheduler.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/scheduler_units.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/session_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/setup_checks.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/setup_config.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/source_pool.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/split_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/status_observe.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/suggest.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/systemd_deploy.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/ticket_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi/user_summary.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi_cli.egg-info/SOURCES.txt +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi_cli.egg-info/dependency_links.txt +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi_cli.egg-info/entry_points.txt +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/src/orbi_cli.egg-info/top_level.txt +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_agents_md.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_apply_label_patch.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_base_branch_failure.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_base_ci_red.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_blocked_comment.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_bootstrap_adapters.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_bootstrap_delivery.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_bootstrap_pi.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_bootstrap_preflight.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_bootstrap_release.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_bootstrap_runner.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_branch_reclaim.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_check_permission.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_ci_macos_workflow.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_clarify.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_claude_plugin.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_cli_golden.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_cli_install.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_cli_milestone.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_cli_packaging.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_cli_source.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_cli_ticket_commands.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_command_receipt_contract.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_comment_identity.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_comment_readers_contract.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_comment_trust.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_concurrency_e2e.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_constitution.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_coverage_gate.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_criteria_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_deliver_pr_fakes.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_delivery_branch_delete.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_delivery_labels.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_delivery_scene.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docker_docs.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docker_entrypoint.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docker_image_workflow.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_i18n.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_issue_shapes.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_labels.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_mermaid.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_releases.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_single_source.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_docs_site.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_engine_source.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_failure.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_failure_report.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_fix_needed_loop.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_gh_read_retry.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_gh_response.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_git_base_smoke.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_git_merge_smoke.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_git_network_retry.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_git_transport.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_github.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_github_fakes.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_gitops.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_gitops_fakes.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_human_review.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_import_graph.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_install_sh.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_issue_1367.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_issue_461.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_issue_template_config.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_journal.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_journal_events.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_launchd_deploy.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_license.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_merge_exec_extraction.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_message_language.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_milestone_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_notify.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_ops_e2e.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_orbi.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_orbi_dashboard.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_orbi_exporter.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_patch_ratchet.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pi_activity.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pi_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pi_extensions.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pi_provider_templates.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pi_recovery.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pi_session.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pilot_setup.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pilot_slots.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pr_issue_link_workflow.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_pr_verification.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_prerequisite_check.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_progress.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_progress_wiring.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_prompt_contract.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_public_contracts.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_public_helpers.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_publish_workflow.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_release_docs_workflow.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_release_extraction.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_release_ticket_templates.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_repo_config.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_resume_continue_e2e.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_resume_e2e.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_resume_pr.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_review_merge.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_review_verdict.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_run_artifacts.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_run_id_e2e.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_run_id_fixture.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_runner_source_freshness.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_scene.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_scheduler.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_seam.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_setup_output_golden.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_size_ratchet.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_split_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_src_layout.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_status_observe.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_steering_review.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_suggest.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_suite_hygiene.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_systemd_deploy.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_systemd_timer.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_ticket_command.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_user_acceptance_contract.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_user_summary.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/tests/test_versioned_comment_block.py +0 -0
- {orbi_cli-0.7.26 → orbi_cli-0.7.28}/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.28
|
|
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.28"
|
|
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"
|
|
@@ -401,9 +401,16 @@ def load_config(path: Path, *, check_provider_api_keys: bool = True,
|
|
|
401
401
|
# Runner-self health alert routing: the orbi repo that
|
|
402
402
|
# receives the watchdog's crash_loop / stale_pickup Issues. Absent ->
|
|
403
403
|
# None (the Runner derives the orbi repo from the deploy home's git
|
|
404
|
-
# origin
|
|
405
|
-
#
|
|
406
|
-
|
|
404
|
+
# origin when it detects something); a string is kept verbatim — an
|
|
405
|
+
# explicit empty string turns alert FILING off while the detection and
|
|
406
|
+
# its `health_degraded` journal event stay (Issue #1985), any other
|
|
407
|
+
# value is the `owner/repo` the alert is filed in (fork/private
|
|
408
|
+
# deployments). A non-string fails the load fast.
|
|
409
|
+
health_alert_repo = data.get("health_alert_repo")
|
|
410
|
+
if health_alert_repo is not None and not isinstance(
|
|
411
|
+
health_alert_repo, str,
|
|
412
|
+
):
|
|
413
|
+
raise ValueError("health_alert_repo must be a string")
|
|
407
414
|
repo_dir = _config_path(data.get("repo_dir", "."), base)
|
|
408
415
|
# Deployment home: the orbi source checkout — the editable
|
|
409
416
|
# CLI install source, the systemd/ unit templates, labels.toml and the
|
|
@@ -213,7 +213,8 @@ max_concurrency = 1
|
|
|
213
213
|
# by `orbi doctor` under unmanaged_units.
|
|
214
214
|
# unit_name = "core"
|
|
215
215
|
# Runner health alerts (crash_loop/stale_pickup) go here when set; absent
|
|
216
|
-
# derives the Orbi repository from the deploy-home origin
|
|
216
|
+
# derives the Orbi repository from the deploy-home origin; "" turns alert
|
|
217
|
+
# Issues OFF while the detection and its health_degraded journal event stay.
|
|
217
218
|
# health_alert_repo = "OWNER/ORBI-REPO"
|
|
218
219
|
# Repository policy may override the ready label for this delivery source.
|
|
219
220
|
# dispatch_label = "ai-ready"
|
|
@@ -627,9 +627,13 @@ def _run_health_check_locked(config: RunnerConfig, *, run_command) -> list[str]:
|
|
|
627
627
|
# `health_alert_repo` override wins (fork/private deployments);
|
|
628
628
|
# otherwise the orbi repo is derived from the deploy home's git
|
|
629
629
|
# origin. Undeterminable -> log and skip (bypass: never guess a
|
|
630
|
-
# repo, never file the alert in the delivery repo).
|
|
630
|
+
# repo, never file the alert in the delivery repo). An explicit
|
|
631
|
+
# empty string (Issue #1985) turns alert FILING off: no
|
|
632
|
+
# alert-repository lookup at all, while the detection and its
|
|
633
|
+
# `health_degraded` event stay.
|
|
631
634
|
alert_repo = config.health_alert_repo
|
|
632
|
-
|
|
635
|
+
alerts_off = alert_repo == ""
|
|
636
|
+
if alert_repo is None:
|
|
633
637
|
alert_repo = orbi_repo_from_deploy_home(
|
|
634
638
|
config.deploy_home, run_command,
|
|
635
639
|
)
|
|
@@ -653,13 +657,7 @@ def _run_health_check_locked(config: RunnerConfig, *, run_command) -> list[str]:
|
|
|
653
657
|
"health_degraded", check="crash_loop", crashes=crashes,
|
|
654
658
|
window_minutes=CRASH_WINDOW_MINUTES, kind=kind,
|
|
655
659
|
)
|
|
656
|
-
if
|
|
657
|
-
event(
|
|
658
|
-
"health_alert_repo_undetermined",
|
|
659
|
-
level=logging.WARNING, check="crash_loop",
|
|
660
|
-
crashes=crashes,
|
|
661
|
-
)
|
|
662
|
-
else:
|
|
660
|
+
if alert_repo:
|
|
663
661
|
detail = (
|
|
664
662
|
f"service crashed {crashes} times in the last "
|
|
665
663
|
f"{CRASH_WINDOW_MINUTES} minutes"
|
|
@@ -676,6 +674,12 @@ def _run_health_check_locked(config: RunnerConfig, *, run_command) -> list[str]:
|
|
|
676
674
|
dispatchable=(kind == "bug"),
|
|
677
675
|
)
|
|
678
676
|
alerts.append("crash_loop")
|
|
677
|
+
elif not alerts_off:
|
|
678
|
+
event(
|
|
679
|
+
"health_alert_repo_undetermined",
|
|
680
|
+
level=logging.WARNING, check="crash_loop",
|
|
681
|
+
crashes=crashes,
|
|
682
|
+
)
|
|
679
683
|
# 2. Repeated same-fingerprint run failures (#246 scene).
|
|
680
684
|
for finding in repeated_failure_findings(state):
|
|
681
685
|
key = (
|
|
@@ -748,12 +752,7 @@ def _run_health_check_locked(config: RunnerConfig, *, run_command) -> list[str]:
|
|
|
748
752
|
time.time() - state["last_pickup_ts"],
|
|
749
753
|
),
|
|
750
754
|
)
|
|
751
|
-
if
|
|
752
|
-
event(
|
|
753
|
-
"health_alert_repo_undetermined",
|
|
754
|
-
level=logging.WARNING, check="stale_pickup",
|
|
755
|
-
)
|
|
756
|
-
else:
|
|
755
|
+
if alert_repo:
|
|
757
756
|
create_health_issue(
|
|
758
757
|
alert_repo, "stale_pickup",
|
|
759
758
|
(
|
|
@@ -764,6 +763,11 @@ def _run_health_check_locked(config: RunnerConfig, *, run_command) -> list[str]:
|
|
|
764
763
|
run_command=run_command,
|
|
765
764
|
)
|
|
766
765
|
alerts.append("stale_pickup")
|
|
766
|
+
elif not alerts_off:
|
|
767
|
+
event(
|
|
768
|
+
"health_alert_repo_undetermined",
|
|
769
|
+
level=logging.WARNING, check="stale_pickup",
|
|
770
|
+
)
|
|
767
771
|
finally:
|
|
768
772
|
save_health_state(state_path, state)
|
|
769
773
|
return alerts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: orbi-cli
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.28
|
|
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
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The workflow (`.github/workflows/ci-failure-issue.yml`) is the runtime entry
|
|
4
4
|
of the CI failure triage: it reacts to the COMPLETED runs of the `CI`
|
|
5
5
|
workflow (`on: workflow_run`), holds the minimal explicit permissions
|
|
6
|
-
(`actions: read`, `contents: read`, `issues: write`, `pull-requests:
|
|
6
|
+
(`actions: read`, `contents: read`, `issues: write`, `pull-requests: read`)
|
|
7
7
|
and runs the triage
|
|
8
8
|
script with the workflow token. These tests fail when the workflow is
|
|
9
9
|
missing, stops watching the CI workflow, gains extra permissions, or can
|
|
@@ -111,7 +111,9 @@ def test_minimal_explicit_permissions():
|
|
|
111
111
|
"actions": "read", # read the completed CI run's jobs
|
|
112
112
|
"contents": "read", # check out the triage script
|
|
113
113
|
"issues": "write", # create/update/close the bug Issue
|
|
114
|
-
|
|
114
|
+
# Issue #1988: the triage writes nothing to a PR — only the recovery
|
|
115
|
+
# guard reads the recovery run's PR (commits/{sha}/pulls).
|
|
116
|
+
"pull-requests": "read",
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
|
|
@@ -127,9 +129,8 @@ def test_single_job_runs_the_triage_script():
|
|
|
127
129
|
|
|
128
130
|
|
|
129
131
|
def test_no_step_installs_the_package():
|
|
130
|
-
"""
|
|
131
|
-
|
|
132
|
-
own sys.path bootstrap), so the job installs nothing."""
|
|
132
|
+
"""The job runs the triage script straight from the checkout, so it
|
|
133
|
+
installs nothing (the script imports no engine module, Issue #1988)."""
|
|
133
134
|
commands = [
|
|
134
135
|
str(step.get("run", "")) for step in steps_of(load_workflow())
|
|
135
136
|
if step.get("run")
|