phase-loop-runtime 0.7.21__tar.gz → 0.7.23__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 (1031) hide show
  1. {phase_loop_runtime-0.7.21/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.23}/PKG-INFO +10 -3
  2. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/README.md +7 -1
  3. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/pyproject.toml +3 -2
  4. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/__init__.py +1 -1
  5. phase_loop_runtime-0.7.23/src/phase_loop_runtime/_baml_worker.py +202 -0
  6. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/adoption_bundle.py +3 -0
  7. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +276 -6
  8. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/backing.py +99 -0
  9. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/config.py +48 -1
  10. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/fixtures.py +3 -0
  11. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/registries.py +2 -0
  12. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_modular.py +2204 -0
  13. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +37 -0
  14. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +14 -0
  15. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +50 -0
  16. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +16 -0
  17. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +20 -0
  18. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +111 -0
  19. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +30 -0
  20. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/phase_loop_bridge.baml +43 -0
  21. phase_loop_runtime-0.7.23/src/phase_loop_runtime/baml_src/verification_evidence.baml +40 -0
  22. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/claude_agent_view.py +11 -1
  23. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/cli.py +72 -4
  24. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/closeout_classifier.py +121 -34
  25. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/adapters/base.py +16 -4
  26. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/broker/live.py +136 -48
  27. phase_loop_runtime-0.7.23/src/phase_loop_runtime/credential_redaction.py +488 -0
  28. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/evidence_audit.py +17 -1
  29. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/executor_availability.py +10 -0
  30. phase_loop_runtime-0.7.23/src/phase_loop_runtime/falsifier.py +269 -0
  31. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/gemini_heartbeat.py +9 -0
  32. phase_loop_runtime-0.7.23/src/phase_loop_runtime/generated_outputs.py +843 -0
  33. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/governed_premerge.py +5 -2
  34. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/governed_review.py +276 -5
  35. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/harness_env_signatures.py +5 -1
  36. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/injection.py +4 -5
  37. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/launcher.py +36 -7
  38. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/observability.py +3 -1
  39. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/panel_invoker.py +1245 -248
  40. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +3 -1
  41. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/plan_manifest.py +118 -57
  42. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/president_adapter.py +28 -14
  43. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/prompts.py +84 -1
  44. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/publishing.py +413 -11
  45. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/redaction.py +0 -5
  46. phase_loop_runtime-0.7.23/src/phase_loop_runtime/review_stage.py +1176 -0
  47. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  48. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/runner.py +169 -75
  49. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/sandbox_egress.py +16 -13
  50. phase_loop_runtime-0.7.23/src/phase_loop_runtime/sandbox_placement.py +529 -0
  51. phase_loop_runtime-0.7.23/src/phase_loop_runtime/sandbox_policy.py +1037 -0
  52. phase_loop_runtime-0.7.23/src/phase_loop_runtime/sandbox_retention.py +384 -0
  53. phase_loop_runtime-0.7.23/src/phase_loop_runtime/seat_preflight.py +170 -0
  54. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +10 -5
  55. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +2 -5
  56. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +10 -5
  57. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +2 -2
  58. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +10 -5
  59. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +2 -2
  60. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +10 -5
  61. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/train_runner.py +3 -1
  62. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/verification_evidence.py +52 -2
  63. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23/src/phase_loop_runtime.egg-info}/PKG-INFO +10 -3
  64. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime.egg-info/SOURCES.txt +36 -0
  65. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime.egg-info/requires.txt +2 -1
  66. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_registries.py +51 -0
  67. phase_loop_runtime-0.7.23/tests/test_agent_cli_scratch_inventory_1147.py +815 -0
  68. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_agy_canary_evidence.py +5 -1
  69. phase_loop_runtime-0.7.23/tests/test_agy_single_event_transport_1175.py +187 -0
  70. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_classifier.py +16 -6
  71. phase_loop_runtime-0.7.23/tests/test_closeout_generated_outputs.py +1418 -0
  72. phase_loop_runtime-0.7.23/tests/test_credential_redaction_shapes.py +502 -0
  73. phase_loop_runtime-0.7.23/tests/test_execfind_governed_promotion.py +441 -0
  74. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_executor_exited_without_closeout_785.py +55 -2
  75. phase_loop_runtime-0.7.23/tests/test_fabpub_zero_history_bootstrap.py +1631 -0
  76. phase_loop_runtime-0.7.23/tests/test_finding_F001.py +28 -0
  77. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_gemini_heartbeat_bootstrap.py +24 -3
  78. phase_loop_runtime-0.7.23/tests/test_gemini_heartbeat_filesystem_view.py +262 -0
  79. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_review.py +3 -2
  80. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_harden_evidence_verifier.py +135 -0
  81. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_legible_roadmap_contract.py +6 -6
  82. phase_loop_runtime-0.7.23/tests/test_native_fill_refusal_cause.py +111 -0
  83. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_claude_review_output.py +3 -1
  84. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_tui_liveness_188.py +66 -0
  85. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_dependency.py +31 -5
  86. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_modular.py +0 -19
  87. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_schema_export.py +15 -4
  88. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_schema_source.py +1 -1
  89. phase_loop_runtime-0.7.23/tests/test_phase_loop_baml_v1_callers.py +637 -0
  90. phase_loop_runtime-0.7.23/tests/test_phase_loop_baml_v1_runtime.py +5321 -0
  91. phase_loop_runtime-0.7.23/tests/test_phase_loop_baml_v1_supervisor_slot.py +280 -0
  92. phase_loop_runtime-0.7.23/tests/test_plan_manifest_append_order_1174.py +205 -0
  93. phase_loop_runtime-0.7.23/tests/test_pr1161_r2_F001.py +45 -0
  94. phase_loop_runtime-0.7.23/tests/test_pr1161_r2_F002.py +31 -0
  95. phase_loop_runtime-0.7.23/tests/test_pr1161_r2_F003.py +21 -0
  96. phase_loop_runtime-0.7.23/tests/test_pr1161_r2_F004.py +29 -0
  97. phase_loop_runtime-0.7.23/tests/test_pr1161_r4_F001.py +17 -0
  98. phase_loop_runtime-0.7.23/tests/test_pr1161_r4_F002.py +23 -0
  99. phase_loop_runtime-0.7.23/tests/test_pr1161_r4_F003.py +9 -0
  100. phase_loop_runtime-0.7.23/tests/test_pr1161_r5_F001.py +16 -0
  101. phase_loop_runtime-0.7.23/tests/test_pr1161_r6_F001.py +24 -0
  102. phase_loop_runtime-0.7.23/tests/test_pr1161_r7_F001.py +77 -0
  103. phase_loop_runtime-0.7.23/tests/test_pr1161_r9_F002.py +26 -0
  104. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pr_readback_789.py +4 -2
  105. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_president_heartbeat_1001.py +4 -1
  106. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_publishing.py +511 -0
  107. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_qualified_agy_image_set.py +8 -2
  108. phase_loop_runtime-0.7.23/tests/test_redaction_main_coverage_cases.py +57 -0
  109. phase_loop_runtime-0.7.23/tests/test_review_seat_stall_1176.py +1432 -0
  110. phase_loop_runtime-0.7.23/tests/test_review_stage_binding.py +1914 -0
  111. phase_loop_runtime-0.7.23/tests/test_sandbox_placement.py +1408 -0
  112. phase_loop_runtime-0.7.23/tests/test_sandbox_staging_1147.py +1410 -0
  113. phase_loop_runtime-0.7.23/tests/test_scratch_runtime_audit_1147.py +354 -0
  114. phase_loop_runtime-0.7.23/tests/test_seat_preflight_1204.py +461 -0
  115. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_modular.py +0 -662
  116. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -37
  117. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -14
  118. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -50
  119. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -16
  120. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -20
  121. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -121
  122. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -36
  123. phase_loop_runtime-0.7.21/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -40
  124. phase_loop_runtime-0.7.21/src/phase_loop_runtime/review_stage.py +0 -456
  125. phase_loop_runtime-0.7.21/src/phase_loop_runtime/sandbox_policy.py +0 -343
  126. phase_loop_runtime-0.7.21/src/phase_loop_runtime/sandbox_retention.py +0 -182
  127. phase_loop_runtime-0.7.21/tests/test_fabpub_zero_history_bootstrap.py +0 -582
  128. phase_loop_runtime-0.7.21/tests/test_review_stage_binding.py +0 -183
  129. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/MANIFEST.in +0 -0
  130. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/protocol/protocol.md +0 -0
  131. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/setup.cfg +0 -0
  132. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  133. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  134. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  135. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  136. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  137. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  138. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  139. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  140. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  141. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  142. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  143. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  144. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  145. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  146. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  147. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  148. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  149. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  150. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  151. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  152. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  153. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  154. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  155. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  156. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  157. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  158. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  159. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  160. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  161. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  162. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  163. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  164. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  165. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  166. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  167. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  168. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  169. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  170. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  171. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  172. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  173. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  174. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  175. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  176. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  177. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  178. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  179. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  180. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  181. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  182. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  183. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  184. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  185. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  186. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  187. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
  188. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  189. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  190. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  191. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  192. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  193. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  194. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  195. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  196. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  197. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  198. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  199. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  200. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  201. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  202. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
  203. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/agy_provenance.py +0 -0
  204. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/agy_qualification.py +0 -0
  205. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/agy_watch.py +0 -0
  206. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/broker.py +0 -0
  207. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/build_bundle.py +0 -0
  208. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/capability_registry.py +0 -0
  209. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/classifier.py +0 -0
  210. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  211. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/closeout.py +0 -0
  212. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  213. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/closeout_validation.py +0 -0
  214. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/closeout_validators.py +0 -0
  215. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  216. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  217. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  218. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  219. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  220. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  221. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  222. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  223. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  224. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  225. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  226. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  227. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  228. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  229. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  230. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  231. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  232. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  233. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  234. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  235. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  236. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  237. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  238. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  239. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  240. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  241. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  242. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  243. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  244. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  245. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  246. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  247. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  248. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  249. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  250. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  251. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  252. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  253. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  254. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  255. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  256. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  257. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  258. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  259. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  260. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  261. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  262. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  263. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  264. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  265. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  266. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/convergence/status.py +0 -0
  267. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  268. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/declared_identity.py +0 -0
  269. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  270. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  271. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/discovery.py +0 -0
  272. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  273. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  274. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/docs_audit.py +0 -0
  275. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/docs_freshness.py +0 -0
  276. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  277. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/doctor.py +0 -0
  278. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  279. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  280. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/events.py +0 -0
  281. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/events_migration.py +0 -0
  282. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  283. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fab_canonical.py +0 -0
  284. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fab_delta.py +0 -0
  285. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fab_gate.py +0 -0
  286. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fab_producer.py +0 -0
  287. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fab_provenance.py +0 -0
  288. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  289. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  290. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  291. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fleet_map.py +0 -0
  292. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  293. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  294. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/gate_posture.py +0 -0
  295. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/git_discipline.py +0 -0
  296. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/git_ops.py +0 -0
  297. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/git_topology.py +0 -0
  298. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/goal_coverage.py +0 -0
  299. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/governed_bundle.py +0 -0
  300. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/handoff.py +0 -0
  301. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/handoff_path.py +0 -0
  302. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/install_status.py +0 -0
  303. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  304. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/lease_store.py +0 -0
  305. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/lease_supervisor.py +0 -0
  306. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/legible_evidence.py +0 -0
  307. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/maintenance.py +0 -0
  308. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  309. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/models.py +0 -0
  310. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  311. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  312. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  313. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  314. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  315. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  316. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  317. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  318. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/plan_ir.py +0 -0
  319. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  320. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/planner_validation.py +0 -0
  321. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/president_operation.py +0 -0
  322. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/producer_manifest.py +0 -0
  323. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/profiles.py +0 -0
  324. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/proof_stages.py +0 -0
  325. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/provenance.py +0 -0
  326. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/py.typed +0 -0
  327. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/ratification_policy.py +0 -0
  328. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/reconcile.py +0 -0
  329. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/reflection_sync.py +0 -0
  330. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/release_guard.py +0 -0
  331. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/render.py +0 -0
  332. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/repo_validation.py +0 -0
  333. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/review_summary.py +0 -0
  334. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  335. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  336. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  337. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  338. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  339. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  340. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/route_log.py +0 -0
  341. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  342. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  343. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/runtime_paths.py +0 -0
  344. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/runtime_projection.py +0 -0
  345. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/runtime_resources.py +0 -0
  346. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/schema_export.py +0 -0
  347. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  348. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  349. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  350. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skill_install.py +0 -0
  351. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skill_inventory.py +0 -0
  352. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skill_paths.py +0 -0
  353. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  354. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  355. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  356. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  357. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  359. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  360. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  361. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  362. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  363. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  364. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  365. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  366. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  367. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  368. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  369. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  370. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  371. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  372. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  373. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  374. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  375. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  376. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  377. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  378. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  379. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  380. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  381. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  382. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  383. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  384. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  385. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  386. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  387. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  388. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  389. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  390. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  391. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  392. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  393. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  394. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  395. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  396. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  397. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  398. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  399. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  400. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  401. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  402. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  403. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  404. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  405. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  406. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  407. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  408. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  409. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  410. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  411. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  412. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  413. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  414. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  415. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  416. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  417. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  418. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  419. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  420. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  421. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  422. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  423. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  424. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  425. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  426. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  427. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  428. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  429. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  430. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  431. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  432. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  433. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  434. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  435. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  436. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  437. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  438. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  439. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  440. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  441. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  442. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  443. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  444. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  445. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  446. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  447. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  448. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  449. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  450. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  451. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  452. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  453. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  454. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  455. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  456. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  457. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  458. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  459. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  460. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  461. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  462. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  463. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  464. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  465. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  466. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  467. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  468. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  469. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  470. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  471. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  472. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  473. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  474. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  475. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  476. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  477. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  478. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  479. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  480. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  481. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  482. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  483. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  484. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  485. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  486. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  487. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  488. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  489. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  490. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  491. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  492. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  493. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  494. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  495. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  496. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  497. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  498. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  499. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  500. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  501. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  502. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  503. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  504. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  505. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  506. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  507. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  508. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  509. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  510. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  511. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  512. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  513. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  514. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  515. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  516. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  517. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  518. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  519. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  520. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  521. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  522. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  523. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  524. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  525. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  526. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  527. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  528. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  529. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  530. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  531. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  532. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  533. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  534. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  535. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/state.py +0 -0
  536. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/state_degradation.py +0 -0
  537. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/state_ops.py +0 -0
  538. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/task_message_broker.py +0 -0
  539. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  540. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  541. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  542. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/train_ledger.py +0 -0
  543. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/train_review_packet.py +0 -0
  544. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/train_roadmap.py +0 -0
  545. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  546. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  547. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  548. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/worker_pool.py +0 -0
  549. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime/worktree_index.py +0 -0
  550. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  551. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  552. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  553. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_acceptance_falsifier_contract.py +0 -0
  554. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_advisory_cli_802.py +0 -0
  555. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_advisory_mode.py +0 -0
  556. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_alias_install.py +0 -0
  557. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_backcompat.py +0 -0
  558. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_backing_homebrew.py +0 -0
  559. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_backing_omnigent.py +0 -0
  560. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_cli_legacy.py +0 -0
  561. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_composition.py +0 -0
  562. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_concurrency.py +0 -0
  563. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_config.py +0 -0
  564. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_golden.py +0 -0
  565. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_ingestion.py +0 -0
  566. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_integration.py +0 -0
  567. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_live_research.py +0 -0
  568. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_matrix.py +0 -0
  569. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_observability.py +0 -0
  570. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_presets.py +0 -0
  571. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_research.py +0 -0
  572. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_resolver.py +0 -0
  573. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_schema.py +0 -0
  574. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_board_static_import_862.py +0 -0
  575. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_advisor_twin_alias_legacy.py +0 -0
  576. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_agent_runtime_provider_cs08.py +0 -0
  577. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_agy_self_qualification.py +0 -0
  578. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_autosel.py +0 -0
  579. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_branchgov_preflight.py +0 -0
  580. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_broker_command_builders.py +0 -0
  581. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  582. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_broker_staged_tree_delivery.py +0 -0
  583. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_certificate_tier.py +0 -0
  584. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_chronology_scope.py +0 -0
  585. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_gate_metrics.py +0 -0
  586. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_main_red.py +0 -0
  587. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_offload_lock.py +0 -0
  588. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_quarantine.py +0 -0
  589. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_workflow_concurrency.py +0 -0
  590. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_xdist_adoption.py +0 -0
  591. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ci_xdist_witness.py +0 -0
  592. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  593. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_cli_train_status_45.py +0 -0
  594. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_break_glass_cli.py +0 -0
  595. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_convergence_fixes.py +0 -0
  596. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_exception_vocab.py +0 -0
  597. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  598. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_import_cycle_819.py +0 -0
  599. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  600. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_validator_hook.py +0 -0
  601. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_closeout_verification_gate.py +0 -0
  602. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_codex_effort_max_clamp_49.py +0 -0
  603. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_committed_range_diff.py +0 -0
  604. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_common_directory_leases_807.py +0 -0
  605. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_conform_timing_instrumentation.py +0 -0
  606. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_conformance_golden.py +0 -0
  607. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_conftest_isolation.py +0 -0
  608. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_consiliency_dual_layout.py +0 -0
  609. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_consiliency_gates.py +0 -0
  610. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_consiliency_ingest.py +0 -0
  611. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_consiliency_scaffold.py +0 -0
  612. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_console_scripts_are_declared.py +0 -0
  613. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_contract_floor_guard_378.py +0 -0
  614. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_adapters.py +0 -0
  615. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_broker_admission.py +0 -0
  616. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_broker_api.py +0 -0
  617. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_broker_credsep.py +0 -0
  618. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_broker_evidence.py +0 -0
  619. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_broker_revocation_race.py +0 -0
  620. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_broker_verbs.py +0 -0
  621. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_cli_integration.py +0 -0
  622. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_coordination_contracts.py +0 -0
  623. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_dispatch.py +0 -0
  624. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_event_contracts.py +0 -0
  625. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_event_log.py +0 -0
  626. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_fencing.py +0 -0
  627. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_fixture_contracts.py +0 -0
  628. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_invalidation.py +0 -0
  629. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_live_enable.py +0 -0
  630. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_provider_contracts.py +0 -0
  631. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_reconcile.py +0 -0
  632. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_refresh.py +0 -0
  633. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_runtime_imports.py +0 -0
  634. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_seat_lifecycle.py +0 -0
  635. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_status.py +0 -0
  636. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_convergence_train_integration.py +0 -0
  637. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_coordinator_wave_loop.py +0 -0
  638. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_cr_fixes_pr220.py +0 -0
  639. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_delegated_visual_evidence_91.py +0 -0
  640. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_discovery_hygiene_legacy.py +0 -0
  641. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_dispatch_hold_guard.py +0 -0
  642. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  643. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_dispatch_lock_helper.py +0 -0
  644. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_dispatch_lock_reentrancy.py +0 -0
  645. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  646. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_doc_delta_validator.py +0 -0
  647. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_docs_audit.py +0 -0
  648. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_docs_freshness.py +0 -0
  649. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_doctor_bom.py +0 -0
  650. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_dotfiles_tree.py +0 -0
  651. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
  652. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_entry_doc_check.py +0 -0
  653. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_execfind_falsifier.py +0 -0
  654. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_execgov.py +0 -0
  655. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_execreg_launch_registry.py +0 -0
  656. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_execute_phase_handoff_mode.py +0 -0
  657. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_execution_policy_tiering.py +0 -0
  658. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_executor_availability.py +0 -0
  659. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_export_schema.py +0 -0
  660. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_activation_promotion.py +0 -0
  661. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_canonical_b.py +0 -0
  662. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_closeout_crash_safety.py +0 -0
  663. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_closeout_wiring.py +0 -0
  664. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_delta_c.py +0 -0
  665. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_delta_consumer.py +0 -0
  666. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
  667. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_gate_d.py +0 -0
  668. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_producer.py +0 -0
  669. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fab_provenance_a.py +0 -0
  670. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_admission_compat_789.py +0 -0
  671. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
  672. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  673. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_partition_rotation_789d.py +0 -0
  674. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_recovery_controls_789.py +0 -0
  675. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  676. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabpub_shared_epoch.py +0 -0
  677. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  678. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fabreadmit_broker.py +0 -0
  679. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fleet_map.py +0 -0
  680. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fleet_metrics.py +0 -0
  681. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_fleet_metrics_export.py +0 -0
  682. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_frozen_blob_batch_parse.py +0 -0
  683. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_gate_a_wheel_isolation.py +0 -0
  684. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_gate_fail_open_visibility.py +0 -0
  685. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_gate_parity_244_245.py +0 -0
  686. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_gate_posture.py +0 -0
  687. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_git_discipline.py +0 -0
  688. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_git_grounded_projection.py +0 -0
  689. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_goal_coverage.py +0 -0
  690. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  691. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_disjointness_model_first.py +0 -0
  692. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_e2e.py +0 -0
  693. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_gate_crfixes.py +0 -0
  694. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_planning_gate.py +0 -0
  695. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_premerge.py +0 -0
  696. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_governed_premerge_live.py +0 -0
  697. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_declared_identity.py +0 -0
  698. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_panel_policy.py +0 -0
  699. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  700. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_plan_pin_lint.py +0 -0
  701. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_producer_manifest.py +0 -0
  702. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_proof_stages.py +0 -0
  703. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_roadmap_reseal.py +0 -0
  704. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_skill_policy_parity.py +0 -0
  705. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_govlean_tdd_receipts.py +0 -0
  706. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_grok_narrow_reject_231.py +0 -0
  707. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_grokexec.py +0 -0
  708. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_harden_evidence_producer.py +0 -0
  709. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_harden_json_depth_825.py +0 -0
  710. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_hotfix_lane.py +0 -0
  711. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_injection_skill_failloud.py +0 -0
  712. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_lane_ir_override.py +0 -0
  713. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_launcher_exec_supervisor.py +0 -0
  714. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_launcher_liveness.py +0 -0
  715. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_launchspec_golden.py +0 -0
  716. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_lease_store.py +0 -0
  717. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_lease_store_conformance.py +0 -0
  718. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ledger_serialization.py +0 -0
  719. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_leg_liveness_monitor.py +0 -0
  720. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_legible_evidence.py +0 -0
  721. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_legible_review_repairs.py +0 -0
  722. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_live_smoke_gate_executes.py +0 -0
  723. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_local_check.py +0 -0
  724. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_manifest_per_entry_164.py +0 -0
  725. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_model_class_policy.py +0 -0
  726. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_model_id_source_guard.py +0 -0
  727. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_model_tier_taxonomy.py +0 -0
  728. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_native_claude_seat_fill.py +0 -0
  729. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_native_claude_seat_fill_green.py +0 -0
  730. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  731. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_observability_alerting.py +0 -0
  732. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_advisory.py +0 -0
  733. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_advisory_cli.py +0 -0
  734. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  735. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_authority_boundary.py +0 -0
  736. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_canonical_corpus.py +0 -0
  737. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_conform_evidence.py +0 -0
  738. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_contract_drift.py +0 -0
  739. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_contract_imports.py +0 -0
  740. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_contract_pin.py +0 -0
  741. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_core_api.py +0 -0
  742. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_provenance.py +0 -0
  743. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_real_ci.py +0 -0
  744. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_real_cli.py +0 -0
  745. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_real_output.py +0 -0
  746. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_real_runtime.py +0 -0
  747. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_redaction.py +0 -0
  748. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_redaction_separation.py +0 -0
  749. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_release_surface.py +0 -0
  750. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_schema_validation.py +0 -0
  751. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_outside_agent_vectors.py +0 -0
  752. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_owned_command_procfs_1003.py +0 -0
  753. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_packaged_vector_manifest_pin.py +0 -0
  754. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_advisory_mode_63.py +0 -0
  755. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  756. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_context_refs_114.py +0 -0
  757. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_doc_contract.py +0 -0
  758. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  759. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_invoker.py +0 -0
  760. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_invoker_spawn.py +0 -0
  761. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_invoker_timeout_argv.py +0 -0
  762. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_invoker_windows_import.py +0 -0
  763. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_lanes.py +0 -0
  764. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  765. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  766. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_leg_status_detail_1096.py +0 -0
  767. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_lens_delivery.py +0 -0
  768. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_native_fill_183.py +0 -0
  769. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_per_leg_model_66.py +0 -0
  770. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_streaming_verdicts.py +0 -0
  771. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_tui_eof_48.py +0 -0
  772. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_tui_workspace_trust_223.py +0 -0
  773. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_panel_verdict_summary.py +0 -0
  774. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_parallel_dispatch_backcompat.py +0 -0
  775. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_parallel_dispatch_cli.py +0 -0
  776. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_adoption_bundle.py +0 -0
  777. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  778. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  779. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_injection.py +0 -0
  780. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  781. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  782. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  783. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  784. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_build_bundle.py +0 -0
  785. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_classifier.py +0 -0
  786. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  787. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
  788. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  789. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  790. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  791. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_channel_security.py +0 -0
  792. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  793. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  794. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  795. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_claude_route_selection.py +0 -0
  796. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_cli.py +0 -0
  797. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  798. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_control_only.py +0 -0
  799. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_event.py +0 -0
  800. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  801. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_hardening.py +0 -0
  802. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  803. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_schema.py +0 -0
  804. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_closeout_validation.py +0 -0
  805. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_collaborator_citation.py +0 -0
  806. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_collaborator_docs.py +0 -0
  807. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  808. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  809. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  810. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  811. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  812. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_discovery.py +0 -0
  813. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_docs.py +0 -0
  814. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  815. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  816. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  817. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  818. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_downstream_portal.py +0 -0
  819. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  820. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_drift_audit.py +0 -0
  821. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  822. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  823. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_events_migration.py +0 -0
  824. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_evidence_audit.py +0 -0
  825. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  826. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  827. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  828. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  829. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_execution_policy.py +0 -0
  830. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_executor_degradation.py +0 -0
  831. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_full_phase_mode.py +0 -0
  832. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_handoff.py +0 -0
  833. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_handoff_migration.py +0 -0
  834. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_init.py +0 -0
  835. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_injection.py +0 -0
  836. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_install_status.py +0 -0
  837. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  838. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_lane_harnesses.py +0 -0
  839. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_lane_ir.py +0 -0
  840. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  841. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_lane_scheduler.py +0 -0
  842. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_launcher.py +0 -0
  843. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_ledger_debug.py +0 -0
  844. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_ledger_dedup.py +0 -0
  845. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_live_adapters.py +0 -0
  846. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_maintenance.py +0 -0
  847. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_metrics.py +0 -0
  848. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_migration_regressions.py +0 -0
  849. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  850. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  851. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  852. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_models.py +0 -0
  853. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_native_flags.py +0 -0
  854. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  855. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pi_executor.py +0 -0
  856. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  857. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  858. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  859. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  860. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  861. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_pipeline_mode.py +0 -0
  862. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  863. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_plan_manifest.py +0 -0
  864. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  865. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_planner_validation.py +0 -0
  866. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_policy.py +0 -0
  867. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_protocol_contract.py +0 -0
  868. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_provenance.py +0 -0
  869. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_reconcile.py +0 -0
  870. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  871. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  872. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  873. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_reducers.py +0 -0
  874. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  875. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  876. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  877. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_roadmap_validate.py +0 -0
  878. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_rotation.py +0 -0
  879. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_runner.py +0 -0
  880. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  881. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_runtime_boundary.py +0 -0
  882. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_runtime_decouple.py +0 -0
  883. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_runtime_package_data.py +0 -0
  884. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_runtime_projection.py +0 -0
  885. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_schema_flow.py +0 -0
  886. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  887. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  888. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_skill_contract.py +0 -0
  889. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  890. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_skill_install.py +0 -0
  891. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  892. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_smoke_blockers.py +0 -0
  893. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  894. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_smoke_reentry.py +0 -0
  895. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  896. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  897. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  898. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_state.py +0 -0
  899. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  900. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  901. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  902. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  903. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  904. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_v22_e2e.py +0 -0
  905. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_v22_principles.py +0 -0
  906. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  907. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_v45_reconcile.py +0 -0
  908. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_v45_sched.py +0 -0
  909. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_v45_schedharden.py +0 -0
  910. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_wave_runner.py +0 -0
  911. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_work_unit_observability.py +0 -0
  912. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_work_unit_runner.py +0 -0
  913. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_work_unit_state.py +0 -0
  914. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_loop_worktrees.py +0 -0
  915. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  916. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_state_disagreement_312.py +0 -0
  917. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_phase_worktree_executor.py +0 -0
  918. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  919. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  920. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  921. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_flag.py +0 -0
  922. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_markers.py +0 -0
  923. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  924. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  925. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  926. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  927. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  928. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pkg_layout_freeze.py +0 -0
  929. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_plan_ir_iter_waves.py +0 -0
  930. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_preflight_verification.py +0 -0
  931. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_president_ladder_config.py +0 -0
  932. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_president_wiring.py +0 -0
  933. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_presroute_cli.py +0 -0
  934. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_presroute_hardening.py +0 -0
  935. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_presroute_landed.py +0 -0
  936. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_proc_cpu.py +0 -0
  937. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_proofgate_attestation_workflow.py +0 -0
  938. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_proofgate_cleanup.py +0 -0
  939. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_proofgate_isolation.py +0 -0
  940. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_proofgate_receipts.py +0 -0
  941. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_prune_merged_worktrees_script.py +0 -0
  942. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_public_installer.py +0 -0
  943. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_pushflow.py +0 -0
  944. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_qualify_network_owner.py +0 -0
  945. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_ratification_policy.py +0 -0
  946. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  947. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_reconcile_portability_85c.py +0 -0
  948. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  949. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_reconcile_verification_log.py +0 -0
  950. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  951. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_redaction_channel_control_isolation.py +0 -0
  952. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_reflection_sync.py +0 -0
  953. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  954. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_release_pin_autotrack.py +0 -0
  955. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_repo_validation.py +0 -0
  956. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_review_leg_sandbox.py +0 -0
  957. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_review_monitor_policy.py +0 -0
  958. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_review_policy_govlean_repairs.py +0 -0
  959. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_review_stage_board_findings.py +0 -0
  960. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_review_staged_tree_authorization.py +0 -0
  961. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_review_summary.py +0 -0
  962. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_roadmap_authority.py +0 -0
  963. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_roadmap_ownership.py +0 -0
  964. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_roadmap_representation_consistency.py +0 -0
  965. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_route_log.py +0 -0
  966. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_route_policy_conformance.py +0 -0
  967. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_routing_invariants.py +0 -0
  968. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  969. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_runtime_adapter_output_720.py +0 -0
  970. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_runtime_event_log_hardening_720.py +0 -0
  971. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_runtime_procfs_identity_870.py +0 -0
  972. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_runtime_state_mirror_agreement.py +0 -0
  973. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sandbox_clone.py +0 -0
  974. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sandbox_egress.py +0 -0
  975. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sandbox_policy.py +0 -0
  976. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sandbox_preamble.py +0 -0
  977. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sandbox_retention.py +0 -0
  978. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_seat_host_uid_1098.py +0 -0
  979. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  980. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sibling_matcher_patterns.py +0 -0
  981. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skill_bundle_pinned.py +0 -0
  982. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skill_install_body_expansion.py +0 -0
  983. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skill_liveness_contract.py +0 -0
  984. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skill_plan_manifest_write.py +0 -0
  985. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skill_sources_seam.py +0 -0
  986. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skills_bundle_drift.py +0 -0
  987. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skills_canon_parity.py +0 -0
  988. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_skills_src_claude_literal_lint.py +0 -0
  989. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_spec_conformance_gate.py +0 -0
  990. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_specpkgmin_wheel.py +0 -0
  991. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  992. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_status_read_only_62.py +0 -0
  993. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_subscription_scrub_xai_864.py +0 -0
  994. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  995. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  996. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_sync_skills_apply_failloud.py +0 -0
  997. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_task_message_broker.py +0 -0
  998. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_task_message_broker_cli.py +0 -0
  999. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_task_message_resolver.py +0 -0
  1000. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_tdd_chronology.py +0 -0
  1001. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
  1002. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_authority_import_811.py +0 -0
  1003. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_e2e.py +0 -0
  1004. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_invariants.py +0 -0
  1005. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_merge.py +0 -0
  1006. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_order_only_deps_47.py +0 -0
  1007. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_prebuilt.py +0 -0
  1008. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_review_authorization.py +0 -0
  1009. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_review_monitoring_policy.py +0 -0
  1010. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_review_packet.py +0 -0
  1011. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_roadmap.py +0 -0
  1012. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_train_runner.py +0 -0
  1013. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_unattended_release.py +0 -0
  1014. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  1015. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  1016. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  1017. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  1018. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  1019. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_validate_plan_doc_proofgate.py +0 -0
  1020. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_verification_dotdot_execution_428.py +0 -0
  1021. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_verification_evidence.py +0 -0
  1022. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_verification_evidence_validator.py +0 -0
  1023. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_verification_interpreter_guard_221.py +0 -0
  1024. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_verification_venv_identity_428.py +0 -0
  1025. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_verify_qualified_agy_route_core.py +0 -0
  1026. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_visual_avatar_evidence_validator.py +0 -0
  1027. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_visual_evidence_validator.py +0 -0
  1028. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_workerpool_failure_isolation.py +0 -0
  1029. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_workerpool_parallel.py +0 -0
  1030. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/tests/test_workerpool_worktree_alloc.py +0 -0
  1031. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.23}/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.21
