phase-loop-runtime 0.7.0__tar.gz → 0.7.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (725) hide show
  1. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/MANIFEST.in +1 -0
  2. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/PKG-INFO +1 -1
  3. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/pyproject.toml +2 -1
  4. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/cli.py +233 -18
  6. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_validators.py +80 -1
  7. phase_loop_runtime-0.7.2/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +34 -0
  8. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/discovery.py +12 -7
  9. phase_loop_runtime-0.7.2/src/phase_loop_runtime/dispatch_lock.py +264 -0
  10. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/doctor.py +116 -0
  11. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/gate_posture.py +46 -0
  12. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/governed_review.py +20 -3
  13. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/handoff.py +95 -0
  14. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/injection.py +18 -1
  15. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/launcher.py +315 -149
  16. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/panel_invoker.py +309 -24
  17. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/plan_manifest.py +114 -14
  18. phase_loop_runtime-0.7.2/src/phase_loop_runtime/ratification_policy.py +313 -0
  19. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/reconcile.py +70 -15
  20. phase_loop_runtime-0.7.2/src/phase_loop_runtime/release_guard.py +442 -0
  21. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runner.py +178 -2
  22. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +18 -2
  23. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +18 -2
  24. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +7 -2
  25. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +7 -2
  26. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +30 -10
  27. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +37 -12
  28. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +14 -5
  29. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +38 -15
  30. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +23 -1
  31. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +23 -1
  32. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +7 -1
  33. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +13 -1
  34. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +2 -1
  35. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +2 -1
  36. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +7 -1
  37. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +13 -1
  38. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +2 -1
  39. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +2 -1
  40. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +7 -1
  41. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +13 -1
  42. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +2 -1
  43. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +2 -1
  44. phase_loop_runtime-0.7.2/src/phase_loop_runtime/task_message_broker.py +294 -0
  45. phase_loop_runtime-0.7.2/src/phase_loop_runtime/task_message_broker_client.py +276 -0
  46. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/task_message_resolver.py +206 -41
  47. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/worktree_index.py +70 -2
  48. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  49. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/SOURCES.txt +14 -0
  50. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_backing_homebrew.py +2 -2
  51. phase_loop_runtime-0.7.2/tests/test_dispatch_lock_reentrancy.py +142 -0
  52. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_doctor_bom.py +7 -0
  53. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_launcher_liveness.py +39 -0
  54. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_leg_liveness_monitor.py +1 -1
  55. phase_loop_runtime-0.7.2/tests/test_manifest_per_entry_164.py +243 -0
  56. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_invoker_spawn.py +110 -4
  57. phase_loop_runtime-0.7.2/tests/test_panel_native_fill_183.py +327 -0
  58. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +63 -0
  59. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_handoff.py +70 -0
  60. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile.py +30 -0
  61. phase_loop_runtime-0.7.2/tests/test_pushflow.py +294 -0
  62. phase_loop_runtime-0.7.2/tests/test_ratification_policy.py +280 -0
  63. phase_loop_runtime-0.7.2/tests/test_release_dispatch_operator_approval_145.py +213 -0
  64. phase_loop_runtime-0.7.2/tests/test_review_leg_sandbox.py +195 -0
  65. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_status_read_only_62.py +9 -6
  66. phase_loop_runtime-0.7.2/tests/test_task_message_broker.py +329 -0
  67. phase_loop_runtime-0.7.2/tests/test_task_message_broker_cli.py +555 -0
  68. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_task_message_resolver.py +241 -8
  69. phase_loop_runtime-0.7.2/tests/test_unattended_release.py +188 -0
  70. phase_loop_runtime-0.7.0/src/phase_loop_runtime/dispatch_lock.py +0 -167
  71. phase_loop_runtime-0.7.0/src/phase_loop_runtime/release_guard.py +0 -180
  72. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/README.md +0 -0
  73. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/protocol/protocol.md +0 -0
  74. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/setup.cfg +0 -0
  75. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  76. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  77. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  78. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  79. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  80. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  81. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  82. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  83. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  84. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  85. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  86. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  87. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  88. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  89. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  90. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  91. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  92. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  93. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  94. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  95. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  96. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  97. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  98. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  99. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  100. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  101. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  102. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  103. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  104. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  105. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  106. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  107. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  108. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  109. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  110. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  111. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  112. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  113. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  114. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  115. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  116. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  117. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  118. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  119. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  120. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  121. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  122. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  123. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  124. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  125. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  126. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  127. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  128. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  129. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  130. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  131. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  132. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  133. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  134. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  135. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  136. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  137. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  138. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  139. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  140. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  141. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  142. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  143. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  144. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  145. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  146. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  147. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  148. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  149. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_modular.py +0 -0
  150. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  151. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  152. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  153. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  154. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  155. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  156. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  157. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  158. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/broker.py +0 -0
  159. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/build_bundle.py +0 -0
  160. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/capability_registry.py +0 -0
  161. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/classifier.py +0 -0
  162. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  163. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  164. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout.py +0 -0
  165. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  166. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  167. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_validation.py +0 -0
  168. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  169. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  170. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  171. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  172. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  173. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  174. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  175. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  176. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  177. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  178. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  179. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  180. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  181. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  182. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  183. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  184. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  185. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  186. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  187. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  188. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/docs_audit.py +0 -0
  189. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/docs_freshness.py +0 -0
  190. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  191. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  192. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/events.py +0 -0
  193. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/events_migration.py +0 -0
  194. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/evidence_audit.py +0 -0
  195. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  196. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/executor_availability.py +0 -0
  197. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/fleet_map.py +0 -0
  198. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  199. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  200. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/git_discipline.py +0 -0
  201. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/git_ops.py +0 -0
  202. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/git_topology.py +0 -0
  203. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/governed_bundle.py +0 -0
  204. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/governed_premerge.py +0 -0
  205. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/handoff_path.py +0 -0
  206. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  207. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/install_status.py +0 -0
  208. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  209. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/lease_store.py +0 -0
  210. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/maintenance.py +0 -0
  211. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  212. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/models.py +0 -0
  213. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/observability.py +0 -0
  214. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  215. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  216. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  217. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  218. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  219. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  220. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  221. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  222. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  223. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/plan_ir.py +0 -0
  224. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/planner_validation.py +0 -0
  225. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/profiles.py +0 -0
  226. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/prompts.py +0 -0
  227. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/provenance.py +0 -0
  228. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/publishing.py +0 -0
  229. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/py.typed +0 -0
  230. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/redaction.py +0 -0
  231. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/reflection_sync.py +0 -0
  232. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/render.py +0 -0
  233. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/repo_validation.py +0 -0
  234. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/review_summary.py +0 -0
  235. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  236. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/route_log.py +0 -0
  237. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  238. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  239. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runtime_paths.py +0 -0
  240. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runtime_projection.py +0 -0
  241. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runtime_resources.py +0 -0
  242. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schema_export.py +0 -0
  243. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  244. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_install.py +0 -0
  245. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_inventory.py +0 -0
  246. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_paths.py +0 -0
  247. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  248. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  249. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  250. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  251. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  252. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  253. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  254. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  255. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  256. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  257. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  258. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  259. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  260. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  261. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  262. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  263. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  264. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  265. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  266. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  267. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  268. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  269. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  270. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  271. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  272. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  273. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  274. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  275. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  276. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  277. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  278. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  279. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  280. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  281. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  282. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  283. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  284. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  285. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  286. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  287. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  288. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  289. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  290. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  291. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  292. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  293. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  294. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  295. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  296. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  297. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  298. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  299. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  300. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  301. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  302. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  303. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  304. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  305. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  306. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  307. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  308. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  309. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  310. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  311. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  312. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  313. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  314. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  315. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  316. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  317. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  318. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  319. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  320. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  321. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  322. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  323. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  324. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  325. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  326. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  327. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  328. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  329. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  330. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  331. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  332. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  333. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  334. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  335. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  336. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  337. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  338. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  339. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  340. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  341. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  342. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  343. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  344. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  345. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  346. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  347. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  348. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  349. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  350. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  351. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  352. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  353. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  354. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  355. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  356. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  357. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  358. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  359. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  360. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  361. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  362. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  363. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  364. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  365. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  366. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  367. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  368. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  369. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  370. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  371. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  372. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  373. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  374. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  375. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  376. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  377. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  378. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  379. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  380. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  381. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  382. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  383. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  384. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  385. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  386. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  387. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  388. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  389. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  390. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  391. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  392. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  393. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  394. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  395. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  396. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  397. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  398. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  399. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  400. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  401. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  402. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  403. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  404. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  405. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  406. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  407. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  408. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  409. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  410. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  411. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  412. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  413. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  414. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  415. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  416. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/state.py +0 -0
  417. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/state_degradation.py +0 -0
  418. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/state_ops.py +0 -0
  419. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/train_ledger.py +0 -0
  420. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/train_roadmap.py +0 -0
  421. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/train_runner.py +0 -0
  422. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/verification_evidence.py +0 -0
  423. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  424. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  425. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/worker_pool.py +0 -0
  426. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  427. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  428. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  429. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  430. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_advisory_mode.py +0 -0
  431. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_alias_install.py +0 -0
  432. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_backcompat.py +0 -0
  433. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_backing_omnigent.py +0 -0
  434. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_cli_legacy.py +0 -0
  435. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_composition.py +0 -0
  436. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_concurrency.py +0 -0
  437. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_config.py +0 -0
  438. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_golden.py +0 -0
  439. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_ingestion.py +0 -0
  440. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_integration.py +0 -0
  441. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_matrix.py +0 -0
  442. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_observability.py +0 -0
  443. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_presets.py +0 -0
  444. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_registries.py +0 -0
  445. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_resolver.py +0 -0
  446. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_schema.py +0 -0
  447. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_advisor_twin_alias_legacy.py +0 -0
  448. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_agent_runtime_provider_cs08.py +0 -0
  449. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_autosel.py +0 -0
  450. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_branchgov_preflight.py +0 -0
  451. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_certificate_tier.py +0 -0
  452. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_cli_train_status_45.py +0 -0
  453. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_closeout_break_glass_cli.py +0 -0
  454. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_closeout_classifier.py +0 -0
  455. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_closeout_convergence_fixes.py +0 -0
  456. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_closeout_exception_vocab.py +0 -0
  457. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_closeout_validator_hook.py +0 -0
  458. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_closeout_verification_gate.py +0 -0
  459. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_codex_effort_max_clamp_49.py +0 -0
  460. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_conformance_golden.py +0 -0
  461. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_consiliency_dual_layout.py +0 -0
  462. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_consiliency_gates.py +0 -0
  463. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_consiliency_ingest.py +0 -0
  464. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_consiliency_scaffold.py +0 -0
  465. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_coordinator_wave_loop.py +0 -0
  466. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_discovery_hygiene_legacy.py +0 -0
  467. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  468. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_helper.py +0 -0
  469. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  470. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_doc_delta_validator.py +0 -0
  471. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_docs_audit.py +0 -0
  472. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_docs_freshness.py +0 -0
  473. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_dotfiles_tree.py +0 -0
  474. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_execgov.py +0 -0
  475. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_execreg_launch_registry.py +0 -0
  476. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_execute_phase_handoff_mode.py +0 -0
  477. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_execution_policy_tiering.py +0 -0
  478. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_executor_availability.py +0 -0
  479. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_export_schema.py +0 -0
  480. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_fleet_map.py +0 -0
  481. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_fleet_metrics.py +0 -0
  482. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_fleet_metrics_export.py +0 -0
  483. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_gate_a_wheel_isolation.py +0 -0
  484. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_gate_posture.py +0 -0
  485. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_git_discipline.py +0 -0
  486. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_git_grounded_projection.py +0 -0
  487. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_disjointness_model_first.py +0 -0
  488. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_e2e.py +0 -0
  489. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_gate_crfixes.py +0 -0
  490. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_planning_gate.py +0 -0
  491. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_premerge.py +0 -0
  492. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_premerge_live.py +0 -0
  493. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_governed_review.py +0 -0
  494. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_grokexec.py +0 -0
  495. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_hotfix_lane.py +0 -0
  496. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_injection_skill_failloud.py +0 -0
  497. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_lane_ir_override.py +0 -0
  498. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_launchspec_golden.py +0 -0
  499. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_lease_store.py +0 -0
  500. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_lease_store_conformance.py +0 -0
  501. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_ledger_serialization.py +0 -0
  502. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_model_class_policy.py +0 -0
  503. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_model_id_source_guard.py +0 -0
  504. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_observability_alerting.py +0 -0
  505. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_advisory.py +0 -0
  506. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_advisory_cli.py +0 -0
  507. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  508. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_authority_boundary.py +0 -0
  509. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_contract_drift.py +0 -0
  510. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_contract_imports.py +0 -0
  511. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_contract_pin.py +0 -0
  512. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_core_api.py +0 -0
  513. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_provenance.py +0 -0
  514. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_ci.py +0 -0
  515. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_cli.py +0 -0
  516. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_output.py +0 -0
  517. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_runtime.py +0 -0
  518. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_redaction.py +0 -0
  519. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_release_surface.py +0 -0
  520. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_schema_validation.py +0 -0
  521. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_vectors.py +0 -0
  522. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_advisory_mode_63.py +0 -0
  523. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_context_refs_114.py +0 -0
  524. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_invoker.py +0 -0
  525. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_invoker_timeout_argv.py +0 -0
  526. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  527. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_per_leg_model_66.py +0 -0
  528. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_streaming_verdicts.py +0 -0
  529. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_tui_eof_48.py +0 -0
  530. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_panel_verdict_summary.py +0 -0
  531. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_parallel_dispatch_backcompat.py +0 -0
  532. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_parallel_dispatch_cli.py +0 -0
  533. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_adoption_bundle.py +0 -0
  534. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  535. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_dependency.py +0 -0
  536. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  537. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_injection.py +0 -0
  538. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_modular.py +0 -0
  539. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  540. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  541. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_schema_export.py +0 -0
  542. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_schema_source.py +0 -0
  543. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  544. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  545. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_build_bundle.py +0 -0
  546. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_classifier.py +0 -0
  547. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  548. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  549. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  550. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  551. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_security.py +0 -0
  552. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  553. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  554. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  555. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_route_selection.py +0 -0
  556. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_cli.py +0 -0
  557. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  558. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_control_only.py +0 -0
  559. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_event.py +0 -0
  560. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  561. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_hardening.py +0 -0
  562. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_schema.py +0 -0
  563. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_validation.py +0 -0
  564. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_collaborator_citation.py +0 -0
  565. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_collaborator_docs.py +0 -0
  566. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  567. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  568. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  569. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  570. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  571. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_discovery.py +0 -0
  572. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_docs.py +0 -0
  573. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  574. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  575. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  576. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  577. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_portal.py +0 -0
  578. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  579. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_drift_audit.py +0 -0
  580. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  581. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  582. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_events_migration.py +0 -0
  583. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit.py +0 -0
  584. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  585. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  586. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  587. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  588. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_execution_policy.py +0 -0
  589. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_executor_degradation.py +0 -0
  590. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_full_phase_mode.py +0 -0
  591. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_handoff_migration.py +0 -0
  592. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_init.py +0 -0
  593. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_injection.py +0 -0
  594. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_install_status.py +0 -0
  595. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  596. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_harnesses.py +0 -0
  597. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_ir.py +0 -0
  598. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  599. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_scheduler.py +0 -0
  600. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_launcher.py +0 -0
  601. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_ledger_debug.py +0 -0
  602. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_ledger_dedup.py +0 -0
  603. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_live_adapters.py +0 -0
  604. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_maintenance.py +0 -0
  605. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_metrics.py +0 -0
  606. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_migration_regressions.py +0 -0
  607. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  608. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  609. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  610. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_models.py +0 -0
  611. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_native_flags.py +0 -0
  612. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  613. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pi_executor.py +0 -0
  614. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  615. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  616. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  617. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  618. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  619. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_mode.py +0 -0
  620. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  621. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_plan_manifest.py +0 -0
  622. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  623. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_planner_validation.py +0 -0
  624. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_policy.py +0 -0
  625. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_protocol_contract.py +0 -0
  626. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_provenance.py +0 -0
  627. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  628. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  629. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  630. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reducers.py +0 -0
  631. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  632. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  633. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  634. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_roadmap_validate.py +0 -0
  635. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_rotation.py +0 -0
  636. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runner.py +0 -0
  637. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  638. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_boundary.py +0 -0
  639. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_decouple.py +0 -0
  640. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_package_data.py +0 -0
  641. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_projection.py +0 -0
  642. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_schema_flow.py +0 -0
  643. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  644. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  645. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_contract.py +0 -0
  646. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  647. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_install.py +0 -0
  648. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  649. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_smoke_blockers.py +0 -0
  650. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  651. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_smoke_reentry.py +0 -0
  652. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  653. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  654. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  655. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_state.py +0 -0
  656. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  657. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  658. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  659. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  660. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  661. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v22_e2e.py +0 -0
  662. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v22_principles.py +0 -0
  663. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  664. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_reconcile.py +0 -0
  665. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_sched.py +0 -0
  666. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_schedharden.py +0 -0
  667. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_wave_runner.py +0 -0
  668. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_work_unit_observability.py +0 -0
  669. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_work_unit_runner.py +0 -0
  670. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_work_unit_state.py +0 -0
  671. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_worktrees.py +0 -0
  672. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  673. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_phase_worktree_executor.py +0 -0
  674. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  675. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  676. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  677. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_flag.py +0 -0
  678. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_markers.py +0 -0
  679. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  680. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  681. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  682. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  683. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  684. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_pkg_layout_freeze.py +0 -0
  685. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_plan_ir_iter_waves.py +0 -0
  686. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_preflight_verification.py +0 -0
  687. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_proc_cpu.py +0 -0
  688. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_prune_merged_worktrees_script.py +0 -0
  689. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_publishing.py +0 -0
  690. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  691. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_reconcile_verification_log.py +0 -0
  692. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_reflection_sync.py +0 -0
  693. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_release_pin_autotrack.py +0 -0
  694. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_repo_validation.py +0 -0
  695. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_review_summary.py +0 -0
  696. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_route_log.py +0 -0
  697. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_route_policy_conformance.py +0 -0
  698. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_routing_invariants.py +0 -0
  699. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_runtime_state_mirror_agreement.py +0 -0
  700. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_sibling_matcher_patterns.py +0 -0
  701. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skill_bundle_pinned.py +0 -0
  702. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skill_install_body_expansion.py +0 -0
  703. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skill_plan_manifest_write.py +0 -0
  704. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skill_sources_seam.py +0 -0
  705. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skills_bundle_drift.py +0 -0
  706. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skills_canon_parity.py +0 -0
  707. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_skills_src_claude_literal_lint.py +0 -0
  708. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_spec_conformance_gate.py +0 -0
  709. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  710. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_sync_skills_apply_failloud.py +0 -0
  711. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_train_e2e.py +0 -0
  712. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_train_invariants.py +0 -0
  713. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_train_merge.py +0 -0
  714. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_train_order_only_deps_47.py +0 -0
  715. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_train_roadmap.py +0 -0
  716. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_train_runner.py +0 -0
  717. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  718. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  719. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_verification_evidence.py +0 -0
  720. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_verification_evidence_validator.py +0 -0
  721. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_visual_evidence_validator.py +0 -0
  722. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_workerpool_failure_isolation.py +0 -0
  723. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_workerpool_parallel.py +0 -0
  724. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_workerpool_worktree_alloc.py +0 -0
  725. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.2}/tests/test_worktree_index.py +0 -0
