loopx 1.0.1__tar.gz → 1.0.2__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 (1344) hide show
  1. {loopx-1.0.1/loopx.egg-info → loopx-1.0.2}/PKG-INFO +13 -1
  2. {loopx-1.0.1 → loopx-1.0.2}/README.md +12 -0
  3. {loopx-1.0.1 → loopx-1.0.2}/loopx/__init__.py +1 -1
  4. {loopx-1.0.1 → loopx-1.0.2}/loopx/authority.py +9 -17
  5. {loopx-1.0.1 → loopx-1.0.2}/loopx/boundary_authority.py +9 -18
  6. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/README.md +52 -0
  7. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/catalog_entry.py +59 -0
  8. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/native_codex_profile.py +21 -6
  9. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/README.md +17 -1
  10. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/result_check.py +7 -0
  11. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/review_contract.py +29 -1
  12. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_server.py +2 -2
  13. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_store.py +4 -3
  14. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota.py +11 -0
  15. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_context.py +12 -1
  16. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo_event.py +1 -1
  17. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn.py +4 -0
  18. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/authority_core.py +199 -309
  19. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract.generated.ts +1 -0
  20. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract_generated.py +1 -0
  21. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract_v0.json +1 -0
  22. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/executor.py +5 -1
  23. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority.py +6 -0
  24. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_runtime.ts +173 -0
  25. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/runtime_shadow.py +7 -0
  26. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/runtime_shadow.ts +8 -1
  27. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_agents.ts +6 -2
  28. loopx-1.0.2/loopx/control_plane/coordination/todo_archive_selection.ts +132 -0
  29. loopx-1.0.2/loopx/control_plane/coordination/todo_lifecycle_decision.ts +565 -0
  30. loopx-1.0.2/loopx/control_plane/coordination/todo_successor_derivation.ts +412 -0
  31. loopx-1.0.2/loopx/control_plane/coordination/todo_terminal_lifecycle.ts +1256 -0
  32. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_handlers.ts +20 -2
  33. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/__init__.py +16 -92
  34. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/ack_policy.py +3 -0
  35. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/fallback_disposition.py +5 -25
  36. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/long_todo_chain.py +28 -86
  37. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/semantic_history.py +2 -46
  38. loopx-1.0.2/loopx/control_plane/goals/goal_vision_read_model.py +176 -0
  39. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision_wait.py +122 -93
  40. loopx-1.0.2/loopx/control_plane/goals/goal_vision_wait_projection.py +57 -0
  41. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/vision_checkpoint.ts +9 -1
  42. loopx-1.0.2/loopx/control_plane/goals/vision_wait_coverage.ts +46 -0
  43. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement.py +69 -3
  44. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/should_run_prepare.py +5 -1
  45. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/active_state_todo_parser.py +1 -0
  46. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/active_state_todos.py +27 -6
  47. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completed_archive.py +33 -25
  48. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_policy.py +18 -30
  49. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_transaction.py +52 -10
  50. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_transaction.ts +68 -10
  51. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_validation.py +180 -36
  52. loopx-1.0.2/loopx/control_plane/todos/completion_validation_projection.py +137 -0
  53. loopx-1.0.2/loopx/control_plane/todos/completion_validation_store.py +129 -0
  54. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/durable_completion.py +38 -1
  55. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/event_writeback.py +51 -62
  56. loopx-1.0.2/loopx/control_plane/todos/frontier_revision.py +208 -0
  57. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/machine_section_projection.py +135 -24
  58. loopx-1.0.2/loopx/control_plane/todos/path_resolution.py +29 -0
  59. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/provider_create.py +77 -8
  60. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/provider_projection.py +39 -9
  61. loopx-1.0.2/loopx/control_plane/todos/provider_terminal_lifecycle.py +564 -0
  62. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/quota_summary.py +19 -4
  63. loopx-1.0.2/loopx/control_plane/todos/successor_derivation.py +135 -0
  64. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/todo_summary.py +8 -0
  65. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/semantic_replan_writeback.py +7 -3
  66. {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/turn_host_adapter.py +14 -10
  67. {loopx-1.0.1 → loopx-1.0.2}/loopx/event_sourced_state.py +2 -4
  68. {loopx-1.0.1 → loopx-1.0.2}/loopx/feedback.py +12 -20
  69. {loopx-1.0.1 → loopx-1.0.2}/loopx/history.py +19 -7
  70. {loopx-1.0.1 → loopx-1.0.2}/loopx/orchestration.py +6 -2
  71. loopx-1.0.2/loopx/public_safe_text.py +64 -0
  72. {loopx-1.0.1 → loopx-1.0.2}/loopx/skill_install_readback.py +143 -27
  73. {loopx-1.0.1 → loopx-1.0.2}/loopx/slash_command_install.py +1 -1
  74. {loopx-1.0.1 → loopx-1.0.2}/loopx/state_refresh.py +2 -0
  75. {loopx-1.0.1 → loopx-1.0.2}/loopx/status_server.py +37 -0
  76. {loopx-1.0.1 → loopx-1.0.2}/loopx/todos.py +69 -181
  77. loopx-1.0.2/loopx/web/chat/assets/index-BtQNwJj6.js +129 -0
  78. loopx-1.0.2/loopx/web/chat/assets/index-DiCXWPfR.css +1 -0
  79. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/index.html +2 -2
  80. {loopx-1.0.1 → loopx-1.0.2}/loopx/workflow_skill_install.py +12 -1
  81. {loopx-1.0.1 → loopx-1.0.2/loopx.egg-info}/PKG-INFO +13 -1
  82. {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/SOURCES.txt +15 -0
  83. {loopx-1.0.1 → loopx-1.0.2}/pyproject.toml +1 -1
  84. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-review/SKILL.md +11 -11
  85. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/references/repair-patterns.md +1 -0
  86. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_session_active_turn.py +46 -0
  87. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_startup_isolation.py +8 -3
  88. {loopx-1.0.1 → loopx-1.0.2}/tests/test_dsh_goal_mode.py +93 -3
  89. loopx-1.0.2/tests/test_event_sourced_state_store.py +50 -0
  90. {loopx-1.0.1 → loopx-1.0.2}/tests/test_history_chronology.py +36 -0
  91. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_driver.py +127 -0
  92. {loopx-1.0.1 → loopx-1.0.2}/tests/test_skill_delivery_parity.py +97 -0
  93. {loopx-1.0.1 → loopx-1.0.2}/tests/test_slash_command_install.py +6 -2
  94. {loopx-1.0.1 → loopx-1.0.2}/tests/test_sonarcloud_workflow.py +37 -1
  95. {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_fast_path.py +68 -0
  96. {loopx-1.0.1 → loopx-1.0.2}/tests/test_workflow_skill_install.py +115 -1
  97. loopx-1.0.1/loopx/control_plane/todos/completion_validation_projection.py +0 -59
  98. loopx-1.0.1/tests/test_event_sourced_state_store.py +0 -27
  99. {loopx-1.0.1 → loopx-1.0.2}/LICENSE +0 -0
  100. {loopx-1.0.1 → loopx-1.0.2}/LICENSE-MIT +0 -0
  101. {loopx-1.0.1 → loopx-1.0.2}/NOTICE +0 -0
  102. {loopx-1.0.1 → loopx-1.0.2}/loopx/agent_onboarding.py +0 -0
  103. {loopx-1.0.1 → loopx-1.0.2}/loopx/agent_registry.py +0 -0
  104. {loopx-1.0.1 → loopx-1.0.2}/loopx/agy_goal_mode/README.md +0 -0
  105. {loopx-1.0.1 → loopx-1.0.2}/loopx/agy_goal_mode/__init__.py +0 -0
  106. {loopx-1.0.1 → loopx-1.0.2}/loopx/ark_managed_agent_host.py +0 -0
  107. {loopx-1.0.1 → loopx-1.0.2}/loopx/attached_session.py +0 -0
  108. {loopx-1.0.1 → loopx-1.0.2}/loopx/attached_session_api.py +0 -0
  109. {loopx-1.0.1 → loopx-1.0.2}/loopx/bootstrap.py +0 -0
  110. {loopx-1.0.1 → loopx-1.0.2}/loopx/bootstrap_command_pack.py +0 -0
  111. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/__init__.py +0 -0
  112. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/maintainability_ratchet.py +0 -0
  113. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/package_profiles.py +0 -0
  114. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/planner.py +0 -0
  115. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/premerge.py +0 -0
  116. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/qualification_profiles.py +0 -0
  117. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/quality_surface_catalog.py +0 -0
  118. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/release_profiles.py +0 -0
  119. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/runner.py +0 -0
  120. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/smoke_health.py +0 -0
  121. {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/smoke_profiles.py +0 -0
  122. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/README.md +0 -0
  123. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/__init__.py +0 -0
  124. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/README.md +0 -0
  125. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/__init__.py +0 -0
  126. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/catalog_entry.py +0 -0
  127. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/cli.py +0 -0
  128. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/core.py +0 -0
  129. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/__init__.py +0 -0
  130. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/adaptive_concurrency.py +0 -0
  131. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/artifacts.py +0 -0
  132. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/behavior_finding.py +0 -0
  133. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/concurrency_envelope.py +0 -0
  134. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/container_binding.py +0 -0
  135. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/continuation.py +0 -0
  136. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/environment_access.py +0 -0
  137. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/experiment_board.py +0 -0
  138. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/factorial_contrast.py +0 -0
  139. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/four_arm_contract.py +0 -0
  140. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/integrity.py +0 -0
  141. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/native_codex_goal.py +0 -0
  142. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/native_codex_isolation.py +0 -0
  143. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/provider_gateway.py +0 -0
  144. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/public_trajectory.py +0 -0
  145. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/reward_contract.py +0 -0
  146. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/run_permissions.py +0 -0
  147. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/runtime_continuity.py +0 -0
  148. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/runtime_observation.py +0 -0
  149. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/source_revision_fence.py +0 -0
  150. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/study_projection.py +0 -0
  151. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/traex_evidence.py +0 -0
  152. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/treatment_continuation.py +0 -0
  153. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/catalog.py +0 -0
  154. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/README.md +0 -0
  155. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/__init__.py +0 -0
  156. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/catalog_entry.py +0 -0
  157. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/cli.py +0 -0
  158. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/context.py +0 -0
  159. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/oracles.py +0 -0
  160. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/policy.py +0 -0
  161. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/receipt.py +0 -0
  162. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/result.py +0 -0
  163. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/scope.py +0 -0
  164. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/shadow.py +0 -0
  165. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/configuration_ui.py +0 -0
  166. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/README.md +0 -0
  167. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/__init__.py +0 -0
  168. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/catalog_entry.py +0 -0
  169. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/cli.py +0 -0
  170. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/core.py +0 -0
  171. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/tests/test_connector_registry.py +0 -0
  172. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/README.md +0 -0
  173. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/__init__.py +0 -0
  174. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/catalog_entry.py +0 -0
  175. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/cli.py +0 -0
  176. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/connector_packets.py +0 -0
  177. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/item_lifecycle.py +0 -0
  178. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/layout.py +0 -0
  179. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/markdown.py +0 -0
  180. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/schemas.py +0 -0
  181. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/social_browser_x.py +0 -0
  182. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/surface.py +0 -0
  183. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/templates/layout-catalog-v0.json +0 -0
  184. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/__init__.py +0 -0
  185. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/base.py +0 -0
  186. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/factory.py +0 -0
  187. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/openviking.py +0 -0
  188. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/service_ownership.py +0 -0
  189. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/README.md +0 -0
  190. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/README.zh-CN.md +0 -0
  191. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/__init__.py +0 -0
  192. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/architecture.py +0 -0
  193. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/assembler.py +0 -0
  194. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/capture.py +0 -0
  195. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/catalog_entry.py +0 -0
  196. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/cli.py +0 -0
  197. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/cursor_commit.py +0 -0
  198. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/extension_provider.py +0 -0
  199. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/outcome_feedback.py +0 -0
  200. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/packets.py +0 -0
  201. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/private_state.py +0 -0
  202. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/profile.py +0 -0
  203. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/providers.py +0 -0
  204. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/review_settlement.py +0 -0
  205. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/runtime.py +0 -0
  206. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/sources.py +0 -0
  207. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/README.md +0 -0
  208. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/__init__.py +0 -0
  209. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/catalog_entry.py +0 -0
  210. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/runtime.py +0 -0
  211. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/documentation.py +0 -0
  212. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/README.md +0 -0
  213. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/README.zh-CN.md +0 -0
  214. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/__init__.py +0 -0
  215. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/activation.py +0 -0
  216. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/adaptive_replay_planner.py +0 -0
  217. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/catalog_entry.py +0 -0
  218. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/child_replay_runtime.py +0 -0
  219. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/composition_frontier.py +0 -0
  220. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/counterfactual_runtime.py +0 -0
  221. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/episode_runtime.py +0 -0
  222. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/harness_checkpoint.py +0 -0
  223. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/harness_gate.py +0 -0
  224. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/harness_runtime.py +0 -0
  225. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/replay_metrics.py +0 -0
  226. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/replay_runtime.py +0 -0
  227. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/resource_portfolio.py +0 -0
  228. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/result_log.py +0 -0
  229. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/router_state.py +0 -0
  230. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/source_history_reconcile.py +0 -0
  231. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/speculative_scheduler.py +0 -0
  232. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/todo_branch_plan.py +0 -0
  233. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/todo_evidence.py +0 -0
  234. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/trace_runtime.py +0 -0
  235. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/worker_branch_plan.py +0 -0
  236. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/README.md +0 -0
  237. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/__init__.py +0 -0
  238. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/catalog_entry.py +0 -0
  239. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/cli.py +0 -0
  240. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/core.py +0 -0
  241. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/README.md +0 -0
  242. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/README.zh-CN.md +0 -0
  243. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/__init__.py +0 -0
  244. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/acceptance_loop.py +0 -0
  245. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/candidate_evidence.py +0 -0
  246. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/candidate_preflight.py +0 -0
  247. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/catalog_entry.py +0 -0
  248. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/cli.py +0 -0
  249. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/cli_input.py +0 -0
  250. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/content_ops_cli.py +0 -0
  251. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/discovered_issue_promotion.py +0 -0
  252. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/openviking-pilot-handoff.md +0 -0
  253. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-acceptance-loop-v0.md +0 -0
  254. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-discovered-issue-promotion-v0.md +0 -0
  255. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-metrics-projection-v0.md +0 -0
  256. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-notification-sinks-v0.md +0 -0
  257. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-recommendation-v0.md +0 -0
  258. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-request-v0.md +0 -0
  259. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-workflow-contract-v0.md +0 -0
  260. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/state-kernel-domain-state-case-study.zh-CN.md +0 -0
  261. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/explore_projection.py +0 -0
  262. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/feasibility.py +0 -0
  263. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/github_public.py +0 -0
  264. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/intake_surface.py +0 -0
  265. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metadata_preview.py +0 -0
  266. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metrics_projection.py +0 -0
  267. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metrics_supplement.py +0 -0
  268. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metrics_supplement_cli.py +0 -0
  269. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/outcome_projection.py +0 -0
  270. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/periodic_report.py +0 -0
  271. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_description.py +0 -0
  272. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_gate_reconcile.py +0 -0
  273. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_gate_reconcile_cli.py +0 -0
  274. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_lifecycle.py +0 -0
  275. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_lifecycle_rollout.py +0 -0
  276. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_monitor_materialization.py +0 -0
  277. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_review_ack.py +0 -0
  278. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/provider_hooks.py +0 -0
  279. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_commit_evidence.py +0 -0
  280. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_context.py +0 -0
  281. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_memory.py +0 -0
  282. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_memory_provider.py +0 -0
  283. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_snapshot.py +0 -0
  284. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_cli.py +0 -0
  285. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_notification.py +0 -0
  286. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_notification_drain.py +0 -0
  287. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_recommendation.py +0 -0
  288. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_request.py +0 -0
  289. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reward_memory.py +0 -0
  290. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/workflow_plan.py +0 -0
  291. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/__init__.py +0 -0
  292. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/builtins.py +0 -0
  293. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/cli.py +0 -0
  294. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/contract.py +0 -0
  295. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/store.py +0 -0
  296. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/README.md +0 -0
  297. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/README.zh-CN.md +0 -0
  298. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/__init__.py +0 -0
  299. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/_validation.py +0 -0
  300. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/apply.py +0 -0
  301. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/architecture.py +0 -0
  302. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/catalog_entry.py +0 -0
  303. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/cli.py +0 -0
  304. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/decision_planning.py +0 -0
  305. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/explore_execution.py +0 -0
  306. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/intake.py +0 -0
  307. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/inventory.py +0 -0
  308. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/lifecycle.py +0 -0
  309. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/preparation.py +0 -0
  310. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/project_skill.py +0 -0
  311. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/ranking.py +0 -0
  312. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/readable_projection.py +0 -0
  313. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/rebuild.py +0 -0
  314. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/settlement.py +0 -0
  315. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/README.md +0 -0
  316. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/__init__.py +0 -0
  317. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/adapters.py +0 -0
  318. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/archive.py +0 -0
  319. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/audience.py +0 -0
  320. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/bindings.py +0 -0
  321. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/catalog_entry.py +0 -0
  322. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/cli.py +0 -0
  323. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/core.py +0 -0
  324. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/extension_envelope.py +0 -0
  325. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/goal_configuration.py +0 -0
  326. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/incremental.py +0 -0
  327. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/machine_defaults.py +0 -0
  328. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/machine_store.py +0 -0
  329. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/pending_intent.py +0 -0
  330. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/post_writeback_hook.py +0 -0
  331. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/presets.py +0 -0
  332. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/profile.py +0 -0
  333. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/project_progress.py +0 -0
  334. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/project_progress_snapshot.py +0 -0
  335. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/request_action.py +0 -0
  336. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/runtime_producer.py +0 -0
  337. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/stage_completion.py +0 -0
  338. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/triggers.py +0 -0
  339. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/workspace.py +0 -0
  340. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/__init__.py +0 -0
  341. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/catalog_entry.py +0 -0
  342. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/core.py +0 -0
  343. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/README.md +0 -0
  344. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/__init__.py +0 -0
  345. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/catalog_entry.py +0 -0
  346. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/cli.py +0 -0
  347. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/core.py +0 -0
  348. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/README.md +0 -0
  349. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/__init__.py +0 -0
  350. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/catalog_entry.py +0 -0
  351. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/scan_cli.py +0 -0
  352. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/scanner.py +0 -0
  353. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/tests/test_scanner.py +0 -0
  354. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/registry.py +0 -0
  355. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/README.md +0 -0
  356. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/README.zh-CN.md +0 -0
  357. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/__init__.py +0 -0
  358. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/catalog_entry.py +0 -0
  359. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/envelope.py +0 -0
  360. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/fixture.py +0 -0
  361. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/intake.py +0 -0
  362. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/ledger.py +0 -0
  363. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/projection.py +0 -0
  364. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/receipt.py +0 -0
  365. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/README.md +0 -0
  366. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/__init__.py +0 -0
  367. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/catalog_entry.py +0 -0
  368. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/cli.py +0 -0
  369. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/git_hook.py +0 -0
  370. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/interaction_hook.py +0 -0
  371. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/ledger.py +0 -0
  372. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/policy.py +0 -0
  373. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/repository.py +0 -0
  374. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/README.md +0 -0
  375. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/README.zh-CN.md +0 -0
  376. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/__init__.py +0 -0
  377. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/application.py +0 -0
  378. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/architecture.py +0 -0
  379. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/candidate_review.py +0 -0
  380. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/catalog_entry.py +0 -0
  381. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/cli.py +0 -0
  382. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/dogfood.py +0 -0
  383. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/evaluation.py +0 -0
  384. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/evaluation_fixtures.py +0 -0
  385. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/experiment.py +0 -0
  386. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/feedback_hint.py +0 -0
  387. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/health.py +0 -0
  388. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/ingestion.py +0 -0
  389. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/memory_utility.py +0 -0
  390. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/outbound.py +0 -0
  391. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/registry.py +0 -0
  392. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/runtime_hooks.py +0 -0
  393. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/scoped_feedback.py +0 -0
  394. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/README.md +0 -0
  395. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/__init__.py +0 -0
  396. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/catalog_entry.py +0 -0
  397. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/cli.py +0 -0
  398. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/contract.py +0 -0
  399. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/docs/openviking-project-peer.md +0 -0
  400. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/reward_memory.py +0 -0
  401. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/README.md +0 -0
  402. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/__init__.py +0 -0
  403. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/catalog_entry.py +0 -0
  404. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/cli.py +0 -0
  405. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/docs/agent-reach-ops-source-map.md +0 -0
  406. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/docs/finance-market-snapshot-probe.md +0 -0
  407. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/finance_extension_migration.py +0 -0
  408. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/install_check.py +0 -0
  409. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/planner.py +0 -0
  410. {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/source_map.py +0 -0
  411. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat.py +0 -0
  412. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_acp.py +0 -0
  413. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_action_store.py +0 -0
  414. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_actions.py +0 -0
  415. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_agent.py +0 -0
  416. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_attachments.py +0 -0
  417. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_completed_todos.py +0 -0
  418. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_configuration_api.py +0 -0
  419. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_endpoints.py +0 -0
  420. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_goal_configuration_api.py +0 -0
  421. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_goal_lifecycle_actions.py +0 -0
  422. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_goal_subagent_api.py +0 -0
  423. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_lark_api.py +0 -0
  424. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_machine_configuration_api.py +0 -0
  425. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_monitor_actions.py +0 -0
  426. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_providers.py +0 -0
  427. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_runtime.py +0 -0
  428. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_ssh_source_api.py +0 -0
  429. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_status_api.py +0 -0
  430. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_todo_actions.py +0 -0
  431. {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_workspace_directory.py +0 -0
  432. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/README.md +0 -0
  433. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/__init__.py +0 -0
  434. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/hooks/goal_policy.py +0 -0
  435. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/hooks/goal_state.py +0 -0
  436. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/mcp/loopx_mcp.py +0 -0
  437. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/scripts/connect.py +0 -0
  438. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/scripts/goalmode_cmd.py +0 -0
  439. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/scripts/install.py +0 -0
  440. {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/statusline/goal_status.py +0 -0
  441. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli.py +0 -0
  442. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/__init__.py +0 -0
  443. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/_host_thread.py +0 -0
  444. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/authority_shadow.py +0 -0
  445. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_boundary.py +0 -0
  446. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_concurrency.py +0 -0
  447. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_continuation.py +0 -0
  448. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_dispatch.py +0 -0
  449. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_experiment_board.py +0 -0
  450. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_study.py +0 -0
  451. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/bootstrap_connect.py +0 -0
  452. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/canary.py +0 -0
  453. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/canary_release_qualification.py +0 -0
  454. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/capability.py +0 -0
  455. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/coordination_shadow.py +0 -0
  456. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/dash.py +0 -0
  457. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/deepresearch.py +0 -0
  458. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/doctor.py +0 -0
  459. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/dreaming.py +0 -0
  460. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/evidence_log.py +0 -0
  461. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/explore.py +0 -0
  462. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/explore_feishu_commands.py +0 -0
  463. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/explore_planning_commands.py +0 -0
  464. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/extension.py +0 -0
  465. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/first_run_report.py +0 -0
  466. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/goal_amendment_proposal.py +0 -0
  467. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/goal_channel.py +0 -0
  468. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/goal_lifecycle.py +0 -0
  469. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/handoff_mode.py +0 -0
  470. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/history.py +0 -0
  471. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/host_mode_plan.py +0 -0
  472. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/lark_inbox.py +0 -0
  473. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/lark_kanban.py +0 -0
  474. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/ml_experiment.py +0 -0
  475. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/opencode2_goal_worker.py +0 -0
  476. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/post_writeback.py +0 -0
  477. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/pr_review.py +0 -0
  478. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/presentation.py +0 -0
  479. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/preset.py +0 -0
  480. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/project.py +0 -0
  481. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/project_lifecycle.py +0 -0
  482. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/project_lifecycle_sinks.py +0 -0
  483. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_host_poll.py +0 -0
  484. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_monitor_poll.py +0 -0
  485. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_registration.py +0 -0
  486. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_request.py +0 -0
  487. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_scheduler_followup.py +0 -0
  488. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/ready_score.py +0 -0
  489. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin.py +0 -0
  490. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_configure.py +0 -0
  491. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_lifecycle.py +0 -0
  492. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_peer.py +0 -0
  493. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_thread_resolution.py +0 -0
  494. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_authority.py +0 -0
  495. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/reliability_diagnostics.py +0 -0
  496. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/review_batch.py +0 -0
  497. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/shared_goal_alignment.py +0 -0
  498. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/slash_commands.py +0 -0
  499. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/start_goal.py +0 -0
  500. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter.py +0 -0
  501. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_bootstrap.py +0 -0
  502. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_bootstrap_registration.py +0 -0
  503. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_runtime_idle.py +0 -0
  504. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_scheduler.py +0 -0
  505. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_session_runtime.py +0 -0
  506. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_visible_common.py +0 -0
  507. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_visible_driver.py +0 -0
  508. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_visible_pilot.py +0 -0
  509. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/status.py +0 -0
  510. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/status_registration.py +0 -0
  511. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/summary_all.py +0 -0
  512. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control.py +0 -0
  513. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_backup.py +0 -0
  514. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_chat_endpoint.py +0 -0
  515. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_heartbeat_registration.py +0 -0
  516. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_registry.py +0 -0
  517. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_supervisor.py +0 -0
  518. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/task_lease.py +0 -0
  519. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo.py +0 -0
  520. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo_argument_validation.py +0 -0
  521. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo_registration.py +0 -0
  522. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_dsh_host.py +0 -0
  523. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_inspection.py +0 -0
  524. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_registration.py +0 -0
  525. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_rendering.py +0 -0
  526. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_selection.py +0 -0
  527. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_todo_writeback.py +0 -0
  528. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/version.py +0 -0
  529. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/worker_bridge.py +0 -0
  530. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/workflow_skills.py +0 -0
  531. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_rollout.py +0 -0
  532. {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_runtime.py +0 -0
  533. {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_probe.py +0 -0
  534. {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_probe_markdown.py +0 -0
  535. {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_runtime_probe.py +0 -0
  536. {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_scheduler.py +0 -0
  537. {loopx-1.0.1 → loopx-1.0.2}/loopx/command_invocation.py +0 -0
  538. {loopx-1.0.1 → loopx-1.0.2}/loopx/configuration_catalog.py +0 -0
  539. {loopx-1.0.1 → loopx-1.0.2}/loopx/configuration_transaction.py +0 -0
  540. {loopx-1.0.1 → loopx-1.0.2}/loopx/configure_goal.py +0 -0
  541. {loopx-1.0.1 → loopx-1.0.2}/loopx/contract.py +0 -0
  542. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/__init__.py +0 -0
  543. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/__init__.py +0 -0
  544. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/agent_lane_recommendation.py +0 -0
  545. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/agent_scope.py +0 -0
  546. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/agent_scope_frontier.py +0 -0
  547. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/capability_gate.py +0 -0
  548. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/delivery_workspace.py +0 -0
  549. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/delivery_workspace.ts +0 -0
  550. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/identity.py +0 -0
  551. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/legacy_migration.py +0 -0
  552. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/management_projection.py +0 -0
  553. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/material_frontier.py +0 -0
  554. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/material_handoff.py +0 -0
  555. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/profile.py +0 -0
  556. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/runtime_model.py +0 -0
  557. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/subagent_activity.py +0 -0
  558. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/supervisor.py +0 -0
  559. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/supervisor_events.py +0 -0
  560. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/supervisor_inject.py +0 -0
  561. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/work_mode.py +0 -0
  562. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/workspace_guard.py +0 -0
  563. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/capability_hooks.py +0 -0
  564. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/capability_hooks.ts +0 -0
  565. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/__init__.py +0 -0
  566. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/authority_store.ts +0 -0
  567. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/authority_store_codec.ts +0 -0
  568. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/configuration.py +0 -0
  569. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_projection.ts +0 -0
  570. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract.py +0 -0
  571. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract.ts +0 -0
  572. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/file_authority_store.ts +0 -0
  573. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/file_provider.py +0 -0
  574. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/goal_state_shadow.py +0 -0
  575. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/head.py +0 -0
  576. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/legacy_writer_fence.py +0 -0
  577. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/legacy_writer_fence.ts +0 -0
  578. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/legacy_writer_lock_paths.ts +0 -0
  579. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow.ts +0 -0
  580. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_adapter.py +0 -0
  581. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_identity.ts +0 -0
  582. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_observation.py +0 -0
  583. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_outbox.py +0 -0
  584. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_outbox.ts +0 -0
  585. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_projection.py +0 -0
  586. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_snapshot.py +0 -0
  587. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/nokv_authority_store.ts +0 -0
  588. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/nokv_jsonl_helper.py +0 -0
  589. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/nokv_jsonl_transport.ts +0 -0
  590. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/postgresql_authority_store.ts +0 -0
  591. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/runtime_shadow_writer_adapter.py +0 -0
  592. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/shadow_management.py +0 -0
  593. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/shadow_management.ts +0 -0
  594. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_claim.ts +0 -0
  595. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_compatibility_edit.ts +0 -0
  596. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_create.ts +0 -0
  597. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_update.ts +0 -0
  598. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_program.py +0 -0
  599. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_program.ts +0 -0
  600. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime.py +0 -0
  601. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_errors.ts +0 -0
  602. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_io.ts +0 -0
  603. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_server.ts +0 -0
  604. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/__init__.py +0 -0
  605. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/activation.py +0 -0
  606. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/activation_service.py +0 -0
  607. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/active_state_event_projection.py +0 -0
  608. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/active_state_metadata.py +0 -0
  609. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/active_state_sections.py +0 -0
  610. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/botmux_runtime.py +0 -0
  611. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/configure_goal_service.py +0 -0
  612. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/contract_health.py +0 -0
  613. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/deletion_service.py +0 -0
  614. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/dreaming.py +0 -0
  615. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/global_registry_health.py +0 -0
  616. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/global_registry_shadow.py +0 -0
  617. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_amendment_proposal.py +0 -0
  618. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_amendment_proposal.ts +0 -0
  619. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_channel.py +0 -0
  620. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_channel_projection.py +0 -0
  621. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/outcome_continuity.py +0 -0
  622. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/replan_rules.py +0 -0
  623. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/terminal.py +0 -0
  624. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision.py +0 -0
  625. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision_policy.py +0 -0
  626. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision_state.py +0 -0
  627. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/path_resolution.py +0 -0
  628. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/shared_goal_alignment.py +0 -0
  629. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/shared_goal_alignment.ts +0 -0
  630. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/start_contract.py +0 -0
  631. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/start_goal_todo_delta.py +0 -0
  632. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/vision_checkpoint.py +0 -0
  633. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/governed_capability.ts +0 -0
  634. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/__init__.py +0 -0
  635. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/cross_runtime_impl_review.py +0 -0
  636. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/delivery_contract.py +0 -0
  637. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/handoff_runs.py +0 -0
  638. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/project_handoff.py +0 -0
  639. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/review_batch.py +0 -0
  640. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/review_packet_context.py +0 -0
  641. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/agent.py +0 -0
  642. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/budget.py +0 -0
  643. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/builder.py +0 -0
  644. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/host.py +0 -0
  645. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/rules.py +0 -0
  646. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/task_body.py +0 -0
  647. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/visible_goal.py +0 -0
  648. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/host_adapter_settlement.py +0 -0
  649. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/operator_inbox_binding.py +0 -0
  650. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/post_writeback_composition_retry.py +0 -0
  651. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/post_writeback_hook_transaction.ts +0 -0
  652. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/projects/__init__.py +0 -0
  653. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/projects/contract.py +0 -0
  654. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/projects/registry.py +0 -0
  655. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/__init__.py +0 -0
  656. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/accounting_artifact_transaction.ts +0 -0
  657. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/cli_projection.py +0 -0
  658. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/codex_session_usage.py +0 -0
  659. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/decision_summary.py +0 -0
  660. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/effect_program.py +0 -0
  661. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/error_codes.py +0 -0
  662. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/goal_boundary.py +0 -0
  663. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/heartbeat_receipt.py +0 -0
  664. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/heartbeat_recommendation.py +0 -0
  665. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/host_poll_receipts.py +0 -0
  666. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/live_decision.py +0 -0
  667. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/monitor_poll.py +0 -0
  668. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/monitor_poll_commit.ts +0 -0
  669. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/policy_constants.py +0 -0
  670. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/projection_repair.py +0 -0
  671. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/recent_runs.py +0 -0
  672. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/refresh_recovery.ts +0 -0
  673. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/scheduler_ack.py +0 -0
  674. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/selected_todo_projection.py +0 -0
  675. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_cli.py +0 -0
  676. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_phase.ts +0 -0
  677. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_precedence.py +0 -0
  678. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_readback.ts +0 -0
  679. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_validation.py +0 -0
  680. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_workspace_causality.py +0 -0
  681. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_workspace_causality.ts +0 -0
  682. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/should_run.py +0 -0
  683. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/should_run_packet.py +0 -0
  684. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/slot_accounting.py +0 -0
  685. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/spend_commit.py +0 -0
  686. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/spend_commit.ts +0 -0
  687. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/spend_sources.py +0 -0
  688. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/stall_repair.py +0 -0
  689. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/states.py +0 -0
  690. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/task_orchestration.py +0 -0
  691. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/task_orchestration_admission.py +0 -0
  692. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/turn_envelope.py +0 -0
  693. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/turn_envelope.ts +0 -0
  694. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/usage_collector.py +0 -0
  695. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/usage_summary.py +0 -0
  696. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/void_commit.py +0 -0
  697. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/void_commit.ts +0 -0
  698. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/reward_memory.py +0 -0
  699. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/__init__.py +0 -0
  700. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/agent_scoped_evidence_log.py +0 -0
  701. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/decision_freshness.py +0 -0
  702. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/event_ledger.py +0 -0
  703. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/event_store_migration_bridge.py +0 -0
  704. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/goal_project_route.py +0 -0
  705. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/local_state_write_correctness.py +0 -0
  706. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/promotion_readiness.py +0 -0
  707. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/public_safety.py +0 -0
  708. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_artifacts.py +0 -0
  709. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_compaction.py +0 -0
  710. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_context_retention.py +0 -0
  711. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_history.py +0 -0
  712. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_index_duplicates.py +0 -0
  713. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_index_rebuild.py +0 -0
  714. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/runtime_projection_route.py +0 -0
  715. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/runtime_projection_writer.py +0 -0
  716. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/session_runtime.py +0 -0
  717. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/shared_runtime_material_projection.py +0 -0
  718. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/shared_runtime_refresh_projection.py +0 -0
  719. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/stale_latest_run.py +0 -0
  720. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/status_classifications.py +0 -0
  721. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/status_projection_cache.py +0 -0
  722. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/stride_observation.py +0 -0
  723. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/time.py +0 -0
  724. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/trajectory_hygiene.py +0 -0
  725. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/validation_command.py +0 -0
  726. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime_decode.ts +0 -0
  727. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/__init__.py +0 -0
  728. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/arbitration.py +0 -0
  729. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/automation_liveness.py +0 -0
  730. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/execution_context.py +0 -0
  731. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/external_evidence_observation.py +0 -0
  732. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_commit.ts +0 -0
  733. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_commit_cli.ts +0 -0
  734. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_followup.ts +0 -0
  735. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_followup_cli.ts +0 -0
  736. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_display.py +0 -0
  737. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_poll_writeback.py +0 -0
  738. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_todo.py +0 -0
  739. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_wait.py +0 -0
  740. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/scheduler_hint.py +0 -0
  741. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state.py +0 -0
  742. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state_store.ts +0 -0
  743. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state_transition_rules.py +0 -0
  744. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state_transition_rules.ts +0 -0
  745. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/time.py +0 -0
  746. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/settlement_driver.py +0 -0
  747. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/__init__.py +0 -0
  748. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/active_state_projection.py +0 -0
  749. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/agent_lane_projection.py +0 -0
  750. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/attention_projection.py +0 -0
  751. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/autonomous_replan_projection.py +0 -0
  752. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/collection.py +0 -0
  753. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/contract_projection.py +0 -0
  754. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/dreaming_projection.py +0 -0
  755. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/goal_attention_projection.py +0 -0
  756. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/lifecycle_projection.py +0 -0
  757. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/monitor_display_projection.py +0 -0
  758. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/registry_health_projection.py +0 -0
  759. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/run_projection.py +0 -0
  760. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/runtime_summaries.py +0 -0
  761. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/ssh_host_catalog.py +0 -0
  762. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/ssh_tunnel.py +0 -0
  763. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/__init__.py +0 -0
  764. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/action_portfolio_scenarios.py +0 -0
  765. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/actual_default_model_behavior_portfolio.py +0 -0
  766. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_fixtures.py +0 -0
  767. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_ladder.py +0 -0
  768. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_row_support.py +0 -0
  769. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_rows_stage2c.py +0 -0
  770. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/canary_harness.py +0 -0
  771. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/capability_monitor_repair_tool_behavior.py +0 -0
  772. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/cli_output_budget.py +0 -0
  773. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/cli_output_differential.py +0 -0
  774. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/cli_output_semantics.py +0 -0
  775. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/control_plane_composition_scenarios.py +0 -0
  776. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/decision_replay.py +0 -0
  777. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/doubao_model_behavior_actor.py +0 -0
  778. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_action_oracles.py +0 -0
  779. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_corpus.py +0 -0
  780. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_qualification.py +0 -0
  781. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_retained_cases.py +0 -0
  782. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_tool_behavior.py +0 -0
  783. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/onboarding_model_behavior_qualification.py +0 -0
  784. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/quota_fixtures.py +0 -0
  785. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/quota_should_run_parity.py +0 -0
  786. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/release_commit_qualification.py +0 -0
  787. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/replan_semantic_action_behavior.py +0 -0
  788. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/scoped_gate_successor_tool_behavior.py +0 -0
  789. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/selected_todo_tool_behavior.py +0 -0
  790. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/terminal_settlement_tool_behavior.py +0 -0
  791. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/turn_journal_characterization.py +0 -0
  792. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/__init__.py +0 -0
  793. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/active_state_editing.py +0 -0
  794. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/addition.py +0 -0
  795. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/claim_visibility.py +0 -0
  796. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_fence.py +0 -0
  797. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_fence.ts +0 -0
  798. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_policy.ts +0 -0
  799. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_state.py +0 -0
  800. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_state.ts +0 -0
  801. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_validation_accountability.py +0 -0
  802. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_validation_plan.ts +0 -0
  803. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/contract.py +0 -0
  804. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/decision_scope.py +0 -0
  805. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/deferred_resume.py +0 -0
  806. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/external_wait_contract.py +0 -0
  807. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/external_wait_writeback.py +0 -0
  808. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/frontier_deadline.py +0 -0
  809. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/goal_todo_projection.py +0 -0
  810. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/handoff_gate.py +0 -0
  811. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/handoff_mode.py +0 -0
  812. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/handoff_note.py +0 -0
  813. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/line_update.py +0 -0
  814. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/list_projection.py +0 -0
  815. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/machine_region.py +0 -0
  816. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/markdown.py +0 -0
  817. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/monitor_metadata.py +0 -0
  818. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/mutation_authority.py +0 -0
  819. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/next_action.ts +0 -0
  820. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/next_action_runtime.py +0 -0
  821. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/projection.py +0 -0
  822. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/provider_compatibility_edit.py +0 -0
  823. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/resume_condition.py +0 -0
  824. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/resume_condition.ts +0 -0
  825. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/route_continuation.py +0 -0
  826. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/succession_warning.py +0 -0
  827. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/summary_item.py +0 -0
  828. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/text.py +0 -0
  829. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/todo_index.py +0 -0
  830. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/unblock_resume.py +0 -0
  831. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/user_gate.py +0 -0
  832. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/write_correctness.py +0 -0
  833. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/write_hint.py +0 -0
  834. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/write_policy.py +0 -0
  835. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/__init__.py +0 -0
  836. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/codex_cli.py +0 -0
  837. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/delivery_continuity.py +0 -0
  838. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/delivery_continuity.ts +0 -0
  839. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/driver.py +0 -0
  840. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/executor.py +0 -0
  841. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/host_failure.py +0 -0
  842. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/host_todo_completion.ts +0 -0
  843. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/journal_store.py +0 -0
  844. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/loop_controller.py +0 -0
  845. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/recovery.py +0 -0
  846. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/session_recovery.py +0 -0
  847. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/settlement.py +0 -0
  848. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/settlement.ts +0 -0
  849. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/subagent_execution_topology.py +0 -0
  850. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/subagent_host_adapter.py +0 -0
  851. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/transaction.py +0 -0
  852. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/turn_journal.ts +0 -0
  853. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/turn_journal_effects.ts +0 -0
  854. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/turn_journal_runtime.py +0 -0
  855. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_transaction_contract.json +0 -0
  856. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/__init__.py +0 -0
  857. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/accountable_settlement.py +0 -0
  858. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/action_portfolio.py +0 -0
  859. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/action_portfolio.ts +0 -0
  860. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/action_selection_contract.py +0 -0
  861. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_fields.py +0 -0
  862. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_item.py +0 -0
  863. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_queue.py +0 -0
  864. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_routing.py +0 -0
  865. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/autonomous_candidates.py +0 -0
  866. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/autonomous_replan_ack.py +0 -0
  867. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/autonomous_replan_obligation.py +0 -0
  868. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/backlog_hygiene.py +0 -0
  869. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/capability_monitor_fallback.py +0 -0
  870. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_batch_scale.py +0 -0
  871. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_outcome.py +0 -0
  872. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_outcome.ts +0 -0
  873. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_signals.py +0 -0
  874. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/execution_obligation.py +0 -0
  875. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/goal_route_hint.py +0 -0
  876. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/governed_transition_proposal.py +0 -0
  877. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/interaction_contract.py +0 -0
  878. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/interaction_contract.ts +0 -0
  879. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/issue_meta_surface.py +0 -0
  880. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/lifecycle.py +0 -0
  881. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/local_lease_record.py +0 -0
  882. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/operator_inbox.py +0 -0
  883. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/outcome_followthrough.py +0 -0
  884. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/pending_capability_intent.ts +0 -0
  885. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/planning_horizon.ts +0 -0
  886. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/planning_inventory.py +0 -0
  887. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/planning_inventory.ts +0 -0
  888. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/primary_action.py +0 -0
  889. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/progress_observation.py +0 -0
  890. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/progress_result.py +0 -0
  891. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/project_asset.py +0 -0
  892. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/refresh_recommendation.py +0 -0
  893. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/refresh_recommendation.ts +0 -0
  894. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/repair_delta.py +0 -0
  895. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/replan_settlement.py +0 -0
  896. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/replan_settlement.ts +0 -0
  897. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/repository_delivery.ts +0 -0
  898. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/runtime_capability_reentry.py +0 -0
  899. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/status_contract.py +0 -0
  900. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_graph.py +0 -0
  901. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease.py +0 -0
  902. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_acquire.ts +0 -0
  903. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_acquire_adapter.py +0 -0
  904. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_acquire_cli.ts +0 -0
  905. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_lifecycle.ts +0 -0
  906. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_lifecycle_decision.ts +0 -0
  907. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/user_action_frontier.py +0 -0
  908. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/work_lane.py +0 -0
  909. {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/work_lane_context.py +0 -0
  910. {loopx-1.0.1 → loopx-1.0.2}/loopx/dash_server.py +0 -0
  911. {loopx-1.0.1 → loopx-1.0.2}/loopx/dashboard_launcher.py +0 -0
  912. {loopx-1.0.1 → loopx-1.0.2}/loopx/demo.py +0 -0
  913. {loopx-1.0.1 → loopx-1.0.2}/loopx/diagnose.py +0 -0
  914. {loopx-1.0.1 → loopx-1.0.2}/loopx/doctor.py +0 -0
  915. {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_packs/__init__.py +0 -0
  916. {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_packs/issue_fix.py +0 -0
  917. {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_packs/ml_experiment.py +0 -0
  918. {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_state.py +0 -0
  919. {loopx-1.0.1 → loopx-1.0.2}/loopx/dreaming.py +0 -0
  920. {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/README.md +0 -0
  921. {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/__init__.py +0 -0
  922. {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/__main__.py +0 -0
  923. {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/host_failure_map.py +0 -0
  924. {loopx-1.0.1 → loopx-1.0.2}/loopx/entrypoint.py +0 -0
  925. {loopx-1.0.1 → loopx-1.0.2}/loopx/execution_profile.py +0 -0
  926. {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/README.md +0 -0
  927. {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/__init__.py +0 -0
  928. {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/__init__.py +0 -0
  929. {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/contract.py +0 -0
  930. {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/runtime.py +0 -0
  931. {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/traex.py +0 -0
  932. {loopx-1.0.1 → loopx-1.0.2}/loopx/explore_graph.py +0 -0
  933. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/__init__.py +0 -0
  934. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/bundled.py +0 -0
  935. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/capability_admission.py +0 -0
  936. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/execution_envelope.py +0 -0
  937. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/external_connector_provider.py +0 -0
  938. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/external_connector_runtime.py +0 -0
  939. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/governed_capability_execution.py +0 -0
  940. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/hook_adapters.py +0 -0
  941. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/README.md +0 -0
  942. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/__init__.py +0 -0
  943. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/app_setup.py +0 -0
  944. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/bot_scopes.py +0 -0
  945. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/cli_resolution.py +0 -0
  946. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/docs/lark-event-inbox.md +0 -0
  947. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/document_comment_provider.py +0 -0
  948. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_collector.py +0 -0
  949. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_collector_routes.py +0 -0
  950. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_collector_runtime.py +0 -0
  951. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_inbox.py +0 -0
  952. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/extension.toml +0 -0
  953. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel.py +0 -0
  954. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_contracts.py +0 -0
  955. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_lifecycle.py +0 -0
  956. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_notification.py +0 -0
  957. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_runtime.py +0 -0
  958. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_setup.py +0 -0
  959. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_targets.py +0 -0
  960. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_transport.py +0 -0
  961. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_batch.py +0 -0
  962. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_connections.py +0 -0
  963. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_routing.py +0 -0
  964. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_runtime.py +0 -0
  965. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/group_history.py +0 -0
  966. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/group_history_cursor.py +0 -0
  967. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/inbox_reactions.py +0 -0
  968. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/inbox_reply.py +0 -0
  969. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/miaoda_report.py +0 -0
  970. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/outbound.py +0 -0
  971. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/periodic_report_cli.py +0 -0
  972. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/periodic_report_delivery.py +0 -0
  973. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/periodic_report_request.py +0 -0
  974. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/__init__.py +0 -0
  975. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_results.py +0 -0
  976. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_singleflight.py +0 -0
  977. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_source_guard.py +0 -0
  978. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_stage_document.py +0 -0
  979. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_visual_integrity.py +0 -0
  980. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_visual_readback.py +0 -0
  981. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_visual_styles.py +0 -0
  982. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/issue_fix_surface.py +0 -0
  983. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/kanban.py +0 -0
  984. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/message_card.py +0 -0
  985. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/periodic_report.py +0 -0
  986. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/projection_rows.py +0 -0
  987. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/record_io.py +0 -0
  988. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/sync_receipt.py +0 -0
  989. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/private_json.py +0 -0
  990. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/provider.py +0 -0
  991. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/reviewer_notification.py +0 -0
  992. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/routed_inbox.py +0 -0
  993. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/turn_start_sync.py +0 -0
  994. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/manifest.py +0 -0
  995. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/__init__.py +0 -0
  996. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/activation.py +0 -0
  997. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/extension.toml +0 -0
  998. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/provider.py +0 -0
  999. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/sink.py +0 -0
  1000. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/__init__.py +0 -0
  1001. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/extension.toml +0 -0
  1002. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/history_export.py +0 -0
  1003. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/project_peer.py +0 -0
  1004. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/provider.py +0 -0
  1005. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/presentation.py +0 -0
  1006. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/process_runtime.py +0 -0
  1007. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/readiness.py +0 -0
  1008. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/runtime.py +0 -0
  1009. {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/scaffold.py +0 -0
  1010. {loopx-1.0.1 → loopx-1.0.2}/loopx/file_lock.py +0 -0
  1011. {loopx-1.0.1 → loopx-1.0.2}/loopx/global_registry.py +0 -0
  1012. {loopx-1.0.1 → loopx-1.0.2}/loopx/global_risks.py +0 -0
  1013. {loopx-1.0.1 → loopx-1.0.2}/loopx/global_todos.py +0 -0
  1014. {loopx-1.0.1 → loopx-1.0.2}/loopx/goal_mode_context.py +0 -0
  1015. {loopx-1.0.1 → loopx-1.0.2}/loopx/goal_mode_mcp.py +0 -0
  1016. {loopx-1.0.1 → loopx-1.0.2}/loopx/handoff_budget.py +0 -0
  1017. {loopx-1.0.1 → loopx-1.0.2}/loopx/heartbeat_prequota.py +0 -0
  1018. {loopx-1.0.1 → loopx-1.0.2}/loopx/heartbeat_prompt.py +0 -0
  1019. {loopx-1.0.1 → loopx-1.0.2}/loopx/help_surface.py +0 -0
  1020. {loopx-1.0.1 → loopx-1.0.2}/loopx/host_loop_activation.py +0 -0
  1021. {loopx-1.0.1 → loopx-1.0.2}/loopx/host_mode_planner.py +0 -0
  1022. {loopx-1.0.1 → loopx-1.0.2}/loopx/install_contract.py +0 -0
  1023. {loopx-1.0.1 → loopx-1.0.2}/loopx/interface_budget.py +0 -0
  1024. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/README.md +0 -0
  1025. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/__init__.py +0 -0
  1026. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/app_server.py +0 -0
  1027. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/cli.py +0 -0
  1028. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/context.py +0 -0
  1029. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/control_plane.py +0 -0
  1030. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/guards.py +0 -0
  1031. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/runtime.py +0 -0
  1032. {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/server.py +0 -0
  1033. {loopx-1.0.1 → loopx-1.0.2}/loopx/long_task_cadence.py +0 -0
  1034. {loopx-1.0.1 → loopx-1.0.2}/loopx/materials.py +0 -0
  1035. {loopx-1.0.1 → loopx-1.0.2}/loopx/ml_experiment.py +0 -0
  1036. {loopx-1.0.1 → loopx-1.0.2}/loopx/onboarding.py +0 -0
  1037. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode2_goal_mode/README.md +0 -0
  1038. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode2_goal_mode/__init__.py +0 -0
  1039. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode2_goal_mode/opencode2-goal-worker.mjs +0 -0
  1040. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/README.md +0 -0
  1041. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/__init__.py +0 -0
  1042. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/goal-bridge-runtime.mjs +0 -0
  1043. {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/loopx-goal.js +0 -0
  1044. {loopx-1.0.1 → loopx-1.0.2}/loopx/operator_gate.py +0 -0
  1045. {loopx-1.0.1 → loopx-1.0.2}/loopx/paths.py +0 -0
  1046. {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/README.md +0 -0
  1047. {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/__init__.py +0 -0
  1048. {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/loopx-goal.ts +0 -0
  1049. {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/pi-goal-loop-runtime.mjs +0 -0
  1050. {loopx-1.0.1 → loopx-1.0.2}/loopx/pr_review.py +0 -0
  1051. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/README.md +0 -0
  1052. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/__init__.py +0 -0
  1053. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/explore_views.py +0 -0
  1054. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/markdown.py +0 -0
  1055. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/projection_source_reconcile.py +0 -0
  1056. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/projections/__init__.py +0 -0
  1057. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/projections/session_dash.py +0 -0
  1058. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/public_safety.py +0 -0
  1059. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/__init__.py +0 -0
  1060. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/goal_channel_html.py +0 -0
  1061. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/periodic_report_html.py +0 -0
  1062. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/periodic_report_markdown.py +0 -0
  1063. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/quota_event_markdown.py +0 -0
  1064. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/quota_markdown.py +0 -0
  1065. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/session_dash_html.py +0 -0
  1066. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/status_markdown.py +0 -0
  1067. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/trajectory_hygiene_markdown.py +0 -0
  1068. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/turn_envelope_markdown.py +0 -0
  1069. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/sinks/__init__.py +0 -0
  1070. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/sinks/openviking_periodic_report.py +0 -0
  1071. {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/static_site.py +0 -0
  1072. {loopx-1.0.1 → loopx-1.0.2}/loopx/presets.py +0 -0
  1073. {loopx-1.0.1 → loopx-1.0.2}/loopx/project_alias.py +0 -0
  1074. {loopx-1.0.1 → loopx-1.0.2}/loopx/project_map.py +0 -0
  1075. {loopx-1.0.1 → loopx-1.0.2}/loopx/project_prompt.py +0 -0
  1076. {loopx-1.0.1 → loopx-1.0.2}/loopx/project_uninstall.py +0 -0
  1077. {loopx-1.0.1 → loopx-1.0.2}/loopx/promotion_gate.py +0 -0
  1078. {loopx-1.0.1 → loopx-1.0.2}/loopx/python_install_owner.py +0 -0
  1079. {loopx-1.0.1 → loopx-1.0.2}/loopx/quota.py +0 -0
  1080. {loopx-1.0.1 → loopx-1.0.2}/loopx/ready_score.py +0 -0
  1081. {loopx-1.0.1 → loopx-1.0.2}/loopx/registry.py +0 -0
  1082. {loopx-1.0.1 → loopx-1.0.2}/loopx/registry_writability.py +0 -0
  1083. {loopx-1.0.1 → loopx-1.0.2}/loopx/release_candidate.py +0 -0
  1084. {loopx-1.0.1 → loopx-1.0.2}/loopx/release_manifest.py +0 -0
  1085. {loopx-1.0.1 → loopx-1.0.2}/loopx/repository_identity.py +0 -0
  1086. {loopx-1.0.1 → loopx-1.0.2}/loopx/review_packet.py +0 -0
  1087. {loopx-1.0.1 → loopx-1.0.2}/loopx/rollout_event_log.py +0 -0
  1088. {loopx-1.0.1 → loopx-1.0.2}/loopx/runtime.py +0 -0
  1089. {loopx-1.0.1 → loopx-1.0.2}/loopx/self_update.py +0 -0
  1090. {loopx-1.0.1 → loopx-1.0.2}/loopx/self_update_download.py +0 -0
  1091. {loopx-1.0.1 → loopx-1.0.2}/loopx/session_runtime.py +0 -0
  1092. {loopx-1.0.1 → loopx-1.0.2}/loopx/slash_command_files.py +0 -0
  1093. {loopx-1.0.1 → loopx-1.0.2}/loopx/slash_commands.py +0 -0
  1094. {loopx-1.0.1 → loopx-1.0.2}/loopx/state_backup.py +0 -0
  1095. {loopx-1.0.1 → loopx-1.0.2}/loopx/state_migration.py +0 -0
  1096. {loopx-1.0.1 → loopx-1.0.2}/loopx/state_projection.py +0 -0
  1097. {loopx-1.0.1 → loopx-1.0.2}/loopx/status.py +0 -0
  1098. {loopx-1.0.1 → loopx-1.0.2}/loopx/summary_all.py +0 -0
  1099. {loopx-1.0.1 → loopx-1.0.2}/loopx/thread_agent_binding.py +0 -0
  1100. {loopx-1.0.1 → loopx-1.0.2}/loopx/todo_followups.py +0 -0
  1101. {loopx-1.0.1 → loopx-1.0.2}/loopx/todo_suggestion_prompt.py +0 -0
  1102. {loopx-1.0.1 → loopx-1.0.2}/loopx/turn_identity.py +0 -0
  1103. {loopx-1.0.1 → loopx-1.0.2}/loopx/upgrade.py +0 -0
  1104. {loopx-1.0.1 → loopx-1.0.2}/loopx/visible_governance.py +0 -0
  1105. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  1106. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  1107. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  1108. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  1109. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  1110. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  1111. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  1112. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  1113. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  1114. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  1115. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  1116. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-0bhIx5_M.css +0 -0
  1117. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-4FpkdPZm.css +0 -0
  1118. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-5XHJEBmR.css +0 -0
  1119. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-6lOUUHx7.js +0 -0
  1120. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-87n1zlNJ.css +0 -0
  1121. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-9IiDicAv.js +0 -0
  1122. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-9d1S9bUM.css +0 -0
  1123. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-9wD_r5Rp.js +0 -0
  1124. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-B1C2FwbO.js +0 -0
  1125. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-B8L75LO_.js +0 -0
  1126. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BEQmjl7v.js +0 -0
  1127. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BGO6BJCs.js +0 -0
  1128. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BGlIOe4t.js +0 -0
  1129. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BP0RmPHX.css +0 -0
  1130. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BP1QffUh.js +0 -0
  1131. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BQbV8tqm.js +0 -0
  1132. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BSxkq-RJ.css +0 -0
  1133. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BUErjEJT.js +0 -0
  1134. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BX4BmVJP.js +0 -0
  1135. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BZ6v5kqr.js +0 -0
  1136. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BZAVdCU1.js +0 -0
  1137. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BbFX7OqK.js +0 -0
  1138. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bbl2q4GJ.css +0 -0
  1139. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bh5uiZqS.js +0 -0
  1140. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bmspg3Jw.css +0 -0
  1141. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bx6T9PIc.js +0 -0
  1142. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C1OHhOOV.css +0 -0
  1143. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C2CmDc5R.js +0 -0
  1144. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C2EQGEVq.css +0 -0
  1145. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C4xwmI7d.js +0 -0
  1146. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C7_1lK3X.js +0 -0
  1147. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CKyCniT-.js +0 -0
  1148. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CLqMm9A9.js +0 -0
  1149. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CSu-RA-2.css +0 -0
  1150. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CThe5lVk.css +0 -0
  1151. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CWBLcLBj.js +0 -0
  1152. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CWu9Zb0m.css +0 -0
  1153. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CYIgLUGs.js +0 -0
  1154. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CaWp_NBN.css +0 -0
  1155. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CbyH4L9F.js +0 -0
  1156. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Ci7Bb-Hg.js +0 -0
  1157. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CiiYGC4Q.js +0 -0
  1158. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CnN4AJQ2.js +0 -0
  1159. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Co9vSS-Z.css +0 -0
  1160. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CreWNyY-.js +0 -0
  1161. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CuaTN_p4.js +0 -0
  1162. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CxRl9_vT.js +0 -0
  1163. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CyzsRtSq.js +0 -0
  1164. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-D-ZLwkDk.js +0 -0
  1165. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-D2CGbqTd.css +0 -0
  1166. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-D9laKLBQ.css +0 -0
  1167. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DC5HFDv1.js +0 -0
  1168. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DI6Nc7FE.js +0 -0
  1169. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DKJ5p2QF.css +0 -0
  1170. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DKKSJxDm.css +0 -0
  1171. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DLmo9pnP.css +0 -0
  1172. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DODAzFAe.js +0 -0
  1173. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DOLQXkmn.js +0 -0
  1174. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DSyBT6Kt.js +0 -0
  1175. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DaU9YYwh.js +0 -0
  1176. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Db3HU1A2.css +0 -0
  1177. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DfZWJsx8.js +0 -0
  1178. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DgCU_eGn.js +0 -0
  1179. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DlWGFd3A.css +0 -0
  1180. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Do79u7RP.css +0 -0
  1181. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DpJpoD0M.js +0 -0
  1182. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DqUh5BjW.js +0 -0
  1183. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Dqp1Ys3x.js +0 -0
  1184. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DuhTDceN.js +0 -0
  1185. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Dv3QRK2m.js +0 -0
  1186. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-HvFwA8w4.css +0 -0
  1187. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-KX57MZ3S.js +0 -0
  1188. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-O0nPVPnM.js +0 -0
  1189. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Q7kkcYrR.js +0 -0
  1190. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-RBq2pqOr.js +0 -0
  1191. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-RaDXclvH.css +0 -0
  1192. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Z33f5-Wp.js +0 -0
  1193. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-ceDA-lHU.css +0 -0
  1194. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-czeYrGNG.css +0 -0
  1195. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-hcH65Zv0.js +0 -0
  1196. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-hmItHWz2.css +0 -0
  1197. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-k0HHvCOH.css +0 -0
  1198. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-kPzCW1DS.css +0 -0
  1199. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-m_MgoO2m.js +0 -0
  1200. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-mnVpUNXZ.css +0 -0
  1201. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-qs7RHoKv.js +0 -0
  1202. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-wKzSBw1w.js +0 -0
  1203. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-yQOik-72.js +0 -0
  1204. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/manifest.webmanifest +0 -0
  1205. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/pwa/icon-192.png +0 -0
  1206. {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/pwa/icon-512.png +0 -0
  1207. {loopx-1.0.1 → loopx-1.0.2}/loopx/windows_install.py +0 -0
  1208. {loopx-1.0.1 → loopx-1.0.2}/loopx/worker_bridge.py +0 -0
  1209. {loopx-1.0.1 → loopx-1.0.2}/loopx/zcode_goal_mode/README.md +0 -0
  1210. {loopx-1.0.1 → loopx-1.0.2}/loopx/zcode_goal_mode/__init__.py +0 -0
  1211. {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/dependency_links.txt +0 -0
  1212. {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/entry_points.txt +0 -0
  1213. {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/requires.txt +0 -0
  1214. {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/top_level.txt +0 -0
  1215. {loopx-1.0.1 → loopx-1.0.2}/setup.cfg +0 -0
  1216. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-benchmark/SKILL.md +0 -0
  1217. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-benchmark/agents/openai.yaml +0 -0
  1218. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-doc-registry/SKILL.md +0 -0
  1219. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-doc-registry/agents/openai.yaml +0 -0
  1220. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/SKILL.md +0 -0
  1221. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/agents/openai.yaml +0 -0
  1222. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/references/snapshot-contract.md +0 -0
  1223. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/scripts/diff_snapshot.py +0 -0
  1224. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-review/agents/openai.yaml +0 -0
  1225. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-project/SKILL.md +0 -0
  1226. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-project/agents/openai.yaml +0 -0
  1227. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/SKILL.md +0 -0
  1228. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/agents/openai.yaml +0 -0
  1229. {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/references/upstream-issue-escalation.md +0 -0
  1230. {loopx-1.0.1 → loopx-1.0.2}/tests/test_agent_onboarding_pi_host.py +0 -0
  1231. {loopx-1.0.1 → loopx-1.0.2}/tests/test_agent_onboarding_unconnected_project.py +0 -0
  1232. {loopx-1.0.1 → loopx-1.0.2}/tests/test_agy_host_surface.py +0 -0
  1233. {loopx-1.0.1 → loopx-1.0.2}/tests/test_ark_managed_agent_host.py +0 -0
  1234. {loopx-1.0.1 → loopx-1.0.2}/tests/test_ark_managed_agent_issue_fix_matrix.py +0 -0
  1235. {loopx-1.0.1 → loopx-1.0.2}/tests/test_attached_session_broker.py +0 -0
  1236. {loopx-1.0.1 → loopx-1.0.2}/tests/test_attached_session_cli.py +0 -0
  1237. {loopx-1.0.1 → loopx-1.0.2}/tests/test_auto_research_artifact_receipt.py +0 -0
  1238. {loopx-1.0.1 → loopx-1.0.2}/tests/test_auto_research_control.py +0 -0
  1239. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_agent.py +0 -0
  1240. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_completed_todos.py +0 -0
  1241. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_goal_configuration_api.py +0 -0
  1242. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_image_attachments.py +0 -0
  1243. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_lark_api_contract.py +0 -0
  1244. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_machine_configuration_api.py +0 -0
  1245. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_server_cors.py +0 -0
  1246. {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_store_input_validation.py +0 -0
  1247. {loopx-1.0.1 → loopx-1.0.2}/tests/test_cli_argument_diagnostics.py +0 -0
  1248. {loopx-1.0.1 → loopx-1.0.2}/tests/test_cli_entrypoint.py +0 -0
  1249. {loopx-1.0.1 → loopx-1.0.2}/tests/test_codex_app_apply_rrule.py +0 -0
  1250. {loopx-1.0.1 → loopx-1.0.2}/tests/test_command_invocation.py +0 -0
  1251. {loopx-1.0.1 → loopx-1.0.2}/tests/test_content_ops_item_lifecycle.py +0 -0
  1252. {loopx-1.0.1 → loopx-1.0.2}/tests/test_content_ops_lifecycle.py +0 -0
  1253. {loopx-1.0.1 → loopx-1.0.2}/tests/test_content_ops_queue_status.py +0 -0
  1254. {loopx-1.0.1 → loopx-1.0.2}/tests/test_contract_credential_pattern_precision.py +0 -0
  1255. {loopx-1.0.1 → loopx-1.0.2}/tests/test_contract_scan_unreadable_files.py +0 -0
  1256. {loopx-1.0.1 → loopx-1.0.2}/tests/test_dashboard_command.py +0 -0
  1257. {loopx-1.0.1 → loopx-1.0.2}/tests/test_decision_context_material.py +0 -0
  1258. {loopx-1.0.1 → loopx-1.0.2}/tests/test_deepresearch_command.py +0 -0
  1259. {loopx-1.0.1 → loopx-1.0.2}/tests/test_default_public_scan_root.py +0 -0
  1260. {loopx-1.0.1 → loopx-1.0.2}/tests/test_dependency_security_boundaries.py +0 -0
  1261. {loopx-1.0.1 → loopx-1.0.2}/tests/test_doctor_install_freshness.py +0 -0
  1262. {loopx-1.0.1 → loopx-1.0.2}/tests/test_doctor_installation_scope.py +0 -0
  1263. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_counterfactual_runtime.py +0 -0
  1264. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_episode_runtime.py +0 -0
  1265. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_monitor_lane_budget.py +0 -0
  1266. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_owner_board_views.py +0 -0
  1267. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_presentation_views.py +0 -0
  1268. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_replay_compatibility.py +0 -0
  1269. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_replay_runtime.py +0 -0
  1270. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_resource_portfolio.py +0 -0
  1271. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_router_acceptance.py +0 -0
  1272. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_source_history_reconcile.py +0 -0
  1273. {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_worker_topic_affinity.py +0 -0
  1274. {loopx-1.0.1 → loopx-1.0.2}/tests/test_external_scheduler_worker.py +0 -0
  1275. {loopx-1.0.1 → loopx-1.0.2}/tests/test_feedback_goal_id_validation.py +0 -0
  1276. {loopx-1.0.1 → loopx-1.0.2}/tests/test_feedback_run_selection.py +0 -0
  1277. {loopx-1.0.1 → loopx-1.0.2}/tests/test_file_lock.py +0 -0
  1278. {loopx-1.0.1 → loopx-1.0.2}/tests/test_file_lock_cross_process.py +0 -0
  1279. {loopx-1.0.1 → loopx-1.0.2}/tests/test_gemini_cursor_host_surfaces.py +0 -0
  1280. {loopx-1.0.1 → loopx-1.0.2}/tests/test_global_registry_write_serialization.py +0 -0
  1281. {loopx-1.0.1 → loopx-1.0.2}/tests/test_global_risks.py +0 -0
  1282. {loopx-1.0.1 → loopx-1.0.2}/tests/test_global_todos.py +0 -0
  1283. {loopx-1.0.1 → loopx-1.0.2}/tests/test_goal_mode_mcp_completion_validation.py +0 -0
  1284. {loopx-1.0.1 → loopx-1.0.2}/tests/test_goal_mode_mcp_settlement.py +0 -0
  1285. {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_loop_activation.py +0 -0
  1286. {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_loop_runtime_parity.py +0 -0
  1287. {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_mode_planner.py +0 -0
  1288. {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_parity_smoke.py +0 -0
  1289. {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_poll_receipts.py +0 -0
  1290. {loopx-1.0.1 → loopx-1.0.2}/tests/test_kunluncode_goal_mode.py +0 -0
  1291. {loopx-1.0.1 → loopx-1.0.2}/tests/test_license_metadata.py +0 -0
  1292. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loop_turn_loop_controller.py +0 -0
  1293. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_codex_cli.py +0 -0
  1294. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_executor.py +0 -0
  1295. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_host_failure.py +0 -0
  1296. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_journal_inspection.py +0 -0
  1297. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_settlement_parity.py +0 -0
  1298. {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_transaction.py +0 -0
  1299. {loopx-1.0.1 → loopx-1.0.2}/tests/test_ml_experiment_volc_packet.py +0 -0
  1300. {loopx-1.0.1 → loopx-1.0.2}/tests/test_nokv_jsonl_helper.py +0 -0
  1301. {loopx-1.0.1 → loopx-1.0.2}/tests/test_nokv_shadow_provider_probes.py +0 -0
  1302. {loopx-1.0.1 → loopx-1.0.2}/tests/test_opencode2_goal_worker.py +0 -0
  1303. {loopx-1.0.1 → loopx-1.0.2}/tests/test_opencode2_goal_worker_cli.py +0 -0
  1304. {loopx-1.0.1 → loopx-1.0.2}/tests/test_opencode_goal_bridge.py +0 -0
  1305. {loopx-1.0.1 → loopx-1.0.2}/tests/test_operator_markdown_renderers.py +0 -0
  1306. {loopx-1.0.1 → loopx-1.0.2}/tests/test_packaged_skill_metadata.py +0 -0
  1307. {loopx-1.0.1 → loopx-1.0.2}/tests/test_pi_goal_mode.py +0 -0
  1308. {loopx-1.0.1 → loopx-1.0.2}/tests/test_pr_program_snapshot.py +0 -0
  1309. {loopx-1.0.1 → loopx-1.0.2}/tests/test_pr_program_snapshot_diff.py +0 -0
  1310. {loopx-1.0.1 → loopx-1.0.2}/tests/test_pr_review_github_scan.py +0 -0
  1311. {loopx-1.0.1 → loopx-1.0.2}/tests/test_project_skill_cli.py +0 -0
  1312. {loopx-1.0.1 → loopx-1.0.2}/tests/test_public_package_lock_boundary.py +0 -0
  1313. {loopx-1.0.1 → loopx-1.0.2}/tests/test_python_ci_workflow.py +0 -0
  1314. {loopx-1.0.1 → loopx-1.0.2}/tests/test_register_agent_fresh_identity.py +0 -0
  1315. {loopx-1.0.1 → loopx-1.0.2}/tests/test_registry_git_probe.py +0 -0
  1316. {loopx-1.0.1 → loopx-1.0.2}/tests/test_release_candidate.py +0 -0
  1317. {loopx-1.0.1 → loopx-1.0.2}/tests/test_release_smoke_archive_helpers.py +0 -0
  1318. {loopx-1.0.1 → loopx-1.0.2}/tests/test_reward_memory_pipeline.py +0 -0
  1319. {loopx-1.0.1 → loopx-1.0.2}/tests/test_scheduler_native_launcher.py +0 -0
  1320. {loopx-1.0.1 → loopx-1.0.2}/tests/test_self_update_download.py +0 -0
  1321. {loopx-1.0.1 → loopx-1.0.2}/tests/test_self_update_runtime_activation.py +0 -0
  1322. {loopx-1.0.1 → loopx-1.0.2}/tests/test_session_runtime_key_classification.py +0 -0
  1323. {loopx-1.0.1 → loopx-1.0.2}/tests/test_smoke_suite.py +0 -0
  1324. {loopx-1.0.1 → loopx-1.0.2}/tests/test_ssh_tunnel_source.py +0 -0
  1325. {loopx-1.0.1 → loopx-1.0.2}/tests/test_state_file_containment.py +0 -0
  1326. {loopx-1.0.1 → loopx-1.0.2}/tests/test_state_refresh_agent_lane_action.py +0 -0
  1327. {loopx-1.0.1 → loopx-1.0.2}/tests/test_state_refresh_projections.py +0 -0
  1328. {loopx-1.0.1 → loopx-1.0.2}/tests/test_static_site_presentation.py +0 -0
  1329. {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_cors.py +0 -0
  1330. {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_extension_projection.py +0 -0
  1331. {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_periodic_report_workspace.py +0 -0
  1332. {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_ssh_hosts.py +0 -0
  1333. {loopx-1.0.1 → loopx-1.0.2}/tests/test_subagent_host_adapter.py +0 -0
  1334. {loopx-1.0.1 → loopx-1.0.2}/tests/test_summary_all.py +0 -0
  1335. {loopx-1.0.1 → loopx-1.0.2}/tests/test_thread_agent_binding.py +0 -0
  1336. {loopx-1.0.1 → loopx-1.0.2}/tests/test_todo_write_serialization.py +0 -0
  1337. {loopx-1.0.1 → loopx-1.0.2}/tests/test_trajectory_hygiene.py +0 -0
  1338. {loopx-1.0.1 → loopx-1.0.2}/tests/test_turn_envelope.py +0 -0
  1339. {loopx-1.0.1 → loopx-1.0.2}/tests/test_turn_loop_disposition.py +0 -0
  1340. {loopx-1.0.1 → loopx-1.0.2}/tests/test_visible_goal_terminal_settlement.py +0 -0
  1341. {loopx-1.0.1 → loopx-1.0.2}/tests/test_windows_install.py +0 -0
  1342. {loopx-1.0.1 → loopx-1.0.2}/tests/test_worker_command_validation.py +0 -0
  1343. {loopx-1.0.1 → loopx-1.0.2}/tests/test_workspace_story_demo.py +0 -0
  1344. {loopx-1.0.1 → loopx-1.0.2}/tests/test_zcode_host_surface.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: loopx
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: A lightweight Loop Engineering control plane for long-running agent goals.
5
5
  Author: LoopX contributors
6
6
  License-Expression: Apache-2.0
@@ -250,6 +250,18 @@ These are the three strongest current cases, not the full inventory. Browse the
250
250
  [complete Showcase catalog](docs/showcases/README.md) for contributor cases,
251
251
  creator dogfooding, reproducible demos, and explicit evidence-strength labels.
252
252
 
253
+ ### Exploratory Benchmark Studies
254
+
255
+ - **[SWE-Marathon](https://huangruiteng.github.io/loopx/benchmarks/swe-marathon/):**
256
+ Five execution modes on 15 matched tasks compare self-verification, scores,
257
+ and cost. More self-verification did not consistently yield higher scores.
258
+ - **[DeepSWE behavior analysis](https://huangruiteng.github.io/loopx/benchmarks/deepswe/behavior-discovery/)** (Chinese):
259
+ Selected cases examine how domain hints relate to requirement retention and
260
+ verification choices, offering mechanism hypotheses for further testing.
261
+
262
+ SWE-Marathon has one trial per task and mode; DeepSWE uses selected cases and
263
+ post-hoc analysis. Neither establishes a general performance gain.
264
+
253
265
  More inspectable surfaces:
254
266
 
255
267
  - the [public homepage](https://huangruiteng.github.io/loopx/) for the product
@@ -220,6 +220,18 @@ These are the three strongest current cases, not the full inventory. Browse the
220
220
  [complete Showcase catalog](docs/showcases/README.md) for contributor cases,
221
221
  creator dogfooding, reproducible demos, and explicit evidence-strength labels.
222
222
 
223
+ ### Exploratory Benchmark Studies
224
+
225
+ - **[SWE-Marathon](https://huangruiteng.github.io/loopx/benchmarks/swe-marathon/):**
226
+ Five execution modes on 15 matched tasks compare self-verification, scores,
227
+ and cost. More self-verification did not consistently yield higher scores.
228
+ - **[DeepSWE behavior analysis](https://huangruiteng.github.io/loopx/benchmarks/deepswe/behavior-discovery/)** (Chinese):
229
+ Selected cases examine how domain hints relate to requirement retention and
230
+ verification choices, offering mechanism hypotheses for further testing.
231
+
232
+ SWE-Marathon has one trial per task and mode; DeepSWE uses selected cases and
233
+ post-hoc analysis. Neither establishes a general performance gain.
234
+
223
235
  More inspectable surfaces:
224
236
 
225
237
  - the [public homepage](https://huangruiteng.github.io/loopx/) for the product
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "1.0.1"
5
+ __version__ = "1.0.2"
@@ -10,24 +10,19 @@ from typing import Any
10
10
  from urllib.parse import urlparse
11
11
 
12
12
  from .control_plane.runtime.time import now_local_iso
13
+ from .public_safe_text import (
14
+ PRIVATE_TEXT_PATTERNS as SHARED_PRIVATE_TEXT_PATTERNS,
15
+ find_private_text_match,
16
+ )
13
17
 
14
18
 
15
19
  AUTHORITY_SOURCE_REGISTRATION_VERSION = "authority_source_registration_v0"
16
20
  DOC_REGISTRY_AUTHORITY_IMPORT_VERSION = "doc_registry_authority_import_v0"
17
21
  AUTHORITY_SOURCE_ID_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_.-]{0,79}$")
18
22
  AUTHORITY_SOURCE_BOUNDARIES = {"public", "local_private", "private_redacted"}
19
- PRIVATE_TEXT_PATTERNS = (
20
- re.compile(r"/" + r"Users/"),
21
- re.compile(r"/" + r"ext_data/"),
22
- re.compile("la" + "rk" + "office", re.I),
23
- re.compile("docs" + r"\." + "internal", re.I),
24
- re.compile(r"\bt-20\d{12}-[a-z0-9]+\b"),
25
- re.compile(r"\b" + "Bear" + r"er\b", re.I),
26
- re.compile(r"\b" + "Author" + r"ization\b", re.I),
27
- re.compile(r"\b" + "tok" + r"en\s*=", re.I),
28
- re.compile(r"\b" + "pass" + r"word\b", re.I),
29
- re.compile(r"\b" + "sec" + r"ret\b", re.I),
30
- )
23
+ # Owned by loopx.public_safe_text so every real validator owner shares one
24
+ # contract; re-exported here because callers already import this name.
25
+ PRIVATE_TEXT_PATTERNS = SHARED_PRIVATE_TEXT_PATTERNS
31
26
 
32
27
  AUTHORITY_REGISTRY_SUMMARY_FIELDS = (
33
28
  "declared",
@@ -115,11 +110,8 @@ def public_safe_optional(label: str, value: str | None) -> str | None:
115
110
 
116
111
 
117
112
  def validate_public_safe_text(label: str, value: str | None) -> None:
118
- if not value:
119
- return
120
- for pattern in PRIVATE_TEXT_PATTERNS:
121
- if pattern.search(value):
122
- raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
113
+ if find_private_text_match(value) is not None:
114
+ raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
123
115
 
124
116
 
125
117
  def find_goal_index(registry: dict[str, Any], goal_id: str) -> int:
@@ -1,28 +1,22 @@
1
1
  from __future__ import annotations
2
2
 
3
- import re
4
3
  from datetime import datetime, timezone
5
4
  from typing import Any
6
5
 
7
6
  from .control_plane.runtime.time import parse_timestamp as _parse_timestamp
8
7
  from .control_plane.todos.contract import normalize_required_write_scopes
8
+ from .public_safe_text import (
9
+ PRIVATE_TEXT_PATTERNS as SHARED_PRIVATE_TEXT_PATTERNS,
10
+ find_private_text_match,
11
+ )
9
12
 
10
13
 
11
14
  CHECKPOINTED_BOUNDARY_AUTHORITY_SCHEMA_VERSION = "checkpointed_boundary_authority_v0"
12
15
  ACTIVE_BOUNDARY_AUTHORITY_STATUSES = {"active", "approved"}
13
16
  BOUNDARY_AUTHORITY_DECISIONS = {"approve", "reject", "defer"}
14
- PRIVATE_TEXT_PATTERNS = (
15
- re.compile(r"/" + r"Users/"),
16
- re.compile(r"/" + r"ext_data/"),
17
- re.compile("la" + "rk" + "office", re.I),
18
- re.compile("docs" + r"\." + "internal", re.I),
19
- re.compile(r"\bt-20\d{12}-[a-z0-9]+\b"),
20
- re.compile(r"\b" + "Bear" + r"er\b", re.I),
21
- re.compile(r"\b" + "Author" + r"ization\b", re.I),
22
- re.compile(r"\b" + "tok" + r"en\s*=", re.I),
23
- re.compile(r"\b" + "pass" + r"word\b", re.I),
24
- re.compile(r"\b" + "sec" + r"ret\b", re.I),
25
- )
17
+ # Owned by loopx.public_safe_text so every real validator owner shares one
18
+ # contract; re-exported here because callers already import this name.
19
+ PRIVATE_TEXT_PATTERNS = SHARED_PRIVATE_TEXT_PATTERNS
26
20
 
27
21
 
28
22
  def _now() -> datetime:
@@ -30,11 +24,8 @@ def _now() -> datetime:
30
24
 
31
25
 
32
26
  def _validate_public_safe_text(label: str, value: str | None) -> None:
33
- if not value:
34
- return
35
- for pattern in PRIVATE_TEXT_PATTERNS:
36
- if pattern.search(value):
37
- raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
27
+ if find_private_text_match(value) is not None:
28
+ raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
38
29
 
39
30
 
40
31
  def _clean_text(value: Any, *, limit: int = 180) -> str | None:
@@ -1049,6 +1049,49 @@ solver-trajectory slice, even when no case became terminal. This readback is for
1049
1049
  campaign supervision and insight discovery only; it must not expose hidden
1050
1050
  evaluator evidence to the solving arm.
1051
1051
 
1052
+ When that readback produces a useful case-level runtime finding before terminal
1053
+ scoring, preserve it as a private provisional observation rather than waiting for
1054
+ the final grader or overstating it as a scored insight:
1055
+
1056
+ ```json
1057
+ {
1058
+ "schema_version": "benchmark_case_observation_v0",
1059
+ "case": {
1060
+ "benchmark_id": "<public-id>",
1061
+ "case_id": "<public-id>",
1062
+ "arm": "<baseline-or-treatment>"
1063
+ },
1064
+ "run_status": "running",
1065
+ "runtime_outcome": "<ok-error-in_progress-or-unknown>",
1066
+ "duration_ms": null,
1067
+ "evidence_refs": [
1068
+ {
1069
+ "kind": "trace",
1070
+ "trace_id": "<opaque-id-or-null>",
1071
+ "span_id": "<opaque-id-or-null>",
1072
+ "env": "<environment-token-or-null>",
1073
+ "artifact_ref": "<private-pointer-or-null>"
1074
+ }
1075
+ ],
1076
+ "hypothesis": "<provisional-causal-explanation>",
1077
+ "confidence": "medium",
1078
+ "promotion_state": "pending_terminal_score_review"
1079
+ }
1080
+ ```
1081
+
1082
+ `trace_id`, `span_id`, and `env` are provider-neutral optional traceability fields.
1083
+ Provider-specific session identifiers belong in private provider extensions, not in
1084
+ this common contract. Raw evidence references can still disclose sensitive runtime
1085
+ topology, so the artifact stays in private benchmark storage. The public experiment
1086
+ board records only a compact classification or private artifact handle; it never
1087
+ copies trace IDs, spans, URLs, paths, or provider-specific session identifiers.
1088
+
1089
+ The provisional observation must not invent a score or treat request success,
1090
+ progress, or runtime status as case quality. Once the run is terminal and scoring
1091
+ is complete, the analyst re-reads the complete authorized evidence and writes a
1092
+ separate `benchmark_case_insight_v0`; it does not relabel the provisional artifact
1093
+ as final.
1094
+
1052
1095
  This is a provider obligation, not an effect performed by the reducer: the
1053
1096
  runtime-observation command only returns a typed classification and recommended
1054
1097
  transition. The provider remains responsible for the monitor cycle, trajectory
@@ -1093,6 +1136,15 @@ Record the result in this compact shape:
1093
1136
  "grader_or_verifier",
1094
1137
  "failure_and_score_details"
1095
1138
  ],
1139
+ "evidence_refs": [
1140
+ {
1141
+ "kind": "<trace-log-artifact-report-or-other>",
1142
+ "trace_id": "<opaque-id-or-null>",
1143
+ "span_id": "<opaque-id-or-null>",
1144
+ "env": "<environment-token-or-null>",
1145
+ "artifact_ref": "<private-pointer-or-null>"
1146
+ }
1147
+ ],
1096
1148
  "insight": {
1097
1149
  "approach_summary": "<what-the-solver-tried>",
1098
1150
  "decisive_evidence": ["<specific-observation>"],
@@ -746,6 +746,51 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
746
746
  "raw_log_error_count_alone",
747
747
  ],
748
748
  },
749
+ "active_case_observation": {
750
+ "status": "provisional_only",
751
+ "purpose": (
752
+ "Preserve traceable runtime evidence while a case or campaign is "
753
+ "still active without presenting it as an official scored insight."
754
+ ),
755
+ "artifact_template": {
756
+ "schema_version": "benchmark_case_observation_v0",
757
+ "case": {
758
+ "benchmark_id": "<public-id>",
759
+ "case_id": "<public-id>",
760
+ "arm": "<baseline-or-treatment>",
761
+ },
762
+ "run_status": "<planned-running-or-terminal>",
763
+ "runtime_outcome": "<ok-error-in_progress-or-unknown>",
764
+ "duration_ms": "<non-negative-integer-or-null>",
765
+ "evidence_refs": [
766
+ {
767
+ "kind": "<trace-log-artifact-report-or-other>",
768
+ "trace_id": "<opaque-id-or-null>",
769
+ "span_id": "<opaque-id-or-null>",
770
+ "env": "<environment-token-or-null>",
771
+ "artifact_ref": "<private-pointer-or-null>",
772
+ }
773
+ ],
774
+ "hypothesis": "<provisional-causal-explanation>",
775
+ "confidence": "<high-medium-or-low>",
776
+ "promotion_state": "pending_terminal_score_review",
777
+ },
778
+ "score_boundary": (
779
+ "A provisional observation must not invent an official score or "
780
+ "treat request success, progress, or runtime status as case quality."
781
+ ),
782
+ "promotion_rule": (
783
+ "After terminal scoring, re-read the complete authorized evidence "
784
+ "and write a separate benchmark_case_insight_v0; do not relabel the "
785
+ "provisional artifact as final."
786
+ ),
787
+ "privacy_boundary": (
788
+ "Keep raw evidence references in private benchmark storage. The "
789
+ "public experiment board may expose only a compact classification "
790
+ "or private artifact handle, never trace IDs, spans, URLs, paths, "
791
+ "or provider-specific session identifiers."
792
+ ),
793
+ },
749
794
  "hint": (
750
795
  "After the solver has stopped and scoring is complete, read the task, "
751
796
  "real trajectory, final patch or workspace, hidden tests, grader or "
@@ -815,6 +860,15 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
815
860
  "grader_or_verifier",
816
861
  "failure_and_score_details",
817
862
  ],
863
+ "evidence_refs": [
864
+ {
865
+ "kind": "<trace-log-artifact-report-or-other>",
866
+ "trace_id": "<opaque-id-or-null>",
867
+ "span_id": "<opaque-id-or-null>",
868
+ "env": "<environment-token-or-null>",
869
+ "artifact_ref": "<private-pointer-or-null>",
870
+ }
871
+ ],
818
872
  "insight": {
819
873
  "approach_summary": "<what-the-solver-tried>",
820
874
  "decisive_evidence": ["<specific-observation>"],
@@ -940,6 +994,11 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
940
994
  "module": "loopx.capabilities.benchmark_toolkit.run_permissions",
941
995
  "doc": "loopx/capabilities/benchmark_toolkit/README.md",
942
996
  },
997
+ {
998
+ "schema_version": "benchmark_case_observation_v0",
999
+ "module": "loopx.capabilities.benchmark_toolkit.catalog_entry",
1000
+ "doc": "loopx/capabilities/benchmark_toolkit/README.md",
1001
+ },
943
1002
  {
944
1003
  "schema_version": "benchmark_case_insight_v0",
945
1004
  "module": "loopx.capabilities.benchmark_toolkit.catalog_entry",
@@ -463,11 +463,32 @@ def inspect_native_codex_profile(
463
463
  if resolved_release not in resolved_cli.parents:
464
464
  raise NativeCodexProfileError("profile_cli_not_release_snapshot")
465
465
 
466
+ env = _formal_install_environment(
467
+ paths=paths,
468
+ python_executable=_resolved_executable(None),
469
+ release_id=release_id,
470
+ base_env=base_env,
471
+ )
472
+ # The profile's CLI owns the loaded skills; the inspecting supervisor may
473
+ # run a different LoopX version.
474
+ try:
475
+ version_readback = subprocess.run(
476
+ [str(cli_bin), "--version"],
477
+ cwd=paths["root"], env=env, check=False, capture_output=True,
478
+ text=True, timeout=30,
479
+ )
480
+ except (OSError, subprocess.TimeoutExpired) as exc:
481
+ raise NativeCodexProfileError("profile_cli_version_unavailable") from exc
482
+ version_parts = version_readback.stdout.split()
483
+ if version_readback.returncode or len(version_parts) != 2 or version_parts[0] != "loopx":
484
+ raise NativeCodexProfileError("profile_cli_version_invalid")
485
+
466
486
  expected_source = Path(source_root).expanduser().resolve() if source_root else None
467
487
  skill_readback = inspect_skill_install_readback(
468
488
  skills_dir=paths["skills_dir"],
469
489
  required_skill_ids=required,
470
490
  source_root=expected_source,
491
+ expected_loopx_version_override=version_parts[1],
471
492
  )
472
493
  if skill_readback.get("ready") is not True:
473
494
  status = re.sub(r"[^A-Za-z0-9_.:-]", "_", str(skill_readback.get("status")))
@@ -484,12 +505,6 @@ def inspect_native_codex_profile(
484
505
  if not isinstance(skills_digest, str) or not isinstance(source_revision, str):
485
506
  raise NativeCodexProfileError("profile_identity_missing")
486
507
 
487
- env = _formal_install_environment(
488
- paths=paths,
489
- python_executable=_resolved_executable(None),
490
- release_id=release_id,
491
- base_env=base_env,
492
- )
493
508
  doctor = _doctor_payload(cli_bin=cli_bin, paths=paths, env=env)
494
509
  release_manifest = (doctor.get("release_manifest") or {}).get("manifest") or {}
495
510
  release_source = release_manifest.get("source") or {}
@@ -543,7 +543,23 @@ blocking findings. A successful check is **not** proof of factual evidence, revi
543
543
  quality, current remote head, or merge permission. Re-read the head and publish the
544
544
  human-readable evidence separately. Existing queue/monitor behavior is unchanged;
545
545
  omit these two flags to use normal queue discovery. An older saved packet may need
546
- fresh review evidence when the installed contract has advanced.
546
+ fresh review evidence when the installed contract has advanced. The execution
547
+ contract now carries `policy_revision`, distinct from its stable wire schema;
548
+ results bind `review_policy_revision`. Missing or mismatched policy revisions
549
+ cannot certify approval. Regenerate the packet and perform the current plan,
550
+ not merely relabel old evidence. The skill rejects approval from incompatible
551
+ packets produced by expired development-runtime overrides. It may still publish
552
+ a conservative `REQUEST_CHANGES` only when that verdict explicitly identifies
553
+ the incompatible-policy evidence gap; a later approval requires regeneration.
554
+
555
+ For retained or parallel implementations, `repository_reuse.rule_ownership`
556
+ maps business rules across both reachable paths, including unchanged files.
557
+ Keeping a legacy storage writer does not justify keeping its independent
558
+ eligibility, retention, ordering or successor rules. Name actual retired rules
559
+ and justified compatibility/effect code, not a net-deletion quota. A positive
560
+ twin with shared decisions and necessary extra adapter code must remain
561
+ approvable. Verified evidence rows must fill their declared fields; the checker
562
+ validates this completeness only, never the truth of their contents.
547
563
 
548
564
  Behavioral qualification lives in `tests/capabilities/test_pr_review_behavior.py`:
549
565
  paired synthetic cases include valid designs as well as counterexamples. The optional
@@ -31,6 +31,9 @@ def check_review_result(
31
31
  }
32
32
  blockers: list[str] = []
33
33
  errors: list[str] = []
34
+ revision = result.get("review_policy_revision")
35
+ if type(revision) is not int or revision != contract["policy_revision"]:
36
+ blockers.append("review_policy_revision:stale_or_missing")
34
37
  if result.get("schema_version") != "pull_request_review_result_v1":
35
38
  errors.append("unsupported_result_schema")
36
39
  evidence = result.get("evidence")
@@ -50,6 +53,10 @@ def check_review_result(
50
53
  detail = {k: v for k, v in row.items() if k not in {"status", "verdict"}}
51
54
  if not any(v not in (None, "", [], {}) for v in detail.values()):
52
55
  blockers.append(f"{key}:missing_evidence_detail")
56
+ if status == "verified":
57
+ for field in requirements[key].get("fields", []):
58
+ if row.get(field) in (None, "", [], {}):
59
+ blockers.append(f"{key}:missing_field:{field}")
53
60
  allowed = requirements[key].get("verdict_values")
54
61
  if allowed and row.get("verdict") not in allowed:
55
62
  blockers.append(f"{key}:missing_or_invalid_verdict")
@@ -3,6 +3,9 @@ from __future__ import annotations
3
3
  from collections.abc import Mapping, Sequence
4
4
  from typing import Any
5
5
 
6
+ # Increment when review requirements change without changing the packet shape.
7
+ REVIEW_POLICY_REVISION = 1
8
+
6
9
  REQUIRED_FINAL_SECTIONS = [
7
10
  "动机",
8
11
  "改动思路",
@@ -105,6 +108,7 @@ def build_review_template(item: Mapping[str, Any]) -> dict[str, Any]:
105
108
  def build_review_execution_contract() -> dict[str, Any]:
106
109
  return {
107
110
  "schema_version": "pull_request_review_execution_contract_v2",
111
+ "policy_revision": REVIEW_POLICY_REVISION,
108
112
  "purpose": (
109
113
  "Define the evidence that must exist before a detailed review verdict; "
110
114
  "host skills route this contract but must not reimplement it."
@@ -188,13 +192,36 @@ def build_review_execution_contract() -> dict[str, Any]:
188
192
  "fields": [
189
193
  "searched_revisions", "queries_and_paths", "existing_candidates",
190
194
  "semantic_comparison", "reuse_or_separation_reason",
191
- "state_model_assessment", "validation_evidence", "verdict",
195
+ "state_model_assessment", "rule_ownership", "validation_evidence", "verdict",
192
196
  ],
193
197
  "comparison_dimensions": [
194
198
  "resource_and_caller", "data_scope_and_filters",
195
199
  "ordering_and_pagination", "authority_and_sanitization",
196
200
  "state_retry_and_failure_owner",
197
201
  ],
202
+ "rule_ownership": {
203
+ "required_when": "retained_or_parallel_implementations",
204
+ "row_fields": [
205
+ "business_rule", "baseline_owner", "head_owner",
206
+ "retained_path_and_caller", "retention_reason",
207
+ "deleted_rule_or_exit_condition", "validation",
208
+ ],
209
+ "rule": (
210
+ "For migrations, fallback paths, dual providers or old/new entrypoints, "
211
+ "map each touched business rule across BOTH reachable paths, including "
212
+ "unchanged files. Separate storage parsing/writing and host effects from "
213
+ "eligibility, ordering, retention and successor derivation. A required "
214
+ "legacy writer does not justify a second decision owner. Ask where the "
215
+ "next policy change must be edited: tests comparing two new providers "
216
+ "do not prove the old path shares their rule. Name a bounded shared "
217
+ "owner and actual deletion where appropriate; justify deliberate "
218
+ "independent semantics instead of forcing abstraction. Record no "
219
+ "parallel path with caller-search evidence when not applicable. "
220
+ "Moved lines are not retired knowledge, and net-negative LOC is not "
221
+ "an acceptance quota. Missing analysis is not_yet_proven; an unjustified "
222
+ "duplicate rule is unjustified_duplication under repository_reuse."
223
+ ),
224
+ },
198
225
  "state_model_assessment": {
199
226
  "required_when": "introduced_or_newly_enforced_state",
200
227
  "classification_values": [
@@ -896,6 +923,7 @@ def build_review_plan(item: Mapping[str, Any]) -> dict[str, Any]:
896
923
  "required_evidence_ids": required_evidence,
897
924
  "result_template": {
898
925
  "schema_version": "pull_request_review_result_v1",
926
+ "review_policy_revision": REVIEW_POLICY_REVISION,
899
927
  "target_exact_head": target_key,
900
928
  "evidence": {
901
929
  evidence_id: {"status": "unverified"}
@@ -1477,10 +1477,10 @@ def serve_chat(
1477
1477
  )
1478
1478
  server.action_service = ChatActionService(
1479
1479
  store=server.action_store,
1480
- registry_path=registry_path,
1480
+ registry_path=resolved_registry_path,
1481
1481
  chat_store=server.chat_store,
1482
1482
  runtime_controller=server.runtime_controller,
1483
- workspace_roots=scan_roots,
1483
+ workspace_roots=resolved_scan_roots,
1484
1484
  )
1485
1485
  server.lark_goal_topic_runtime = LarkGoalTopicRuntimeService(
1486
1486
  snapshot_provider=lambda: build_lark_goal_topic_runtime_snapshot(
@@ -489,9 +489,10 @@ class ChatSessionStore:
489
489
  "created_at": utc_now(),
490
490
  }
491
491
  with exclusive_file_lock(path, agent_id="loopx-chat", operation="append_chat_message"):
492
- for existing in _read_jsonl(path):
493
- if existing.get("message_id") == payload["message_id"]:
494
- return existing
492
+ if message_id:
493
+ for existing in _read_jsonl(path):
494
+ if existing.get("message_id") == payload["message_id"]:
495
+ return existing
495
496
  _append_jsonl(path, payload)
496
497
  return payload
497
498
 
@@ -42,6 +42,9 @@ from ..control_plane.quota.settlement_cli import (
42
42
  render_existing_heartbeat_receipt_payload,
43
43
  )
44
44
  from ..control_plane.quota.turn_envelope import build_turn_envelope
45
+ from ..control_plane.coordination.legacy_writer_fence import (
46
+ LegacyCoordinationWriterFenced,
47
+ )
45
48
  from ..control_plane.effect_runtime import EffectRuntimeRejected
46
49
  from ..control_plane.scheduler.execution_context import (
47
50
  GUIDED_START_TURN_RUNTIME_PROFILES,
@@ -238,6 +241,14 @@ def _quota_failure_payload(
238
241
  )
239
242
  if error.agent_id is not None:
240
243
  payload["agent_id"] = error.agent_id
244
+ elif isinstance(error, LegacyCoordinationWriterFenced):
245
+ payload.update(
246
+ {
247
+ "error_code": error.code,
248
+ "reason": str(error),
249
+ **error.payload,
250
+ }
251
+ )
241
252
  if lock_timeout_fields:
242
253
  payload["recommended_action"] = "inspect the lock holder before retrying"
243
254
  if command == "monitor-poll":
@@ -5,6 +5,9 @@ from collections.abc import Callable, Mapping
5
5
  from dataclasses import dataclass
6
6
  from pathlib import Path
7
7
 
8
+ from ..control_plane.coordination.legacy_writer_fence import (
9
+ require_legacy_coordination_write_allowed,
10
+ )
8
11
  from ..control_plane.quota.error_codes import QuotaCommandValidationError
9
12
  from ..control_plane.runtime.status_projection_cache import (
10
13
  load_status_projection_cache,
@@ -175,7 +178,8 @@ def validate_quota_command_context_request(
175
178
  if profile not in GUIDED_START_TURN_RUNTIME_PROFILES:
176
179
  raise QuotaCommandValidationError(
177
180
  "--begin-turn requires runtime-profile codex_app_heartbeat "
178
- "or codex_app_ssh_goal"
181
+ "or codex_app_ssh_goal; every other host starts its turn by "
182
+ "passing its own --turn-instance-id"
179
183
  )
180
184
  if (
181
185
  (heartbeat_turn_id or begin_turn)
@@ -220,6 +224,13 @@ def prepare_quota_command_context(
220
224
  registry_path=registry_path,
221
225
  runtime_root_override=runtime_root_arg,
222
226
  )
227
+ if command == "monitor-poll" and args.execute and (args.todo_id or args.target_key):
228
+ # This command still uses the legacy Todo writer. Preserve its typed
229
+ # rejection before collecting a promoted read model (which may itself
230
+ # be unavailable). The writer repeats the check under its mutation lock.
231
+ require_legacy_coordination_write_allowed(
232
+ runtime_root=runtime_root, goal_id=args.goal_id,
233
+ )
223
234
  status_goal_id = args.goal_id if command not in {"status", "plan"} else None
224
235
  projection_cache_ttl_seconds = int(
225
236
  getattr(args, "projection_cache_ttl_seconds", 120)
@@ -37,7 +37,7 @@ def todo_error_payload(args: argparse.Namespace, exc: Exception) -> dict[str, ob
37
37
  "dry_run": True
38
38
  if args.todo_command == "suggest"
39
39
  else not bool(args.execute)
40
- if args.todo_command == "archive-completed"
40
+ if args.todo_command in {"archive-completed", "project-markdown"}
41
41
  else bool(args.dry_run),
42
42
  "added": False,
43
43
  "already_exists": False,
@@ -481,6 +481,7 @@ def handle_turn_command(
481
481
  todo_id=todo_id,
482
482
  registry_path=registry_path,
483
483
  goal_id=args.goal_id,
484
+ runtime_root=runtime_root,
484
485
  )
485
486
  return project_durable_completion_intent(
486
487
  todo=durable_todo,
@@ -531,6 +532,7 @@ def handle_turn_command(
531
532
  todo_id=todo_id,
532
533
  registry_path=registry_path,
533
534
  goal_id=args.goal_id,
535
+ runtime_root=runtime_root,
534
536
  )
535
537
  completion_outcome = project_durable_completion_outcome(
536
538
  todo=durable_todo,
@@ -675,6 +677,7 @@ def handle_turn_command(
675
677
  todo_id=todo_id,
676
678
  registry_path=registry_path,
677
679
  goal_id=args.goal_id,
680
+ runtime_root=runtime_root,
678
681
  )
679
682
  return project_durable_completion_outcome(
680
683
  todo=durable_todo,
@@ -703,6 +706,7 @@ def handle_turn_command(
703
706
  todo_id=todo_id,
704
707
  registry_path=registry_path,
705
708
  goal_id=args.goal_id,
709
+ runtime_root=runtime_root,
706
710
  )
707
711
  readback = project_durable_terminal_completion_readback(
708
712
  todo=durable_todo,