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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (724) hide show
  1. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/cli.py +61 -0
  5. phase_loop_runtime-0.7.2/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +34 -0
  6. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/panel_invoker.py +175 -32
  7. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +7 -2
  8. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +7 -2
  9. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +8 -7
  10. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +8 -7
  11. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/task_message_broker_client.py +2 -2
  12. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/task_message_resolver.py +28 -4
  13. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  14. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
  15. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_backing_homebrew.py +2 -2
  16. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_leg_liveness_monitor.py +1 -1
  17. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_invoker_spawn.py +53 -20
  18. phase_loop_runtime-0.7.2/tests/test_panel_native_fill_183.py +327 -0
  19. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_task_message_broker_cli.py +38 -12
  20. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_task_message_resolver.py +43 -1
  21. phase_loop_runtime-0.7.1/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -29
  22. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/MANIFEST.in +0 -0
  23. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/README.md +0 -0
  24. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/protocol/protocol.md +0 -0
  25. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/setup.cfg +0 -0
  26. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  27. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  28. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  29. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  30. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  31. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  32. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  33. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  34. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  35. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  36. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  37. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  38. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  39. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  40. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  41. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  42. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  43. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  44. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  45. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  46. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  47. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  48. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  49. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  50. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  51. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  52. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  53. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  54. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  55. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  56. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  57. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  58. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  59. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  60. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  61. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  62. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  63. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  64. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  65. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  66. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  67. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  68. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  69. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  70. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  71. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  72. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  73. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  74. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  75. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  76. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  77. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  78. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  79. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  80. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  81. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  82. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  83. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  84. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  85. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  86. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  87. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  88. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  89. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  90. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  91. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  92. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  93. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  94. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  95. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  96. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  97. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  98. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  99. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  100. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_modular.py +0 -0
  101. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  102. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  103. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  104. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  105. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  106. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  107. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  108. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  109. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/broker.py +0 -0
  110. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/build_bundle.py +0 -0
  111. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/capability_registry.py +0 -0
  112. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/classifier.py +0 -0
  113. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  114. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  115. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout.py +0 -0
  116. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  117. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  118. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_validation.py +0 -0
  119. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/closeout_validators.py +0 -0
  120. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  121. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  122. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  123. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  124. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  125. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  126. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  127. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  128. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  129. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  130. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  131. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  132. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  133. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  134. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  135. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  136. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  137. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  138. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  139. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/discovery.py +0 -0
  140. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  141. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  142. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/docs_audit.py +0 -0
  143. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/docs_freshness.py +0 -0
  144. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  145. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/doctor.py +0 -0
  146. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  147. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/events.py +0 -0
  148. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/events_migration.py +0 -0
  149. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/evidence_audit.py +0 -0
  150. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  151. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/executor_availability.py +0 -0
  152. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/fleet_map.py +0 -0
  153. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  154. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  155. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/gate_posture.py +0 -0
  156. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/git_discipline.py +0 -0
  157. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/git_ops.py +0 -0
  158. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/git_topology.py +0 -0
  159. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/governed_bundle.py +0 -0
  160. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/governed_premerge.py +0 -0
  161. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/governed_review.py +0 -0
  162. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/handoff.py +0 -0
  163. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/handoff_path.py +0 -0
  164. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  165. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/injection.py +0 -0
  166. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/install_status.py +0 -0
  167. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  168. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/launcher.py +0 -0
  169. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/lease_store.py +0 -0
  170. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/maintenance.py +0 -0
  171. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  172. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/models.py +0 -0
  173. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/observability.py +0 -0
  174. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  175. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  176. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  177. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  178. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  179. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  180. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  181. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  182. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  183. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/plan_ir.py +0 -0
  184. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/plan_manifest.py +0 -0
  185. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/planner_validation.py +0 -0
  186. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/profiles.py +0 -0
  187. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/prompts.py +0 -0
  188. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/provenance.py +0 -0
  189. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/publishing.py +0 -0
  190. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/py.typed +0 -0
  191. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/ratification_policy.py +0 -0
  192. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/reconcile.py +0 -0
  193. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/redaction.py +0 -0
  194. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/reflection_sync.py +0 -0
  195. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/release_guard.py +0 -0
  196. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/render.py +0 -0
  197. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/repo_validation.py +0 -0
  198. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/review_summary.py +0 -0
  199. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  200. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/route_log.py +0 -0
  201. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  202. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  203. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runner.py +0 -0
  204. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runtime_paths.py +0 -0
  205. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runtime_projection.py +0 -0
  206. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/runtime_resources.py +0 -0
  207. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schema_export.py +0 -0
  208. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  209. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  210. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  211. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_install.py +0 -0
  212. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_inventory.py +0 -0
  213. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_paths.py +0 -0
  214. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  215. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  216. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  217. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  218. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  219. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  220. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  221. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  222. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  223. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  224. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  225. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  226. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  227. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  228. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  229. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  230. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  231. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  232. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  233. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  234. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  235. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  236. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  237. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  238. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  239. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  240. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  241. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  242. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  243. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  244. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  245. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  246. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  247. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  248. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  249. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  250. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  251. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  252. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  253. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  254. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  255. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  256. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  257. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  258. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  259. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  260. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  261. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  262. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  263. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  264. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  265. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  266. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  267. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  268. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  269. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  270. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  271. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  272. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  273. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  274. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  275. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  276. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  277. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  278. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  279. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  280. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  281. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  282. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  283. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  284. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  285. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  286. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  287. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  288. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  289. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  290. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  291. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  292. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  293. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  294. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  295. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  296. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  297. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  298. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  299. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  300. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  301. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  302. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  303. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  304. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  305. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  306. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  307. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  308. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  309. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  310. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  311. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  312. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  313. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  314. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  315. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  316. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  317. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  318. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  319. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  320. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  321. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  322. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  323. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  324. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  325. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  326. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  327. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  328. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  329. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  330. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  331. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  332. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  333. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  334. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  335. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  336. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  337. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  338. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  339. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  340. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  341. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  342. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  343. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  344. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  345. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  346. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  347. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  348. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  349. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  350. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  351. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  352. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  353. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  354. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  355. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  356. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  357. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  359. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  361. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  362. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  363. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  364. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  365. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  366. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  367. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  368. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  369. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  370. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  371. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  372. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  373. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  374. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  375. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  376. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  377. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  378. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  379. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  380. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  381. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  382. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  383. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  384. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  385. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  386. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  387. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  388. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  389. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  390. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  391. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  392. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  393. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  394. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  395. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  396. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  397. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  398. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  399. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/state.py +0 -0
  400. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/state_degradation.py +0 -0
  401. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/state_ops.py +0 -0
  402. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/task_message_broker.py +0 -0
  403. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/train_ledger.py +0 -0
  404. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/train_roadmap.py +0 -0
  405. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/train_runner.py +0 -0
  406. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/verification_evidence.py +0 -0
  407. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  408. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  409. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/worker_pool.py +0 -0
  410. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime/worktree_index.py +0 -0
  411. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  412. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  413. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  414. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  415. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_advisory_mode.py +0 -0
  416. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_alias_install.py +0 -0
  417. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_backcompat.py +0 -0
  418. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_backing_omnigent.py +0 -0
  419. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_cli_legacy.py +0 -0
  420. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_composition.py +0 -0
  421. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_concurrency.py +0 -0
  422. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_config.py +0 -0
  423. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_golden.py +0 -0
  424. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_ingestion.py +0 -0
  425. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_integration.py +0 -0
  426. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_matrix.py +0 -0
  427. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_observability.py +0 -0
  428. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_presets.py +0 -0
  429. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_registries.py +0 -0
  430. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_resolver.py +0 -0
  431. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_board_schema.py +0 -0
  432. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_advisor_twin_alias_legacy.py +0 -0
  433. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_agent_runtime_provider_cs08.py +0 -0
  434. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_autosel.py +0 -0
  435. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_branchgov_preflight.py +0 -0
  436. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_certificate_tier.py +0 -0
  437. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_cli_train_status_45.py +0 -0
  438. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_closeout_break_glass_cli.py +0 -0
  439. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_closeout_classifier.py +0 -0
  440. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_closeout_convergence_fixes.py +0 -0
  441. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_closeout_exception_vocab.py +0 -0
  442. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_closeout_validator_hook.py +0 -0
  443. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_closeout_verification_gate.py +0 -0
  444. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_codex_effort_max_clamp_49.py +0 -0
  445. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_conformance_golden.py +0 -0
  446. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_consiliency_dual_layout.py +0 -0
  447. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_consiliency_gates.py +0 -0
  448. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_consiliency_ingest.py +0 -0
  449. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_consiliency_scaffold.py +0 -0
  450. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_coordinator_wave_loop.py +0 -0
  451. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_discovery_hygiene_legacy.py +0 -0
  452. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  453. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_helper.py +0 -0
  454. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_reentrancy.py +0 -0
  455. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  456. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_doc_delta_validator.py +0 -0
  457. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_docs_audit.py +0 -0
  458. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_docs_freshness.py +0 -0
  459. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_doctor_bom.py +0 -0
  460. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_dotfiles_tree.py +0 -0
  461. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_execgov.py +0 -0
  462. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_execreg_launch_registry.py +0 -0
  463. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_execute_phase_handoff_mode.py +0 -0
  464. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_execution_policy_tiering.py +0 -0
  465. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_executor_availability.py +0 -0
  466. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_export_schema.py +0 -0
  467. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_fleet_map.py +0 -0
  468. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_fleet_metrics.py +0 -0
  469. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_fleet_metrics_export.py +0 -0
  470. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_gate_a_wheel_isolation.py +0 -0
  471. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_gate_posture.py +0 -0
  472. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_git_discipline.py +0 -0
  473. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_git_grounded_projection.py +0 -0
  474. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_disjointness_model_first.py +0 -0
  475. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_e2e.py +0 -0
  476. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_gate_crfixes.py +0 -0
  477. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_planning_gate.py +0 -0
  478. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_premerge.py +0 -0
  479. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_premerge_live.py +0 -0
  480. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_governed_review.py +0 -0
  481. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_grokexec.py +0 -0
  482. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_hotfix_lane.py +0 -0
  483. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_injection_skill_failloud.py +0 -0
  484. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_lane_ir_override.py +0 -0
  485. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_launcher_liveness.py +0 -0
  486. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_launchspec_golden.py +0 -0
  487. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_lease_store.py +0 -0
  488. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_lease_store_conformance.py +0 -0
  489. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_ledger_serialization.py +0 -0
  490. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_manifest_per_entry_164.py +0 -0
  491. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_model_class_policy.py +0 -0
  492. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_model_id_source_guard.py +0 -0
  493. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_observability_alerting.py +0 -0
  494. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_advisory.py +0 -0
  495. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_advisory_cli.py +0 -0
  496. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  497. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_authority_boundary.py +0 -0
  498. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_contract_drift.py +0 -0
  499. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_contract_imports.py +0 -0
  500. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_contract_pin.py +0 -0
  501. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_core_api.py +0 -0
  502. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_provenance.py +0 -0
  503. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_ci.py +0 -0
  504. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_cli.py +0 -0
  505. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_output.py +0 -0
  506. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_real_runtime.py +0 -0
  507. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_redaction.py +0 -0
  508. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_release_surface.py +0 -0
  509. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_schema_validation.py +0 -0
  510. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_outside_agent_vectors.py +0 -0
  511. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_advisory_mode_63.py +0 -0
  512. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_context_refs_114.py +0 -0
  513. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_invoker.py +0 -0
  514. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_invoker_timeout_argv.py +0 -0
  515. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  516. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_per_leg_model_66.py +0 -0
  517. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_streaming_verdicts.py +0 -0
  518. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_tui_eof_48.py +0 -0
  519. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_panel_verdict_summary.py +0 -0
  520. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_parallel_dispatch_backcompat.py +0 -0
  521. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_parallel_dispatch_cli.py +0 -0
  522. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_adoption_bundle.py +0 -0
  523. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  524. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_dependency.py +0 -0
  525. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  526. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_injection.py +0 -0
  527. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_modular.py +0 -0
  528. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  529. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  530. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_schema_export.py +0 -0
  531. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_baml_schema_source.py +0 -0
  532. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  533. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  534. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_build_bundle.py +0 -0
  535. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_classifier.py +0 -0
  536. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  537. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  538. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  539. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  540. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_security.py +0 -0
  541. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  542. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  543. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  544. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_claude_route_selection.py +0 -0
  545. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_cli.py +0 -0
  546. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  547. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_control_only.py +0 -0
  548. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_event.py +0 -0
  549. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  550. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_hardening.py +0 -0
  551. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  552. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_schema.py +0 -0
  553. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_closeout_validation.py +0 -0
  554. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_collaborator_citation.py +0 -0
  555. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_collaborator_docs.py +0 -0
  556. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  557. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  558. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  559. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  560. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  561. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_discovery.py +0 -0
  562. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_docs.py +0 -0
  563. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  564. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  565. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  566. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  567. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_portal.py +0 -0
  568. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  569. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_drift_audit.py +0 -0
  570. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  571. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  572. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_events_migration.py +0 -0
  573. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit.py +0 -0
  574. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  575. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  576. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  577. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  578. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_execution_policy.py +0 -0
  579. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_executor_degradation.py +0 -0
  580. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_full_phase_mode.py +0 -0
  581. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_handoff.py +0 -0
  582. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_handoff_migration.py +0 -0
  583. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_init.py +0 -0
  584. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_injection.py +0 -0
  585. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_install_status.py +0 -0
  586. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  587. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_harnesses.py +0 -0
  588. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_ir.py +0 -0
  589. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  590. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_lane_scheduler.py +0 -0
  591. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_launcher.py +0 -0
  592. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_ledger_debug.py +0 -0
  593. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_ledger_dedup.py +0 -0
  594. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_live_adapters.py +0 -0
  595. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_maintenance.py +0 -0
  596. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_metrics.py +0 -0
  597. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_migration_regressions.py +0 -0
  598. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  599. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  600. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  601. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_models.py +0 -0
  602. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_native_flags.py +0 -0
  603. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  604. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pi_executor.py +0 -0
  605. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  606. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  607. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  608. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  609. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  610. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_pipeline_mode.py +0 -0
  611. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  612. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_plan_manifest.py +0 -0
  613. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  614. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_planner_validation.py +0 -0
  615. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_policy.py +0 -0
  616. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_protocol_contract.py +0 -0
  617. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_provenance.py +0 -0
  618. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile.py +0 -0
  619. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  620. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  621. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  622. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_reducers.py +0 -0
  623. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  624. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  625. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  626. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_roadmap_validate.py +0 -0
  627. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_rotation.py +0 -0
  628. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runner.py +0 -0
  629. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  630. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_boundary.py +0 -0
  631. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_decouple.py +0 -0
  632. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_package_data.py +0 -0
  633. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_runtime_projection.py +0 -0
  634. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_schema_flow.py +0 -0
  635. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  636. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  637. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_contract.py +0 -0
  638. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  639. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_install.py +0 -0
  640. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  641. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_smoke_blockers.py +0 -0
  642. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  643. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_smoke_reentry.py +0 -0
  644. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  645. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  646. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  647. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_state.py +0 -0
  648. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  649. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  650. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  651. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  652. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  653. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v22_e2e.py +0 -0
  654. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v22_principles.py +0 -0
  655. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  656. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_reconcile.py +0 -0
  657. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_sched.py +0 -0
  658. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_v45_schedharden.py +0 -0
  659. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_wave_runner.py +0 -0
  660. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_work_unit_observability.py +0 -0
  661. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_work_unit_runner.py +0 -0
  662. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_work_unit_state.py +0 -0
  663. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_loop_worktrees.py +0 -0
  664. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  665. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_phase_worktree_executor.py +0 -0
  666. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  667. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  668. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  669. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_flag.py +0 -0
  670. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_markers.py +0 -0
  671. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  672. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  673. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  674. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  675. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  676. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pkg_layout_freeze.py +0 -0
  677. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_plan_ir_iter_waves.py +0 -0
  678. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_preflight_verification.py +0 -0
  679. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_proc_cpu.py +0 -0
  680. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_prune_merged_worktrees_script.py +0 -0
  681. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_publishing.py +0 -0
  682. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_pushflow.py +0 -0
  683. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_ratification_policy.py +0 -0
  684. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  685. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_reconcile_verification_log.py +0 -0
  686. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_reflection_sync.py +0 -0
  687. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  688. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_release_pin_autotrack.py +0 -0
  689. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_repo_validation.py +0 -0
  690. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_review_leg_sandbox.py +0 -0
  691. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_review_summary.py +0 -0
  692. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_route_log.py +0 -0
  693. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_route_policy_conformance.py +0 -0
  694. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_routing_invariants.py +0 -0
  695. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_runtime_state_mirror_agreement.py +0 -0
  696. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_sibling_matcher_patterns.py +0 -0
  697. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skill_bundle_pinned.py +0 -0
  698. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skill_install_body_expansion.py +0 -0
  699. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skill_plan_manifest_write.py +0 -0
  700. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skill_sources_seam.py +0 -0
  701. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skills_bundle_drift.py +0 -0
  702. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skills_canon_parity.py +0 -0
  703. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_skills_src_claude_literal_lint.py +0 -0
  704. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_spec_conformance_gate.py +0 -0
  705. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_status_read_only_62.py +0 -0
  706. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  707. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_sync_skills_apply_failloud.py +0 -0
  708. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_task_message_broker.py +0 -0
  709. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_train_e2e.py +0 -0
  710. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_train_invariants.py +0 -0
  711. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_train_merge.py +0 -0
  712. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_train_order_only_deps_47.py +0 -0
  713. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_train_roadmap.py +0 -0
  714. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_train_runner.py +0 -0
  715. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_unattended_release.py +0 -0
  716. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  717. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  718. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_verification_evidence.py +0 -0
  719. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_verification_evidence_validator.py +0 -0
  720. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_visual_evidence_validator.py +0 -0
  721. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_workerpool_failure_isolation.py +0 -0
  722. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_workerpool_parallel.py +0 -0
  723. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/tests/test_workerpool_worktree_alloc.py +0 -0
  724. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.2}/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.1
