simplicio-loop 3.35.0__tar.gz → 3.36.0__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.
- {simplicio_loop-3.35.0/simplicio_loop.egg-info → simplicio_loop-3.36.0}/PKG-INFO +1 -1
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/README.md +33 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/pyproject.toml +69 -69
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/__init__.py +18 -18
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/orchestration.md +23 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/planning-gate.md +12 -2
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/quality-safety-delivery.md +16 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/orchestration.md +23 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/quality-safety-delivery.md +16 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/merge_executor.py +36 -2
- simplicio_loop-3.36.0/simplicio_loop/pr_patrol.py +276 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runner.py +10 -6
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0/simplicio_loop.egg-info}/PKG-INFO +1 -1
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/SOURCES.txt +7 -0
- simplicio_loop-3.36.0/tests/test_copilot_global_unit.py +65 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_183_dod_system.py +52 -38
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_fan_out_scheduler_integration.py +4 -1
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_runner_wiring_integration.py +6 -5
- simplicio_loop-3.36.0/tests/test_github_status_sync_unit.py +77 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_lib_integration.py +20 -0
- simplicio_loop-3.36.0/tests/test_intake_progress_integration.py +165 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_merge_executor_unit.py +33 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_oracle_perf_benchmark_unit.py +19 -0
- simplicio_loop-3.36.0/tests/test_pr_patrol_unit.py +102 -0
- simplicio_loop-3.36.0/tests/test_quality_matrix_watcher.py +216 -0
- simplicio_loop-3.36.0/tests/test_vscode_global_install.py +114 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/LICENSE +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/MANIFEST.in +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/PYPI.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/setup.cfg +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/README.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/action_gate.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/hooks.claude.json +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/hooks.json +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/loop_capture.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/loop_stop.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/orient_clamp.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/orient_rewrite.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/pre-commit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/simplicio_dashboard.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/simplicio_watch.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/scripts/cross_agent_wiki.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/scripts/hierarchical_planner.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-autoresearch/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-compress/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-learn/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/agentsview-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/azure-devops-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/bound-operators.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/claims-gate.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/control-policy.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/cross-agent-wiki.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/cross-repo-integration.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/extension-points.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/hierarchical-planner.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/lmcache-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/progress-feedback.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/run-journal-stall-detector.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/spindle-handoff.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/standing-loop-247.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/token-capture.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/token-economy.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/triage-verify-detail.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/understand-anything-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/video-evidence.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/web-evidence.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-orient/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-review/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/SKILL.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/agentsview-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/azure-devops-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/extension-points.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/lmcache-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/standing-loop-247.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-capture.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-economy.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/understand-anything-adapter.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/video-evidence.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/web-evidence.md +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/tests/_selfrun.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/agent_contract.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/attempt_journal.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/budget.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/cli.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/control_policy.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/delivery.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/drain.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/driver_contract.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/evidence.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/execution_board.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/external_verifiers.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/flow_semantics.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/freshness.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/github_lifecycle.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/intake_contract.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/model_registry.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/model_router.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/ops_ledger.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/oracle.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/phase_events.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/plan_contract.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/planning_gate.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/progress.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/quality_matrix.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/receipt_verifier.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/recovery.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_queue.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_queue_server_cli.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_worker_cli.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_worker_measurement.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_worker_supervisor_cli.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runtime_adapter.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runtime_drivers.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runtime_execution_receipt.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/secure_transport.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/source_adapter.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/source_snapshot.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/source_state.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/task_contract.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/traceability_matrix.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/verified_delivery.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/work_item_claims.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/worker_daemon.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/dependency_links.txt +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/entry_points.txt +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/requires.txt +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/top_level.txt +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_284_lifecycle_dag_idempotence_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_action_gate_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_agent_contract_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_agent_identity_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_agentsview_adapter_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_attempt_journal_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_autoresearch_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_az_boards_adapter_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_batch_crash_recovery_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_budget_error_paths_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_budget_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_check_e2e_demo_contract_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_check_e2e_installed_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_check_loop_contract_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_claims_audit_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_claims_manifest_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_clean_env_contract_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cli_dispatch_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cli_install_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cli_oracle_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_completion_oracle_matrix_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_completion_oracle_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_control_policy_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cross_agent_wiki_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_dashboard_hook_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_concurrency_fault_injection_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_lifecycle_sandbox_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_progress_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_reconciliation_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_source_identity_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_validation_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_dispatch_batch_multi_pr_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_dispatch_merge_wiring_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_183_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_183_external_probe_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_epic_evidence_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_trust_policy_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_doctor_smoke_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_drain_cli_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_drain_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_driver_contract_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_e2e_demo_audit_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_evidence_chain_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_evidence_receipt_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_execution_board_e2e_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_external_verifiers_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_fan_out_flow_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_fan_out_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_flow_audit_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_flow_semantics_edge_paths_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_flow_semantics_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_freshness_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_gen_install_mutations_doc_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_concurrency_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_live_e2e.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_readside_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_golden_mutation_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_hbp_topics_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_hierarchical_planner_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_hooks_coverage_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_impact_audit_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_independent_watcher_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_ci_pinning_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_consent_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_plan_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_post_smoke_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_rollback_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_smoke_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_transaction_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_upgrade_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_intake_impact_matrix_replan_284_unit.py +0 -0
- /simplicio_loop-3.35.0/tests/test_intake_progress_integration.py → /simplicio_loop-3.36.0/tests/test_intake_progress.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_learn_pipeline_removed_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_ledger_cli_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_live_issue_183_identity_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_locked_append_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_loop_driver_run_state_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_loop_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_loop_progress_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_maintenance_deferred_docs_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_merge_executor_live_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_merge_queue_live_probe_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_mirror_parity_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_registry_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_routed_dispatch_wiring_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_router_fallback_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_router_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_operator_batch_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_operator_worktree_batch_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_ops_ledger_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_oracle_gates_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_oracle_source_lifecycle_gate_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_orca_preset_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_phase_events_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_plan_contract_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planes_golden_eval_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planes_installed_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_284_enhancements_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_execute_operator_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_github_publish_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_live_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_pr_evidence_comment_publish_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_pr_evidence_lifecycle_delegation_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_precommit_bundle_sync_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_preflight_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_comment_live_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_comment_ratelimit_cli_e2e_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_failopen_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_snapshots_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_provenance_generate_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_gate_scripts_emit_json_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_benchmark_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_reverify_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_receipt_verifier_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_recovery_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_release_manifest_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_release_rehearsal_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_release_verify_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_cancellation_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_live_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_pull_claim_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_short_lived_auth_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_http_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_measurement_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_supervisor_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repo_conventions_architecture_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repo_governance_294_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repository_budget_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repository_governance_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runner_cli_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runner_progress_events_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runner_state_machine_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_adapter_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_drivers_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_execution_receipt_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_matrix_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_sbom_generate_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_schema_verify_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_schema_verify_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_secure_transport_fault_injection_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_secure_transport_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_security_audit_log_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_short_lived_credentials_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_simplicio_mcp_runner_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_source_adapter_protocol_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_source_snapshot_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_source_state_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_system_276_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_system_check_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_system_clean_install_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_backlog_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_contract_cli_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_contract_routing_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_contract_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_to_delivery_golden_corpus_regression.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_test_categories_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_token_budget_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_toon_codec_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_transcript_progress_e2e_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_transcript_progress_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_turn_progress_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_verified_delivery_dispatch_wiring_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_verified_delivery_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_verify_adapters_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_version_sync_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_watcher_binding_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_watcher_challenge_generation_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_watcher_quality_gate_reverify_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_work_item_claims_chaos_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_work_item_claims_run_guarded_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_work_item_claims_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_cli_contract_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_daemon_unit.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_selftests_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_smoke_system.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_workitem_attempts_integration.py +0 -0
- {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worktree_queue_integration.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simplicio-loop
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.36.0
|
|
4
4
|
Summary: The Universal Looping AI Orchestrator — a runtime-agnostic super-plugin (7 skills) that drains any queue of work end-to-end on any LLM/runtime.
|
|
5
5
|
Author-email: Wesley Simplicio <wesleybob4@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -678,3 +678,36 @@ opt-in capabilities you reach for when the task calls for them.
|
|
|
678
678
|
## 📄 License
|
|
679
679
|
|
|
680
680
|
MIT
|
|
681
|
+
|
|
682
|
+
<!-- simplicio-loop:github-comment-coordination:v1 -->
|
|
683
|
+
## 🌐 GitHub comment coordination across runtimes
|
|
684
|
+
|
|
685
|
+
`simplicio-loop` can run at the same time in Claude Code, Codex, Cursor, Gemini, and Hermes. When a run is bound to a GitHub issue, it publishes idempotent lifecycle updates to that issue's canonical comment: claim, plan, progress, evidence, PR, and close. Agents on different machines can coordinate through the same GitHub thread without a shared local filesystem.
|
|
686
|
+
|
|
687
|
+
```powershell
|
|
688
|
+
pwsh scripts/install.ps1 claude -Global
|
|
689
|
+
pwsh scripts/install.ps1 codex -Global
|
|
690
|
+
pwsh scripts/install.ps1 cursor -Global
|
|
691
|
+
pwsh scripts/install.ps1 gemini -Global
|
|
692
|
+
pwsh scripts/install.ps1 hermes -Global # legacy alias for simplicio_agent
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
Local queues, leases, worktrees, heartbeats, and evidence remain active on every machine; GitHub comments are the shared coordination projection. This flow is GitHub-only: Jira, Azure DevOps, and other trackers do not receive these comments. If GitHub is unavailable or unauthenticated, the loop remains usable locally and records the sync failure without inventing a remote acknowledgment. Give every runtime GitHub access and bind runs to the same `source_issue`.
|
|
696
|
+
|
|
697
|
+
The repository workflow `.github/workflows/simplicio-status-sync.yml` turns the canonical lifecycle
|
|
698
|
+
state into a managed `simplicio:status:<state>` label and, when configured, moves the issue in a
|
|
699
|
+
GitHub Projects v2 Status field. It is runtime-neutral: the same workflow accepts Claude, Codex,
|
|
700
|
+
Cursor, Gemini, Kiro, Antigravity, Hermes/Simplicio Agent, OpenClaw, and future providers. Set
|
|
701
|
+
these repository variables to enable Project v2 movement:
|
|
702
|
+
|
|
703
|
+
```text
|
|
704
|
+
SIMPLICIO_PROJECT_NUMBER # project number, for example 7
|
|
705
|
+
SIMPLICIO_PROJECT_OWNER # optional; defaults to the repository owner
|
|
706
|
+
SIMPLICIO_PROJECT_OWNER_TYPE # organization (default) or user
|
|
707
|
+
SIMPLICIO_PROJECT_STATUS_FIELD # optional; defaults to Status
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
Labels still update when no Project is configured. Human comments do not move cards; only the
|
|
711
|
+
marked Simplicio lifecycle comment, issue open/close/reopen events, or an explicit workflow
|
|
712
|
+
dispatch can change the status. The workflow uses `issues: write` and `repository-projects: write`
|
|
713
|
+
and never posts a second coordination comment.
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=68", "wheel"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "simplicio-loop"
|
|
7
|
-
version = "3.
|
|
8
|
-
description = "The Universal Looping AI Orchestrator — a runtime-agnostic super-plugin (7 skills) that drains any queue of work end-to-end on any LLM/runtime."
|
|
9
|
-
readme = "PYPI.md"
|
|
10
|
-
requires-python = ">=3.8"
|
|
11
|
-
license = { text = "MIT" }
|
|
12
|
-
authors = [{ name = "Wesley Simplicio", email = "wesleybob4@gmail.com" }]
|
|
13
|
-
keywords = ["ai", "agent", "orchestrator", "llm", "claude", "cursor", "automation", "ralph-loop", "token-economy", "cli"]
|
|
14
|
-
classifiers = [
|
|
15
|
-
"Development Status :: 4 - Beta",
|
|
16
|
-
"Intended Audience :: Developers",
|
|
17
|
-
"License :: OSI Approved :: MIT License",
|
|
18
|
-
"Programming Language :: Python :: 3",
|
|
19
|
-
"Programming Language :: Python :: 3 :: Only",
|
|
20
|
-
"Topic :: Software Development :: Build Tools",
|
|
21
|
-
"Topic :: Utilities",
|
|
22
|
-
"Operating System :: OS Independent",
|
|
23
|
-
]
|
|
24
|
-
# The simplicio-loop drive requires the operator package (`simplicio-cli`), which exposes
|
|
25
|
-
# `simplicio-dev-cli` and also brings the survey binary `simplicio-mapper` transitively.
|
|
26
|
-
dependencies = [
|
|
27
|
-
"simplicio-cli>=0.16.1",
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
# Optional: the real embedding backend for `simplicio-cli semantic --ml` / `simplicio-cli rag --ml`.
|
|
31
|
-
# The native engine itself is stdlib-only; this only enables embedding-based semantic dedup +
|
|
32
|
-
# meaning retrieval. `pip install "simplicio-loop[ml]"`.
|
|
33
|
-
[project.optional-dependencies]
|
|
34
|
-
# Dev/test: the suite ALSO self-runs on bare python3 (`python3 scripts/check.py`), so pytest is
|
|
35
|
-
# only a convenience for nicer output / IDE integration — never required.
|
|
36
|
-
dev = ["pytest>=7", "pytest-cov>=4"]
|
|
37
|
-
ml = ["model2vec>=0.3", "numpy>=1.21"]
|
|
38
|
-
|
|
39
|
-
[project.urls]
|
|
40
|
-
Homepage = "https://github.com/wesleysimplicio/simplicio-loop"
|
|
41
|
-
Repository = "https://github.com/wesleysimplicio/simplicio-loop"
|
|
42
|
-
Issues = "https://github.com/wesleysimplicio/simplicio-loop/issues"
|
|
43
|
-
|
|
44
|
-
[project.scripts]
|
|
45
|
-
simplicio-loop = "simplicio_loop.cli:main"
|
|
46
|
-
# issue #286 step 11: the multi-device remote-worker protocol's server + worker + supervisor
|
|
47
|
-
# are genuinely installable binaries, not source that only runs from a git checkout.
|
|
48
|
-
simplicio-remote-queue-server = "simplicio_loop.remote_queue_server_cli:main"
|
|
49
|
-
simplicio-remote-worker = "simplicio_loop.remote_worker_cli:main"
|
|
50
|
-
simplicio-remote-worker-supervisor = "simplicio_loop.remote_worker_supervisor_cli:main"
|
|
51
|
-
|
|
52
|
-
[tool.setuptools]
|
|
53
|
-
packages = ["simplicio_loop"]
|
|
54
|
-
include-package-data = true
|
|
55
|
-
|
|
56
|
-
[tool.setuptools.package-data]
|
|
57
|
-
simplicio_loop = ["_bundle/**/*"]
|
|
58
|
-
|
|
59
|
-
[tool.coverage.run]
|
|
60
|
-
source = ["simplicio_loop"]
|
|
61
|
-
omit = [
|
|
62
|
-
"simplicio_loop/_bundle/*",
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
[tool.coverage.report]
|
|
66
|
-
exclude_lines = [
|
|
67
|
-
"pragma: no cover",
|
|
68
|
-
"if __name__ == .__main__.:",
|
|
69
|
-
]
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "simplicio-loop"
|
|
7
|
+
version = "3.36.0"
|
|
8
|
+
description = "The Universal Looping AI Orchestrator — a runtime-agnostic super-plugin (7 skills) that drains any queue of work end-to-end on any LLM/runtime."
|
|
9
|
+
readme = "PYPI.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "Wesley Simplicio", email = "wesleybob4@gmail.com" }]
|
|
13
|
+
keywords = ["ai", "agent", "orchestrator", "llm", "claude", "cursor", "automation", "ralph-loop", "token-economy", "cli"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"License :: OSI Approved :: MIT License",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
20
|
+
"Topic :: Software Development :: Build Tools",
|
|
21
|
+
"Topic :: Utilities",
|
|
22
|
+
"Operating System :: OS Independent",
|
|
23
|
+
]
|
|
24
|
+
# The simplicio-loop drive requires the operator package (`simplicio-cli`), which exposes
|
|
25
|
+
# `simplicio-dev-cli` and also brings the survey binary `simplicio-mapper` transitively.
|
|
26
|
+
dependencies = [
|
|
27
|
+
"simplicio-cli>=0.16.1",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
# Optional: the real embedding backend for `simplicio-cli semantic --ml` / `simplicio-cli rag --ml`.
|
|
31
|
+
# The native engine itself is stdlib-only; this only enables embedding-based semantic dedup +
|
|
32
|
+
# meaning retrieval. `pip install "simplicio-loop[ml]"`.
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
# Dev/test: the suite ALSO self-runs on bare python3 (`python3 scripts/check.py`), so pytest is
|
|
35
|
+
# only a convenience for nicer output / IDE integration — never required.
|
|
36
|
+
dev = ["pytest>=7", "pytest-cov>=4"]
|
|
37
|
+
ml = ["model2vec>=0.3", "numpy>=1.21"]
|
|
38
|
+
|
|
39
|
+
[project.urls]
|
|
40
|
+
Homepage = "https://github.com/wesleysimplicio/simplicio-loop"
|
|
41
|
+
Repository = "https://github.com/wesleysimplicio/simplicio-loop"
|
|
42
|
+
Issues = "https://github.com/wesleysimplicio/simplicio-loop/issues"
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
simplicio-loop = "simplicio_loop.cli:main"
|
|
46
|
+
# issue #286 step 11: the multi-device remote-worker protocol's server + worker + supervisor
|
|
47
|
+
# are genuinely installable binaries, not source that only runs from a git checkout.
|
|
48
|
+
simplicio-remote-queue-server = "simplicio_loop.remote_queue_server_cli:main"
|
|
49
|
+
simplicio-remote-worker = "simplicio_loop.remote_worker_cli:main"
|
|
50
|
+
simplicio-remote-worker-supervisor = "simplicio_loop.remote_worker_supervisor_cli:main"
|
|
51
|
+
|
|
52
|
+
[tool.setuptools]
|
|
53
|
+
packages = ["simplicio_loop"]
|
|
54
|
+
include-package-data = true
|
|
55
|
+
|
|
56
|
+
[tool.setuptools.package-data]
|
|
57
|
+
simplicio_loop = ["_bundle/**/*"]
|
|
58
|
+
|
|
59
|
+
[tool.coverage.run]
|
|
60
|
+
source = ["simplicio_loop"]
|
|
61
|
+
omit = [
|
|
62
|
+
"simplicio_loop/_bundle/*",
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
[tool.coverage.report]
|
|
66
|
+
exclude_lines = [
|
|
67
|
+
"pragma: no cover",
|
|
68
|
+
"if __name__ == .__main__.:",
|
|
69
|
+
]
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"""simplicio-loop — The Universal Looping AI Orchestrator.
|
|
2
|
-
|
|
3
|
-
A runtime-agnostic super-plugin (7 skills + loop/token hooks) that drains any
|
|
4
|
-
queue of work end-to-end on any LLM/runtime. This package ships the skills and
|
|
5
|
-
hooks and installs them into a runtime's skills location.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
# Single source of truth = the package metadata (pyproject `version`); the literal is only a
|
|
9
|
-
# fallback for an editable/source checkout that was never installed. No more version drift.
|
|
10
|
-
try:
|
|
11
|
-
from importlib.metadata import version as _v, PackageNotFoundError
|
|
12
|
-
|
|
13
|
-
try:
|
|
14
|
-
__version__ = _v("simplicio-loop")
|
|
15
|
-
except PackageNotFoundError:
|
|
16
|
-
__version__ = "3.
|
|
17
|
-
except Exception: # pragma: no cover
|
|
18
|
-
__version__ = "3.
|
|
1
|
+
"""simplicio-loop — The Universal Looping AI Orchestrator.
|
|
2
|
+
|
|
3
|
+
A runtime-agnostic super-plugin (7 skills + loop/token hooks) that drains any
|
|
4
|
+
queue of work end-to-end on any LLM/runtime. This package ships the skills and
|
|
5
|
+
hooks and installs them into a runtime's skills location.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
# Single source of truth = the package metadata (pyproject `version`); the literal is only a
|
|
9
|
+
# fallback for an editable/source checkout that was never installed. No more version drift.
|
|
10
|
+
try:
|
|
11
|
+
from importlib.metadata import version as _v, PackageNotFoundError
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
__version__ = _v("simplicio-loop")
|
|
15
|
+
except PackageNotFoundError:
|
|
16
|
+
__version__ = "3.36.0"
|
|
17
|
+
except Exception: # pragma: no cover
|
|
18
|
+
__version__ = "3.36.0"
|
|
@@ -146,6 +146,29 @@ review/requested-changes, branches behind main) → reopen the feedback loop (St
|
|
|
146
146
|
`dry=0` whenever the poll finds anything new.** The run FINISHES only when queue empty AND no
|
|
147
147
|
worker busy AND `dry >= 2` consecutive empty polls (plus hard stops: time-box, scope, STOP).
|
|
148
148
|
|
|
149
|
+
**PR patrol cadence (mandatory, non-blocking).** After every **two** work-items are delivered
|
|
150
|
+
and their PRs are open, run the read-only patrol before starting the next delivery wave:
|
|
151
|
+
`python3 scripts/pr_patrol.py --repo <owner/name> --completed-items <N>`. It classifies open
|
|
152
|
+
PRs as conflict/rebase, review-required/requested-changes, failed checks, or clean; every
|
|
153
|
+
actionable result returns to Step 6b instead of being deferred. Run the same patrol with
|
|
154
|
+
`--final` before the run can claim completion. It is a priority signal, not a queue lock: local
|
|
155
|
+
work may continue while independent PR repair workers run.
|
|
156
|
+
|
|
157
|
+
**Cross-agent acceptance review.** A patrol may review PRs opened by any provider (Claude,
|
|
158
|
+
Codex, Cursor, Gemini, Kiro, Antigravity, Hermes/Simplicio Agent, OpenClaw, or a human). Fetch
|
|
159
|
+
the review packet first, inspect the diff against the explicit AC checklist and its evidence, then
|
|
160
|
+
publish/update exactly one marked PR comment:
|
|
161
|
+
`python3 scripts/pr_patrol.py review --repo <owner/name> --pr <N> --verdict accepted|changes_requested|unverified --note "<concrete evidence>" --publish`.
|
|
162
|
+
`accepted` is rejected unless every explicit criterion is checked and carries evidence; this is a
|
|
163
|
+
coordination receipt, **not** an automatic GitHub approval. Missing ACs/evidence must be commented
|
|
164
|
+
as `unverified`, never silently accepted. Conflict/rebase/failed-check findings return to Step 6b.
|
|
165
|
+
|
|
166
|
+
**GitHub issue signature before work.** Before any provider starts an issue, it must claim/sign
|
|
167
|
+
the source issue with the canonical `CLAIMED` lifecycle comment (worker/run/attempt identity and
|
|
168
|
+
goal) using `github_lifecycle.py publish`. Do this before editing or opening a worktree; never
|
|
169
|
+
take an issue already claimed by another live worker. PR reviewers keep the issue lifecycle state
|
|
170
|
+
intact and sign their independent AC assessment on the PR comment instead.
|
|
171
|
+
|
|
149
172
|
**agentsview (optional).** If configured (`scripts/agentsview_adapter.py` authed), poll
|
|
150
173
|
agentsview for stalled sessions each cycle and convert them into work-items of type 'resume
|
|
151
174
|
abandoned session'.
|
|
@@ -61,7 +61,7 @@ with the reason code and message embedded — never a silent pass.
|
|
|
61
61
|
## GitHub source drift and replanning
|
|
62
62
|
|
|
63
63
|
When a GitHub `source_issue` is present on the run state and
|
|
64
|
-
`SIMPLICIO_LOOP_GITHUB_LIFECYCLE_SYNC
|
|
64
|
+
`SIMPLICIO_LOOP_GITHUB_LIFECYCLE_SYNC` is not explicitly falsy, the auto-build step also captures a fresh source
|
|
65
65
|
snapshot (`source_snapshot.py::capture_github_issue_snapshot()`) and folds its hash into the
|
|
66
66
|
mutation-authority identity, and publishes the receipt as a `PLANNED`/`BLOCKED` state on the
|
|
67
67
|
canonical issue comment via `publish_planning_receipt()`. An issue edited between planning and
|
|
@@ -83,6 +83,16 @@ configured.
|
|
|
83
83
|
|
|
84
84
|
## Opting out (temporary, legacy callers only)
|
|
85
85
|
|
|
86
|
+
GitHub lifecycle coordination is enabled by default for every real run with a
|
|
87
|
+
`source_issue`, so different machines coordinate through the same canonical
|
|
88
|
+
idempotent issue comment. Set the following only for an intentionally offline or
|
|
89
|
+
legacy local run; the runtime records the missing remote coordination rather than
|
|
90
|
+
pretending that the issue was synchronized:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
export SIMPLICIO_LOOP_GITHUB_LIFECYCLE_SYNC=0
|
|
94
|
+
```
|
|
95
|
+
|
|
86
96
|
```bash
|
|
87
97
|
export SIMPLICIO_LOOP_AUTO_PLANNING_RECEIPT=0 # arm_run() stops self-building the receipt
|
|
88
98
|
export SIMPLICIO_REQUIRE_MUTATION_AUTHORITY=0 # execute_operator()/batch stop requiring one
|
|
@@ -99,4 +109,4 @@ This gate covers the mutation-authority boundary; it does not yet implement the
|
|
|
99
109
|
`simplicio.task-intake/v1` envelope (scope in/out, dependencies, risks, rollback), a persisted
|
|
100
110
|
`impact-map.json`, the bidirectional AC↔step↔test↔evidence matrix as its own artifact, or
|
|
101
111
|
automatic (not opt-in) GitHub `CLAIMED`/`PLANNED` comment publishing on every real run. See the
|
|
102
|
-
issue for the full
|
|
112
|
+
issue for the remaining lifecycle states and full scope.
|
|
@@ -219,6 +219,10 @@ Status: done | partial | blocked
|
|
|
219
219
|
|
|
220
220
|
## Step 6b — Close the feedback loop until merge-ready
|
|
221
221
|
Opening a Draft PR is `dev_done`, NOT `merge_ready`. Pursue these loops, POLLED like intake:
|
|
222
|
+
0. **Cadenced PR patrol → route.** Every two delivered items with open PRs, run
|
|
223
|
+
`python3 scripts/pr_patrol.py --repo <owner/name> --completed-items <N>`. Before declaring the
|
|
224
|
+
body of work finished, run it with `--final`. It is read-only and does not block independent
|
|
225
|
+
workers; its actionable rows become normal Step 6b repair/review work.
|
|
222
226
|
1. **CI → fix.** Check status; on a failed check fetch the log, parse via `diagnostics`, fix the
|
|
223
227
|
ROOT CAUSE, push. Loop until green. Never disable a test to go green.
|
|
224
228
|
2. **Review comments → adjust.** Read PR review threads + the source item's comments. For each
|
|
@@ -234,6 +238,18 @@ Opening a Draft PR is `dev_done`, NOT `merge_ready`. Pursue these loops, POLLED
|
|
|
234
238
|
messages, paths, and identifiers in English.
|
|
235
239
|
5. **Merge-readiness.** `merge_ready` only when CI green AND review approved AND ACs met.
|
|
236
240
|
`done` in the tracker ≠ merge-ready.
|
|
241
|
+
6. **After every merge → re-patrol siblings.** A merge changes `main` and can make another open
|
|
242
|
+
PR behind or conflicting. `MergeExecutor.merge()` automatically emits a post-merge patrol
|
|
243
|
+
receipt; standalone flows must run `python3 scripts/pr_patrol.py --repo <owner/name>
|
|
244
|
+
--post-merge` and route every actionable sibling back through this section before another
|
|
245
|
+
completion claim.
|
|
246
|
+
7. **Review any provider's PR against its ACs.** Before a reviewer writes a verdict, load the
|
|
247
|
+
PR packet/diff and compare it with the explicit AC checklist and evidence. Publish one
|
|
248
|
+
idempotent PR comment through `scripts/pr_patrol.py review ... --publish`: `accepted` only with
|
|
249
|
+
fully evidenced ACs, otherwise `changes_requested` or `unverified` with a concrete note. Never
|
|
250
|
+
auto-approve a PR. The implementation worker must have signed/claimed the source GitHub issue
|
|
251
|
+
before mutation; a reviewer comment is a separate coordination receipt and does not steal that
|
|
252
|
+
lease.
|
|
237
253
|
|
|
238
254
|
The Step 3b watcher therefore polls THREE things: new work-items, open PRs (comments/checks), and
|
|
239
255
|
branches behind the default branch.
|
|
@@ -146,6 +146,29 @@ review/requested-changes, branches behind main) → reopen the feedback loop (St
|
|
|
146
146
|
`dry=0` whenever the poll finds anything new.** The run FINISHES only when queue empty AND no
|
|
147
147
|
worker busy AND `dry >= 2` consecutive empty polls (plus hard stops: time-box, scope, STOP).
|
|
148
148
|
|
|
149
|
+
**PR patrol cadence (mandatory, non-blocking).** After every **two** work-items are delivered
|
|
150
|
+
and their PRs are open, run the read-only patrol before starting the next delivery wave:
|
|
151
|
+
`python3 scripts/pr_patrol.py --repo <owner/name> --completed-items <N>`. It classifies open
|
|
152
|
+
PRs as conflict/rebase, review-required/requested-changes, failed checks, or clean; every
|
|
153
|
+
actionable result returns to Step 6b instead of being deferred. Run the same patrol with
|
|
154
|
+
`--final` before the run can claim completion. It is a priority signal, not a queue lock: local
|
|
155
|
+
work may continue while independent PR repair workers run.
|
|
156
|
+
|
|
157
|
+
**Cross-agent acceptance review.** A patrol may review PRs opened by any provider (Claude,
|
|
158
|
+
Codex, Cursor, Gemini, Kiro, Antigravity, Hermes/Simplicio Agent, OpenClaw, or a human). Fetch
|
|
159
|
+
the review packet first, inspect the diff against the explicit AC checklist and its evidence, then
|
|
160
|
+
publish/update exactly one marked PR comment:
|
|
161
|
+
`python3 scripts/pr_patrol.py review --repo <owner/name> --pr <N> --verdict accepted|changes_requested|unverified --note "<concrete evidence>" --publish`.
|
|
162
|
+
`accepted` is rejected unless every explicit criterion is checked and carries evidence; this is a
|
|
163
|
+
coordination receipt, **not** an automatic GitHub approval. Missing ACs/evidence must be commented
|
|
164
|
+
as `unverified`, never silently accepted. Conflict/rebase/failed-check findings return to Step 6b.
|
|
165
|
+
|
|
166
|
+
**GitHub issue signature before work.** Before any provider starts an issue, it must claim/sign
|
|
167
|
+
the source issue with the canonical `CLAIMED` lifecycle comment (worker/run/attempt identity and
|
|
168
|
+
goal) using `github_lifecycle.py publish`. Do this before editing or opening a worktree; never
|
|
169
|
+
take an issue already claimed by another live worker. PR reviewers keep the issue lifecycle state
|
|
170
|
+
intact and sign their independent AC assessment on the PR comment instead.
|
|
171
|
+
|
|
149
172
|
**agentsview (optional).** If configured (`scripts/agentsview_adapter.py` authed), poll
|
|
150
173
|
agentsview for stalled sessions each cycle and convert them into work-items of type 'resume
|
|
151
174
|
abandoned session'.
|
|
@@ -219,6 +219,10 @@ Status: done | partial | blocked
|
|
|
219
219
|
|
|
220
220
|
## Step 6b — Close the feedback loop until merge-ready
|
|
221
221
|
Opening a Draft PR is `dev_done`, NOT `merge_ready`. Pursue these loops, POLLED like intake:
|
|
222
|
+
0. **Cadenced PR patrol → route.** Every two delivered items with open PRs, run
|
|
223
|
+
`python3 scripts/pr_patrol.py --repo <owner/name> --completed-items <N>`. Before declaring the
|
|
224
|
+
body of work finished, run it with `--final`. It is read-only and does not block independent
|
|
225
|
+
workers; its actionable rows become normal Step 6b repair/review work.
|
|
222
226
|
1. **CI → fix.** Check status; on a failed check fetch the log, parse via `diagnostics`, fix the
|
|
223
227
|
ROOT CAUSE, push. Loop until green. Never disable a test to go green.
|
|
224
228
|
2. **Review comments → adjust.** Read PR review threads + the source item's comments. For each
|
|
@@ -234,6 +238,18 @@ Opening a Draft PR is `dev_done`, NOT `merge_ready`. Pursue these loops, POLLED
|
|
|
234
238
|
messages, paths, and identifiers in English.
|
|
235
239
|
5. **Merge-readiness.** `merge_ready` only when CI green AND review approved AND ACs met.
|
|
236
240
|
`done` in the tracker ≠ merge-ready.
|
|
241
|
+
6. **After every merge → re-patrol siblings.** A merge changes `main` and can make another open
|
|
242
|
+
PR behind or conflicting. `MergeExecutor.merge()` automatically emits a post-merge patrol
|
|
243
|
+
receipt; standalone flows must run `python3 scripts/pr_patrol.py --repo <owner/name>
|
|
244
|
+
--post-merge` and route every actionable sibling back through this section before another
|
|
245
|
+
completion claim.
|
|
246
|
+
7. **Review any provider's PR against its ACs.** Before a reviewer writes a verdict, load the
|
|
247
|
+
PR packet/diff and compare it with the explicit AC checklist and evidence. Publish one
|
|
248
|
+
idempotent PR comment through `scripts/pr_patrol.py review ... --publish`: `accepted` only with
|
|
249
|
+
fully evidenced ACs, otherwise `changes_requested` or `unverified` with a concrete note. Never
|
|
250
|
+
auto-approve a PR. The implementation worker must have signed/claimed the source GitHub issue
|
|
251
|
+
before mutation; a reviewer comment is a separate coordination receipt and does not steal that
|
|
252
|
+
lease.
|
|
237
253
|
|
|
238
254
|
The Step 3b watcher therefore polls THREE things: new work-items, open PRs (comments/checks), and
|
|
239
255
|
branches behind the default branch.
|
|
@@ -20,7 +20,7 @@ from __future__ import annotations
|
|
|
20
20
|
import json
|
|
21
21
|
import subprocess
|
|
22
22
|
import time
|
|
23
|
-
from dataclasses import dataclass
|
|
23
|
+
from dataclasses import dataclass, field
|
|
24
24
|
from typing import Any, Callable, Dict, Mapping, Optional
|
|
25
25
|
|
|
26
26
|
SCHEMA = "simplicio.merge-result/v1"
|
|
@@ -53,6 +53,7 @@ class MergeResult:
|
|
|
53
53
|
detail: str
|
|
54
54
|
merge_commit_sha: str = ""
|
|
55
55
|
base_ref: str = ""
|
|
56
|
+
post_merge_patrol: Dict[str, Any] = field(default_factory=dict)
|
|
56
57
|
|
|
57
58
|
def to_dict(self) -> Dict[str, Any]:
|
|
58
59
|
return {
|
|
@@ -65,6 +66,7 @@ class MergeResult:
|
|
|
65
66
|
"detail": self.detail,
|
|
66
67
|
"merge_commit_sha": self.merge_commit_sha,
|
|
67
68
|
"base_ref": self.base_ref,
|
|
69
|
+
"post_merge_patrol": self.post_merge_patrol,
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
|
|
@@ -161,6 +163,7 @@ class MergeExecutor:
|
|
|
161
163
|
|
|
162
164
|
def merge(self, pr_number: int, *, strategy: str = "squash", delete_branch: bool = True,
|
|
163
165
|
poll_interval: float = 2.0, mergeable_timeout: float = 120.0,
|
|
166
|
+
post_merge_patrol: bool = True,
|
|
164
167
|
sleep: Callable[[float], None] = time.sleep,
|
|
165
168
|
clock: Callable[[], float] = time.time) -> MergeResult:
|
|
166
169
|
"""Wait for mergeability, merge, then reconcile against the remote. Never raises for
|
|
@@ -192,8 +195,39 @@ class MergeExecutor:
|
|
|
192
195
|
return MergeResult(SCHEMA, pr_number, "", False, False, "RECONCILE_MISMATCH",
|
|
193
196
|
"gh pr merge exited 0 but re-query shows state=%r merge_commit=%r"
|
|
194
197
|
% (reconciled["state"], reconciled["merge_commit_sha"]))
|
|
198
|
+
patrol: Dict[str, Any] = {}
|
|
199
|
+
if post_merge_patrol:
|
|
200
|
+
# A merge changes main's conflict surface for every other open branch.
|
|
201
|
+
# Re-query them immediately; this is read-only and never changes the
|
|
202
|
+
# already-proven merged result into a fabricated failure.
|
|
203
|
+
patrol = self.patrol_open_prs()
|
|
195
204
|
return MergeResult(SCHEMA, pr_number, "", True, True, "OK", "merged and reconciled",
|
|
196
|
-
merge_commit_sha=reconciled["merge_commit_sha"], base_ref=reconciled["base_ref"]
|
|
205
|
+
merge_commit_sha=reconciled["merge_commit_sha"], base_ref=reconciled["base_ref"],
|
|
206
|
+
post_merge_patrol=patrol)
|
|
207
|
+
|
|
208
|
+
def patrol_open_prs(self) -> Dict[str, Any]:
|
|
209
|
+
"""Inspect every remaining open PR after a merge, without mutating it.
|
|
210
|
+
|
|
211
|
+
A patrol transport failure is an explicit ``unverified`` receipt rather
|
|
212
|
+
than an assumption that the other branches are conflict-free.
|
|
213
|
+
"""
|
|
214
|
+
from .pr_patrol import PrPatrol, PrPatrolError, SCHEMA as PATROL_SCHEMA
|
|
215
|
+
|
|
216
|
+
try:
|
|
217
|
+
return PrPatrol(self.repo, runner=self.runner, timeout=self.timeout).inspect(post_merge=True)
|
|
218
|
+
except PrPatrolError as exc:
|
|
219
|
+
return {
|
|
220
|
+
"schema": PATROL_SCHEMA,
|
|
221
|
+
"repo": self.repo,
|
|
222
|
+
"due": True,
|
|
223
|
+
"reason": "post_merge",
|
|
224
|
+
"status": "unverified",
|
|
225
|
+
"reason_code": "POST_MERGE_PATROL_FAILED",
|
|
226
|
+
"detail": str(exc),
|
|
227
|
+
"open_prs": [],
|
|
228
|
+
"action_required": [],
|
|
229
|
+
"clean": [],
|
|
230
|
+
}
|
|
197
231
|
|
|
198
232
|
# ------------------------------------------------------- remote-target reconciliation
|
|
199
233
|
|