phase-loop-runtime 0.7.7__tar.gz → 0.7.9__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 (772) hide show
  1. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cli.py +31 -0
  5. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/__init__.py +2 -2
  6. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/credsep.py +8 -1
  7. phase_loop_runtime-0.7.9/src/phase_loop_runtime/convergence/broker/live.py +187 -0
  8. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/gemini-execute-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/claude-execute-phase}/scripts/validate_plan_doc.py +31 -0
  9. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/gemini-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/claude-plan-phase}/scripts/validate_plan_doc.py +31 -0
  10. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +31 -0
  11. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/opencode-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/codex-plan-phase}/scripts/validate_plan_doc.py +31 -0
  12. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/opencode-execute-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/gemini-execute-phase}/scripts/validate_plan_doc.py +31 -0
  13. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/codex-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/gemini-plan-phase}/scripts/validate_plan_doc.py +31 -0
  14. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/claude-execute-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/opencode-execute-phase}/scripts/validate_plan_doc.py +31 -0
  15. {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/claude-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/opencode-plan-phase}/scripts/validate_plan_doc.py +31 -0
  16. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  17. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/SOURCES.txt +2 -0
  18. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_credsep.py +21 -0
  19. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_live_enable.py +137 -1
  20. phase_loop_runtime-0.7.9/tests/test_specpkgmin_wheel.py +99 -0
  21. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_runner.py +61 -0
  22. phase_loop_runtime-0.7.9/tests/test_validate_plan_doc_producer_dependency.py +128 -0
  23. phase_loop_runtime-0.7.7/src/phase_loop_runtime/convergence/broker/live.py +0 -82
  24. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/MANIFEST.in +0 -0
  25. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/README.md +0 -0
  26. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/protocol/protocol.md +0 -0
  27. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/setup.cfg +0 -0
  28. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  29. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  30. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  31. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  32. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  33. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  34. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  35. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  36. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  37. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  38. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  39. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  40. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  41. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  42. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  43. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  44. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  45. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  46. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  47. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  48. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  49. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  50. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  51. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  52. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  53. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  54. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  55. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  56. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  57. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  58. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  59. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  60. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  61. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  62. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  63. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  64. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  65. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  66. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  67. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  68. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  69. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  70. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  71. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  72. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  73. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  74. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  75. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  76. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  77. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  78. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  79. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  80. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  81. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  82. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  83. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  84. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  85. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  86. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  87. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  88. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  89. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  90. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  91. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  92. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  93. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  94. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  95. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  96. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  97. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  98. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  99. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  100. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  101. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  102. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_modular.py +0 -0
  103. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  104. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  105. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  106. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  107. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  108. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  109. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  110. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  111. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/broker.py +0 -0
  112. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/build_bundle.py +0 -0
  113. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/capability_registry.py +0 -0
  114. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/classifier.py +0 -0
  115. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  116. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  117. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout.py +0 -0
  118. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  119. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  120. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validation.py +0 -0
  121. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validators.py +0 -0
  122. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  123. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  124. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  125. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  126. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  127. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  128. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  129. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  130. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  131. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  132. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  133. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  134. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  135. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  136. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  137. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  138. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  139. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  140. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  141. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  142. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  143. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  144. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  145. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  146. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  147. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  148. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  149. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  150. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  151. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  152. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  153. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  154. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  155. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/status.py +0 -0
  156. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  157. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  158. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  159. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/discovery.py +0 -0
  160. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  161. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  162. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_audit.py +0 -0
  163. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_freshness.py +0 -0
  164. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  165. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doctor.py +0 -0
  166. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  167. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events.py +0 -0
  168. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events_migration.py +0 -0
  169. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit.py +0 -0
  170. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  171. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/executor_availability.py +0 -0
  172. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_map.py +0 -0
  173. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  174. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  175. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/gate_posture.py +0 -0
  176. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_discipline.py +0 -0
  177. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_ops.py +0 -0
  178. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_topology.py +0 -0
  179. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_bundle.py +0 -0
  180. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_premerge.py +0 -0
  181. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_review.py +0 -0
  182. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff.py +0 -0
  183. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff_path.py +0 -0
  184. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  185. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/injection.py +0 -0
  186. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/install_status.py +0 -0
  187. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  188. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/launcher.py +0 -0
  189. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lease_store.py +0 -0
  190. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/maintenance.py +0 -0
  191. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  192. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/models.py +0 -0
  193. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/observability.py +0 -0
  194. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/panel_invoker.py +0 -0
  195. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  196. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  197. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  198. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  199. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  200. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  201. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  202. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  203. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  204. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_ir.py +0 -0
  205. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_manifest.py +0 -0
  206. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/planner_validation.py +0 -0
  207. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/profiles.py +0 -0
  208. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/prompts.py +0 -0
  209. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/provenance.py +0 -0
  210. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/publishing.py +0 -0
  211. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/py.typed +0 -0
  212. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/ratification_policy.py +0 -0
  213. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reconcile.py +0 -0
  214. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/redaction.py +0 -0
  215. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reflection_sync.py +0 -0
  216. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/release_guard.py +0 -0
  217. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/render.py +0 -0
  218. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/repo_validation.py +0 -0
  219. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/review_summary.py +0 -0
  220. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  221. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  222. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_log.py +0 -0
  223. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  224. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  225. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runner.py +0 -0
  226. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_paths.py +0 -0
  227. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_projection.py +0 -0
  228. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_resources.py +0 -0
  229. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schema_export.py +0 -0
  230. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  231. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  232. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  233. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_install.py +0 -0
  234. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_inventory.py +0 -0
  235. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_paths.py +0 -0
  236. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  237. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  238. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  239. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  240. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  241. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  242. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  243. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  244. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  245. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  246. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  247. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  248. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  249. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  250. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  251. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  252. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  253. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  254. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  255. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  256. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  257. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  258. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  259. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  260. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  261. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  262. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  263. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  264. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  265. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  266. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  267. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  268. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  269. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  270. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  271. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  272. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  273. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  274. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  275. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  276. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  277. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  278. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  279. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  280. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  281. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  282. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  283. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  284. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  285. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  286. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  287. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  288. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  289. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  290. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  291. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  292. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  293. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  294. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  295. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  296. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  297. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  298. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  299. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  300. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  301. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  302. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  303. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  304. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  305. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  306. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  307. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  308. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  309. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  310. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  311. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  312. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  313. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  314. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  315. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  316. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  317. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  318. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  319. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  320. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  321. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  322. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  323. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  324. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  325. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  326. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  327. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  328. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  329. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  330. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  331. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  332. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  333. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  334. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  335. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  336. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  337. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  338. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  339. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  340. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  341. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  342. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  343. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  344. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  345. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  346. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  347. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  348. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  349. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  350. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  351. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  352. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  353. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  354. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  355. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  356. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  357. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  358. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  359. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  361. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  362. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  364. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  365. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  366. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  367. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  368. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  369. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  370. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  371. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  372. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  373. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  374. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  375. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  376. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  377. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  378. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  379. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  380. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  381. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  382. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  383. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  384. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  385. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  386. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  387. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  388. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  389. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  390. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  391. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  392. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  393. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  394. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  395. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  396. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  397. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  398. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  399. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  400. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  401. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  402. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  403. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  404. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  405. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  406. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  407. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  408. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  409. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  410. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  411. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  412. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  413. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  414. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  415. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  416. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  417. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state.py +0 -0
  418. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_degradation.py +0 -0
  419. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_ops.py +0 -0
  420. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker.py +0 -0
  421. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  422. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  423. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_ledger.py +0 -0
  424. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_roadmap.py +0 -0
  425. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_runner.py +0 -0
  426. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence.py +0 -0
  427. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  428. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  429. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worker_pool.py +0 -0
  430. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worktree_index.py +0 -0
  431. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  432. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  433. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  434. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  435. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_advisory_mode.py +0 -0
  436. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_alias_install.py +0 -0
  437. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backcompat.py +0 -0
  438. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_homebrew.py +0 -0
  439. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_omnigent.py +0 -0
  440. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_cli_legacy.py +0 -0
  441. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_composition.py +0 -0
  442. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_concurrency.py +0 -0
  443. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_config.py +0 -0
  444. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_golden.py +0 -0
  445. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_ingestion.py +0 -0
  446. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_integration.py +0 -0
  447. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_matrix.py +0 -0
  448. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_observability.py +0 -0
  449. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_presets.py +0 -0
  450. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_registries.py +0 -0
  451. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_resolver.py +0 -0
  452. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_schema.py +0 -0
  453. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_twin_alias_legacy.py +0 -0
  454. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_agent_runtime_provider_cs08.py +0 -0
  455. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_autosel.py +0 -0
  456. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_branchgov_preflight.py +0 -0
  457. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_certificate_tier.py +0 -0
  458. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_cli_train_status_45.py +0 -0
  459. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_break_glass_cli.py +0 -0
  460. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_classifier.py +0 -0
  461. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_convergence_fixes.py +0 -0
  462. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_exception_vocab.py +0 -0
  463. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_validator_hook.py +0 -0
  464. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_verification_gate.py +0 -0
  465. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_codex_effort_max_clamp_49.py +0 -0
  466. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_conformance_golden.py +0 -0
  467. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_dual_layout.py +0 -0
  468. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_gates.py +0 -0
  469. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_ingest.py +0 -0
  470. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_scaffold.py +0 -0
  471. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_adapters.py +0 -0
  472. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_admission.py +0 -0
  473. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_api.py +0 -0
  474. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_evidence.py +0 -0
  475. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_verbs.py +0 -0
  476. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_cli_integration.py +0 -0
  477. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_coordination_contracts.py +0 -0
  478. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_dispatch.py +0 -0
  479. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_contracts.py +0 -0
  480. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_log.py +0 -0
  481. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_fencing.py +0 -0
  482. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_fixture_contracts.py +0 -0
  483. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_invalidation.py +0 -0
  484. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_provider_contracts.py +0 -0
  485. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_reconcile.py +0 -0
  486. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_refresh.py +0 -0
  487. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_runtime_imports.py +0 -0
  488. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_seat_lifecycle.py +0 -0
  489. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_status.py +0 -0
  490. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_train_integration.py +0 -0
  491. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_coordinator_wave_loop.py +0 -0
  492. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_discovery_hygiene_legacy.py +0 -0
  493. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  494. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_helper.py +0 -0
  495. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_reentrancy.py +0 -0
  496. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  497. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_doc_delta_validator.py +0 -0
  498. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_docs_audit.py +0 -0
  499. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_docs_freshness.py +0 -0
  500. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_doctor_bom.py +0 -0
  501. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dotfiles_tree.py +0 -0
  502. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execgov.py +0 -0
  503. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execreg_launch_registry.py +0 -0
  504. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execute_phase_handoff_mode.py +0 -0
  505. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execution_policy_tiering.py +0 -0
  506. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_executor_availability.py +0 -0
  507. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_export_schema.py +0 -0
  508. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_fleet_map.py +0 -0
  509. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics.py +0 -0
  510. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics_export.py +0 -0
  511. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_gate_a_wheel_isolation.py +0 -0
  512. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_gate_posture.py +0 -0
  513. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_git_discipline.py +0 -0
  514. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_git_grounded_projection.py +0 -0
  515. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_disjointness_model_first.py +0 -0
  516. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_e2e.py +0 -0
  517. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_gate_crfixes.py +0 -0
  518. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_planning_gate.py +0 -0
  519. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge.py +0 -0
  520. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge_live.py +0 -0
  521. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_review.py +0 -0
  522. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_grokexec.py +0 -0
  523. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_hotfix_lane.py +0 -0
  524. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_injection_skill_failloud.py +0 -0
  525. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_lane_ir_override.py +0 -0
  526. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_launcher_liveness.py +0 -0
  527. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_launchspec_golden.py +0 -0
  528. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_lease_store.py +0 -0
  529. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_lease_store_conformance.py +0 -0
  530. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_ledger_serialization.py +0 -0
  531. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_leg_liveness_monitor.py +0 -0
  532. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_manifest_per_entry_164.py +0 -0
  533. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_model_class_policy.py +0 -0
  534. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_model_id_source_guard.py +0 -0
  535. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_observability_alerting.py +0 -0
  536. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory.py +0 -0
  537. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_cli.py +0 -0
  538. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  539. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_authority_boundary.py +0 -0
  540. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_drift.py +0 -0
  541. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_imports.py +0 -0
  542. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_pin.py +0 -0
  543. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_core_api.py +0 -0
  544. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_provenance.py +0 -0
  545. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_ci.py +0 -0
  546. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_cli.py +0 -0
  547. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_output.py +0 -0
  548. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_runtime.py +0 -0
  549. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_redaction.py +0 -0
  550. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_release_surface.py +0 -0
  551. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_schema_validation.py +0 -0
  552. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_vectors.py +0 -0
  553. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_advisory_mode_63.py +0 -0
  554. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_context_refs_114.py +0 -0
  555. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker.py +0 -0
  556. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_spawn.py +0 -0
  557. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_timeout_argv.py +0 -0
  558. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  559. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_native_fill_183.py +0 -0
  560. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_per_leg_model_66.py +0 -0
  561. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_streaming_verdicts.py +0 -0
  562. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_eof_48.py +0 -0
  563. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_liveness_188.py +0 -0
  564. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_verdict_summary.py +0 -0
  565. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_backcompat.py +0 -0
  566. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_cli.py +0 -0
  567. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle.py +0 -0
  568. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  569. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_dependency.py +0 -0
  570. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  571. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_injection.py +0 -0
  572. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_modular.py +0 -0
  573. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  574. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  575. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_export.py +0 -0
  576. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_source.py +0 -0
  577. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  578. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  579. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_build_bundle.py +0 -0
  580. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_classifier.py +0 -0
  581. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  582. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  583. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  584. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  585. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_security.py +0 -0
  586. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  587. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  588. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  589. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_route_selection.py +0 -0
  590. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli.py +0 -0
  591. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  592. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_control_only.py +0 -0
  593. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_event.py +0 -0
  594. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  595. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_hardening.py +0 -0
  596. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  597. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_schema.py +0 -0
  598. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_validation.py +0 -0
  599. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_citation.py +0 -0
  600. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_docs.py +0 -0
  601. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  602. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  603. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  604. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  605. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  606. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_discovery.py +0 -0
  607. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_docs.py +0 -0
  608. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  609. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  610. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  611. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  612. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_portal.py +0 -0
  613. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  614. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_drift_audit.py +0 -0
  615. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  616. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  617. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_events_migration.py +0 -0
  618. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit.py +0 -0
  619. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  620. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  621. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  622. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  623. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_execution_policy.py +0 -0
  624. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_executor_degradation.py +0 -0
  625. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_full_phase_mode.py +0 -0
  626. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff.py +0 -0
  627. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff_migration.py +0 -0
  628. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_init.py +0 -0
  629. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_injection.py +0 -0
  630. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_install_status.py +0 -0
  631. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  632. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_harnesses.py +0 -0
  633. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir.py +0 -0
  634. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  635. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_scheduler.py +0 -0
  636. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_launcher.py +0 -0
  637. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_debug.py +0 -0
  638. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_dedup.py +0 -0
  639. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_live_adapters.py +0 -0
  640. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_maintenance.py +0 -0
  641. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_metrics.py +0 -0
  642. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_migration_regressions.py +0 -0
  643. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  644. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  645. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  646. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_models.py +0 -0
  647. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_native_flags.py +0 -0
  648. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  649. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pi_executor.py +0 -0
  650. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  651. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  652. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  653. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  654. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  655. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_mode.py +0 -0
  656. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  657. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_manifest.py +0 -0
  658. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  659. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_validation.py +0 -0
  660. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_policy.py +0 -0
  661. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_protocol_contract.py +0 -0
  662. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_provenance.py +0 -0
  663. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile.py +0 -0
  664. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  665. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  666. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  667. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reducers.py +0 -0
  668. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  669. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  670. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  671. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_validate.py +0 -0
  672. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_rotation.py +0 -0
  673. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner.py +0 -0
  674. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  675. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_boundary.py +0 -0
  676. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_decouple.py +0 -0
  677. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_package_data.py +0 -0
  678. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_projection.py +0 -0
  679. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_schema_flow.py +0 -0
  680. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  681. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  682. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_contract.py +0 -0
  683. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  684. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_install.py +0 -0
  685. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  686. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_blockers.py +0 -0
  687. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  688. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_reentry.py +0 -0
  689. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  690. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  691. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  692. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_state.py +0 -0
  693. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  694. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  695. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  696. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  697. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  698. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_e2e.py +0 -0
  699. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_principles.py +0 -0
  700. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  701. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_reconcile.py +0 -0
  702. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_sched.py +0 -0
  703. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_schedharden.py +0 -0
  704. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_wave_runner.py +0 -0
  705. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_observability.py +0 -0
  706. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_runner.py +0 -0
  707. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_state.py +0 -0
  708. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_worktrees.py +0 -0
  709. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  710. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_worktree_executor.py +0 -0
  711. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  712. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  713. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  714. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_flag.py +0 -0
  715. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_markers.py +0 -0
  716. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  717. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  718. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  719. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  720. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  721. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pkg_layout_freeze.py +0 -0
  722. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_plan_ir_iter_waves.py +0 -0
  723. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_preflight_verification.py +0 -0
  724. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_proc_cpu.py +0 -0
  725. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_prune_merged_worktrees_script.py +0 -0
  726. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_publishing.py +0 -0
  727. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pushflow.py +0 -0
  728. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_ratification_policy.py +0 -0
  729. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  730. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_reconcile_verification_log.py +0 -0
  731. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_reflection_sync.py +0 -0
  732. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  733. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_release_pin_autotrack.py +0 -0
  734. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_repo_validation.py +0 -0
  735. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_review_leg_sandbox.py +0 -0
  736. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_review_summary.py +0 -0
  737. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_roadmap_authority.py +0 -0
  738. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_route_log.py +0 -0
  739. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_route_policy_conformance.py +0 -0
  740. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_routing_invariants.py +0 -0
  741. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_runtime_state_mirror_agreement.py +0 -0
  742. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_sibling_matcher_patterns.py +0 -0
  743. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_bundle_pinned.py +0 -0
  744. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_install_body_expansion.py +0 -0
  745. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_plan_manifest_write.py +0 -0
  746. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_sources_seam.py +0 -0
  747. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skills_bundle_drift.py +0 -0
  748. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skills_canon_parity.py +0 -0
  749. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skills_src_claude_literal_lint.py +0 -0
  750. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_spec_conformance_gate.py +0 -0
  751. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_status_read_only_62.py +0 -0
  752. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  753. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_sync_skills_apply_failloud.py +0 -0
  754. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker.py +0 -0
  755. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker_cli.py +0 -0
  756. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_task_message_resolver.py +0 -0
  757. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_e2e.py +0 -0
  758. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_invariants.py +0 -0
  759. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_merge.py +0 -0
  760. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_order_only_deps_47.py +0 -0
  761. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_prebuilt.py +0 -0
  762. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_roadmap.py +0 -0
  763. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_unattended_release.py +0 -0
  764. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  765. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  766. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence.py +0 -0
  767. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence_validator.py +0 -0
  768. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_visual_evidence_validator.py +0 -0
  769. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_workerpool_failure_isolation.py +0 -0
  770. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_workerpool_parallel.py +0 -0
  771. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_workerpool_worktree_alloc.py +0 -0
  772. {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/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.7
3
+ Version: 0.7.9
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.7"
7
+ version = "0.7.9"
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.7"
21
+ __version__ = "0.7.9"
@@ -2934,11 +2934,42 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
2934
2934
 
2935
2935
  as_json = bool(getattr(args, "json", False))
2936
2936
 
2937
+ # Build a broker-authoritative coordinator runtime so publish actually opens PRs.
2938
+ # Without a broker_client, publish_from_worktree fail-closes `broker_required` and
2939
+ # the train opens ZERO PRs. The routing broker binds per BrokerRequest.repo (the
2940
+ # node's resolved workspace) AND keeps a PER-REPO admission/evidence store, so one
2941
+ # node's ambiguous outcome fail-closes only that repo. The broker root is namespaced
2942
+ # by the roadmap's RESOLVED PATH hash (not the bare filename stem): two distinct
2943
+ # roadmap files — even same-stemmed, even under one explicit `--ledger-dir` — get
2944
+ # distinct broker roots, so an ambiguous outcome in one train can never fail-close a
2945
+ # different train. Keying on the stable path (not the content digest) keeps a
2946
+ # resumed train on its own epoch across roadmap edits. It lives under the ledger dir,
2947
+ # which the roadmap author keeps outside any repo's .phase-loop/ (INV-4); it is NOT
2948
+ # machine-enforced to be outside every node worktree, so keep train roadmaps + their
2949
+ # ledger dir out of the checkouts.
2950
+ import hashlib
2951
+
2952
+ from .convergence.broker import build_routing_broker_client
2953
+
2954
+ train_key = hashlib.sha256(str(train_path.resolve()).encode("utf-8")).hexdigest()[:16]
2955
+ coordinator_root = ledger_dir / "broker" / train_key
2956
+ coordinator_root.mkdir(parents=True, exist_ok=True)
2957
+ roadmap_digest = hashlib.sha256(train_path.read_bytes()).hexdigest()
2958
+ coordinator_runtime = train_runner.CoordinatorRuntime(
2959
+ train_id=train_path.stem,
2960
+ coordinator_root=coordinator_root,
2961
+ roadmap_path=str(train_path),
2962
+ roadmap_digest=roadmap_digest,
2963
+ workspace_id=train_path.stem,
2964
+ broker_client=build_routing_broker_client(broker_root=coordinator_root),
2965
+ )
2966
+
2937
2967
  result = train_runner.run_train(
2938
2968
  roadmap,
2939
2969
  ledger_path,
2940
2970
  run_mode=run_mode,
2941
2971
  resolve_workspace=_resolve_workspace,
2972
+ coordinator_runtime=coordinator_runtime,
2942
2973
  _merge_phase_enabled=True, # P4 gate: autonomous→drafts_open, governed→merge
2943
2974
  )
2944
2975
 
@@ -2,6 +2,6 @@
2
2
  from .admission import AdmissionRecord, BrokerAdmissionPolicy, LinearizableAdmissionStore
3
3
  from .credsep import BrokerEnvironmentBoundary, GitHubBrokerAdapter
4
4
  from .evidence import BrokerEvidenceStore, EvidenceRecord
5
- from .live import build_github_broker_client
5
+ from .live import build_github_broker_client, build_routing_broker_client
6
6
  from .verbs import BrokerClient, BrokerExecutionResult, BrokerProviderAdapter, BrokerService, publish_committed_branch_idempotency_key
7
- __all__ = ["AdmissionRecord", "BrokerAdmissionPolicy", "LinearizableAdmissionStore", "BrokerEnvironmentBoundary", "GitHubBrokerAdapter", "BrokerEvidenceStore", "EvidenceRecord", "BrokerClient", "BrokerExecutionResult", "BrokerProviderAdapter", "BrokerService", "build_github_broker_client", "publish_committed_branch_idempotency_key"]
7
+ __all__ = ["AdmissionRecord", "BrokerAdmissionPolicy", "LinearizableAdmissionStore", "BrokerEnvironmentBoundary", "GitHubBrokerAdapter", "BrokerEvidenceStore", "EvidenceRecord", "BrokerClient", "BrokerExecutionResult", "BrokerProviderAdapter", "BrokerService", "build_github_broker_client", "build_routing_broker_client", "publish_committed_branch_idempotency_key"]
@@ -98,7 +98,14 @@ class GitHubBrokerAdapter:
98
98
  # so remote.origin.pushurl / url.*.pushInsteadOf cannot redirect the mutation.
99
99
  pushed = self.run(["git", "-C", str(self.repo_path), "push", origin_url, ref], capture_output=True, text=True)
100
100
  if pushed.returncode: return self._ambiguous(request, "push-unconfirmed")
101
- args = ["gh", "pr", "create", "--repo", origin_repo, "--draft"] if request.draft else ["gh", "pr", "create", "--repo", origin_repo, "--fill"]
101
+ # `gh pr create` REQUIRES --title (+ --body) when non-interactive; the bare
102
+ # `--draft`/`--fill` form aborts headless ("must provide --title and --body").
103
+ # Derive a deterministic title from the branch HEAD's commit subject and pass
104
+ # the request's pr_body verbatim (empty body is valid once --title is present).
105
+ # --head pins the branch explicitly so gh never infers a wrong head.
106
+ title = self._output("log", "-1", "--format=%s") or request.branch
107
+ args = ["gh", "pr", "create", "--repo", origin_repo, "--head", request.branch, "--title", title, "--body", request.pr_body or title]
108
+ if request.draft: args.append("--draft")
102
109
  created = self.run(args, cwd=self.repo_path, capture_output=True, text=True)
103
110
  if created.returncode: return self._ambiguous(request, "pr-unconfirmed")
104
111
  # Exact-published-head verification: READ the remote and confirm the branch
@@ -0,0 +1,187 @@
1
+ """Opt-in construction of a live, credential-capable GitHub broker client.
2
+
3
+ This is the *only* helper that assembles a broker able to perform a real GitHub
4
+ mutation. It is never auto-instantiated: legacy ``run_train`` callers that pass
5
+ no ``coordinator_runtime`` (or a runtime with ``broker_client=None``) publish
6
+ exactly as before. A caller wanting broker-mediated publication builds a client
7
+ here and attaches it to :class:`CoordinatorRuntime.broker_client`.
8
+
9
+ The wired client enforces every already-merged safety property: linearizable
10
+ admission, permanent fail-closed ``outcome_ambiguous_blocked`` evidence, canonical
11
+ ``(repo, branch, head_sha)`` idempotency, and the adapter's exact-published-head
12
+ verification. Only the ``publish_committed_branch``/``github`` verb is SUPPORTED
13
+ (see ``provider_contracts``); the service refuses every other verb.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import hashlib
18
+ import subprocess
19
+ from pathlib import Path
20
+ from typing import Callable
21
+
22
+ from phase_loop_runtime.convergence.contracts import AdmissionRequest
23
+ from phase_loop_runtime.convergence.provider_contracts import PROVIDER_COMPLETION_CLASSIFICATIONS
24
+
25
+ from .admission import BrokerAdmissionPolicy, LinearizableAdmissionStore
26
+ from .credsep import ALLOWED_ORIGIN_HOSTS, GitHubBrokerAdapter
27
+ from .evidence import BrokerEvidenceStore
28
+ from .verbs import BrokerClient, BrokerService
29
+
30
+
31
+ def _default_admission_policy(_request: AdmissionRequest) -> bool:
32
+ """Admit any structurally-valid admission request.
33
+
34
+ ``AdmissionRequest.__post_init__`` already rejects a request missing any
35
+ fencing field, so a request that reaches the policy is well-formed. Epoch
36
+ staleness and idempotency-key conflicts are enforced inside
37
+ ``LinearizableAdmissionStore.admit`` regardless of this policy.
38
+ """
39
+ return True
40
+
41
+
42
+ def build_github_broker_client(
43
+ repo_path: Path,
44
+ *,
45
+ broker_root: Path,
46
+ admission_policy: BrokerAdmissionPolicy | None = None,
47
+ run: Callable[..., subprocess.CompletedProcess] = subprocess.run,
48
+ ) -> BrokerClient:
49
+ """Wire a live GitHub broker client.
50
+
51
+ Parameters
52
+ ----------
53
+ repo_path:
54
+ Worktree the :class:`GitHubBrokerAdapter` runs git/gh against.
55
+ broker_root:
56
+ Durable directory for the admission log + terminal-evidence log. MUST
57
+ live OUTSIDE ``repo_path`` (e.g. ``CoordinatorRuntime.coordinator_root``)
58
+ so broker state never dirties the worktree being published — a dirty
59
+ worktree trips the publish staged-diff audit and the train clean-worktree
60
+ preflight.
61
+ admission_policy:
62
+ Optional admission gate; defaults to admitting any well-formed request.
63
+ run:
64
+ Injectable subprocess runner (tests pass a fake to mock the git/gh seam).
65
+
66
+ Returns
67
+ -------
68
+ BrokerClient
69
+ A :class:`BrokerService` bound to the global (verb-gated) contracts, so
70
+ only ``publish_committed_branch``/``github`` can execute.
71
+ """
72
+ admission_store = LinearizableAdmissionStore(
73
+ Path(broker_root),
74
+ admission_policy or _default_admission_policy,
75
+ )
76
+ evidence_store = BrokerEvidenceStore(Path(broker_root))
77
+ adapter = GitHubBrokerAdapter(Path(repo_path), run=run)
78
+ return BrokerService(
79
+ admission_store,
80
+ evidence_store,
81
+ adapter,
82
+ contracts=PROVIDER_COMPLETION_CLASSIFICATIONS,
83
+ )
84
+
85
+
86
+ def _repo_store_slug(repo: str) -> str:
87
+ """Stable, filesystem-safe subdir name for a repo's per-repo broker store.
88
+
89
+ ``BrokerRequest.repo`` is an arbitrary absolute workspace path, so hash it rather
90
+ than embed the path. A short hex prefix is collision-free in practice and keeps
91
+ the on-disk layout readable.
92
+ """
93
+ return hashlib.sha256(repo.encode("utf-8")).hexdigest()[:16]
94
+
95
+
96
+ class _RoutingBrokerService:
97
+ """A :class:`BrokerClient` that routes each request to a PER-REPO broker service.
98
+
99
+ ``build_github_broker_client`` fixes ONE ``repo_path`` at construction, so a single
100
+ client can only faithfully serve one repo — a multi-repo ``run_train`` threading one
101
+ ``coordinator_runtime.broker_client`` across every node would run
102
+ ``git -C <wrong-repo>`` and trip the branch/head guard on node 2+.
103
+
104
+ Critically, each repo gets its OWN admission + evidence store under
105
+ ``broker_root/<repo-slug>`` — the stores are NOT shared. ``epoch_blocked`` is a
106
+ GLOBAL scan over a store (``any(state is OUTCOME_AMBIGUOUS_BLOCKED)``) and an
107
+ ambiguous terminal is durable + permanent, and it fires on BENIGN transients
108
+ (push-unconfirmed / remote-read-failed / pr-unconfirmed / remote-head-mismatch /
109
+ pr-head-unconfirmed). A shared store would therefore let one repo's transient
110
+ hiccup permanently fail-close every OTHER repo in the train (and, with an
111
+ un-namespaced ``broker_root``, other trains too). Per-repo stores scope the
112
+ fail-closed epoch to exactly the repo whose mutation became ambiguous — the correct
113
+ blast radius: repo A's unknown state says nothing about repo B's independent remote.
114
+ The caller namespaces ``broker_root`` per train (see the ``run-train`` CLI), closing
115
+ the cross-train dimension.
116
+ """
117
+
118
+ def __init__(
119
+ self,
120
+ broker_root: Path,
121
+ *,
122
+ admission_policy: BrokerAdmissionPolicy,
123
+ run: Callable[..., subprocess.CompletedProcess],
124
+ allowed_hosts,
125
+ contracts=PROVIDER_COMPLETION_CLASSIFICATIONS,
126
+ ) -> None:
127
+ self._broker_root = Path(broker_root)
128
+ self._admission_policy = admission_policy
129
+ self._run = run
130
+ self._allowed_hosts = allowed_hosts
131
+ self._contracts = contracts
132
+ self._services: dict[str, BrokerService] = {}
133
+
134
+ def _service_for(self, repo: str) -> BrokerService:
135
+ service = self._services.get(repo)
136
+ if service is None:
137
+ root = self._broker_root / _repo_store_slug(repo)
138
+ service = BrokerService(
139
+ LinearizableAdmissionStore(root, self._admission_policy),
140
+ BrokerEvidenceStore(root),
141
+ GitHubBrokerAdapter(Path(repo), run=self._run, allowed_hosts=self._allowed_hosts),
142
+ contracts=self._contracts,
143
+ )
144
+ self._services[repo] = service
145
+ return service
146
+
147
+ def execute(self, request):
148
+ return self._service_for(request.repo).execute(request)
149
+
150
+
151
+ def build_routing_broker_client(
152
+ *,
153
+ broker_root: Path,
154
+ admission_policy: BrokerAdmissionPolicy | None = None,
155
+ run: Callable[..., subprocess.CompletedProcess] = subprocess.run,
156
+ allowed_hosts=ALLOWED_ORIGIN_HOSTS,
157
+ ) -> BrokerClient:
158
+ """Wire a live GitHub broker client that serves a MULTI-repo train.
159
+
160
+ Like :func:`build_github_broker_client` but routes per ``BrokerRequest.repo``: the
161
+ git/gh adapter is bound to the request's repo, AND each repo gets its own admission
162
+ + evidence store under ``broker_root/<repo-slug>``. Per-repo stores are load-bearing
163
+ for safety, not just routing — a shared store's GLOBAL ``epoch_blocked`` would let one
164
+ repo's ambiguous outcome (reachable via a benign transient) permanently fail-close
165
+ every other repo. See :class:`_RoutingBrokerService`.
166
+
167
+ Parameters
168
+ ----------
169
+ broker_root:
170
+ Durable parent directory for the per-repo admission + evidence stores. MUST
171
+ live OUTSIDE every node's worktree, and the caller SHOULD namespace it per train
172
+ (e.g. ``<ledger-dir>/broker/<train-stem>``) so unrelated trains never share an
173
+ epoch.
174
+ admission_policy:
175
+ Optional admission gate; defaults to admitting any well-formed request.
176
+ run:
177
+ Injectable subprocess runner (tests pass a fake to mock the git/gh seam).
178
+ allowed_hosts:
179
+ Origin-host allow-list applied to every per-request adapter (github.com-only
180
+ by default); a self-hosted/GHE fleet passes its own set.
181
+ """
182
+ return _RoutingBrokerService(
183
+ Path(broker_root),
184
+ admission_policy=admission_policy or _default_admission_policy,
185
+ run=run,
186
+ allowed_hosts=allowed_hosts,
187
+ )
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
477
477
  return out
478
478
 
479
479
 
480
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
481
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
482
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
483
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
484
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
485
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
486
+ fails closed on with `missing_producer_dependency`. Parity is then true by
487
+ construction. If the runtime is not importable at plan time, skip: the execute-time
488
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
489
+ agent-harness#182."""
490
+ try:
491
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
492
+ except Exception:
493
+ return []
494
+ try:
495
+ ir = parse_phase_plan_ir(Path(plan_path))
496
+ except Exception:
497
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
498
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
499
+ return []
500
+ out: Findings = []
501
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
502
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
503
+ out.append(
504
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
505
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
506
+ )
507
+ return out
508
+
509
+
480
510
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
481
511
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
482
512
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
613
643
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
614
644
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
615
645
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
646
+ findings.extend(_check_o_producer_dependency(path))
616
647
  findings.extend(_check_g_grep_paired_with_tests(src))
617
648
  findings.extend(_check_h_eager_reexport(src))
618
649
 
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
560
560
  return out
561
561
 
562
562
 
563
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
564
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
565
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
566
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
567
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
568
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
569
+ fails closed on with `missing_producer_dependency`. Parity is then true by
570
+ construction. If the runtime is not importable at plan time, skip: the execute-time
571
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
572
+ agent-harness#182."""
573
+ try:
574
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
575
+ except Exception:
576
+ return []
577
+ try:
578
+ ir = parse_phase_plan_ir(Path(plan_path))
579
+ except Exception:
580
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
581
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
582
+ return []
583
+ out: Findings = []
584
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
585
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
586
+ out.append(
587
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
588
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
589
+ )
590
+ return out
591
+
592
+
563
593
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
564
594
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
565
595
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
1057
1087
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
1058
1088
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
1059
1089
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
1090
+ findings.extend(_check_o_producer_dependency(path))
1060
1091
  findings.extend(_check_g_grep_paired_with_tests(src))
1061
1092
  findings.extend(_check_h_eager_reexport(src))
1062
1093
  findings.extend(_check_i_spec_closeout_plan(src))
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
477
477
  return out
478
478
 
479
479
 
480
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
481
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
482
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
483
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
484
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
485
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
486
+ fails closed on with `missing_producer_dependency`. Parity is then true by
487
+ construction. If the runtime is not importable at plan time, skip: the execute-time
488
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
489
+ agent-harness#182."""
490
+ try:
491
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
492
+ except Exception:
493
+ return []
494
+ try:
495
+ ir = parse_phase_plan_ir(Path(plan_path))
496
+ except Exception:
497
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
498
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
499
+ return []
500
+ out: Findings = []
501
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
502
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
503
+ out.append(
504
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
505
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
506
+ )
507
+ return out
508
+
509
+
480
510
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
481
511
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
482
512
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
613
643
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
614
644
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
615
645
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
646
+ findings.extend(_check_o_producer_dependency(path))
616
647
  findings.extend(_check_g_grep_paired_with_tests(src))
617
648
  findings.extend(_check_h_eager_reexport(src))
618
649
 
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
560
560
  return out
561
561
 
562
562
 
563
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
564
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
565
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
566
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
567
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
568
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
569
+ fails closed on with `missing_producer_dependency`. Parity is then true by
570
+ construction. If the runtime is not importable at plan time, skip: the execute-time
571
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
572
+ agent-harness#182."""
573
+ try:
574
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
575
+ except Exception:
576
+ return []
577
+ try:
578
+ ir = parse_phase_plan_ir(Path(plan_path))
579
+ except Exception:
580
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
581
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
582
+ return []
583
+ out: Findings = []
584
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
585
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
586
+ out.append(
587
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
588
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
589
+ )
590
+ return out
591
+
592
+
563
593
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
564
594
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
565
595
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
1057
1087
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
1058
1088
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
1059
1089
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
1090
+ findings.extend(_check_o_producer_dependency(path))
1060
1091
  findings.extend(_check_g_grep_paired_with_tests(src))
1061
1092
  findings.extend(_check_h_eager_reexport(src))
1062
1093
  findings.extend(_check_i_spec_closeout_plan(src))
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
477
477
  return out
478
478
 
479
479
 
480
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
481
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
482
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
483
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
484
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
485
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
486
+ fails closed on with `missing_producer_dependency`. Parity is then true by
487
+ construction. If the runtime is not importable at plan time, skip: the execute-time
488
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
489
+ agent-harness#182."""
490
+ try:
491
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
492
+ except Exception:
493
+ return []
494
+ try:
495
+ ir = parse_phase_plan_ir(Path(plan_path))
496
+ except Exception:
497
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
498
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
499
+ return []
500
+ out: Findings = []
501
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
502
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
503
+ out.append(
504
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
505
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
506
+ )
507
+ return out
508
+
509
+
480
510
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
481
511
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
482
512
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
613
643
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
614
644
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
615
645
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
646
+ findings.extend(_check_o_producer_dependency(path))
616
647
  findings.extend(_check_g_grep_paired_with_tests(src))
617
648
  findings.extend(_check_h_eager_reexport(src))
618
649
 
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
560
560
  return out
561
561
 
562
562
 
563
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
564
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
565
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
566
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
567
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
568
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
569
+ fails closed on with `missing_producer_dependency`. Parity is then true by
570
+ construction. If the runtime is not importable at plan time, skip: the execute-time
571
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
572
+ agent-harness#182."""
573
+ try:
574
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
575
+ except Exception:
576
+ return []
577
+ try:
578
+ ir = parse_phase_plan_ir(Path(plan_path))
579
+ except Exception:
580
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
581
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
582
+ return []
583
+ out: Findings = []
584
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
585
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
586
+ out.append(
587
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
588
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
589
+ )
590
+ return out
591
+
592
+
563
593
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
564
594
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
565
595
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
1057
1087
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
1058
1088
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
1059
1089
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
1090
+ findings.extend(_check_o_producer_dependency(path))
1060
1091
  findings.extend(_check_g_grep_paired_with_tests(src))
1061
1092
  findings.extend(_check_h_eager_reexport(src))
1062
1093
  findings.extend(_check_i_spec_closeout_plan(src))
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
477
477
  return out
478
478
 
479
479
 
480
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
481
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
482
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
483
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
484
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
485
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
486
+ fails closed on with `missing_producer_dependency`. Parity is then true by
487
+ construction. If the runtime is not importable at plan time, skip: the execute-time
488
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
489
+ agent-harness#182."""
490
+ try:
491
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
492
+ except Exception:
493
+ return []
494
+ try:
495
+ ir = parse_phase_plan_ir(Path(plan_path))
496
+ except Exception:
497
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
498
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
499
+ return []
500
+ out: Findings = []
501
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
502
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
503
+ out.append(
504
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
505
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
506
+ )
507
+ return out
508
+
509
+
480
510
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
481
511
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
482
512
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
613
643
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
614
644
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
615
645
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
646
+ findings.extend(_check_o_producer_dependency(path))
616
647
  findings.extend(_check_g_grep_paired_with_tests(src))
617
648
  findings.extend(_check_h_eager_reexport(src))
618
649
 
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
560
560
  return out
561
561
 
562
562
 
563
+ def _check_o_producer_dependency(plan_path: Path) -> Findings:
564
+ """(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
565
+ that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
566
+ reintroduces the very validator-vs-runtime divergence this closes — different lane
567
+ parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
568
+ lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
569
+ fails closed on with `missing_producer_dependency`. Parity is then true by
570
+ construction. If the runtime is not importable at plan time, skip: the execute-time
571
+ lane IR still enforces the contract (no regression, and no divergent pre-warn).
572
+ agent-harness#182."""
573
+ try:
574
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
575
+ except Exception:
576
+ return []
577
+ try:
578
+ ir = parse_phase_plan_ir(Path(plan_path))
579
+ except Exception:
580
+ # Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
581
+ # producer-dependency edge and stays silent when the plan cannot be parsed.
582
+ return []
583
+ out: Findings = []
584
+ for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
585
+ if getattr(diag, "kind", "") == "missing_producer_dependency":
586
+ out.append(
587
+ f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
588
+ f"(the lane IR fails closed with missing_producer_dependency at execute time)"
589
+ )
590
+ return out
591
+
592
+
563
593
  def _check_g_grep_paired_with_tests(src: str) -> Findings:
564
594
  """Every acceptance criterion that uses `rg`/`grep` as its sole assertion
565
595
  must cite a test file in the same bullet. A bare grep is defeatable by
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
1057
1087
  findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
1058
1088
  findings.extend(_check_e_test_before_impl(lane_sections_parsed))
1059
1089
  findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
1090
+ findings.extend(_check_o_producer_dependency(path))
1060
1091
  findings.extend(_check_g_grep_paired_with_tests(src))
1061
1092
  findings.extend(_check_h_eager_reexport(src))
1062
1093
  findings.extend(_check_i_spec_closeout_plan(src))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.7.7
3
+ Version: 0.7.9
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.0