phase-loop-runtime 0.7.6__tar.gz → 0.7.7__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 (769) hide show
  1. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/cli.py +34 -1
  5. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_roadmap.py +47 -4
  6. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_runner.py +268 -128
  7. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  8. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
  9. phase_loop_runtime-0.7.7/tests/test_train_prebuilt.py +463 -0
  10. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_roadmap.py +75 -0
  11. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_runner.py +57 -0
  12. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/MANIFEST.in +0 -0
  13. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/README.md +0 -0
  14. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/protocol/protocol.md +0 -0
  15. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/setup.cfg +0 -0
  16. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  17. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  18. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  19. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  20. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  21. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  22. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  23. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  24. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  25. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  26. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  27. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  28. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  29. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  30. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  31. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  32. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  33. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  34. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  35. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  36. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  37. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  38. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  39. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  40. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  41. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  42. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  43. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  44. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  45. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  46. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  47. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  48. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  49. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  50. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  51. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  52. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  53. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  54. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  55. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  56. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  57. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  58. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  59. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  60. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  61. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  62. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  63. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  64. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  65. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  66. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  67. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  68. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  69. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  70. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  71. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  72. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  73. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  74. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  75. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  76. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  77. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  78. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  79. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  80. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  81. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  82. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  83. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  84. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  85. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  86. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  87. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  88. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  89. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  90. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_modular.py +0 -0
  91. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  92. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  93. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  94. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  95. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  96. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  97. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  98. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  99. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/broker.py +0 -0
  100. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/build_bundle.py +0 -0
  101. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/capability_registry.py +0 -0
  102. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/classifier.py +0 -0
  103. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  104. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  105. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout.py +0 -0
  106. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  107. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  108. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_validation.py +0 -0
  109. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_validators.py +0 -0
  110. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  111. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  112. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  113. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  114. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  115. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  116. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  117. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  118. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  119. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  120. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  121. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  122. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  123. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  124. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  125. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  126. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  127. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  128. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  129. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  130. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  131. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  132. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  133. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  134. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  135. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  136. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  137. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
  138. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  139. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  140. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  141. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  142. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  143. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  144. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  145. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  146. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/status.py +0 -0
  147. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  148. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  149. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  150. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/discovery.py +0 -0
  151. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  152. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  153. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/docs_audit.py +0 -0
  154. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/docs_freshness.py +0 -0
  155. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  156. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/doctor.py +0 -0
  157. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  158. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/events.py +0 -0
  159. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/events_migration.py +0 -0
  160. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/evidence_audit.py +0 -0
  161. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  162. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/executor_availability.py +0 -0
  163. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/fleet_map.py +0 -0
  164. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  165. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  166. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/gate_posture.py +0 -0
  167. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/git_discipline.py +0 -0
  168. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/git_ops.py +0 -0
  169. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/git_topology.py +0 -0
  170. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/governed_bundle.py +0 -0
  171. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/governed_premerge.py +0 -0
  172. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/governed_review.py +0 -0
  173. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/handoff.py +0 -0
  174. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/handoff_path.py +0 -0
  175. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  176. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/injection.py +0 -0
  177. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/install_status.py +0 -0
  178. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  179. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/launcher.py +0 -0
  180. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/lease_store.py +0 -0
  181. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/maintenance.py +0 -0
  182. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  183. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/models.py +0 -0
  184. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/observability.py +0 -0
  185. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/panel_invoker.py +0 -0
  186. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  187. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  188. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  189. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  190. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  191. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  192. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  193. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  194. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  195. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/plan_ir.py +0 -0
  196. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/plan_manifest.py +0 -0
  197. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/planner_validation.py +0 -0
  198. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/profiles.py +0 -0
  199. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/prompts.py +0 -0
  200. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/provenance.py +0 -0
  201. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/publishing.py +0 -0
  202. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/py.typed +0 -0
  203. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/ratification_policy.py +0 -0
  204. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/reconcile.py +0 -0
  205. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/redaction.py +0 -0
  206. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/reflection_sync.py +0 -0
  207. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/release_guard.py +0 -0
  208. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/render.py +0 -0
  209. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/repo_validation.py +0 -0
  210. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/review_summary.py +0 -0
  211. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  212. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  213. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/route_log.py +0 -0
  214. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  215. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  216. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runner.py +0 -0
  217. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runtime_paths.py +0 -0
  218. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runtime_projection.py +0 -0
  219. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runtime_resources.py +0 -0
  220. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schema_export.py +0 -0
  221. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  222. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  223. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  224. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_install.py +0 -0
  225. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_inventory.py +0 -0
  226. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_paths.py +0 -0
  227. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  228. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  229. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  230. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  231. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  232. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  233. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  234. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  235. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  236. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  237. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  238. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  239. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  240. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  241. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  242. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  243. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  244. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  245. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  246. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  247. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  248. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  249. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  250. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  251. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  252. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  253. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  254. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  255. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  256. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  257. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  258. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  259. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  260. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  261. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  262. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  263. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  264. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  265. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  266. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  267. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  268. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  269. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  270. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  271. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  272. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  273. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  274. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  275. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  276. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  277. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  278. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  279. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  280. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  281. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  282. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  283. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  284. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  285. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  286. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  287. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  288. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  289. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  290. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  291. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  292. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  293. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  294. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  295. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  296. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  297. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  298. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  299. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  300. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  301. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  302. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  303. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  304. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  305. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  306. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  307. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  308. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  309. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  310. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  311. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  312. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  313. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  314. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  315. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  316. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  317. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  318. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  319. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  320. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  321. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  322. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  323. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  324. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  325. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  326. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  327. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  328. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  329. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  330. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  331. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  332. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  333. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  334. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  335. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  336. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  337. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  338. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  339. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  340. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  341. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  342. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  343. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  344. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  345. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  346. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  347. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  348. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  349. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  350. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  351. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  352. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  353. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  354. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  355. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  356. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  357. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  358. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  359. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  361. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  362. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  363. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  364. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  365. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  366. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  367. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  368. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  369. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  370. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  371. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  372. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  373. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  374. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  375. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  376. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  377. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  378. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  379. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  380. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  381. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  382. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  383. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  384. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  385. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  386. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  387. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  388. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  389. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  390. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  391. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  392. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  393. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  394. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  395. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  396. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  397. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  398. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  399. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  400. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  401. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  402. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  403. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  404. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  405. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  406. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  407. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  408. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  409. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  410. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  411. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  412. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  413. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  414. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  415. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  416. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/state.py +0 -0
  417. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/state_degradation.py +0 -0
  418. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/state_ops.py +0 -0
  419. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/task_message_broker.py +0 -0
  420. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  421. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  422. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_ledger.py +0 -0
  423. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/verification_evidence.py +0 -0
  424. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  425. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  426. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/worker_pool.py +0 -0
  427. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/worktree_index.py +0 -0
  428. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  429. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  430. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  431. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  432. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_advisory_mode.py +0 -0
  433. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_alias_install.py +0 -0
  434. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_backcompat.py +0 -0
  435. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_backing_homebrew.py +0 -0
  436. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_backing_omnigent.py +0 -0
  437. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_cli_legacy.py +0 -0
  438. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_composition.py +0 -0
  439. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_concurrency.py +0 -0
  440. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_config.py +0 -0
  441. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_golden.py +0 -0
  442. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_ingestion.py +0 -0
  443. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_integration.py +0 -0
  444. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_matrix.py +0 -0
  445. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_observability.py +0 -0
  446. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_presets.py +0 -0
  447. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_registries.py +0 -0
  448. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_resolver.py +0 -0
  449. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_schema.py +0 -0
  450. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_twin_alias_legacy.py +0 -0
  451. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_agent_runtime_provider_cs08.py +0 -0
  452. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_autosel.py +0 -0
  453. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_branchgov_preflight.py +0 -0
  454. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_certificate_tier.py +0 -0
  455. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_cli_train_status_45.py +0 -0
  456. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_break_glass_cli.py +0 -0
  457. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_classifier.py +0 -0
  458. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_convergence_fixes.py +0 -0
  459. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_exception_vocab.py +0 -0
  460. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_validator_hook.py +0 -0
  461. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_verification_gate.py +0 -0
  462. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_codex_effort_max_clamp_49.py +0 -0
  463. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_conformance_golden.py +0 -0
  464. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_dual_layout.py +0 -0
  465. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_gates.py +0 -0
  466. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_ingest.py +0 -0
  467. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_scaffold.py +0 -0
  468. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_adapters.py +0 -0
  469. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_admission.py +0 -0
  470. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_api.py +0 -0
  471. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_credsep.py +0 -0
  472. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_evidence.py +0 -0
  473. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_verbs.py +0 -0
  474. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_cli_integration.py +0 -0
  475. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_coordination_contracts.py +0 -0
  476. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_dispatch.py +0 -0
  477. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_event_contracts.py +0 -0
  478. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_event_log.py +0 -0
  479. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_fencing.py +0 -0
  480. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_fixture_contracts.py +0 -0
  481. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_invalidation.py +0 -0
  482. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_live_enable.py +0 -0
  483. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_provider_contracts.py +0 -0
  484. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_reconcile.py +0 -0
  485. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_refresh.py +0 -0
  486. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_runtime_imports.py +0 -0
  487. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_seat_lifecycle.py +0 -0
  488. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_status.py +0 -0
  489. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_train_integration.py +0 -0
  490. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_coordinator_wave_loop.py +0 -0
  491. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_discovery_hygiene_legacy.py +0 -0
  492. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  493. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_helper.py +0 -0
  494. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_reentrancy.py +0 -0
  495. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  496. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_doc_delta_validator.py +0 -0
  497. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_docs_audit.py +0 -0
  498. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_docs_freshness.py +0 -0
  499. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_doctor_bom.py +0 -0
  500. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dotfiles_tree.py +0 -0
  501. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execgov.py +0 -0
  502. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execreg_launch_registry.py +0 -0
  503. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execute_phase_handoff_mode.py +0 -0
  504. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execution_policy_tiering.py +0 -0
  505. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_executor_availability.py +0 -0
  506. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_export_schema.py +0 -0
  507. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_fleet_map.py +0 -0
  508. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_fleet_metrics.py +0 -0
  509. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_fleet_metrics_export.py +0 -0
  510. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_gate_a_wheel_isolation.py +0 -0
  511. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_gate_posture.py +0 -0
  512. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_git_discipline.py +0 -0
  513. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_git_grounded_projection.py +0 -0
  514. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_disjointness_model_first.py +0 -0
  515. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_e2e.py +0 -0
  516. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_gate_crfixes.py +0 -0
  517. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_planning_gate.py +0 -0
  518. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_premerge.py +0 -0
  519. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_premerge_live.py +0 -0
  520. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_review.py +0 -0
  521. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_grokexec.py +0 -0
  522. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_hotfix_lane.py +0 -0
  523. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_injection_skill_failloud.py +0 -0
  524. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_lane_ir_override.py +0 -0
  525. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_launcher_liveness.py +0 -0
  526. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_launchspec_golden.py +0 -0
  527. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_lease_store.py +0 -0
  528. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_lease_store_conformance.py +0 -0
  529. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_ledger_serialization.py +0 -0
  530. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_leg_liveness_monitor.py +0 -0
  531. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_manifest_per_entry_164.py +0 -0
  532. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_model_class_policy.py +0 -0
  533. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_model_id_source_guard.py +0 -0
  534. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_observability_alerting.py +0 -0
  535. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_advisory.py +0 -0
  536. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_advisory_cli.py +0 -0
  537. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  538. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_authority_boundary.py +0 -0
  539. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_contract_drift.py +0 -0
  540. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_contract_imports.py +0 -0
  541. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_contract_pin.py +0 -0
  542. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_core_api.py +0 -0
  543. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_provenance.py +0 -0
  544. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_ci.py +0 -0
  545. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_cli.py +0 -0
  546. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_output.py +0 -0
  547. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_runtime.py +0 -0
  548. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_redaction.py +0 -0
  549. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_release_surface.py +0 -0
  550. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_schema_validation.py +0 -0
  551. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_vectors.py +0 -0
  552. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_advisory_mode_63.py +0 -0
  553. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_context_refs_114.py +0 -0
  554. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_invoker.py +0 -0
  555. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_invoker_spawn.py +0 -0
  556. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_invoker_timeout_argv.py +0 -0
  557. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  558. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_native_fill_183.py +0 -0
  559. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_per_leg_model_66.py +0 -0
  560. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_streaming_verdicts.py +0 -0
  561. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_tui_eof_48.py +0 -0
  562. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_tui_liveness_188.py +0 -0
  563. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_verdict_summary.py +0 -0
  564. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_parallel_dispatch_backcompat.py +0 -0
  565. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_parallel_dispatch_cli.py +0 -0
  566. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_adoption_bundle.py +0 -0
  567. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  568. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_dependency.py +0 -0
  569. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  570. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_injection.py +0 -0
  571. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_modular.py +0 -0
  572. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  573. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  574. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_schema_export.py +0 -0
  575. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_schema_source.py +0 -0
  576. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  577. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  578. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_build_bundle.py +0 -0
  579. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_classifier.py +0 -0
  580. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  581. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  582. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  583. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  584. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_security.py +0 -0
  585. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  586. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  587. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  588. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_route_selection.py +0 -0
  589. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_cli.py +0 -0
  590. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  591. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_control_only.py +0 -0
  592. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_event.py +0 -0
  593. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  594. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_hardening.py +0 -0
  595. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  596. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_schema.py +0 -0
  597. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_validation.py +0 -0
  598. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_collaborator_citation.py +0 -0
  599. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_collaborator_docs.py +0 -0
  600. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  601. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  602. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  603. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  604. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  605. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_discovery.py +0 -0
  606. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_docs.py +0 -0
  607. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  608. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  609. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  610. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  611. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_portal.py +0 -0
  612. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  613. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_drift_audit.py +0 -0
  614. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  615. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  616. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_events_migration.py +0 -0
  617. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit.py +0 -0
  618. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  619. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  620. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  621. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  622. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_execution_policy.py +0 -0
  623. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_executor_degradation.py +0 -0
  624. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_full_phase_mode.py +0 -0
  625. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_handoff.py +0 -0
  626. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_handoff_migration.py +0 -0
  627. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_init.py +0 -0
  628. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_injection.py +0 -0
  629. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_install_status.py +0 -0
  630. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  631. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_harnesses.py +0 -0
  632. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_ir.py +0 -0
  633. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  634. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_scheduler.py +0 -0
  635. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_launcher.py +0 -0
  636. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_ledger_debug.py +0 -0
  637. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_ledger_dedup.py +0 -0
  638. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_live_adapters.py +0 -0
  639. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_maintenance.py +0 -0
  640. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_metrics.py +0 -0
  641. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_migration_regressions.py +0 -0
  642. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  643. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  644. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  645. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_models.py +0 -0
  646. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_native_flags.py +0 -0
  647. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  648. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pi_executor.py +0 -0
  649. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  650. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  651. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  652. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  653. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  654. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_mode.py +0 -0
  655. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  656. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_plan_manifest.py +0 -0
  657. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  658. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_planner_validation.py +0 -0
  659. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_policy.py +0 -0
  660. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_protocol_contract.py +0 -0
  661. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_provenance.py +0 -0
  662. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile.py +0 -0
  663. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  664. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  665. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  666. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reducers.py +0 -0
  667. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  668. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  669. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  670. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_roadmap_validate.py +0 -0
  671. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_rotation.py +0 -0
  672. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runner.py +0 -0
  673. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  674. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_boundary.py +0 -0
  675. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_decouple.py +0 -0
  676. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_package_data.py +0 -0
  677. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_projection.py +0 -0
  678. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_schema_flow.py +0 -0
  679. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  680. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  681. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_contract.py +0 -0
  682. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  683. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_install.py +0 -0
  684. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  685. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_smoke_blockers.py +0 -0
  686. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  687. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_smoke_reentry.py +0 -0
  688. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  689. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  690. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  691. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_state.py +0 -0
  692. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  693. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  694. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  695. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  696. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  697. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v22_e2e.py +0 -0
  698. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v22_principles.py +0 -0
  699. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  700. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_reconcile.py +0 -0
  701. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_sched.py +0 -0
  702. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_schedharden.py +0 -0
  703. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_wave_runner.py +0 -0
  704. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_work_unit_observability.py +0 -0
  705. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_work_unit_runner.py +0 -0
  706. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_work_unit_state.py +0 -0
  707. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_worktrees.py +0 -0
  708. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  709. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_worktree_executor.py +0 -0
  710. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  711. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  712. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  713. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_flag.py +0 -0
  714. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_markers.py +0 -0
  715. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  716. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  717. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  718. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  719. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  720. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pkg_layout_freeze.py +0 -0
  721. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_plan_ir_iter_waves.py +0 -0
  722. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_preflight_verification.py +0 -0
  723. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_proc_cpu.py +0 -0
  724. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_prune_merged_worktrees_script.py +0 -0
  725. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_publishing.py +0 -0
  726. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pushflow.py +0 -0
  727. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_ratification_policy.py +0 -0
  728. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  729. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_reconcile_verification_log.py +0 -0
  730. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_reflection_sync.py +0 -0
  731. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  732. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_release_pin_autotrack.py +0 -0
  733. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_repo_validation.py +0 -0
  734. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_review_leg_sandbox.py +0 -0
  735. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_review_summary.py +0 -0
  736. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_roadmap_authority.py +0 -0
  737. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_route_log.py +0 -0
  738. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_route_policy_conformance.py +0 -0
  739. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_routing_invariants.py +0 -0
  740. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_runtime_state_mirror_agreement.py +0 -0
  741. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_sibling_matcher_patterns.py +0 -0
  742. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_bundle_pinned.py +0 -0
  743. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_install_body_expansion.py +0 -0
  744. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_plan_manifest_write.py +0 -0
  745. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_sources_seam.py +0 -0
  746. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skills_bundle_drift.py +0 -0
  747. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skills_canon_parity.py +0 -0
  748. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skills_src_claude_literal_lint.py +0 -0
  749. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_spec_conformance_gate.py +0 -0
  750. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_status_read_only_62.py +0 -0
  751. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  752. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_sync_skills_apply_failloud.py +0 -0
  753. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_task_message_broker.py +0 -0
  754. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_task_message_broker_cli.py +0 -0
  755. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_task_message_resolver.py +0 -0
  756. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_e2e.py +0 -0
  757. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_invariants.py +0 -0
  758. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_merge.py +0 -0
  759. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_order_only_deps_47.py +0 -0
  760. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_unattended_release.py +0 -0
  761. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  762. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  763. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_verification_evidence.py +0 -0
  764. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_verification_evidence_validator.py +0 -0
  765. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_visual_evidence_validator.py +0 -0
  766. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_workerpool_failure_isolation.py +0 -0
  767. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_workerpool_parallel.py +0 -0
  768. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_workerpool_worktree_alloc.py +0 -0
  769. {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_worktree_index.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.7.6
3
+ Version: 0.7.7
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.6"
7
+ version = "0.7.7"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.6"
21
+ __version__ = "0.7.7"
@@ -653,6 +653,19 @@ def build_parser() -> argparse.ArgumentParser:
653
653
  "Default: current directory."
654
654
  ),