3
+ Version: 0.7.2
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
7
- version = "0.7.1"
7
+ version = "0.7.2"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.1"
21
+ __version__ = "0.7.2"
@@ -1360,6 +1360,19 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1360
1360
  return _run_returncode(snapshot, results)
1361
1361
 
1362
1362
 
1363
+ def _native_agent_request_json(leg: object) -> dict | None:
1364
+ """Serialize a leg's ``needs_native_agent`` request (ABDNATIVE / #183) to a
1365
+ JSON-safe dict, or ``None`` when the seat is not deferred to a native Agent.
1366
+
1367
+ Structural (``getattr`` + ``to_dict``) so it does not force a ``panel_invoker``
1368
+ import onto the bare CLI path."""
1369
+ request = getattr(leg, "needs_native_agent", None)
1370
+ if request is None:
1371
+ return None
1372
+ to_dict = getattr(request, "to_dict", None)
1373
+ return to_dict() if callable(to_dict) else None
1374
+
1375
+
1363
1376
  def _advisor_board_command(*, args: argparse.Namespace) -> int:
1364
1377
  """LEGACY (CLEANSHIP P7): run the 4-vendor advisor board as the RUNNABLE
1365
1378
  agent-facing default. Composes availability-aware seats via
@@ -1419,10 +1432,43 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1419
1432
  # expected non-OK), the board is below its independence floor → exit nonzero.
1420
1433
  usable = usable_count >= FLOOR_SEATS
1421
1434
  exit_code = 0 if usable else 1
1435
+ # #183 / ABDNATIVE: LOUD requested-vs-delivered shortfall. A floor-satisfying
1436
+ # board can still be SHORT an explicitly-requested seat (the claude/Fable seat
1437
+ # deferred to a native Agent), and a bare `usable:true` masks that. Report
1438
+ # requested (every composed seat), delivered (usable OK+text), and — the
1439
+ # affordance — the seats a native harness can FILL itself (each carries the
1440
+ # typed `needs_native_agent` request). Exit stays floor-based (unchanged): the
1441
+ # shortfall is a REPORTING signal, not a gate flip.
1442
+ # CR F3: derive unfilled seats PER-LEG (`not leg.usable`), never by seat_key
1443
+ # membership. Seats are collision-aware LABELS (schema permits byte-identical
1444
+ # seats with the SAME key), so a key-set difference would let a duplicate key —
1445
+ # one seat OK, its twin failed — hide the failed twin: requested=2/delivered=1
1446
+ # but zero unfilled reported = a silent drop. Per-leg is positional and exact.
1447
+ requested_seats = len(board.seats)
1448
+ unfilled_legs = [leg for leg in result.legs if not leg.usable]
1449
+ fillable_legs = [leg for leg in unfilled_legs if leg.needs_native_agent is not None]
1450
+ shortfall = {
1451
+ "requested_seats": requested_seats,
1452
+ "delivered_seats": usable_count,
1453
+ "unfilled_seats": [
1454
+ {
1455
+ "seat_key": leg.seat_key,
1456
+ "leg": leg.leg,
1457
+ "status": leg.status,
1458
+ "needs_native_agent": _native_agent_request_json(leg),
1459
+ }
1460
+ for leg in unfilled_legs
1461
+ ],
1462
+ "natively_fillable_seats": len(fillable_legs),
1463
+ }
1422
1464
  if bool(getattr(args, "json", False)):
1423
1465
  payload = {
1424
1466
  "board": board.name,
1425
1467
  "usable": usable,
1468
+ # Requested-vs-delivered so a Bash-invoking harness sees a dropped seat.
1469
+ "requested_seats": requested_seats,
1470
+ "delivered_seats": usable_count,
1471
+ "shortfall": shortfall,
1426
1472
  "independence": {
1427
1473
  "level": independence.level,
1428
1474
  "distinct_vendors": independence.distinct_vendors,
@@ -1438,6 +1484,9 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1438
1484
  "status": leg.status,
1439
1485
  "detail": leg.detail,
1440
1486
  "text": leg.text,
1487
+ # ABDNATIVE (#183): a deferred claude/Fable seat carries the
1488
+ # typed native-fill request the harness must run; None otherwise.
1489
+ "needs_native_agent": _native_agent_request_json(leg),
1441
1490
  }
1442
1491
  for leg in result.legs
1443
1492
  ],
@@ -1460,6 +1509,18 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1460
1509
  # The statuses/verdicts are ADVISORY evidence — the operator reconciles them; a
1461
1510
  # non-OK leg (DEGRADED/UNAVAILABLE/…) is a gap to fill, not a passed review.
1462
1511
  print("advisor-board: verdicts are advisory — reconcile the legs; check each leg status.")
1512
+ # #183: surface the requested-vs-delivered shortfall LOUDLY (stderr) so a
1513
+ # floor-satisfying board is never mistaken for the full requested board, and
1514
+ # name the seats a native harness can fill itself.
1515
+ if unfilled_legs:
1516
+ print(
1517
+ f"advisor-board: delivered {usable_count}/{requested_seats} requested seats — "
1518
+ f"{len(unfilled_legs)} unfilled ({len(fillable_legs)} natively fillable):",
1519
+ file=sys.stderr,
1520
+ )
1521
+ for leg in unfilled_legs:
1522
+ fill = " → run a native Fable Agent to fill this seat" if leg.needs_native_agent else ""
1523
+ print(f"advisor-board: [{leg.status}] {leg.seat_key}{fill}", file=sys.stderr)
1463
1524
  if not usable:
1464
1525
  print(
1465
1526
  f"advisor-board: only {usable_count} usable review leg(s) < floor {FLOOR_SEATS} "
@@ -0,0 +1,34 @@
1
+ [Unit]
2
+ Description=Phase-loop task-message source broker
3
+ After=network-online.target
4
+ Wants=network-online.target
5
+
6
+ [Service]
7
+ Type=simple
8
+ User=viperjuice
9
+ Group=viperjuice
10
+ EnvironmentFile=/etc/phase-loop/task-message-broker.env
11
+ ExecStart=/opt/phase-loop-task-message-broker/bin/phase-loop task-message-broker-serve --host 127.0.0.1 --port 18765 --control-socket /home/viperjuice/.codex/app-server-control/app-server-control.sock --authority codex-app-server://claw.taile09692.ts.net --token-sha256 ${TASK_MESSAGE_TOKEN_SHA256} --agent-harness-sha ${AGENT_HARNESS_SHA}
12
+ Restart=on-failure
13
+ RestartSec=2
14
+ UMask=0077
15
+ NoNewPrivileges=yes
16
+ PrivateDevices=yes
17
+ PrivateTmp=yes
18
+ ProtectHome=tmpfs
19
+ BindReadOnlyPaths=/home/viperjuice/.codex/app-server-control/app-server-control.sock
20
+ ProtectSystem=strict
21
+ InaccessiblePaths=/proc
22
+ ProtectControlGroups=yes
23
+ ProtectKernelModules=yes
24
+ ProtectKernelTunables=yes
25
+ LockPersonality=yes
26
+ RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
27
+ RestrictRealtime=yes
28
+ RestrictSUIDSGID=yes
29
+ SystemCallArchitectures=native
30
+ IPAddressDeny=any
31
+ IPAddressAllow=localhost
32
+
33
+ [Install]
34
+ WantedBy=multi-user.target
@@ -196,6 +196,15 @@ class PanelLegResult:
196
196
  # default 3-leg board stay byte-for-byte identical (one seat per vendor ==
197
197
  # seat_key == leg). ABDHOME wires the per-seat spawn; this freezes the identity.
198
198
  seat_key: str | None = None
199
+ # ABDNATIVE (#183 companion, Bug 2): the typed native-fill request is exposed by
200
+ # the ``needs_native_agent`` PROPERTY below and stored in the non-field
201
+ # ``_needs_native_agent`` attribute (attached via ``attach_native_agent_request``
202
+ # / ``object.__setattr__``). It is DELIBERATELY NOT a dataclass field (CR F2):
203
+ # ``dataclasses.asdict`` and any field-walking serializer (golden,
204
+ # AdvisorBoardEvent) enumerate ``fields()`` only, so the affordance is
205
+ # structurally UNABLE to leak into the (status, text) golden surface. The
206
+ # property reads a default of ``None`` so a plain leg (none attached) is never
207
+ # an AttributeError.
199
208
 
200
209
  def __post_init__(self) -> None:
201
210
  object.__setattr__(self, "status", normalize_leg_status(self.status))
@@ -206,6 +215,21 @@ class PanelLegResult:
206
215
  def usable(self) -> bool:
207
216
  return self.status == "OK" and bool(self.text.strip())
208
217
 
218
+ @property
219
+ def needs_native_agent(self) -> "NativeAgentLegRequest | None":
220
+ return getattr(self, "_needs_native_agent", None)
221
+
222
+
223
+ def attach_native_agent_request(
224
+ leg: PanelLegResult, request: "NativeAgentLegRequest"
225
+ ) -> PanelLegResult:
226
+ """Attach a native-fill request to a (frozen) ``PanelLegResult`` post-creation
227
+ (CR F2): stored in the NON-field ``_needs_native_agent`` so ``asdict``/golden
228
+ serializers never see it; read back via the ``needs_native_agent`` property.
229
+ Returns ``leg`` for call-site convenience."""
230
+ object.__setattr__(leg, "_needs_native_agent", request)
231
+ return leg
232
+
209
233
 
210
234
  @dataclass(frozen=True)
211
235
  class PanelResult:
@@ -215,6 +239,16 @@ class PanelResult:
215
239
  def usable_legs(self) -> tuple[PanelLegResult, ...]:
216
240
  return tuple(leg for leg in self.legs if leg.usable)
217
241
 
242
+ @property
243
+ def native_fill_requests(self) -> tuple["NativeAgentLegRequest", ...]:
244
+ """ABDNATIVE (#183 companion): the deferred seats a driving host can fill
245
+ natively (each carries seat_key/model/effort/lens + the review contract).
246
+ A non-empty result means the board is SHORT those seats until they are
247
+ filled — the loud requested-vs-delivered signal the caller must not miss."""
248
+ return tuple(
249
+ leg.needs_native_agent for leg in self.legs if leg.needs_native_agent is not None
250
+ )
251
+
218
252
 
219
253
  def available_panel_legs(probe: Callable[[str], bool] | None = None) -> tuple[str, ...]:
220
254
  """Metadata-only liveness preflight: which panel legs have their CLI present.
@@ -1400,12 +1434,18 @@ def _normalize_claude_agent_state(value: object) -> str:
1400
1434
  # under_claude_code — we are INSIDE a Claude Code session; the driving
1401
1435
  # session supplies the leg as its own NATIVE Agent
1402
1436
  # (Task tool). Spawning a second Claude TUI here is
1403
- # the wrong route.
1404
- # native_adapter_required a headless / no-tty host (e.g. the Codex Desktop
1405
- # tool shell: CLAUDECODE unset, stdin/stdout not a
1406
- # tty) with no controlling terminal to drive a TUI.
1407
- # The host fulfills the leg through its own native
1408
- # sub-agent adapter (see native_agent_leg_request()).
1437
+ # the wrong route. This is the RUNTIME-EMITTED defer
1438
+ # code (the only case `_exec_claude_tui_leg` defers).
1439
+ # native_adapter_required an AFFORDANCE/fallback for a host that fulfills the
1440
+ # leg via its OWN sub-agent adapter instead of the
1441
+ # runtime's self-PTY TUI (see native_agent_leg_request()).
1442
+ # #183: the runtime NO LONGER defers a headless / no-tty
1443
+ # NON-Claude host by default — `_run_claude_tui_session`
1444
+ # self-allocates its own PTY, so the leg RUNS there. This
1445
+ # code is produced only by a standalone
1446
+ # `native_agent_leg_request(env=<non-Claude>)` call, for
1447
+ # a host that cannot drive the TUI or prefers its own
1448
+ # agent (e.g. the Codex Desktop tool shell).
1409
1449
  _CLAUDE_LEG_DEFERRED_UNDER_CLAUDE_CODE = "under_claude_code"
1410
1450
  _CLAUDE_LEG_DEFERRED_NATIVE_ADAPTER = "native_adapter_required"
1411
1451
 
@@ -1416,10 +1456,10 @@ _CLAUDE_LEG_DEFERRED_REASONS: dict[str, str] = {
1416
1456
  "runtime must not spawn a second Claude TUI here."
1417
1457
  ),
1418
1458
  _CLAUDE_LEG_DEFERRED_NATIVE_ADAPTER: (
1419
- "claude leg not run by the runtime in this headless / no-tty host (no "
1420
- "controlling terminal to drive a Claude TUI); the driving host (e.g. "
1421
- "Codex Desktop) must fulfill it via its native sub-agent adapter see "
1422
- "native_agent_leg_request()."
1459
+ "claude leg available as an AFFORDANCE for this headless / no-tty host: "
1460
+ "#183 the runtime runs the self-PTY TUI here by default, but a host that "
1461
+ "cannot drive a TUI (or prefers its own agent) may fulfill the leg via its "
1462
+ "native sub-agent adapter — see native_agent_leg_request()."
1423
1463
  ),
1424
1464
  }
