simplicio-loop 3.38.0__tar.gz → 3.38.1__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 (557) hide show
  1. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/LICENSE +21 -21
  2. {simplicio_loop-3.38.0/simplicio_loop.egg-info → simplicio_loop-3.38.1}/PKG-INFO +87 -83
  3. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/PYPI.md +53 -53
  4. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/README.md +1 -1
  5. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/pyproject.toml +16 -5
  6. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/setup.cfg +4 -4
  7. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/__init__.py +2 -2
  8. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/action_gate.py +126 -27
  9. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/hooks.claude.json +20 -20
  10. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/hooks.json +11 -11
  11. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/loop_capture.py +31 -31
  12. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/loop_stop.py +165 -4
  13. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/orient_clamp.py +167 -167
  14. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/orient_rewrite.py +119 -119
  15. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/pre-commit.py +141 -141
  16. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/simplicio_dashboard.py +970 -970
  17. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/simplicio_watch.py +115 -115
  18. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/_locked_append.py +205 -0
  19. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/agent_identity.py +119 -0
  20. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/coordinator.py +388 -0
  21. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/scripts/cross_agent_wiki.py +615 -615
  22. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/delivery_contract.py +552 -0
  23. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/diff_escalation.py +307 -0
  24. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/flow_audit.py +629 -0
  25. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/handoff.py +461 -0
  26. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/scripts/hierarchical_planner.py +394 -394
  27. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/impact_audit.py +472 -0
  28. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/loop_journal.py +1026 -0
  29. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/loop_progress.py +770 -0
  30. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/operator_check.py +389 -0
  31. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/operator_preflight.py +147 -0
  32. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/pr_dod_review.py +230 -0
  33. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/route_mode.py +77 -0
  34. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/task_anchor.py +872 -0
  35. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/task_backlog.py +1458 -0
  36. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/test_infra_probe.py +378 -0
  37. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/toon_codec.py +521 -0
  38. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/video_evidence.py +465 -0
  39. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/watcher_verify.py +607 -0
  40. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/web_verify.py +280 -0
  41. simplicio_loop-3.38.1/simplicio_loop/_bundle/scripts/worktree_cleanup.py +443 -0
  42. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-autoresearch/SKILL.md +165 -165
  43. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-compress/SKILL.md +86 -86
  44. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-learn/SKILL.md +80 -80
  45. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/SKILL.md +186 -23
  46. {simplicio_loop-3.38.0/simplicio_loop/_bundle/skills/simplicio-tasks → simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-loop}/references/agentsview-adapter.md +198 -198
  47. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/azure-devops-adapter.md +69 -69
  48. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/background-verification.md +5 -0
  49. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/bound-operators.md +108 -108
  50. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/claims-gate.md +62 -62
  51. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/control-policy.md +79 -79
  52. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/cross-agent-wiki.md +40 -40
  53. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/cross-repo-integration.md +42 -42
  54. simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-loop/references/delivery-contract.md +133 -0
  55. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/extension-points.md +102 -101
  56. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/hierarchical-planner.md +39 -39
  57. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/lmcache-adapter.md +632 -632
  58. simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-loop/references/multi-agent-coordination.md +21 -0
  59. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/progress-feedback.md +153 -153
  60. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/run-journal-stall-detector.md +47 -47
  61. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/spindle-handoff.md +94 -94
  62. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/standing-loop-247.md +105 -105
  63. simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-loop/references/test-infra-probe.md +139 -0
  64. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/token-capture.md +124 -124
  65. {simplicio_loop-3.38.0/simplicio_loop/_bundle/skills/simplicio-tasks → simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-loop}/references/token-economy.md +231 -231
  66. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/triage-verify-detail.md +70 -70
  67. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/understand-anything-adapter.md +591 -591
  68. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/video-evidence.md +108 -108
  69. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/web-evidence.md +93 -93
  70. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-orient/SKILL.md +189 -189
  71. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-review/SKILL.md +104 -104
  72. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/SKILL.md +32 -32
  73. {simplicio_loop-3.38.0/simplicio_loop/_bundle/skills/simplicio-loop → simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-tasks}/references/agentsview-adapter.md +198 -198
  74. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/azure-devops-adapter.md +69 -69
  75. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/extension-points.md +102 -101
  76. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/lmcache-adapter.md +632 -632
  77. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/standing-loop-247.md +105 -105
  78. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-capture.md +124 -124
  79. {simplicio_loop-3.38.0/simplicio_loop/_bundle/skills/simplicio-loop → simplicio_loop-3.38.1/simplicio_loop/_bundle/skills/simplicio-tasks}/references/token-economy.md +231 -231
  80. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/understand-anything-adapter.md +591 -591
  81. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/video-evidence.md +108 -108
  82. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/web-evidence.md +93 -93
  83. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/tests/_selfrun.py +46 -46
  84. simplicio_loop-3.38.1/simplicio_loop/async_bounded_queue.py +208 -0
  85. simplicio_loop-3.38.1/simplicio_loop/async_io_supervisor.py +175 -0
  86. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/attempt_journal.py +251 -251
  87. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/budget.py +236 -236
  88. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/cli.py +119 -219
  89. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/control_policy.py +242 -242
  90. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/delivery.py +18 -1
  91. simplicio_loop-3.38.1/simplicio_loop/delivery_contract.py +59 -0
  92. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/drain.py +349 -349
  93. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/driver_contract.py +101 -101
  94. simplicio_loop-3.38.1/simplicio_loop/event_loop.py +80 -0
  95. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/evidence.py +399 -399
  96. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/execution_board.py +300 -300
  97. simplicio_loop-3.38.1/simplicio_loop/execution_route.py +273 -0
  98. simplicio_loop-3.38.1/simplicio_loop/extension_manifest.py +457 -0
  99. simplicio_loop-3.38.1/simplicio_loop/extension_registry.py +140 -0
  100. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/flow_semantics.py +131 -131
  101. simplicio_loop-3.38.1/simplicio_loop/github_drain_admission.py +521 -0
  102. simplicio_loop-3.38.1/simplicio_loop/github_drain_intake.py +820 -0
  103. simplicio_loop-3.38.1/simplicio_loop/github_drain_intake_cli.py +109 -0
  104. simplicio_loop-3.38.1/simplicio_loop/hub_daemon.py +934 -0
  105. simplicio_loop-3.38.1/simplicio_loop/hub_drain_admission_cli.py +79 -0
  106. simplicio_loop-3.38.1/simplicio_loop/hub_governor.py +568 -0
  107. simplicio_loop-3.38.1/simplicio_loop/hub_queue_retry.py +860 -0
  108. simplicio_loop-3.38.1/simplicio_loop/hub_scheduler.py +250 -0
  109. simplicio_loop-3.38.1/simplicio_loop/hub_service.py +242 -0
  110. simplicio_loop-3.38.1/simplicio_loop/inspection_cli.py +262 -0
  111. simplicio_loop-3.38.1/simplicio_loop/loop_runtime.py +118 -0
  112. simplicio_loop-3.38.1/simplicio_loop/map_service.py +353 -0
  113. simplicio_loop-3.38.1/simplicio_loop/map_service_cli.py +174 -0
  114. simplicio_loop-3.38.1/simplicio_loop/map_service_delivery.py +160 -0
  115. simplicio_loop-3.38.1/simplicio_loop/map_service_git.py +235 -0
  116. simplicio_loop-3.38.1/simplicio_loop/map_service_invalidation.py +94 -0
  117. simplicio_loop-3.38.1/simplicio_loop/map_service_leases.py +67 -0
  118. simplicio_loop-3.38.1/simplicio_loop/map_service_mapper.py +88 -0
  119. simplicio_loop-3.38.1/simplicio_loop/map_service_persistence.py +91 -0
  120. simplicio_loop-3.38.1/simplicio_loop/map_service_protocol.py +98 -0
  121. simplicio_loop-3.38.1/simplicio_loop/map_service_repository_watchers.py +131 -0
  122. simplicio_loop-3.38.1/simplicio_loop/map_service_single_flight.py +165 -0
  123. simplicio_loop-3.38.1/simplicio_loop/map_service_status.py +120 -0
  124. simplicio_loop-3.38.1/simplicio_loop/map_service_watchers.py +179 -0
  125. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/model_registry.py +326 -326
  126. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/ops_ledger.py +283 -283
  127. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/orca_lifecycle.py +47 -3
  128. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/phase_events.py +139 -139
  129. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/plan_contract.py +15 -2
  130. simplicio_loop-3.38.1/simplicio_loop/process_enforcement.py +513 -0
  131. simplicio_loop-3.38.1/simplicio_loop/process_enforcement_cli.py +229 -0
  132. simplicio_loop-3.38.1/simplicio_loop/process_supervisor.py +297 -0
  133. simplicio_loop-3.38.1/simplicio_loop/process_supervisor_rust.py +132 -0
  134. simplicio_loop-3.38.1/simplicio_loop/prototype_cli.py +211 -0
  135. simplicio_loop-3.38.1/simplicio_loop/prototype_fanout.py +447 -0
  136. simplicio_loop-3.38.1/simplicio_loop/prototype_gate.py +608 -0
  137. simplicio_loop-3.38.1/simplicio_loop/prototype_judge.py +421 -0
  138. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/recovery.py +393 -393
  139. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/remote_queue.py +64 -0
  140. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/remote_worker_cli.py +156 -1
  141. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/runner.py +26 -2
  142. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/runtime_adapter.py +235 -235
  143. simplicio_loop-3.38.1/simplicio_loop/source_detect.py +155 -0
  144. simplicio_loop-3.38.1/simplicio_loop/token_control_plane.py +265 -0
  145. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/verified_delivery.py +158 -158
  146. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1/simplicio_loop.egg-info}/PKG-INFO +87 -83
  147. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop.egg-info/SOURCES.txt +166 -0
  148. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop.egg-info/entry_points.txt +2 -0
  149. simplicio_loop-3.38.1/simplicio_loop.egg-info/requires.txt +16 -0
  150. simplicio_loop-3.38.1/tests/test_action_gate_issue526.py +127 -0
  151. simplicio_loop-3.38.1/tests/test_async_bounded_queue.py +305 -0
  152. simplicio_loop-3.38.1/tests/test_async_bounded_queue_integration.py +280 -0
  153. simplicio_loop-3.38.1/tests/test_async_bounded_queue_restart.py +309 -0
  154. simplicio_loop-3.38.1/tests/test_async_bounded_queue_system.py +39 -0
  155. simplicio_loop-3.38.1/tests/test_async_core_composed_integration.py +251 -0
  156. simplicio_loop-3.38.1/tests/test_async_io_supervisor.py +255 -0
  157. simplicio_loop-3.38.1/tests/test_async_io_supervisor_system.py +62 -0
  158. simplicio_loop-3.38.1/tests/test_benchmark_async_process_supervisor.py +19 -0
  159. simplicio_loop-3.38.1/tests/test_benchmark_async_queue.py +38 -0
  160. simplicio_loop-3.38.1/tests/test_benchmark_event_loop.py +51 -0
  161. simplicio_loop-3.38.1/tests/test_benchmark_hub_governor.py +34 -0
  162. simplicio_loop-3.38.1/tests/test_benchmark_hub_queue_retry.py +21 -0
  163. simplicio_loop-3.38.1/tests/test_benchmark_hub_scheduler.py +36 -0
  164. simplicio_loop-3.38.1/tests/test_benchmark_map_git_worktrees.py +33 -0
  165. simplicio_loop-3.38.1/tests/test_benchmark_map_service.py +8 -0
  166. simplicio_loop-3.38.1/tests/test_benchmark_map_single_flight.py +28 -0
  167. simplicio_loop-3.38.1/tests/test_benchmark_map_watchers.py +26 -0
  168. simplicio_loop-3.38.1/tests/test_benchmark_process_supervisor.py +35 -0
  169. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_bound_operators_runtime_required_unit.py +18 -13
  170. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_budget_error_paths_unit.py +116 -116
  171. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_check_loop_contract_regression.py +52 -52
  172. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_claims_manifest_unit.py +63 -63
  173. simplicio_loop-3.38.1/tests/test_cli_delivery.py +90 -0
  174. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_cli_dispatch_unit.py +31 -0
  175. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_cli_install_unit.py +145 -145
  176. simplicio_loop-3.38.1/tests/test_cli_preflight_runtime_optional_unit.py +33 -0
  177. simplicio_loop-3.38.1/tests/test_cli_run_delivery_choices_559_unit.py +49 -0
  178. simplicio_loop-3.38.1/tests/test_component_release_unit.py +207 -0
  179. simplicio_loop-3.38.1/tests/test_cross_repo_conformance_prototype.py +266 -0
  180. simplicio_loop-3.38.1/tests/test_deep_correctness_gate_unit.py +330 -0
  181. simplicio_loop-3.38.1/tests/test_delivery_contract.py +33 -0
  182. simplicio_loop-3.38.1/tests/test_delivery_contract_526_unit.py +335 -0
  183. simplicio_loop-3.38.1/tests/test_delivery_contract_cli_526_integration.py +251 -0
  184. simplicio_loop-3.38.1/tests/test_delivery_contract_stop_hook_526_integration.py +186 -0
  185. simplicio_loop-3.38.1/tests/test_diff_escalation.py +209 -0
  186. simplicio_loop-3.38.1/tests/test_event_loop.py +104 -0
  187. simplicio_loop-3.38.1/tests/test_execution_route_unit.py +113 -0
  188. simplicio_loop-3.38.1/tests/test_extension_manifest_unit.py +182 -0
  189. simplicio_loop-3.38.1/tests/test_extension_registry.py +143 -0
  190. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_fan_out_unit.py +141 -141
  191. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_finding_collector_unit.py +57 -0
  192. simplicio_loop-3.38.1/tests/test_finding_router.py +198 -0
  193. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_findings_cli.py +42 -0
  194. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_flow_semantics_edge_paths_unit.py +117 -117
  195. simplicio_loop-3.38.1/tests/test_github_drain_admission_projection.py +150 -0
  196. simplicio_loop-3.38.1/tests/test_github_drain_intake_cli.py +73 -0
  197. simplicio_loop-3.38.1/tests/test_github_drain_intake_integration.py +540 -0
  198. simplicio_loop-3.38.1/tests/test_github_drain_intake_map_system.py +41 -0
  199. simplicio_loop-3.38.1/tests/test_github_drain_intake_unit.py +125 -0
  200. simplicio_loop-3.38.1/tests/test_hub_daemon.py +361 -0
  201. simplicio_loop-3.38.1/tests/test_hub_daemon_map_ipc.py +190 -0
  202. simplicio_loop-3.38.1/tests/test_hub_daemon_scheduler_integration.py +189 -0
  203. simplicio_loop-3.38.1/tests/test_hub_daemon_service_ipc.py +216 -0
  204. simplicio_loop-3.38.1/tests/test_hub_drain_admission_ipc.py +477 -0
  205. simplicio_loop-3.38.1/tests/test_hub_epic496_e2e_system.py +173 -0
  206. simplicio_loop-3.38.1/tests/test_hub_governor.py +310 -0
  207. simplicio_loop-3.38.1/tests/test_hub_held_admission_queue.py +435 -0
  208. simplicio_loop-3.38.1/tests/test_hub_queue_retry.py +684 -0
  209. simplicio_loop-3.38.1/tests/test_hub_queue_retry_fair_scheduler.py +65 -0
  210. simplicio_loop-3.38.1/tests/test_hub_scheduler.py +67 -0
  211. simplicio_loop-3.38.1/tests/test_hub_scheduler_concurrency_system.py +75 -0
  212. simplicio_loop-3.38.1/tests/test_hub_scheduler_fairness.py +175 -0
  213. simplicio_loop-3.38.1/tests/test_hub_service.py +188 -0
  214. simplicio_loop-3.38.1/tests/test_hub_supervisor_epic_e2e.py +217 -0
  215. simplicio_loop-3.38.1/tests/test_hub_transport.py +571 -0
  216. simplicio_loop-3.38.0/tests/test_intake_progress.py → simplicio_loop-3.38.1/tests/test_intake_progress_integration.py +165 -165
  217. simplicio_loop-3.38.1/tests/test_issue_cron_driver_unit.py +190 -0
  218. simplicio_loop-3.38.1/tests/test_loop_runtime.py +113 -0
  219. simplicio_loop-3.38.1/tests/test_loop_stop_delivery_contract.py +75 -0
  220. simplicio_loop-3.38.1/tests/test_map_service.py +172 -0
  221. simplicio_loop-3.38.1/tests/test_map_service_cli.py +21 -0
  222. simplicio_loop-3.38.1/tests/test_map_service_delivery.py +26 -0
  223. simplicio_loop-3.38.1/tests/test_map_service_git.py +54 -0
  224. simplicio_loop-3.38.1/tests/test_map_service_git_integration.py +234 -0
  225. simplicio_loop-3.38.1/tests/test_map_service_git_mapper_system.py +45 -0
  226. simplicio_loop-3.38.1/tests/test_map_service_invalidation.py +32 -0
  227. simplicio_loop-3.38.1/tests/test_map_service_leases.py +39 -0
  228. simplicio_loop-3.38.1/tests/test_map_service_mapper_integration.py +175 -0
  229. simplicio_loop-3.38.1/tests/test_map_service_persistence.py +84 -0
  230. simplicio_loop-3.38.1/tests/test_map_service_protocol.py +43 -0
  231. simplicio_loop-3.38.1/tests/test_map_service_repository_watchers.py +38 -0
  232. simplicio_loop-3.38.1/tests/test_map_service_session_system.py +195 -0
  233. simplicio_loop-3.38.1/tests/test_map_service_single_flight.py +281 -0
  234. simplicio_loop-3.38.1/tests/test_map_service_watchers.py +224 -0
  235. simplicio_loop-3.38.1/tests/test_map_service_watchers_git_integration.py +155 -0
  236. simplicio_loop-3.38.1/tests/test_operator_check.py +289 -0
  237. simplicio_loop-3.38.1/tests/test_operator_preflight.py +79 -0
  238. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_oracle_gates_unit.py +204 -204
  239. simplicio_loop-3.38.1/tests/test_orca_lifecycle_unit.py +158 -0
  240. simplicio_loop-3.38.1/tests/test_planning_gate_string_scenarios_regression.py +32 -0
  241. simplicio_loop-3.38.1/tests/test_pr_dod_review.py +114 -0
  242. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_preflight_unit.py +20 -0
  243. simplicio_loop-3.38.1/tests/test_process_enforcement.py +332 -0
  244. simplicio_loop-3.38.1/tests/test_process_supervisor_hardening.py +108 -0
  245. simplicio_loop-3.38.1/tests/test_process_supervisor_rust.py +125 -0
  246. simplicio_loop-3.38.1/tests/test_process_supervisor_spec.py +138 -0
  247. simplicio_loop-3.38.1/tests/test_prototype_cli_unit.py +114 -0
  248. simplicio_loop-3.38.1/tests/test_prototype_fanout.py +341 -0
  249. simplicio_loop-3.38.1/tests/test_prototype_gate.py +361 -0
  250. simplicio_loop-3.38.1/tests/test_prototype_gate_adversarial.py +443 -0
  251. simplicio_loop-3.38.1/tests/test_prototype_judge.py +319 -0
  252. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_integration.py +115 -115
  253. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_regression.py +117 -117
  254. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_system.py +128 -128
  255. simplicio_loop-3.38.1/tests/test_release_manifest_unit.py +250 -0
  256. simplicio_loop-3.38.1/tests/test_release_train_system.py +91 -0
  257. simplicio_loop-3.38.1/tests/test_remote_queue_async.py +260 -0
  258. simplicio_loop-3.38.1/tests/test_remote_worker_cli_serve_async.py +168 -0
  259. simplicio_loop-3.38.1/tests/test_route_mode.py +60 -0
  260. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runner_state_machine_unit.py +38 -6
  261. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_schema_verify_integration.py +103 -103
  262. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_schema_verify_unit.py +78 -78
  263. simplicio_loop-3.38.1/tests/test_skill_scripts_present.py +65 -0
  264. simplicio_loop-3.38.1/tests/test_source_detect.py +110 -0
  265. simplicio_loop-3.38.1/tests/test_supervisor_enforcement.py +493 -0
  266. simplicio_loop-3.38.1/tests/test_task_anchor_delivery_contract.py +44 -0
  267. simplicio_loop-3.38.1/tests/test_task_anchor_infra_gate_unit.py +254 -0
  268. simplicio_loop-3.38.1/tests/test_task_anchor_prototype_gate_integration.py +129 -0
  269. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_task_contract_unit.py +146 -146
  270. simplicio_loop-3.38.1/tests/test_test_infra_probe_unit.py +204 -0
  271. simplicio_loop-3.38.1/tests/test_token_control_plane.py +150 -0
  272. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_watcher_binding_unit.py +3 -3
  273. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_watcher_quality_gate_reverify_unit.py +1 -1
  274. simplicio_loop-3.38.1/tests/test_watcher_verify_drain.py +41 -0
  275. simplicio_loop-3.38.1/tests/test_watcher_verify_wi_isolation.py +215 -0
  276. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_worker_selftests_system.py +7 -0
  277. simplicio_loop-3.38.0/simplicio_loop/_bundle/skills/simplicio-loop/references/multi-agent-coordination.md +0 -54
  278. simplicio_loop-3.38.0/simplicio_loop.egg-info/requires.txt +0 -9
  279. simplicio_loop-3.38.0/tests/test_finding_router.py +0 -68
  280. simplicio_loop-3.38.0/tests/test_orca_lifecycle_unit.py +0 -44
  281. simplicio_loop-3.38.0/tests/test_release_manifest_unit.py +0 -45
  282. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/MANIFEST.in +0 -0
  283. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/action-intent.schema.json +0 -0
  284. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/agent-instance.schema.json +0 -0
  285. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/agent-role.schema.json +0 -0
  286. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/review-finding.schema.json +0 -0
  287. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/review-receipt.schema.json +0 -0
  288. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/run-stage-graph.schema.json +0 -0
  289. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/stage-definition.schema.json +0 -0
  290. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/stage-input.schema.json +0 -0
  291. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/stage-output.schema.json +0 -0
  292. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/stage-receipt.schema.json +0 -0
  293. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/contracts/stage-agents/v1/stages.json +0 -0
  294. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/hooks/README.md +0 -0
  295. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/orchestration.md +0 -0
  296. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/planning-gate.md +0 -0
  297. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-loop/references/quality-safety-delivery.md +0 -0
  298. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/orchestration.md +0 -0
  299. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_bundle/skills/simplicio-tasks/references/quality-safety-delivery.md +0 -0
  300. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/action-intent.schema.json +0 -0
  301. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/agent-instance.schema.json +0 -0
  302. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/agent-role.schema.json +0 -0
  303. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/review-finding.schema.json +0 -0
  304. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/review-receipt.schema.json +0 -0
  305. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/run-stage-graph.schema.json +0 -0
  306. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/stage-definition.schema.json +0 -0
  307. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/stage-input.schema.json +0 -0
  308. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/stage-output.schema.json +0 -0
  309. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/stage-receipt.schema.json +0 -0
  310. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/_contracts/stage-agents/v1/stages.json +0 -0
  311. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/agent_contract.py +0 -0
  312. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/agent_identity.py +0 -0
  313. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/completion_auditor.py +0 -0
  314. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/delivery_agent.py +0 -0
  315. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/external_verifiers.py +0 -0
  316. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/feedback_recovery_agent.py +0 -0
  317. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/finding_report.py +0 -0
  318. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/finding_router.py +0 -0
  319. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/freshness.py +0 -0
  320. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/github_lifecycle.py +0 -0
  321. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/implementation_agent.py +0 -0
  322. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/intake_contract.py +0 -0
  323. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/intake_planner.py +0 -0
  324. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/merge_executor.py +0 -0
  325. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/model_router.py +0 -0
  326. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/multi_tracker_reporting.py +0 -0
  327. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/oracle.py +0 -0
  328. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/planning_gate.py +0 -0
  329. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/pr_patrol.py +0 -0
  330. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/progress.py +0 -0
  331. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/quality_matrix.py +0 -0
  332. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/receipt_verifier.py +0 -0
  333. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/remote_queue_server_cli.py +0 -0
  334. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/remote_worker_measurement.py +0 -0
  335. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/remote_worker_supervisor_cli.py +0 -0
  336. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/review_panel.py +0 -0
  337. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/runtime_drivers.py +0 -0
  338. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/runtime_execution_receipt.py +0 -0
  339. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/secure_transport.py +0 -0
  340. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/source_adapter.py +0 -0
  341. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/source_snapshot.py +0 -0
  342. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/source_state.py +0 -0
  343. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/stage_agent_coordinator.py +0 -0
  344. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/stage_agents.py +0 -0
  345. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/stage_report.py +0 -0
  346. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/task_contract.py +0 -0
  347. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/traceability_matrix.py +0 -0
  348. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/work_item_claims.py +0 -0
  349. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop/worker_daemon.py +0 -0
  350. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop.egg-info/dependency_links.txt +0 -0
  351. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/simplicio_loop.egg-info/top_level.txt +0 -0
  352. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_284_lifecycle_dag_idempotence_integration.py +0 -0
  353. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_action_gate_system.py +0 -0
  354. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_agent_contract_unit.py +0 -0
  355. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_agent_identity.py +0 -0
  356. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_agent_identity_integration.py +0 -0
  357. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_agent_replication.py +0 -0
  358. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_agentsview_adapter_integration.py +0 -0
  359. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_attempt_journal_unit.py +0 -0
  360. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_autoresearch_system.py +0 -0
  361. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_az_boards_adapter_integration.py +0 -0
  362. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_batch_crash_recovery_system.py +0 -0
  363. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_budget_unit.py +0 -0
  364. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_check_e2e_demo_contract_system.py +0 -0
  365. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_check_e2e_installed_system.py +0 -0
  366. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_claims_audit_unit.py +0 -0
  367. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_clean_env_contract_integration.py +0 -0
  368. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_cli_oracle_unit.py +0 -0
  369. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_cli_preflight_status_json_unit.py +0 -0
  370. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_completion_auditor_431_unit.py +0 -0
  371. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_completion_oracle_matrix_unit.py +0 -0
  372. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_completion_oracle_system.py +0 -0
  373. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_conformance_suite.py +0 -0
  374. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_contract_parity.py +0 -0
  375. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_control_policy_unit.py +0 -0
  376. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_coordinator_unit.py +0 -0
  377. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_copilot_global_unit.py +0 -0
  378. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_cross_agent_wiki_integration.py +0 -0
  379. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_dashboard_hook_integration.py +0 -0
  380. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_agent_429.py +0 -0
  381. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_concurrency_fault_injection_system.py +0 -0
  382. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_lifecycle_sandbox_e2e_system.py +0 -0
  383. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_progress_integration.py +0 -0
  384. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_reconciliation_unit.py +0 -0
  385. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_source_identity_unit.py +0 -0
  386. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_delivery_validation_unit.py +0 -0
  387. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_dispatch_batch_multi_pr_integration.py +0 -0
  388. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_dispatch_merge_wiring_integration.py +0 -0
  389. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_distributed_183_dod_system.py +0 -0
  390. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_distributed_183_e2e_system.py +0 -0
  391. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_distributed_183_external_probe_integration.py +0 -0
  392. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_distributed_epic_evidence_system.py +0 -0
  393. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_distributed_trust_policy_unit.py +0 -0
  394. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_doctor_smoke_system.py +0 -0
  395. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_drain_cli_integration.py +0 -0
  396. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_drain_integration.py +0 -0
  397. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_driver_contract_unit.py +0 -0
  398. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_e2e_demo_audit_system.py +0 -0
  399. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_evidence_chain_integration.py +0 -0
  400. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_evidence_receipt_unit.py +0 -0
  401. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_evolution.py +0 -0
  402. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_execution_board_e2e_integration.py +0 -0
  403. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_external_verifiers_integration.py +0 -0
  404. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_fan_out_flow_system.py +0 -0
  405. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_fan_out_scheduler_integration.py +0 -0
  406. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_feedback_recovery_agent_430_unit.py +0 -0
  407. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_finding_report.py +0 -0
  408. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_flow_audit_integration.py +0 -0
  409. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_flow_semantics_unit.py +0 -0
  410. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_freshness_unit.py +0 -0
  411. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_gen_install_mutations_doc_unit.py +0 -0
  412. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_github_lifecycle_concurrency_e2e_system.py +0 -0
  413. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_github_lifecycle_live_e2e.py +0 -0
  414. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_github_lifecycle_readside_integration.py +0 -0
  415. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_github_lifecycle_runner_wiring_integration.py +0 -0
  416. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_github_lifecycle_unit.py +0 -0
  417. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_github_status_sync_unit.py +0 -0
  418. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_golden_mutation_regression.py +0 -0
  419. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_hbp_topics_integration.py +0 -0
  420. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_hierarchical_planner_unit.py +0 -0
  421. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_hooks_coverage_integration.py +0 -0
  422. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_impact_audit_integration.py +0 -0
  423. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_implementation_agent_426_unit.py +0 -0
  424. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_independent_watcher_integration.py +0 -0
  425. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_ci_pinning_unit.py +0 -0
  426. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_consent_regression.py +0 -0
  427. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_lib_integration.py +0 -0
  428. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_plan_unit.py +0 -0
  429. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_post_smoke_integration.py +0 -0
  430. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_rollback_integration.py +0 -0
  431. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_smoke_unit.py +0 -0
  432. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_transaction_unit.py +0 -0
  433. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_install_upgrade_integration.py +0 -0
  434. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_intake_impact_matrix_replan_284_unit.py +0 -0
  435. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_intake_planner_425_unit.py +0 -0
  436. /simplicio_loop-3.38.0/tests/test_intake_progress_integration.py → /simplicio_loop-3.38.1/tests/test_intake_progress.py +0 -0
  437. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_learn_pipeline_removed_regression.py +0 -0
  438. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_ledger_cli_unit.py +0 -0
  439. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_live_issue_183_identity_system.py +0 -0
  440. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_locked_append_integration.py +0 -0
  441. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_loop_driver_run_state_e2e_system.py +0 -0
  442. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_loop_e2e_system.py +0 -0
  443. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_loop_progress_encoding_unit.py +0 -0
  444. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_loop_progress_integration.py +0 -0
  445. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_maintenance_deferred_docs_integration.py +0 -0
  446. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_merge_executor_live_e2e_system.py +0 -0
  447. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_merge_executor_unit.py +0 -0
  448. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_merge_queue_live_probe_integration.py +0 -0
  449. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_mirror_parity_integration.py +0 -0
  450. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_model_registry_unit.py +0 -0
  451. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_model_routed_dispatch_wiring_integration.py +0 -0
  452. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_model_router_fallback_unit.py +0 -0
  453. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_model_router_unit.py +0 -0
  454. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_multi_tracker_reporting.py +0 -0
  455. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_operator_batch_integration.py +0 -0
  456. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_operator_worktree_batch_unit.py +0 -0
  457. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_ops_ledger_integration.py +0 -0
  458. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_oracle_perf_benchmark_unit.py +0 -0
  459. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_oracle_source_lifecycle_gate_integration.py +0 -0
  460. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_orca_preset_integration.py +0 -0
  461. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_phase_events_unit.py +0 -0
  462. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_plan_contract_unit.py +0 -0
  463. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planes_golden_eval_regression.py +0 -0
  464. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planes_installed_e2e_system.py +0 -0
  465. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planning_gate_284_enhancements_unit.py +0 -0
  466. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planning_gate_execute_operator_integration.py +0 -0
  467. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planning_gate_github_publish_unit.py +0 -0
  468. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planning_gate_live_e2e_system.py +0 -0
  469. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_planning_gate_unit.py +0 -0
  470. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_pr_dod_review_unit.py +0 -0
  471. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_pr_evidence_comment_publish_integration.py +0 -0
  472. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_pr_evidence_lifecycle_delegation_integration.py +0 -0
  473. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_pr_patrol_unit.py +0 -0
  474. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_precommit_bundle_sync_integration.py +0 -0
  475. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_progress_comment_live_e2e_system.py +0 -0
  476. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_progress_comment_ratelimit_cli_e2e_integration.py +0 -0
  477. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_progress_e2e_system.py +0 -0
  478. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_progress_failopen_integration.py +0 -0
  479. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_progress_snapshots_unit.py +0 -0
  480. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_progress_unit.py +0 -0
  481. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_provenance_generate_integration.py +0 -0
  482. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_gate_scripts_emit_json_unit.py +0 -0
  483. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_benchmark_integration.py +0 -0
  484. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_reverify_integration.py +0 -0
  485. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_unit.py +0 -0
  486. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_quality_matrix_watcher.py +0 -0
  487. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_receipt_verifier_integration.py +0 -0
  488. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_recovery_unit.py +0 -0
  489. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_release_check_unit.py +0 -0
  490. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_release_rehearsal_integration.py +0 -0
  491. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_release_verify_unit.py +0 -0
  492. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_queue_cancellation_integration.py +0 -0
  493. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_queue_integration.py +0 -0
  494. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_queue_live_system.py +0 -0
  495. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_queue_pull_claim_system.py +0 -0
  496. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_queue_short_lived_auth_integration.py +0 -0
  497. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_worker_e2e_system.py +0 -0
  498. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_worker_http_e2e_system.py +0 -0
  499. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_worker_measurement_unit.py +0 -0
  500. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_remote_worker_supervisor_system.py +0 -0
  501. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_repo_conventions_architecture_unit.py +0 -0
  502. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_repo_governance_294_integration.py +0 -0
  503. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_repository_budget_unit.py +0 -0
  504. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_repository_governance_unit.py +0 -0
  505. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_review_panel.py +0 -0
  506. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runner_cli_integration.py +0 -0
  507. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runner_progress_events_unit.py +0 -0
  508. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runtime_adapter_unit.py +0 -0
  509. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runtime_drivers_integration.py +0 -0
  510. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runtime_execution_receipt_unit.py +0 -0
  511. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_runtime_matrix_integration.py +0 -0
  512. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_safety_gate_agent.py +0 -0
  513. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_sbom_generate_integration.py +0 -0
  514. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_secure_transport_fault_injection_system.py +0 -0
  515. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_secure_transport_integration.py +0 -0
  516. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_security_audit_log_unit.py +0 -0
  517. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_short_lived_credentials_unit.py +0 -0
  518. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_simplicio_mcp_runner_unit.py +0 -0
  519. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_source_adapter_protocol_unit.py +0 -0
  520. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_source_snapshot_unit.py +0 -0
  521. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_source_state_unit.py +0 -0
  522. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_agent_conformance.py +0 -0
  523. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_agent_contract.py +0 -0
  524. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_agent_coordinator.py +0 -0
  525. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_agent_fail_closed.py +0 -0
  526. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_agent_reducer.py +0 -0
  527. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_report_cli_integration.py +0 -0
  528. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_stage_report_unit.py +0 -0
  529. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_system_276_e2e_system.py +0 -0
  530. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_system_check_system.py +0 -0
  531. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_system_clean_install_system.py +0 -0
  532. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_task_backlog_unit.py +0 -0
  533. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_task_contract_cli_integration.py +0 -0
  534. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_task_contract_routing_unit.py +0 -0
  535. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_task_to_delivery_golden_corpus_regression.py +0 -0
  536. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_test_categories_unit.py +0 -0
  537. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_token_budget_unit.py +0 -0
  538. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_toon_codec_unit.py +0 -0
  539. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_transcript_progress_e2e_system.py +0 -0
  540. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_transcript_progress_unit.py +0 -0
  541. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_turn_progress_integration.py +0 -0
  542. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_verified_delivery_dispatch_wiring_integration.py +0 -0
  543. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_verified_delivery_unit.py +0 -0
  544. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_verify_adapters_integration.py +0 -0
  545. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_version_sync_unit.py +0 -0
  546. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_vscode_global_install.py +0 -0
  547. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_watcher_challenge_generation_integration.py +0 -0
  548. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_work_item_claims_chaos_system.py +0 -0
  549. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_work_item_claims_run_guarded_integration.py +0 -0
  550. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_work_item_claims_unit.py +0 -0
  551. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_worker_cli_contract_integration.py +0 -0
  552. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_worker_daemon_unit.py +0 -0
  553. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_worker_smoke_system.py +0 -0
  554. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_workflow_topology.py +0 -0
  555. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_workitem_attempts_integration.py +0 -0
  556. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_worktree_cleanup.py +0 -0
  557. {simplicio_loop-3.38.0 → simplicio_loop-3.38.1}/tests/test_worktree_queue_integration.py +0 -0
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Wesley Simplicio
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Wesley Simplicio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,83 +1,87 @@
1
- Metadata-Version: 2.4
2
- Name: simplicio-loop
3
- Version: 3.38.0
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
- Author-email: Wesley Simplicio <wesleybob4@gmail.com>
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/wesleysimplicio/simplicio-loop
8
- Project-URL: Repository, https://github.com/wesleysimplicio/simplicio-loop
9
- Project-URL: Issues, https://github.com/wesleysimplicio/simplicio-loop/issues
10
- Keywords: ai,agent,orchestrator,llm,claude,cursor,automation,ralph-loop,token-economy,cli
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Intended Audience :: Developers
13
- Classifier: License :: OSI Approved :: MIT License
14
- Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3 :: Only
16
- Classifier: Topic :: Software Development :: Build Tools
17
- Classifier: Topic :: Utilities
18
- Classifier: Operating System :: OS Independent
19
- Requires-Python: >=3.8
20
- Description-Content-Type: text/markdown
21
- License-File: LICENSE
22
- Requires-Dist: simplicio-cli>=0.16.1
23
- Provides-Extra: dev
24
- Requires-Dist: pytest>=7; extra == "dev"
25
- Requires-Dist: pytest-cov>=4; extra == "dev"
26
- Provides-Extra: ml
27
- Requires-Dist: model2vec>=0.3; extra == "ml"
28
- Requires-Dist: numpy>=1.21; extra == "ml"
29
- Dynamic: license-file
30
-
31
- # simplicio-loop
32
-
33
- **The Universal Looping AI Orchestrator** — a runtime-agnostic **super-plugin** (7 skills) that
34
- drains any queue of work end-to-end on **any LLM / runtime**:
35
- `discover → implement → verify → merge → close → watch 24/7`, behind safety gates and evidence
36
- checks, at up to **96% fewer tokens**. Not a chatbot. A worker.
37
-
38
- ![simplicio-loop](https://raw.githubusercontent.com/wesleysimplicio/simplicio-loop/main/assets/simplicio-loop-hero-2026.png)
39
-
40
- ## Install
41
-
42
- ```bash
43
- pip install simplicio-loop
44
- ```
45
-
46
- Then drop the skills + hooks into your project (or globally):
47
-
48
- ```bash
49
- simplicio-loop install # into ./.claude of the current project
50
- simplicio-loop install --global # into ~/.claude (all projects)
51
- ```
52
-
53
- Now invoke it from your agent runtime (Claude Code, Cursor, Codex, Gemini, …):
54
-
55
- ```
56
- /simplicio-loop finish all the open issues
57
- ```
58
-
59
- ## What you get — 7 skills
60
-
61
- | Skill | What it does |
62
- |---|---|
63
- | `simplicio-loop` | Unified public entrypoint: orchestrator core + hardened loop behind one command. |
64
- | `simplicio-tasks` | Legacy alias kept only for compatibility with older installs and saved prompts. |
65
- | `simplicio-orient` | Terminal-first token economy — output-reduction catalog, tee-cache, signatures-read. |
66
- | `simplicio-review` | Adversarial review — parallel subagents on distinct rubrics, deduped into one verdict. |
67
- | `simplicio-compress` | Output + memory compression, byte-preserving identifiers. |
68
- | `simplicio-autoresearch` | Evolutionary mutate/eval/keep-revert optimizer — yool-guardrailed caps, git-isolated branch, anti-Goodhart gate-first eval. |
69
- | `simplicio-learn` | Retrospective — durable, deduped lessons written back to memory. |
70
-
71
- ## Highlights
72
-
73
- - **12 runtimes, one protocol** — Claude Code, Codex, VS Code/Copilot, Cursor, Antigravity, Kiro,
74
- OpenCode, Gemini, Aider, Simplicio Agent (formerly Hermes), OpenClaw, Orca.
75
- - **Evidence-gated completion** — never a false "done"; exits only on a verified `<promise>`,
76
- cap, spindle handoff, or STOP.
77
- - **Token economy** — honest "answer concisely" baseline; savings credited only on verified-correct
78
- outcomes.
79
-
80
- Requires Python 3.8+. The skills, hooks, and installer are pure cross-platform Python.
81
-
82
- MIT — part of the [Simplicio](https://github.com/wesleysimplicio) ecosystem.
83
- Full docs: <https://github.com/wesleysimplicio/simplicio-loop>
1
+ Metadata-Version: 2.4
2
+ Name: simplicio-loop
3
+ Version: 3.38.1
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
+ Author-email: Wesley Simplicio <wesleybob4@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/wesleysimplicio/simplicio-loop
8
+ Project-URL: Repository, https://github.com/wesleysimplicio/simplicio-loop
9
+ Project-URL: Issues, https://github.com/wesleysimplicio/simplicio-loop/issues
10
+ Keywords: ai,agent,orchestrator,llm,claude,cursor,automation,ralph-loop,token-economy,cli
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Topic :: Software Development :: Build Tools
17
+ Classifier: Topic :: Utilities
18
+ Classifier: Operating System :: OS Independent
19
+ Requires-Python: >=3.8
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: simplicio-cli>=0.16.2
23
+ Requires-Dist: tiktoken<1,>=0.12.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7; extra == "dev"
26
+ Requires-Dist: pytest-cov>=4; extra == "dev"
27
+ Requires-Dist: cryptography<50,>=42; extra == "dev"
28
+ Provides-Extra: ml
29
+ Requires-Dist: model2vec>=0.3; extra == "ml"
30
+ Requires-Dist: numpy>=1.21; extra == "ml"
31
+ Provides-Extra: uvloop
32
+ Requires-Dist: uvloop>=0.19; platform_system != "Windows" and extra == "uvloop"
33
+ Dynamic: license-file
34
+
35
+ # simplicio-loop
36
+
37
+ **The Universal Looping AI Orchestrator** — a runtime-agnostic **super-plugin** (7 skills) that
38
+ drains any queue of work end-to-end on **any LLM / runtime**:
39
+ `discover → implement → verify → merge → close → watch 24/7`, behind safety gates and evidence
40
+ checks, at up to **96% fewer tokens**. Not a chatbot. A worker.
41
+
42
+ ![simplicio-loop](https://raw.githubusercontent.com/wesleysimplicio/simplicio-loop/main/assets/simplicio-loop-hero-2026.png)
43
+
44
+ ## Install
45
+
46
+ ```bash
47
+ pip install simplicio-loop
48
+ ```
49
+
50
+ Then drop the skills + hooks into your project (or globally):
51
+
52
+ ```bash
53
+ simplicio-loop install # into ./.claude of the current project
54
+ simplicio-loop install --global # into ~/.claude (all projects)
55
+ ```
56
+
57
+ Now invoke it from your agent runtime (Claude Code, Cursor, Codex, Gemini, …):
58
+
59
+ ```
60
+ /simplicio-loop finish all the open issues
61
+ ```
62
+
63
+ ## What you get — 7 skills
64
+
65
+ | Skill | What it does |
66
+ |---|---|
67
+ | `simplicio-loop` | Unified public entrypoint: orchestrator core + hardened loop behind one command. |
68
+ | `simplicio-tasks` | Legacy alias kept only for compatibility with older installs and saved prompts. |
69
+ | `simplicio-orient` | Terminal-first token economy — output-reduction catalog, tee-cache, signatures-read. |
70
+ | `simplicio-review` | Adversarial review — parallel subagents on distinct rubrics, deduped into one verdict. |
71
+ | `simplicio-compress` | Output + memory compression, byte-preserving identifiers. |
72
+ | `simplicio-autoresearch` | Evolutionary mutate/eval/keep-revert optimizer — yool-guardrailed caps, git-isolated branch, anti-Goodhart gate-first eval. |
73
+ | `simplicio-learn` | Retrospective — durable, deduped lessons written back to memory. |
74
+
75
+ ## Highlights
76
+
77
+ - **12 runtimes, one protocol** — Claude Code, Codex, VS Code/Copilot, Cursor, Antigravity, Kiro,
78
+ OpenCode, Gemini, Aider, Simplicio Agent (formerly Hermes), OpenClaw, Orca.
79
+ - **Evidence-gated completion** — never a false "done"; exits only on a verified `<promise>`,
80
+ cap, spindle handoff, or STOP.
81
+ - **Token economy** — honest "answer concisely" baseline; savings credited only on verified-correct
82
+ outcomes.
83
+
84
+ Requires Python 3.8+. The skills, hooks, and installer are pure cross-platform Python.
85
+
86
+ MIT — part of the [Simplicio](https://github.com/wesleysimplicio) ecosystem.
87
+ Full docs: <https://github.com/wesleysimplicio/simplicio-loop>
@@ -1,53 +1,53 @@
1
- # simplicio-loop
2
-
3
- **The Universal Looping AI Orchestrator** — a runtime-agnostic **super-plugin** (7 skills) that
4
- drains any queue of work end-to-end on **any LLM / runtime**:
5
- `discover → implement → verify → merge → close → watch 24/7`, behind safety gates and evidence
6
- checks, at up to **96% fewer tokens**. Not a chatbot. A worker.
7
-
8
- ![simplicio-loop](https://raw.githubusercontent.com/wesleysimplicio/simplicio-loop/main/assets/simplicio-loop-hero-2026.png)
9
-
10
- ## Install
11
-
12
- ```bash
13
- pip install simplicio-loop
14
- ```
15
-
16
- Then drop the skills + hooks into your project (or globally):
17
-
18
- ```bash
19
- simplicio-loop install # into ./.claude of the current project
20
- simplicio-loop install --global # into ~/.claude (all projects)
21
- ```
22
-
23
- Now invoke it from your agent runtime (Claude Code, Cursor, Codex, Gemini, …):
24
-
25
- ```
26
- /simplicio-loop finish all the open issues
27
- ```
28
-
29
- ## What you get — 7 skills
30
-
31
- | Skill | What it does |
32
- |---|---|
33
- | `simplicio-loop` | Unified public entrypoint: orchestrator core + hardened loop behind one command. |
34
- | `simplicio-tasks` | Legacy alias kept only for compatibility with older installs and saved prompts. |
35
- | `simplicio-orient` | Terminal-first token economy — output-reduction catalog, tee-cache, signatures-read. |
36
- | `simplicio-review` | Adversarial review — parallel subagents on distinct rubrics, deduped into one verdict. |
37
- | `simplicio-compress` | Output + memory compression, byte-preserving identifiers. |
38
- | `simplicio-autoresearch` | Evolutionary mutate/eval/keep-revert optimizer — yool-guardrailed caps, git-isolated branch, anti-Goodhart gate-first eval. |
39
- | `simplicio-learn` | Retrospective — durable, deduped lessons written back to memory. |
40
-
41
- ## Highlights
42
-
43
- - **12 runtimes, one protocol** — Claude Code, Codex, VS Code/Copilot, Cursor, Antigravity, Kiro,
44
- OpenCode, Gemini, Aider, Simplicio Agent (formerly Hermes), OpenClaw, Orca.
45
- - **Evidence-gated completion** — never a false "done"; exits only on a verified `<promise>`,
46
- cap, spindle handoff, or STOP.
47
- - **Token economy** — honest "answer concisely" baseline; savings credited only on verified-correct
48
- outcomes.
49
-
50
- Requires Python 3.8+. The skills, hooks, and installer are pure cross-platform Python.
51
-
52
- MIT — part of the [Simplicio](https://github.com/wesleysimplicio) ecosystem.
53
- Full docs: <https://github.com/wesleysimplicio/simplicio-loop>
1
+ # simplicio-loop
2
+
3
+ **The Universal Looping AI Orchestrator** — a runtime-agnostic **super-plugin** (7 skills) that
4
+ drains any queue of work end-to-end on **any LLM / runtime**:
5
+ `discover → implement → verify → merge → close → watch 24/7`, behind safety gates and evidence
6
+ checks, at up to **96% fewer tokens**. Not a chatbot. A worker.
7
+
8
+ ![simplicio-loop](https://raw.githubusercontent.com/wesleysimplicio/simplicio-loop/main/assets/simplicio-loop-hero-2026.png)
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ pip install simplicio-loop
14
+ ```
15
+
16
+ Then drop the skills + hooks into your project (or globally):
17
+
18
+ ```bash
19
+ simplicio-loop install # into ./.claude of the current project
20
+ simplicio-loop install --global # into ~/.claude (all projects)
21
+ ```
22
+
23
+ Now invoke it from your agent runtime (Claude Code, Cursor, Codex, Gemini, …):
24
+
25
+ ```
26
+ /simplicio-loop finish all the open issues
27
+ ```
28
+
29
+ ## What you get — 7 skills
30
+
31
+ | Skill | What it does |
32
+ |---|---|
33
+ | `simplicio-loop` | Unified public entrypoint: orchestrator core + hardened loop behind one command. |
34
+ | `simplicio-tasks` | Legacy alias kept only for compatibility with older installs and saved prompts. |
35
+ | `simplicio-orient` | Terminal-first token economy — output-reduction catalog, tee-cache, signatures-read. |
36
+ | `simplicio-review` | Adversarial review — parallel subagents on distinct rubrics, deduped into one verdict. |
37
+ | `simplicio-compress` | Output + memory compression, byte-preserving identifiers. |
38
+ | `simplicio-autoresearch` | Evolutionary mutate/eval/keep-revert optimizer — yool-guardrailed caps, git-isolated branch, anti-Goodhart gate-first eval. |
39
+ | `simplicio-learn` | Retrospective — durable, deduped lessons written back to memory. |
40
+
41
+ ## Highlights
42
+
43
+ - **12 runtimes, one protocol** — Claude Code, Codex, VS Code/Copilot, Cursor, Antigravity, Kiro,
44
+ OpenCode, Gemini, Aider, Simplicio Agent (formerly Hermes), OpenClaw, Orca.
45
+ - **Evidence-gated completion** — never a false "done"; exits only on a verified `<promise>`,
46
+ cap, spindle handoff, or STOP.
47
+ - **Token economy** — honest "answer concisely" baseline; savings credited only on verified-correct
48
+ outcomes.
49
+
50
+ Requires Python 3.8+. The skills, hooks, and installer are pure cross-platform Python.
51
+
52
+ MIT — part of the [Simplicio](https://github.com/wesleysimplicio) ecosystem.
53
+ Full docs: <https://github.com/wesleysimplicio/simplicio-loop>
@@ -10,7 +10,7 @@
10
10
  <a href="#-the-7-skills--5-accelerators"><img src="https://img.shields.io/badge/skills-7-7C3AED" alt="7 skills"></a>
11
11
  <a href="#-source-adapters"><img src="https://img.shields.io/badge/source%20adapters-5-00E08A" alt="5 source adapters"></a>
12
12
  <a href="#-15-runtimes-one-protocol"><img src="https://img.shields.io/badge/runtimes-15%20(3%20garantidos%2B12%20best--effort)-2563EB" alt="15 runtimes (3 guaranteed + 12 best-effort)"></a>
13
- <a href="#-the-49-extension-points"><img src="https://img.shields.io/badge/extension%20points-49-00E08A" alt="49 extension points"></a>
13
+ <a href="#-the-49-extension-points"><img src="https://img.shields.io/badge/extension%20points-50-00E08A" alt="50 extension points"></a>
14
14
  <a href="#-token-economy"><img src="https://img.shields.io/badge/savings-unverified-888888" alt="Savings — unverified"></a>
15
15
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License"></a>
16
16
  <a href="https://discord.gg/wM6tr7xVb"><img src="https://img.shields.io/badge/Discord-Join%20Simplicio-5865F2?logo=discord&logoColor=white" alt="Join the Simplicio Discord"></a>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simplicio-loop"
7
- version = "3.38.0"
7
+ version = "3.38.1"
8
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
9
  readme = "PYPI.md"
10
10
  requires-python = ">=3.8"
@@ -24,17 +24,18 @@ classifiers = [
24
24
  # The simplicio-loop drive requires the operator package (`simplicio-cli`), which exposes
25
25
  # `simplicio-dev-cli` and also brings the survey binary `simplicio-mapper` transitively.
26
26
  dependencies = [
27
- "simplicio-cli>=0.16.1",
27
+ "simplicio-cli>=0.16.2",
28
+ "tiktoken>=0.12.0,<1",
28
29
  ]
29
30
 
30
31
  # Optional: the real embedding backend for `simplicio-cli semantic --ml` / `simplicio-cli rag --ml`.
31
32
  # The native engine itself is stdlib-only; this only enables embedding-based semantic dedup +
32
33
  # meaning retrieval. `pip install "simplicio-loop[ml]"`.
33
34
  [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"]
35
+ # Dev/test dependencies used by the local quality gate and secure-transport fixtures.
36
+ dev = ["pytest>=7", "pytest-cov>=4", "cryptography>=42,<50"]
37
37
  ml = ["model2vec>=0.3", "numpy>=1.21"]
38
+ uvloop = ["uvloop>=0.19; platform_system != 'Windows'"]
38
39
 
39
40
  [project.urls]
40
41
  Homepage = "https://github.com/wesleysimplicio/simplicio-loop"
@@ -43,11 +44,15 @@ Issues = "https://github.com/wesleysimplicio/simplicio-loop/issues"
43
44
 
44
45
  [project.scripts]
45
46
  simplicio-loop = "simplicio_loop.cli:main"
47
+ simplicio-hub = "simplicio_loop.hub_daemon:main"
46
48
  # issue #286 step 11: the multi-device remote-worker protocol's server + worker + supervisor
47
49
  # are genuinely installable binaries, not source that only runs from a git checkout.
48
50
  simplicio-remote-queue-server = "simplicio_loop.remote_queue_server_cli:main"
49
51
  simplicio-remote-worker = "simplicio_loop.remote_worker_cli:main"
50
52
  simplicio-remote-worker-supervisor = "simplicio_loop.remote_worker_supervisor_cli:main"
53
+ # issue #516: observability/enforcement CLI for the #498 process-supervisor contract
54
+ # (status/top/queue/cancel/drain/reports over the #514 ProcessSpec/Lease/Result adapter).
55
+ simplicio-process-supervisor = "simplicio_loop.process_enforcement_cli:main"
51
56
 
52
57
  [tool.setuptools]
53
58
  packages = ["simplicio_loop"]
@@ -67,3 +72,9 @@ exclude_lines = [
67
72
  "pragma: no cover",
68
73
  "if __name__ == .__main__.:",
69
74
  ]
75
+
76
+ [tool.pytest.ini_options]
77
+ addopts = ["--import-mode=importlib"]
78
+ # The bundle/plugin trees mirror source files and are validated by mirror-parity.
79
+ # Collect the canonical tests once instead of executing mirrored probes repeatedly.
80
+ testpaths = ["tests"]
@@ -1,4 +1,4 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -13,6 +13,6 @@ try:
13
13
  try:
14
14
  __version__ = _v("simplicio-loop")
15
15
  except PackageNotFoundError:
16
- __version__ = "3.38.0"
16
+ __version__ = "3.38.1"
17
17
  except Exception: # pragma: no cover
18
- __version__ = "3.38.0"
18
+ __version__ = "3.38.1"
@@ -149,25 +149,36 @@ def scan_secret_text(text):
149
149
  return hits
150
150
 
151
151
 
152
- def _staged_diff():
153
- # Scan the CURRENT working repo (where the command runs), NOT where this script lives —
154
- # installed as a hook in another project, the user's repo is the cwd.
155
- r = _run(["git", "diff", "--cached", "--unified=0"], cwd=os.getcwd())
152
+ def _effective_command_cwd(cmd):
153
+ """Resolve an explicit leading cd or git -C target for PreToolUse scans."""
154
+ base = os.getcwd()
155
+ candidate = None
156
+ leading = re.match(
157
+ r"""^\s*(?:cd|Set-Location)\s+(?:"([^"]+)"|'([^']+)'|([^&;\n]+))\s*(?:&&|;)""",
158
+ cmd or "",
159
+ )
160
+ if leading:
161
+ candidate = next((value for value in leading.groups() if value), "").strip()
162
+ else:
163
+ git_c = re.search(r"""\bgit\s+-C\s+(?:"([^"]+)"|'([^']+)'|(\S+))""", cmd or "")
164
+ if git_c:
165
+ candidate = next((value for value in git_c.groups() if value), "").strip()
166
+ if not candidate:
167
+ return os.path.abspath(base)
168
+ candidate = os.path.expandvars(os.path.expanduser(candidate))
169
+ if not os.path.isabs(candidate):
170
+ candidate = os.path.join(base, candidate)
171
+ return os.path.normpath(os.path.abspath(candidate))
172
+
173
+
174
+ def _staged_diff(cwd=None):
175
+ r = _run(["git", "diff", "--cached", "--unified=0"], cwd=cwd or os.getcwd())
156
176
  return (r.stdout if r and r.returncode == 0 else None)
157
177
 
158
178
 
159
- def _push_diff():
160
- """Diff of the commits actually about to leave the machine on `git push` (#291).
161
-
162
- The previously documented pre-push wiring (`action_gate.py check --staged`) scans the
163
- STAGED diff — at push time that's almost always empty, since everything being pushed is
164
- already committed. This scans the real push range instead: HEAD vs. the upstream tracking
165
- branch when one is configured, falling back to the last commit (or the empty tree, for a
166
- brand-new single-commit repo) when there is no upstream yet. Returns None only when no
167
- range can be resolved at all — the caller treats that as fail-closed, same as an unreadable
168
- staged diff.
169
- """
170
- cwd = os.getcwd()
179
+ def _push_diff(cwd=None):
180
+ """Return the commits actually leaving the selected repository on git push."""
181
+ cwd = cwd or os.getcwd()
171
182
  r = _run(["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"], cwd=cwd)
172
183
  upstream = r.stdout.strip() if r and r.returncode == 0 and r.stdout.strip() else None
173
184
  if upstream:
@@ -177,16 +188,93 @@ def _push_diff():
177
188
  d = _run(["git", "diff", "HEAD~1..HEAD", "--unified=0"], cwd=cwd)
178
189
  if d and d.returncode == 0:
179
190
  return d.stdout
180
- # No HEAD~1 (single-commit repo) — diff against git's well-known empty-tree hash.
181
191
  d = _run(["git", "diff", "4b825dc642cb6eb9a060e54bf8d69288fbee4904", "HEAD", "--unified=0"],
182
192
  cwd=cwd)
183
193
  return (d.stdout if d and d.returncode == 0 else None)
184
194
 
185
195
 
196
+ def _delivery_contract(cwd):
197
+ """Load the optional frozen delivery contract for the effective repository."""
198
+ local_anchor = os.path.join(cwd, ".orchestrator", "loop", "anchor.json")
199
+ anchor_path = local_anchor if os.path.exists(local_anchor) else (
200
+ os.environ.get("SIMPLICIO_ANCHOR_FILE") or local_anchor
201
+ )
202
+ try:
203
+ with open(anchor_path, encoding="utf-8") as handle:
204
+ anchor = json.load(handle)
205
+ contract = anchor.get("delivery")
206
+ if not contract:
207
+ return None, None
208
+ if REPO not in sys.path:
209
+ sys.path.insert(0, REPO)
210
+ from simplicio_loop.delivery_contract import normalize_contract
211
+ return normalize_contract(contract), None
212
+ except FileNotFoundError:
213
+ return None, None
214
+ except (OSError, ValueError, TypeError, json.JSONDecodeError) as exc:
215
+ return None, "invalid frozen delivery contract: %s" % exc
216
+
217
+
218
+ def _diff_new_paths(cwd, push):
219
+ """Return added paths from the same range that will be secret-scanned."""
220
+ if push:
221
+ upstream = _run(["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"], cwd=cwd)
222
+ ref = upstream.stdout.strip() if upstream and upstream.returncode == 0 else ""
223
+ ranges = (["%s...HEAD" % ref] if ref else ["HEAD~1..HEAD", "4b825dc642cb6eb9a060e54bf8d69288fbee4904", "HEAD"])
224
+ for item in ranges:
225
+ args = ["git", "diff", item, "--name-status"] if "..." in item or ".." in item else ["git", "diff", item, "HEAD", "--name-status"]
226
+ result = _run(args, cwd=cwd)
227
+ if result and result.returncode == 0:
228
+ return [line.split("\t", 1)[-1] for line in result.stdout.splitlines()
229
+ if line and line[0] in {"A", "C"} and "\t" in line]
230
+ return []
231
+ result = _run(["git", "diff", "--cached", "--name-status"], cwd=cwd)
232
+ if not result or result.returncode != 0:
233
+ return []
234
+ return [line.split("\t", 1)[-1] for line in result.stdout.splitlines()
235
+ if line and line[0] in {"A", "C"} and "\t" in line]
236
+
237
+
238
+ def _delivery_guard(cwd, diff, push):
239
+ contract, error = _delivery_contract(cwd)
240
+ if error:
241
+ return error
242
+ if contract is None:
243
+ return None
244
+ new_paths = _diff_new_paths(cwd, push)
245
+ if not contract["allow_new_files_in_repo"] and new_paths:
246
+ return "delivery contract forbids new files (cwd=%s): %s" % (cwd, ", ".join(sorted(new_paths)))
247
+ if not contract["allow_comments_in_code"]:
248
+ code_paths = {
249
+ line[6:].strip()
250
+ for line in diff.splitlines()
251
+ if line.startswith("+++ b/")
252
+ }
253
+ code_suffixes = (".cs", ".js", ".jsx", ".ts", ".tsx", ".py")
254
+ if not any(path.lower().endswith(code_suffixes) for path in code_paths):
255
+ return None
256
+ comments = []
257
+ for line in diff.splitlines():
258
+ if not line.startswith("+") or line.startswith("+++"):
259
+ continue
260
+ added = line[1:].lstrip()
261
+ if added.startswith(("#", "//", "/*", "*", '"""')):
262
+ comments.append(added[:80])
263
+ if comments:
264
+ return "delivery contract forbids new code comments (cwd=%s; lines=%d)" % (cwd, len(comments))
265
+ return None
266
+
267
+
186
268
  def _is_commit_or_push(cmd):
187
269
  return bool(re.search(r"\bgit\s+(commit|push)\b", cmd or ""))
188
270
 
189
271
 
272
+ def _is_push(cmd):
273
+ return bool(re.search(r"\bgit\s+.*\bpush\b", cmd or ""))
274
+
275
+
276
+
277
+
190
278
  def _verdict(allow, reason=""):
191
279
  return {"action": "allow" if allow else "block", "reason": reason}
192
280
 
@@ -243,24 +331,35 @@ def _runtime_gate_escalation(cmd):
243
331
 
244
332
 
245
333
  def gate_command(cmd, staged=False):
246
- """The core decision. Returns a verdict dict; BLOCK is fail-closed."""
247
- # 1) irreversible op → block
334
+ """The core decision. Secret scans use the command's effective repository."""
248
335
  reason = classify_command(cmd)
249
336
  if reason:
250
337
  return _verdict(False, "irreversible op: " + reason)
251
- # 2) a commit/push → secret-scan the staged diff (fail-closed if it can't be read)
252
338
  if staged or _is_commit_or_push(cmd):
253
- diff = _staged_diff()
339
+ cwd = _effective_command_cwd(cmd)
340
+ push = _is_push(cmd)
341
+ diff = _push_diff(cwd) if push else _staged_diff(cwd)
254
342
  if diff is None:
255
- # security check could not run on a push/commit → do not pass it
256
- if _is_commit_or_push(cmd) or staged:
257
- return _verdict(False, "cannot read staged diff to secret-scan — blocking the "
258
- "commit/push (fail-closed). Stage changes or run in a git repo.")
259
- return _verdict(True)
343
+ target = "push" if push else "staged"
344
+ return _verdict(
345
+ False,
346
+ "cannot read %s diff to secret-scan (cwd=%s) - fail-closed" % (target, cwd), )
260
347
  hits = scan_secret_text(diff)
261
348
  if hits:
262
349
  labels = ", ".join(sorted({h[0] for h in hits}))
263
- return _verdict(False, "secret in staged diff (%s) — remove it before commit/push" % labels)
350
+ target = "push" if push else "staged"
351
+ return _verdict(
352
+ False,
353
+ "secret in %s diff (%s; cwd=%s) - remove it before mutation" % (target, labels, cwd), )
354
+ delivery_reason = _delivery_guard(cwd, diff, push)
355
+ if delivery_reason:
356
+ return _verdict(False, delivery_reason)
357
+ runtime_reason = _runtime_gate_escalation(cmd)
358
+ if runtime_reason:
359
+ return _verdict(False, "simplicio runtime gate: " + runtime_reason)
360
+ return _verdict(True)
361
+
362
+
264
363
  # 3) additional signal from the simplicio runtime's own risk classifier, when installed
265
364
  # (best-effort, additive-only — see _runtime_gate_escalation).
266
365
  runtime_reason = _runtime_gate_escalation(cmd)