phase-loop-runtime 0.7.1__tar.gz → 0.7.3__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 (726) hide show
  1. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/cli.py +69 -0
  5. phase_loop_runtime-0.7.3/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.3}/src/phase_loop_runtime/discovery.py +11 -5
  7. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/events.py +19 -6
  8. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/panel_invoker.py +175 -32
  9. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/ratification.py +8 -6
  10. phase_loop_runtime-0.7.3/src/phase_loop_runtime/roadmap_authority.py +204 -0
  11. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runner.py +7 -8
  12. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +7 -2
  13. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +7 -2
  14. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +8 -7
  15. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +8 -7
  16. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/state.py +2 -0
  17. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/task_message_broker_client.py +18 -7
  18. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/task_message_resolver.py +69 -14
  19. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  20. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/SOURCES.txt +3 -0
  21. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_backing_homebrew.py +2 -2
  22. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_branchgov_preflight.py +37 -12
  23. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_leg_liveness_monitor.py +1 -1
  24. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_invoker_spawn.py +53 -20
  25. phase_loop_runtime-0.7.3/tests/test_panel_native_fill_183.py +327 -0
  26. phase_loop_runtime-0.7.3/tests/test_roadmap_authority.py +490 -0
  27. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_task_message_broker_cli.py +112 -12
  28. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_task_message_resolver.py +126 -1
  29. phase_loop_runtime-0.7.1/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -29
  30. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/MANIFEST.in +0 -0
  31. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/README.md +0 -0
  32. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/protocol/protocol.md +0 -0
  33. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/setup.cfg +0 -0
  34. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  35. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  36. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  37. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  38. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  39. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  40. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  41. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  42. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  43. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  44. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  45. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  46. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  47. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  48. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  49. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  50. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  51. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  52. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  53. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  54. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  55. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  56. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  57. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  58. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  59. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  60. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  61. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  62. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  63. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  64. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  65. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  66. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  67. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  68. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  69. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  70. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  71. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  72. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  73. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  74. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  75. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  76. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  77. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  78. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  79. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  80. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  81. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  82. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  83. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  84. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  85. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  86. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  87. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  88. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  89. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  90. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  91. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  92. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  93. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  94. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  95. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  96. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  97. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  98. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  99. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  100. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  101. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  102. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  103. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  104. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  105. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  106. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  107. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  108. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_modular.py +0 -0
  109. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  110. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  111. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  112. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  113. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  114. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  115. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  116. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  117. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/broker.py +0 -0
  118. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/build_bundle.py +0 -0
  119. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/capability_registry.py +0 -0
  120. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/classifier.py +0 -0
  121. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  122. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  123. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout.py +0 -0
  124. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  125. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  126. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_validation.py +0 -0
  127. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_validators.py +0 -0
  128. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  129. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  130. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  131. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  132. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  133. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  134. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  135. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  136. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  137. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  138. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  139. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  140. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  141. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  142. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  143. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  144. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  145. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  146. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  147. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  148. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  149. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/docs_audit.py +0 -0
  150. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/docs_freshness.py +0 -0
  151. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  152. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/doctor.py +0 -0
  153. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  154. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/events_migration.py +0 -0
  155. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/evidence_audit.py +0 -0
  156. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  157. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/executor_availability.py +0 -0
  158. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/fleet_map.py +0 -0
  159. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  160. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  161. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/gate_posture.py +0 -0
  162. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/git_discipline.py +0 -0
  163. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/git_ops.py +0 -0
  164. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/git_topology.py +0 -0
  165. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/governed_bundle.py +0 -0
  166. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/governed_premerge.py +0 -0
  167. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/governed_review.py +0 -0
  168. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/handoff.py +0 -0
  169. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/handoff_path.py +0 -0
  170. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  171. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/injection.py +0 -0
  172. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/install_status.py +0 -0
  173. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  174. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/launcher.py +0 -0
  175. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/lease_store.py +0 -0
  176. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/maintenance.py +0 -0
  177. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  178. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/models.py +0 -0
  179. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/observability.py +0 -0
  180. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  181. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  182. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  183. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  184. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  185. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  186. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  187. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  188. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/plan_ir.py +0 -0
  189. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/plan_manifest.py +0 -0
  190. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/planner_validation.py +0 -0
  191. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/profiles.py +0 -0
  192. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/prompts.py +0 -0
  193. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/provenance.py +0 -0
  194. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/publishing.py +0 -0
  195. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/py.typed +0 -0
  196. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/ratification_policy.py +0 -0
  197. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/reconcile.py +0 -0
  198. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/redaction.py +0 -0
  199. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/reflection_sync.py +0 -0
  200. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/release_guard.py +0 -0
  201. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/render.py +0 -0
  202. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/repo_validation.py +0 -0
  203. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/review_summary.py +0 -0
  204. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  205. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/route_log.py +0 -0
  206. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  207. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  208. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runtime_paths.py +0 -0
  209. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runtime_projection.py +0 -0
  210. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runtime_resources.py +0 -0
  211. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schema_export.py +0 -0
  212. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  213. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  214. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  215. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_install.py +0 -0
  216. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_inventory.py +0 -0
  217. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_paths.py +0 -0
  218. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  219. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  220. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  221. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  222. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  223. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  224. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  225. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  226. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  227. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  228. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  229. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  230. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  231. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  232. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  233. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  234. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  235. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  236. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  237. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  238. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  239. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  240. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  241. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  242. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  243. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  244. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  245. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  246. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  247. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  248. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  249. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  250. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  251. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  252. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  253. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  254. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  255. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  256. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  257. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  258. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  259. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  260. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  261. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  262. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  263. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  264. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  265. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  266. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  267. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  268. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  269. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  270. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  271. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  272. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  273. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  274. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  275. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  276. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  277. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  278. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  279. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  280. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  281. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  282. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  283. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  284. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  285. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  286. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  287. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  288. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  289. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  290. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  291. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  292. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  293. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  294. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  295. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  296. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  297. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  298. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  299. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  300. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  301. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  302. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  303. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  304. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  305. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  306. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  307. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  308. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  309. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  310. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  311. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  312. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  313. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  314. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  315. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  316. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  317. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  318. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  319. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  320. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  321. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  322. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  323. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  324. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  325. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  326. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  327. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  328. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  329. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  330. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  331. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  332. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  333. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  334. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  335. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  336. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  337. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  338. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  339. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  340. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  341. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  342. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  343. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  344. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  345. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  346. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  347. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  348. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  349. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  350. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  351. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  352. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  353. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  354. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  355. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  356. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  357. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  359. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  361. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  362. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  363. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  364. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  365. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  366. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  367. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  368. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  369. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  370. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  371. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  372. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  373. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  374. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  375. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  376. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  377. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  378. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  379. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  380. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  381. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  382. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  383. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  384. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  385. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  386. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  387. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  388. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  389. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  390. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  391. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  392. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  393. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  394. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  395. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  396. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  397. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  398. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  399. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  400. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  401. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  402. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  403. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/state_degradation.py +0 -0
  404. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/state_ops.py +0 -0
  405. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/task_message_broker.py +0 -0
  406. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/train_ledger.py +0 -0
  407. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/train_roadmap.py +0 -0
  408. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/train_runner.py +0 -0
  409. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/verification_evidence.py +0 -0
  410. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  411. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  412. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/worker_pool.py +0 -0
  413. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/worktree_index.py +0 -0
  414. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  415. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  416. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  417. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  418. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_advisory_mode.py +0 -0
  419. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_alias_install.py +0 -0
  420. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_backcompat.py +0 -0
  421. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_backing_omnigent.py +0 -0
  422. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_cli_legacy.py +0 -0
  423. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_composition.py +0 -0
  424. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_concurrency.py +0 -0
  425. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_config.py +0 -0
  426. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_golden.py +0 -0
  427. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_ingestion.py +0 -0
  428. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_integration.py +0 -0
  429. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_matrix.py +0 -0
  430. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_observability.py +0 -0
  431. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_presets.py +0 -0
  432. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_registries.py +0 -0
  433. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_resolver.py +0 -0
  434. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_schema.py +0 -0
  435. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_twin_alias_legacy.py +0 -0
  436. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_agent_runtime_provider_cs08.py +0 -0
  437. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_autosel.py +0 -0
  438. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_certificate_tier.py +0 -0
  439. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_cli_train_status_45.py +0 -0
  440. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_break_glass_cli.py +0 -0
  441. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_classifier.py +0 -0
  442. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_convergence_fixes.py +0 -0
  443. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_exception_vocab.py +0 -0
  444. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_validator_hook.py +0 -0
  445. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_verification_gate.py +0 -0
  446. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_codex_effort_max_clamp_49.py +0 -0
  447. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_conformance_golden.py +0 -0
  448. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_dual_layout.py +0 -0
  449. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_gates.py +0 -0
  450. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_ingest.py +0 -0
  451. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_scaffold.py +0 -0
  452. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_coordinator_wave_loop.py +0 -0
  453. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_discovery_hygiene_legacy.py +0 -0
  454. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  455. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_helper.py +0 -0
  456. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_reentrancy.py +0 -0
  457. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  458. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_doc_delta_validator.py +0 -0
  459. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_docs_audit.py +0 -0
  460. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_docs_freshness.py +0 -0
  461. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_doctor_bom.py +0 -0
  462. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dotfiles_tree.py +0 -0
  463. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execgov.py +0 -0
  464. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execreg_launch_registry.py +0 -0
  465. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execute_phase_handoff_mode.py +0 -0
  466. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execution_policy_tiering.py +0 -0
  467. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_executor_availability.py +0 -0
  468. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_export_schema.py +0 -0
  469. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_fleet_map.py +0 -0
  470. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_fleet_metrics.py +0 -0
  471. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_fleet_metrics_export.py +0 -0
  472. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_gate_a_wheel_isolation.py +0 -0
  473. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_gate_posture.py +0 -0
  474. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_git_discipline.py +0 -0
  475. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_git_grounded_projection.py +0 -0
  476. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_disjointness_model_first.py +0 -0
  477. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_e2e.py +0 -0
  478. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_gate_crfixes.py +0 -0
  479. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_planning_gate.py +0 -0
  480. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_premerge.py +0 -0
  481. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_premerge_live.py +0 -0
  482. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_review.py +0 -0
  483. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_grokexec.py +0 -0
  484. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_hotfix_lane.py +0 -0
  485. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_injection_skill_failloud.py +0 -0
  486. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_lane_ir_override.py +0 -0
  487. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_launcher_liveness.py +0 -0
  488. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_launchspec_golden.py +0 -0
  489. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_lease_store.py +0 -0
  490. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_lease_store_conformance.py +0 -0
  491. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_ledger_serialization.py +0 -0
  492. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_manifest_per_entry_164.py +0 -0
  493. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_model_class_policy.py +0 -0
  494. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_model_id_source_guard.py +0 -0
  495. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_observability_alerting.py +0 -0
  496. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_advisory.py +0 -0
  497. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_advisory_cli.py +0 -0
  498. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  499. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_authority_boundary.py +0 -0
  500. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_contract_drift.py +0 -0
  501. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_contract_imports.py +0 -0
  502. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_contract_pin.py +0 -0
  503. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_core_api.py +0 -0
  504. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_provenance.py +0 -0
  505. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_ci.py +0 -0
  506. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_cli.py +0 -0
  507. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_output.py +0 -0
  508. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_runtime.py +0 -0
  509. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_redaction.py +0 -0
  510. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_release_surface.py +0 -0
  511. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_schema_validation.py +0 -0
  512. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_vectors.py +0 -0
  513. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_advisory_mode_63.py +0 -0
  514. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_context_refs_114.py +0 -0
  515. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_invoker.py +0 -0
  516. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_invoker_timeout_argv.py +0 -0
  517. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  518. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_per_leg_model_66.py +0 -0
  519. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_streaming_verdicts.py +0 -0
  520. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_tui_eof_48.py +0 -0
  521. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_verdict_summary.py +0 -0
  522. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_parallel_dispatch_backcompat.py +0 -0
  523. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_parallel_dispatch_cli.py +0 -0
  524. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_adoption_bundle.py +0 -0
  525. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  526. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_dependency.py +0 -0
  527. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  528. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_injection.py +0 -0
  529. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_modular.py +0 -0
  530. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  531. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  532. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_schema_export.py +0 -0
  533. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_schema_source.py +0 -0
  534. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  535. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  536. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_build_bundle.py +0 -0
  537. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_classifier.py +0 -0
  538. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  539. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  540. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  541. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  542. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_security.py +0 -0
  543. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  544. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  545. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  546. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_route_selection.py +0 -0
  547. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_cli.py +0 -0
  548. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  549. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_control_only.py +0 -0
  550. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_event.py +0 -0
  551. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  552. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_hardening.py +0 -0
  553. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  554. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_schema.py +0 -0
  555. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_validation.py +0 -0
  556. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_collaborator_citation.py +0 -0
  557. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_collaborator_docs.py +0 -0
  558. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  559. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  560. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  561. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  562. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  563. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_discovery.py +0 -0
  564. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_docs.py +0 -0
  565. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  566. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  567. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  568. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  569. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_portal.py +0 -0
  570. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  571. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_drift_audit.py +0 -0
  572. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  573. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  574. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_events_migration.py +0 -0
  575. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit.py +0 -0
  576. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  577. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  578. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  579. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  580. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_execution_policy.py +0 -0
  581. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_executor_degradation.py +0 -0
  582. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_full_phase_mode.py +0 -0
  583. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_handoff.py +0 -0
  584. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_handoff_migration.py +0 -0
  585. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_init.py +0 -0
  586. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_injection.py +0 -0
  587. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_install_status.py +0 -0
  588. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  589. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_harnesses.py +0 -0
  590. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_ir.py +0 -0
  591. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  592. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_scheduler.py +0 -0
  593. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_launcher.py +0 -0
  594. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_ledger_debug.py +0 -0
  595. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_ledger_dedup.py +0 -0
  596. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_live_adapters.py +0 -0
  597. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_maintenance.py +0 -0
  598. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_metrics.py +0 -0
  599. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_migration_regressions.py +0 -0
  600. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  601. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  602. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  603. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_models.py +0 -0
  604. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_native_flags.py +0 -0
  605. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  606. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pi_executor.py +0 -0
  607. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  608. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  609. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  610. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  611. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  612. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_mode.py +0 -0
  613. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  614. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_plan_manifest.py +0 -0
  615. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  616. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_planner_validation.py +0 -0
  617. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_policy.py +0 -0
  618. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_protocol_contract.py +0 -0
  619. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_provenance.py +0 -0
  620. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile.py +0 -0
  621. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  622. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  623. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  624. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reducers.py +0 -0
  625. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  626. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  627. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  628. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_roadmap_validate.py +0 -0
  629. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_rotation.py +0 -0
  630. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runner.py +0 -0
  631. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  632. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_boundary.py +0 -0
  633. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_decouple.py +0 -0
  634. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_package_data.py +0 -0
  635. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_projection.py +0 -0
  636. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_schema_flow.py +0 -0
  637. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  638. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  639. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_contract.py +0 -0
  640. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  641. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_install.py +0 -0
  642. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  643. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_smoke_blockers.py +0 -0
  644. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  645. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_smoke_reentry.py +0 -0
  646. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  647. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  648. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  649. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_state.py +0 -0
  650. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  651. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  652. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  653. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  654. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  655. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v22_e2e.py +0 -0
  656. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v22_principles.py +0 -0
  657. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  658. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_reconcile.py +0 -0
  659. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_sched.py +0 -0
  660. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_schedharden.py +0 -0
  661. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_wave_runner.py +0 -0
  662. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_work_unit_observability.py +0 -0
  663. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_work_unit_runner.py +0 -0
  664. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_work_unit_state.py +0 -0
  665. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_worktrees.py +0 -0
  666. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  667. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_worktree_executor.py +0 -0
  668. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  669. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  670. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  671. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_flag.py +0 -0
  672. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_markers.py +0 -0
  673. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  674. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  675. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  676. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  677. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  678. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pkg_layout_freeze.py +0 -0
  679. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_plan_ir_iter_waves.py +0 -0
  680. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_preflight_verification.py +0 -0
  681. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_proc_cpu.py +0 -0
  682. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_prune_merged_worktrees_script.py +0 -0
  683. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_publishing.py +0 -0
  684. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pushflow.py +0 -0
  685. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_ratification_policy.py +0 -0
  686. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  687. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_reconcile_verification_log.py +0 -0
  688. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_reflection_sync.py +0 -0
  689. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  690. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_release_pin_autotrack.py +0 -0
  691. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_repo_validation.py +0 -0
  692. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_review_leg_sandbox.py +0 -0
  693. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_review_summary.py +0 -0
  694. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_route_log.py +0 -0
  695. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_route_policy_conformance.py +0 -0
  696. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_routing_invariants.py +0 -0
  697. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_runtime_state_mirror_agreement.py +0 -0
  698. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_sibling_matcher_patterns.py +0 -0
  699. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_bundle_pinned.py +0 -0
  700. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_install_body_expansion.py +0 -0
  701. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_plan_manifest_write.py +0 -0
  702. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_sources_seam.py +0 -0
  703. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skills_bundle_drift.py +0 -0
  704. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skills_canon_parity.py +0 -0
  705. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skills_src_claude_literal_lint.py +0 -0
  706. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_spec_conformance_gate.py +0 -0
  707. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_status_read_only_62.py +0 -0
  708. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  709. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_sync_skills_apply_failloud.py +0 -0
  710. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_task_message_broker.py +0 -0
  711. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_e2e.py +0 -0
  712. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_invariants.py +0 -0
  713. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_merge.py +0 -0
  714. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_order_only_deps_47.py +0 -0
  715. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_roadmap.py +0 -0
  716. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_runner.py +0 -0
  717. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_unattended_release.py +0 -0
  718. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  719. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  720. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_verification_evidence.py +0 -0
  721. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_verification_evidence_validator.py +0 -0
  722. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_visual_evidence_validator.py +0 -0
  723. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_workerpool_failure_isolation.py +0 -0
  724. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_workerpool_parallel.py +0 -0
  725. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_workerpool_worktree_alloc.py +0 -0
  726. {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/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.3
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.3"
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.3"
@@ -18,6 +18,7 @@ from .consiliency_scaffold import ScaffoldError, scaffold
18
18
  from .docs_freshness import scan_docs_freshness
19
19
  from .discovery import AmbiguousRoadmapError, find_plan_artifact, phase_source_bundle_diagnostic, resolve_repo, resolve_suite_command, select_roadmap
20
20
  from .events import append_event, read_events
21
+ from .roadmap_authority import RoadmapAuthorityError, assert_roadmap_authorized
21
22
  from .git_topology import collect_git_topology
22
23
  from .handoff import handoff_metadata, write_tui_handoff
23
24
  from .install_status import build_install_status
@@ -859,6 +860,9 @@ def main(argv: list[str] | None = None) -> int:
859
860
  file=sys.stderr,
860
861
  )