1425
1465
 
@@ -1465,6 +1505,17 @@ class NativeAgentLegRequest:
1465
1505
  caller's inputs (:func:`native_agent_leg_request`) and is NEVER threaded
1466
1506
  through the governed ``(status, text)`` spawn boundary — keeping the panel /
1467
1507
  advisor-board golden byte-identical (#92 A4).
1508
+
1509
+ ABDNATIVE (#183 companion, Bug 2): when the board attaches this to a deferred
1510
+ leg in the ``PanelResult`` (``PanelLegResult.needs_native_agent``), it carries
1511
+ the SEAT cognition the driver must reproduce — ``seat_key`` / ``effort`` /
1512
+ ``lens`` (the model is already here) — plus the ``artifact_ref`` the board was
1513
+ given and the effective ``brief_ref`` (so the native fill reviews under the SAME
1514
+ acceptance brief as the runtime legs — the ``instructions`` field already carries
1515
+ the resolved brief text). These are optional (``None``) so the pure standalone
1516
+ builder and its existing callers are byte-unchanged; ``to_dict`` OMITS every
1517
+ ``None`` optional key, so a bare #125 builder call serializes to exactly the
1518
+ original 8-key shape (byte-compat).
1468
1519
  """
1469
1520
 
1470
1521
  leg: str
@@ -1475,10 +1526,25 @@ class NativeAgentLegRequest:
1475
1526
  instructions: str
1476
1527
  verdict_required: bool
1477
1528
  verdict_contract: str
1529
+ # ABDNATIVE seat cognition (set when surfaced on a board result; None for the
1530
+ # pure standalone builder call). ``seat_key``/``effort``/``lens`` tell the
1531
+ # driver exactly which cognition to reproduce; ``artifact_ref`` names the
1532
+ # material the board reviewed; ``brief_ref`` names the effective review brief
1533
+ # (the driver usually already holds artifact + brief).
1534
+ seat_key: str | None = None
1535
+ effort: str | None = None
1536
+ lens: str | None = None
1537
+ artifact_ref: str | None = None
1538
+ brief_ref: str | None = None
1478
1539
 
1479
1540
  def to_dict(self) -> dict[str, object]:
1480
- """JSON-serializable form for a host driver to consume across a tool boundary."""
1481
- return {
1541
+ """JSON-serializable form for a host driver to consume across a tool boundary.
1542
+
1543
+ Byte-compat (CR F1): the eight base keys are always present; each ADDITIVE
1544
+ optional key is emitted ONLY when set, so a bare ``native_agent_leg_request``
1545
+ call (all optionals ``None``) serializes to the exact original 8-key shape
1546
+ that #125's callers depend on."""
1547
+ out: dict[str, object] = {
1482
1548
  "leg": self.leg,
1483
1549
  "model": self.model,
1484
1550
  "mode": self.mode,
@@ -1488,6 +1554,11 @@ class NativeAgentLegRequest:
1488
1554
  "verdict_required": self.verdict_required,
1489
1555
  "verdict_contract": self.verdict_contract,
1490
1556
  }
1557
+ for key in ("seat_key", "effort", "lens", "artifact_ref", "brief_ref"):
1558
+ value = getattr(self, key)
1559
+ if value is not None:
1560
+ out[key] = value
1561
+ return out
1491
1562
 
1492
1563
 
1493
1564
  # The terminal-verdict contract a native-fulfilled review leg must satisfy so its
@@ -1510,6 +1581,12 @@ def native_agent_leg_request(
1510
1581
  mode: str = "review",
1511
1582
  env: Mapping[str, str] | None = None,
1512
1583
  model: str | None = None,
1584
+ seat_key: str | None = None,
1585
+ effort: str | None = None,
1586
+ lens: str | None = None,
1587
+ artifact_ref: str | None = None,
1588
+ brief_ref: str | None = None,
1589
+ instructions: str | None = None,
1513
1590
  ) -> NativeAgentLegRequest:
1514
1591
  """Build the structured request a host driver fulfills for a deferred leg (#125).
1515
1592
 
@@ -1518,6 +1595,15 @@ def native_agent_leg_request(
1518
1595
  ``UNAVAILABLE`` for this leg). ``mode`` selects the review vs advisory brief +
1519
1596
  verdict contract; ``env`` selects the deferred-reason code (under Claude Code
1520
1597
  vs native-adapter-required); ``model`` defaults to the seat's canonical model.
1598
+
1599
+ ABDNATIVE (#183 companion): the board passes the deferred seat's cognition
1600
+ (``seat_key`` / ``effort`` / ``lens``), the reviewed ``artifact_ref``, and the
1601
+ effective ``brief_ref`` so the surfaced request fully specifies the native fill.
1602
+ ``instructions`` (CR F5) OVERRIDES the default ``_mode_instructions(mode)`` with
1603
+ the RESOLVED effective brief — so a board invoked with a custom ``brief_ref``
1604
+ hands the native seat the SAME acceptance brief as the runtime legs, not the
1605
+ default. All default ``None`` — the bare standalone call is byte-unchanged
1606
+ (#125 callers/tests unaffected).
1521
1607
  """
1522
1608
  reason, detail = _claude_leg_deferred_reason(env)
1523
1609
  verdict_required = mode != "advisory"
@@ -1527,11 +1613,16 @@ def native_agent_leg_request(
1527
1613
  mode=mode,
1528
1614
  reason=reason,
1529
1615
  detail=detail,
1530
- instructions=_mode_instructions(mode),
1616
+ instructions=instructions if instructions is not None else _mode_instructions(mode),
1531
1617
  verdict_required=verdict_required,
1532
1618
  verdict_contract=(
1533
1619
  _REVIEW_VERDICT_CONTRACT if verdict_required else _ADVISORY_VERDICT_CONTRACT
1534
1620
  ),
1621
+ seat_key=seat_key,
1622
+ effort=effort,
1623
+ lens=lens,
1624
+ artifact_ref=artifact_ref,
1625
+ brief_ref=brief_ref,
1535
1626
  )
1536
1627
 
1537
1628
 
@@ -1547,8 +1638,12 @@ def _tui_capable(
1547
1638
  env: Mapping[str, str] | None = None,
1548
1639
  isatty: Callable[[], bool] | None = None,
1549
1640
  ) -> bool:
1550
- """The TUI leg needs a real controlling terminal. False under Claude Code OR
1551
- when stdin/stdout is not a tty (headless/detached)."""
1641
+ """True iff the PARENT has a usable controlling terminal AND we are not under
1642
+ Claude Code. Retained as a capability predicate, but as of #183 it is NO LONGER
1643
+ the gate for running the claude TUI leg: ``_exec_claude_tui_leg`` gates on
1644
+ ``_under_claude_code`` alone, because ``_run_claude_tui_session`` self-allocates
1645
+ its own PTY and never needs the parent's tty. Kept for callers/tests that
1646
+ genuinely want to know whether the parent is terminal-attached."""
1552
1647
  if _under_claude_code(env):
1553
1648
  return False
1554
1649
  check = isatty if isatty is not None else (lambda: sys.stdin.isatty() and sys.stdout.isatty())
@@ -1584,28 +1679,43 @@ def _exec_claude_tui_leg(
1584
1679
  ``resolve_seat_env`` result so per-seat effort + active env scrubbing reach the
1585
1680
  real launch.
1586
1681
  """
1587
- supported, support_detail = _claude_code_support_status()
1588
- if not supported:
1589
- return "UNAVAILABLE", support_detail
1590
-
1591
- if not _tui_capable(env):
1592
- # Under Claude Code / no controlling terminal: do NOT spawn a Claude TUI
1593
- # we cannot drive (issue #92). Degrade cleanly with the existing
1594
- # UNAVAILABLE status and EMPTY review text the empty text is
1595
- # load-bearing (A4): an UNAVAILABLE leg with empty text becomes a
1596
- # non-gating `panel_leg_degraded` warn, never a block, and `usable`
1597
- # (status=="OK") never counts it as an AGREE. The driving session/host
1598
- # must supply this leg natively (Claude Code: a Task Agent; Codex Desktop
1599
- # / headless: its native sub-agent adapter see native_agent_leg_request).
1600
- # #125: log the machine-branchable reason code so the distinction between
1601
- # "under Claude Code" and "native-adapter-required" is visible in the audit
1602
- # line, not just blended into one sentence.
1682
+ # CR F4: the under-Claude-Code deferral MUST come BEFORE the local-CLI support
1683
+ # check. Inside Claude Code the driving session fulfills the leg as its own
1684
+ # native Task Agent (its authed session), which does NOT depend on a standalone
1685
+ # `claude` CLI being installed/current on the host. Checking support first would
1686
+ # return `UNAVAILABLE` + a NON-empty support detail on a Claude-Code host that
1687
+ # lacks the local CLI and `_run_seat`'s deferral signature is UNAVAILABLE +
1688
+ # EMPTY text, so the native-fill request would never be attached: a silent drop.
1689
+ # Defer first (empty text, native request emitted), THEN check local support for
1690
+ # the run path.
1691
+ if _under_claude_code(env):
1692
+ # #92: INSIDE Claude Code, do NOT spawn a SECOND Claude TUI we cannot
1693
+ # drive. Degrade cleanly with the existing UNAVAILABLE status and EMPTY
1694
+ # review text the empty text is load-bearing (A4): an UNAVAILABLE leg
1695
+ # with empty text becomes a non-gating `panel_leg_degraded` warn, never a
1696
+ # block, and `usable` (status=="OK") never counts it as an AGREE. The
1697
+ # driving Claude Code session supplies this leg natively (a Task Agent) —
1698
+ # see the `needs_native_agent` request the board attaches at the
1699
+ # invoke_board layer (ABDNATIVE / #183).
1700
+ #
1701
+ # #183 (owner-confirmed reconciliation): a merely non-TTY parent is NOT a
1702
+ # defer reason. `_run_claude_tui_session` SELF-ALLOCATES its own PTY
1703
+ # (pty.openpty), so a headless NON-Claude caller (e.g. Codex Desktop) with
1704
+ # valid Claude Max OAuth runs the leg RIGHT HERE — the old `_tui_capable`
1705
+ # parent-tty gate over-blocked that case. `native_adapter_required` is now
1706
+ # an AFFORDANCE/fallback (via native_agent_leg_request()) for a host that
1707
+ # cannot drive the TUI or prefers its own sub-agent, NOT the default that
1708
+ # silently dropped the seat.
1603
1709
  reason_code, reason_detail = _claude_leg_deferred_reason(env)
1604
1710
  logging.getLogger(__name__).warning(
1605
1711
  "advisor-panel claude leg deferred [%s]: %s", reason_code, reason_detail
1606
1712
  )
1607
1713
  return "UNAVAILABLE", ""
1608
1714
 
1715
+ supported, support_detail = _claude_code_support_status()
1716
+ if not supported:
1717
+ return "UNAVAILABLE", support_detail
1718
+
1609
1719
  env = _subscription_env() if env is None else dict(env)
1610
1720
  output_file = out_dir / "panel-claude.txt"
1611
1721
  prompt = _render_claude_tui_prompt(artifact, review_dir, output_file, mode)
@@ -2701,7 +2811,40 @@ def invoke_board(
2701
2811
  status = "DEGRADED"
2702
2812
  if status == "OK" and not str(text).strip():
2703
2813
  status = "EMPTY"
2704
- return PanelLegResult(leg=leg, status=status, text=str(text), seat_key=seat.seat_key)
2814
+ # ABDNATIVE (#183 companion, Bug 2): when the claude/Fable seat DEFERS (the
2815
+ # runtime cannot drive the leg here: #92 under Claude Code, or a headless
2816
+ # host), surface a typed native-fill request ON THE RESULT so a driving
2817
+ # harness sees "YOUR seat to fill" — not a log line + a bare UNAVAILABLE.
2818
+ # The deferral signature is UNAVAILABLE with EMPTY text (the #92 A4
2819
+ # invariant); the support-missing UNAVAILABLE carries a non-empty detail and
2820
+ # is a genuine "no claude here", not a fillable seat. Reuse the shipped #125
2821
+ # builder; pass the seat cognition + reviewed artifact + the EFFECTIVE brief
2822
+ # (CR F5: the native seat must review under the SAME acceptance contract as
2823
+ # the runtime legs — `_resolve_brief` gives the exact `review-instructions.md`
2824
+ # the other seats got). None for every other leg (golden byte-identity holds).
2825
+ result = PanelLegResult(leg=leg, status=status, text=str(text), seat_key=seat.seat_key)
2826
+ if leg == "claude" and status == "UNAVAILABLE" and not str(text).strip():
2827
+ try:
2828
+ effective_instructions = _resolve_brief(mode, brief_ref)
2829
+ except (ValueError, OSError):
2830
+ # brief_ref was already validated on the run path that reached the
2831
+ # defer; fall back to the mode brief rather than crash the seat.
2832
+ effective_instructions = _mode_instructions(mode)
2833
+ request = native_agent_leg_request(
2834
+ leg=leg,
2835
+ mode=mode,
2836
+ env=env_source,
2837
+ model=seat.model,
2838
+ seat_key=seat.seat_key,
2839
+ effort=seat.effort,
2840
+ lens=seat.lens,
2841
+ artifact_ref=str(artifact_ref) if isinstance(artifact_ref, str) else None,
2842
+ brief_ref=str(brief_ref) if isinstance(brief_ref, str) else None,
2843
+ instructions=effective_instructions,
2844
+ )
2845
+ # CR F2: attach post-creation (non-field) so asdict/golden can't see it.
2846
+ attach_native_agent_request(result, request)
2847
+ return result
2705
2848
 
2706
2849
  # Fan the seats out concurrently (parallel by default; max_concurrency=1 →
2707
2850
  # sequential); results come back in SEAT ORDER (positional re-key + golden
@@ -39,7 +39,9 @@ Legs fan out concurrently, so panel wall-clock ≈ max(leg), not sum. Each leg's
39
39
 
40
40
  ## Use
41
41
 
42
- **On a Harness Code host, run the claude/Fable leg as a NATIVE Agent, not the runtime TUI.** When you are *inside* Harness Code, the runtime runs the non-<harness> board legs (`grok`, `codex`, `gemini` — whichever are available AND authenticated) and returns the `claude` leg as `UNAVAILABLE` ("deferred to native Agent") by design — it must not spawn a second Harness TUI. Supply the <harness> leg yourself with the Task tool (a Fable/Harness Agent given the same `review-instructions.md` + `review-bundle.md`), require it to end with `AGREE`/`PARTIALLY AGREE`/`DISAGREE`, and reconcile it with ALL the runtime legs (do NOT drop `grok` — the board is 4-vendor, not the old 3-leg panel). A `UNAVAILABLE` <harness> leg is a *gap to fill*, not an acceptable board short a seat.
42
+ **On a Harness Code host, run the claude/Fable leg as a NATIVE Agent, not the runtime TUI.** When you are *inside* Harness Code, the runtime runs the non-<harness> board legs (`grok`, `codex`, `gemini` — whichever are available AND authenticated) and returns the `claude` leg as `UNAVAILABLE` ("deferred to native Agent") by design — it must not spawn a second Harness TUI. Supply the <harness> leg yourself with the Task tool (a Fable review Agent given the same `review-instructions.md` + `review-bundle.md`), require it to end with `AGREE`/`PARTIALLY AGREE`/`DISAGREE`, and reconcile it with ALL the runtime legs (do NOT drop `grok` — the board is 4-vendor, not the old 3-leg panel). A `UNAVAILABLE` <harness> leg is a *gap to fill*, not an acceptable board short a seat.
43
+
44
+ **Fill the deferred seat from the typed request — do not silently run a degraded board.** A deferred seat now carries a machine-readable `needs_native_agent` request on the RESULT (`result.legs[i].needs_native_agent`, also `result.native_fill_requests`, and per-leg + under `shortfall` in `advisor-board --json`). It packages `{seat_key, model, effort, lens, reason, instructions, verdict_contract, artifact_ref}` — everything you need to fill the seat, so filling is the obvious next step, not prose to decode. When a seat has `needs_native_agent`, the DEFAULT action is: run a native Fable review Agent with the Task tool (`model: fable`, at the request's `lens` and `effort`), give it the staged `review-instructions.md` + `review-bundle.md` (the `artifact_ref` names the material), require the `verdict_contract` terminal verdict, and reconcile that verdict with the runtime legs in your own context. The runtime does NOT merge the native verdict back for you — the result marks the gap; you fill it. Under-running the board (accepting the shortfall) is allowed only as an EXPLICIT, provenance-tagged choice — record which requested seats you left unfilled and why — never a silent 3-of-4. The requested-vs-delivered shortfall (`requested_seats` / `delivered_seats` / `natively_fillable_seats`) is the loud signal that you are short a seat.
43
45
 
44
46
  1. Prefer the repo's governed phase-loop path when reviewing phase execution or pre-merge work.
45
47
  2. For a standalone smoke or diagnostic, run `phase-loop advisor-board <artifact>` (or, in-process, compose with `compose_review_board` and pass the material's path via `artifact_ref` to `phase_loop_runtime.panel_invoker.invoke_board`).
@@ -59,6 +61,9 @@ board = compose_review_board()
59
61
  result = invoke_board(board, "", artifact_ref="path/to/bundle.md")
60
62
  for leg in result.legs:
61
63
  print(leg.seat_key, leg.status)
64
+ if leg.needs_native_agent: # deferred seat → fill with a native Fable Task Agent
65
+ req = leg.needs_native_agent
66
+ print(" fill natively:", req.model, req.effort, req.lens, req.reason)
62
67
  ```
63
68
 
64
- Under Harness Code, expect the `claude` leg to report `UNAVAILABLE` (deferred to the native Agent) — the runtime does not spawn a Harness TUI here. Supply the <harness> leg natively (Task tool) and reconcile it with ALL the runtime legs (`grok` + `codex` + `gemini`, whichever are up and authed) — the board is 4-vendor, so do not drop `grok`.
69
+ Under Harness Code, expect the `claude` leg to report `UNAVAILABLE` (deferred to the native Agent) and carry a `needs_native_agent` request — the runtime does not spawn a Harness TUI here. Fill the seat with a native Fable Task Agent (`model: fable`, at `req.lens` / `req.effort`), then reconcile its verdict with ALL the runtime legs (`grok` + `codex` + `gemini`, whichever are up and authed) — the board is 4-vendor, so do not drop `grok`. Leaving the seat unfilled is an explicit, provenance-tagged choice, never a silent short-a-seat board.
@@ -39,7 +39,9 @@ Legs fan out concurrently, so panel wall-clock ≈ max(leg), not sum. Each leg's
39
39
 
40
40
  ## Use
41
41
 
42
- **On a Harness Code host, run the claude/Fable leg as a NATIVE Agent, not the runtime TUI.** When you are *inside* Harness Code, the runtime runs the non-<harness> board legs (`grok`, `codex`, `gemini` — whichever are available AND authenticated) and returns the `claude` leg as `UNAVAILABLE` ("deferred to native Agent") by design — it must not spawn a second Harness TUI. Supply the <harness> leg yourself with the Task tool (a Fable/Harness Agent given the same `review-instructions.md` + `review-bundle.md`), require it to end with `AGREE`/`PARTIALLY AGREE`/`DISAGREE`, and reconcile it with ALL the runtime legs (do NOT drop `grok` — the board is 4-vendor, not the old 3-leg panel). A `UNAVAILABLE` <harness> leg is a *gap to fill*, not an acceptable board short a seat.
42
+ **On a Harness Code host, run the claude/Fable leg as a NATIVE Agent, not the runtime TUI.** When you are *inside* Harness Code, the runtime runs the non-<harness> board legs (`grok`, `codex`, `gemini` — whichever are available AND authenticated) and returns the `claude` leg as `UNAVAILABLE` ("deferred to native Agent") by design — it must not spawn a second Harness TUI. Supply the <harness> leg yourself with the Task tool (a Fable review Agent given the same `review-instructions.md` + `review-bundle.md`), require it to end with `AGREE`/`PARTIALLY AGREE`/`DISAGREE`, and reconcile it with ALL the runtime legs (do NOT drop `grok` — the board is 4-vendor, not the old 3-leg panel). A `UNAVAILABLE` <harness> leg is a *gap to fill*, not an acceptable board short a seat.
43
+
44
+ **Fill the deferred seat from the typed request — do not silently run a degraded board.** A deferred seat now carries a machine-readable `needs_native_agent` request on the RESULT (`result.legs[i].needs_native_agent`, also `result.native_fill_requests`, and per-leg + under `shortfall` in `advisor-board --json`). It packages `{seat_key, model, effort, lens, reason, instructions, verdict_contract, artifact_ref}` — everything you need to fill the seat, so filling is the obvious next step, not prose to decode. When a seat has `needs_native_agent`, the DEFAULT action is: run a native Fable review Agent with the Task tool (`model: fable`, at the request's `lens` and `effort`), give it the staged `review-instructions.md` + `review-bundle.md` (the `artifact_ref` names the material), require the `verdict_contract` terminal verdict, and reconcile that verdict with the runtime legs in your own context. The runtime does NOT merge the native verdict back for you — the result marks the gap; you fill it. Under-running the board (accepting the shortfall) is allowed only as an EXPLICIT, provenance-tagged choice — record which requested seats you left unfilled and why — never a silent 3-of-4. The requested-vs-delivered shortfall (`requested_seats` / `delivered_seats` / `natively_fillable_seats`) is the loud signal that you are short a seat.
43
45
 
44
46
  1. Prefer the repo's governed phase-loop path when reviewing phase execution or pre-merge work.
45
47
  2. For a standalone smoke or diagnostic, run `phase-loop advisor-board <artifact>` (or, in-process, compose with `compose_review_board` and pass the material's path via `artifact_ref` to `phase_loop_runtime.panel_invoker.invoke_board`).
@@ -59,6 +61,9 @@ board = compose_review_board()
59
61
  result = invoke_board(board, "", artifact_ref="path/to/bundle.md")
60
62
  for leg in result.legs:
61
63
  print(leg.seat_key, leg.status)
64
+ if leg.needs_native_agent: # deferred seat → fill with a native Fable Task Agent
65
+ req = leg.needs_native_agent
66
+ print(" fill natively:", req.model, req.effort, req.lens, req.reason)
62
67
  ```
63
68
 
64
- Under Harness Code, expect the `claude` leg to report `UNAVAILABLE` (deferred to the native Agent) — the runtime does not spawn a Harness TUI here. Supply the <harness> leg natively (Task tool) and reconcile it with ALL the runtime legs (`grok` + `codex` + `gemini`, whichever are up and authed) — the board is 4-vendor, so do not drop `grok`.
69
+ Under Harness Code, expect the `claude` leg to report `UNAVAILABLE` (deferred to the native Agent) and carry a `needs_native_agent` request — the runtime does not spawn a Harness TUI here. Fill the seat with a native Fable Task Agent (`model: fable`, at `req.lens` / `req.effort`), then reconcile its verdict with ALL the runtime legs (`grok` + `codex` + `gemini`, whichever are up and authed) — the board is 4-vendor, so do not drop `grok`. Leaving the seat unfilled is an explicit, provenance-tagged choice, never a silent short-a-seat board.
@@ -44,22 +44,23 @@ Legs fan out concurrently, so panel wall-clock ≈ max(leg), not sum. Each leg's
44
44
  3. Require every leg to end with `AGREE`, `PARTIALLY AGREE`, or `DISAGREE`.
45
45
  4. Treat `EMPTY`, `TIMEOUT`, `ERROR`, `DEGRADED`, and `UNAVAILABLE` as structured evidence, not successful reviews.
46
46
  5. Keep provider API keys out of the environment; the runtime strips known API-key variables and uses local subscription CLIs.
47
- 6. The runtime never spawns a Claude TUI it cannot drive, so on a deferred host the `claude` leg returns `UNAVAILABLE` with empty text the driving host supplies that leg through its OWN native sub-agent, not the runtime. See "Fulfilling the deferred claude leg natively" below.
47
+ 6. On a Claude Code host the runtime DEFERS the `claude` leg (`UNAVAILABLE`, empty text) so you supply it as a native `Task` Agent (#92); on a headless NON-Claude host (e.g. Harness Desktop) the runtime now RUNS the leg itself through a self-allocated PTY (#183), so it is NOT deferred there. See "Fulfilling the deferred claude leg natively" below for the Claude-Code defer and the native-adapter fallback.
48
48
 
49
- ## Fulfilling The Deferred Claude Leg Natively (#125)
49
+ ## Fulfilling The Deferred Claude Leg Natively (#125 / #183)
50
50
 
51
- When there is no controlling terminal to drive a Claude TUI, the runtime defers the `claude` leg (`status="UNAVAILABLE"`, empty text — never counted as an AGREE, recorded as a non-gating `panel_leg_degraded` warn). There are TWO deferral cases, and the runtime now distinguishes them with a machine-branchable reason code:
51
+ The runtime defers the `claude` leg (`status="UNAVAILABLE"`, empty text — never counted as an AGREE, recorded as a non-gating `panel_leg_degraded` warn) ONLY when it cannot drive a Claude TUI here. Two machine-branchable reason codes:
52
52
 
53
- - `under_claude_code` — you are running INSIDE a Claude Code session (`CLAUDECODE=1`). The driving Claude Code session supplies the leg as its own native `Task` Agent.
54
- - `native_adapter_required` — a headless / no-tty host such as the **Harness Desktop** tool shell (`CLAUDECODE` unset, stdin/stdout not a tty). The Harness host fulfills the leg through its native sub-agent adapter (`multi_agent_v1.spawn_agent`).
53
+ - `under_claude_code` — you are running INSIDE a Claude Code session (`CLAUDECODE=1`). The driving Claude Code session supplies the leg as its own native `Task` Agent. This is the case the RUNTIME actually defers.
54
+ - `native_adapter_required` — an AFFORDANCE / fallback (#183). On a headless / no-tty host such as the **Harness Desktop** tool shell (`CLAUDECODE` unset, stdin/stdout not a tty) the runtime now RUNS the self-PTY TUI itself, so the leg is NOT deferred by default. Use this path only when the runtime cannot run the TUI (no Claude support on the host) or you PREFER to fulfill the leg through your own native sub-agent adapter (`multi_agent_v1.spawn_agent`).
55
55
 
56
- Do NOT accept the 2-leg board silently. From Harness Desktop, ask the runtime for the structured request instead of parsing the log line, then fulfill it natively:
56
+ Do NOT accept a short board silently. When the leg IS deferred (under Claude Code), or when you deliberately opt into the native-adapter fallback, ask the runtime for the structured request instead of parsing the log line, then fulfill it natively:
57
57
 
58
58
  ```python
59
59
  from phase_loop_runtime.panel_invoker import native_agent_leg_request
60
60
 
61
61
  req = native_agent_leg_request(mode="review") # env defaults to os.environ
62
- # req.reason == "native_adapter_required" on a Harness/no-tty host
62
+ # req.reason == "native_adapter_required" on a non-Claude host (affordance),
63
+ # "under_claude_code" inside a Claude Code session.
63
64
  # spawn a Harness native sub-agent seeded with the SAME review bundle you passed the
64
65
  # board, plus req.instructions (the review brief) and req.verdict_contract, on
65
66
  # req.model (Fable by default). req.to_dict() is JSON for the tool boundary.
@@ -44,22 +44,23 @@ Legs fan out concurrently, so panel wall-clock ≈ max(leg), not sum. Each leg's
44
44
  3. Require every leg to end with `AGREE`, `PARTIALLY AGREE`, or `DISAGREE`.
45
45
  4. Treat `EMPTY`, `TIMEOUT`, `ERROR`, `DEGRADED`, and `UNAVAILABLE` as structured evidence, not successful reviews.
46
46
  5. Keep provider API keys out of the environment; the runtime strips known API-key variables and uses local subscription CLIs.
47
- 6. The runtime never spawns a Claude TUI it cannot drive, so on a deferred host the `claude` leg returns `UNAVAILABLE` with empty text the driving host supplies that leg through its OWN native sub-agent, not the runtime. See "Fulfilling the deferred claude leg natively" below.
47
+ 6. On a Claude Code host the runtime DEFERS the `claude` leg (`UNAVAILABLE`, empty text) so you supply it as a native `Task` Agent (#92); on a headless NON-Claude host (e.g. Harness Desktop) the runtime now RUNS the leg itself through a self-allocated PTY (#183), so it is NOT deferred there. See "Fulfilling the deferred claude leg natively" below for the Claude-Code defer and the native-adapter fallback.
48
48
 
49
- ## Fulfilling The Deferred Claude Leg Natively (#125)
49
+ ## Fulfilling The Deferred Claude Leg Natively (#125 / #183)
50
50
 
51
- When there is no controlling terminal to drive a Claude TUI, the runtime defers the `claude` leg (`status="UNAVAILABLE"`, empty text — never counted as an AGREE, recorded as a non-gating `panel_leg_degraded` warn). There are TWO deferral cases, and the runtime now distinguishes them with a machine-branchable reason code:
51
+ The runtime defers the `claude` leg (`status="UNAVAILABLE"`, empty text — never counted as an AGREE, recorded as a non-gating `panel_leg_degraded` warn) ONLY when it cannot drive a Claude TUI here. Two machine-branchable reason codes:
52
52
 
53
- - `under_claude_code` — you are running INSIDE a Claude Code session (`CLAUDECODE=1`). The driving Claude Code session supplies the leg as its own native `Task` Agent.
54
- - `native_adapter_required` — a headless / no-tty host such as the **Harness Desktop** tool shell (`CLAUDECODE` unset, stdin/stdout not a tty). The Harness host fulfills the leg through its native sub-agent adapter (`multi_agent_v1.spawn_agent`).
53
+ - `under_claude_code` — you are running INSIDE a Claude Code session (`CLAUDECODE=1`). The driving Claude Code session supplies the leg as its own native `Task` Agent. This is the case the RUNTIME actually defers.
54
+ - `native_adapter_required` — an AFFORDANCE / fallback (#183). On a headless / no-tty host such as the **Harness Desktop** tool shell (`CLAUDECODE` unset, stdin/stdout not a tty) the runtime now RUNS the self-PTY TUI itself, so the leg is NOT deferred by default. Use this path only when the runtime cannot run the TUI (no Claude support on the host) or you PREFER to fulfill the leg through your own native sub-agent adapter (`multi_agent_v1.spawn_agent`).
55
55
 
56
- Do NOT accept the 2-leg board silently. From Harness Desktop, ask the runtime for the structured request instead of parsing the log line, then fulfill it natively:
56
+ Do NOT accept a short board silently. When the leg IS deferred (under Claude Code), or when you deliberately opt into the native-adapter fallback, ask the runtime for the structured request instead of parsing the log line, then fulfill it natively:
57
57
 
58
58
  ```python
59
59
  from phase_loop_runtime.panel_invoker import native_agent_leg_request
60
60
 
61
61
  req = native_agent_leg_request(mode="review") # env defaults to os.environ
62
- # req.reason == "native_adapter_required" on a Harness/no-tty host
62
+ # req.reason == "native_adapter_required" on a non-Claude host (affordance),
63
+ # "under_claude_code" inside a Claude Code session.
63
64
  # spawn a Harness native sub-agent seeded with the SAME review bundle you passed the
64
65
  # board, plus req.instructions (the review brief) and req.verdict_contract, on
65
66
  # req.model (Fable by default). req.to_dict() is JSON for the tool boundary.
@@ -16,7 +16,7 @@ from urllib.request import HTTPRedirectHandler, Request, build_opener
16
16
  import rfc8785
17
17
 
18
18
  from .task_message_broker import decode_strict_json
19
- from .task_message_resolver import APPROVAL_CONTRACT_VERSION, FAILURE_CODES, TaskMessageResolverError
19
+ from .task_message_resolver import APPROVAL_CONTRACT_VERSIONS, FAILURE_CODES, TaskMessageResolverError
20
20
 
21
21
 
22
22
  COMMIT_SHA = re.compile(r"[0-9a-f]{40}")
@@ -256,7 +256,7 @@ class TaskMessageBrokerClient:
256
256
  return False
257
257
  return (
258
258
  isinstance(approval_document, dict)
259
- and approval_document.get("contract_version") == APPROVAL_CONTRACT_VERSION
259
+ and approval_document.get("contract_version") in APPROVAL_CONTRACT_VERSIONS
260
260
  and approval_document.get("authorized") is True
261
261
  and approval_document.get("source_thread_id") == thread_id
262
262
  and approval_document.get("source_message_id") == message_id