phase-loop-runtime 0.7.23__tar.gz → 0.7.25__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 (1085) hide show
  1. {phase_loop_runtime-0.7.23/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.25}/PKG-INFO +2 -2
  2. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/README.md +1 -1
  3. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/pyproject.toml +2 -1
  4. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/__init__.py +1 -1
  5. phase_loop_runtime-0.7.25/src/phase_loop_runtime/_proc_cpu.py +57 -0
  6. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +322 -4
  7. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/backing.py +21 -16
  8. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/composition.py +5 -5
  9. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/config.py +18 -1
  10. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +2 -2
  11. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/fixtures.py +12 -12
  12. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/presets.py +21 -21
  13. phase_loop_runtime-0.7.25/src/phase_loop_runtime/agent_view_cleanup.py +97 -0
  14. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_canary_evidence.py +85 -5
  15. phase_loop_runtime-0.7.25/src/phase_loop_runtime/agy_integrity.py +70 -0
  16. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/claude_agent_view.py +4 -1
  17. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/cli.py +168 -17
  18. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/base.py +31 -8
  19. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/live.py +98 -22
  20. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/verbs.py +172 -8
  21. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/executor_availability.py +4 -3
  22. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/falsifier.py +1 -4
  23. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/gemini_heartbeat.py +9 -0
  24. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/governed_bundle.py +4 -5
  25. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/governed_review.py +10 -0
  26. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/launcher.py +113 -29
  27. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/lease_supervisor.py +11 -4
  28. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/legible_evidence.py +1 -1
  29. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/panel_invoker.py +2600 -510
  30. phase_loop_runtime-0.7.25/src/phase_loop_runtime/panel_reply.py +225 -0
  31. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/president_adapter.py +2 -2
  32. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/publishing.py +128 -9
  33. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/review_stage.py +127 -29
  34. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  35. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runner.py +5 -1
  36. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_egress.py +126 -23
  37. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_credentials.py +771 -0
  38. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail.py +1607 -0
  39. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail_apparmor.py +146 -0
  40. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail_autoqualify.py +274 -0
  41. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail_qualification.py +463 -0
  42. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_keyring_exec.py +137 -0
  43. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/seat_preflight.py +67 -0
  44. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_seccomp.py +45 -0
  45. phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_uid.py +570 -0
  46. {phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/codex-execute-phase → phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/claude-execute-phase}/scripts/cleanup_lane_worktrees.sh +21 -2
  47. phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
  48. {phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/gemini-execute-phase → phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/codex-execute-phase}/scripts/cleanup_lane_worktrees.sh +21 -2
  49. phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
  50. {phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/claude-execute-phase → phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/gemini-execute-phase}/scripts/cleanup_lane_worktrees.sh +21 -2
  51. phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
  52. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +21 -2
  53. phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
  54. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25/src/phase_loop_runtime.egg-info}/PKG-INFO +2 -2
  55. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/SOURCES.txt +62 -0
  56. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_advisory_cli_802.py +4 -1
  57. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_backcompat.py +2 -2
  58. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_backing_homebrew.py +11 -21
  59. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_golden.py +6 -6
  60. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_presets.py +26 -26
  61. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_static_import_862.py +12 -8
  62. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agent_cli_scratch_inventory_1147.py +88 -36
  63. phase_loop_runtime-0.7.25/tests/test_agent_view_cleanup.py +119 -0
  64. phase_loop_runtime-0.7.25/tests/test_agy_static_integrity.py +150 -0
  65. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_autosel.py +19 -10
  66. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_xdist_adoption.py +1 -1
  67. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_generated_outputs.py +24 -1
  68. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_conftest_isolation.py +12 -0
  69. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_egress_prefix_crosses_the_broker_thread.py +20 -1
  70. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_admission_compat_789.py +1 -1
  71. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_partition_rotation_789d.py +3 -0
  72. phase_loop_runtime-0.7.25/tests/test_fabpub_sealed_head_recovery_1296.py +591 -0
  73. phase_loop_runtime-0.7.25/tests/test_finding_F002.py +28 -0
  74. phase_loop_runtime-0.7.25/tests/test_finding_F004.py +23 -0
  75. phase_loop_runtime-0.7.25/tests/test_finding_F005.py +18 -0
  76. phase_loop_runtime-0.7.25/tests/test_gemini_credential_expiry_parse.py +45 -0
  77. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gemini_heartbeat_bootstrap.py +66 -57
  78. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gemini_heartbeat_filesystem_view.py +87 -69
  79. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_harden_evidence_producer.py +119 -1
  80. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_harden_evidence_verifier.py +6 -0
  81. phase_loop_runtime-0.7.25/tests/test_launch_audit_exemption_scope_1282.py +27 -0
  82. phase_loop_runtime-0.7.25/tests/test_launch_audit_inventory.py +121 -0
  83. phase_loop_runtime-0.7.25/tests/test_launch_audit_live_marker_1282.py +50 -0
  84. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_launcher_liveness.py +18 -11
  85. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_leg_liveness_monitor.py +18 -3
  86. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_legible_roadmap_contract.py +6 -6
  87. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_owned_command_procfs_1003.py +5 -4
  88. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_claude_review_output.py +101 -14
  89. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker_spawn.py +47 -4
  90. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker_timeout_argv.py +115 -55
  91. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_leg_auth_preflight_64.py +14 -14
  92. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_leg_status_detail_1096.py +5 -3
  93. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_per_leg_model_66.py +2 -8
  94. phase_loop_runtime-0.7.25/tests/test_panel_reply.py +200 -0
  95. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_tui_eof_48.py +16 -0
  96. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_tui_liveness_188.py +34 -13
  97. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_tui_workspace_trust_223.py +33 -10
  98. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_president_heartbeat_1001.py +60 -13
  99. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_president_ladder_config.py +16 -8
  100. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_president_wiring.py +18 -3
  101. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_presroute_hardening.py +6 -11
  102. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proc_cpu.py +33 -0
  103. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_qualified_agy_image_set.py +6 -2
  104. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_monitor_policy.py +162 -87
  105. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_policy_govlean_repairs.py +6 -0
  106. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_seat_stall_1176.py +90 -28
  107. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_egress.py +3 -0
  108. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_placement.py +8 -4
  109. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_staging_1147.py +26 -40
  110. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_scratch_runtime_audit_1147.py +41 -14
  111. phase_loop_runtime-0.7.25/tests/test_seat_admin_cleanup.py +48 -0
  112. phase_loop_runtime-0.7.25/tests/test_seat_caller_ancestry.py +156 -0
  113. phase_loop_runtime-0.7.25/tests/test_seat_caller_owner.py +156 -0
  114. phase_loop_runtime-0.7.25/tests/test_seat_credential_refresh.py +189 -0
  115. phase_loop_runtime-0.7.25/tests/test_seat_credentials.py +830 -0
  116. phase_loop_runtime-0.7.25/tests/test_seat_egress_rules.py +138 -0
  117. phase_loop_runtime-0.7.25/tests/test_seat_executor_review.py +224 -0
  118. phase_loop_runtime-0.7.25/tests/test_seat_host_git.py +313 -0
  119. phase_loop_runtime-0.7.25/tests/test_seat_host_path_links.py +81 -0
  120. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_seat_host_uid_1098.py +95 -66
  121. phase_loop_runtime-0.7.25/tests/test_seat_io.py +63 -0
  122. phase_loop_runtime-0.7.25/tests/test_seat_ipc.py +95 -0
  123. phase_loop_runtime-0.7.25/tests/test_seat_jail.py +750 -0
  124. phase_loop_runtime-0.7.25/tests/test_seat_jail_apparmor.py +122 -0
  125. phase_loop_runtime-0.7.25/tests/test_seat_jail_autoqualify.py +174 -0
  126. phase_loop_runtime-0.7.25/tests/test_seat_jail_live_d8.py +454 -0
  127. phase_loop_runtime-0.7.25/tests/test_seat_journal_collection.py +233 -0
  128. phase_loop_runtime-0.7.25/tests/test_seat_keyring.py +343 -0
  129. phase_loop_runtime-0.7.25/tests/test_seat_keyring_order_control.py +66 -0
  130. phase_loop_runtime-0.7.25/tests/test_seat_launch_guard.py +31 -0
  131. phase_loop_runtime-0.7.25/tests/test_seat_launch_helpers_trusted.py +276 -0
  132. phase_loop_runtime-0.7.25/tests/test_seat_login_wait_a3_1166.py +346 -0
  133. phase_loop_runtime-0.7.25/tests/test_seat_login_wait_board_context_r12.py +172 -0
  134. phase_loop_runtime-0.7.25/tests/test_seat_notices.py +1147 -0
  135. phase_loop_runtime-0.7.25/tests/test_seat_output_rewrite_1282.py +41 -0
  136. phase_loop_runtime-0.7.25/tests/test_seat_owner_composition.py +78 -0
  137. phase_loop_runtime-0.7.25/tests/test_seat_owner_notices.py +50 -0
  138. phase_loop_runtime-0.7.25/tests/test_seat_owner_round1_1282.py +149 -0
  139. phase_loop_runtime-0.7.25/tests/test_seat_owner_setup_clock_1282.py +86 -0
  140. phase_loop_runtime-0.7.25/tests/test_seat_owner_view.py +314 -0
  141. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_seat_preflight_1204.py +123 -5
  142. phase_loop_runtime-0.7.25/tests/test_seat_profiles.py +266 -0
  143. phase_loop_runtime-0.7.25/tests/test_seat_qualification_host_context.py +68 -0
  144. phase_loop_runtime-0.7.25/tests/test_seat_reference_inventory.py +65 -0
  145. phase_loop_runtime-0.7.25/tests/test_seat_review_base_unavailable.py +41 -0
  146. phase_loop_runtime-0.7.25/tests/test_seat_review_output_redaction.py +56 -0
  147. phase_loop_runtime-0.7.25/tests/test_seat_review_refusals.py +40 -0
  148. phase_loop_runtime-0.7.25/tests/test_seat_sandbox_permissions.py +1090 -0
  149. phase_loop_runtime-0.7.25/tests/test_seat_tool_approvals.py +27 -0
  150. phase_loop_runtime-0.7.25/tests/test_seat_transcript_io.py +226 -0
  151. phase_loop_runtime-0.7.25/tests/test_seat_tui_owner_refusal.py +34 -0
  152. phase_loop_runtime-0.7.25/tests/test_the_real_launch_carries_the_prefix.py +362 -0
  153. phase_loop_runtime-0.7.25/tests/test_worktree_cleanup_dirty_gate.py +143 -0
  154. phase_loop_runtime-0.7.23/src/phase_loop_runtime/_proc_cpu.py +0 -57
  155. phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
  156. phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
  157. phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
  158. phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
  159. phase_loop_runtime-0.7.23/tests/test_the_real_launch_carries_the_prefix.py +0 -285
  160. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/MANIFEST.in +0 -0
  161. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/protocol/protocol.md +0 -0
  162. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/setup.cfg +0 -0
  163. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_baml_worker.py +0 -0
  164. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  165. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  166. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  167. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  168. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  169. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  170. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  171. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  172. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  173. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  174. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  175. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  176. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  177. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  178. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  179. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  180. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  181. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  182. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  183. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  184. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  185. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  186. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  187. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  188. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  189. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  190. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  191. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  192. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  193. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  194. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  195. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  196. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  197. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  198. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  199. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  200. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  201. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  202. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  203. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  204. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  205. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  206. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  207. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  208. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  209. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  210. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  211. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  212. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  213. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  214. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  215. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  216. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  217. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  218. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  219. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
  220. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  221. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  222. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  223. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  224. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  225. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  226. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  227. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  228. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  229. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  230. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  231. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  232. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_provenance.py +0 -0
  233. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_qualification.py +0 -0
  234. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_watch.py +0 -0
  235. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_modular.py +0 -0
  236. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  237. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  238. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  239. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  240. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  241. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  242. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  243. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/phase_loop_bridge.baml +0 -0
  244. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  245. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/broker.py +0 -0
  246. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/build_bundle.py +0 -0
  247. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/capability_registry.py +0 -0
  248. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/classifier.py +0 -0
  249. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  250. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout.py +0 -0
  251. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  252. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  253. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_validation.py +0 -0
  254. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_validators.py +0 -0
  255. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  256. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  257. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  258. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  259. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  260. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  261. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  262. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  263. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  264. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  265. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  266. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  267. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  268. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  269. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  270. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  271. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  272. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  273. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  274. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  275. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  276. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  277. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  278. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  279. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  280. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  281. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  282. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  283. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  284. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  285. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  286. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  287. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  288. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  289. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  290. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  291. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  292. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  293. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  294. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  295. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  296. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  297. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  298. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  299. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  300. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  301. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  302. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  303. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  304. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  305. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/status.py +0 -0
  306. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/credential_redaction.py +0 -0
  307. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  308. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/declared_identity.py +0 -0
  309. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  310. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  311. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/discovery.py +0 -0
  312. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  313. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  314. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/docs_audit.py +0 -0
  315. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/docs_freshness.py +0 -0
  316. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  317. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/doctor.py +0 -0
  318. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  319. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  320. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/events.py +0 -0
  321. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/events_migration.py +0 -0
  322. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/evidence_audit.py +0 -0
  323. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  324. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_canonical.py +0 -0
  325. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_delta.py +0 -0
  326. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_gate.py +0 -0
  327. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_producer.py +0 -0
  328. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_provenance.py +0 -0
  329. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  330. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  331. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  332. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fleet_map.py +0 -0
  333. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  334. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  335. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/gate_posture.py +0 -0
  336. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/generated_outputs.py +0 -0
  337. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/git_discipline.py +0 -0
  338. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/git_ops.py +0 -0
  339. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/git_topology.py +0 -0
  340. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/goal_coverage.py +0 -0
  341. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/governed_premerge.py +0 -0
  342. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/handoff.py +0 -0
  343. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/handoff_path.py +0 -0
  344. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  345. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/injection.py +0 -0
  346. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/install_status.py +0 -0
  347. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  348. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/lease_store.py +0 -0
  349. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/maintenance.py +0 -0
  350. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  351. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/models.py +0 -0
  352. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/observability.py +0 -0
  353. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  354. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  355. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  356. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  357. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  358. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  359. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  360. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  361. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  362. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/plan_ir.py +0 -0
  363. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/plan_manifest.py +0 -0
  364. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  365. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/planner_validation.py +0 -0
  366. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/president_operation.py +0 -0
  367. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/producer_manifest.py +0 -0
  368. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/profiles.py +0 -0
  369. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/prompts.py +0 -0
  370. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/proof_stages.py +0 -0
  371. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/provenance.py +0 -0
  372. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/py.typed +0 -0
  373. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/ratification_policy.py +0 -0
  374. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/reconcile.py +0 -0
  375. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/redaction.py +0 -0
  376. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/reflection_sync.py +0 -0
  377. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/release_guard.py +0 -0
  378. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/render.py +0 -0
  379. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/repo_validation.py +0 -0
  380. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/review_summary.py +0 -0
  381. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  382. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  383. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  384. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  385. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  386. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  387. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/route_log.py +0 -0
  388. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  389. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  390. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runtime_paths.py +0 -0
  391. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runtime_projection.py +0 -0
  392. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runtime_resources.py +0 -0
  393. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_placement.py +0 -0
  394. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_policy.py +0 -0
  395. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_retention.py +0 -0
  396. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schema_export.py +0 -0
  397. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  398. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  399. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  400. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_install.py +0 -0
  401. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_inventory.py +0 -0
  402. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_paths.py +0 -0
  403. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  404. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  405. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  406. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  407. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  408. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  409. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  410. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  411. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  412. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  413. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  414. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  415. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  416. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  417. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  418. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  419. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  420. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  421. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  422. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  423. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  424. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  425. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  426. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  427. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  428. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  429. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  430. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  431. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  432. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  433. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  434. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  435. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  436. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  437. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  438. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  439. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  440. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  441. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  442. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  443. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  444. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  445. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  446. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  447. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  448. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  449. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  450. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  451. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  452. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  453. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  454. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  455. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  456. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  457. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  458. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  459. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  460. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  461. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  462. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  463. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  464. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  465. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  466. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  467. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  468. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  469. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  470. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  471. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  472. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  473. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  474. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  475. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  476. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  477. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  478. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  479. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  480. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  481. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  482. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  483. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  484. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  485. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  486. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  487. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  488. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  489. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  490. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  491. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  492. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  493. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  494. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  495. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  496. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  497. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  498. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  499. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  500. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  501. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  502. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  503. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  504. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  505. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  506. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  507. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  508. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  509. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  510. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  511. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  512. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  513. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  514. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  515. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  516. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  517. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  518. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  519. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  520. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  521. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  522. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  523. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  524. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  525. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  526. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  527. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  528. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  529. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  530. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  531. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  532. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  533. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  534. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  535. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  536. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  537. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  538. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  539. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  540. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  541. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  542. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  543. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  544. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  545. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  546. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  547. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  548. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  549. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  550. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  551. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  552. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  553. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  554. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  555. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  556. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  557. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  558. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  559. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  560. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  561. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  562. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  563. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  564. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  565. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  566. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  567. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  568. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  569. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  570. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  571. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  572. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  573. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  574. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  575. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  576. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  577. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  578. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  579. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  580. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  581. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  582. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  583. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  584. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/state.py +0 -0
  585. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/state_degradation.py +0 -0
  586. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/state_ops.py +0 -0
  587. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/task_message_broker.py +0 -0
  588. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  589. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  590. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  591. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_ledger.py +0 -0
  592. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_review_packet.py +0 -0
  593. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_roadmap.py +0 -0
  594. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_runner.py +0 -0
  595. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/verification_evidence.py +0 -0
  596. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  597. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  598. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  599. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/worker_pool.py +0 -0
  600. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/worktree_index.py +0 -0
  601. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  602. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  603. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  604. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  605. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_acceptance_falsifier_contract.py +0 -0
  606. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_advisory_mode.py +0 -0
  607. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_alias_install.py +0 -0
  608. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_backing_omnigent.py +0 -0
  609. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_cli_legacy.py +0 -0
  610. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_composition.py +0 -0
  611. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_concurrency.py +0 -0
  612. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_config.py +0 -0
  613. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_ingestion.py +0 -0
  614. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_integration.py +0 -0
  615. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_live_research.py +0 -0
  616. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_matrix.py +0 -0
  617. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_observability.py +0 -0
  618. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_registries.py +0 -0
  619. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_research.py +0 -0
  620. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_resolver.py +0 -0
  621. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_schema.py +0 -0
  622. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_twin_alias_legacy.py +0 -0
  623. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agent_runtime_provider_cs08.py +0 -0
  624. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agy_canary_evidence.py +0 -0
  625. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agy_self_qualification.py +0 -0
  626. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agy_single_event_transport_1175.py +0 -0
  627. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_branchgov_preflight.py +0 -0
  628. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_broker_command_builders.py +0 -0
  629. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  630. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_broker_staged_tree_delivery.py +0 -0
  631. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_certificate_tier.py +0 -0
  632. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_chronology_scope.py +0 -0
  633. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_gate_metrics.py +0 -0
  634. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_main_red.py +0 -0
  635. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_offload_lock.py +0 -0
  636. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_quarantine.py +0 -0
  637. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_workflow_concurrency.py +0 -0
  638. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_xdist_witness.py +0 -0
  639. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  640. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_cli_train_status_45.py +0 -0
  641. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_break_glass_cli.py +0 -0
  642. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_classifier.py +0 -0
  643. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_convergence_fixes.py +0 -0
  644. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_exception_vocab.py +0 -0
  645. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  646. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_import_cycle_819.py +0 -0
  647. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  648. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_validator_hook.py +0 -0
  649. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_verification_gate.py +0 -0
  650. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_codex_effort_max_clamp_49.py +0 -0
  651. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_committed_range_diff.py +0 -0
  652. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_common_directory_leases_807.py +0 -0
  653. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_conform_timing_instrumentation.py +0 -0
  654. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_conformance_golden.py +0 -0
  655. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_dual_layout.py +0 -0
  656. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_gates.py +0 -0
  657. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_ingest.py +0 -0
  658. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_scaffold.py +0 -0
  659. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_console_scripts_are_declared.py +0 -0
  660. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_contract_floor_guard_378.py +0 -0
  661. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_adapters.py +0 -0
  662. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_admission.py +0 -0
  663. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_api.py +0 -0
  664. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_credsep.py +0 -0
  665. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_evidence.py +0 -0
  666. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_revocation_race.py +0 -0
  667. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_verbs.py +0 -0
  668. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_cli_integration.py +0 -0
  669. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_coordination_contracts.py +0 -0
  670. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_dispatch.py +0 -0
  671. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_event_contracts.py +0 -0
  672. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_event_log.py +0 -0
  673. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_fencing.py +0 -0
  674. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_fixture_contracts.py +0 -0
  675. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_invalidation.py +0 -0
  676. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_live_enable.py +0 -0
  677. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_provider_contracts.py +0 -0
  678. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_reconcile.py +0 -0
  679. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_refresh.py +0 -0
  680. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_runtime_imports.py +0 -0
  681. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_seat_lifecycle.py +0 -0
  682. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_status.py +0 -0
  683. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_train_integration.py +0 -0
  684. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_coordinator_wave_loop.py +0 -0
  685. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_cr_fixes_pr220.py +0 -0
  686. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_credential_redaction_shapes.py +0 -0
  687. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_delegated_visual_evidence_91.py +0 -0
  688. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_discovery_hygiene_legacy.py +0 -0
  689. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_hold_guard.py +0 -0
  690. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  691. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_helper.py +0 -0
  692. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_reentrancy.py +0 -0
  693. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  694. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_doc_delta_validator.py +0 -0
  695. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_docs_audit.py +0 -0
  696. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_docs_freshness.py +0 -0
  697. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_doctor_bom.py +0 -0
  698. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dotfiles_tree.py +0 -0
  699. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_entry_doc_check.py +0 -0
  700. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execfind_falsifier.py +0 -0
  701. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execfind_governed_promotion.py +0 -0
  702. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execgov.py +0 -0
  703. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execreg_launch_registry.py +0 -0
  704. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execute_phase_handoff_mode.py +0 -0
  705. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execution_policy_tiering.py +0 -0
  706. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_executor_availability.py +0 -0
  707. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_executor_exited_without_closeout_785.py +0 -0
  708. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_export_schema.py +0 -0
  709. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_activation_promotion.py +0 -0
  710. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_canonical_b.py +0 -0
  711. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_closeout_crash_safety.py +0 -0
  712. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_closeout_wiring.py +0 -0
  713. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_delta_c.py +0 -0
  714. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_delta_consumer.py +0 -0
  715. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
  716. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_gate_d.py +0 -0
  717. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_producer.py +0 -0
  718. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_provenance_a.py +0 -0
  719. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
  720. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  721. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_recovery_controls_789.py +0 -0
  722. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  723. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_shared_epoch.py +0 -0
  724. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
  725. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  726. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabreadmit_broker.py +0 -0
  727. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_finding_F001.py +0 -0
  728. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fleet_map.py +0 -0
  729. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fleet_metrics.py +0 -0
  730. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fleet_metrics_export.py +0 -0
  731. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_frozen_blob_batch_parse.py +0 -0
  732. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_a_wheel_isolation.py +0 -0
  733. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_fail_open_visibility.py +0 -0
  734. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_parity_244_245.py +0 -0
  735. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_posture.py +0 -0
  736. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_git_discipline.py +0 -0
  737. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_git_grounded_projection.py +0 -0
  738. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_goal_coverage.py +0 -0
  739. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  740. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_disjointness_model_first.py +0 -0
  741. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_e2e.py +0 -0
  742. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_gate_crfixes.py +0 -0
  743. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_planning_gate.py +0 -0
  744. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_premerge.py +0 -0
  745. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_premerge_live.py +0 -0
  746. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_review.py +0 -0
  747. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_declared_identity.py +0 -0
  748. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_panel_policy.py +0 -0
  749. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  750. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_plan_pin_lint.py +0 -0
  751. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_producer_manifest.py +0 -0
  752. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_proof_stages.py +0 -0
  753. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_roadmap_reseal.py +0 -0
  754. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_skill_policy_parity.py +0 -0
  755. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_tdd_receipts.py +0 -0
  756. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_grok_narrow_reject_231.py +0 -0
  757. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_grokexec.py +0 -0
  758. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_harden_json_depth_825.py +0 -0
  759. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_hotfix_lane.py +0 -0
  760. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_injection_skill_failloud.py +0 -0
  761. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_lane_ir_override.py +0 -0
  762. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_launcher_exec_supervisor.py +0 -0
  763. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_launchspec_golden.py +0 -0
  764. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_lease_store.py +0 -0
  765. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_lease_store_conformance.py +0 -0
  766. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ledger_serialization.py +0 -0
  767. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_legible_evidence.py +0 -0
  768. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_legible_review_repairs.py +0 -0
  769. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_live_smoke_gate_executes.py +0 -0
  770. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_local_check.py +0 -0
  771. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_manifest_per_entry_164.py +0 -0
  772. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_model_class_policy.py +0 -0
  773. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_model_id_source_guard.py +0 -0
  774. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_model_tier_taxonomy.py +0 -0
  775. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_native_claude_seat_fill.py +0 -0
  776. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_native_claude_seat_fill_green.py +0 -0
  777. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_native_fill_refusal_cause.py +0 -0
  778. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  779. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_observability_alerting.py +0 -0
  780. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_advisory.py +0 -0
  781. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_advisory_cli.py +0 -0
  782. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  783. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_authority_boundary.py +0 -0
  784. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_canonical_corpus.py +0 -0
  785. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_conform_evidence.py +0 -0
  786. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_contract_drift.py +0 -0
  787. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_contract_imports.py +0 -0
  788. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_contract_pin.py +0 -0
  789. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_core_api.py +0 -0
  790. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_provenance.py +0 -0
  791. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_ci.py +0 -0
  792. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_cli.py +0 -0
  793. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_output.py +0 -0
  794. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_runtime.py +0 -0
  795. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_redaction.py +0 -0
  796. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_redaction_separation.py +0 -0
  797. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_release_surface.py +0 -0
  798. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_schema_validation.py +0 -0
  799. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_vectors.py +0 -0
  800. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_packaged_vector_manifest_pin.py +0 -0
  801. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_advisory_mode_63.py +0 -0
  802. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  803. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_context_refs_114.py +0 -0
  804. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_doc_contract.py +0 -0
  805. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  806. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker.py +0 -0
  807. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker_windows_import.py +0 -0
  808. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_lanes.py +0 -0
  809. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  810. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_lens_delivery.py +0 -0
  811. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_native_fill_183.py +0 -0
  812. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_streaming_verdicts.py +0 -0
  813. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_verdict_summary.py +0 -0
  814. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_parallel_dispatch_backcompat.py +0 -0
  815. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_parallel_dispatch_cli.py +0 -0
  816. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_adoption_bundle.py +0 -0
  817. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  818. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_dependency.py +0 -0
  819. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  820. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_injection.py +0 -0
  821. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_modular.py +0 -0
  822. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  823. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  824. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_schema_export.py +0 -0
  825. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_schema_source.py +0 -0
  826. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_v1_callers.py +0 -0
  827. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_v1_runtime.py +0 -0
  828. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_v1_supervisor_slot.py +0 -0
  829. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  830. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  831. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_build_bundle.py +0 -0
  832. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_classifier.py +0 -0
  833. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  834. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
  835. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  836. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  837. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  838. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_security.py +0 -0
  839. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  840. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  841. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  842. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_route_selection.py +0 -0
  843. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_cli.py +0 -0
  844. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  845. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_control_only.py +0 -0
  846. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_event.py +0 -0
  847. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  848. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_hardening.py +0 -0
  849. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  850. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_schema.py +0 -0
  851. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_validation.py +0 -0
  852. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_collaborator_citation.py +0 -0
  853. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_collaborator_docs.py +0 -0
  854. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  855. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  856. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  857. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  858. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  859. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_discovery.py +0 -0
  860. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_docs.py +0 -0
  861. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  862. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  863. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  864. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  865. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_portal.py +0 -0
  866. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  867. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_drift_audit.py +0 -0
  868. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  869. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  870. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_events_migration.py +0 -0
  871. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit.py +0 -0
  872. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  873. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  874. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  875. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  876. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_execution_policy.py +0 -0
  877. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_executor_degradation.py +0 -0
  878. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_full_phase_mode.py +0 -0
  879. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_handoff.py +0 -0
  880. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_handoff_migration.py +0 -0
  881. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_init.py +0 -0
  882. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_injection.py +0 -0
  883. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_install_status.py +0 -0
  884. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  885. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_harnesses.py +0 -0
  886. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_ir.py +0 -0
  887. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  888. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_scheduler.py +0 -0
  889. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_launcher.py +0 -0
  890. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_ledger_debug.py +0 -0
  891. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_ledger_dedup.py +0 -0
  892. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_live_adapters.py +0 -0
  893. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_maintenance.py +0 -0
  894. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_metrics.py +0 -0
  895. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_migration_regressions.py +0 -0
  896. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  897. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  898. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  899. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_models.py +0 -0
  900. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_native_flags.py +0 -0
  901. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  902. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pi_executor.py +0 -0
  903. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  904. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  905. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  906. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  907. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  908. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_mode.py +0 -0
  909. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  910. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_plan_manifest.py +0 -0
  911. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  912. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_planner_validation.py +0 -0
  913. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_policy.py +0 -0
  914. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_protocol_contract.py +0 -0
  915. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_provenance.py +0 -0
  916. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile.py +0 -0
  917. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  918. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  919. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  920. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reducers.py +0 -0
  921. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  922. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  923. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  924. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_roadmap_validate.py +0 -0
  925. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_rotation.py +0 -0
  926. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runner.py +0 -0
  927. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  928. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_boundary.py +0 -0
  929. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_decouple.py +0 -0
  930. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_package_data.py +0 -0
  931. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_projection.py +0 -0
  932. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_schema_flow.py +0 -0
  933. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  934. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  935. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_contract.py +0 -0
  936. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  937. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_install.py +0 -0
  938. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  939. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_smoke_blockers.py +0 -0
  940. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  941. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_smoke_reentry.py +0 -0
  942. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  943. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  944. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  945. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_state.py +0 -0
  946. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  947. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  948. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  949. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  950. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  951. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v22_e2e.py +0 -0
  952. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v22_principles.py +0 -0
  953. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  954. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_reconcile.py +0 -0
  955. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_sched.py +0 -0
  956. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_schedharden.py +0 -0
  957. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_wave_runner.py +0 -0
  958. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_work_unit_observability.py +0 -0
  959. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_work_unit_runner.py +0 -0
  960. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_work_unit_state.py +0 -0
  961. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_worktrees.py +0 -0
  962. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  963. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_state_disagreement_312.py +0 -0
  964. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_worktree_executor.py +0 -0
  965. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  966. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  967. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  968. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_flag.py +0 -0
  969. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_markers.py +0 -0
  970. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  971. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  972. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  973. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  974. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  975. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pkg_layout_freeze.py +0 -0
  976. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_plan_ir_iter_waves.py +0 -0
  977. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_plan_manifest_append_order_1174.py +0 -0
  978. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F001.py +0 -0
  979. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F002.py +0 -0
  980. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F003.py +0 -0
  981. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F004.py +0 -0
  982. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r4_F001.py +0 -0
  983. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r4_F002.py +0 -0
  984. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r4_F003.py +0 -0
  985. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r5_F001.py +0 -0
  986. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r6_F001.py +0 -0
  987. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r7_F001.py +0 -0
  988. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r9_F002.py +0 -0
  989. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr_readback_789.py +0 -0
  990. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_preflight_verification.py +0 -0
  991. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_presroute_cli.py +0 -0
  992. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_presroute_landed.py +0 -0
  993. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_attestation_workflow.py +0 -0
  994. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_cleanup.py +0 -0
  995. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_isolation.py +0 -0
  996. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_receipts.py +0 -0
  997. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_prune_merged_worktrees_script.py +0 -0
  998. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_public_installer.py +0 -0
  999. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_publishing.py +0 -0
  1000. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pushflow.py +0 -0
  1001. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_qualify_network_owner.py +0 -0
  1002. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ratification_policy.py +0 -0
  1003. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  1004. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_portability_85c.py +0 -0
  1005. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  1006. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_verification_log.py +0 -0
  1007. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  1008. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_redaction_channel_control_isolation.py +0 -0
  1009. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_redaction_main_coverage_cases.py +0 -0
  1010. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reflection_sync.py +0 -0
  1011. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  1012. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_release_pin_autotrack.py +0 -0
  1013. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_repo_validation.py +0 -0
  1014. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_leg_sandbox.py +0 -0
  1015. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_stage_binding.py +0 -0
  1016. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_stage_board_findings.py +0 -0
  1017. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_staged_tree_authorization.py +0 -0
  1018. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_summary.py +0 -0
  1019. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_roadmap_authority.py +0 -0
  1020. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_roadmap_ownership.py +0 -0
  1021. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_roadmap_representation_consistency.py +0 -0
  1022. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_route_log.py +0 -0
  1023. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_route_policy_conformance.py +0 -0
  1024. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_routing_invariants.py +0 -0
  1025. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  1026. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_adapter_output_720.py +0 -0
  1027. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_event_log_hardening_720.py +0 -0
  1028. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_procfs_identity_870.py +0 -0
  1029. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_state_mirror_agreement.py +0 -0
  1030. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_clone.py +0 -0
  1031. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_policy.py +0 -0
  1032. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_preamble.py +0 -0
  1033. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_retention.py +0 -0
  1034. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  1035. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sibling_matcher_patterns.py +0 -0
  1036. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_bundle_pinned.py +0 -0
  1037. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_install_body_expansion.py +0 -0
  1038. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_liveness_contract.py +0 -0
  1039. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_plan_manifest_write.py +0 -0
  1040. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_sources_seam.py +0 -0
  1041. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skills_bundle_drift.py +0 -0
  1042. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skills_canon_parity.py +0 -0
  1043. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skills_src_claude_literal_lint.py +0 -0
  1044. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_spec_conformance_gate.py +0 -0
  1045. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_specpkgmin_wheel.py +0 -0
  1046. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  1047. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_status_read_only_62.py +0 -0
  1048. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_subscription_scrub_xai_864.py +0 -0
  1049. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  1050. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  1051. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sync_skills_apply_failloud.py +0 -0
  1052. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_task_message_broker.py +0 -0
  1053. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_task_message_broker_cli.py +0 -0
  1054. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_task_message_resolver.py +0 -0
  1055. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_tdd_chronology.py +0 -0
  1056. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_authority_import_811.py +0 -0
  1057. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_e2e.py +0 -0
  1058. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_invariants.py +0 -0
  1059. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_merge.py +0 -0
  1060. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_order_only_deps_47.py +0 -0
  1061. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_prebuilt.py +0 -0
  1062. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_review_authorization.py +0 -0
  1063. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_review_monitoring_policy.py +0 -0
  1064. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_review_packet.py +0 -0
  1065. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_roadmap.py +0 -0
  1066. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_runner.py +0 -0
  1067. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_unattended_release.py +0 -0
  1068. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  1069. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  1070. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  1071. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  1072. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  1073. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_proofgate.py +0 -0
  1074. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_dotdot_execution_428.py +0 -0
  1075. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_evidence.py +0 -0
  1076. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_evidence_validator.py +0 -0
  1077. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_interpreter_guard_221.py +0 -0
  1078. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_venv_identity_428.py +0 -0
  1079. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verify_qualified_agy_route_core.py +0 -0
  1080. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_visual_avatar_evidence_validator.py +0 -0
  1081. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_visual_evidence_validator.py +0 -0
  1082. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_workerpool_failure_isolation.py +0 -0
  1083. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_workerpool_parallel.py +0 -0
  1084. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_workerpool_worktree_alloc.py +0 -0
  1085. {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_worktree_index.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.7.23
3
+ Version: 0.7.25
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author-email: ViperJuice <viperjuice@users.noreply.github.com>
6
6
  License-Expression: Apache-2.0
@@ -50,7 +50,7 @@ To install just this runtime package directly:
50
50
 
51
51
  ```sh
52
52
  pip install phase-loop-runtime # latest compatible release
53
- pip install phase-loop-runtime==0.7.23 # …or pin an exact version
53
+ pip install phase-loop-runtime==0.7.25 # …or pin an exact version
54
54
  ```
55
55
 
56
56
  To pin a specific tag from source instead, substitute a tag from
@@ -19,7 +19,7 @@ To install just this runtime package directly:
19
19
 
20
20
  ```sh
21
21
  pip install phase-loop-runtime # latest compatible release
22
- pip install phase-loop-runtime==0.7.23 # …or pin an exact version
22
+ pip install phase-loop-runtime==0.7.25 # …or pin an exact version
23
23
  ```
24
24
 
25
25
  To pin a specific tag from source instead, substitute a tag from
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
7
- version = "0.7.23"
7
+ version = "0.7.25"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -156,6 +156,7 @@ phase_loop_runtime = [
156
156
  markers = [
157
157
  "dotfiles_integration: test requires a dotfiles fleet tree (skipped standalone)",
158
158
  "quarantine(reason): known flake tracked by an OPEN issue; deselected on pull-request CI only (agent-harness#1029)",
159
+ "host_seat_credentials: live jailed-seat test that reads the host's Claude login and seat-jail state (agent-harness#1132)",
159
160
  ]
160
161
 
161
162
  [tool.setuptools.data-files]
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.23"
21
+ __version__ = "0.7.25"
@@ -0,0 +1,57 @@
1
+ """Linux CPU observations for a process group and its descendants.
2
+
3
+ Owner wrappers can start a child in another session. Include that child tree
4
+ when sampling the leg. Missing /proc data yields zero; CPU activity alone does
5
+ not establish completion or grant heartbeat-only termination authority.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import os
10
+
11
+
12
+ def _pgrp_and_ticks(pid: int) -> tuple[int, int]:
13
+ """Return ``(process_group_id, utime+stime)`` for ``pid`` from /proc/<pid>/stat.
14
+
15
+ The ``comm`` field (2nd) is wrapped in parens and may itself contain spaces or
16
+ parens, so parse the fixed fields AFTER the last ``)``: from there field 3
17
+ (state) is index 0, so pgrp (field 5) = index 2, utime (14) = index 11, and
18
+ stime (15) = index 12.
19
+ """
20
+ with open(f"/proc/{pid}/stat", encoding="ascii", errors="replace") as fh:
21
+ data = fh.read()
22
+ after = data[data.rfind(")") + 2 :].split()
23
+ pgrp = int(after[2])
24
+ return pgrp, int(after[11]) + int(after[12])
25
+
26
+
27
+ def group_cpu_ticks(leader_pid: int) -> int:
28
+ """Sum observed ticks for the group and children, including new sessions."""
29
+ samples = {}
30
+ try:
31
+ entries = os.listdir("/proc")
32
+ except OSError:
33
+ return 0
34
+ for entry in entries:
35
+ if not entry.isdigit():
36
+ continue
37
+ try:
38
+ with open(f"/proc/{entry}/stat", encoding="ascii", errors="replace") as fh:
39
+ data = fh.read()
40
+ fields = data[data.rfind(")") + 2 :].split()
41
+ samples[int(entry)] = (int(fields[1]), int(fields[2]),
42
+ int(fields[11]) + int(fields[12]))
43
+ except (OSError, ValueError, IndexError):
44
+ continue # process exited mid-scan, or an unreadable/odd stat line
45
+ members = {pid for pid, (_, group, _) in samples.items() if group == leader_pid}
46
+ if leader_pid in samples:
47
+ members.add(leader_pid)
48
+ children = {}
49
+ for pid, (parent, _, _) in samples.items():
50
+ children.setdefault(parent, []).append(pid)
51
+ pending = list(members)
52
+ while pending:
53
+ for child in children.get(pending.pop(), ()):
54
+ if child not in members:
55
+ members.add(child)
56
+ pending.append(child)
57
+ return sum(samples[pid][2] for pid in members)
@@ -28,8 +28,8 @@ equivalence is proven by a test (not asserted in prose).
28
28
  the **agy/gemini leg where effort is embedded in the model-name string**
29
29
  (`render_gemini_model`, panel_invoker.py:1016). Built-3 lanes are concrete;
30
30
  breadth lanes raise `EffortMappingError` until ABDREG/ABDHOME/ABDOMNI.
31
- Round-trip (proven): claude→`--effort max`, codex→
32
- `-c model_reasoning_effort=xhigh`, Gemini Flash→`gemini-3.8-flash-high`;
31
+ Default round-trip (proven): claude→`--effort high`, codex→
32
+ `-c model_reasoning_effort=high`, Gemini Flash→`gemini-3.8-flash-medium`;
33
33
  explicit legacy Pro display names remain compatible.
34
34
  - **Seat identity for result re-keying** — `Seat.seat_key` is a stable LABEL over
35
35
  every distinguishing field (lane, model, effort, lens), so lens-only-different
@@ -563,6 +563,15 @@ only in a private 0600 per-leg file under the run's stream dir (`leg-logs/`, 070
563
563
  reasons or the board summary. Its name carries only closed fields:
564
564
  `leg-logs/<registry harness | leg>-<24 hex>.log`.
565
565
 
566
+ **Seat-jail codes (agent-harness#1132, F030).** Every seat-jail notice code is an exact
567
+ literal of `_HARNESS_DETAIL_CODES`: `seat_sandbox_unavailable_{host,seat_uid,tiocsti}`,
568
+ `seat_sandbox_not_staged`, each `seat_sandbox_refused:<sub>` as its own literal
569
+ (`jail_build`, `namespace`, `identity`, `preseed`, `token_file_unsafe`,
570
+ `gemini_credential_unsafe`, `stage_not_private`, `stage_changed`, `output_unsafe`),
571
+ `seat_sandbox_retained_after_teardown`, and the `claude_seat_*` / `gemini_seat_*` codes. No
572
+ regex template admits a seat code, and there is no parallel vocabulary: `seat_jail.NOTICES`
573
+ only renders each code's literal what/why/fix, and a test holds the two sets equal.
574
+
566
575
  **Threat model.** I3 defends against untrusted TEXT: CLI stdout/stderr, leg bodies, exception messages and PTY output. None of it can choose or enter `detail`. In-process Python code is trusted runtime code and is out of scope: it can do anything (for example `object.__setattr__` on arbitrary objects, or replacing this module's functions). The exact-type checks (`PanelLegResult` refuses any subclass instance; only an exact `_HarnessCode` / `_LegFailure` has provenance; contents are read with `str.__str__` and re-created as a fresh `_HarnessCode`) close the cheap structural bypasses, but they are not a sandbox against hostile in-process code.
567
576
 
568
577
  ## ABDMODE — Purpose-derived default mode + advisory prompt hygiene · `panel_invoker.py` (#107)
@@ -889,8 +898,11 @@ set `gemini_heartbeat.QUALIFIED_IMAGES`: 1.2.11 SHA256
889
898
  `ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`, 1.2.12 SHA256
890
899
  `ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`, 1.2.14 SHA256
891
900
  `0d0d3eba22daf29504dd290151c7ed9a4d33b0c6aa0acfc5da27bc3b01d2f029`, 1.2.15 SHA256
892
- `5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164` or 1.2.16 SHA256
893
- `a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86`. Each member
901
+ `5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164`, 1.2.16 SHA256
902
+ `a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86`, 1.2.17 SHA256
903
+ `c54ef90651a8646ae67334d39212c81f5946feec373ad6aa335f9ef401662bc5`, 1.3.0 SHA256
904
+ `19be6af38f7beeaa0db415df9297e314ab3d33fdd6f853434d49f88819bc68e4` or 1.3.1 SHA256
905
+ `ce1bdaed3201bb84f35d69d2773caec4f18af52af00e8c25f6cace07e4359615`. Each member
894
906
  carries its measured help digest and has its own qualification record; the
895
907
  evidence catalog and the runtime set must name exactly the same members.
896
908
  The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
@@ -1043,6 +1055,312 @@ A non-release `agy` image is admitted only by verifying it, never by trusting it
1043
1055
  created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
1044
1056
  agree. It refuses when it cannot prove its open-PR listing complete.
1045
1057
 
1058
+ ## SEATJAIL — Full-permission review seats inside a per-seat jail (agent-harness#1132)
1059
+
1060
+ Plan: `plans/detailed-seat-sandbox-permissions-1132-20260928.md`. Maintainer decisions D1-D8
1061
+ are recorded on agent-harness#1132.
1062
+
1063
+ - **Route (J7).** A production brokered Claude or Gemini leg decides its route once, after
1064
+ the public-entry authorization and before staging, in this order; the first failure wins
1065
+ and yields exactly one code: (0) no staged tree -> `seat_sandbox_not_staged`; (1) a
1066
+ recorded Gemini P4/P3 stop -> its code (today `gemini_seat_egress_unconfined`: the agy
1067
+ token carries `cloud-platform`, and the "prove then enable" containment probe found jail
1068
+ egress not limited to agy's inference hosts; P3 was not run and the tooled profile is not
1069
+ built); (2) host capability -> `seat_sandbox_unavailable_host`,
1070
+ `_tiocsti`, or `_seat_uid`; (3) credential presence -> `claude_seat_token_missing` /
1071
+ `gemini_seat_credential_missing`; (4) Gemini tooled qualification ->
1072
+ `gemini_seat_profile_unqualified`. Steps 0-4 send the seat to the sealed inline route,
1073
+ byte-identical to before, with that notice, except a Claude seat's step 3, which is not
1074
+ run (plan amendment A3b, below). Codex and grok are not jailed
1075
+ (agent-harness#895) and carry `seat_filesystem_unconfined` when given a tree.
1076
+ - **No sealed fallback for a jail-eligible seat (plan amendment A3b).** A Claude seat that
1077
+ would take the jailed route but cannot (no credential, a failed first-use qualification,
1078
+ a login not renewed within the wait, an unqualified or unsafe gate, an unsafe override)
1079
+ is DEGRADED and NOT RUN, typed, with a fix. It is never a toolless substitute.
1080
+ `seat_jail.JAIL_NOT_RUN_CODES` names the route codes this applies to; none of them is in
1081
+ `SEALED_FALLBACK_CODES`. The sealed route stays for hosts without the jail prerequisites,
1082
+ an unstaged review and the Gemini seat (agent-harness#1244).
1083
+ - **The jailed route is Claude-only.** `JAILED_LEGS` is exactly `{"claude"}`. A Gemini
1084
+ seat always takes the sealed route with its typed notice, whatever its credential,
1085
+ qualification or recorded stop; a tooled Gemini seat is agent-harness#1170.
1086
+ - **EC-EXECFIND-2 gate.** A jailed route whose jail profile digest has no EC-EXECFIND-2
1087
+ falsifier pass recorded on THIS host is REFUSED before any effect with
1088
+ `seat_sandbox_refused:jail_unqualified`. The notice names the per-host qualification as
1089
+ the fix.
1090
+ - **Where passes live:** per user and per host, at
1091
+ `$XDG_STATE_HOME/phase-loop/seat-jail-passes/<digest>.json`. A record qualifies only if it
1092
+ binds all of:
1093
+ - the digest;
1094
+ - this host (sha256 of `/etc/machine-id`);
1095
+ - the EC-EXECFIND-2 falsifier-run layout: `seat_jail.falsifier_layout_identity()`, a
1096
+ digest of the EXECFIND staging and run code, so a change to either invalidates every
1097
+ pass;
1098
+ - the run's evidence file, which the gate re-hashes and which must name the same values.
1099
+
1100
+ The record and the evidence must be regular, operator-owned files that are not group- or
1101
+ other-writable and are not links. They are read non-blocking with size caps.
1102
+ - **The directory chain:** every directory up to the state home must be operator-owned,
1103
+ must not be a link, and must not be other-writable. It may be group-writable only when
1104
+ its group is the operator's user-private group, which is the umask-002 default. That
1105
+ means all of the following hold:
1106
+ - it is the operator's primary gid;
1107
+ - the group is named after the operator;
1108
+ - it lists no other member;
1109
+ - no other account has it as its primary group.
1110
+
1111
+ Any other chain is refused with `seat_sandbox_refused:pass_store_unsafe`, whose notice
1112
+ names the chmod. The recorder applies the same rule and never re-permissions an
1113
+ existing directory.
1114
+ - **One fail-closed boundary:** the whole evaluation is inside a single
1115
+ `except Exception`. Any error is the typed refusal `jail_unqualified`, and no provider
1116
+ is launched. The route detail stays the closed code. The verdict's typed reason
1117
+ (`no_record`, `binding_mismatch`, `evidence_mismatch`, `store_unsafe:...` or
1118
+ `error:<ExceptionClass>`) is logged, and is carried in the launch refusal's message.
1119
+ - **Checked at launch:** qualification is re-checked against the jail actually built.
1120
+ - **Threat model:** the operator's own account can forge a record, and is trusted to. The
1121
+ store defends against the seat uid, stale records, other hosts and accidental reuse.
1122
+ - **Why per host:** the digest binds the host's layout (maintainer decision, option A).
1123
+ A shipped host-independent policy digest plus a first-use self-check is
1124
+ agent-harness#1186.
1125
+ - **Recording a pass:** `phase-loop seat-sandbox qualify` runs EC-EXECFIND-2's jail
1126
+ falsifiers (`seat_jail_qualification`) against a real falsifier run, using the EXECFIND
1127
+ staging, the dependency snapshot and the bounded bwrap runner:
1128
+ - the run holds a nonce sentinel in every protected directory, a sentinel process, and
1129
+ TCP, UDP, pathname Unix and abstract Unix listeners;
1130
+ - concurrently, a probe program running as the seat in the production jail tries to
1131
+ create entries, change sentinels, signal and connect, through the host paths and
1132
+ through anything it resolves by device and inode;
1133
+ - the parent judges the result: sentinels intact, no events, single-link protected
1134
+ files, no seat mount or descriptor resolving to a protected object or an ancestor, and
1135
+ the run `green_on_head`.
1136
+
1137
+ Only a pass is recorded.
1138
+ - **`seat_sandbox_refused:identity`** remains the code for a jail that is not the
1139
+ qualified profile at launch, or a failed identity probe.
1140
+ - **Jail profile (`seat_jail_v1`).** bwrap, no `--unshare-user` and no `--unshare-net`:
1141
+ read-only `/usr` (merged-`/usr` links recreated), an `/etc` subset, the provider image at
1142
+ `/seat/bin/<leg>`, the bundle and instructions as sealed memfds at `/seat/review/`, the
1143
+ staged clone read-write at `/seat/tree`, fresh `/seat/home` and `/seat/out`, tmpfs `/tmp`
1144
+ and `/dev/shm`, `--remount-ro /`, `--clearenv` plus a declared environment (the seat's
1145
+ `TMPDIR` and `CLAUDE_CODE_TMPDIR` are `/seat/home/.tmp`, on the disk-backed staging root,
1146
+ never the tmpfs `/tmp`; agent-harness#1147), and the J14
1147
+ seccomp filter (architecture kill, x32 EPERM, nested user/mount namespaces, `setns`,
1148
+ `clone3` ENOSYS, key syscalls, AF_ALG sockets, TIOCSTI/TIOCLINUX). The profile digest
1149
+ covers the mount set, the flags and the filter digest.
1150
+ - **Seat uid (D8).** The seat runs as a subordinate uid leased from the operator's
1151
+ `/etc/subuid` range, inside an egress holder namespace mapped by `newuidmap`/`newgidmap`
1152
+ (in it, uid 0 is the operator). Launch order: fresh session keyring, `nsenter` into H,
1153
+ the private-inode hand-off (`seat_sandbox_refused:stage_not_private` on any hard link),
1154
+ bwrap with `--cap-drop ALL` then exactly `CAP_SETUID`, `CAP_SETGID`, `CAP_SETPCAP` (P5:
1155
+ bwrap as namespace root otherwise keeps every capability), then `setpriv` to the seat
1156
+ uid with every capability set, the bounding set included, emptied and no-new-privs set,
1157
+ then `env --chdir=/seat/tree` as the seat. `/seat`, `/seat/bin`, `/seat/review` and
1158
+ `/etc` are created 0755 and the tmpfs mounts 1777, so the seat uid can traverse and use
1159
+ them (P5, P1).
1160
+ The host prerequisite (`apt install uidmap`, `usermod --add-subuids/--add-subgids`) is a
1161
+ one-time root step by the maintainer, never run by the runtime.
1162
+ - **Credential channels (plan amendment A1).** The Claude credential is resolved afresh at
1163
+ each jailed launch, in this order:
1164
+ 1. The seat-token override, the record `$XDG_STATE_HOME/phase-loop/seat-credentials/
1165
+ claude.override.json` (owner-only, in a 0700 directory, owned by the euid). It is
1166
+ written only by `phase-loop seat-sandbox store-token` and used only when it is bound to
1167
+ the account and organization the launching session is logged in to (plan amendment A4,
1168
+ below). A hand-placed raw `seat-credentials/claude` file is never used.
1169
+ 2. Otherwise, the current Claude login's `claudeAiOauth.accessToken` only, never its
1170
+ refresh token. It comes from the CLI's own store: `$CLAUDE_CONFIG_DIR/.credentials.json`
1171
+ or `~/.claude/.credentials.json`, and the login Keychain on macOS.
1172
+
1173
+ - **The login token's margin:** it must have the seat's hard deadline (its explicit
1174
+ per-leg timeout, else the 1800 s backstop) or `PHASE_LOOP_SEAT_LOGIN_TOKEN_MARGIN_S`
1175
+ left. One function (`_claude_seat_login_margin_s`) gives this margin to the pre-launch
1176
+ seat mode, the wait and the launch.
1177
+ - **A short login (plan amendment A3):** the harness never runs the Claude CLI to renew a
1178
+ credential. The mode line carries `claude_seat_login_token_awaiting_refresh` with the
1179
+ minutes left. Before staging, and before any seat id or namespace is held, the seat
1180
+ waits: `seat_credentials.await_login_margin` reads the store read-only every
1181
+ `PHASE_LOOP_SEAT_LOGIN_REFRESH_POLL_S` (30 s), for up to
1182
+ `PHASE_LOOP_SEAT_LOGIN_REFRESH_WAIT_S` (900 s; 0 means no wait).
1183
+ - **Renewed:** the seat runs jailed (logged `jailed (login refreshed)`), re-reading the
1184
+ token at launch.
1185
+ - **Not renewed in time:** the seat is DEGRADED and NOT RUN with
1186
+ `claude_seat_login_token_expiring`. A store that stops yielding a login ends it with
1187
+ `claude_seat_token_missing`. Nothing is launched (plan amendment A3b).
1188
+ - **Monitoring:** under `heartbeat_only` the wait is recorded as `login_wait` in the
1189
+ monitoring record, not as a stall, and the stall clock starts after it. Under a
1190
+ bounded policy it is charged to the leg's deadline. The monitor's cancel event and the
1191
+ quiescence latch end it.
1192
+ - **Delivery:** either credential is delivered only through one drained pipe named by
1193
+ `CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR`. No credential is in any argv, environment
1194
+ value, evidence or log.
1195
+ - **The output scan:** seat output is scanned for the credential's bytes and its
1196
+ standard, URL-safe and hex encodings (`claude_seat_token_in_output`).
1197
+ - **The residual:** a seat can use the credential for its remaining lifetime. That is
1198
+ hours for a login access token. The response is to log out and back in; the token also
1199
+ expires on its own.
1200
+ - **Gemini:** the D7 access-token-only copy (builder only; the tooled Gemini route is gated
1201
+ on P4 then P3).
1202
+ - **Credential outcomes by source.** For the override: `claude_seat_token_rate_limited` and
1203
+ `claude_seat_token_rejected`. For the login: `claude_seat_login_rate_limited` and
1204
+ `claude_seat_login_rejected`. A login token at or past its launch-time expiry fails as
1205
+ `claude_seat_login_token_expired`, in both the detail and the notice, and is safe to
1206
+ relaunch. None of these is a `seat_sandbox_refused:*` code. On both the sealed and the
1207
+ jailed route, an authentication failure in the PTY tail takes priority over the generic
1208
+ journaled give-up (`claude_seat_provider_api_error`), so a credential outcome is never
1209
+ hidden behind it; every typed give-up (limits, output budget, rejected transcript) keeps
1210
+ its priority.
1211
+ - **First-use qualification (plan amendment A2; folds in agent-harness#1186 option C).** A
1212
+ jailed route with no recorded pass for this host, digest and layout runs the host's jail
1213
+ qualification once, before launch. It is serialized by an exclusive lock in the per-user
1214
+ state directory, and on a pass it records the pass.
1215
+ - **On a pass:** the seat stays jailed, and its mode reports `qualified_now`.
1216
+ - **On a failure, or a run that cannot happen (a cached failure included):** the seat is
1217
+ DEGRADED and NOT RUN with `seat_jail_qualification_failed` and a typed reason
1218
+ (`prerequisite_missing`, `store_unsafe`, `uid_switch_denied`, `falsifiers_failed`, `timeout` or
1219
+ `error`),
1220
+ each with a literal fix (plan amendment A3b supersedes A2's sealed fallback).
1221
+ - **The failure cache:** failures are cached per host, digest and layout for
1222
+ `PHASE_LOOP_SEAT_JAIL_QUALIFY_RETRY_S` (default 3600 s). A lock timeout is not cached.
1223
+ - **The launch-time re-check** against the built jail still refuses an unrecorded digest.
1224
+ - **Seat modes (plan amendment A1).** Before any seat launches, every board publishes one
1225
+ mode per seat: `jailed`, `unconfined`, `sealed`, `degraded` or `native`. Each mode carries
1226
+ its notice code, reason and fix, and the modes are delivered through `on_seat_modes`, the
1227
+ log and `seat-modes.json`. The `advisor-board` CLI prints them to stderr and carries them as
1228
+ `seat_modes` in `--json`.
1229
+ - **Launch helpers.** The pre-jail and in-namespace helpers (`seat_keyring_exec`, the
1230
+ `seat_uid` handoff and its in-namespace verbs) run from the installation the parent
1231
+ imported: `python -I` with this package's root put first on the import path
1232
+ (`seat_uid.trusted_module_argv`), never `python -m`, whatever the launch's working
1233
+ directory is. An inventory test fails on any `sys.executable -m` launch of a package
1234
+ module.
1235
+ - **Scratch decision (agent-harness#1147).** A jailed launch's helper chain gets one env
1236
+ from `child_scratch_env` (`_jail_launch_env`), and that same object is handed to the
1237
+ identity probe and the launch. The seat never sees it: bwrap clears the environment and
1238
+ sets the seat's own.
1239
+ - **The override follows the launching session (plan amendment A4).** A seat's credential
1240
+ follows the subscription of the session that launched the leg.
1241
+ - **Storing:** `phase-loop seat-sandbox store-token` reads the override with no echo, or
1242
+ from stdin. A terminal that cannot hide the input is refused. The token and its account
1243
+ are stored as ONE record, `seat-credentials/claude.override.json`
1244
+ (`{"schema": "seat_credential_override.v1", "account": ..., "token": ...}`).
1245
+ - **The account** is the current login's `oauthAccount.accountUuid`, from
1246
+ `$CLAUDE_CONFIG_DIR/.claude.json` or `~/.claude.json`, read without running the CLI.
1247
+ - **Refused** with no login. An unsafe account file is named in the refusal.
1248
+ - **The write:** it goes relative to the held directory descriptors (each directory
1249
+ component opened without following links and checked on the descriptor), as a new
1250
+ 0600 file under a random name renamed into place. A store is therefore atomic, and
1251
+ concurrent stores leave one complete record.
1252
+ - **At launch:** the record is read once, without following a link and without blocking.
1253
+ - **Used:** only when its account equals the launching session's account, and the
1254
+ launch uses exactly the token bytes whose account was checked.
1255
+ - **Not used:** when the accounts differ, when either is unknown, when the record is
1256
+ malformed, or when only a hand-placed raw `seat-credentials/claude` exists. The seat
1257
+ then uses the login and carries the notice `claude_seat_override_other_subscription`,
1258
+ also on its mode line, beside any login notice. That notice is not a jail refusal.
1259
+ - **Unsafe:** a record that is not a private regular file the euid owns refuses the
1260
+ launch (`seat_sandbox_refused:token_file_unsafe`).
1261
+ - **When the seat does not run:** a refusal (no login, a login short of the margin, a wait
1262
+ that ended short) carries `claude_seat_override_other_subscription` beside its one
1263
+ refusal code whenever a stored override was ignored. The seat's notices, the A3b
1264
+ DEGRADED result and the mode line all carry it.
1265
+ - **Per harness:** the rule lives once, in `override_decision(adapter)`. Each harness's
1266
+ `SeatCredentialAdapter` answers `override_present()`, `read_override()` (the record,
1267
+ read once) and `current_account()`, and declares its credential `sources` in precedence
1268
+ order; an adapter without the override source never uses one. Claude is the only
1269
+ adapter today, and `store-token` stores Claude's override.
1270
+ - **One slot per user:** the override lives under the Unix user's `$XDG_STATE_HOME`, so
1271
+ there is one per user, not one per config directory or account. A store from another
1272
+ account replaces it, and sessions on the earlier account then use their login, with
1273
+ the notice.
1274
+ - **Independent reads:** the mode line, the A3 wait and the launch each read the decision
1275
+ afresh. A `/login` between them can change the outcome. Every such change falls toward
1276
+ the login, never toward an unbound override.
1277
+ - **macOS:** the CLI keeps the login in the Keychain service named from
1278
+ `CLAUDE_SECURESTORAGE_CONFIG_DIR` when that is set, and the account in
1279
+ `CLAUDE_CONFIG_DIR/.claude.json`. With only the former set, the account and the login
1280
+ can describe different identities. Set both, or neither.
1281
+ - **Organization (maintainer ruling 2026-10-05):** the record (schema
1282
+ `seat_credential_override.v2`) binds both `oauthAccount.accountUuid` and
1283
+ `oauthAccount.organizationUuid`, read from the same `.claude.json`.
1284
+ - **At launch:** the override applies only when both are known and both equal the
1285
+ session's. A v1 or organization-less record is unbound.
1286
+ - **Storing:** `store-token` refuses when the organization is unknown.
1287
+ - **Permissions:** the record must be owner-only: any group or other bit refuses with
1288
+ `token_file_unsafe`. The store opens every directory component, the state root
1289
+ included, without following links; a linked state root is refused, naming the directory
1290
+ to set `XDG_STATE_HOME` to.
1291
+ - **Refusals after resolution:** a refusal raised after the credential is resolved (the
1292
+ jail build, the pre-seed, the namespace) also carries the ignored-override notice beside
1293
+ its one refusal code.
1294
+ - **Modes without the notice:** sealed, unconfined and native Claude modes carry no
1295
+ override notice, by design: the override is never their credential.
1296
+ - **Status:** `phase-loop seat-sandbox token-status` shows the bound account and
1297
+ organization, this session's, and whether the override applies. It exits 0 only when
1298
+ the override applies, and never shows the token.
1299
+ - **Seat-token rotation.** The override record is read at each jailed launch and never
1300
+ cached across legs or rounds.
1301
+ - **Rotating:** `phase-loop seat-sandbox store-token` is the only way to rotate it. It
1302
+ replaces the record with one rename, and the next launch uses the new token; a running
1303
+ leg keeps the token it was launched with.
1304
+ - **By hand:** a token file replaced by hand is ignored.
1305
+ The token is per-launch input only: neither the jail profile digest nor an EC-EXECFIND-2
1306
+ pass binds it, so replacing it trips no qualification check.
1307
+ - **A rate-limited seat token is not a jail fault.** When the provider refuses the seat
1308
+ token's subscription for a rate or usage limit (the shared leg-failure classifier's
1309
+ `usage_limit` class, with the provider's reset time when it gives one), the leg ends with
1310
+ that detail and the notice `claude_seat_token_rate_limited`: rotate or replace the seat
1311
+ token, or wait for the reset. It is never a `seat_sandbox_refused:*` code. A token the provider
1312
+ rejects (the classifier's `auth_failure`, measured in P2) carries
1313
+ `claude_seat_token_rejected`.
1314
+ - **Pointer-brief preflight.** On a `--pointer-brief` board, a seat whose launch takes the
1315
+ jailed route (the same J7 decision and EC-EXECFIND-2 gate the launch applies) has file
1316
+ access to the staged tree, so it is source-grounded and never marked
1317
+ `seat_pointer_brief_unreadable`. A jail that would be refused is not counted as one.
1318
+ - **Pointer mode.** A jailed seat gets a pointer brief: jail-path preamble, the
1319
+ AUTHORITATIVE INSTRUCTIONS inline, and POINTER frames naming the bundle (path, sha256,
1320
+ size) and the tree (path, source commit, approved digest). Evidence records
1321
+ `provider_input_mode: "pointer"`, `provider_input_inline: false`,
1322
+ `sandbox_filesystem_confined: true` and the jail profile id and digests;
1323
+ `verify_harden_evidence.py` reports EC-HARDEN-5 UNMET (accepted residual
1324
+ agent-harness#361, D3) on every such record.
1325
+ - **Notices.** `{code, seat_key, what, why, fix}`, rendered only from literals, on the
1326
+ `advisor-board` payload (`notices`, `legs[].notices`) and text summary, and on the
1327
+ governed path as one non-gating `seat_notice` finding per notice (L4b).
1328
+ - **Retention.** A failed in-namespace teardown keeps the seat directories under the leg's
1329
+ operator-owned 0700 scratch dir, adds `seat_sandbox_retained_after_teardown`, and records
1330
+ the path. `phase-loop seat-sandbox reap PATH` accepts only a recorded path under the
1331
+ stage root, opened `O_NOFOLLOW|O_DIRECTORY` component by component, and owned by a
1332
+ subordinate uid.
1333
+
1334
+ ## SEATOWNER — The seat-launch owner (agent-harness#1222)
1335
+
1336
+ Every review seat, the president and executor `review` start through one owner,
1337
+ `panel_invoker.launch_owned`. A jailed Claude seat (SEATJAIL) launches through its jail
1338
+ instead, and the jail is that launch's owner.
1339
+
1340
+ - **Credentials, the narrowest each CLI runs with.** No seat receives a refresh token.
1341
+ - **Claude:** the one SEATJAIL decision. That is the bound override, else the login's
1342
+ access token. It is delivered through the drained pipe named by
1343
+ `CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR`.
1344
+ - **Gemini and Grok:** an access-token-only copy.
1345
+ - **Codex:** the auth file with its refresh token's value emptied. The key and the id
1346
+ token stay, because the CLI sends no bearer without them (measured).
1347
+ - **Every copy:** it sits in the seat's private home, and its secret values are
1348
+ redacted from the seat's output.
1349
+ - **Refusals.** Each owner refusal is a closed detail code and a `seat_jail.NOTICES`
1350
+ entry, with what happened, why and a fix line (`seat_owner_unavailable`,
1351
+ `seat_filtered_egress_unavailable`, `seat_keyring_unavailable`, ...).
1352
+ - **The Claude journal.** The host collects the exact session journal through retained
1353
+ handles, after the provider has been cleaned up, and validates it before any approval.
1354
+ - **Refused on both routes:** a new user turn, a max-token continuation, an unmatched
1355
+ `tool_use`, partial JSONL, or a missing final answer.
1356
+ - **A completed tool cycle is accepted:** every `tool_use` has its `tool_result`.
1357
+ - **A journaled `isApiErrorMessage` record** is never an answer or a continuation. The
1358
+ answer parser (agent-harness#1194) decides the turn.
1359
+ - **The route's own answer rule:**
1360
+ - the president requires a terminal turn;
1361
+ - on the review route, a completed answer outlives a later stray error.
1362
+ - **A refusal or cancellation keeps no partial journal on the host.**
1363
+
1046
1364
  ## ABDFALSIFY — Executable review findings (IF-0-EXECFIND-1)
1047
1365
 
1048
1366
  An optional `falsifier` attachment names one `FindingFalsifier` with
@@ -483,12 +483,15 @@ class ParentUnixBroker:
483
483
  ):
484
484
  raise ValueError("broker canonical repository authority is not probeable")
485
485
  try:
486
- listed = subprocess.check_output(
487
- ["git", "-C", str(self.canonical_repo), "ls-files", "-z"],
486
+ from ..review_stage import host_git
487
+
488
+ listed = host_git(
489
+ self.canonical_repo, "ls-files", "-z", check=True,
488
490
  text=True,
491
+ stdout=subprocess.PIPE,
489
492
  stderr=subprocess.DEVNULL,
490
493
  timeout=3,
491
- ).split("\0")
494
+ ).stdout.split("\0")
492
495
  probe_file = next(
493
496
  (
494
497
  self.canonical_repo / relative
@@ -498,7 +501,7 @@ class ParentUnixBroker:
498
501
  ),
499
502
  None,
500
503
  )
501
- except (OSError, subprocess.SubprocessError):
504
+ except (OSError, ValueError, subprocess.SubprocessError):
502
505
  probe_file = None
503
506
  if probe_file is None:
504
507
  raise ValueError("broker canonical repository authority is not probeable")
@@ -696,7 +699,7 @@ class ParentUnixBroker:
696
699
  runtime_binds: list[str] = ["--ro-bind", "/usr", "/usr"]
697
700
  for runtime in ("/lib", "/lib64"):
698
701
  if Path(runtime).exists(): runtime_binds.extend(("--ro-bind", runtime, runtime))
699
- argv = [str(bwrap),"--unshare-all","--die-with-parent","--new-session","--clearenv",*runtime_binds,"--dir","/run","--ro-bind",str(self.root),"/run/phase-loop-broker","--ro-bind",str(self.staged_dir),"/run/phase-loop-review","--tmpfs","/tmp","--proc","/proc","--dev","/dev","--setenv","PATH","/usr/bin","--setenv","PYTHONNOUSERSITE","1","--setenv","PYTHONDONTWRITEBYTECODE","1",str(python),"-I","-S","-c",code]
702
+ argv = [str(bwrap),"--unshare-all","--die-with-parent","--new-session","--clearenv",*runtime_binds,"--dir","/run","--dir","/run/phase-loop-broker","--ro-bind",str(self.path),"/run/phase-loop-broker/intended-inference.sock","--ro-bind",str(self.staged_dir),"/run/phase-loop-review","--tmpfs","/tmp","--proc","/proc","--dev","/dev","--setenv","PATH","/usr/bin","--setenv","PYTHONNOUSERSITE","1","--setenv","PYTHONDONTWRITEBYTECODE","1",str(python),"-I","-S","-c",code]
700
703
  error: list[BaseException] = []
701
704
  child: list[tuple[subprocess.Popen[bytes], int]] = []
702
705
  def serve() -> None:
@@ -882,18 +885,18 @@ def _staged_tree_digest(canonical_repo_authority: Path | str | None) -> str | No
882
885
  authorization that permits NO staged tree rather than one asserting a digest
883
886
  it could not compute.
884
887
  """
885
- from ..review_stage import review_tree_manifest_sha256
888
+ from ..review_stage import host_git, review_tree_manifest_sha256
886
889
 
887
890
  # Normalize to the SAME git toplevel `_canonical_review_repo_authority` resolves
888
891
  # at spawn. Digesting an unnormalized path would bind a different tree than the
889
892
  # one actually staged, and the mismatch would only surface as a refusal at launch.
890
893
  candidate = Path(canonical_repo_authority) if canonical_repo_authority is not None else Path.cwd()
891
894
  try:
892
- root = subprocess.check_output(
893
- ["git", "-C", str(candidate), "rev-parse", "--show-toplevel"],
894
- text=True, stderr=subprocess.DEVNULL, timeout=3,
895
- ).strip()
896
- except (OSError, subprocess.SubprocessError):
895
+ root = host_git(
896
+ candidate, "rev-parse", "--show-toplevel", check=True,
897
+ text=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, timeout=3,
898
+ ).stdout.strip()
899
+ except (OSError, ValueError, subprocess.SubprocessError):
897
900
  return None
898
901
  if not root:
899
902
  return None
@@ -912,16 +915,18 @@ def _staged_tree_digest(canonical_repo_authority: Path | str | None) -> str | No
912
915
 
913
916
 
914
917
  def _canonical_repo_digest(canonical_repo_authority: Path | str | None) -> str:
918
+ from ..review_stage import host_git
919
+
915
920
  candidate = Path(canonical_repo_authority) if canonical_repo_authority is not None else Path.cwd()
916
921
  try:
917
- root = subprocess.check_output(
918
- ["git", "-C", str(candidate), "rev-parse", "--show-toplevel"],
922
+ root = host_git(
923
+ candidate, "rev-parse", "--show-toplevel", check=True,
919
924
  text=True,
925
+ stdout=subprocess.PIPE,
920
926
  stderr=subprocess.DEVNULL,
921
927
  timeout=3,
922
- env={key: value for key, value in os.environ.items() if not key.startswith("GIT_")},
923
- ).strip()
924
- except (OSError, subprocess.SubprocessError):
928
+ ).stdout.strip()
929
+ except (OSError, ValueError, subprocess.SubprocessError):
925
930
  raise ValueError("HARDEN review has no canonical repository authority") from None
926
931
  if not root:
927
932
  raise ValueError("HARDEN review has no canonical repository authority")
@@ -88,13 +88,13 @@ def _uses_production_composition_probe(
88
88
  )
89
89
 
90
90
  # Ideal per-vendor seat, in deterministic composition order. Each vendor runs at
91
- # its MAX thinking (gemini's ceiling is ``high``) with a distinct primary lens.
91
+ # the panel default effort with a distinct primary lens.
92
92
  _VENDOR_ORDER: tuple[str, ...] = ("grok", "claude", "codex", "gemini")
93
93
  _VENDOR_SEAT: dict[str, dict[str, str]] = {
94
- "grok": {"model": "grok-4.7", "harness": "grok", "effort": "max", "lens": "adversarial"},
95
- "claude": {"model": "claude-opus-5-5", "harness": "claude", "effort": "max", "lens": "correctness"},
96
- "codex": {"model": "gpt-6-astra", "harness": "codex", "effort": "max", "lens": "red-team"},
97
- "gemini": {"model": "gemini-3.8-flash", "harness": "gemini", "effort": "high", "lens": "alternative-approach"},
94
+ "grok": {"model": "grok-4.7", "harness": "grok", "effort": "high", "lens": "adversarial"},
95
+ "claude": {"model": "claude-opus-5-5", "harness": "claude", "effort": "high", "lens": "correctness"},
96
+ "codex": {"model": "gpt-6-astra", "harness": "codex", "effort": "high", "lens": "red-team"},
97
+ "gemini": {"model": "gemini-3.8-flash", "harness": "gemini", "effort": "medium", "lens": "alternative-approach"},
98
98
  }
99
99
 
100
100
  # Distinct lenses the backfill cycles through (each vendor's primary lens is drawn
@@ -31,6 +31,7 @@ from collections.abc import Mapping
31
31
  from dataclasses import dataclass
32
32
  from pathlib import Path
33
33
  import re
34
+ import subprocess
34
35
  from typing import Any, Callable
35
36
 
36
37
  try: # Python 3.11+
@@ -311,6 +312,7 @@ def load_president_ladder(
311
312
  *,
312
313
  env: Mapping[str, str] | None = None,
313
314
  path: Path | None = None,
315
+ review_base: bool = False,
314
316
  ) -> tuple[str, ...]:
315
317
  """The effective president fallback order, first rung first.
316
318
 
@@ -331,7 +333,22 @@ def load_president_ladder(
331
333
  ladder = _parse_president(user, str(user_path)) or ladder
332
334
  if repo_dir is not None:
333
335
  repo_path = repo_board_config_path(repo_dir)
334
- repo = _load_toml(repo_path)
336
+ if review_base:
337
+ from ..review_stage import trusted_review_control
338
+
339
+ try:
340
+ content = trusted_review_control(Path(repo_dir), REPO_CONFIG_RELATIVE_PATH)
341
+ repo = tomllib.loads(content.decode("utf-8")) if content is not None else None
342
+ except ValueError as exc:
343
+ if str(exc) != "review_base_unavailable":
344
+ raise BoardConfigError(f"{repo_path} has no readable base configuration") from exc
345
+ # No main commit to read it from: the candidate's own copy is never trusted,
346
+ # so the repository layer is not in force (the user and built-in ladders are).
347
+ repo = None
348
+ except (OSError, UnicodeError, subprocess.SubprocessError) as exc:
349
+ raise BoardConfigError(f"{repo_path} has no readable base configuration") from exc
350
+ else:
351
+ repo = _load_toml(repo_path)
335
352
  if repo is not None:
336
353
  _reject_unknown(repo.keys(), _KNOWN_REPO_TOP_KEYS, str(repo_path))
337
354
  ladder = _parse_president(repo, str(repo_path)) or ladder
@@ -18,8 +18,8 @@ default_board = "default"
18
18
  # [agy]
19
19
  # self_qualification = false
20
20
 
21
- # The default board reproduces today's 3-leg panel (byte-for-byte back-compat).
22
- # Its three seats, in panel-leg order, render to today's exact CLI invocations:
21
+ # This explicit example overrides the built-in default board, keeping higher effort.
22
+ # Its three seats, in panel-leg order, render to these CLI invocations:
23
23
  # codex gpt-6-astra effort=max -> -c model_reasoning_effort=xhigh
24
24
  # gemini "Gemini 3.1 Pro" effort=high -> model "Gemini 3.1 Pro (High)"
25
25
  # claude claude-sonnet-5 effort=max -> --effort max