phase-loop-runtime 0.6.0__tar.gz → 0.6.1__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 (682) hide show
  1. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/__init__.py +1 -1
  4. phase_loop_runtime-0.6.1/src/phase_loop_runtime/_proc_cpu.py +57 -0
  5. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/panel_invoker.py +277 -30
  6. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  7. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/SOURCES.txt +3 -0
  8. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_backing_homebrew.py +26 -37
  9. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_golden.py +18 -22
  10. phase_loop_runtime-0.6.1/tests/test_leg_liveness_monitor.py +180 -0
  11. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_advisory_mode_63.py +1 -1
  12. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_context_refs_114.py +8 -4
  13. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_invoker_spawn.py +49 -34
  14. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_invoker_timeout_argv.py +50 -18
  15. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_leg_auth_preflight_64.py +23 -18
  16. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_per_leg_model_66.py +13 -8
  17. phase_loop_runtime-0.6.1/tests/test_proc_cpu.py +45 -0
  18. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/MANIFEST.in +0 -0
  19. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/README.md +0 -0
  20. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/protocol/protocol.md +0 -0
  21. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/setup.cfg +0 -0
  22. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  23. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  24. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  25. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  26. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  27. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  28. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  29. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  30. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  31. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  32. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  33. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  34. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  35. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  36. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  37. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  38. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  39. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  40. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  41. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  42. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  43. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  44. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  45. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  46. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  47. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  48. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  49. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  50. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  51. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  52. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  53. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  54. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  55. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  56. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  57. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  58. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  59. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  60. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  61. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  62. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  63. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  64. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  65. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  66. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  67. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  68. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  69. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  70. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  71. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  72. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  73. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  74. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  75. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  76. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  77. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  78. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  79. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  80. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  81. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  82. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  83. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  84. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  85. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  86. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  87. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  88. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  89. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  90. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  91. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  92. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  93. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  94. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  95. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_modular.py +0 -0
  96. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  97. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  98. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  99. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  100. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  101. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  102. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  103. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  104. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/broker.py +0 -0
  105. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/build_bundle.py +0 -0
  106. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/capability_registry.py +0 -0
  107. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/classifier.py +0 -0
  108. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  109. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  110. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/cli.py +0 -0
  111. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout.py +0 -0
  112. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  113. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  114. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_validation.py +0 -0
  115. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_validators.py +0 -0
  116. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  117. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  118. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  119. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  120. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  121. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  122. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  123. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  124. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  125. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  126. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  127. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  128. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  129. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  130. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  131. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  132. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  133. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  134. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/discovery.py +0 -0
  135. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  136. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  137. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/docs_audit.py +0 -0
  138. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/docs_freshness.py +0 -0
  139. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  140. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  141. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/events.py +0 -0
  142. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/events_migration.py +0 -0
  143. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/evidence_audit.py +0 -0
  144. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  145. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/fleet_map.py +0 -0
  146. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  147. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  148. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/gate_posture.py +0 -0
  149. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/git_discipline.py +0 -0
  150. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/git_ops.py +0 -0
  151. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/git_topology.py +0 -0
  152. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/governed_bundle.py +0 -0
  153. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/governed_premerge.py +0 -0
  154. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/governed_review.py +0 -0
  155. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/handoff.py +0 -0
  156. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/handoff_path.py +0 -0
  157. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/injection.py +0 -0
  158. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/install_status.py +0 -0
  159. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  160. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/launcher.py +0 -0
  161. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/lease_store.py +0 -0
  162. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/maintenance.py +0 -0
  163. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  164. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/models.py +0 -0
  165. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/observability.py +0 -0
  166. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  167. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  168. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  169. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  170. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  171. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  172. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  173. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  174. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  175. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/plan_ir.py +0 -0
  176. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/plan_manifest.py +0 -0
  177. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/planner_validation.py +0 -0
  178. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/profiles.py +0 -0
  179. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/prompts.py +0 -0
  180. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/provenance.py +0 -0
  181. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/publishing.py +0 -0
  182. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/py.typed +0 -0
  183. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/reconcile.py +0 -0
  184. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/redaction.py +0 -0
  185. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/reflection_sync.py +0 -0
  186. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/release_guard.py +0 -0
  187. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/render.py +0 -0
  188. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/repo_validation.py +0 -0
  189. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/review_summary.py +0 -0
  190. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  191. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/route_log.py +0 -0
  192. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  193. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  194. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runner.py +0 -0
  195. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runtime_paths.py +0 -0
  196. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runtime_projection.py +0 -0
  197. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runtime_resources.py +0 -0
  198. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/schema_export.py +0 -0
  199. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  200. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_install.py +0 -0
  201. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_inventory.py +0 -0
  202. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_paths.py +0 -0
  203. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  204. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  205. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  206. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  207. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  208. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  209. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  210. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  211. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  212. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  213. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  214. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  215. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  216. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  217. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  218. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  219. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  220. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  221. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  222. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  223. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  224. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  225. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  226. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  227. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  228. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  229. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  230. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  231. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  232. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  233. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  234. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  235. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  236. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  237. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  238. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  239. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  240. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  241. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  242. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  243. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  244. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  245. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  246. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  247. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  248. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  249. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  250. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  251. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  252. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  253. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  254. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  255. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  256. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  257. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  258. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  259. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  260. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  261. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  262. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  263. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  264. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  265. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  266. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  267. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  268. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  269. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  270. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  271. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  272. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  273. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  274. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  275. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  276. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  277. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  278. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  279. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  280. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  281. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  282. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  283. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  284. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  285. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  286. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  287. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  288. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  289. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  290. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  291. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  292. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  293. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  294. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  295. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  296. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  297. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  298. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  299. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  300. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  301. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  302. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  303. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  304. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  305. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  306. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  307. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  308. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  309. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  310. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  311. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  312. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  313. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  314. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  315. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  316. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  317. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  318. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  319. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  320. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  321. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  322. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  323. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  324. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  325. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  326. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  327. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  328. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  329. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  330. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  331. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  332. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  333. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  334. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  335. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  336. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  337. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  338. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  339. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  340. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  341. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  342. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  343. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  344. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  345. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  346. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  347. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  348. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  349. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  350. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  351. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  352. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  353. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  354. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  355. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  356. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  357. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  358. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  359. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  360. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  361. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  362. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  363. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  364. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  365. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  366. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  367. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  368. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  369. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  370. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  371. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  372. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  373. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  374. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  375. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  376. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  377. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  378. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  379. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  380. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  381. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  382. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  383. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  384. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  385. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  386. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  387. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  388. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  389. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  390. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  391. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  392. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/state.py +0 -0
  393. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/state_degradation.py +0 -0
  394. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/state_ops.py +0 -0
  395. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/train_ledger.py +0 -0
  396. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/train_roadmap.py +0 -0
  397. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/train_runner.py +0 -0
  398. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/verification_evidence.py +0 -0
  399. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  400. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  401. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/worker_pool.py +0 -0
  402. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/worktree_index.py +0 -0
  403. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  404. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  405. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  406. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  407. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_advisory_mode.py +0 -0
  408. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_alias_install.py +0 -0
  409. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_backcompat.py +0 -0
  410. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_backing_omnigent.py +0 -0
  411. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_composition.py +0 -0
  412. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_concurrency.py +0 -0
  413. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_config.py +0 -0
  414. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_ingestion.py +0 -0
  415. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_integration.py +0 -0
  416. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_matrix.py +0 -0
  417. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_observability.py +0 -0
  418. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_presets.py +0 -0
  419. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_registries.py +0 -0
  420. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_resolver.py +0 -0
  421. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_schema.py +0 -0
  422. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_agent_runtime_provider_cs08.py +0 -0
  423. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_branchgov_preflight.py +0 -0
  424. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_certificate_tier.py +0 -0
  425. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_cli_train_status_45.py +0 -0
  426. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_break_glass_cli.py +0 -0
  427. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_classifier.py +0 -0
  428. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_convergence_fixes.py +0 -0
  429. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_exception_vocab.py +0 -0
  430. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_validator_hook.py +0 -0
  431. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_verification_gate.py +0 -0
  432. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_codex_effort_max_clamp_49.py +0 -0
  433. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_dual_layout.py +0 -0
  434. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_gates.py +0 -0
  435. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_ingest.py +0 -0
  436. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_scaffold.py +0 -0
  437. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_coordinator_wave_loop.py +0 -0
  438. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  439. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_dispatch_lock_helper.py +0 -0
  440. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  441. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_doc_delta_validator.py +0 -0
  442. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_docs_audit.py +0 -0
  443. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_docs_freshness.py +0 -0
  444. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_dotfiles_tree.py +0 -0
  445. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_execute_phase_handoff_mode.py +0 -0
  446. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_execution_policy_tiering.py +0 -0
  447. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_export_schema.py +0 -0
  448. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_fleet_map.py +0 -0
  449. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_fleet_metrics.py +0 -0
  450. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_fleet_metrics_export.py +0 -0
  451. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_gate_a_wheel_isolation.py +0 -0
  452. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_gate_posture.py +0 -0
  453. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_git_discipline.py +0 -0
  454. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_git_grounded_projection.py +0 -0
  455. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_disjointness_model_first.py +0 -0
  456. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_e2e.py +0 -0
  457. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_gate_crfixes.py +0 -0
  458. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_planning_gate.py +0 -0
  459. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_premerge.py +0 -0
  460. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_premerge_live.py +0 -0
  461. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_governed_review.py +0 -0
  462. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_hotfix_lane.py +0 -0
  463. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_injection_skill_failloud.py +0 -0
  464. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_lane_ir_override.py +0 -0
  465. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_launcher_liveness.py +0 -0
  466. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_lease_store.py +0 -0
  467. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_lease_store_conformance.py +0 -0
  468. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_ledger_serialization.py +0 -0
  469. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_model_class_policy.py +0 -0
  470. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_model_id_source_guard.py +0 -0
  471. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_observability_alerting.py +0 -0
  472. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_advisory.py +0 -0
  473. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_advisory_cli.py +0 -0
  474. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  475. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_authority_boundary.py +0 -0
  476. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_contract_drift.py +0 -0
  477. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_contract_imports.py +0 -0
  478. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_contract_pin.py +0 -0
  479. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_core_api.py +0 -0
  480. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_provenance.py +0 -0
  481. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_ci.py +0 -0
  482. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_cli.py +0 -0
  483. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_output.py +0 -0
  484. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_runtime.py +0 -0
  485. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_redaction.py +0 -0
  486. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_release_surface.py +0 -0
  487. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_schema_validation.py +0 -0
  488. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_vectors.py +0 -0
  489. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_invoker.py +0 -0
  490. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_tui_eof_48.py +0 -0
  491. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_panel_verdict_summary.py +0 -0
  492. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_parallel_dispatch_backcompat.py +0 -0
  493. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_parallel_dispatch_cli.py +0 -0
  494. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_adoption_bundle.py +0 -0
  495. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  496. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_dependency.py +0 -0
  497. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  498. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_injection.py +0 -0
  499. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_modular.py +0 -0
  500. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  501. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  502. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_schema_export.py +0 -0
  503. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_schema_source.py +0 -0
  504. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  505. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_build_bundle.py +0 -0
  506. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_classifier.py +0 -0
  507. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  508. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  509. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  510. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  511. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_security.py +0 -0
  512. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  513. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  514. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  515. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_route_selection.py +0 -0
  516. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_cli.py +0 -0
  517. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  518. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_control_only.py +0 -0
  519. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_event.py +0 -0
  520. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  521. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_hardening.py +0 -0
  522. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  523. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_schema.py +0 -0
  524. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_validation.py +0 -0
  525. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_collaborator_citation.py +0 -0
  526. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_collaborator_docs.py +0 -0
  527. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  528. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  529. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  530. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  531. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_discovery.py +0 -0
  532. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_docs.py +0 -0
  533. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  534. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  535. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  536. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  537. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_portal.py +0 -0
  538. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  539. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_drift_audit.py +0 -0
  540. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  541. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_events_migration.py +0 -0
  542. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit.py +0 -0
  543. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  544. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  545. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  546. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  547. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_execution_policy.py +0 -0
  548. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_executor_degradation.py +0 -0
  549. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_full_phase_mode.py +0 -0
  550. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_handoff.py +0 -0
  551. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_handoff_migration.py +0 -0
  552. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_init.py +0 -0
  553. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_injection.py +0 -0
  554. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_install_status.py +0 -0
  555. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_harnesses.py +0 -0
  556. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_ir.py +0 -0
  557. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  558. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_scheduler.py +0 -0
  559. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_launcher.py +0 -0
  560. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_ledger_debug.py +0 -0
  561. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_ledger_dedup.py +0 -0
  562. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_live_adapters.py +0 -0
  563. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_maintenance.py +0 -0
  564. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_metrics.py +0 -0
  565. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_migration_regressions.py +0 -0
  566. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  567. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  568. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  569. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_models.py +0 -0
  570. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_native_flags.py +0 -0
  571. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  572. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pi_executor.py +0 -0
  573. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  574. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  575. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  576. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  577. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  578. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_mode.py +0 -0
  579. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  580. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_plan_manifest.py +0 -0
  581. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  582. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_planner_validation.py +0 -0
  583. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_policy.py +0 -0
  584. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_protocol_contract.py +0 -0
  585. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_provenance.py +0 -0
  586. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile.py +0 -0
  587. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  588. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  589. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  590. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reducers.py +0 -0
  591. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  592. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  593. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_roadmap_validate.py +0 -0
  594. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_rotation.py +0 -0
  595. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runner.py +0 -0
  596. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  597. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_boundary.py +0 -0
  598. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_decouple.py +0 -0
  599. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_package_data.py +0 -0
  600. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_projection.py +0 -0
  601. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_schema_flow.py +0 -0
  602. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  603. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  604. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_contract.py +0 -0
  605. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  606. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_install.py +0 -0
  607. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  608. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_smoke_blockers.py +0 -0
  609. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  610. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_smoke_reentry.py +0 -0
  611. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  612. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  613. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  614. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_state.py +0 -0
  615. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  616. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  617. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  618. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  619. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  620. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v22_e2e.py +0 -0
  621. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v22_principles.py +0 -0
  622. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  623. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_reconcile.py +0 -0
  624. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_sched.py +0 -0
  625. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_schedharden.py +0 -0
  626. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_wave_runner.py +0 -0
  627. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_work_unit_observability.py +0 -0
  628. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_work_unit_runner.py +0 -0
  629. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_work_unit_state.py +0 -0
  630. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_worktrees.py +0 -0
  631. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  632. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_phase_worktree_executor.py +0 -0
  633. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  634. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  635. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  636. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_flag.py +0 -0
  637. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_markers.py +0 -0
  638. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  639. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  640. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  641. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  642. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  643. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_pkg_layout_freeze.py +0 -0
  644. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_plan_ir_iter_waves.py +0 -0
  645. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_preflight_verification.py +0 -0
  646. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_prune_merged_worktrees_script.py +0 -0
  647. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_publishing.py +0 -0
  648. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  649. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_reconcile_verification_log.py +0 -0
  650. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_reflection_sync.py +0 -0
  651. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_repo_validation.py +0 -0
  652. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_review_summary.py +0 -0
  653. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_route_log.py +0 -0
  654. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_route_policy_conformance.py +0 -0
  655. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_routing_invariants.py +0 -0
  656. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_runtime_state_mirror_agreement.py +0 -0
  657. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_sibling_matcher_patterns.py +0 -0
  658. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skill_bundle_pinned.py +0 -0
  659. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skill_install_body_expansion.py +0 -0
  660. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skill_plan_manifest_write.py +0 -0
  661. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skill_sources_seam.py +0 -0
  662. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skills_bundle_drift.py +0 -0
  663. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skills_canon_parity.py +0 -0
  664. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_skills_src_claude_literal_lint.py +0 -0
  665. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_spec_conformance_gate.py +0 -0
  666. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  667. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_sync_skills_apply_failloud.py +0 -0
  668. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_train_e2e.py +0 -0
  669. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_train_invariants.py +0 -0
  670. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_train_merge.py +0 -0
  671. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_train_order_only_deps_47.py +0 -0
  672. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_train_roadmap.py +0 -0
  673. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_train_runner.py +0 -0
  674. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  675. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  676. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_verification_evidence.py +0 -0
  677. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_verification_evidence_validator.py +0 -0
  678. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_visual_evidence_validator.py +0 -0
  679. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_workerpool_failure_isolation.py +0 -0
  680. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_workerpool_parallel.py +0 -0
  681. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/tests/test_workerpool_worktree_alloc.py +0 -0
  682. {phase_loop_runtime-0.6.0 → phase_loop_runtime-0.6.1}/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.6.0
