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.
Files changed (315) hide show
  1. {simplicio_loop-3.35.0/simplicio_loop.egg-info → simplicio_loop-3.36.0}/PKG-INFO +1 -1
  2. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/README.md +33 -0
  3. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/pyproject.toml +69 -69
  4. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/__init__.py +18 -18
  5. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/orchestration.md +23 -0
  6. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/planning-gate.md +12 -2
  7. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/quality-safety-delivery.md +16 -0
  8. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/orchestration.md +23 -0
  9. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/quality-safety-delivery.md +16 -0
  10. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/merge_executor.py +36 -2
  11. simplicio_loop-3.36.0/simplicio_loop/pr_patrol.py +276 -0
  12. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runner.py +10 -6
  13. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0/simplicio_loop.egg-info}/PKG-INFO +1 -1
  14. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/SOURCES.txt +7 -0
  15. simplicio_loop-3.36.0/tests/test_copilot_global_unit.py +65 -0
  16. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_183_dod_system.py +52 -38
  17. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_fan_out_scheduler_integration.py +4 -1
  18. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_runner_wiring_integration.py +6 -5
  19. simplicio_loop-3.36.0/tests/test_github_status_sync_unit.py +77 -0
  20. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_lib_integration.py +20 -0
  21. simplicio_loop-3.36.0/tests/test_intake_progress_integration.py +165 -0
  22. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_merge_executor_unit.py +33 -0
  23. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_oracle_perf_benchmark_unit.py +19 -0
  24. simplicio_loop-3.36.0/tests/test_pr_patrol_unit.py +102 -0
  25. simplicio_loop-3.36.0/tests/test_quality_matrix_watcher.py +216 -0
  26. simplicio_loop-3.36.0/tests/test_vscode_global_install.py +114 -0
  27. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/LICENSE +0 -0
  28. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/MANIFEST.in +0 -0
  29. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/PYPI.md +0 -0
  30. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/setup.cfg +0 -0
  31. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/README.md +0 -0
  32. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/action_gate.py +0 -0
  33. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/hooks.claude.json +0 -0
  34. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/hooks.json +0 -0
  35. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/loop_capture.py +0 -0
  36. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/loop_stop.py +0 -0
  37. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/orient_clamp.py +0 -0
  38. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/orient_rewrite.py +0 -0
  39. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/pre-commit.py +0 -0
  40. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/simplicio_dashboard.py +0 -0
  41. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/hooks/simplicio_watch.py +0 -0
  42. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/scripts/cross_agent_wiki.py +0 -0
  43. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/scripts/hierarchical_planner.py +0 -0
  44. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-autoresearch/SKILL.md +0 -0
  45. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-compress/SKILL.md +0 -0
  46. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-learn/SKILL.md +0 -0
  47. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/SKILL.md +0 -0
  48. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/agentsview-adapter.md +0 -0
  49. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/azure-devops-adapter.md +0 -0
  50. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/bound-operators.md +0 -0
  51. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/claims-gate.md +0 -0
  52. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/control-policy.md +0 -0
  53. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/cross-agent-wiki.md +0 -0
  54. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/cross-repo-integration.md +0 -0
  55. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/extension-points.md +0 -0
  56. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/hierarchical-planner.md +0 -0
  57. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/lmcache-adapter.md +0 -0
  58. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/progress-feedback.md +0 -0
  59. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/run-journal-stall-detector.md +0 -0
  60. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/spindle-handoff.md +0 -0
  61. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/standing-loop-247.md +0 -0
  62. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/token-capture.md +0 -0
  63. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/token-economy.md +0 -0
  64. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/triage-verify-detail.md +0 -0
  65. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/understand-anything-adapter.md +0 -0
  66. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/video-evidence.md +0 -0
  67. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-loop/references/web-evidence.md +0 -0
  68. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-orient/SKILL.md +0 -0
  69. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-review/SKILL.md +0 -0
  70. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/SKILL.md +0 -0
  71. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/agentsview-adapter.md +0 -0
  72. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/azure-devops-adapter.md +0 -0
  73. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/extension-points.md +0 -0
  74. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/lmcache-adapter.md +0 -0
  75. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/standing-loop-247.md +0 -0
  76. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-capture.md +0 -0
  77. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-economy.md +0 -0
  78. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/understand-anything-adapter.md +0 -0
  79. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/video-evidence.md +0 -0
  80. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/web-evidence.md +0 -0
  81. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/_bundle/tests/_selfrun.py +0 -0
  82. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/agent_contract.py +0 -0
  83. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/attempt_journal.py +0 -0
  84. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/budget.py +0 -0
  85. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/cli.py +0 -0
  86. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/control_policy.py +0 -0
  87. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/delivery.py +0 -0
  88. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/drain.py +0 -0
  89. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/driver_contract.py +0 -0
  90. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/evidence.py +0 -0
  91. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/execution_board.py +0 -0
  92. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/external_verifiers.py +0 -0
  93. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/flow_semantics.py +0 -0
  94. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/freshness.py +0 -0
  95. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/github_lifecycle.py +0 -0
  96. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/intake_contract.py +0 -0
  97. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/model_registry.py +0 -0
  98. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/model_router.py +0 -0
  99. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/ops_ledger.py +0 -0
  100. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/oracle.py +0 -0
  101. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/phase_events.py +0 -0
  102. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/plan_contract.py +0 -0
  103. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/planning_gate.py +0 -0
  104. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/progress.py +0 -0
  105. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/quality_matrix.py +0 -0
  106. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/receipt_verifier.py +0 -0
  107. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/recovery.py +0 -0
  108. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_queue.py +0 -0
  109. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_queue_server_cli.py +0 -0
  110. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_worker_cli.py +0 -0
  111. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_worker_measurement.py +0 -0
  112. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/remote_worker_supervisor_cli.py +0 -0
  113. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runtime_adapter.py +0 -0
  114. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runtime_drivers.py +0 -0
  115. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/runtime_execution_receipt.py +0 -0
  116. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/secure_transport.py +0 -0
  117. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/source_adapter.py +0 -0
  118. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/source_snapshot.py +0 -0
  119. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/source_state.py +0 -0
  120. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/task_contract.py +0 -0
  121. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/traceability_matrix.py +0 -0
  122. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/verified_delivery.py +0 -0
  123. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/work_item_claims.py +0 -0
  124. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop/worker_daemon.py +0 -0
  125. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/dependency_links.txt +0 -0
  126. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/entry_points.txt +0 -0
  127. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/requires.txt +0 -0
  128. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/simplicio_loop.egg-info/top_level.txt +0 -0
  129. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_284_lifecycle_dag_idempotence_integration.py +0 -0
  130. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_action_gate_system.py +0 -0
  131. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_agent_contract_unit.py +0 -0
  132. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_agent_identity_integration.py +0 -0
  133. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_agentsview_adapter_integration.py +0 -0
  134. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_attempt_journal_unit.py +0 -0
  135. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_autoresearch_system.py +0 -0
  136. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_az_boards_adapter_integration.py +0 -0
  137. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_batch_crash_recovery_system.py +0 -0
  138. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_budget_error_paths_unit.py +0 -0
  139. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_budget_unit.py +0 -0
  140. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_check_e2e_demo_contract_system.py +0 -0
  141. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_check_e2e_installed_system.py +0 -0
  142. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_check_loop_contract_regression.py +0 -0
  143. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_claims_audit_unit.py +0 -0
  144. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_claims_manifest_unit.py +0 -0
  145. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_clean_env_contract_integration.py +0 -0
  146. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cli_dispatch_unit.py +0 -0
  147. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cli_install_unit.py +0 -0
  148. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cli_oracle_unit.py +0 -0
  149. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_completion_oracle_matrix_unit.py +0 -0
  150. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_completion_oracle_system.py +0 -0
  151. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_control_policy_unit.py +0 -0
  152. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_cross_agent_wiki_integration.py +0 -0
  153. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_dashboard_hook_integration.py +0 -0
  154. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_concurrency_fault_injection_system.py +0 -0
  155. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_lifecycle_sandbox_e2e_system.py +0 -0
  156. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_progress_integration.py +0 -0
  157. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_reconciliation_unit.py +0 -0
  158. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_source_identity_unit.py +0 -0
  159. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_delivery_validation_unit.py +0 -0
  160. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_dispatch_batch_multi_pr_integration.py +0 -0
  161. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_dispatch_merge_wiring_integration.py +0 -0
  162. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_183_e2e_system.py +0 -0
  163. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_183_external_probe_integration.py +0 -0
  164. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_epic_evidence_system.py +0 -0
  165. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_distributed_trust_policy_unit.py +0 -0
  166. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_doctor_smoke_system.py +0 -0
  167. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_drain_cli_integration.py +0 -0
  168. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_drain_integration.py +0 -0
  169. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_driver_contract_unit.py +0 -0
  170. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_e2e_demo_audit_system.py +0 -0
  171. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_evidence_chain_integration.py +0 -0
  172. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_evidence_receipt_unit.py +0 -0
  173. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_execution_board_e2e_integration.py +0 -0
  174. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_external_verifiers_integration.py +0 -0
  175. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_fan_out_flow_system.py +0 -0
  176. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_fan_out_unit.py +0 -0
  177. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_flow_audit_integration.py +0 -0
  178. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_flow_semantics_edge_paths_unit.py +0 -0
  179. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_flow_semantics_unit.py +0 -0
  180. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_freshness_unit.py +0 -0
  181. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_gen_install_mutations_doc_unit.py +0 -0
  182. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_concurrency_e2e_system.py +0 -0
  183. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_live_e2e.py +0 -0
  184. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_readside_integration.py +0 -0
  185. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_github_lifecycle_unit.py +0 -0
  186. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_golden_mutation_regression.py +0 -0
  187. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_hbp_topics_integration.py +0 -0
  188. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_hierarchical_planner_unit.py +0 -0
  189. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_hooks_coverage_integration.py +0 -0
  190. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_impact_audit_integration.py +0 -0
  191. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_independent_watcher_integration.py +0 -0
  192. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_ci_pinning_unit.py +0 -0
  193. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_consent_regression.py +0 -0
  194. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_plan_unit.py +0 -0
  195. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_post_smoke_integration.py +0 -0
  196. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_rollback_integration.py +0 -0
  197. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_smoke_unit.py +0 -0
  198. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_transaction_unit.py +0 -0
  199. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_install_upgrade_integration.py +0 -0
  200. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_intake_impact_matrix_replan_284_unit.py +0 -0
  201. /simplicio_loop-3.35.0/tests/test_intake_progress_integration.py → /simplicio_loop-3.36.0/tests/test_intake_progress.py +0 -0
  202. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_learn_pipeline_removed_regression.py +0 -0
  203. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_ledger_cli_unit.py +0 -0
  204. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_live_issue_183_identity_system.py +0 -0
  205. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_locked_append_integration.py +0 -0
  206. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_loop_driver_run_state_e2e_system.py +0 -0
  207. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_loop_e2e_system.py +0 -0
  208. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_loop_progress_integration.py +0 -0
  209. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_maintenance_deferred_docs_integration.py +0 -0
  210. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_merge_executor_live_e2e_system.py +0 -0
  211. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_merge_queue_live_probe_integration.py +0 -0
  212. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_mirror_parity_integration.py +0 -0
  213. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_registry_unit.py +0 -0
  214. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_routed_dispatch_wiring_integration.py +0 -0
  215. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_router_fallback_unit.py +0 -0
  216. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_model_router_unit.py +0 -0
  217. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_operator_batch_integration.py +0 -0
  218. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_operator_worktree_batch_unit.py +0 -0
  219. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_ops_ledger_integration.py +0 -0
  220. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_oracle_gates_unit.py +0 -0
  221. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_oracle_source_lifecycle_gate_integration.py +0 -0
  222. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_orca_preset_integration.py +0 -0
  223. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_phase_events_unit.py +0 -0
  224. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_plan_contract_unit.py +0 -0
  225. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planes_golden_eval_regression.py +0 -0
  226. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planes_installed_e2e_system.py +0 -0
  227. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_284_enhancements_unit.py +0 -0
  228. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_execute_operator_integration.py +0 -0
  229. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_github_publish_unit.py +0 -0
  230. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_live_e2e_system.py +0 -0
  231. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_planning_gate_unit.py +0 -0
  232. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_pr_evidence_comment_publish_integration.py +0 -0
  233. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_pr_evidence_lifecycle_delegation_integration.py +0 -0
  234. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_precommit_bundle_sync_integration.py +0 -0
  235. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_preflight_unit.py +0 -0
  236. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_comment_live_e2e_system.py +0 -0
  237. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_comment_ratelimit_cli_e2e_integration.py +0 -0
  238. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_e2e_system.py +0 -0
  239. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_failopen_integration.py +0 -0
  240. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_snapshots_unit.py +0 -0
  241. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_progress_unit.py +0 -0
  242. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_provenance_generate_integration.py +0 -0
  243. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_gate_scripts_emit_json_unit.py +0 -0
  244. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_benchmark_integration.py +0 -0
  245. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_integration.py +0 -0
  246. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_regression.py +0 -0
  247. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_reverify_integration.py +0 -0
  248. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_system.py +0 -0
  249. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_quality_matrix_unit.py +0 -0
  250. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_receipt_verifier_integration.py +0 -0
  251. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_recovery_unit.py +0 -0
  252. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_release_manifest_unit.py +0 -0
  253. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_release_rehearsal_integration.py +0 -0
  254. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_release_verify_unit.py +0 -0
  255. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_cancellation_integration.py +0 -0
  256. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_integration.py +0 -0
  257. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_live_system.py +0 -0
  258. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_pull_claim_system.py +0 -0
  259. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_queue_short_lived_auth_integration.py +0 -0
  260. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_e2e_system.py +0 -0
  261. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_http_e2e_system.py +0 -0
  262. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_measurement_unit.py +0 -0
  263. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_remote_worker_supervisor_system.py +0 -0
  264. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repo_conventions_architecture_unit.py +0 -0
  265. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repo_governance_294_integration.py +0 -0
  266. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repository_budget_unit.py +0 -0
  267. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_repository_governance_unit.py +0 -0
  268. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runner_cli_integration.py +0 -0
  269. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runner_progress_events_unit.py +0 -0
  270. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runner_state_machine_unit.py +0 -0
  271. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_adapter_unit.py +0 -0
  272. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_drivers_integration.py +0 -0
  273. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_execution_receipt_unit.py +0 -0
  274. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_runtime_matrix_integration.py +0 -0
  275. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_sbom_generate_integration.py +0 -0
  276. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_schema_verify_integration.py +0 -0
  277. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_schema_verify_unit.py +0 -0
  278. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_secure_transport_fault_injection_system.py +0 -0
  279. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_secure_transport_integration.py +0 -0
  280. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_security_audit_log_unit.py +0 -0
  281. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_short_lived_credentials_unit.py +0 -0
  282. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_simplicio_mcp_runner_unit.py +0 -0
  283. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_source_adapter_protocol_unit.py +0 -0
  284. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_source_snapshot_unit.py +0 -0
  285. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_source_state_unit.py +0 -0
  286. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_system_276_e2e_system.py +0 -0
  287. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_system_check_system.py +0 -0
  288. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_system_clean_install_system.py +0 -0
  289. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_backlog_unit.py +0 -0
  290. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_contract_cli_integration.py +0 -0
  291. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_contract_routing_unit.py +0 -0
  292. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_contract_unit.py +0 -0
  293. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_task_to_delivery_golden_corpus_regression.py +0 -0
  294. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_test_categories_unit.py +0 -0
  295. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_token_budget_unit.py +0 -0
  296. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_toon_codec_unit.py +0 -0
  297. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_transcript_progress_e2e_system.py +0 -0
  298. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_transcript_progress_unit.py +0 -0
  299. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_turn_progress_integration.py +0 -0
  300. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_verified_delivery_dispatch_wiring_integration.py +0 -0
  301. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_verified_delivery_unit.py +0 -0
  302. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_verify_adapters_integration.py +0 -0
  303. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_version_sync_unit.py +0 -0
  304. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_watcher_binding_unit.py +0 -0
  305. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_watcher_challenge_generation_integration.py +0 -0
  306. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_watcher_quality_gate_reverify_unit.py +0 -0
  307. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_work_item_claims_chaos_system.py +0 -0
  308. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_work_item_claims_run_guarded_integration.py +0 -0
  309. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_work_item_claims_unit.py +0 -0
  310. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_cli_contract_integration.py +0 -0
  311. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_daemon_unit.py +0 -0
  312. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_selftests_system.py +0 -0
  313. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_worker_smoke_system.py +0 -0
  314. {simplicio_loop-3.35.0 → simplicio_loop-3.36.0}/tests/test_workitem_attempts_integration.py +0 -0
  315. {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.35.0
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.35.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
+ [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.35.0"
17
- except Exception: # pragma: no cover
18
- __version__ = "3.35.0"
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=1`, the auto-build step also captures a fresh source
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 remaining scope.
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