3
+ Version: 0.7.23
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
@@ -16,7 +16,8 @@ Classifier: Topic :: Software Development :: Build Tools
16
16
  Requires-Python: >=3.10
17
17
  Description-Content-Type: text/markdown
18
18
  Requires-Dist: detect-secrets==1.5.0
19
- Requires-Dist: baml-py<0.223,>=0.222
19
+ Requires-Dist: baml-bridge==0.20.1
20
+ Requires-Dist: protobuf<8,>=6.31.1
20
21
  Requires-Dist: pydantic<3,>=2
21
22
  Requires-Dist: PyYAML<7,>=6
22
23
  Requires-Dist: consiliency-contract<0.7,>=0.6.5
@@ -49,7 +50,7 @@ To install just this runtime package directly:
49
50
 
50
51
  ```sh
51
52
  pip install phase-loop-runtime # latest compatible release
52
- pip install phase-loop-runtime==0.7.21 # …or pin an exact version
53
+ pip install phase-loop-runtime==0.7.23 # …or pin an exact version
53
54
  ```
54
55
 
55
56
  To pin a specific tag from source instead, substitute a tag from
@@ -288,6 +289,12 @@ closeout, the persisted `terminal-summary.json` reflects the runner's blocking v
288
289
  (the child's self-reported `complete`/`passed` is not overlaid back), preventing a
289
290
  stale "complete" summary from reconcile-skipping the work on the next run.
290
291
 
292
+ The `phase-loop-closeout-audit --repo .` command grades **ignored** paths by producer. It
293
+ accepts harness handoffs that carry the handoff contract, and a project's declared build
294
+ outputs backed by a recorded producer run. Declare those outputs in a committed
295
+ `.phase-loop-generated-outputs.json`; anything else still blocks. See
296
+ `docs/phase-loop/closeout-generated-outputs.md` (agent-harness#1139).
297
+
291
298
  ## Conformance library (one library, two roles)
292
299
 
293
300
  `phase_loop_runtime.conformance` is the named, stable, importable surface for the
@@ -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.21 # …or pin an exact version
22
+ pip install phase-loop-runtime==0.7.23 # …or pin an exact version
23
23
  ```
24
24
 
25
25
  To pin a specific tag from source instead, substitute a tag from
@@ -258,6 +258,12 @@ closeout, the persisted `terminal-summary.json` reflects the runner's blocking v
258
258
  (the child's self-reported `complete`/`passed` is not overlaid back), preventing a
259
259
  stale "complete" summary from reconcile-skipping the work on the next run.
260
260
 
261
+ The `phase-loop-closeout-audit --repo .` command grades **ignored** paths by producer. It
262
+ accepts harness handoffs that carry the handoff contract, and a project's declared build
263
+ outputs backed by a recorded producer run. Declare those outputs in a committed
264
+ `.phase-loop-generated-outputs.json`; anything else still blocks. See
265
+ `docs/phase-loop/closeout-generated-outputs.md` (agent-harness#1139).
266
+
261
267
  ## Conformance library (one library, two roles)
262
268
 
263
269
  `phase_loop_runtime.conformance` is the named, stable, importable surface for the
@@ -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.21"
7
+ version = "0.7.23"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -20,7 +20,8 @@ classifiers = [
20
20
  ]
21
21
  dependencies = [
22
22
  "detect-secrets==1.5.0",
23
- "baml-py>=0.222,<0.223",
23
+ "baml-bridge==0.20.1",
24
+ "protobuf>=6.31.1,<8",
24
25
  "pydantic>=2,<3",
25
26
  "PyYAML>=6,<7",
26
27
  # PIN (spec-integration v0.3.0): floor at 0.6.3 -- ships the `gate_posture_registry`
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.21"
21
+ __version__ = "0.7.23"
@@ -0,0 +1,202 @@
1
+ """BAML v1 worker process for ``phase_loop_runtime.baml_modular`` (agent-harness#1135).
2
+
3
+ This file runs as a standalone script (``python -I -S _baml_worker.py ...``).
4
+ It imports only the standard library and, after ``init``, ``baml_bridge``; it
5
+ never imports ``phase_loop_runtime``. Importing this module has no side
6
+ effects: everything below runs under ``if __name__ == "__main__":``.
7
+
8
+ argv: ``<owner pid> <comma-separated env allowlist keys> [--no-pdeathsig]``.
9
+
10
+ Protocol: one JSON object per line, UTF-8 with ``ensure_ascii=True``. Requests
11
+ arrive on fd 0; responses leave on a dup of fd 1 taken before fd 1 is pointed
12
+ at stderr, so nothing the native runtime prints can corrupt the protocol.
13
+ Every request carries an ``id`` that the response echoes. A response has
14
+ exactly the keys ``{id, fingerprint, <one of ok|error|request|fault>}``.
15
+
16
+ Op table (fixed): ``init``, ``parse_closeout``, ``closeout_request``,
17
+ ``evidence_request``, plus ``env`` when ``init`` carried ``test_mode``. An op
18
+ before ``init`` or a second ``init`` is answered with a ``fault``. Any
19
+ exception raised by an op (``BaseException``, including ``BamlPanic``) is
20
+ returned as a ``fault``; the client then discards and kills the worker.
21
+ """
22
+ from __future__ import annotations
23
+
24
+ import hashlib
25
+ import json
26
+ import os
27
+ import sys
28
+
29
+ _OP_FUNCTIONS = {
30
+ "parse_closeout": ("user.phase_loop_parse_closeout", ("raw",), ("ok", "error")),
31
+ "closeout_request": (
32
+ "user.phase_loop_closeout_request",
33
+ ("phase_alias", "plan_produces", "plan_owned_files", "closeout_commit_sha"),
34
+ ("request",),
35
+ ),
36
+ "evidence_request": (
37
+ "user.phase_loop_evidence_request",
38
+ ("tier2_signal_summary", "sample_artifact_content", "expected_artifact_characteristics"),
39
+ ("request",),
40
+ ),
41
+ }
42
+ # The client caps a request frame at 4 MiB + 1 KiB; anything larger here is a
43
+ # client bug or a hostile writer, and is refused rather than buffered forever.
44
+ _MAX_REQUEST_LINE = 4 * 1024 * 1024 + 1024 + 4096
45
+ _WATCHDOG_INTERVAL_S = 0.5
46
+ _PR_SET_PDEATHSIG = 1
47
+
48
+
49
+ def fingerprint(files: dict[str, str]) -> str:
50
+ canonical = json.dumps(files, sort_keys=True, separators=(",", ":"), ensure_ascii=True)
51
+ return hashlib.sha256(canonical.encode("ascii")).hexdigest()
52
+
53
+
54
+ def _set_pdeathsig(owner_pid: int) -> None:
55
+ import ctypes
56
+ import signal
57
+
58
+ # ctypes.CDLL(None) resolves prctl on glibc and musl alike; find_library("c")
59
+ # and "libc.so.6" do not work on musl.
60
+ libc = ctypes.CDLL(None, use_errno=True)
61
+ if libc.prctl(_PR_SET_PDEATHSIG, int(signal.SIGKILL), 0, 0, 0) != 0:
62
+ os._exit(70)
63
+ # The owner may have died between our fork and the prctl.
64
+ if os.getppid() != owner_pid:
65
+ os._exit(0)
66
+
67
+
68
+ def _start_watchdog(owner_pid: int) -> None:
69
+ import threading
70
+ import time
71
+
72
+ def watch() -> None:
73
+ while True:
74
+ if os.getppid() != owner_pid:
75
+ os._exit(0)
76
+ time.sleep(_WATCHDOG_INTERVAL_S)
77
+
78
+ threading.Thread(target=watch, name="baml-worker-watchdog", daemon=True).start()
79
+
80
+
81
+ class _Worker:
82
+ def __init__(self, out_fd: int, no_pdeathsig: bool) -> None:
83
+ self.out_fd = out_fd
84
+ self.no_pdeathsig = no_pdeathsig
85
+ self.fp: str | None = None
86
+ self.fns: dict[str, object] | None = None
87
+ self.test_mode = False
88
+
89
+ def send(self, obj: dict) -> None:
90
+ data = (json.dumps(obj, separators=(",", ":"), ensure_ascii=True) + "\n").encode("ascii")
91
+ view = memoryview(data)
92
+ while view:
93
+ written = os.write(self.out_fd, view)
94
+ view = view[written:]
95
+
96
+ def handle(self, line: bytes) -> None:
97
+ req_id = None
98
+ try:
99
+ req = json.loads(line.decode("ascii"))
100
+ if not isinstance(req, dict):
101
+ raise ValueError("request is not a JSON object")
102
+ req_id = req.get("id")
103
+ op = req.get("op")
104
+ if op == "init":
105
+ result = self.init(req)
106
+ self.send({"id": req_id, "fingerprint": self.fp, "ok": result})
107
+ return
108
+ if self.fns is None:
109
+ raise RuntimeError(f"op before init: {op!r}")
110
+ if op == "env" and self.test_mode:
111
+ self.send({"id": req_id, "fingerprint": self.fp, "ok": {"env": sorted(os.environ), "cwd": os.getcwd(), "pid": os.getpid()}})
112
+ return
113
+ if op not in _OP_FUNCTIONS:
114
+ raise RuntimeError(f"unknown op: {op!r}")
115
+ _name, params, keys = _OP_FUNCTIONS[op]
116
+ args = req.get("args")
117
+ if not isinstance(args, dict) or set(args) != set(params):
118
+ raise RuntimeError(f"bad args for {op}")
119
+ out = self.fns[op](**args)
120
+ if not isinstance(out, dict) or len(out) != 1:
121
+ raise RuntimeError(f"bridge {op} returned an unexpected shape")
122
+ ((key, value),) = out.items()
123
+ if key not in keys or not isinstance(value, str):
124
+ raise RuntimeError(f"bridge {op} returned key {key!r}")
125
+ self.send({"id": req_id, "fingerprint": self.fp, key: value})
126
+ except BaseException as exc: # noqa: BLE001 - every op failure is a typed fault
127
+ message = f"{type(exc).__module__}.{type(exc).__qualname__}: {str(exc)[:500]}"
128
+ self.send({"id": req_id, "fingerprint": self.fp, "fault": message})
129
+
130
+ def init(self, req: dict) -> dict:
131
+ if self.fns is not None:
132
+ raise RuntimeError("second init")
133
+ self.test_mode = req.get("test_mode") is True
134
+ if self.no_pdeathsig and not self.test_mode:
135
+ raise RuntimeError("--no-pdeathsig requires test_mode")
136
+ for entry in req.get("sys_path") or []:
137
+ if isinstance(entry, str) and os.path.isabs(entry) and entry not in sys.path:
138
+ sys.path.append(entry)
139
+ files = req.get("files")
140
+ if not isinstance(files, dict) or not all(isinstance(k, str) and isinstance(v, str) for k, v in files.items()):
141
+ raise RuntimeError("init files must be a map of strings")
142
+ import baml_bridge
143
+
144
+ baml_bridge.BamlRuntime.initialize_runtime("baml_src", files)
145
+ fns = {op: baml_bridge.define_function(name, "sync", list(params)) for op, (name, params, _keys) in _OP_FUNCTIONS.items()}
146
+ self.fp = fingerprint(files)
147
+ self.fns = fns
148
+ return {"version": baml_bridge.get_version(), "pid": os.getpid()}
149
+
150
+ def serve(self) -> None:
151
+ buf = b""
152
+ while True:
153
+ chunk = os.read(0, 1 << 16)
154
+ if not chunk:
155
+ return # stdin EOF: the graceful shutdown path
156
+ buf += chunk
157
+ while True:
158
+ newline = buf.find(b"\n")
159
+ if newline < 0:
160
+ break
161
+ line, buf = buf[:newline], buf[newline + 1 :]
162
+ self.handle(line)
163
+ if len(buf) > _MAX_REQUEST_LINE:
164
+ self.send({"id": None, "fingerprint": self.fp, "fault": "request line over cap"})
165
+ return
166
+
167
+
168
+ def main(argv: list[str]) -> int:
169
+ owner_pid = int(argv[1])
170
+ allowlist = {key for key in argv[2].split(",") if key} if len(argv) > 2 else set()
171
+ no_pdeathsig = "--no-pdeathsig" in argv[3:]
172
+
173
+ out_fd = os.dup(1)
174
+ os.dup2(2, 1)
175
+ sys.stdout = sys.stderr
176
+
177
+ # Normalize the environment before baml_bridge is ever imported: this drops
178
+ # interpreter-injected keys (C-locale coercion's LC_CTYPE,
179
+ # __PYVENV_LAUNCHER__) that the parent's allowlist never passed.
180
+ for key in list(os.environ):
181
+ if key not in allowlist:
182
+ del os.environ[key]
183
+ # The v1 runtime keeps a profile store of call data under the working
184
+ # directory (``.baml/profiles-v1``) unless profiling is off. Forced, not
185
+ # defaulted: no call data is ever written to disk, whatever was passed in.
186
+ os.environ["BAML_PROFILE"] = "0"
187
+ os.environ.pop("BAML_PROFILE_DIR", None)
188
+
189
+ if os.name == "posix":
190
+ if sys.platform.startswith("linux") and not no_pdeathsig:
191
+ _set_pdeathsig(owner_pid)
192
+ elif os.getppid() != owner_pid:
193
+ os._exit(0)
194
+ _start_watchdog(owner_pid)
195
+ # Windows: the parent's Job Object (KILL_ON_JOB_CLOSE) enforces owner death.
196
+
197
+ _Worker(out_fd, no_pdeathsig).serve()
198
+ return 0
199
+
200
+
201
+ if __name__ == "__main__":
202
+ sys.exit(main(sys.argv))
@@ -16,6 +16,7 @@ C4_DOCUMENT = Path("docs/c4/phase-loop-runtime-c4-document.md")
16
16
  TASK_CATALOG = Path("docs/tasks/dotfiles-task-catalog.md")
17
17
  RUNTIME_PROJECTION_SURFACE = "phase-loop status --runtime-projection --json"
18
18
  BAML_SCHEMA_ROOT = Path("vendor/phase-loop-runtime/src/phase_loop_runtime/baml_src")
19
+ BAML_BRIDGE_SOURCE = "phase_loop_bridge.baml"
19
20
  ADOPTION_BUNDLE_PATH = Path("docs/adoption/dotfiles-adoption-bundle.json")
20
21
 
21
22
 
@@ -143,6 +144,8 @@ def _source_roots(repo: Path) -> list[dict[str, str]]:
143
144
  def _schema_refs(repo: Path) -> list[dict[str, str]]:
144
145
  refs: list[dict[str, str]] = []
145
146
  for path in sorted((repo / BAML_SCHEMA_ROOT).glob("*.baml")):
147
+ if path.name == BAML_BRIDGE_SOURCE:
148
+ continue # host glue with no classes, not a schema (agent-harness#1135 #26)
146
149
  source_path = _repo_relative(repo, path)
147
150
  refs.append(
148
151
  {
@@ -337,7 +337,153 @@ the caller passes a PATH and the runtime reads it.
337
337
  (`max_age_s = 24h`) sweep of `pl-panel-*` dirs, called at the top of
338
338
  `_default_spawn`. Reclaims dirs leaked when a run is KILLED before the per-run
339
339
  `finally: rmtree` (timeout/crash); a concurrent run's fresh dir is never touched,
340
- and a GC failure can NEVER affect the run (fully swallowed).
340
+ and a GC failure can NEVER affect the run (fully swallowed). It sweeps both the
341
+ current staging root and the system temp dir, where releases before
342
+ agent-harness#1147 staged.
343
+ - **Staging root and retention (agent-harness#1147, `sandbox_policy`).**
344
+ - **Invariant.** Sandbox staging and spawned-CLI scratch are never RAM-backed while a
345
+ disk-backed candidate is usable. Otherwise they run in a typed DEGRADED mode
346
+ (`ScratchLocation.degraded`): one warning and hard-clamped retention, and the round is
347
+ never crashed. `PHASE_LOOP_SANDBOX_REFUSE_RAM=1` refuses instead (leg detail
348
+ `env_failure: no disk-backed scratch and RAM fallback refused`).
349
+ - **RAM-backed** means a Linux tmpfs or ramfs, identified by the device serving the path
350
+ (`st_dev` matched against `/proc/self/mountinfo`), so overmounts and moved mounts are
351
+ judged correctly. macOS and Windows temp dirs count as disk.
352
+ - **Named exceptions**, each a typed scratch decision (`child_scratch_env`): the agy
353
+ qualification and capture jails keep a tmpfs `/tmp` and their frozen env, because they
354
+ are qualification evidence (follow-up agent-harness#1179); and the Gemini HEARTBEAT
355
+ seat's jail mounts its own private `/tmp` (agent-harness#1181). Neither covers a
356
+ bounded Gemini leg or the bounded Gemini president, which run on the host.
357
+ - **Staging root.** Each round's `pl-panel-*` scratch, and the sandbox clone inside it,
358
+ is created under `staging_root()`. That is `PHASE_LOOP_SANDBOX_STAGING_DIR` when set;
359
+ otherwise `phase-loop/sandboxes` in the platform's per-user cache dir (`$XDG_CACHE_HOME`
360
+ or `~/.cache` on Linux, `~/Library/Caches` on macOS, `%LOCALAPPDATA%` on Windows); else
361
+ the system temp dir when it is not RAM-backed. `TMPDIR` is not the override. The
362
+ launcher's agy review copy (without a run log) and the falsifier's stage and
363
+ dependency snapshot use the same root. Every directory the runtime creates below the
364
+ cache dir is created 0700 and must be a real directory owned by this account.
365
+ - **Capacity.** Filesystem size comes from `shutil.disk_usage`, which works on every
366
+ platform.
367
+ - Retention ceiling: `min(PHASE_LOOP_SANDBOX_MAX_TOTAL_BYTES (40 GiB), 25% of the
368
+ filesystem)`, or 10% on a RAM-backed one.
369
+ - Default floor: 2 GiB capped at 25% of the filesystem, or 25% of a RAM-backed one.
370
+ - A floor that is configured (by the setting's presence) is used verbatim.
371
+ - **Reaping.** Before a round is refused for space, retained sandboxes are reaped
372
+ oldest-first. The TTL, footprint and free-space reaps all skip a sandbox whose owning
373
+ process is still running. The owner marker is published atomically (temp file, fsync,
374
+ rename).
375
+ - **Other knobs:** `PHASE_LOOP_SANDBOX_ROOT` (the selected root, recorded in the
376
+ evidence; see the placement seam below), `PHASE_LOOP_SANDBOX_REMOTE_REQUIRED`,
377
+ `PHASE_LOOP_SANDBOX_TTL_S` (24 h), `PHASE_LOOP_SANDBOX_PROBE_TIMEOUT_S`,
378
+ `PHASE_LOOP_SANDBOX_ARCHIVE_DEST`, `PHASE_LOOP_SANDBOX_DISABLE`.
379
+ - **Sandbox placement seam (agent-harness#896, `sandbox_placement`).** One vendor-neutral
380
+ seam, several backends. The built-in `LocalBackend` is today's path; a remote host or a
381
+ cloud sandbox registers a backend under a URL scheme, directly or through the
382
+ `phase_loop_runtime.placement_backends` entry-point group, which is loaded only when a
383
+ configured root names that scheme. Core names no vendor.
384
+ - **Phases, in order, for every backend.** `prepare` is runtime code
385
+ (`prepare_local_stage`: stage locally, owning the partial stage until it returns), never
386
+ a backend method. The runtime's revalidations then run against that local stage,
387
+ unchanged. `commit` transfers the revalidated stage (a no-op locally); it owns any
388
+ partial remote state until it returns and the backend recomputes the digest. `execute` /
389
+ `wait` / `cancel` / `renew` are the runtime's own launch branches locally. `release`
390
+ removes the stage. Code never leaves the operator's custody before revalidation.
391
+ - **Launch is final.** Once `execute` is called, even if it raised, the attempt is
392
+ launched: it never falls back to local, and a retry in the same round reuses the same
393
+ backend or refuses.
394
+ - **Receipts.** Backends return `BackendReceipt`s only. Only the runtime builds a
395
+ `PlacementReceipt(attested_by="runtime")`, for a step it performed and observed
396
+ (`prepared`, `committed`, `launched` -- `execute` called, or a local provider process
397
+ the runtime started, counted once `Popen` returned; a launch that fails to exec is not
398
+ one, and infrastructure launches such as the egress namespace holder and its uplink are
399
+ never counted -- and `completed`). A backend's claim is recorded as `attested_by="backend"`. Every
400
+ receipt carries `sandbox_ref` (`[A-Za-z0-9._:-]{1,128}`, anything else refuses the
401
+ placement) and `snapshot_sha256`, which the runtime computes from the local stage.
402
+ - **`sandbox_root_applied`.** Local: the built-in backend, no host, and the root is the
403
+ stage's parent. Non-local: runtime-attested `committed` and `completed` share one
404
+ `sandbox_ref`, both carry the authorization's staged-tree digest, the leg spawned no
405
+ local provider, and any backend receipts agree. Backend receipts alone never make it
406
+ true. `sandbox_staged_at` is the path locally and `<scheme>:<sandbox_ref>` otherwise.
407
+ - **Capabilities and declarations.** `capabilities()` is what a backend can enforce, from
408
+ a closed set (`private_ranges_unreachable`, `public_egress`, `private_allowlist`,
409
+ `inbound_closed`, `filesystem_confined`, `uid_isolated`, `bounding_set_empty`,
410
+ `seccomp_filtered`, `resource_bounded`, `one_shot_secret_channel`, `operator_custody`).
411
+ `verified` maps a capability verified for this placement to `runtime_end_to_end` (only
412
+ the runtime writes it) or `backend_attested`, and is a subset of `capabilities()`.
413
+ `LocalBackend.capabilities()` is empty: local egress and uid facts stay in their own
414
+ fields. `declaration()` names the backend's egress residuals (closed kinds, each with
415
+ `closed_in_guest`), the control-plane variables it injects into the guest (values
416
+ redacted), and `max_lifetime_s`.
417
+ - **Roots.** `PHASE_LOOP_SANDBOX_ROOT` is the single-root form. Otherwise the user
418
+ config's `[sandbox]` table in `advisor-boards.toml` names one root per remote backend
419
+ (`roots.self-hosted = "https://…"`, `roots.e2b = "e2b://…"`) and the order to try them
420
+ (`order`, default `["self-hosted", "e2b"]`; named roots it omits follow in file order).
421
+ The single root is an alias for one backend and, when set, the only candidate. A
422
+ malformed table or unknown key raises `sandbox_config_invalid`; a repository file cannot
423
+ carry `[sandbox]`. Candidates are tried in order and the first usable one is chosen;
424
+ each one passed over adds `<name>: <reason>` to `sandbox_root_reason`.
425
+ - **Root parsing.** A value is stripped; anything containing `://` is a URL and keeps only
426
+ scheme, host, port and path. A malformed scheme (`sandbox_root_scheme_invalid`), a
427
+ built-in scheme written as a URL (`sandbox_root_scheme_builtin`), and a non-URL value
428
+ with `user:…@` or a query (`sandbox_root_unrecognised`) are refused without a probe and
429
+ rendered as a placeholder. No warning, reason, recorded path or probe argument is built
430
+ from the configured text; all use the parsed form.
431
+ - **Execution gate.** A build calls a non-local backend's methods only if its own driver
432
+ executes on that backend (`panel_invoker._NONLOCAL_EXECUTION_DRIVER`). This release has
433
+ no such driver: root selection passes over every non-local backend before `prepare` and
434
+ before any of its methods, and the leg falls back to local with
435
+ `sandbox_root_fell_back=true` and a reason naming the root and
436
+ `sandbox_placement_driver_unavailable`.
437
+ - **Fail-closed knob.** `PHASE_LOOP_SANDBOX_REMOTE_REQUIRED` (`1`/`true`/`yes`/`on`; any
438
+ unrecognised value is on) refuses a seat leg -- every review-mode leg `_default_spawn`
439
+ launches for a board seat, tree or no tree -- unless the runtime ran it through a remote
440
+ backend's `execute`. Exemption is by execution, never by where placement came from, so
441
+ in this release it refuses every seat leg, before any root is probed or anything is
442
+ staged, with detail `sandbox_placement_required_unavailable`. Advisory-mode boards are
443
+ not seat legs and are not governed by it.
444
+ - **Evidence.** The leg's placement record (`sandbox_placement_backend`,
445
+ `sandbox_placement_receipts`, `sandbox_placement_verified`,
446
+ `sandbox_local_provider_spawns`, `sandbox_snapshot_sha256` -- the authorization's
447
+ digest) is recorded right after `prepare` and travels on
448
+ `PanelLegResult.sandbox_placement_evidence` on every exit, failures included; the
449
+ runner persists it in the leg's `implementation-panel-<leg>.json`. The local spawn count
450
+ is read when the record is serialized. Every exit, including egress teardown raising,
451
+ releases the stage and resets the leg's facts and spawn counter. A brokered leg's broker evidence
452
+ carries the same keys, and `scripts/verify_harden_evidence.py` enumerates them and
453
+ checks the `applied` rule for the recorded backend.
454
+ - **Spawned CLI scratch (agent-harness#1147, `fill_child_tmp_env`).** Agent CLIs write
455
+ large scratch of their own; Claude Code uses `$CLAUDE_CODE_TMPDIR`, else the temp dir
456
+ (`/tmp/claude-<uid>`).
457
+ - **What is filled.** Each of `TMPDIR` and `CLAUDE_CODE_TMPDIR` that the child env does
458
+ not already set is judged against its own default destination. If that destination is
459
+ RAM-backed, the variable is set to a private (0700, ours) disk-backed per-user dir that
460
+ is above its free-space floor: `phase-loop/tmp` in the cache dir, else
461
+ `phase-loop-<uid>/tmp` under the temp dir.
462
+ - **Where it applies.** Every review-provider launch: `panel_invoker.launch_provider` /
463
+ `run_provider` apply `child_scratch_env` to the env they launch with, and only the
464
+ named exceptions can opt out (`child_scratch=`). The env builders fill too, so the
465
+ recorded provider evidence matches the launch: board legs and advisory seats
466
+ (`_subscription_env`, the `_exec_leg` explicit-env route), brokered legs including
467
+ bounded Gemini, and both presidents (`_broker_leg_env`). Outside the provider
468
+ interface: executors (`child_executor_env`) and convergence adapters
469
+ (`_child_environment`). The Agent View executor's `claude --bg` goes through the
470
+ interface: `ClaudeAgentViewAdapter`'s default runner calls `run_provider` with an
471
+ explicit env. A bounded brokered agy leg's owned HOME is created in the
472
+ relocated dir as well. A decision returns a `DecidedEnv` labelled
473
+ `PHASE_LOOP_SCRATCH_DECIDED=<decision>` and recorded by object identity
474
+ (`sandbox_policy.decided_scratch`). The test suite's audit hook
475
+ (`tests/_scratch_audit_hook.py`) -- a regression tripwire, not an adversarial boundary
476
+ -- fails any test in which the runtime spawns an agent CLI, named from the runtime's own
477
+ harness registries, with an env object that is not one a decision returned, whatever
478
+ API spawns it. That is the completeness check. `tests/test_agent_cli_scratch_inventory_1147.py` is a static early
479
+ warning: it enumerates every process launch in the package and fails on one with no
480
+ stated decision. It is conservative: an unresolvable use of a launch-capable module (a computed `getattr`,
481
+ `__dict__`, the module as a value, a dynamic import, `exec`/`eval`) needs a stated
482
+ decision too. Env builders (`_broker_subscription_env`, `scrub_subscription_env`)
483
+ take no decision; each route decides after building, so a named exception is never
484
+ refused by a relocation it is exempt from.
485
+ - **Overrides.** A value the caller set is never overridden. The brokered allowlist
486
+ still drops ambient values, so there only the runtime's own dir can appear.
341
487
  - **Golden byte-identity preserved.** No ref ⇒ identical staged bytes ⇒ identical
342
488
  per-leg argv / env / timeout. `tests/test_advisor_board_golden.py` (Proof A hits
343
489
  `_exec_leg`; Proof B injects `spawn=`) is untouched;
@@ -551,7 +697,7 @@ never through — the review operation `public_board_review.v1`. Frozen falsifie
551
697
  - **Rung routes** (`president_adapter.build_president_invoke(..., monitoring_policy=)`).
552
698
  Unseated rung → typed `president_unavailable` (descend). `sol` / `grok` → the brokered
553
699
  `_exec_leg` in a throwaway directory, whose only launch is `launch_provider`. `gemini` →
554
- the broker's acknowledged agy stream with the PRESIDENT's own final instruction (a ruling,
700
+ the broker's agy stream with the PRESIDENT's own final instruction (a ruling,
555
701
  not a review verdict), launched through `_run_leg_with_liveness` → `launch_provider` and
556
702
  decoded by `_broker_gemini_stream_result`; with the agy subscription credential it runs in
557
703
  the broker's agy profile, without one in an empty private HOME (no credential of any kind),
@@ -672,7 +818,60 @@ The TUI timestamp is refreshed by novel output lines, review-file growth and
672
818
  transcript growth — a startup banner is novel output and refreshes it; only
673
819
  repeated cosmetic repaints do not, once the existing novelty detector has seen
674
820
  their text. The CPU-tick heartbeat never refreshes it.
675
- Neither state is a health attestation or permission to terminate. Frozen
821
+ Neither state is a health attestation or permission to terminate.
822
+ The record also carries a progress notice (agent-harness#1176). When no genuine
823
+ progress has been seen for `stall_notice_s` (default 3600 s; override with
824
+ `PHASE_LOOP_REVIEW_STALL_NOTICE_S`), and no progress at all counts from seat
825
+ start, `progress_notice` is `seat_progress_stalled`, `progress_notice_count`
826
+ counts crossings, and one operator warning with only that code and numbers is
827
+ logged. Resumed progress and a terminal observation clear the active notice;
828
+ `last_progress_notice` and the count stay as history. The notice never ends the
829
+ seat. The record reaches the board: `advisor-board --json` legs carry it as
830
+ `review_monitoring`, the text summary prints a `[seat_progress_stalled]` line
831
+ per affected seat on stderr, each streamed per-leg verdict file carries it, and
832
+ the governed record adds a `seat_progress_stalled` warn finding per seat.
833
+ The exact brokered Claude transcript is classified once per change, by
834
+ `_claude_transcript_outcome`, into one outcome; the answer parser and the
835
+ give-up detector are views of it, so they cannot disagree:
836
+ - `answer`: the route's answer parser (the agent-harness#1002/#1077/#1017
837
+ rules; the president route fails closed on any error record in the turn)
838
+ returns text. An accepted answer always wins, whatever follows it. An
839
+ `isApiErrorMessage` record is never answer text. Every record of the answer
840
+ must be a member of the current request (defined below; a sidechain sighting
841
+ counts), so a record that is not evidence for the request never answers it
842
+ either. If the text is not an
843
+ accepted verdict, the leg is handed it back as
844
+ `claude_tui_broker_terminal_nonconforming` instead of waiting.
845
+ - `gave_up`: no answer, and the last live record after the current request is
846
+ an `isApiErrorMessage` give-up. The leg ends at once as DEGRADED with
847
+ `claude_seat_output_budget_exhausted` (`error: max_output_tokens`),
848
+ `claude_seat_usage_limited` (`error: rate_limit` with
849
+ `quotaLimits.status: rejected`, a subscription cap, followed by
850
+ `: usage_limit (resets HH:MM, Mon D YYYY)` rendered in UTC from
851
+ `quotaLimits.resetsAt` when present), `claude_seat_rate_limited` (any other
852
+ `rate_limit`) or `claude_seat_provider_api_error`.
853
+ - `rejected`: no answer, and the turn ended in a completed (`end_turn` /
854
+ `stop_sequence`) answer carrying a text block that the route's parser refuses.
855
+ The leg ends at once as DEGRADED with `claude_seat_transcript_rejected`.
856
+ - `pending`: anything else (an open or capped message, the CLI's resume prompt,
857
+ a newer request, a writer mid-append). A `max_tokens` stop is never terminal.
858
+ The "last live record" is decided in APPEND order among the current request's
859
+ records, chosen by membership, not position. The current request is the last
860
+ user record that is not `isMeta`, carries no tool_result and is not a replay (its
861
+ uuid and content recurring, whatever its completion metadata, as in the answer
862
+ parser). A record is evidence for it only when it is a new version first seen in
863
+ it: its uuid was first seen after the request (a record of an earlier request is
864
+ never evidence, wherever it is appended, except an `isApiErrorMessage` record
865
+ appended in the current request, which always is); it is not an exact replay of a
866
+ version already seen (same uuid, content, `stop_reason` presence and value, and
867
+ error flag) nor a stale open copy of a stopped record whose content is unchanged;
868
+ and it is not a sidechain record (`isSidechain`), which the answer parser drops
869
+ too. An open record first seen in the current request, even a changed version
870
+ after its own stop, is still streaming and reads `pending`. An `isApiErrorMessage`
871
+ record is terminal event evidence and is never collapsed into an earlier
872
+ version of its uuid. Replays and rewritten metadata are not progress. `provider_terminal_state` records the code that
873
+ ended the leg. `isApiErrorMessage` matches JSON `true` or the string `"true"`,
874
+ on the record or the message. Frozen
676
875
  broker request/response keys, status literals, and observer envelopes are unchanged.
677
876
 
678
877
  When staging requires egress isolation, acquisition follows staged-tree and operation
@@ -687,8 +886,11 @@ review text and the exception in detail; sandbox facts describe actual enforceme
687
886
 
688
887
  The Linux x64 subscription `agy` entry image must match one member of the closed
689
888
  set `gemini_heartbeat.QUALIFIED_IMAGES`: 1.2.11 SHA256
690
- `ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56` or 1.2.12 SHA256
691
- `ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`. Each member
889
+ `ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`, 1.2.12 SHA256
890
+ `ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`, 1.2.14 SHA256
891
+ `0d0d3eba22daf29504dd290151c7ed9a4d33b0c6aa0acfc5da27bc3b01d2f029`, 1.2.15 SHA256
892
+ `5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164` or 1.2.16 SHA256
893
+ `a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86`. Each member
692
894
  carries its measured help digest and has its own qualification record; the
693
895
  evidence catalog and the runtime set must name exactly the same members.
694
896
  The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
@@ -710,7 +912,8 @@ HOME fallback truthfully if HOME is absent. Legitimate refresh writes survive.
710
912
  The real qualification driver requires an explicit HOME and checks target
711
913
  presence before and after, without reading its contents.
712
914
 
713
- The broker transports same-session acknowledged input over stdin, with no tree
915
+ The broker transports same-session input over stdin (one event when the sealed prompt fits
916
+ one chunk, acknowledged chunks otherwise; agent-harness#1175), with no tree
714
917
  attachment, `--add-dir`, permission bypass, retry or native thinking timer. Empty,
715
918
  rejected and nonzero-exit streams remain non-votes with fixed diagnostics;
716
919
  provider stdout/stderr and arbitrary exception strings are not substituted for
@@ -839,3 +1042,70 @@ A non-release `agy` image is admitted only by verifying it, never by trusting it
839
1042
  verified pushed oid in its own `watch_push` entry, and reads both the record and the
840
1043
  created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
841
1044
  agree. It refuses when it cannot prove its open-PR listing complete.
1045
+
1046
+ ## ABDFALSIFY — Executable review findings (IF-0-EXECFIND-1)
1047
+
1048
+ An optional `falsifier` attachment names one `FindingFalsifier` with
1049
+ `finding_id`, `new_test_path`, `expected_nodeid`, and a unified `diff` creating
1050
+ only `phase-loop-runtime/tests/test_finding_<finding_id>.py`. A
1051
+ `FindingFalsifierAttachment` contains a tuple of these entries with unique
1052
+ finding IDs. The attachment is a non-field property on `PanelLegResult`; it
1053
+ does not change the serialized leg or board schema. The seat supplies text,
1054
+ never an executable command or a claimed test outcome.
1055
+
1056
+ `run_finding_falsifier` accepts one attached falsifier, board `seat_key`, canonical
1057
+ repository, positive wall-clock/output bounds, and a single-use
1058
+ `FalsifierIsolationAuthorization` bound to the exact 40-character `reviewed_sha`.
1059
+ Its identity is `public_board_falsifier.v1`; its child has no credentials,
1060
+ network egress, or live-tree mount. The source must be clean at that SHA.
1061
+ Before applying the diff, the staged materialized path set, bytes, symlink
1062
+ targets, and executable bits must equal the reviewed Git tree, including no
1063
+ ignored extra files. Only the named pytest node runs in the staged clone.
1064
+
1065
+ Each run stages its own tree from the canonical repository at the head under
1066
+ test, never from a seat's tree, and copies installed dependency files into a
1067
+ per-run import root (copies, never links; uv's `--link-mode=copy` equivalent).
1068
+ Those two trees are the run's protected objects: every regular file in them,
1069
+ `.git` included, must have a link count of exactly one before the node starts
1070
+ and after it exits, or the run is `error` (agent-harness#1134). The shared system
1071
+ interpreter is read-only to the run and is not a protected object. The runner
1072
+ resolves `/usr/bin/python3` once and launches exactly that file. Falsifier runs
1073
+ execute without site processing (`-S`): no `.pth`, `sitecustomize` or
1074
+ `usercustomize` runs and no host site directory is on `sys.path`, so the
1075
+ interpreter's inputs are its standard-library entries plus the run's explicit
1076
+ staged paths. Every dependency, pytest included, comes from the per-run staged
1077
+ dependency root (a distribution without a RECORD is staged from its declared
1078
+ top-level modules); a host site directory on the falsifier path is refused as
1079
+ `falsifier_host_site_packages_refused`. The measured set is the launched
1080
+ interpreter's own `sys.path` under the same flags and environment, so the
1081
+ inventory and the launch are identical by construction. Every entry is
1082
+ digested before and after the run: archive entries and `.pth`, archive and
1083
+ customize files by content, directories by an lstat manifest (mode, size,
1084
+ device, inode, mtime, ctime), and every symlink target outside the set followed
1085
+ and hashed by content. An entry the runner cannot digest fails closed, and a
1086
+ changed scope or digest is `error`.
1087
+ Before staging, the canonical repository must not be reachable through any
1088
+ system-root mount (compared by device and in-filesystem path, not by pathname),
1089
+ and a repository that contains any mount point is refused as
1090
+ `falsifier_repository_submount_refused`. The record schema is unchanged; the reason
1091
+ stays in the result's `detail`.
1092
+
1093
+ The frozen outcome tuple is `red_on_head`, `green_on_head`, `apply_failed`,
1094
+ `node_missing`, `error`. Pytest emits JUnit, but the recorded outcome comes from
1095
+ the wrapper's reported call-phase result; the test-writable XML is not read as
1096
+ authority. Seat-authored and reviewed-tree Python (including conftest) run
1097
+ in the wrapper's process and can forge
1098
+ the reported status, including a parent-keyed frame. RED and GREEN are therefore
1099
+ observed, untrusted results: neither binds nor dismisses a finding. Drift,
1100
+ expiry, unavailable isolation, and incomplete evidence are `error`; every
1101
+ valid attached result remains a blocking `finding_receipt` pending a president
1102
+ ruling. The metadata-only
1103
+ `finding_falsifier.v1` record has exactly `schema`,
1104
+ `authorization_identity`, `seat_key`, `reviewed_sha`, `finding_id`, `nodeid`,
1105
+ `outcome`, `red_output_digest`, `diff_digest`, `wall_clock_bound_s`, and
1106
+ `output_cap_bytes`. `diff_digest` hashes the offered UTF-8 diff bytes;
1107
+ `red_output_digest` hashes separately captured stdout followed by stderr
1108
+ and is null unless RED. The caller binds the record with SHA-256 over
1109
+ canonical JSON (`sort_keys=True`, compact separators, `ensure_ascii=False`).
1110
+ The full freeze and golden values live in
1111
+ `tests/data/execfind_falsifier_attachment_v1.golden.json`.