3
+ Version: 0.6.1
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.6.0"
7
+ version = "0.6.1"
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.6.0"
21
+ __version__ = "0.6.1"
@@ -0,0 +1,57 @@
1
+ """Process-group CPU sampling for the leg-liveness monitor.
2
+
3
+ A panel leg is launched with ``start_new_session=True``, so its process-group id
4
+ (pgid) equals the leader pid and every descendant it spawns inherits that pgid.
5
+ ``group_cpu_ticks(leader_pid)`` therefore sums CPU (utime+stime) across the whole
6
+ leg — leader and all children — which is the heartbeat signal for a leg that is
7
+ *thinking silently* (codex/grok in print mode emit no incremental stdout, then
8
+ write their ``--output-last-message`` file at the end; a thinking process burns
9
+ CPU, a wedged one does not).
10
+
11
+ Linux-only via ``/proc``. On any other platform (or a missing ``/proc``) it
12
+ returns 0, so the runner degrades to a stdout-only heartbeat — still correct: a
13
+ streaming leg heartbeats on stdout, and a silent-AND-idle leg is genuinely dead.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import os
18
+
19
+
20
+ def _pgrp_and_ticks(pid: int) -> tuple[int, int]:
21
+ """Return ``(process_group_id, utime+stime)`` for ``pid`` from /proc/<pid>/stat.
22
+
23
+ The ``comm`` field (2nd) is wrapped in parens and may itself contain spaces or
24
+ parens, so parse the fixed fields AFTER the last ``)``: from there field 3
25
+ (state) is index 0, so pgrp (field 5) = index 2, utime (14) = index 11, and
26
+ stime (15) = index 12.
27
+ """
28
+ with open(f"/proc/{pid}/stat", encoding="ascii", errors="replace") as fh:
29
+ data = fh.read()
30
+ after = data[data.rfind(")") + 2 :].split()
31
+ pgrp = int(after[2])
32
+ return pgrp, int(after[11]) + int(after[12])
33
+
34
+
35
+ def group_cpu_ticks(leader_pid: int) -> int:
36
+ """Sum CPU ticks (utime+stime) across every process in ``leader_pid``'s group.
37
+
38
+ Returns 0 when ``/proc`` is unavailable (non-Linux) or nothing matches — the
39
+ caller treats 0-delta as "no CPU heartbeat", which combined with the stdout
40
+ heartbeat still catches a genuinely wedged leg and never false-kills a
41
+ streaming one.
42
+ """
43
+ total = 0
44
+ try:
45
+ entries = os.listdir("/proc")
46
+ except OSError:
47
+ return 0
48
+ for entry in entries:
49
+ if not entry.isdigit():
50
+ continue
51
+ try:
52
+ pgrp, ticks = _pgrp_and_ticks(int(entry))
53
+ except (OSError, ValueError, IndexError):
54
+ continue # process exited mid-scan, or an unreadable/odd stat line
55
+ if pgrp == leader_pid:
56
+ total += ticks
57
+ return total
@@ -24,6 +24,7 @@ import sys
24
24
  import tempfile
25
25
  import time
26
26
  import json
27
+ import threading
27
28
  from concurrent.futures import ThreadPoolExecutor
28
29
  from dataclasses import dataclass, field, replace
29
30
  from hashlib import sha256
@@ -55,6 +56,7 @@ from .advisor_board.schema import (
55
56
  Seat,
56
57
  identify_host_leg,
57
58
  )
59
+ from ._proc_cpu import group_cpu_ticks
58
60
  from .advisor_board.validation import validate_seat
59
61
 
60
62
  # Panel legs are vendor identities (one model class per vendor for the panel).
@@ -106,6 +108,20 @@ _DEFAULT_LEG_TIMEOUT_S = _LEG_TIMEOUT_BASE_S
106
108
  _HASH_CHUNK_BYTES = 1 << 20
107
109
  _PDF_SCAN_PREFIX_BYTES = 1 << 21
108
110
  _MAX_LEG_TIMEOUT_S = _LEG_TIMEOUT_MAX_S
111
+ # Leg-liveness monitor: a leg is killed on HEARTBEAT EXTINCTION (no stdout/stderr byte
112
+ # AND no process-group CPU advance for _LEG_STALL_THRESHOLD_S), not on a blind wall-clock.
113
+ # 180s = 2.5x the empirically-measured worst-case healthy silence gap (codex xhigh
114
+ # streams its transcript to stderr with gaps up to ~73s). The wall-clock DEADLINE is a
115
+ # rarely-hit backstop raised to _MAX_LEG_TIMEOUT_S (decoupled from the input-scaled base)
116
+ # — reliable stall detection is exactly what makes that generous backstop safe.
117
+ _LEG_STALL_THRESHOLD_S = 180
118
+ _LEG_LIVENESS_READ_INTERVAL_S = 0.5 # select() slice; also the idle-sleep granularity
119
+ _LEG_LIVENESS_CPU_SAMPLE_S = 5.0 # /proc CPU sampling cadence (secondary reset only)
120
+ # Once the leg LEADER exits but a descendant still holds the stdout/stderr pipe open
121
+ # (an inherited-fd outliver), the leg's real work is done — reclaim the group after a
122
+ # short idle grace instead of burning the full wall-clock backstop. Reset by any late
123
+ # flush, so a still-streaming descendant is never truncated.
124
+ _LEG_POST_EXIT_GRACE_S = 15.0
109
125
  _CLAUDE_CODE_MIN_VERSION = (2, 1, 197)
110
126
  _CLAUDE_CODE_MIN_VERSION_TEXT = "2.1.197"
111
127
  _CLAUDE_AGENT_NAME = "advisor-panel-claude"
@@ -1010,23 +1026,178 @@ def _read_review_output(path: Path) -> str:
1010
1026
  return ""
1011
1027
 
1012
1028
 
1013
- def _terminate_process_group(proc: subprocess.Popen[bytes]) -> None:
1014
- if proc.poll() is not None:
1029
+ def _terminate_process_group(proc: subprocess.Popen[bytes], *, force_group: bool = False) -> None:
1030
+ """Terminate the leg's process group (pgid == proc.pid, launched start_new_session).
1031
+
1032
+ Default: no-op once the leader is reaped — the group is presumed empty and its pgid
1033
+ could be reused, so we must NOT ``killpg`` a possibly-recycled group id.
1034
+
1035
+ ``force_group=True``: the CALLER has just proven a descendant OUTLIVES the reaped
1036
+ leader (an inherited stdout/stderr pipe is still open), so the group is provably
1037
+ alive — reap it directly. Without this, a leader that exits while a child holds the
1038
+ pipe would never be killed and the leg would burn the full wall-clock backstop.
1039
+ """
1040
+ leader_running = proc.poll() is None
1041
+ if not leader_running and not force_group:
1015
1042
  return
1016
1043
  try:
1017
1044
  os.killpg(proc.pid, signal.SIGTERM)
1045
+ except ProcessLookupError:
1046
+ return # group already gone
1018
1047
  except Exception:
1019
1048
  try:
1020
1049
  proc.terminate()
1021
1050
  except Exception:
1022
1051
  pass
1052
+ if leader_running:
1053
+ try:
1054
+ proc.wait(timeout=5)
1055
+ return
1056
+ except subprocess.TimeoutExpired:
1057
+ pass
1058
+ else:
1059
+ time.sleep(0.2) # brief grace for the outliving descendant to handle SIGTERM
1023
1060
  try:
1024
- proc.wait(timeout=5)
1025
- except subprocess.TimeoutExpired:
1061
+ os.killpg(proc.pid, signal.SIGKILL)
1062
+ except Exception:
1026
1063
  try:
1027
- os.killpg(proc.pid, signal.SIGKILL)
1028
- except Exception:
1029
1064
  proc.kill()
1065
+ except Exception:
1066
+ pass
1067
+
1068
+
1069
+ @dataclass
1070
+ class _LegRun:
1071
+ """Result of :func:`_run_leg_with_liveness` — the subset of
1072
+ ``subprocess.CompletedProcess`` (``returncode``/``stdout``/``stderr``) the
1073
+ print-mode leg branches read, so they consume it with no other change."""
1074
+
1075
+ returncode: int
1076
+ stdout: str
1077
+ stderr: str
1078
+
1079
+
1080
+ def _run_leg_with_liveness(
1081
+ cmd: "Sequence[str]",
1082
+ *,
1083
+ cwd: "Path | str",
1084
+ env: Mapping[str, str],
1085
+ deadline_s: float,
1086
+ stall_threshold_s: float = _LEG_STALL_THRESHOLD_S,
1087
+ input_text: str | None = None,
1088
+ ) -> "_LegRun":
1089
+ """Run a print-mode CLI leg, killing it on HEARTBEAT EXTINCTION, not a blind clock.
1090
+
1091
+ Drop-in for the codex/gemini/grok legs' ``subprocess.run(..., timeout=deadline_s)``:
1092
+ returns a :class:`_LegRun` with ``.returncode/.stdout/.stderr`` and RAISES
1093
+ ``subprocess.TimeoutExpired`` when the wall-clock ``deadline_s`` backstop fires, so
1094
+ each caller's existing ``except subprocess.TimeoutExpired -> 124`` path is preserved.
1095
+
1096
+ Heartbeat = any new stdout OR stderr byte (primary; codex streams its transcript to
1097
+ STDERR, grok/agy to STDOUT — so BOTH are watched) OR advancing process-group CPU
1098
+ (secondary, NON-killing reset: it can only extend a leg's life, never false-kill).
1099
+ Silent AND CPU-flat for ``stall_threshold_s`` while still running -> terminate the
1100
+ whole process group + return ``rc or 1`` with a ``[leg-liveness]`` stall marker on
1101
+ stderr (fail-closed; a silent+idle print-mode leg has nothing to nudge). stdin is
1102
+ fed by a daemon writer thread so a large prompt can't deadlock against the child
1103
+ filling its own stdout/stderr pipe buffers.
1104
+ """
1105
+ proc = subprocess.Popen(
1106
+ list(cmd),
1107
+ cwd=str(cwd),
1108
+ env=dict(env),
1109
+ stdin=subprocess.PIPE if input_text is not None else subprocess.DEVNULL,
1110
+ stdout=subprocess.PIPE,
1111
+ stderr=subprocess.PIPE,
1112
+ start_new_session=True, # pgid == proc.pid: group CPU sampling + group kill
1113
+ )
1114
+ if input_text is not None and proc.stdin is not None:
1115
+ def _feed() -> None:
1116
+ try:
1117
+ proc.stdin.write(input_text.encode("utf-8", errors="replace"))
1118
+ proc.stdin.close()
1119
+ except (BrokenPipeError, OSError, ValueError):
1120
+ pass # child exited before consuming stdin — nothing to do
1121
+
1122
+ threading.Thread(target=_feed, daemon=True).start()
1123
+
1124
+ out_buf = bytearray()
1125
+ err_buf = bytearray()
1126
+ fd_map = {proc.stdout.fileno(): out_buf, proc.stderr.fileno(): err_buf}
1127
+ open_fds = set(fd_map)
1128
+ start = time.monotonic()
1129
+ last_heartbeat = start
1130
+ last_cpu_sample = start
1131
+ last_ticks = group_cpu_ticks(proc.pid)
1132
+
1133
+ def _decode() -> tuple[str, str]:
1134
+ return (
1135
+ out_buf.decode("utf-8", errors="replace"),
1136
+ err_buf.decode("utf-8", errors="replace"),
1137
+ )
1138
+
1139
+ try:
1140
+ while True:
1141
+ # (1) wall-clock backstop — should rarely fire once stall detection works.
1142
+ if time.monotonic() - start >= deadline_s:
1143
+ _terminate_process_group(proc)
1144
+ raise subprocess.TimeoutExpired(list(cmd), deadline_s)
1145
+ # (2) drain available output; any byte is a heartbeat.
1146
+ if open_fds:
1147
+ readable, _, _ = select.select(
1148
+ list(open_fds), [], [], _LEG_LIVENESS_READ_INTERVAL_S
1149
+ )
1150
+ else:
1151
+ readable = []
1152
+ time.sleep(_LEG_LIVENESS_READ_INTERVAL_S) # avoid busy-spin when both EOF
1153
+ for fd in readable:
1154
+ try:
1155
+ chunk = os.read(fd, 65536)
1156
+ except OSError:
1157
+ chunk = b""
1158
+ if chunk:
1159
+ fd_map[fd].extend(chunk)
1160
+ last_heartbeat = time.monotonic()
1161
+ else:
1162
+ open_fds.discard(fd) # EOF on this pipe
1163
+ # (3) secondary CPU heartbeat — reset only, never a kill trigger.
1164
+ now = time.monotonic()
1165
+ if now - last_cpu_sample >= _LEG_LIVENESS_CPU_SAMPLE_S:
1166
+ last_cpu_sample = now
1167
+ ticks = group_cpu_ticks(proc.pid)
1168
+ if ticks > last_ticks:
1169
+ last_heartbeat = now
1170
+ last_ticks = ticks
1171
+ # (4) exit handling.
1172
+ exited = proc.poll() is not None
1173
+ if exited:
1174
+ if not open_fds:
1175
+ # clean exit — both pipes drained to EOF.
1176
+ out_s, err_s = _decode()
1177
+ return _LegRun(proc.returncode if proc.returncode is not None else 0, out_s, err_s)
1178
+ # Leader exited but a descendant still holds stdout/stderr open. The leg's
1179
+ # real work is done; reclaim after a short IDLE grace (reset by any late
1180
+ # flush or descendant CPU) instead of burning the wall-clock backstop.
1181
+ # ``open_fds`` non-empty proves the group is still alive, so force the
1182
+ # group kill even though the leader is already reaped.
1183
+ if time.monotonic() - last_heartbeat >= _LEG_POST_EXIT_GRACE_S:
1184
+ _terminate_process_group(proc, force_group=True)
1185
+ out_s, err_s = _decode()
1186
+ return _LegRun(proc.returncode if proc.returncode is not None else 0, out_s, err_s)
1187
+ # (5) stall: silent AND CPU-flat past the threshold while still running.
1188
+ elif time.monotonic() - last_heartbeat >= stall_threshold_s:
1189
+ _terminate_process_group(proc)
1190
+ out_s, err_s = _decode()
1191
+ marker = f"\n[leg-liveness] stalled: no output/CPU for {int(stall_threshold_s)}s"
1192
+ return _LegRun(proc.returncode or 1, out_s, err_s + marker)
1193
+ finally:
1194
+ _terminate_process_group(proc)
1195
+ for pipe in (proc.stdout, proc.stderr):
1196
+ try:
1197
+ if pipe is not None:
1198
+ pipe.close()
1199
+ except OSError:
1200
+ pass
1030
1201
 
1031
1202
 
1032
1203
  def _run_claude_tui_session(
@@ -1038,16 +1209,30 @@ def _run_claude_tui_session(
1038
1209
  timeout_s: int,
1039
1210
  env: Mapping[str, str],
1040
1211
  mode: str = "review",
1212
+ backstop_s: int | None = None,
1041
1213
  ) -> tuple[int, str, str]:
1042
1214
  start_monotonic = time.monotonic()
1043
1215
  start_wall = time.time()
1044
- deadline = start_monotonic + max(1, timeout_s)
1216
+ # Leg-liveness: like the print-mode legs, the claude TUI leg is bounded by heartbeat
1217
+ # extinction, not the input-scaled base. The wall-clock DEADLINE honors an EXPLICIT
1218
+ # caller override (``backstop_s`` supplied by ``_default_spawn``, which knows whether
1219
+ # the per-leg timeout was an explicit override) and otherwise raises the input-scaled
1220
+ # default to the ``_MAX_LEG_TIMEOUT_S`` backstop so a long, actively-streaming review
1221
+ # isn't killed mid-flight; a genuinely wedged TUI is reclaimed by the stall timer.
1222
+ if backstop_s is None:
1223
+ backstop_s = max(1, int(timeout_s), _MAX_LEG_TIMEOUT_S)
1224
+ else:
1225
+ backstop_s = max(1, int(backstop_s))
1226
+ deadline = start_monotonic + backstop_s
1045
1227
  master_fd: int | None = None
1046
1228
  proc: subprocess.Popen[bytes] | None = None
1047
1229
  terminal_bytes = bytearray()
1048
1230
  prompt_sent = False
1049
1231
  next_transcript_check = start_monotonic + _CLAUDE_TUI_TRANSCRIPT_INTERVAL_S
1050
1232
  transcript_salvage = ""
1233
+ last_heartbeat = start_monotonic
1234
+ last_cpu_sample = start_monotonic
1235
+ last_ticks = 0
1051
1236
  try:
1052
1237
  master_fd, slave_fd = pty.openpty()
1053
1238
  try:
@@ -1073,6 +1258,7 @@ def _run_claude_tui_session(
1073
1258
  os.close(master_fd)
1074
1259
  return 1, "", f"claude_tui_launch_error:{type(exc).__name__}"
1075
1260
 
1261
+ last_ticks = group_cpu_ticks(proc.pid)
1076
1262
  try:
1077
1263
  while time.monotonic() < deadline:
1078
1264
  if master_fd is not None:
@@ -1084,6 +1270,7 @@ def _run_claude_tui_session(
1084
1270
  chunk = b""
1085
1271
  if chunk:
1086
1272
  terminal_bytes.extend(chunk)
1273
+ last_heartbeat = time.monotonic() # PTY output = liveness
1087
1274
  else:
1088
1275
  # #48: PTY EOF — the child CLI and ALL its descendants closed
1089
1276
  # the slave side, so no further output can arrive. Without this
@@ -1133,9 +1320,27 @@ def _run_claude_tui_session(
1133
1320
  return 0, review_text, "claude_tui_file_output"
1134
1321
  detail = "claude_tui_missing_canonical_output"
1135
1322
  return proc.returncode or 1, review_text or transcript_text, detail
1323
+ # secondary CPU heartbeat (never a kill; only extends life) + stall reclaim.
1324
+ if now - last_cpu_sample >= _LEG_LIVENESS_CPU_SAMPLE_S:
1325
+ last_cpu_sample = now
1326
+ ticks = group_cpu_ticks(proc.pid)
1327
+ if ticks > last_ticks:
1328
+ last_heartbeat = now
1329
+ last_ticks = ticks
1330
+ # stall: PTY silent AND CPU-flat past the threshold while still running. The
1331
+ # canonical verdict is the review FILE (checked above); nothing to nudge for a
1332
+ # wedged TUI, so fail closed (rc forced non-zero, like the #48/deadline paths).
1333
+ if now - last_heartbeat >= _LEG_STALL_THRESHOLD_S:
1334
+ review_text = _read_review_output(output_file)
1335
+ if _completion_ok(review_text, mode):
1336
+ return 0, review_text, "claude_tui_file_output"
1337
+ transcript_text = transcript_salvage or _latest_claude_transcript_text(
1338
+ str(cwd), since=start_wall
1339
+ )
1340
+ return proc.poll() or 1, review_text or transcript_text, "claude_tui_stalled"
1136
1341
  review_text = _read_review_output(output_file)
1137
1342
  transcript_text = transcript_salvage or _latest_claude_transcript_text(str(cwd), since=start_wall)
1138
- return 124, review_text or transcript_text, f"timeout after {timeout_s}s"
1343
+ return 124, review_text or transcript_text, f"timeout after {backstop_s}s"
1139
1344
  finally:
1140
1345
  if proc is not None:
1141
1346
  _terminate_process_group(proc)
@@ -1226,6 +1431,7 @@ def _exec_claude_tui_leg(
1226
1431
  model: str | None = None,
1227
1432
  effort: str | None = None,
1228
1433
  env: Mapping[str, str] | None = None,
1434
+ backstop_s: int | None = None,
1229
1435
  ) -> tuple[str, str]:
1230
1436
  """Run the Claude panel leg through the local Claude Code TUI.
1231
1437
 
@@ -1268,6 +1474,7 @@ def _exec_claude_tui_leg(
1268
1474
  timeout_s=timeout_s,
1269
1475
  env=env,
1270
1476
  mode=mode,
1477
+ backstop_s=backstop_s,
1271
1478
  )
1272
1479
  return _classify_leg(rc, review_text, log_text, mode), review_text or log_text
1273
1480
 
@@ -1394,6 +1601,22 @@ def _leg_timeout_for(review_dir: Path) -> int:
1394
1601
  return min(_LEG_TIMEOUT_MAX_S, _LEG_TIMEOUT_BASE_S + kb * _LEG_TIMEOUT_PER_KB_S)
1395
1602
 
1396
1603
 
1604
+ def _leg_deadline_from(timeout_s: int | None, review_dir: Path) -> tuple[int, int]:
1605
+ """Return ``(retry_reference_s, hard_deadline_s)`` for a leg.
1606
+
1607
+ An **explicit** caller override (``timeouts_by_leg`` / ``timeout_seconds_by_leg``,
1608
+ surfaced here as a non-``None`` ``timeout_s``) is the HARD deadline, honored as-is —
1609
+ a frozen-contract per-leg bound a governed caller relies on (``{"gemini": 300}`` must
1610
+ kill at 300s, not 1800s). Only the input-scaled DEFAULT (``timeout_s is None``) is
1611
+ raised to the ``_MAX_LEG_TIMEOUT_S`` backstop, so a slow-but-STREAMING leg isn't
1612
+ killed at the 600s floor while stall detection reclaims dead legs long before 1800s.
1613
+ """
1614
+ if timeout_s is None:
1615
+ ref = _leg_timeout_for(review_dir)
1616
+ return ref, max(int(ref), _MAX_LEG_TIMEOUT_S)
1617
+ return int(timeout_s), int(timeout_s)
1618
+
1619
+
1397
1620
  def _exec_leg(
1398
1621
  leg: str,
1399
1622
  review_dir: Path,
@@ -1404,6 +1627,8 @@ def _exec_leg(
1404
1627
  model: str | None = None,
1405
1628
  effort: str | None = None,
1406
1629
  env: Mapping[str, str] | None = None,
1630
+ *,
1631
+ deadline_s: int | None = None,
1407
1632
  ) -> tuple[int, str, str]:
1408
1633
  """Run one CLI leg against the staged review dir; return (rc, review_text, log_text).
1409
1634
 
@@ -1425,7 +1650,17 @@ def _exec_leg(
1425
1650
  authed, auth_detail = _leg_auth_ok(leg, env)
1426
1651
  if not authed:
1427
1652
  return 1, "", auth_detail
1428
- timeout_s = _leg_timeout_for(review_dir) if timeout_s is None else timeout_s
1653
+ # Leg-liveness: ``timeout_s`` stays the fast-vs-slow retry-fraction reference; the
1654
+ # real kill is stall detection inside ``_run_leg_with_liveness``. The wall-clock
1655
+ # DEADLINE honors an EXPLICIT caller override as-is and only raises the input-scaled
1656
+ # DEFAULT to the ``_MAX_LEG_TIMEOUT_S`` backstop (so a slow-but-STREAMING leg isn't
1657
+ # killed at the 600s floor). ``deadline_s`` may be supplied by ``_default_spawn`` —
1658
+ # which alone knows whether the override was explicit; when absent (direct callers /
1659
+ # tests) it is derived here from this call's own ``timeout_s`` None-ness.
1660
+ if deadline_s is None:
1661
+ timeout_s, deadline_s = _leg_deadline_from(timeout_s, review_dir)
1662
+ else:
1663
+ timeout_s = _leg_timeout_for(review_dir) if timeout_s is None else int(timeout_s)
1429
1664
  artifact = _read_review_output(review_dir / "review-bundle.md") if artifact is None else artifact
1430
1665
  prompt = _render_leg_prompt(artifact, review_dir, mode)
1431
1666
  if leg == "codex":
@@ -1454,12 +1689,14 @@ def _exec_leg(
1454
1689
  for _attempt in range(2):
1455
1690
  _t0 = time.monotonic()
1456
1691
  try:
1457
- proc = subprocess.run(
1458
- cmd, cwd=str(review_dir), env=env, capture_output=True, text=True,
1459
- timeout=timeout_s, check=False, input=prompt,
1692
+ # codex streams its transcript to STDERR (stdout is empty until the
1693
+ # final message), so the liveness heartbeat rides stderr. Prompt on
1694
+ # stdin ("-").
1695
+ proc = _run_leg_with_liveness(
1696
+ cmd, cwd=review_dir, env=env, deadline_s=deadline_s, input_text=prompt,
1460
1697
  )
1461
1698
  except subprocess.TimeoutExpired:
1462
- return 124, "", f"timeout after {timeout_s}s"
1699
+ return 124, "", f"timeout after {deadline_s}s"
1463
1700
  _elapsed = time.monotonic() - _t0
1464
1701
  review_text = out_file.read_text(encoding="utf-8") if out_file.exists() else ""
1465
1702
  rc = proc.returncode
@@ -1480,9 +1717,16 @@ def _exec_leg(
1480
1717
  if effort is None
1481
1718
  else render_seat_invocation("gemini", model or "Gemini 3.1 Pro", effort).model
1482
1719
  )
1720
+ # BUGFIX: the prompt MUST be passed inline as the ``-p`` argv value, NOT via
1721
+ # ``-p -`` + ``input=prompt`` on stdin. Empirically ``agy -p -`` IGNORES stdin
1722
+ # and runs an EMPTY prompt (agy prints its "How can I help you today?" greeting,
1723
+ # ~26 bytes), so the gemini leg silently returned a non-review and degraded on
1724
+ # every run. Inline it exactly like the grok leg (`-p prompt`); the prompt is
1725
+ # the small staged-bundle POINTER (files live under --add-dir), so argv length
1726
+ # is bounded.
1483
1727
  cmd = [
1484
1728
  "agy", "--model", gemini_model, "--add-dir", str(review_dir),
1485
- "--print-timeout", f"{timeout_s}s", "-p", "-",
1729
+ "--print-timeout", f"{timeout_s}s", "-p", prompt,
1486
1730
  ]
1487
1731
  # #114: retry ONCE on a transient agy stall, mirroring the codex leg. The
1488
1732
  # single ``subprocess.run`` gave the gemini leg NO retry, so one transient
@@ -1496,17 +1740,14 @@ def _exec_leg(
1496
1740
  for _attempt in range(2):
1497
1741
  _t0 = time.monotonic()
1498
1742
  try:
1499
- # timeout_s is the SOFT per-leg budget; the hard subprocess kill gets a
1500
- # deliberate +60s grace so a leg that is finishing can flush its final
1501
- # output instead of being truncated. The elapsed-fraction retry guard
1502
- # below is measured against this same expanded bound, so worst-case
1503
- # wall-clock stays ~1.5x one budget, never a full double.
1504
- proc = subprocess.run(
1505
- cmd, cwd=str(review_dir), env=env, capture_output=True, text=True,
1506
- timeout=timeout_s + 60, check=False, input=prompt,
1743
+ # agy streams its review to STDOUT; the liveness heartbeat rides stdout
1744
+ # (with a secondary CPU reset covering the ~20s silent "thinking" phase).
1745
+ # Prompt is inline on argv (see the gemini cmd BUGFIX) — no stdin.
1746
+ proc = _run_leg_with_liveness(
1747
+ cmd, cwd=review_dir, env=env, deadline_s=deadline_s,
1507
1748
  )
1508
1749
  except subprocess.TimeoutExpired:
1509
- return 124, "", f"timeout after {timeout_s}s"
1750
+ return 124, "", f"timeout after {deadline_s}s"
1510
1751
  _elapsed = time.monotonic() - _t0
1511
1752
  review_text = proc.stdout or ""
1512
1753
  rc = proc.returncode
@@ -1555,12 +1796,13 @@ def _exec_leg(
1555
1796
  for _attempt in range(2):
1556
1797
  _t0 = time.monotonic()
1557
1798
  try:
1558
- proc = subprocess.run(
1559
- cmd, cwd=str(review_dir), env=env, capture_output=True, text=True,
1560
- timeout=timeout_s + 60, check=False,
1799
+ # grok streams its plain review to STDOUT; heartbeat rides stdout.
1800
+ # Prompt is inline on argv (-p) no stdin.
1801
+ proc = _run_leg_with_liveness(
1802
+ cmd, cwd=review_dir, env=env, deadline_s=deadline_s,
1561
1803
  )
1562
1804
  except subprocess.TimeoutExpired:
1563
- return 124, "", f"timeout after {timeout_s}s"
1805
+ return 124, "", f"timeout after {deadline_s}s"
1564
1806
  _elapsed = time.monotonic() - _t0
1565
1807
  review_text = proc.stdout or ""
1566
1808
  rc = proc.returncode
@@ -1624,8 +1866,11 @@ def _default_spawn(
1624
1866
  _resolve_brief(mode, brief_ref), encoding="utf-8"
1625
1867
  )
1626
1868
  # ``timeout_s is None`` ⇒ today's input-scaled timeout (golden-neutral); an
1627
- # explicit override bounds the leg.
1628
- leg_timeout = _leg_timeout_for(review_dir) if timeout_s is None else int(timeout_s)
1869
+ # explicit override bounds the leg. This is the ONE place that knows whether the
1870
+ # override was explicit, so resolve BOTH the retry reference and the hard deadline
1871
+ # here and thread the deadline down (an explicit override is honored as-is; only
1872
+ # the input-scaled default is raised to the _MAX backstop).
1873
+ leg_timeout, leg_deadline = _leg_deadline_from(timeout_s, review_dir)
1629
1874
  # ABDHOME: forward effort/env ONLY when set so the legacy (effort/env-absent)
1630
1875
  # path calls the leg execs with their exact prior signatures — existing
1631
1876
  # tests monkeypatch ``_exec_leg`` with a fixed arg list and must keep passing.
@@ -1643,10 +1888,12 @@ def _default_spawn(
1643
1888
  repo_dir=resolved_repo_dir,
1644
1889
  mode=mode,
1645
1890
  model=model,
1891
+ backstop_s=leg_deadline,
1646
1892
  **extra,
1647
1893
  )
1648
1894
  rc, review_text, log_text = _exec_leg(
1649
- leg, review_dir, out_dir, leg_timeout, artifact, mode, model, **extra
1895
+ leg, review_dir, out_dir, leg_timeout, artifact, mode, model,
1896
+ deadline_s=leg_deadline, **extra,
1650
1897
  )
1651
1898
  return _classify_leg(rc, review_text, log_text, mode), review_text
1652
1899
  except Exception as exc: # fail-closed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.0
@@ -3,6 +3,7 @@ README.md
3
3
  pyproject.toml
4
4
  protocol/protocol.md
5
5
  src/phase_loop_runtime/__init__.py
6
+ src/phase_loop_runtime/_proc_cpu.py
6
7
  src/phase_loop_runtime/adoption_bundle.py
7
8
  src/phase_loop_runtime/agent_runtime_provider.py
8
9
  src/phase_loop_runtime/baml_modular.py
@@ -455,6 +456,7 @@ tests/test_launcher_liveness.py
455
456
  tests/test_lease_store.py
456
457
  tests/test_lease_store_conformance.py
457
458
  tests/test_ledger_serialization.py
459
+ tests/test_leg_liveness_monitor.py
458
460
  tests/test_model_class_policy.py
459
461
  tests/test_model_id_source_guard.py
460
462
  tests/test_observability_alerting.py
@@ -638,6 +640,7 @@ tests/test_pipeline_adapter_standalone_regression.py
638
640
  tests/test_pkg_layout_freeze.py
639
641
  tests/test_plan_ir_iter_waves.py
640
642
  tests/test_preflight_verification.py
643
+ tests/test_proc_cpu.py
641
644
  tests/test_prune_merged_worktrees_script.py
642
645
  tests/test_publishing.py
643
646
  tests/test_reconcile_manifest_dedup_46.py