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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (724) hide show
  1. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/MANIFEST.in +1 -0
  2. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/PKG-INFO +1 -1
  3. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/pyproject.toml +2 -1
  4. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/cli.py +172 -18
  6. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_validators.py +80 -1
  7. phase_loop_runtime-0.7.1/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +29 -0
  8. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/discovery.py +12 -7
  9. phase_loop_runtime-0.7.1/src/phase_loop_runtime/dispatch_lock.py +264 -0
  10. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/doctor.py +116 -0
  11. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/gate_posture.py +46 -0
  12. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/governed_review.py +20 -3
  13. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/handoff.py +95 -0
  14. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/injection.py +18 -1
  15. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/launcher.py +315 -149
  16. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/panel_invoker.py +153 -11
  17. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/plan_manifest.py +114 -14
  18. phase_loop_runtime-0.7.1/src/phase_loop_runtime/ratification_policy.py +313 -0
  19. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/reconcile.py +70 -15
  20. phase_loop_runtime-0.7.1/src/phase_loop_runtime/release_guard.py +442 -0
  21. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runner.py +178 -2
  22. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/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.1}/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.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +30 -10
  25. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +37 -12
  26. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +14 -5
  27. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +38 -15
  28. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +22 -1
  29. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +22 -1
  30. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +7 -1
  31. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +13 -1
  32. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +2 -1
  33. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +2 -1
  34. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +7 -1
  35. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +13 -1
  36. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +2 -1
  37. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +2 -1
  38. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +7 -1
  39. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +13 -1
  40. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +2 -1
  41. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +2 -1
  42. phase_loop_runtime-0.7.1/src/phase_loop_runtime/task_message_broker.py +294 -0
  43. phase_loop_runtime-0.7.1/src/phase_loop_runtime/task_message_broker_client.py +276 -0
  44. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/task_message_resolver.py +180 -39
  45. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/worktree_index.py +70 -2
  46. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  47. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/SOURCES.txt +13 -0
  48. phase_loop_runtime-0.7.1/tests/test_dispatch_lock_reentrancy.py +142 -0
  49. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_doctor_bom.py +7 -0
  50. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_launcher_liveness.py +39 -0
  51. phase_loop_runtime-0.7.1/tests/test_manifest_per_entry_164.py +243 -0
  52. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_invoker_spawn.py +73 -0
  53. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +63 -0
  54. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_handoff.py +70 -0
  55. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile.py +30 -0
  56. phase_loop_runtime-0.7.1/tests/test_pushflow.py +294 -0
  57. phase_loop_runtime-0.7.1/tests/test_ratification_policy.py +280 -0
  58. phase_loop_runtime-0.7.1/tests/test_release_dispatch_operator_approval_145.py +213 -0
  59. phase_loop_runtime-0.7.1/tests/test_review_leg_sandbox.py +195 -0
  60. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_status_read_only_62.py +9 -6
  61. phase_loop_runtime-0.7.1/tests/test_task_message_broker.py +329 -0
  62. phase_loop_runtime-0.7.1/tests/test_task_message_broker_cli.py +529 -0
  63. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_task_message_resolver.py +199 -8
  64. phase_loop_runtime-0.7.1/tests/test_unattended_release.py +188 -0
  65. phase_loop_runtime-0.7.0/src/phase_loop_runtime/dispatch_lock.py +0 -167
  66. phase_loop_runtime-0.7.0/src/phase_loop_runtime/release_guard.py +0 -180
  67. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/README.md +0 -0
  68. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/protocol/protocol.md +0 -0
  69. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/setup.cfg +0 -0
  70. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  71. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  72. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  73. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  74. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  75. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  76. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  77. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  78. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  79. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  80. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  81. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  82. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  83. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  84. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  85. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  86. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  87. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  88. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  89. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  90. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  91. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  92. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  93. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  94. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  95. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  96. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  97. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  98. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  99. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  100. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  101. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  102. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  103. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  104. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  105. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  106. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  107. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  108. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  109. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  110. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  111. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  112. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  113. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  114. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  115. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  116. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  117. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  118. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  119. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  120. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  121. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  122. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  123. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  124. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  125. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  126. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  127. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  128. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  129. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  130. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  131. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  132. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  133. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  134. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  135. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  136. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  137. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  138. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  139. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  140. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  141. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  142. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  143. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  144. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_modular.py +0 -0
  145. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  146. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  147. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  148. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  149. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  150. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  151. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  152. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  153. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/broker.py +0 -0
  154. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/build_bundle.py +0 -0
  155. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/capability_registry.py +0 -0
  156. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/classifier.py +0 -0
  157. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  158. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  159. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout.py +0 -0
  160. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  161. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  162. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_validation.py +0 -0
  163. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  164. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  165. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  166. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  167. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  168. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  169. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  170. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  171. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  172. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  173. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  174. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  175. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  176. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  177. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  178. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  179. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  180. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  181. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  182. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  183. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/docs_audit.py +0 -0
  184. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/docs_freshness.py +0 -0
  185. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  186. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  187. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/events.py +0 -0
  188. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/events_migration.py +0 -0
  189. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/evidence_audit.py +0 -0
  190. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  191. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/executor_availability.py +0 -0
  192. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/fleet_map.py +0 -0
  193. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  194. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  195. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/git_discipline.py +0 -0
  196. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/git_ops.py +0 -0
  197. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/git_topology.py +0 -0
  198. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/governed_bundle.py +0 -0
  199. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/governed_premerge.py +0 -0
  200. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/handoff_path.py +0 -0
  201. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  202. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/install_status.py +0 -0
  203. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  204. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/lease_store.py +0 -0
  205. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/maintenance.py +0 -0
  206. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  207. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/models.py +0 -0
  208. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/observability.py +0 -0
  209. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  210. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  211. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  212. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  213. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  214. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  215. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  216. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  217. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  218. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/plan_ir.py +0 -0
  219. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/planner_validation.py +0 -0
  220. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/profiles.py +0 -0
  221. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/prompts.py +0 -0
  222. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/provenance.py +0 -0
  223. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/publishing.py +0 -0
  224. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/py.typed +0 -0
  225. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/redaction.py +0 -0
  226. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/reflection_sync.py +0 -0
  227. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/render.py +0 -0
  228. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/repo_validation.py +0 -0
  229. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/review_summary.py +0 -0
  230. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  231. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/route_log.py +0 -0
  232. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  233. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  234. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runtime_paths.py +0 -0
  235. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runtime_projection.py +0 -0
  236. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runtime_resources.py +0 -0
  237. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/schema_export.py +0 -0
  238. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  239. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_install.py +0 -0
  240. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_inventory.py +0 -0
  241. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_paths.py +0 -0
  242. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  243. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  244. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  245. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  246. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  247. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  248. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  249. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  250. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  251. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  252. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  253. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  254. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  255. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  256. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  257. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  258. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  259. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  260. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  261. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  262. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  263. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  264. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  265. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  266. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  267. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  268. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  269. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  270. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  271. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  272. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  273. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  274. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  275. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  276. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  277. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  278. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  279. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  280. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  281. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  282. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  283. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  284. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  285. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  286. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  287. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  288. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  289. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  290. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  291. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  292. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  293. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  294. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  295. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  296. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  297. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  298. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  299. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  300. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  301. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  302. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  303. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  304. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  305. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  306. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  307. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  308. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  309. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  310. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  311. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  312. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  313. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  314. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  315. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  316. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  317. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  318. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  319. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  320. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  321. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  322. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  323. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  324. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  325. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  326. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  327. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  328. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  329. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  330. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  331. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  332. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  333. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  334. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  335. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  336. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  337. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  338. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  339. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  340. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  341. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  342. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  343. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  344. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  345. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  346. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  347. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  348. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  349. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  350. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  351. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  352. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  353. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  354. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  355. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  356. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  357. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  358. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  359. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  360. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  361. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  362. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  364. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  365. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  366. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  367. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  368. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  369. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  370. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  371. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  372. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  373. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  374. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  375. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  376. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  377. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  378. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  379. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  380. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  381. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  382. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  383. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  384. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  385. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  386. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  387. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  388. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  389. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  390. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  391. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  392. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  393. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  394. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  395. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  396. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  397. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  398. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  399. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  400. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  401. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  402. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  403. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  404. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  405. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  406. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  407. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  408. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  409. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  410. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  411. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  412. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  413. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/state.py +0 -0
  414. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/state_degradation.py +0 -0
  415. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/state_ops.py +0 -0
  416. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/train_ledger.py +0 -0
  417. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/train_roadmap.py +0 -0
  418. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/train_runner.py +0 -0
  419. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/verification_evidence.py +0 -0
  420. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  421. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  422. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/worker_pool.py +0 -0
  423. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  424. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  425. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  426. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  427. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_advisory_mode.py +0 -0
  428. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_alias_install.py +0 -0
  429. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_backcompat.py +0 -0
  430. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_backing_homebrew.py +0 -0
  431. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_backing_omnigent.py +0 -0
  432. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_cli_legacy.py +0 -0
  433. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_composition.py +0 -0
  434. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_concurrency.py +0 -0
  435. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_config.py +0 -0
  436. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_golden.py +0 -0
  437. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_ingestion.py +0 -0
  438. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_integration.py +0 -0
  439. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_matrix.py +0 -0
  440. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_observability.py +0 -0
  441. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_presets.py +0 -0
  442. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_registries.py +0 -0
  443. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_resolver.py +0 -0
  444. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_schema.py +0 -0
  445. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_twin_alias_legacy.py +0 -0
  446. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_agent_runtime_provider_cs08.py +0 -0
  447. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_autosel.py +0 -0
  448. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_branchgov_preflight.py +0 -0
  449. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_certificate_tier.py +0 -0
  450. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_cli_train_status_45.py +0 -0
  451. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_break_glass_cli.py +0 -0
  452. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_classifier.py +0 -0
  453. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_convergence_fixes.py +0 -0
  454. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_exception_vocab.py +0 -0
  455. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_validator_hook.py +0 -0
  456. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_verification_gate.py +0 -0
  457. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_codex_effort_max_clamp_49.py +0 -0
  458. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_conformance_golden.py +0 -0
  459. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_dual_layout.py +0 -0
  460. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_gates.py +0 -0
  461. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_ingest.py +0 -0
  462. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_scaffold.py +0 -0
  463. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_coordinator_wave_loop.py +0 -0
  464. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_discovery_hygiene_legacy.py +0 -0
  465. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  466. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dispatch_lock_helper.py +0 -0
  467. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  468. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_doc_delta_validator.py +0 -0
  469. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_docs_audit.py +0 -0
  470. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_docs_freshness.py +0 -0
  471. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dotfiles_tree.py +0 -0
  472. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execgov.py +0 -0
  473. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execreg_launch_registry.py +0 -0
  474. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execute_phase_handoff_mode.py +0 -0
  475. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execution_policy_tiering.py +0 -0
  476. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_executor_availability.py +0 -0
  477. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_export_schema.py +0 -0
  478. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_fleet_map.py +0 -0
  479. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_fleet_metrics.py +0 -0
  480. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_fleet_metrics_export.py +0 -0
  481. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_gate_a_wheel_isolation.py +0 -0
  482. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_gate_posture.py +0 -0
  483. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_git_discipline.py +0 -0
  484. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_git_grounded_projection.py +0 -0
  485. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_disjointness_model_first.py +0 -0
  486. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_e2e.py +0 -0
  487. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_gate_crfixes.py +0 -0
  488. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_planning_gate.py +0 -0
  489. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_premerge.py +0 -0
  490. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_premerge_live.py +0 -0
  491. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_review.py +0 -0
  492. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_grokexec.py +0 -0
  493. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_hotfix_lane.py +0 -0
  494. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_injection_skill_failloud.py +0 -0
  495. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_lane_ir_override.py +0 -0
  496. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_launchspec_golden.py +0 -0
  497. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_lease_store.py +0 -0
  498. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_lease_store_conformance.py +0 -0
  499. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_ledger_serialization.py +0 -0
  500. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_leg_liveness_monitor.py +0 -0
  501. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_model_class_policy.py +0 -0
  502. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_model_id_source_guard.py +0 -0
  503. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_observability_alerting.py +0 -0
  504. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_advisory.py +0 -0
  505. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_advisory_cli.py +0 -0
  506. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  507. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_authority_boundary.py +0 -0
  508. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_contract_drift.py +0 -0
  509. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_contract_imports.py +0 -0
  510. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_contract_pin.py +0 -0
  511. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_core_api.py +0 -0
  512. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_provenance.py +0 -0
  513. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_ci.py +0 -0
  514. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_cli.py +0 -0
  515. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_output.py +0 -0
  516. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_runtime.py +0 -0
  517. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_redaction.py +0 -0
  518. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_release_surface.py +0 -0
  519. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_schema_validation.py +0 -0
  520. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_vectors.py +0 -0
  521. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_advisory_mode_63.py +0 -0
  522. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_context_refs_114.py +0 -0
  523. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_invoker.py +0 -0
  524. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_invoker_timeout_argv.py +0 -0
  525. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  526. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_per_leg_model_66.py +0 -0
  527. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_streaming_verdicts.py +0 -0
  528. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_tui_eof_48.py +0 -0
  529. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_verdict_summary.py +0 -0
  530. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_parallel_dispatch_backcompat.py +0 -0
  531. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_parallel_dispatch_cli.py +0 -0
  532. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_adoption_bundle.py +0 -0
  533. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  534. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_dependency.py +0 -0
  535. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  536. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_injection.py +0 -0
  537. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_modular.py +0 -0
  538. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  539. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  540. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_schema_export.py +0 -0
  541. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_schema_source.py +0 -0
  542. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  543. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  544. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_build_bundle.py +0 -0
  545. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_classifier.py +0 -0
  546. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  547. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  548. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  549. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  550. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_security.py +0 -0
  551. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  552. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  553. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  554. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_route_selection.py +0 -0
  555. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_cli.py +0 -0
  556. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  557. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_control_only.py +0 -0
  558. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_event.py +0 -0
  559. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  560. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_hardening.py +0 -0
  561. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_schema.py +0 -0
  562. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_validation.py +0 -0
  563. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_collaborator_citation.py +0 -0
  564. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_collaborator_docs.py +0 -0
  565. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  566. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  567. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  568. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  569. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  570. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_discovery.py +0 -0
  571. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_docs.py +0 -0
  572. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  573. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  574. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  575. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  576. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_portal.py +0 -0
  577. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  578. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_drift_audit.py +0 -0
  579. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  580. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  581. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_events_migration.py +0 -0
  582. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit.py +0 -0
  583. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  584. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  585. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  586. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  587. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_execution_policy.py +0 -0
  588. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_executor_degradation.py +0 -0
  589. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_full_phase_mode.py +0 -0
  590. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_handoff_migration.py +0 -0
  591. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_init.py +0 -0
  592. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_injection.py +0 -0
  593. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_install_status.py +0 -0
  594. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  595. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_harnesses.py +0 -0
  596. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_ir.py +0 -0
  597. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  598. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_scheduler.py +0 -0
  599. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_launcher.py +0 -0
  600. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_ledger_debug.py +0 -0
  601. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_ledger_dedup.py +0 -0
  602. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_live_adapters.py +0 -0
  603. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_maintenance.py +0 -0
  604. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_metrics.py +0 -0
  605. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_migration_regressions.py +0 -0
  606. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  607. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  608. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  609. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_models.py +0 -0
  610. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_native_flags.py +0 -0
  611. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  612. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pi_executor.py +0 -0
  613. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  614. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  615. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  616. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  617. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  618. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_mode.py +0 -0
  619. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  620. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_plan_manifest.py +0 -0
  621. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  622. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_planner_validation.py +0 -0
  623. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_policy.py +0 -0
  624. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_protocol_contract.py +0 -0
  625. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_provenance.py +0 -0
  626. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  627. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  628. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  629. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reducers.py +0 -0
  630. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  631. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  632. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  633. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_roadmap_validate.py +0 -0
  634. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_rotation.py +0 -0
  635. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runner.py +0 -0
  636. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  637. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_boundary.py +0 -0
  638. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_decouple.py +0 -0
  639. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_package_data.py +0 -0
  640. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_projection.py +0 -0
  641. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_schema_flow.py +0 -0
  642. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  643. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  644. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_contract.py +0 -0
  645. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  646. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_install.py +0 -0
  647. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  648. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_smoke_blockers.py +0 -0
  649. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  650. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_smoke_reentry.py +0 -0
  651. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  652. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  653. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  654. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_state.py +0 -0
  655. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  656. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  657. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  658. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  659. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  660. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v22_e2e.py +0 -0
  661. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v22_principles.py +0 -0
  662. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  663. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_reconcile.py +0 -0
  664. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_sched.py +0 -0
  665. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_schedharden.py +0 -0
  666. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_wave_runner.py +0 -0
  667. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_work_unit_observability.py +0 -0
  668. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_work_unit_runner.py +0 -0
  669. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_work_unit_state.py +0 -0
  670. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_worktrees.py +0 -0
  671. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  672. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_worktree_executor.py +0 -0
  673. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  674. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  675. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  676. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_flag.py +0 -0
  677. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_markers.py +0 -0
  678. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  679. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  680. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  681. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  682. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  683. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pkg_layout_freeze.py +0 -0
  684. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_plan_ir_iter_waves.py +0 -0
  685. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_preflight_verification.py +0 -0
  686. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_proc_cpu.py +0 -0
  687. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_prune_merged_worktrees_script.py +0 -0
  688. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_publishing.py +0 -0
  689. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  690. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_reconcile_verification_log.py +0 -0
  691. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_reflection_sync.py +0 -0
  692. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_release_pin_autotrack.py +0 -0
  693. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_repo_validation.py +0 -0
  694. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_review_summary.py +0 -0
  695. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_route_log.py +0 -0
  696. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_route_policy_conformance.py +0 -0
  697. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_routing_invariants.py +0 -0
  698. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_runtime_state_mirror_agreement.py +0 -0
  699. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_sibling_matcher_patterns.py +0 -0
  700. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_bundle_pinned.py +0 -0
  701. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_install_body_expansion.py +0 -0
  702. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_plan_manifest_write.py +0 -0
  703. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_sources_seam.py +0 -0
  704. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skills_bundle_drift.py +0 -0
  705. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skills_canon_parity.py +0 -0
  706. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skills_src_claude_literal_lint.py +0 -0
  707. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_spec_conformance_gate.py +0 -0
  708. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  709. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_sync_skills_apply_failloud.py +0 -0
  710. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_e2e.py +0 -0
  711. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_invariants.py +0 -0
  712. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_merge.py +0 -0
  713. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_order_only_deps_47.py +0 -0
  714. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_roadmap.py +0 -0
  715. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_runner.py +0 -0
  716. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  717. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  718. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_verification_evidence.py +0 -0
  719. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_verification_evidence_validator.py +0 -0
  720. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_visual_evidence_validator.py +0 -0
  721. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_workerpool_failure_isolation.py +0 -0
  722. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_workerpool_parallel.py +0 -0
  723. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_workerpool_worktree_alloc.py +0 -0
  724. {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/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.1
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.1"
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.1"
@@ -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,
@@ -1453,8 +1544,7 @@ def _outside_agent_validate_command(args: argparse.Namespace) -> int:
1453
1544
  def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
1454
1545
  from .task_message_resolver import CodexAppServerTaskMessageResolver, TaskMessageResolverError
1455
1546
 
1456
- token = os.environ.get(args.token_env, "")
1457
- if not token:
1547
+ if args.control_socket and args.token_env:
1458
1548
  error = TaskMessageResolverError(
1459
1549
  "attestation_invalid",
1460
1550
  authority=args.authority,
@@ -1463,19 +1553,50 @@ def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
1463
1553
  )
1464
1554
  print(json.dumps(error.metadata(), indent=2, sort_keys=True))
1465
1555
  return 2
1466
- try:
1467
- resolver = CodexAppServerTaskMessageResolver(
1468
- endpoint=args.endpoint,
1469
- bearer_token=token,
1556
+ remote_transport = bool(args.endpoint or args.broker_url)
1557
+ token = os.environ.get(args.token_env, "") if remote_transport and args.token_env else ""
1558
+ if remote_transport and not token:
1559
+ error = TaskMessageResolverError(
1560
+ "attestation_invalid",
1470
1561
  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()
1562
+ thread_id=getattr(args, "thread_id", None),
1563
+ message_id=getattr(args, "message_id", None),
1478
1564
  )
1565
+ print(json.dumps(error.metadata(), indent=2, sort_keys=True))
1566
+ return 2
1567
+ try:
1568
+ if args.broker_url:
1569
+ from .task_message_broker_client import TaskMessageBrokerClient
1570
+
1571
+ broker = TaskMessageBrokerClient(
1572
+ broker_url=args.broker_url,
1573
+ bearer_token=token,
1574
+ authority=args.authority,
1575
+ heartbeat_timeout_seconds=args.heartbeat_timeout_seconds,
1576
+ )
1577
+ payload = (
1578
+ broker.resolve(
1579
+ thread_id=args.thread_id,
1580
+ message_id=args.message_id,
1581
+ max_source_age_seconds=args.max_source_age_seconds,
1582
+ )
1583
+ if resolve
1584
+ else broker.probe()
1585
+ )
1586
+ else:
1587
+ resolver = CodexAppServerTaskMessageResolver(
1588
+ endpoint=args.endpoint,
1589
+ bearer_token=token or None,
1590
+ control_socket=args.control_socket,
1591
+ authority=args.authority,
1592
+ max_source_age_seconds=getattr(args, "max_source_age_seconds", 900),
1593
+ timeout_seconds=args.timeout_seconds,
1594
+ )
1595
+ payload = (
1596
+ resolver.resolve(thread_id=args.thread_id, message_id=args.message_id).payload()
1597
+ if resolve
1598
+ else resolver.probe()
1599
+ )
1479
1600
  except ValueError:
1480
1601
  error = TaskMessageResolverError(
1481
1602
  "attestation_invalid",
@@ -1492,6 +1613,39 @@ def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
1492
1613
  return 0
1493
1614
 
1494
1615
 
1616
+ def _task_message_broker_serve_command(args: argparse.Namespace) -> int:
1617
+ from .task_message_broker import BrokerConfig, TaskMessageBroker, build_server, verified_installed_agent_harness_sha
1618
+ from .task_message_resolver import CodexAppServerTaskMessageResolver
1619
+
1620
+ try:
1621
+ agent_harness_sha = verified_installed_agent_harness_sha(args.agent_harness_sha)
1622
+ config = BrokerConfig(
1623
+ authority=args.authority,
1624
+ token_sha256=args.token_sha256,
1625
+ agent_harness_sha=agent_harness_sha,
1626
+ heartbeat_seconds=args.heartbeat_seconds,
1627
+ )
1628
+
1629
+ def resolver_factory(max_source_age_seconds: int) -> CodexAppServerTaskMessageResolver:
1630
+ return CodexAppServerTaskMessageResolver(
1631
+ control_socket=args.control_socket,
1632
+ authority=args.authority,
1633
+ max_source_age_seconds=max_source_age_seconds,
1634
+ timeout_seconds=args.timeout_seconds,
1635
+ )
1636
+
1637
+ server = build_server(args.host, args.port, TaskMessageBroker(config, resolver_factory))
1638
+ except ValueError:
1639
+ return 2
1640
+ try:
1641
+ server.serve_forever()
1642
+ except KeyboardInterrupt:
1643
+ return 130
1644
+ finally:
1645
+ server.server_close()
1646
+ return 0
1647
+
1648
+
1495
1649
  def _parse_lane_ir_override(parser: argparse.ArgumentParser, args: argparse.Namespace, command: str) -> tuple[str, ...]:
1496
1650
  raw = getattr(args, "allow_lane_ir_override", None)
1497
1651
  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,29 @@
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
+ EnvironmentFile=%h/.config/phase-loop/task-message-broker.env
9
+ ExecStart=%h/.local/share/phase-loop-task-message-broker/bin/phase-loop task-message-broker-serve --host 127.0.0.1 --port 18765 --control-socket %h/.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}
10
+ Restart=on-failure
11
+ RestartSec=2
12
+ UMask=0077
13
+ NoNewPrivileges=yes
14
+ PrivateTmp=yes
15
+ ProtectHome=tmpfs
16
+ BindReadOnlyPaths=%h/.local/share/phase-loop-task-message-broker
17
+ BindReadOnlyPaths=%h/.codex/app-server-control/app-server-control.sock
18
+ ProtectSystem=strict
19
+ ProtectControlGroups=yes
20
+ ProtectKernelTunables=yes
21
+ LockPersonality=yes
22
+ MemoryDenyWriteExecute=yes
23
+ RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
24
+ RestrictRealtime=yes
25
+ RestrictSUIDSGID=yes
26
+ SystemCallArchitectures=native
27
+
28
+ [Install]
29
+ WantedBy=default.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: