phase-loop-runtime 0.7.8__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 (771) hide show
  1. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.7.8/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
  5. {phase_loop_runtime-0.7.8/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
  6. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +31 -0
  7. {phase_loop_runtime-0.7.8/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
  8. {phase_loop_runtime-0.7.8/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
  9. {phase_loop_runtime-0.7.8/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
  10. {phase_loop_runtime-0.7.8/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
  11. {phase_loop_runtime-0.7.8/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
  12. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  13. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
  14. phase_loop_runtime-0.7.9/tests/test_validate_plan_doc_producer_dependency.py +128 -0
  15. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/MANIFEST.in +0 -0
  16. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/README.md +0 -0
  17. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/protocol/protocol.md +0 -0
  18. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/setup.cfg +0 -0
  19. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  20. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  21. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  22. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  23. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  24. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  25. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  26. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  27. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  28. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  29. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  30. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  31. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  32. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  33. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  34. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  35. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  36. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  37. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  38. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  39. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  40. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  41. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  42. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  43. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  44. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  45. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  46. {phase_loop_runtime-0.7.8 → 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
  47. {phase_loop_runtime-0.7.8 → 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
  48. {phase_loop_runtime-0.7.8 → 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
  49. {phase_loop_runtime-0.7.8 → 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
  50. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  51. {phase_loop_runtime-0.7.8 → 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
  52. {phase_loop_runtime-0.7.8 → 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
  53. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  54. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  55. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  56. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  57. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  58. {phase_loop_runtime-0.7.8 → 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
  59. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  60. {phase_loop_runtime-0.7.8 → 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
  61. {phase_loop_runtime-0.7.8 → 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
  62. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  63. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  64. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  65. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  66. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  67. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  68. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  69. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  70. {phase_loop_runtime-0.7.8 → 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
  71. {phase_loop_runtime-0.7.8 → 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
  72. {phase_loop_runtime-0.7.8 → 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
  73. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  74. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  75. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  76. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  77. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  78. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  79. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  80. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  81. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  82. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  83. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  84. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  85. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  86. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  87. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  88. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  89. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  90. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  91. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  92. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  93. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_modular.py +0 -0
  94. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  95. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  96. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  97. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  98. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  99. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  100. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  101. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  102. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/broker.py +0 -0
  103. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/build_bundle.py +0 -0
  104. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/capability_registry.py +0 -0
  105. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/classifier.py +0 -0
  106. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  107. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  108. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cli.py +0 -0
  109. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout.py +0 -0
  110. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  111. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  112. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validation.py +0 -0
  113. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validators.py +0 -0
  114. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  115. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  116. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  117. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  118. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  119. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  120. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  121. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  122. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  123. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  124. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  125. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  126. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  127. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  128. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  129. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  130. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  131. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  132. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  133. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  134. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  135. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  136. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  137. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  138. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  139. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  140. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  141. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
  142. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  143. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  144. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  145. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  146. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  147. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  148. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  149. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  150. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/status.py +0 -0
  151. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  152. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  153. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  154. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/discovery.py +0 -0
  155. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  156. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  157. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_audit.py +0 -0
  158. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_freshness.py +0 -0
  159. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  160. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doctor.py +0 -0
  161. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  162. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events.py +0 -0
  163. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events_migration.py +0 -0
  164. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit.py +0 -0
  165. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  166. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/executor_availability.py +0 -0
  167. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_map.py +0 -0
  168. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  169. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  170. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/gate_posture.py +0 -0
  171. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_discipline.py +0 -0
  172. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_ops.py +0 -0
  173. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_topology.py +0 -0
  174. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_bundle.py +0 -0
  175. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_premerge.py +0 -0
  176. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_review.py +0 -0
  177. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff.py +0 -0
  178. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff_path.py +0 -0
  179. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  180. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/injection.py +0 -0
  181. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/install_status.py +0 -0
  182. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  183. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/launcher.py +0 -0
  184. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lease_store.py +0 -0
  185. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/maintenance.py +0 -0
  186. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  187. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/models.py +0 -0
  188. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/observability.py +0 -0
  189. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/panel_invoker.py +0 -0
  190. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  191. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  192. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  193. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  194. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  195. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  196. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  197. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  198. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  199. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_ir.py +0 -0
  200. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_manifest.py +0 -0
  201. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/planner_validation.py +0 -0
  202. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/profiles.py +0 -0
  203. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/prompts.py +0 -0
  204. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/provenance.py +0 -0
  205. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/publishing.py +0 -0
  206. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/py.typed +0 -0
  207. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/ratification_policy.py +0 -0
  208. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reconcile.py +0 -0
  209. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/redaction.py +0 -0
  210. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reflection_sync.py +0 -0
  211. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/release_guard.py +0 -0
  212. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/render.py +0 -0
  213. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/repo_validation.py +0 -0
  214. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/review_summary.py +0 -0
  215. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  216. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  217. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_log.py +0 -0
  218. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  219. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  220. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runner.py +0 -0
  221. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_paths.py +0 -0
  222. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_projection.py +0 -0
  223. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_resources.py +0 -0
  224. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schema_export.py +0 -0
  225. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  226. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  227. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  228. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_install.py +0 -0
  229. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_inventory.py +0 -0
  230. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_paths.py +0 -0
  231. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  232. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  233. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  234. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  235. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  236. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  237. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  238. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  239. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  240. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  241. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  242. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  243. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  244. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  245. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  246. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  247. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  248. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  249. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  250. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  251. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  252. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  253. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  254. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  255. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  256. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  257. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  258. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  259. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  260. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  261. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  262. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  263. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  264. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  265. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  266. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  267. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  268. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  269. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  270. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  271. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  272. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  273. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  274. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  275. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  276. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  277. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  278. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  279. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  280. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  281. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  282. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  283. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  284. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  285. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  286. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  287. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  288. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  289. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  290. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  291. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  292. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  293. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  294. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  295. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  296. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  297. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  298. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  299. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  300. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  301. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  302. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  303. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  304. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  305. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  306. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  307. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  308. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  309. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  310. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  311. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  312. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  313. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  314. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  315. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  316. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  317. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  318. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  319. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  320. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  321. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  322. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  323. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  324. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  325. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  326. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  327. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  328. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  329. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  330. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  331. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  332. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  333. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  334. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  335. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  336. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  337. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  338. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  339. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  340. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  341. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  342. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  343. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  344. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  345. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  346. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  347. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  348. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  349. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  350. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  351. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  352. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  353. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  354. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  355. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  356. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  357. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  359. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  361. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  362. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  364. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  365. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  366. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  367. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  368. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  369. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  370. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  371. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  372. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  373. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  374. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  375. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  376. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  377. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  378. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  379. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  380. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  381. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  382. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  383. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  384. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  385. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  386. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  387. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  388. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  389. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  390. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  391. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  392. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  393. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  394. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  395. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  396. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  397. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  398. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  399. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  400. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  401. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  402. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  403. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  404. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  405. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  406. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  407. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  408. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  409. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  410. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  411. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  412. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state.py +0 -0
  413. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_degradation.py +0 -0
  414. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_ops.py +0 -0
  415. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker.py +0 -0
  416. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  417. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  418. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_ledger.py +0 -0
  419. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_roadmap.py +0 -0
  420. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_runner.py +0 -0
  421. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence.py +0 -0
  422. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  423. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  424. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worker_pool.py +0 -0
  425. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worktree_index.py +0 -0
  426. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  427. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  428. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  429. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  430. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_advisory_mode.py +0 -0
  431. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_alias_install.py +0 -0
  432. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backcompat.py +0 -0
  433. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_homebrew.py +0 -0
  434. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_omnigent.py +0 -0
  435. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_cli_legacy.py +0 -0
  436. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_composition.py +0 -0
  437. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_concurrency.py +0 -0
  438. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_config.py +0 -0
  439. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_golden.py +0 -0
  440. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_ingestion.py +0 -0
  441. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_integration.py +0 -0
  442. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_matrix.py +0 -0
  443. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_observability.py +0 -0
  444. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_presets.py +0 -0
  445. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_registries.py +0 -0
  446. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_resolver.py +0 -0
  447. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_schema.py +0 -0
  448. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_twin_alias_legacy.py +0 -0
  449. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_agent_runtime_provider_cs08.py +0 -0
  450. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_autosel.py +0 -0
  451. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_branchgov_preflight.py +0 -0
  452. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_certificate_tier.py +0 -0
  453. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_cli_train_status_45.py +0 -0
  454. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_break_glass_cli.py +0 -0
  455. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_classifier.py +0 -0
  456. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_convergence_fixes.py +0 -0
  457. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_exception_vocab.py +0 -0
  458. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_validator_hook.py +0 -0
  459. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_verification_gate.py +0 -0
  460. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_codex_effort_max_clamp_49.py +0 -0
  461. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_conformance_golden.py +0 -0
  462. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_dual_layout.py +0 -0
  463. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_gates.py +0 -0
  464. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_ingest.py +0 -0
  465. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_scaffold.py +0 -0
  466. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_adapters.py +0 -0
  467. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_admission.py +0 -0
  468. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_api.py +0 -0
  469. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_credsep.py +0 -0
  470. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_evidence.py +0 -0
  471. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_verbs.py +0 -0
  472. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_cli_integration.py +0 -0
  473. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_coordination_contracts.py +0 -0
  474. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_dispatch.py +0 -0
  475. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_contracts.py +0 -0
  476. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_log.py +0 -0
  477. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_fencing.py +0 -0
  478. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_fixture_contracts.py +0 -0
  479. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_invalidation.py +0 -0
  480. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_live_enable.py +0 -0
  481. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_provider_contracts.py +0 -0
  482. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_reconcile.py +0 -0
  483. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_refresh.py +0 -0
  484. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_runtime_imports.py +0 -0
  485. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_seat_lifecycle.py +0 -0
  486. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_status.py +0 -0
  487. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_train_integration.py +0 -0
  488. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_coordinator_wave_loop.py +0 -0
  489. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_discovery_hygiene_legacy.py +0 -0
  490. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  491. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_helper.py +0 -0
  492. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_reentrancy.py +0 -0
  493. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  494. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_doc_delta_validator.py +0 -0
  495. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_docs_audit.py +0 -0
  496. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_docs_freshness.py +0 -0
  497. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_doctor_bom.py +0 -0
  498. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dotfiles_tree.py +0 -0
  499. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execgov.py +0 -0
  500. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execreg_launch_registry.py +0 -0
  501. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execute_phase_handoff_mode.py +0 -0
  502. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execution_policy_tiering.py +0 -0
  503. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_executor_availability.py +0 -0
  504. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_export_schema.py +0 -0
  505. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_fleet_map.py +0 -0
  506. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics.py +0 -0
  507. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics_export.py +0 -0
  508. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_gate_a_wheel_isolation.py +0 -0
  509. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_gate_posture.py +0 -0
  510. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_git_discipline.py +0 -0
  511. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_git_grounded_projection.py +0 -0
  512. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_disjointness_model_first.py +0 -0
  513. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_e2e.py +0 -0
  514. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_gate_crfixes.py +0 -0
  515. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_planning_gate.py +0 -0
  516. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge.py +0 -0
  517. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge_live.py +0 -0
  518. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_review.py +0 -0
  519. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_grokexec.py +0 -0
  520. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_hotfix_lane.py +0 -0
  521. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_injection_skill_failloud.py +0 -0
  522. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_lane_ir_override.py +0 -0
  523. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_launcher_liveness.py +0 -0
  524. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_launchspec_golden.py +0 -0
  525. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_lease_store.py +0 -0
  526. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_lease_store_conformance.py +0 -0
  527. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_ledger_serialization.py +0 -0
  528. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_leg_liveness_monitor.py +0 -0
  529. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_manifest_per_entry_164.py +0 -0
  530. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_model_class_policy.py +0 -0
  531. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_model_id_source_guard.py +0 -0
  532. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_observability_alerting.py +0 -0
  533. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory.py +0 -0
  534. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_cli.py +0 -0
  535. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  536. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_authority_boundary.py +0 -0
  537. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_drift.py +0 -0
  538. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_imports.py +0 -0
  539. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_pin.py +0 -0
  540. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_core_api.py +0 -0
  541. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_provenance.py +0 -0
  542. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_ci.py +0 -0
  543. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_cli.py +0 -0
  544. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_output.py +0 -0
  545. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_runtime.py +0 -0
  546. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_redaction.py +0 -0
  547. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_release_surface.py +0 -0
  548. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_schema_validation.py +0 -0
  549. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_vectors.py +0 -0
  550. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_advisory_mode_63.py +0 -0
  551. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_context_refs_114.py +0 -0
  552. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker.py +0 -0
  553. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_spawn.py +0 -0
  554. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_timeout_argv.py +0 -0
  555. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  556. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_native_fill_183.py +0 -0
  557. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_per_leg_model_66.py +0 -0
  558. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_streaming_verdicts.py +0 -0
  559. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_eof_48.py +0 -0
  560. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_liveness_188.py +0 -0
  561. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_verdict_summary.py +0 -0
  562. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_backcompat.py +0 -0
  563. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_cli.py +0 -0
  564. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle.py +0 -0
  565. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  566. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_dependency.py +0 -0
  567. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  568. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_injection.py +0 -0
  569. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_modular.py +0 -0
  570. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  571. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  572. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_export.py +0 -0
  573. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_source.py +0 -0
  574. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  575. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  576. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_build_bundle.py +0 -0
  577. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_classifier.py +0 -0
  578. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  579. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  580. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  581. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  582. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_security.py +0 -0
  583. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  584. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  585. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  586. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_route_selection.py +0 -0
  587. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli.py +0 -0
  588. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  589. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_control_only.py +0 -0
  590. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_event.py +0 -0
  591. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  592. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_hardening.py +0 -0
  593. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  594. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_schema.py +0 -0
  595. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_validation.py +0 -0
  596. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_citation.py +0 -0
  597. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_docs.py +0 -0
  598. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  599. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  600. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  601. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  602. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  603. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_discovery.py +0 -0
  604. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_docs.py +0 -0
  605. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  606. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  607. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  608. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  609. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_portal.py +0 -0
  610. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  611. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_drift_audit.py +0 -0
  612. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  613. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  614. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_events_migration.py +0 -0
  615. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit.py +0 -0
  616. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  617. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  618. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  619. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  620. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_execution_policy.py +0 -0
  621. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_executor_degradation.py +0 -0
  622. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_full_phase_mode.py +0 -0
  623. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff.py +0 -0
  624. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff_migration.py +0 -0
  625. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_init.py +0 -0
  626. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_injection.py +0 -0
  627. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_install_status.py +0 -0
  628. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  629. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_harnesses.py +0 -0
  630. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir.py +0 -0
  631. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  632. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_scheduler.py +0 -0
  633. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_launcher.py +0 -0
  634. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_debug.py +0 -0
  635. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_dedup.py +0 -0
  636. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_live_adapters.py +0 -0
  637. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_maintenance.py +0 -0
  638. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_metrics.py +0 -0
  639. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_migration_regressions.py +0 -0
  640. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  641. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  642. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  643. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_models.py +0 -0
  644. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_native_flags.py +0 -0
  645. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  646. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pi_executor.py +0 -0
  647. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  648. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  649. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  650. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  651. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  652. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_mode.py +0 -0
  653. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  654. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_manifest.py +0 -0
  655. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  656. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_validation.py +0 -0
  657. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_policy.py +0 -0
  658. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_protocol_contract.py +0 -0
  659. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_provenance.py +0 -0
  660. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile.py +0 -0
  661. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  662. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  663. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  664. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reducers.py +0 -0
  665. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  666. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  667. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  668. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_validate.py +0 -0
  669. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_rotation.py +0 -0
  670. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner.py +0 -0
  671. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  672. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_boundary.py +0 -0
  673. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_decouple.py +0 -0
  674. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_package_data.py +0 -0
  675. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_projection.py +0 -0
  676. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_schema_flow.py +0 -0
  677. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  678. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  679. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_contract.py +0 -0
  680. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  681. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_install.py +0 -0
  682. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  683. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_blockers.py +0 -0
  684. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  685. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_reentry.py +0 -0
  686. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  687. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  688. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  689. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_state.py +0 -0
  690. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  691. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  692. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  693. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  694. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  695. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_e2e.py +0 -0
  696. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_principles.py +0 -0
  697. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  698. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_reconcile.py +0 -0
  699. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_sched.py +0 -0
  700. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_schedharden.py +0 -0
  701. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_wave_runner.py +0 -0
  702. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_observability.py +0 -0
  703. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_runner.py +0 -0
  704. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_state.py +0 -0
  705. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_worktrees.py +0 -0
  706. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  707. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_worktree_executor.py +0 -0
  708. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  709. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  710. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  711. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_flag.py +0 -0
  712. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_markers.py +0 -0
  713. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  714. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  715. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  716. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  717. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  718. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pkg_layout_freeze.py +0 -0
  719. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_plan_ir_iter_waves.py +0 -0
  720. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_preflight_verification.py +0 -0
  721. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_proc_cpu.py +0 -0
  722. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_prune_merged_worktrees_script.py +0 -0
  723. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_publishing.py +0 -0
  724. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pushflow.py +0 -0
  725. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_ratification_policy.py +0 -0
  726. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  727. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_reconcile_verification_log.py +0 -0
  728. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_reflection_sync.py +0 -0
  729. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  730. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_release_pin_autotrack.py +0 -0
  731. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_repo_validation.py +0 -0
  732. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_review_leg_sandbox.py +0 -0
  733. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_review_summary.py +0 -0
  734. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_roadmap_authority.py +0 -0
  735. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_route_log.py +0 -0
  736. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_route_policy_conformance.py +0 -0
  737. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_routing_invariants.py +0 -0
  738. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_runtime_state_mirror_agreement.py +0 -0
  739. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_sibling_matcher_patterns.py +0 -0
  740. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_bundle_pinned.py +0 -0
  741. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_install_body_expansion.py +0 -0
  742. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_plan_manifest_write.py +0 -0
  743. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_sources_seam.py +0 -0
  744. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skills_bundle_drift.py +0 -0
  745. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skills_canon_parity.py +0 -0
  746. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skills_src_claude_literal_lint.py +0 -0
  747. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_spec_conformance_gate.py +0 -0
  748. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_specpkgmin_wheel.py +0 -0
  749. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_status_read_only_62.py +0 -0
  750. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  751. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_sync_skills_apply_failloud.py +0 -0
  752. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker.py +0 -0
  753. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker_cli.py +0 -0
  754. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_task_message_resolver.py +0 -0
  755. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_e2e.py +0 -0
  756. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_invariants.py +0 -0
  757. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_merge.py +0 -0
  758. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_order_only_deps_47.py +0 -0
  759. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_prebuilt.py +0 -0
  760. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_roadmap.py +0 -0
  761. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_runner.py +0 -0
  762. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_unattended_release.py +0 -0
  763. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  764. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  765. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence.py +0 -0
  766. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence_validator.py +0 -0
  767. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_visual_evidence_validator.py +0 -0
  768. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_workerpool_failure_isolation.py +0 -0
  769. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_workerpool_parallel.py +0 -0
  770. {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_workerpool_worktree_alloc.py +0 -0
  771. {phase_loop_runtime-0.7.8 → 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.8
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.8"
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.8"
21
+ __version__ = "0.7.9"
@@ -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.8
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
@@ -759,6 +759,7 @@ tests/test_train_runner.py
759
759
  tests/test_unattended_release.py
760
760
  tests/test_v34_parallel_dispatch_soak.py
761
761
  tests/test_validate_plan_doc_docs_lane.py
762
+ tests/test_validate_plan_doc_producer_dependency.py
762
763
  tests/test_verification_evidence.py
763
764
  tests/test_verification_evidence_validator.py
764
765
  tests/test_visual_evidence_validator.py
@@ -0,0 +1,128 @@
1
+ """agent-harness#182 — validate_plan_doc.py (O) producer-dependency check == runtime.
2
+
3
+ The runtime lane IR (`phase_loop_runtime.plan_ir`) fails closed with
4
+ `missing_producer_dependency` at execute time when a lane consumes an interface provided
5
+ by another in-plan lane it does not depend on directly. The plan validator's `(O)` check
6
+ must enforce the SAME contract at plan time. To guarantee that — and to avoid re-creating
7
+ the very validator-vs-runtime divergence #182 is about — `(O)` DELEGATES to `plan_ir`.
8
+ These tests pin the behaviour AND the parity, including the exact-string interface
9
+ identity (so `IFoo` vs `IFoo (v2)` does NOT false-positive the way a normalized
10
+ reimplementation would).
11
+ """
12
+ import importlib.util
13
+ import sys
14
+ import textwrap
15
+ import unittest
16
+ from pathlib import Path
17
+
18
+ import pytest
19
+
20
+ from _dotfiles_tree import skills_bundle_present
21
+ from phase_loop_runtime.plan_ir import parse_phase_plan_ir
22
+
23
+ if not skills_bundle_present():
24
+ pytest.skip(
25
+ "requires the sibling phase-loop-skills bundle (absent in the standalone-from-wheel clean-room)",
26
+ allow_module_level=True,
27
+ )
28
+
29
+ ROOT = Path(__file__).resolve().parents[2]
30
+ SCRIPT = ROOT / "phase-loop-skills" / "plan-phase" / "scripts" / "validate_plan_doc.py"
31
+
32
+
33
+ def _load():
34
+ spec = importlib.util.spec_from_file_location("validate_plan_doc_prod_dep_under_test", SCRIPT)
35
+ mod = importlib.util.module_from_spec(spec)
36
+ sys.modules[spec.name] = mod # dataclasses resolve annotations via sys.modules
37
+ spec.loader.exec_module(mod)
38
+ return mod
39
+
40
+
41
+ def _plan(consumed: str, sl2_depends: str) -> str:
42
+ """A 3-lane plan: SL-0 provides `IFoo`; SL-2 consumes `consumed` and depends on
43
+ `sl2_depends`. Empty interface lists are OMITTED (the runtime parses a literal
44
+ `(none)` as an interface token). The runtime tolerates the ASCII hyphen in the
45
+ SL heading."""
46
+ return textwrap.dedent(
47
+ f"""\
48
+ ## Lane Index
49
+
50
+ - SL-0 — Provider; Depends on: (none)
51
+ - SL-1 — Middle; Depends on: SL-0
52
+ - SL-2 — Consumer; Depends on: {sl2_depends}
53
+
54
+ ## Lanes
55
+
56
+ ### SL-0 - Provider
57
+
58
+ - **Owned files**: `src/foo.py`
59
+ - **Interfaces provided**: `IFoo`
60
+
61
+ ### SL-1 - Middle
62
+
63
+ - **Owned files**: `src/mid.py`
64
+
65
+ ### SL-2 - Consumer
66
+
67
+ - **Owned files**: `src/consumer.py`
68
+ - **Interfaces consumed**: {consumed}
69
+ """
70
+ )
71
+
72
+
73
+ def _runtime_missing(path: Path):
74
+ return [d for d in parse_phase_plan_ir(path).diagnostics if d.kind == "missing_producer_dependency"]
75
+
76
+
77
+ class ProducerDependencyParityTest(unittest.TestCase):
78
+ @classmethod
79
+ def setUpClass(cls):
80
+ cls.mod = _load()
81
+
82
+ def _write(self, tmp: Path, text: str) -> Path:
83
+ p = tmp / "plan.md"
84
+ p.write_text(text, encoding="utf-8")
85
+ return p
86
+
87
+ def test_flags_missing_direct_producer_edge_matching_runtime(self):
88
+ import tempfile
89
+ with tempfile.TemporaryDirectory() as d:
90
+ path = self._write(Path(d), _plan(consumed="`IFoo`", sl2_depends="SL-1"))
91
+ runtime = _runtime_missing(path)
92
+ self.assertTrue(runtime, "fixture must trigger the runtime diagnostic (self-check)")
93
+ findings = self.mod._check_o_producer_dependency(path)
94
+ self.assertEqual(len(findings), len(runtime), findings)
95
+ self.assertTrue(any("SL-2" in f for f in findings), findings)
96
+ self.assertTrue(all("WARN" not in f for f in findings)) # ERROR, not advice
97
+
98
+ def test_clean_when_direct_edge_present_matching_runtime(self):
99
+ import tempfile
100
+ with tempfile.TemporaryDirectory() as d:
101
+ path = self._write(Path(d), _plan(consumed="`IFoo`", sl2_depends="SL-0"))
102
+ self.assertEqual(_runtime_missing(path), [], "runtime should accept the direct edge")
103
+ self.assertEqual(self.mod._check_o_producer_dependency(path), [])
104
+
105
+ def test_annotated_interface_is_exact_string_not_normalized(self):
106
+ # The CR's false-positive case: provide `IFoo`, consume `IFoo (v2)` with NO direct
107
+ # edge. The runtime matches interfaces by EXACT string, so `IFoo` != `IFoo (v2)` →
108
+ # no in-plan producer → runtime ACCEPTS. A normalized reimplementation would strip
109
+ # `(v2)` and wrongly ERROR. (O) must match the runtime: no finding.
110
+ import tempfile
111
+ with tempfile.TemporaryDirectory() as d:
112
+ path = self._write(Path(d), _plan(consumed="`IFoo (v2)`", sl2_depends="SL-1"))
113
+ self.assertEqual(_runtime_missing(path), [], "runtime treats IFoo and IFoo (v2) as distinct")
114
+ self.assertEqual(
115
+ self.mod._check_o_producer_dependency(path), [],
116
+ "(O) must not false-positive on an annotated interface (exact-string identity)",
117
+ )
118
+
119
+ def test_skips_gracefully_when_plan_unparseable(self):
120
+ import tempfile
121
+ with tempfile.TemporaryDirectory() as d:
122
+ path = self._write(Path(d), "not a plan\n")
123
+ # No lanes → no producer edges → no (O) findings (A/B own the parse errors).
124
+ self.assertEqual(self.mod._check_o_producer_dependency(path), [])
125
+
126
+
127
+ if __name__ == "__main__":
128
+ unittest.main()