861
862
  return 2
863
+ except RoadmapAuthorityError as exc:
864
+ print(f"phase-loop {command}: roadmap authority refusal — {exc}", file=sys.stderr)
865
+ return 2
862
866
 
863
867
 
864
868
  def _resolve_run_closeout_mode(args: argparse.Namespace, command: str) -> str:
@@ -1046,6 +1050,7 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1046
1050
  _warn_roadmap_validation(select_roadmap(repo, args.roadmap))
1047
1051
  return _evidence_audit_command(repo=repo, args=args, as_json=as_json)
1048
1052
  if command in {"run", "resume", "dry-run"} and bool(getattr(args, "reset_capability", False)):
1053
+ assert_roadmap_authorized(repo, args.roadmap)
1049
1054
  clear_degradation(repo)
1050
1055
 
1051
1056
  if command == "execute":
@@ -1137,6 +1142,7 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1137
1142
  )
1138
1143
  return 0
1139
1144
  if command == "migrate-handoffs":
1145
+ assert_roadmap_authorized(repo, args.roadmap)
1140
1146
  records = migrate_handoffs(repo, apply=bool(getattr(args, "apply", False)))
1141
1147
  if as_json:
1142
1148
  print(records_to_json(records))
@@ -1145,8 +1151,10 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1145
1151
  print(f"{record.status}\t{record.action}\t{record.skill_name}\t{record.source}\t{record.target}")
1146
1152
  return 1 if any(record.action == "blocked" for record in records) else 0
1147
1153
  if command == "migrate-events":
1154
+ assert_roadmap_authorized(repo, args.roadmap)
1148
1155
  return _migrate_events_command(repo=repo, dry_run=bool(args.dry_run), backup_suffix=args.backup_suffix)
1149
1156
  if command == "archive-state":
1157
+ assert_roadmap_authorized(repo, args.roadmap)
1150
1158
  print(render_archive_result(
1151
1159
  archive_state(repo, reason=getattr(args, "reason", None), dry_run=bool(getattr(args, "dry_run", False))),
1152
1160
  as_json=as_json,
@@ -1360,6 +1368,19 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1360
1368
  return _run_returncode(snapshot, results)
1361
1369
 
1362
1370
 
1371
+ def _native_agent_request_json(leg: object) -> dict | None:
1372
+ """Serialize a leg's ``needs_native_agent`` request (ABDNATIVE / #183) to a
1373
+ JSON-safe dict, or ``None`` when the seat is not deferred to a native Agent.
1374
+
1375
+ Structural (``getattr`` + ``to_dict``) so it does not force a ``panel_invoker``
1376
+ import onto the bare CLI path."""
1377
+ request = getattr(leg, "needs_native_agent", None)
1378
+ if request is None:
1379
+ return None
1380
+ to_dict = getattr(request, "to_dict", None)
1381
+ return to_dict() if callable(to_dict) else None
1382
+
1383
+
1363
1384
  def _advisor_board_command(*, args: argparse.Namespace) -> int:
1364
1385
  """LEGACY (CLEANSHIP P7): run the 4-vendor advisor board as the RUNNABLE
1365
1386
  agent-facing default. Composes availability-aware seats via
@@ -1419,10 +1440,43 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1419
1440
  # expected non-OK), the board is below its independence floor → exit nonzero.
1420
1441
  usable = usable_count >= FLOOR_SEATS
1421
1442
  exit_code = 0 if usable else 1
1443
+ # #183 / ABDNATIVE: LOUD requested-vs-delivered shortfall. A floor-satisfying
1444
+ # board can still be SHORT an explicitly-requested seat (the claude/Fable seat
1445
+ # deferred to a native Agent), and a bare `usable:true` masks that. Report
1446
+ # requested (every composed seat), delivered (usable OK+text), and — the
1447
+ # affordance — the seats a native harness can FILL itself (each carries the
1448
+ # typed `needs_native_agent` request). Exit stays floor-based (unchanged): the
1449
+ # shortfall is a REPORTING signal, not a gate flip.
1450
+ # CR F3: derive unfilled seats PER-LEG (`not leg.usable`), never by seat_key
1451
+ # membership. Seats are collision-aware LABELS (schema permits byte-identical
1452
+ # seats with the SAME key), so a key-set difference would let a duplicate key —
1453
+ # one seat OK, its twin failed — hide the failed twin: requested=2/delivered=1
1454
+ # but zero unfilled reported = a silent drop. Per-leg is positional and exact.
1455
+ requested_seats = len(board.seats)
1456
+ unfilled_legs = [leg for leg in result.legs if not leg.usable]
1457
+ fillable_legs = [leg for leg in unfilled_legs if leg.needs_native_agent is not None]
1458
+ shortfall = {
1459
+ "requested_seats": requested_seats,
1460
+ "delivered_seats": usable_count,
1461
+ "unfilled_seats": [
1462
+ {
1463
+ "seat_key": leg.seat_key,
1464
+ "leg": leg.leg,
1465
+ "status": leg.status,
1466
+ "needs_native_agent": _native_agent_request_json(leg),
1467
+ }
1468
+ for leg in unfilled_legs
1469
+ ],
1470
+ "natively_fillable_seats": len(fillable_legs),
1471
+ }
1422
1472
  if bool(getattr(args, "json", False)):
1423
1473
  payload = {
1424
1474
  "board": board.name,
1425
1475
  "usable": usable,
1476
+ # Requested-vs-delivered so a Bash-invoking harness sees a dropped seat.
1477
+ "requested_seats": requested_seats,
1478
+ "delivered_seats": usable_count,
1479
+ "shortfall": shortfall,
1426
1480
  "independence": {
1427
1481
  "level": independence.level,
1428
1482
  "distinct_vendors": independence.distinct_vendors,
@@ -1438,6 +1492,9 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1438
1492
  "status": leg.status,
1439
1493
  "detail": leg.detail,
1440
1494
  "text": leg.text,
1495
+ # ABDNATIVE (#183): a deferred claude/Fable seat carries the
1496
+ # typed native-fill request the harness must run; None otherwise.
1497
+ "needs_native_agent": _native_agent_request_json(leg),
1441
1498
  }
1442
1499
  for leg in result.legs
1443
1500
  ],
@@ -1460,6 +1517,18 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
1460
1517
  # The statuses/verdicts are ADVISORY evidence — the operator reconciles them; a
1461
1518
  # non-OK leg (DEGRADED/UNAVAILABLE/…) is a gap to fill, not a passed review.
1462
1519
  print("advisor-board: verdicts are advisory — reconcile the legs; check each leg status.")
1520
+ # #183: surface the requested-vs-delivered shortfall LOUDLY (stderr) so a
1521
+ # floor-satisfying board is never mistaken for the full requested board, and
1522
+ # name the seats a native harness can fill itself.
1523
+ if unfilled_legs:
1524
+ print(
1525
+ f"advisor-board: delivered {usable_count}/{requested_seats} requested seats — "
1526
+ f"{len(unfilled_legs)} unfilled ({len(fillable_legs)} natively fillable):",
1527
+ file=sys.stderr,
1528
+ )
1529
+ for leg in unfilled_legs:
1530
+ fill = " → run a native Fable Agent to fill this seat" if leg.needs_native_agent else ""
1531
+ print(f"advisor-board: [{leg.status}] {leg.seat_key}{fill}", file=sys.stderr)
1463
1532
  if not usable:
1464
1533
  print(
1465
1534
  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
@@ -39,6 +39,7 @@ from .models import (
39
39
  )
40
40
  from .pipeline_adapter.flag import reconcile_git_reality_enabled
41
41
  from .provenance import phase_sha256, roadmap_sha256
42
+ from .roadmap_authority import active_authorized_roadmap, assert_roadmap_authorized
42
43
  from .runtime_paths import phase_loop_state_read_file
43
44
 
44
45
 
@@ -413,28 +414,33 @@ def select_roadmap(repo: Path, explicit: str | Path | None = None) -> Path:
413
414
  path = Path(explicit).expanduser()
414
415
  if not path.is_absolute():
415
416
  path = repo / path
417
+ authorized = assert_roadmap_authorized(repo, path)
416
418
  if not path.exists():
417
419
  raise FileNotFoundError(f"roadmap not found: {path}")
418
- return path.resolve()
420
+ return authorized
421
+
422
+ authority_roadmap = active_authorized_roadmap(repo)
423
+ if authority_roadmap is not None:
424
+ return authority_roadmap
419
425
 
420
426
  state_roadmap = active_state_roadmap(repo)
421
427
  if state_roadmap is not None:
422
- return state_roadmap
428
+ return assert_roadmap_authorized(repo, state_roadmap)
423
429
 
424
430
  manifest_roadmap = manifest_backed_roadmap(repo)
425
431
  if manifest_roadmap is not None:
426
- return manifest_roadmap
432
+ return assert_roadmap_authorized(repo, manifest_roadmap)
427
433
 
428
434
  handoff = latest_handoff_roadmap(repo_identity(repo), "codex-phase-roadmap-builder")
429
435
  if handoff is not None:
430
- return handoff
436
+ return assert_roadmap_authorized(repo, handoff)
431
437
 
432
438
  candidates = sorted((repo / "specs").glob("phase-plans-v*.md"))
433
439
  if not candidates:
434
440
  raise FileNotFoundError("no specs/phase-plans-v*.md roadmap found")
435
441
  if len(candidates) != 1:
436
442
  raise AmbiguousRoadmapError([c.resolve() for c in candidates])
437
- return candidates[0].resolve()
443
+ return assert_roadmap_authorized(repo, candidates[0])
438
444
 
439
445
 
440
446
  def active_state_roadmap(repo: Path) -> Path | None:
@@ -8,6 +8,7 @@ from pathlib import Path
8
8
  from .closeout import phase_loop_closeout_diagnostic
9
9
  from .git_topology import attach_git_topology, collect_git_topology
10
10
  from .models import LoopEvent, WorkUnitEventMetadata
11
+ from .roadmap_authority import assert_roadmap_authorized
11
12
  from .runtime_paths import ensure_phase_loop_excluded, phase_loop_event_file, phase_loop_event_read_files
12
13
 
13
14
 
@@ -20,16 +21,17 @@ def event_read_paths(repo: Path) -> tuple[Path, ...]:
20
21
 
21
22
 
22
23
  def append_event(repo: Path, event: LoopEvent) -> None:
23
- ensure_phase_loop_excluded(repo)
24
24
  event = _event_with_closeout_metadata(event)
25
25
  event = attach_git_topology(repo, event)
26
- path = event_path(repo)
27
- path.parent.mkdir(parents=True, exist_ok=True)
28
- _append_jsonl(path, event.to_json())
26
+ append_payload(
27
+ repo,
28
+ event.to_json(),
29
+ roadmap=event.roadmap,
30
+ )
29
31
 
30
32
 
31
33
  def append_work_unit_event(repo: Path, event: WorkUnitEventMetadata, *, roadmap: Path | None = None) -> None:
32
- ensure_phase_loop_excluded(repo)
34
+ authorized_roadmap = assert_roadmap_authorized(repo, roadmap)
33
35
  payload = event.to_json()
34
36
  closeout = _extract_work_unit_closeout(payload)
35
37
  if closeout is not None:
@@ -37,7 +39,7 @@ def append_work_unit_event(repo: Path, event: WorkUnitEventMetadata, *, roadmap:
37
39
  payload.update(
38
40
  {
39
41
  "repo": str(repo),
40
- "roadmap": str(roadmap or ""),
42
+ "roadmap": str(roadmap or authorized_roadmap or ""),
41
43
  "phase": event.identity.phase,
42
44
  "action": "work_unit",
43
45
  "status": event.status,
@@ -46,6 +48,17 @@ def append_work_unit_event(repo: Path, event: WorkUnitEventMetadata, *, roadmap:
46
48
  "git_topology": collect_git_topology(repo),
47
49
  }
48
50
  )
51
+ append_payload(repo, payload, roadmap=roadmap or authorized_roadmap)
52
+
53
+
54
+ def append_payload(
55
+ repo: Path,
56
+ payload: dict,
57
+ *,
58
+ roadmap: str | Path | None,
59
+ ) -> None:
60
+ assert_roadmap_authorized(repo, roadmap)
61
+ ensure_phase_loop_excluded(repo)
49
62
  path = event_path(repo)
50
63
  path.parent.mkdir(parents=True, exist_ok=True)
51
64
  _append_jsonl(path, payload)
@@ -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
@@ -6,7 +6,7 @@ from pathlib import Path
6
6
  from typing import Any
7
7
 
8
8
  from ..git_topology import collect_git_topology
9
- from ..runtime_paths import ensure_phase_loop_excluded, phase_loop_event_file
9
+ from ..events import append_payload
10
10
  from ..models import utc_now
11
11
  from .merge_policy import MergePolicy
12
12
 
@@ -21,12 +21,11 @@ def emit_ratification_passed(
21
21
  ratification_gate: str,
22
22
  merge_policy: MergePolicy,
23
23
  audit: dict[str, Any],
24
+ *,
25
+ roadmap_path: Path | None = None,
24
26
  ) -> None:
25
27
  repo = Path(repo_root)
26
28
  payload = _payload(repo, roadmap_version, phase_alias, ratification_gate, merge_policy, audit)
27
- ensure_phase_loop_excluded(repo)
28
- event_path = phase_loop_event_file(repo)
29
- event_path.parent.mkdir(parents=True, exist_ok=True)
30
29
  event = {
31
30
  "timestamp": utc_now(),
32
31
  "repo": str(repo),
@@ -40,8 +39,11 @@ def emit_ratification_passed(
40
39
  "payload": payload,
41
40
  "git_topology": collect_git_topology(repo),
42
41
  }
43
- with event_path.open("a", encoding="utf-8") as handle:
44
- handle.write(json.dumps(event, sort_keys=True) + "\n")
42
+ append_payload(
43
+ repo,
44
+ event,
45
+ roadmap=roadmap_path or repo / "specs" / f"phase-plans-{roadmap_version}.md",
46
+ )
45
47
 
46
48
  trigger = repo / TRIGGER_PATH
47
49
  trigger.parent.mkdir(parents=True, exist_ok=True)