@@ -3,3 +3,4 @@ include protocol/protocol.md
3
3
  recursive-include src/phase_loop_runtime *.py py.typed
4
4
  recursive-include src/phase_loop_runtime/baml_src *.baml
5
5
  recursive-include src/phase_loop_runtime/advisor_board *.toml *.md
6
+ recursive-include src/phase_loop_runtime/deploy *.service
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.7.0
3
+ Version: 0.7.2
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.0
@@ -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.0"
7
+ version = "0.7.2"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -111,6 +111,7 @@ phase_loop_runtime = [
111
111
  "_contract_docs/**",
112
112
  "_test_fixtures/**",
113
113
  "skills_bundle/**",
114
+ "deploy/*.service",
114
115
  # advisor_board ships its frozen config-format fixture + contract doc so a
115
116
  # pinned install resolves them via importlib.resources (ABDFREEZE).
116
117
  "advisor_board/fixtures/*.toml",
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.0"
21
+ __version__ = "0.7.2"
@@ -254,7 +254,13 @@ def build_parser() -> argparse.ArgumentParser:
254
254
  parser.add_argument("--quiet-warning-seconds", type=int, default=600)
255
255
  parser.add_argument("--quiet-blocker-seconds", type=int, default=1800)
256
256
  parser.add_argument("--no-heartbeat", action="store_true")
257
- parser.add_argument("--closeout-mode", choices=CLOSEOUT_MODES, default="manual")
257
+ # PUSHFLOW: SUPPRESS (not default="manual") so an unset closeout mode leaves NO
258
+ # attribute — `_resolve_run_closeout_mode` then applies the command-aware default
259
+ # (push for the outer run loop, manual elsewhere). A value passed in THIS
260
+ # before-subcommand position survives the subcommand parse (the run/resume/dry-run
261
+ # subparser also uses SUPPRESS), so an explicit `--closeout-mode` wins in BOTH
262
+ # option positions (was clobbered to the subparser default before).
263
+ parser.add_argument("--closeout-mode", choices=CLOSEOUT_MODES, default=argparse.SUPPRESS)
258
264
  parser.add_argument("--work-unit-mode", action="store_true")
259
265
  parser.add_argument("--rotate-executors")
260
266
  parser.add_argument("--rotation-mode", choices=("phase", "work_unit"), default="phase")
@@ -285,7 +291,24 @@ def build_parser() -> argparse.ArgumentParser:
285
291
  sub.add_argument("--mode", help="The execution mode: execute, repair, or review.")
286
292
  _add_common_subparser_args(sub, name=name)
287
293
  if name in {"run", "resume", "dry-run"}:
288
- sub.add_argument("--closeout-mode", choices=CLOSEOUT_MODES)
294
+ # PUSHFLOW: closeout pushes by DEFAULT for run/resume/dry-run (the outer
295
+ # orchestration loop). An explicit --closeout-mode always wins; when none
296
+ # is given the default is `push` (was `manual`), so phase-owned work lands
297
+ # on origin instead of accumulating locally. --no-push restores the prior
298
+ # `manual` default for operators who want to withhold the push. The push
299
+ # itself degrades gracefully with no push remote (recorded as push_refused
300
+ # by the runner, never an error). See _resolve_run_closeout_mode.
301
+ # SUPPRESS so an unset value does NOT overwrite a before-subcommand
302
+ # `--closeout-mode` with None, and so the absent case falls through to the
303
+ # command-aware push default in _resolve_run_closeout_mode.
304
+ sub.add_argument("--closeout-mode", choices=CLOSEOUT_MODES, default=argparse.SUPPRESS)
305
+ sub.add_argument(
306
+ "--no-push",
307
+ action="store_true",
308
+ help="Suppress the push-by-default closeout: fall back to manual "
309
+ "closeout (the prior default) instead of pushing phase-owned work to "
310
+ "origin. Ignored when --closeout-mode is given explicitly.",
311
+ )
289
312
  sub.add_argument(
290
313
  "--governed",
291
314
  action="store_true",
@@ -346,6 +369,13 @@ def build_parser() -> argparse.ArgumentParser:
346
369
  )
347
370
  sub.add_argument("--path", help="Report freshness holders for a single repo-relative path. Omit to report every path touched by an active worktree.")
348
371
  sub.add_argument("--base", help="Diff base ref (default: origin/<default-branch>, falling back to origin/main).")
372
+ sub.add_argument(
373
+ "--fail-on-ahead",
374
+ action="store_true",
375
+ help="PUSHFLOW opt-in soft-block: exit non-zero when any worktree is more than "
376
+ "AHEAD_WARN_THRESHOLD commits ahead of the base ref (unpushed local divergence). "
377
+ "Default is WARN-only; never human_required.",
378
+ )
349
379
  if name == "consiliency-lease":
350
380
  sub.description = (
351
381
  "CS-0.10c: local-file LeaseStore -- soft, TTL+heartbeat path-set leases so parallel "
@@ -755,18 +785,37 @@ def build_parser() -> argparse.ArgumentParser:
755
785
  name,
756
786
  help="Probe or resolve an exact authenticated Codex task-message source.",
757
787
  )
758
- task_message_sub.add_argument("--endpoint", required=True, help="Authenticated Codex app-server ws:// or wss:// endpoint.")
788
+ task_message_transport = task_message_sub.add_mutually_exclusive_group(required=True)
789
+ task_message_transport.add_argument("--endpoint", help="Authenticated Codex app-server ws:// or wss:// endpoint.")
790
+ task_message_transport.add_argument("--broker-url", help="Authenticated task-message broker HTTPS endpoint.")
791
+ task_message_transport.add_argument(
792
+ "--control-socket",
793
+ help="Absolute local managed app-server control socket; use only on the source host over an independently authenticated channel.",
794
+ )
759
795
  task_message_sub.add_argument("--authority", required=True, help="Pinned source authority identity.")
760
796
  task_message_sub.add_argument(
761
797
  "--token-env",
762
- required=True,
798
+ required=False,
763
799
  help="Environment variable containing the app-server bearer token; the token is never printed.",
764
800
  )
765
801
  task_message_sub.add_argument("--timeout-seconds", type=float, default=10.0)
802
+ task_message_sub.add_argument("--heartbeat-timeout-seconds", type=float, default=15.0)
766
803
  if name == "task-message-resolve":
767
804
  task_message_sub.add_argument("--thread-id", required=True)
768
805
  task_message_sub.add_argument("--message-id", required=True)
769
806
  task_message_sub.add_argument("--max-source-age-seconds", type=int, default=900)
807
+ task_message_broker_sub = subparsers.add_parser(
808
+ "task-message-broker-serve",
809
+ help="Serve the loopback-only authenticated task-message broker.",
810
+ )
811
+ task_message_broker_sub.add_argument("--host", default="127.0.0.1")
812
+ task_message_broker_sub.add_argument("--port", type=int, default=18765)
813
+ task_message_broker_sub.add_argument("--control-socket", required=True)
814
+ task_message_broker_sub.add_argument("--authority", required=True)
815
+ task_message_broker_sub.add_argument("--token-sha256", required=True)
816
+ task_message_broker_sub.add_argument("--agent-harness-sha", required=True)
817
+ task_message_broker_sub.add_argument("--heartbeat-seconds", type=float, default=5.0)
818
+ task_message_broker_sub.add_argument("--timeout-seconds", type=float, default=10.0)
770
819
  # DECOUPLE SL-1: dotfiles-domain commands are added here, only when a profile
771
820
  # plugin is installed/opted-in. A clean wheel registers none.
772
821
  _register_profile_commands(subparsers)
@@ -812,6 +861,32 @@ def main(argv: list[str] | None = None) -> int:
812
861
  return 2
813
862
 
814
863
 
864
+ def _resolve_run_closeout_mode(args: argparse.Namespace, command: str) -> str:
865
+ """PUSHFLOW: resolve the effective closeout mode for the outer run loop.
866
+
867
+ Precedence (explicit-wins in EITHER option position, then the flipped default):
868
+
869
+ 1. An explicit ``--closeout-mode`` always wins. Both the top-level and the
870
+ ``run``/``resume``/``dry-run`` subparser use ``argparse.SUPPRESS``, so the
871
+ attribute exists only when the operator passed it (before OR after the
872
+ subcommand); a value given before the subcommand is no longer clobbered.
873
+ 2. Otherwise, for the outer orchestration loop (``run``/``resume``/``dry-run``,
874
+ including the implicit no-subcommand forms) the default flips to ``"push"``
875
+ so phase-owned work lands on origin instead of accumulating unpushed — unless
876
+ ``--no-push`` restores ``"manual"``. The runner degrades to ``push_refused``
877
+ when there is no push remote (never an error).
878
+ 3. Every other command that reaches ``run_loop`` (``execute``, ``maintain-skills``)
879
+ keeps the prior ``"manual"`` default — the push flip is scoped to the outer
880
+ loop and must never turn an inner ``execute`` leg into a pusher.
881
+ """
882
+ explicit = getattr(args, "closeout_mode", None)
883
+ if explicit:
884
+ return explicit
885
+ if command in {"run", "resume", "dry-run"}:
886
+ return "manual" if getattr(args, "no_push", False) else "push"
887
+ return "manual"
888
+
889
+
815
890
  def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: str) -> int:
816
891
  allow_cross_phase_dirty_reason = getattr(args, "allow_cross_phase_dirty", None)
817
892
  if allow_cross_phase_dirty_reason is not None:
@@ -884,6 +959,8 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
884
959
  return _outside_agent_validate_command(args=args)
885
960
  if command in {"task-message-probe", "task-message-resolve"}:
886
961
  return _task_message_command(args=args, resolve=command == "task-message-resolve")
962
+ if command == "task-message-broker-serve":
963
+ return _task_message_broker_serve_command(args=args)
887
964
  if command == "advisor-board":
888
965
  return _advisor_board_command(args=args)
889
966
  if command == "docs-audit":
@@ -918,6 +995,20 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
918
995
  print(json.dumps(report.to_json(), indent=2))
919
996
  else:
920
997
  print(worktree_index.render_human(report))
998
+ # PUSHFLOW: opt-in soft-block on unpushed local divergence. WARN-only by
999
+ # default (the count is already in the report/render); --fail-on-ahead makes
1000
+ # it exit non-zero. Never human_required.
1001
+ if getattr(args, "fail_on_ahead", False):
1002
+ over = worktree_index.worktrees_ahead_over_threshold(report)
1003
+ if over:
1004
+ names = ", ".join(f"{wt.branch or wt.path} (+{wt.commits_ahead_of_origin})" for wt in over)
1005
+ print(
1006
+ f"FAIL: {len(over)} worktree(s) more than {worktree_index.AHEAD_WARN_THRESHOLD} "
1007
+ f"commits ahead of {report.base_ref} (unpushed local divergence): {names}",
1008
+ file=sys.stderr,
1009
+ flush=True,
1010
+ )
1011
+ return 1
921
1012
  return 0