655
655
  )
656
+ run_train_sub.add_argument(
657
+ "--workspace",
658
+ dest="workspace_overrides",
659
+ action="append",
660
+ default=None,
661
+ metavar="repo=PATH",
662
+ help=(
663
+ "Per-node workspace override: map a node's repo to an arbitrary "
664
+ "absolute checkout path (e.g. a different volume). Repeatable: "
665
+ "--workspace my-service=/mnt/vol/my-service. Takes precedence over "
666
+ "a node's **Workspace:** attribute and the --workspace-root default."
667
+ ),
668
+ )
656
669
  run_train_sub.add_argument(
657
670
  "--ledger-dir",
658
671
  default=None,
@@ -2886,9 +2899,29 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
2886
2899
  # run_mode mirrors how 'run' handles --governed (cli.py:796)
2887
2900
  run_mode = "governed" if bool(getattr(args, "governed", False)) else "autonomous"
2888
2901
 
2889
- # Workspace resolution: <workspace-root>/<node.repo>
2902
+ # Workspace resolution precedence (highest first):
2903
+ # 1. --workspace <repo>=<path> CLI override (arbitrary absolute paths)
2904
+ # 2. the node's **Workspace:** attribute (from the train roadmap)
2905
+ # 3. <workspace-root>/<node.repo> (the default)
2890
2906
  workspace_root = Path(getattr(args, "workspace_root", None) or ".")
2907
+ workspace_overrides: dict = {}
2908
+ for spec in getattr(args, "workspace_overrides", None) or []:
2909
+ if "=" not in spec:
2910
+ parser.error(f"--workspace expects 'repo=PATH', got {spec!r}")
2911
+ repo_key, _, path_val = spec.partition("=")
2912
+ repo_key = repo_key.strip()
2913
+ path_val = path_val.strip()
2914
+ if not repo_key or not path_val:
2915
+ parser.error(f"--workspace expects a non-empty 'repo=PATH', got {spec!r}")
2916
+ workspace_overrides[repo_key] = Path(path_val)
2917
+
2891
2918
  def _resolve_workspace(node) -> Path:
2919
+ override = workspace_overrides.get(node.repo)
2920
+ if override is not None:
2921
+ return override
2922
+ node_ws = getattr(node, "workspace", None)
2923
+ if node_ws:
2924
+ return Path(node_ws)
2892
2925
  return workspace_root / node.repo
2893
2926
 
2894
2927
  # Ledger path — must not be inside any repo's .phase-loop/
@@ -45,12 +45,27 @@ from .cross_repo_channel import ChannelDescriptor, parse_channel_line
45
45
  # ---------------------------------------------------------------------------
46
46
  # Data model — IF-0-P2-1
47
47
 
48
+ #: Supported node modes. ``execute`` (default) runs the per-repo run_loop to
49
+ #: build the node's phase, then publishes what it produced. ``prebuilt`` lands
50
+ #: an already-committed, independently-verified branch WITHOUT re-executing the
51
+ #: phase (no executor dispatch) — see ``train_runner`` for the prebuilt path.
52
+ SUPPORTED_NODE_MODES = frozenset({"execute", "prebuilt"})
53
+
54
+
48
55
  @dataclass(frozen=True)
49
56
  class TrainNode:
50
- """Identity of one node in the release train: a ``(repo, roadmap)`` pair."""
57
+ """Identity of one node in the release train: a ``(repo, roadmap)`` pair.
58
+
59
+ ``mode`` selects how the coordinator lands the node (``execute`` = run the
60
+ phase then publish; ``prebuilt`` = publish an already-committed branch with
61
+ no executor dispatch). ``workspace`` optionally overrides where the node's
62
+ checkout lives on disk (an absolute path), for nodes on arbitrary volumes.
63
+ """
51
64
 
52
65
  repo: str
53
66
  roadmap: str
67
+ mode: str = "execute"
68
+ workspace: Optional[str] = None
54
69
 
55
70
  @property
56
71
  def node_id(self) -> str:
@@ -116,7 +131,7 @@ class TrainRoadmap:
116
131
  _TITLE_RE = re.compile(r"^#\s+Release Train:\s*(.+?)\s*$", re.MULTILINE)
117
132
  _NODE_HEADING_RE = re.compile(r"^###\s+Node:\s*(.+?)\s*$", re.MULTILINE)
118
133
  _FIELD_RE = re.compile(
119
- r"^\*\*(?P<label>Depends on|Channel):\*\*\s*(?P<value>.+)$",
134
+ r"^\*\*(?P<label>Depends on|Channel|Mode|Workspace):\*\*\s*(?P<value>.+)$",
120
135
  re.MULTILINE | re.IGNORECASE,
121
136
  )
122
137
 
@@ -180,13 +195,41 @@ def parse_train_roadmap(text: str) -> TrainRoadmap:
180
195
  raw_edges: List[Tuple[TrainNode, str, str]] = [] # (downstream, dep_id, channel_raw)
181
196
 
182
197
  for raw_id, body in node_bodies:
183
- node = _parse_node_id(raw_id)
184
- nodes.append(node)
198
+ base = _parse_node_id(raw_id)
185
199
 
186
200
  fields: Dict[str, str] = {}
187
201
  for m in _FIELD_RE.finditer(body):
188
202
  fields[m.group("label").lower()] = m.group("value").strip()
189
203
 
204
+ # Mode: default 'execute'; a bare (none) value also means the default.
205
+ # Reject any unknown mode with a coded, node-named parse error. (T-A..
206
+ # T-F are taken by validate_train; (T-G) is the next free code and keeps
207
+ # the same coded-diagnostic style for the mode-grammar violation.)
208
+ mode_raw = fields.get("mode", "execute").strip().lower()
209
+ if mode_raw in _NONE_VALUES:
210
+ mode_raw = "execute"
211
+ if mode_raw not in SUPPORTED_NODE_MODES:
212
+ raise ValueError(
213
+ f"(T-G) node '{base.node_id}' declares unknown mode {mode_raw!r}; "
214
+ f"supported modes are 'execute' (default) and 'prebuilt'"
215
+ )
216
+
217
+ # Workspace: optional per-node absolute-path override for the checkout.
218
+ workspace_raw = fields.get("workspace")
219
+ workspace = (
220
+ workspace_raw.strip()
221
+ if workspace_raw and workspace_raw.strip().lower() not in _NONE_VALUES
222
+ else None
223
+ )
224
+
225
+ node = TrainNode(
226
+ repo=base.repo,
227
+ roadmap=base.roadmap,
228
+ mode=mode_raw,
229
+ workspace=workspace,
230
+ )
231
+ nodes.append(node)
232
+
190
233
  dep_raw = fields.get("depends on", "(none)")
191
234
  channel_raw = fields.get("channel", "(none)")
192
235
 
@@ -72,6 +72,11 @@ from .train_roadmap import TrainEdge, TrainNode, TrainRoadmap
72
72
  ResolveWorkspace = Callable[[TrainNode], Path]
73
73
  ResolveOwnedPaths = Callable[[TrainNode], Sequence[str]]
74
74
 
75
+ #: Default base branch a prebuilt node's committed work is measured against.
76
+ #: Matches ``_check_base_branch_exists``'s default so the ahead-check and the
77
+ #: existence-check agree on which ``origin/<base>`` to use.
78
+ _DEFAULT_BASE = "main"
79
+
75
80
 
76
81
  @dataclass(frozen=True)
77
82
  class CoordinatorRuntime:
@@ -195,6 +200,71 @@ def _check_base_branch_exists(
195
200
  return None
196
201
 
197
202
 
203
+ def _check_branch_ahead_of_base(
204
+ workspace: Path, node_id: str, base: str = _DEFAULT_BASE
205
+ ) -> Optional[str]:
206
+ """Return an error string if the branch is NOT strictly ahead of origin/<base>.
207
+
208
+ A prebuilt node must carry committed work — a clean-but-not-ahead workspace
209
+ has nothing to publish, which is a preflight error. Uses the two-dot
210
+ ``origin/<base>..HEAD`` count (commits on HEAD not on base).
211
+ """
212
+ completed = subprocess.run(
213
+ ["git", "-C", str(workspace), "rev-list", "--count", f"origin/{base}..HEAD"],
214
+ capture_output=True,
215
+ text=True,
216
+ timeout=15,
217
+ )
218
+ if completed.returncode != 0:
219
+ return (
220
+ f"[{node_id}] could not compute commits ahead of 'origin/{base}': "
221
+ f"{completed.stderr.strip() or 'rev-list failed'}"
222
+ )
223
+ try:
224
+ ahead = int(completed.stdout.strip() or "0")
225
+ except ValueError:
226
+ ahead = 0
227
+ if ahead <= 0:
228
+ return (
229
+ f"[{node_id}] prebuilt node workspace '{workspace}' is clean but not "
230
+ f"ahead of 'origin/{base}' — nothing to publish (a prebuilt node must "
231
+ f"carry committed work)"
232
+ )
233
+ return None
234
+
235
+
236
+ def _prebuilt_owned_paths(
237
+ workspace: Path, base: str = _DEFAULT_BASE
238
+ ) -> List[str]:
239
+ """Return the paths a prebuilt branch changed vs origin/<base> (committed diff).
240
+
241
+ Uses the three-dot ``origin/<base>...HEAD`` diff (changes on HEAD since the
242
+ merge-base) so the published PR's owned-paths reflect exactly the committed
243
+ work. Stubbable seam: inject ``_prebuilt_owned_paths_fn`` into
244
+ :func:`run_train`.
245
+ """
246
+ completed = subprocess.run(
247
+ ["git", "-C", str(workspace), "diff", "--name-only", f"origin/{base}...HEAD"],
248
+ capture_output=True,
249
+ text=True,
250
+ timeout=30,
251
+ )
252
+ if completed.returncode != 0:
253
+ # Fail CLOSED: a diff error must not yield an empty owned-paths scope that the
254
+ # broker admission would approve while the push still publishes the real branch
255
+ # (approved-nothing / published-something scope mismatch). Raising blocks the node.
256
+ raise RuntimeError(
257
+ f"could not compute prebuilt owned paths vs 'origin/{base}': "
258
+ f"{completed.stderr.strip() or 'git diff failed'}"
259
+ )
260
+ owned = [p.strip() for p in completed.stdout.splitlines() if p.strip()]
261
+ if not owned:
262
+ # A prebuilt node that is ahead-of-base yet has no net file changes has nothing
263
+ # to publish — fail closed rather than admit an empty scope.
264
+ raise RuntimeError(f"prebuilt branch has no committed changes vs 'origin/{base}' to publish")
265
+ return owned
266
+
267
+
198
268
  def _default_preflight(
199
269
  nodes: List[TrainNode],
200
270
  resolve_workspace: ResolveWorkspace,
@@ -206,6 +276,11 @@ def _default_preflight(
206
276
  2. Per-repo: workspace clean (no uncommitted changes).
207
277
  3. Per-repo: remote ``origin`` is reachable.
208
278
  4. Per-repo: base branch ``origin/main`` exists.
279
+ 5. Prebuilt nodes only: the branch is strictly AHEAD of ``origin/main``
280
+ (it carries the committed work). A clean-but-not-ahead prebuilt node
281
+ is a preflight error — nothing to publish.
282
+
283
+ Execute-node checks (2–4) are unchanged; prebuilt adds check 5.
209
284
 
210
285
  A non-empty return means the entry gate is closed; zero PRs must be opened.
211
286
  """
@@ -218,11 +293,15 @@ def _default_preflight(
218
293
 
219
294
  for node in nodes:
220
295
  workspace = resolve_workspace(node)
221
- for check_fn in (
296
+ checks = [
222
297
  _check_repo_clean,
223
298
  _check_remote_reachable,
224
299
  _check_base_branch_exists,
225
- ):
300
+ ]
301
+ # Prebuilt nodes must additionally be strictly ahead of the base.
302
+ if getattr(node, "mode", "execute") == "prebuilt":
303
+ checks.append(_check_branch_ahead_of_base)
304
+ for check_fn in checks:
226
305
  err = check_fn(workspace, node.node_id)
227
306
  if err:
228
307
  errors.append(err)
@@ -666,6 +745,9 @@ def run_train(
666
745
  _pr_is_open: Optional[Callable] = None,
667
746
  _live_pr_head_sha_fn: Optional[Callable] = None,
668
747
  _preflight_fn: Optional[Callable] = None,
748
+ # Prebuilt-node seam: derives a prebuilt branch's owned paths from its
749
+ # committed diff vs base. Defaults to the live git implementation.
750
+ _prebuilt_owned_paths_fn: Optional[Callable] = None,
669
751
  # Broker admission builder (runtime, node, workspace, owned_paths) → AdmissionRequest.
670
752
  # Only invoked when a broker-authoritative coordinator_runtime is supplied.
671
753
  _admission_fn: Optional[Callable] = None,
@@ -753,6 +835,11 @@ def run_train(
753
835
  _live_pr_head_sha_fn if _live_pr_head_sha_fn is not None else _live_pr_head_sha
754
836
  )
755
837
  preflight_fn = _preflight_fn if _preflight_fn is not None else _default_preflight
838
+ prebuilt_owned_paths_fn = (
839
+ _prebuilt_owned_paths_fn
840
+ if _prebuilt_owned_paths_fn is not None
841
+ else _prebuilt_owned_paths
842
+ )
756
843
  admission_fn = _admission_fn if _admission_fn is not None else _default_build_admission
757
844
 
758
845
  # Track whether caller supplied an explicit owned-paths resolver so we know
@@ -775,6 +862,26 @@ def run_train(
775
862
  # --- Step 1: Topo-sort (raises ValueError on cycle) --------------------
776
863
  topo_order = roadmap.topo_order()
777
864
 
865
+ # Prebuilt nodes stop at drafts_open; P4 governed merge for prebuilt nodes
866
+ # is out of scope (the re-verify path expects per-repo phase-loop state a
867
+ # prebuilt node need not carry). Fail loud BEFORE any PR opens rather than
868
+ # emit a misleading reverify failure mid-merge. Follow-up: a prebuilt-aware
869
+ # P4 re-verify (verify the committed branch against the merged upstream pin).
870
+ if _merge_phase_enabled and run_mode == "governed":
871
+ prebuilt_ids = [
872
+ n.node_id for n in topo_order
873
+ if getattr(n, "mode", "execute") == "prebuilt"
874
+ ]
875
+ if prebuilt_ids:
876
+ return {
877
+ "status": "preflight_failed",
878
+ "errors": [
879
+ "prebuilt node(s) are not supported under --governed (P4 merge): "
880
+ f"{', '.join(prebuilt_ids)}; run without --governed to open draft "
881
+ "PRs and stop at drafts_open, then merge the prebuilt PRs manually"
882
+ ],
883
+ }
884
+
778
885
  # --- Step 2: Train-level preflight — ALL repos, BEFORE any PR ----------
779
886
  # This is the structural guarantee that preflight failure → zero PRs:
780
887
  # we return immediately here, before the per-node loop is entered.
@@ -930,138 +1037,171 @@ def run_train(
930
1037
  append_record(ledger_path, LedgerRecord(node_id=nid, status="running"))
931
1038
 
932
1039
  try:
933
- # (i) Inject upstream draft refs (IF-0-P2-2) BEFORE run_loop.
934
- # Collect injected paths to union into owned_paths after run_loop.
935
- #
936
- # The guard below is a defensive invariant. It should be unreachable
937
- # in a well-formed train: validate_train_loud (T-B) ensures every
938
- # upstream is a declared node, and topo-sort guarantees we processed
939
- # it before this node. If the upstream failed/was blocked, run_train
940
- # returns immediately and never reaches this downstream. Kept here to
941
- # make the "no silent skip" contract explicit and catch future refactors.
942
- injected_channel_paths: List[str] = []
943
- for edge in upstream_edges:
944
- if edge.channel.kind == "order-only":
945
- # #47: an order-only edge enforces merge ORDER (via the topo
946
- # sort + sequential per-node execution) but carries no physical
947
- # channel — the downstream does not consume the upstream, so
948
- # there is nothing to inject. Skip; do not resolve a ref.
949
- continue
950
- upstream_result = completed_nodes.get(edge.upstream.node_id)
951
- if upstream_result is None:
952
- # Defensive: topo-order + T-B validation make this
953
- # unreachable; kept as an explicit fail-loud guard.
954
- raise RuntimeError(
955
- f"upstream ref for '{edge.upstream.node_id}' is not resolved "
956
- f"(not in completed_nodes) — cannot inject into "
957
- f"'{nid}'; the upstream must be built and published first"
958
- )
959
- ref = upstream_result.get("head_sha")
960
- if not ref:
961
- # Block: do NOT fall back to injecting a moving branch name.
962
- # A missing SHA means neither the live query nor the ledger
963
- # have a pinnable ref — injecting a branch name would build
964
- # the downstream against a moving target.
965
- raise RuntimeError(
966
- f"no resolvable SHA for upstream '{edge.upstream.node_id}' "
967
- f"(live head SHA query returned None and ledger head_sha is "
968
- f"None); cannot inject a moving branch name for channel "
969
- f"{edge.channel.kind!r} — resolve the upstream SHA and re-run"
1040
+ if getattr(node, "mode", "execute") == "prebuilt":
1041
+ # Prebuilt node: land already-committed, independently-verified
1042
+ # work. NO upstream injection (it would dirty the clean tree and
1043
+ # force a re-commit), NO run_loop (no executor dispatch), NO
1044
+ # snapshot guard. owned_paths come from the committed diff vs
1045
+ # base (or an explicit resolver); publish pushes the existing
1046
+ # branch WITHOUT a new commit (prebuilt=True).
1047
+ if _explicit_owned_paths:
1048
+ owned_paths = list(resolve_owned_paths(node)) # type: ignore[arg-type]
1049
+ else:
1050
+ owned_paths = list(prebuilt_owned_paths_fn(workspace, _DEFAULT_BASE))
1051
+ pr_body = _build_pr_body(node, topo_order, completed_nodes, upstream_edges)
1052
+ publish_kwargs: Dict[str, object] = {
1053
+ "draft": True, # P3 invariant: draft-only, never merge
1054
+ "pr_body": pr_body,
1055
+ "prebuilt": True,
1056
+ }
1057
+ # Route the prebuilt publish through the broker EXACTLY as the
1058
+ # execute path does: a broker-authoritative coordinator_runtime
1059
+ # supplies the client + a per-node admission. Without a
1060
+ # broker_client the publish primitive fails closed
1061
+ # (broker_required) — a prebuilt node never does a direct push.
1062
+ if coordinator_runtime is not None:
1063
+ publish_kwargs["broker_client"] = coordinator_runtime.broker_client
1064
+ publish_kwargs["admission"] = admission_fn(
1065
+ coordinator_runtime, node, workspace, owned_paths
970
1066
  )
971
- injected = set_upstream_ref_fn(workspace, edge.channel, ref)
972
- if injected:
973
- injected_channel_paths.extend(injected)
974
-
975
- # (ii) Invoke the unchanged per-repo run_loop.
976
- # The real run_loop returns (StateSnapshot, list[LaunchResult]).
977
- result_tuple = run_loop_fn(
978
- workspace, workspace / node.roadmap, run_mode=run_mode
979
- )
980
-
981
- # SHOULD-FIX 3: Guard against partial multi-phase nodes.
982
- #
983
- # run_loop defaults to max_phases=1, so a node with a >1-phase
984
- # roadmap stops after the first phase. If any phase is still
985
- # "planned" the node is incomplete — publishing it ships a partial
986
- # draft PR. Block loudly instead.
987
- #
988
- # Use getattr so we're forward-compatible with test fixtures that
989
- # return lightweight SimpleNamespace objects lacking a phases field.
990
- _node_snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
991
- _node_phases = getattr(_node_snapshot, "phases", None)
992
- if _node_phases is not None:
993
- # A node may publish a draft PR only when EVERY phase reached a
994
- # clean green terminal — "complete" or "awaiting_phase_closeout"
995
- # (the post-run_loop success state under manual closeout). ANY
996
- # other state (planned/blocked/failed_verification/executing/
997
- # human_required/unknown) means the node is incomplete or broken.
998
- # Blocking only "planned" (the prior narrow guard) let a
999
- # *failed*-phase node publish a draft that could later trivial-pass
1000
- # P4 re-verify on a no-verification plan — a combined false-green.
1001
- # Block loudly on any non-green phase instead.
1002
- _GREEN_PHASE_STATES = {"complete", "awaiting_phase_closeout"}
1003
- _not_green = sorted(
1004
- ph for ph, st in _node_phases.items() if st not in _GREEN_PHASE_STATES
1067
+ publish_result = publish_fn(
1068
+ workspace,
1069
+ owned_paths,
1070
+ **publish_kwargs,
1005
1071
  )
1006
- if _not_green:
1007
- raise RuntimeError(
1008
- f"node '{nid}' has phases not in a green state after run_loop "
1009
- f"({', '.join(_not_green)}); refusing to publish a partial or "
1010
- f"failed draft PR — every phase must reach complete/"
1011
- f"awaiting_phase_closeout before publishing"
1012
- )
1013
-
1014
- # (iii) Determine owned paths (Finding #1).
1015
- # If the caller supplied an explicit resolver, honour it.
1016
- # Otherwise use the snapshot's produced/owned paths so the
1017
- # published PR contains the actual implementation, not just
1018
- # the roadmap file.
1019
- if _explicit_owned_paths:
1020
- owned_paths = list(resolve_owned_paths(node)) # type: ignore[arg-type]
1021
1072
  else:
1022
- snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
1023
- if snapshot is not None:
1024
- produced = (
1025
- getattr(snapshot, "phase_owned_dirty_paths", None)
1026
- or getattr(snapshot, "dirty_paths", None)
1027
- or ()
1073
+ # (i) Inject upstream draft refs (IF-0-P2-2) BEFORE run_loop.
1074
+ # Collect injected paths to union into owned_paths after run_loop.
1075
+ #
1076
+ # The guard below is a defensive invariant. It should be unreachable
1077
+ # in a well-formed train: validate_train_loud (T-B) ensures every
1078
+ # upstream is a declared node, and topo-sort guarantees we processed
1079
+ # it before this node. If the upstream failed/was blocked, run_train
1080
+ # returns immediately and never reaches this downstream. Kept here to
1081
+ # make the "no silent skip" contract explicit and catch future refactors.
1082
+ injected_channel_paths: List[str] = []
1083
+ for edge in upstream_edges:
1084
+ if edge.channel.kind == "order-only":
1085
+ # #47: an order-only edge enforces merge ORDER (via the topo
1086
+ # sort + sequential per-node execution) but carries no physical
1087
+ # channel — the downstream does not consume the upstream, so
1088
+ # there is nothing to inject. Skip; do not resolve a ref.
1089
+ continue
1090
+ upstream_result = completed_nodes.get(edge.upstream.node_id)
1091
+ if upstream_result is None:
1092
+ # Defensive: topo-order + T-B validation make this
1093
+ # unreachable; kept as an explicit fail-loud guard.
1094
+ raise RuntimeError(
1095
+ f"upstream ref for '{edge.upstream.node_id}' is not resolved "
1096
+ f"(not in completed_nodes) — cannot inject into "
1097
+ f"'{nid}'; the upstream must be built and published first"
1098
+ )
1099
+ ref = upstream_result.get("head_sha")
1100
+ if not ref:
1101
+ # Block: do NOT fall back to injecting a moving branch name.
1102
+ # A missing SHA means neither the live query nor the ledger
1103
+ # have a pinnable ref — injecting a branch name would build
1104
+ # the downstream against a moving target.
1105
+ raise RuntimeError(
1106
+ f"no resolvable SHA for upstream '{edge.upstream.node_id}' "
1107
+ f"(live head SHA query returned None and ledger head_sha is "
1108
+ f"None); cannot inject a moving branch name for channel "
1109
+ f"{edge.channel.kind!r} — resolve the upstream SHA and re-run"
1110
+ )
1111
+ injected = set_upstream_ref_fn(workspace, edge.channel, ref)
1112
+ if injected:
1113
+ injected_channel_paths.extend(injected)
1114
+
1115
+ # (ii) Invoke the unchanged per-repo run_loop.
1116
+ # The real run_loop returns (StateSnapshot, list[LaunchResult]).
1117
+ result_tuple = run_loop_fn(
1118
+ workspace, workspace / node.roadmap, run_mode=run_mode
1119
+ )
1120
+
1121
+ # SHOULD-FIX 3: Guard against partial multi-phase nodes.
1122
+ #
1123
+ # run_loop defaults to max_phases=1, so a node with a >1-phase
1124
+ # roadmap stops after the first phase. If any phase is still
1125
+ # "planned" the node is incomplete — publishing it ships a partial
1126
+ # draft PR. Block loudly instead.
1127
+ #
1128
+ # Use getattr so we're forward-compatible with test fixtures that
1129
+ # return lightweight SimpleNamespace objects lacking a phases field.
1130
+ _node_snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
1131
+ _node_phases = getattr(_node_snapshot, "phases", None)
1132
+ if _node_phases is not None:
1133
+ # A node may publish a draft PR only when EVERY phase reached a
1134
+ # clean green terminal — "complete" or "awaiting_phase_closeout"
1135
+ # (the post-run_loop success state under manual closeout). ANY
1136
+ # other state (planned/blocked/failed_verification/executing/
1137
+ # human_required/unknown) means the node is incomplete or broken.
1138
+ # Blocking only "planned" (the prior narrow guard) let a
1139
+ # *failed*-phase node publish a draft that could later trivial-pass
1140
+ # P4 re-verify on a no-verification plan — a combined false-green.
1141
+ # Block loudly on any non-green phase instead.
1142
+ _GREEN_PHASE_STATES = {"complete", "awaiting_phase_closeout"}
1143
+ _not_green = sorted(
1144
+ ph for ph, st in _node_phases.items() if st not in _GREEN_PHASE_STATES
1028
1145
  )
1029
- owned_paths = list(produced)
1146
+ if _not_green:
1147
+ raise RuntimeError(
1148
+ f"node '{nid}' has phases not in a green state after run_loop "
1149
+ f"({', '.join(_not_green)}); refusing to publish a partial or "
1150
+ f"failed draft PR — every phase must reach complete/"
1151
+ f"awaiting_phase_closeout before publishing"
1152
+ )
1153
+
1154
+ # (iii) Determine owned paths (Finding #1).
1155
+ # If the caller supplied an explicit resolver, honour it.
1156
+ # Otherwise use the snapshot's produced/owned paths so the
1157
+ # published PR contains the actual implementation, not just
1158
+ # the roadmap file.
1159
+ if _explicit_owned_paths:
1160
+ owned_paths = list(resolve_owned_paths(node)) # type: ignore[arg-type]
1030
1161
  else:
1031
- owned_paths = []
1032
-
1033
- # Union the coordinator-injected channel paths into owned_paths so
1034
- # the pin/submodule change always ships in the PR even if run_loop's
1035
- # snapshot doesn't include the injected file (Finding #6 / union fix).
1036
- # de-duplicate while preserving order (snapshot paths first).
1037
- if injected_channel_paths:
1038
- seen = set(owned_paths)
1039
- for p in injected_channel_paths:
1040
- if p not in seen:
1041
- owned_paths.append(p)
1042
- seen.add(p)
1043
-
1044
- # (iv) Publish as draft PR via the P1 runtime primitive.
1045
- # draft=True is structural P3 never merges.
1046
- pr_body = _build_pr_body(node, topo_order, completed_nodes, upstream_edges)
1047
- publish_kwargs: Dict[str, object] = {
1048
- "draft": True, # P3 invariant: draft-only, never merge
1049
- "pr_body": pr_body,
1050
- }
1051
- # Route the publish through the broker's admission+verb path when a
1052
- # broker-authoritative runtime is supplied. Past the line-699 guard,
1053
- # coordinator_runtime is not None broker_client is not None. Legacy
1054
- # callers (no runtime) publish exactly as before no broker kwargs.
1055
- if coordinator_runtime is not None:
1056
- publish_kwargs["broker_client"] = coordinator_runtime.broker_client
1057
- publish_kwargs["admission"] = admission_fn(
1058
- coordinator_runtime, node, workspace, owned_paths
1162
+ snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
1163
+ if snapshot is not None:
1164
+ produced = (
1165
+ getattr(snapshot, "phase_owned_dirty_paths", None)
1166
+ or getattr(snapshot, "dirty_paths", None)
1167
+ or ()
1168
+ )
1169
+ owned_paths = list(produced)
1170
+ else:
1171
+ owned_paths = []
1172
+
1173
+ # Union the coordinator-injected channel paths into owned_paths so
1174
+ # the pin/submodule change always ships in the PR even if run_loop's
1175
+ # snapshot doesn't include the injected file (Finding #6 / union fix).
1176
+ # de-duplicate while preserving order (snapshot paths first).
1177
+ if injected_channel_paths:
1178
+ seen = set(owned_paths)
1179
+ for p in injected_channel_paths:
1180
+ if p not in seen:
1181
+ owned_paths.append(p)
1182
+ seen.add(p)
1183
+
1184
+ # (iv) Publish as draft PR via the P1 runtime primitive.
1185
+ # draft=True is structuralP3 never merges.
1186
+ pr_body = _build_pr_body(node, topo_order, completed_nodes, upstream_edges)
1187
+ publish_kwargs: Dict[str, object] = {
1188
+ "draft": True, # P3 invariant: draft-only, never merge
1189
+ "pr_body": pr_body,
1190
+ }
1191
+ # Route the publish through the broker's admission+verb path when a
1192
+ # broker-authoritative runtime is supplied. Past the line-699 guard,
1193
+ # coordinator_runtime is not None ⟹ broker_client is not None. Legacy
1194
+ # callers (no runtime) publish exactly as before — no broker kwargs.
1195
+ if coordinator_runtime is not None:
1196
+ publish_kwargs["broker_client"] = coordinator_runtime.broker_client
1197
+ publish_kwargs["admission"] = admission_fn(
1198
+ coordinator_runtime, node, workspace, owned_paths
1199
+ )
1200
+ publish_result = publish_fn(
1201
+ workspace,
1202
+ owned_paths,
1203
+ **publish_kwargs,
1059
1204
  )
1060
- publish_result = publish_fn(
1061
- workspace,
1062
- owned_paths,
1063
- **publish_kwargs,
1064
- )
1065
1205
 
1066
1206
  except Exception as exc:
1067
1207
  # Inject or run_loop or publish raised — mark blocked so the node
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.7.6
3
+ Version: 0.7.7
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.0
@@ -752,6 +752,7 @@ tests/test_train_e2e.py
752
752
  tests/test_train_invariants.py
753
753
  tests/test_train_merge.py
754
754
  tests/test_train_order_only_deps_47.py
755
+ tests/test_train_prebuilt.py
755
756
  tests/test_train_roadmap.py
756
757
  tests/test_train_runner.py
757
758
  tests/test_unattended_release.py