922
1013
  if command == "consiliency-lease":
923
1014
  repo_arg = args.repo or "."
@@ -1221,7 +1312,7 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1221
1312
  quiet_warning_seconds=args.quiet_warning_seconds or 600,
1222
1313
  quiet_blocker_seconds=args.quiet_blocker_seconds or 1800,
1223
1314
  heartbeat_enabled=not bool(args.no_heartbeat),
1224
- closeout_mode=args.closeout_mode or "manual",
1315
+ closeout_mode=_resolve_run_closeout_mode(args, command),
1225
1316
  enable_tier_3=bool(getattr(args, "enable_tier_3", False)),
1226
1317
  tier_3_budget=3 if getattr(args, "tier_3_budget", 3) is None else getattr(args, "tier_3_budget", 3),
1227
1318
  command_adapter_name=args.command_name,
@@ -1269,6 +1360,19 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1269
1360
  return _run_returncode(snapshot, results)
1270
1361
 
1271
1362
 
1363
+ def _native_agent_request_json(leg: object) -> dict | None:
1364
+ """Serialize a leg's ``needs_native_agent`` request (ABDNATIVE / #183) to a
1365
+ JSON-safe dict, or ``None`` when the seat is not deferred to a native Agent.
1366
+
1367
+ Structural (``getattr`` + ``to_dict``) so it does not force a ``panel_invoker``
1368
+ import onto the bare CLI path."""
1369
+ request = getattr(leg, "needs_native_agent", None)
1370
+ if request is None:
1371
+ return None
1372
+ to_dict = getattr(request, "to_dict", None)
1373
+ return to_dict() if callable(to_dict) else None
1374
+
1375
+
1272
1376
  def _advisor_board_command(*, args: argparse.Namespace) -> int:
1273
1377
  """LEGACY (CLEANSHIP P7): run the 4-vendor advisor board as the RUNNABLE
1274
1378
  agent-facing default. Composes availability-aware seats via
@@ -1328,10 +1432,43 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1328
1432
  # expected non-OK), the board is below its independence floor → exit nonzero.
1329
1433
  usable = usable_count >= FLOOR_SEATS
1330
1434
  exit_code = 0 if usable else 1
1435
+ # #183 / ABDNATIVE: LOUD requested-vs-delivered shortfall. A floor-satisfying
1436
+ # board can still be SHORT an explicitly-requested seat (the claude/Fable seat
1437
+ # deferred to a native Agent), and a bare `usable:true` masks that. Report
1438
+ # requested (every composed seat), delivered (usable OK+text), and — the
1439
+ # affordance — the seats a native harness can FILL itself (each carries the
1440
+ # typed `needs_native_agent` request). Exit stays floor-based (unchanged): the
1441
+ # shortfall is a REPORTING signal, not a gate flip.
1442
+ # CR F3: derive unfilled seats PER-LEG (`not leg.usable`), never by seat_key
1443
+ # membership. Seats are collision-aware LABELS (schema permits byte-identical
1444
+ # seats with the SAME key), so a key-set difference would let a duplicate key —
1445
+ # one seat OK, its twin failed — hide the failed twin: requested=2/delivered=1
1446
+ # but zero unfilled reported = a silent drop. Per-leg is positional and exact.
1447
+ requested_seats = len(board.seats)
1448
+ unfilled_legs = [leg for leg in result.legs if not leg.usable]
1449
+ fillable_legs = [leg for leg in unfilled_legs if leg.needs_native_agent is not None]
1450
+ shortfall = {
1451
+ "requested_seats": requested_seats,
1452
+ "delivered_seats": usable_count,
1453
+ "unfilled_seats": [
1454
+ {
1455
+ "seat_key": leg.seat_key,
1456
+ "leg": leg.leg,
1457
+ "status": leg.status,
1458
+ "needs_native_agent": _native_agent_request_json(leg),
1459
+ }
1460
+ for leg in unfilled_legs
1461
+ ],
1462
+ "natively_fillable_seats": len(fillable_legs),
1463
+ }
1331
1464
  if bool(getattr(args, "json", False)):
1332
1465
  payload = {
1333
1466
  "board": board.name,
1334
1467
  "usable": usable,
1468
+ # Requested-vs-delivered so a Bash-invoking harness sees a dropped seat.
1469
+ "requested_seats": requested_seats,
1470
+ "delivered_seats": usable_count,
1471
+ "shortfall": shortfall,
1335
1472
  "independence": {
1336
1473
  "level": independence.level,
1337
1474
  "distinct_vendors": independence.distinct_vendors,
@@ -1347,6 +1484,9 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1347
1484
  "status": leg.status,
1348
1485
  "detail": leg.detail,
1349
1486
  "text": leg.text,
1487
+ # ABDNATIVE (#183): a deferred claude/Fable seat carries the
1488
+ # typed native-fill request the harness must run; None otherwise.
1489
+ "needs_native_agent": _native_agent_request_json(leg),
1350
1490
  }
1351
1491
  for leg in result.legs
1352
1492
  ],
@@ -1369,6 +1509,18 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1369
1509
  # The statuses/verdicts are ADVISORY evidence — the operator reconciles them; a
1370
1510
  # non-OK leg (DEGRADED/UNAVAILABLE/…) is a gap to fill, not a passed review.
1371
1511
  print("advisor-board: verdicts are advisory — reconcile the legs; check each leg status.")
1512
+ # #183: surface the requested-vs-delivered shortfall LOUDLY (stderr) so a
1513
+ # floor-satisfying board is never mistaken for the full requested board, and
1514
+ # name the seats a native harness can fill itself.
1515
+ if unfilled_legs:
1516
+ print(
1517
+ f"advisor-board: delivered {usable_count}/{requested_seats} requested seats — "
1518
+ f"{len(unfilled_legs)} unfilled ({len(fillable_legs)} natively fillable):",
1519
+ file=sys.stderr,
1520
+ )
1521
+ for leg in unfilled_legs:
1522
+ fill = " → run a native Fable Agent to fill this seat" if leg.needs_native_agent else ""
1523
+ print(f"advisor-board: [{leg.status}] {leg.seat_key}{fill}", file=sys.stderr)
1372
1524
  if not usable:
1373
1525
  print(
1374
1526
  f"advisor-board: only {usable_count} usable review leg(s) < floor {FLOOR_SEATS} "
@@ -1453,8 +1605,7 @@ def _outside_agent_validate_command(args: argparse.Namespace) -> int:
1453
1605
  def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
1454
1606
  from .task_message_resolver import CodexAppServerTaskMessageResolver, TaskMessageResolverError
1455
1607
 
1456
- token = os.environ.get(args.token_env, "")
1457
- if not token:
1608
+ if args.control_socket and args.token_env:
1458
1609
  error = TaskMessageResolverError(
1459
1610
  "attestation_invalid",
1460
1611
  authority=args.authority,
@@ -1463,19 +1614,50 @@ def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
1463
1614
  )
1464
1615
  print(json.dumps(error.metadata(), indent=2, sort_keys=True))
1465
1616
  return 2
1466
- try:
1467
- resolver = CodexAppServerTaskMessageResolver(
1468
- endpoint=args.endpoint,
1469
- bearer_token=token,
1617
+ remote_transport = bool(args.endpoint or args.broker_url)
1618
+ token = os.environ.get(args.token_env, "") if remote_transport and args.token_env else ""
1619
+ if remote_transport and not token:
1620
+ error = TaskMessageResolverError(
1621
+ "attestation_invalid",
1470
1622
  authority=args.authority,
1471
- max_source_age_seconds=getattr(args, "max_source_age_seconds", 900),
1472
- timeout_seconds=args.timeout_seconds,
1473
- )
1474
- payload = (
1475
- resolver.resolve(thread_id=args.thread_id, message_id=args.message_id).payload()
1476
- if resolve
1477
- else resolver.probe()
1623
+ thread_id=getattr(args, "thread_id", None),
1624
+ message_id=getattr(args, "message_id", None),
1478
1625
  )
1626
+ print(json.dumps(error.metadata(), indent=2, sort_keys=True))
1627
+ return 2
1628
+ try:
1629
+ if args.broker_url:
1630
+ from .task_message_broker_client import TaskMessageBrokerClient
1631
+
1632
+ broker = TaskMessageBrokerClient(
1633
+ broker_url=args.broker_url,
1634
+ bearer_token=token,
1635
+ authority=args.authority,
1636
+ heartbeat_timeout_seconds=args.heartbeat_timeout_seconds,
1637
+ )
1638
+ payload = (
1639
+ broker.resolve(
1640
+ thread_id=args.thread_id,
1641
+ message_id=args.message_id,
1642
+ max_source_age_seconds=args.max_source_age_seconds,
1643
+ )
1644
+ if resolve
1645
+ else broker.probe()
1646
+ )
1647
+ else:
1648
+ resolver = CodexAppServerTaskMessageResolver(
1649
+ endpoint=args.endpoint,
1650
+ bearer_token=token or None,
1651
+ control_socket=args.control_socket,
1652
+ authority=args.authority,
1653
+ max_source_age_seconds=getattr(args, "max_source_age_seconds", 900),
1654
+ timeout_seconds=args.timeout_seconds,
1655
+ )
1656
+ payload = (
1657
+ resolver.resolve(thread_id=args.thread_id, message_id=args.message_id).payload()
1658
+ if resolve
1659
+ else resolver.probe()
1660
+ )
1479
1661
  except ValueError:
1480
1662
  error = TaskMessageResolverError(
1481
1663
  "attestation_invalid",
@@ -1492,6 +1674,39 @@ def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
1492
1674
  return 0
1493
1675
 
1494
1676
 
1677
+ def _task_message_broker_serve_command(args: argparse.Namespace) -> int:
1678
+ from .task_message_broker import BrokerConfig, TaskMessageBroker, build_server, verified_installed_agent_harness_sha
1679
+ from .task_message_resolver import CodexAppServerTaskMessageResolver
1680
+
1681
+ try:
1682
+ agent_harness_sha = verified_installed_agent_harness_sha(args.agent_harness_sha)
1683
+ config = BrokerConfig(
1684
+ authority=args.authority,
1685
+ token_sha256=args.token_sha256,
1686
+ agent_harness_sha=agent_harness_sha,
1687
+ heartbeat_seconds=args.heartbeat_seconds,
1688
+ )
1689
+
1690
+ def resolver_factory(max_source_age_seconds: int) -> CodexAppServerTaskMessageResolver:
1691
+ return CodexAppServerTaskMessageResolver(
1692
+ control_socket=args.control_socket,
1693
+ authority=args.authority,
1694
+ max_source_age_seconds=max_source_age_seconds,
1695
+ timeout_seconds=args.timeout_seconds,
1696
+ )
1697
+
1698
+ server = build_server(args.host, args.port, TaskMessageBroker(config, resolver_factory))
1699
+ except ValueError:
1700
+ return 2
1701
+ try:
1702
+ server.serve_forever()
1703
+ except KeyboardInterrupt:
1704
+ return 130
1705
+ finally:
1706
+ server.server_close()
1707
+ return 0
1708
+
1709
+
1495
1710
  def _parse_lane_ir_override(parser: argparse.ArgumentParser, args: argparse.Namespace, command: str) -> tuple[str, ...]:
1496
1711
  raw = getattr(args, "allow_lane_ir_override", None)
1497
1712
  if raw is None:
@@ -36,12 +36,24 @@ REVIEW_MODE_ENV = "PHASE_LOOP_REVIEW"
36
36
 
37
37
  @dataclass(frozen=True)
38
38
  class ReviewFinding:
39
- """A single review-gate observation about a closeout."""
39
+ """A single review-gate observation about a closeout.
40
+
41
+ ``reason`` is the SHORT gate-generated summary (``panel leg gemini raised a
42
+ blocking concern``). ``body`` (issue #80) is the ACTUAL panel finding text — the
43
+ concrete review a non-human repair reads to know WHAT to fix; the runner's
44
+ panel scratch dir is torn down after the leg completes, so if the body is not
45
+ carried here it is lost. ``reviewed_sha`` (issue #88) binds the verdict to the
46
+ exact reviewed commit so a consumer can reject a verdict computed against a
47
+ different head (SHA-bound agent-review-gate). Both are optional so every
48
+ existing caller and persisted finding stay byte-for-byte unchanged.
49
+ """
40
50
 
41
51
  code: str
42
52
  reason: str
43
53
  severity: ReviewSeverity = "warn"
44
54
  blocker_class: str | None = None
55
+ body: str | None = None
56
+ reviewed_sha: str | None = None
45
57
 
46
58
  def __post_init__(self) -> None:
47
59
  if self.severity not in REVIEW_SEVERITIES:
@@ -56,6 +68,13 @@ class ReviewFinding:
56
68
  }
57
69
  if self.blocker_class is not None:
58
70
  payload["blocker_class"] = self.blocker_class
71
+ # #80: persist the actual finding body so it survives the panel-scratch
72
+ # teardown and reaches durable state/handoff/ledger artifacts.
73
+ if self.body is not None:
74
+ payload["body"] = self.body
75
+ # #88: persist the reviewed commit the verdict is bound to.
76
+ if self.reviewed_sha is not None:
77
+ payload["reviewed_sha"] = self.reviewed_sha
59
78
  return payload
60
79
 
61
80
 
@@ -177,6 +196,66 @@ def apply_review_findings(
177
196
  }
178
197
 
179
198
 
199
+ def verdict_binds_to(finding: ReviewFinding, head_sha: str | None) -> bool:
200
+ """#88 SHA-bound agent-review-gate: True iff ``finding``'s verdict was computed
201
+ against ``head_sha``.
202
+
203
+ A finding with no recorded ``reviewed_sha`` is UNBOUND — it cannot vouch for any
204
+ specific commit, so it never binds (fail-closed). A ``head_sha`` of ``None``
205
+ (unknown head) likewise cannot be vouched for. Binding is an exact match: a
206
+ verdict reviewed at an earlier head must NOT be trusted for a newer head."""
207
+ if not finding.reviewed_sha or not head_sha:
208
+ return False
209
+ return finding.reviewed_sha == head_sha
210
+
211
+
212
+ def ratification_findings(decision) -> tuple[ReviewFinding, ...]:
213
+ """Translate a ``ratification_policy.RatificationDecision`` into closeout findings
214
+ (the posture wiring for IF-0-POLICY-1).
215
+
216
+ * ``escalate`` -> a single ``block`` finding with ``blocker_class=
217
+ "review_gate_block"`` — a NON-human, agent-recoverable hold (never
218
+ ``human_required``), carrying the actionable shortfall detail as ``body`` and
219
+ the reviewed SHA (#88 binding).
220
+ * ``proceed_degraded`` -> a single ``warn`` finding recording the durable audit
221
+ trail that a degraded board was knowingly accepted (the loop continues).
222
+ * ``ratified`` -> no finding (a clean pass is non-gating; the caller persists
223
+ ``decision.to_audit()`` separately if it wants the positive record).
224
+
225
+ Import is function-local so this module has no hard dependency on
226
+ ``ratification_policy`` (and there is no import cycle).
227
+ """
228
+ from .ratification_policy import ESCALATE, PROCEED_DEGRADED, shortfall_detail
229
+
230
+ detail = shortfall_detail(decision)
231
+ reviewed_sha = decision.facts.reviewed_sha
232
+ if decision.status == ESCALATE:
233
+ return (
234
+ ReviewFinding(
235
+ code=f"ratification_shortfall_{decision.gate or 'gate'}",
236
+ reason=f"ratification policy not met for {decision.gate or 'gate'}: {detail}",
237
+ severity="block",
238
+ blocker_class="review_gate_block",
239
+ body=detail,
240
+ reviewed_sha=reviewed_sha,
241
+ ),
242
+ )
243
+ if decision.status == PROCEED_DEGRADED:
244
+ return (
245
+ ReviewFinding(
246
+ code=f"ratification_degraded_{decision.gate or 'gate'}",
247
+ reason=(
248
+ f"ratification proceeded on a degraded board for "
249
+ f"{decision.gate or 'gate'}: {detail}"
250
+ ),
251
+ severity="warn",
252
+ body=detail,
253
+ reviewed_sha=reviewed_sha,
254
+ ),
255
+ )
256
+ return ()
257
+
258
+
180
259
  def load_builtin_closeout_validators() -> None:
181
260
  """Import the built-in validator modules so they self-register.
182
261
 
@@ -0,0 +1,34 @@
1
+ [Unit]
2
+ Description=Phase-loop task-message source broker
3
+ After=network-online.target
4
+ Wants=network-online.target
5
+
6
+ [Service]
7
+ Type=simple
8
+ User=viperjuice
9
+ Group=viperjuice
10
+ EnvironmentFile=/etc/phase-loop/task-message-broker.env
11
+ ExecStart=/opt/phase-loop-task-message-broker/bin/phase-loop task-message-broker-serve --host 127.0.0.1 --port 18765 --control-socket /home/viperjuice/.codex/app-server-control/app-server-control.sock --authority codex-app-server://claw.taile09692.ts.net --token-sha256 ${TASK_MESSAGE_TOKEN_SHA256} --agent-harness-sha ${AGENT_HARNESS_SHA}
12
+ Restart=on-failure
13
+ RestartSec=2
14
+ UMask=0077
15
+ NoNewPrivileges=yes
16
+ PrivateDevices=yes
17
+ PrivateTmp=yes
18
+ ProtectHome=tmpfs
19
+ BindReadOnlyPaths=/home/viperjuice/.codex/app-server-control/app-server-control.sock
20
+ ProtectSystem=strict
21
+ InaccessiblePaths=/proc
22
+ ProtectControlGroups=yes
23
+ ProtectKernelModules=yes
24
+ ProtectKernelTunables=yes
25
+ LockPersonality=yes
26
+ RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
27
+ RestrictRealtime=yes
28
+ RestrictSUIDSGID=yes
29
+ SystemCallArchitectures=native
30
+ IPAddressDeny=any
31
+ IPAddressAllow=localhost
32
+
33
+ [Install]
34
+ WantedBy=multi-user.target
@@ -1114,18 +1114,23 @@ def _discovery_allow_completed() -> bool:
1114
1114
 
1115
1115
 
1116
1116
  def _phase_manifest_entries(repo: Path) -> tuple[object, ...]:
1117
+ # agent-harness#164 (IF-0-MANIFEST-1): consume the manifest PER-ENTRY. A
1118
+ # structural failure (unparseable / bad schema / plans-not-array) hides the
1119
+ # whole manifest, but a single stale/renamed/missing/parse-hostile entry is
1120
+ # skipped (treated orphaned) instead of silently degrading ALL entries to
1121
+ # regex discovery. `valid_phase_entries` materializes only the valid rows,
1122
+ # tolerating an unparseable sibling; the skipped entry's operator signal
1123
+ # (manifest_plan_file_missing) is emitted independently by
1124
+ # reconcile._reconcile_plan_manifest.
1117
1125
  try:
1118
- from .plan_manifest import read_manifest, validate_manifest
1126
+ from .plan_manifest import valid_phase_entries
1119
1127
  except Exception:
1120
1128
  return ()
1121
1129
  manifest_path = repo / "plans" / "manifest.json"
1122
- if manifest_path.exists() and not validate_manifest(manifest_path).valid:
1130
+ if not manifest_path.exists():
1123
1131
  return ()
1124
- try:
1125
- manifest = read_manifest(repo)
1126
- except Exception:
1127
- return ()
1128
- return tuple(entry for entry in manifest.plans if entry.type == "phase")
1132
+ entries = valid_phase_entries(manifest_path)
1133
+ return entries if entries is not None else ()
1129
1134
 
1130
1135
 
1131
1136
  def plan_is_stale(plan: Path, roadmap: Path) -> bool: