phase-loop-runtime 0.7.17__tar.gz → 0.7.19__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 (966) hide show
  1. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/PKG-INFO +2 -2
  2. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/README.md +1 -1
  3. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/pyproject.toml +2 -1
  4. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +67 -0
  6. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +2 -2
  7. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/cli.py +101 -8
  8. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_classifier.py +20 -0
  9. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gemini_heartbeat.py +2 -2
  10. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_review.py +57 -1
  11. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/panel_invoker.py +369 -25
  12. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  13. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +50 -18
  14. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +48 -16
  15. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +48 -16
  16. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +48 -16
  17. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_ledger.py +4 -1
  18. phase_loop_runtime-0.7.19/src/phase_loop_runtime/train_review_packet.py +862 -0
  19. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_runner.py +393 -268
  20. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/PKG-INFO +2 -2
  21. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/SOURCES.txt +9 -0
  22. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_golden.py +17 -0
  23. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_chronology_scope.py +168 -24
  24. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_offload_lock.py +21 -6
  25. phase_loop_runtime-0.7.19/tests/test_ci_quarantine.py +299 -0
  26. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_classifier.py +34 -0
  27. phase_loop_runtime-0.7.19/tests/test_execfind_falsifier.py +777 -0
  28. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_activation_promotion.py +35 -13
  29. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_delta_consumer.py +73 -54
  30. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_flag_off_recovery_leak_299.py +15 -10
  31. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gemini_heartbeat_bootstrap.py +187 -10
  32. phase_loop_runtime-0.7.19/tests/test_governed_review.py +642 -0
  33. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_legible_roadmap_contract.py +6 -6
  34. phase_loop_runtime-0.7.19/tests/test_local_check.py +210 -0
  35. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_model_tier_taxonomy.py +7 -2
  36. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_native_claude_seat_fill.py +5 -0
  37. phase_loop_runtime-0.7.19/tests/test_panel_claude_review_output.py +775 -0
  38. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_workspace_trust_223.py +59 -0
  39. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_roadmap_validate.py +213 -2
  40. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_president_heartbeat_1001.py +188 -0
  41. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_president_ladder_config.py +2 -0
  42. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_presroute_hardening.py +162 -0
  43. phase_loop_runtime-0.7.19/tests/test_qualify_network_owner.py +169 -0
  44. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_monitor_policy.py +198 -12
  45. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_e2e.py +7 -0
  46. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_invariants.py +6 -1
  47. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_merge.py +24 -21
  48. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_prebuilt.py +81 -0
  49. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_review_authorization.py +9 -1
  50. phase_loop_runtime-0.7.19/tests/test_train_review_monitoring_policy.py +367 -0
  51. phase_loop_runtime-0.7.19/tests/test_train_review_packet.py +2597 -0
  52. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_runner.py +14 -6
  53. phase_loop_runtime-0.7.19/tests/test_verify_qualified_agy_route_core.py +218 -0
  54. phase_loop_runtime-0.7.17/tests/test_governed_review.py +0 -212
  55. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/MANIFEST.in +0 -0
  56. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/protocol/protocol.md +0 -0
  57. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/setup.cfg +0 -0
  58. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  59. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  60. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  61. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  62. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  63. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  64. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  65. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  66. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  67. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  68. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  69. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  70. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  71. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  72. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  73. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  74. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  75. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  76. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  77. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  78. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  79. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  80. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  81. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  82. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  83. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  84. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  85. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  86. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  87. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  88. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  89. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  90. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  91. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  92. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  93. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  94. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  95. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  96. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  97. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  98. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  99. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  100. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  101. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  102. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  103. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  104. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  105. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  106. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  107. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  108. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  109. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  110. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  111. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  112. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  113. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  114. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  115. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  116. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  117. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  118. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  119. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  120. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  121. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  122. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  123. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  124. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  125. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  126. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  127. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  128. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  129. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  130. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  131. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
  132. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_modular.py +0 -0
  133. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  134. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  135. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  136. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  137. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  138. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  139. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  140. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  141. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/broker.py +0 -0
  142. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/build_bundle.py +0 -0
  143. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/capability_registry.py +0 -0
  144. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/classifier.py +0 -0
  145. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  146. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  147. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout.py +0 -0
  148. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  149. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_validation.py +0 -0
  150. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_validators.py +0 -0
  151. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  152. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  153. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  154. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  155. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  156. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  157. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  158. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  159. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  160. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  161. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  162. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  163. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  164. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  165. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  166. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  167. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  168. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  169. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  170. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  171. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  172. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  173. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  174. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  175. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  176. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  177. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  178. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  179. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  180. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  181. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  182. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  183. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  184. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  185. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  186. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  187. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  188. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  189. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  190. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  191. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  192. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  193. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  194. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  195. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
  196. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  197. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  198. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  199. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  200. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  201. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  202. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  203. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  204. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/status.py +0 -0
  205. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  206. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/declared_identity.py +0 -0
  207. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  208. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  209. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/discovery.py +0 -0
  210. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  211. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  212. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_audit.py +0 -0
  213. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_freshness.py +0 -0
  214. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  215. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/doctor.py +0 -0
  216. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  217. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  218. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/events.py +0 -0
  219. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/events_migration.py +0 -0
  220. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/evidence_audit.py +0 -0
  221. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  222. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/executor_availability.py +0 -0
  223. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_canonical.py +0 -0
  224. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_delta.py +0 -0
  225. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_gate.py +0 -0
  226. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_producer.py +0 -0
  227. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_provenance.py +0 -0
  228. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  229. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  230. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  231. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_map.py +0 -0
  232. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  233. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  234. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gate_posture.py +0 -0
  235. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_discipline.py +0 -0
  236. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_ops.py +0 -0
  237. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_topology.py +0 -0
  238. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/goal_coverage.py +0 -0
  239. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_bundle.py +0 -0
  240. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_premerge.py +0 -0
  241. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/handoff.py +0 -0
  242. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/handoff_path.py +0 -0
  243. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  244. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/injection.py +0 -0
  245. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/install_status.py +0 -0
  246. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  247. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/launcher.py +0 -0
  248. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/lease_store.py +0 -0
  249. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/legible_evidence.py +0 -0
  250. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/maintenance.py +0 -0
  251. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  252. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/models.py +0 -0
  253. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/observability.py +0 -0
  254. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  255. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  256. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  257. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  258. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  259. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  260. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  261. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  262. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  263. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_ir.py +0 -0
  264. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_manifest.py +0 -0
  265. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  266. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/planner_validation.py +0 -0
  267. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/president_adapter.py +0 -0
  268. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/president_operation.py +0 -0
  269. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/producer_manifest.py +0 -0
  270. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/profiles.py +0 -0
  271. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/prompts.py +0 -0
  272. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/proof_stages.py +0 -0
  273. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/provenance.py +0 -0
  274. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/publishing.py +0 -0
  275. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/py.typed +0 -0
  276. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/ratification_policy.py +0 -0
  277. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reconcile.py +0 -0
  278. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/redaction.py +0 -0
  279. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reflection_sync.py +0 -0
  280. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/release_guard.py +0 -0
  281. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/render.py +0 -0
  282. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/repo_validation.py +0 -0
  283. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/review_stage.py +0 -0
  284. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/review_summary.py +0 -0
  285. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  286. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  287. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  288. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  289. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  290. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  291. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_log.py +0 -0
  292. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  293. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  294. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runner.py +0 -0
  295. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_paths.py +0 -0
  296. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_projection.py +0 -0
  297. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_resources.py +0 -0
  298. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_egress.py +0 -0
  299. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_policy.py +0 -0
  300. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_retention.py +0 -0
  301. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schema_export.py +0 -0
  302. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  303. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  304. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  305. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_install.py +0 -0
  306. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_inventory.py +0 -0
  307. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_paths.py +0 -0
  308. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  309. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  310. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  311. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  312. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  313. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  314. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  315. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  316. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  317. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  318. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  319. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  320. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  321. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  322. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  323. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  324. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  325. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  326. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  327. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  328. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  329. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  330. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  331. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  332. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  333. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  334. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  335. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  336. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  337. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  338. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  339. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  340. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  341. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  342. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  343. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  344. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  345. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  346. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  347. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  348. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  349. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  350. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  351. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  352. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  353. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  354. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  355. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  356. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  357. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  358. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  359. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  360. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  361. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  362. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  364. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  365. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  366. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  367. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  368. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  369. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  370. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  371. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  372. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  373. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  374. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  375. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  376. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  377. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  378. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  379. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  380. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  381. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  382. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  383. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  384. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  385. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  386. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  387. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  388. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  389. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  390. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  391. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  392. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  393. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  394. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  395. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  396. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  397. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  398. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  399. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  400. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  401. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  402. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  403. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  404. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  405. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  406. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  407. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  408. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  409. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  410. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  411. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  412. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  413. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  414. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  415. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  416. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  417. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  418. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  419. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  420. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  421. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  422. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  423. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  424. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  425. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  426. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  427. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  428. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  429. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  430. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  431. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  432. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  433. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  434. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  435. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  436. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  437. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  438. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  439. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  440. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  441. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  442. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  443. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  444. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  445. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  446. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  447. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  448. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  449. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  450. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  451. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  452. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  453. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  454. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  455. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  456. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  457. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  458. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  459. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  460. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  461. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  462. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  463. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  464. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  465. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  466. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  467. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  468. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  469. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  470. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  471. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  472. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  473. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  474. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  475. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  476. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  477. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  478. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  479. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  480. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  481. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  482. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  483. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  484. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  485. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  486. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  487. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  488. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  489. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  490. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  491. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  492. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  493. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state.py +0 -0
  494. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state_degradation.py +0 -0
  495. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state_ops.py +0 -0
  496. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_broker.py +0 -0
  497. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  498. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  499. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  500. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_roadmap.py +0 -0
  501. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/verification_evidence.py +0 -0
  502. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  503. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  504. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  505. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/worker_pool.py +0 -0
  506. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/worktree_index.py +0 -0
  507. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  508. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  509. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  510. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  511. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_acceptance_falsifier_contract.py +0 -0
  512. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_advisory_mode.py +0 -0
  513. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_alias_install.py +0 -0
  514. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backcompat.py +0 -0
  515. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backing_homebrew.py +0 -0
  516. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backing_omnigent.py +0 -0
  517. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_cli_legacy.py +0 -0
  518. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_composition.py +0 -0
  519. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_concurrency.py +0 -0
  520. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_config.py +0 -0
  521. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_ingestion.py +0 -0
  522. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_integration.py +0 -0
  523. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_live_research.py +0 -0
  524. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_matrix.py +0 -0
  525. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_observability.py +0 -0
  526. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_presets.py +0 -0
  527. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_registries.py +0 -0
  528. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_research.py +0 -0
  529. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_resolver.py +0 -0
  530. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_schema.py +0 -0
  531. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_static_import_862.py +0 -0
  532. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_twin_alias_legacy.py +0 -0
  533. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_agent_runtime_provider_cs08.py +0 -0
  534. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_agy_canary_evidence.py +0 -0
  535. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_autosel.py +0 -0
  536. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_branchgov_preflight.py +0 -0
  537. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_broker_command_builders.py +0 -0
  538. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  539. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_broker_staged_tree_delivery.py +0 -0
  540. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_certificate_tier.py +0 -0
  541. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_gate_metrics.py +0 -0
  542. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_main_red.py +0 -0
  543. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_workflow_concurrency.py +0 -0
  544. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_xdist_adoption.py +0 -0
  545. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_xdist_witness.py +0 -0
  546. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  547. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_cli_train_status_45.py +0 -0
  548. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_break_glass_cli.py +0 -0
  549. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_convergence_fixes.py +0 -0
  550. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_exception_vocab.py +0 -0
  551. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  552. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_import_cycle_819.py +0 -0
  553. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  554. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_validator_hook.py +0 -0
  555. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_verification_gate.py +0 -0
  556. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_codex_effort_max_clamp_49.py +0 -0
  557. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_committed_range_diff.py +0 -0
  558. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_common_directory_leases_807.py +0 -0
  559. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_conform_timing_instrumentation.py +0 -0
  560. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_conformance_golden.py +0 -0
  561. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_conftest_isolation.py +0 -0
  562. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_dual_layout.py +0 -0
  563. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_gates.py +0 -0
  564. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_ingest.py +0 -0
  565. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_scaffold.py +0 -0
  566. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_console_scripts_are_declared.py +0 -0
  567. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_contract_floor_guard_378.py +0 -0
  568. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_adapters.py +0 -0
  569. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_admission.py +0 -0
  570. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_api.py +0 -0
  571. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_credsep.py +0 -0
  572. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_evidence.py +0 -0
  573. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_revocation_race.py +0 -0
  574. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_verbs.py +0 -0
  575. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_cli_integration.py +0 -0
  576. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_coordination_contracts.py +0 -0
  577. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_dispatch.py +0 -0
  578. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_event_contracts.py +0 -0
  579. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_event_log.py +0 -0
  580. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_fencing.py +0 -0
  581. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_fixture_contracts.py +0 -0
  582. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_invalidation.py +0 -0
  583. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_live_enable.py +0 -0
  584. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_provider_contracts.py +0 -0
  585. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_reconcile.py +0 -0
  586. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_refresh.py +0 -0
  587. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_runtime_imports.py +0 -0
  588. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_seat_lifecycle.py +0 -0
  589. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_status.py +0 -0
  590. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_train_integration.py +0 -0
  591. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_coordinator_wave_loop.py +0 -0
  592. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_cr_fixes_pr220.py +0 -0
  593. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_delegated_visual_evidence_91.py +0 -0
  594. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_discovery_hygiene_legacy.py +0 -0
  595. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_hold_guard.py +0 -0
  596. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  597. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_helper.py +0 -0
  598. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_reentrancy.py +0 -0
  599. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  600. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_doc_delta_validator.py +0 -0
  601. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_docs_audit.py +0 -0
  602. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_docs_freshness.py +0 -0
  603. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_doctor_bom.py +0 -0
  604. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dotfiles_tree.py +0 -0
  605. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
  606. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_entry_doc_check.py +0 -0
  607. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execgov.py +0 -0
  608. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execreg_launch_registry.py +0 -0
  609. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execute_phase_handoff_mode.py +0 -0
  610. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execution_policy_tiering.py +0 -0
  611. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_executor_availability.py +0 -0
  612. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_executor_exited_without_closeout_785.py +0 -0
  613. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_export_schema.py +0 -0
  614. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_canonical_b.py +0 -0
  615. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_closeout_crash_safety.py +0 -0
  616. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_closeout_wiring.py +0 -0
  617. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_delta_c.py +0 -0
  618. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_gate_d.py +0 -0
  619. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_producer.py +0 -0
  620. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_provenance_a.py +0 -0
  621. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_admission_compat_789.py +0 -0
  622. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  623. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_partition_rotation_789d.py +0 -0
  624. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_recovery_controls_789.py +0 -0
  625. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  626. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_shared_epoch.py +0 -0
  627. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
  628. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  629. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabreadmit_broker.py +0 -0
  630. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fleet_map.py +0 -0
  631. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fleet_metrics.py +0 -0
  632. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fleet_metrics_export.py +0 -0
  633. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_frozen_blob_batch_parse.py +0 -0
  634. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_a_wheel_isolation.py +0 -0
  635. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_fail_open_visibility.py +0 -0
  636. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_parity_244_245.py +0 -0
  637. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_posture.py +0 -0
  638. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_git_discipline.py +0 -0
  639. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_git_grounded_projection.py +0 -0
  640. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_goal_coverage.py +0 -0
  641. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  642. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_disjointness_model_first.py +0 -0
  643. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_e2e.py +0 -0
  644. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_gate_crfixes.py +0 -0
  645. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_planning_gate.py +0 -0
  646. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_premerge.py +0 -0
  647. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_premerge_live.py +0 -0
  648. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_declared_identity.py +0 -0
  649. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_panel_policy.py +0 -0
  650. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  651. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_plan_pin_lint.py +0 -0
  652. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_producer_manifest.py +0 -0
  653. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_proof_stages.py +0 -0
  654. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_roadmap_reseal.py +0 -0
  655. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_skill_policy_parity.py +0 -0
  656. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_tdd_receipts.py +0 -0
  657. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_grok_narrow_reject_231.py +0 -0
  658. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_grokexec.py +0 -0
  659. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_harden_evidence_producer.py +0 -0
  660. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_harden_evidence_verifier.py +0 -0
  661. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_harden_json_depth_825.py +0 -0
  662. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_hotfix_lane.py +0 -0
  663. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_injection_skill_failloud.py +0 -0
  664. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_lane_ir_override.py +0 -0
  665. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_launcher_liveness.py +0 -0
  666. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_launchspec_golden.py +0 -0
  667. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_lease_store.py +0 -0
  668. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_lease_store_conformance.py +0 -0
  669. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ledger_serialization.py +0 -0
  670. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_leg_liveness_monitor.py +0 -0
  671. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_legible_evidence.py +0 -0
  672. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_legible_review_repairs.py +0 -0
  673. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_live_smoke_gate_executes.py +0 -0
  674. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_manifest_per_entry_164.py +0 -0
  675. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_model_class_policy.py +0 -0
  676. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_model_id_source_guard.py +0 -0
  677. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_native_claude_seat_fill_green.py +0 -0
  678. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  679. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_observability_alerting.py +0 -0
  680. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory.py +0 -0
  681. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory_cli.py +0 -0
  682. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  683. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_authority_boundary.py +0 -0
  684. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_canonical_corpus.py +0 -0
  685. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_conform_evidence.py +0 -0
  686. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_drift.py +0 -0
  687. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_imports.py +0 -0
  688. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_pin.py +0 -0
  689. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_core_api.py +0 -0
  690. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_provenance.py +0 -0
  691. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_ci.py +0 -0
  692. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_cli.py +0 -0
  693. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_output.py +0 -0
  694. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_runtime.py +0 -0
  695. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_redaction.py +0 -0
  696. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_redaction_separation.py +0 -0
  697. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_release_surface.py +0 -0
  698. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_schema_validation.py +0 -0
  699. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_vectors.py +0 -0
  700. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_owned_command_procfs_1003.py +0 -0
  701. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_packaged_vector_manifest_pin.py +0 -0
  702. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_advisory_mode_63.py +0 -0
  703. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  704. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_context_refs_114.py +0 -0
  705. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  706. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker.py +0 -0
  707. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_spawn.py +0 -0
  708. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_timeout_argv.py +0 -0
  709. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_windows_import.py +0 -0
  710. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  711. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  712. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_native_fill_183.py +0 -0
  713. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_per_leg_model_66.py +0 -0
  714. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_streaming_verdicts.py +0 -0
  715. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_eof_48.py +0 -0
  716. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_liveness_188.py +0 -0
  717. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_verdict_summary.py +0 -0
  718. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_parallel_dispatch_backcompat.py +0 -0
  719. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_parallel_dispatch_cli.py +0 -0
  720. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_adoption_bundle.py +0 -0
  721. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  722. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_dependency.py +0 -0
  723. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  724. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_injection.py +0 -0
  725. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_modular.py +0 -0
  726. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  727. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  728. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_schema_export.py +0 -0
  729. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_schema_source.py +0 -0
  730. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  731. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  732. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_build_bundle.py +0 -0
  733. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_classifier.py +0 -0
  734. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  735. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  736. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  737. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  738. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_security.py +0 -0
  739. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  740. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  741. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  742. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_route_selection.py +0 -0
  743. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_cli.py +0 -0
  744. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  745. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_control_only.py +0 -0
  746. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_event.py +0 -0
  747. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  748. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_hardening.py +0 -0
  749. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  750. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_schema.py +0 -0
  751. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_validation.py +0 -0
  752. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_citation.py +0 -0
  753. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_docs.py +0 -0
  754. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  755. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  756. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  757. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  758. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  759. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_discovery.py +0 -0
  760. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_docs.py +0 -0
  761. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  762. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  763. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  764. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  765. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_portal.py +0 -0
  766. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  767. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_drift_audit.py +0 -0
  768. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  769. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  770. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_events_migration.py +0 -0
  771. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit.py +0 -0
  772. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  773. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  774. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  775. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  776. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_execution_policy.py +0 -0
  777. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_executor_degradation.py +0 -0
  778. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_full_phase_mode.py +0 -0
  779. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_handoff.py +0 -0
  780. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_handoff_migration.py +0 -0
  781. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_init.py +0 -0
  782. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_injection.py +0 -0
  783. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_install_status.py +0 -0
  784. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  785. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_harnesses.py +0 -0
  786. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_ir.py +0 -0
  787. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  788. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_scheduler.py +0 -0
  789. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_launcher.py +0 -0
  790. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_ledger_debug.py +0 -0
  791. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_ledger_dedup.py +0 -0
  792. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_live_adapters.py +0 -0
  793. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_maintenance.py +0 -0
  794. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_metrics.py +0 -0
  795. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_migration_regressions.py +0 -0
  796. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  797. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  798. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  799. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_models.py +0 -0
  800. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_native_flags.py +0 -0
  801. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  802. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pi_executor.py +0 -0
  803. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  804. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  805. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  806. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  807. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  808. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_mode.py +0 -0
  809. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  810. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_plan_manifest.py +0 -0
  811. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  812. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_planner_validation.py +0 -0
  813. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_policy.py +0 -0
  814. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_protocol_contract.py +0 -0
  815. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_provenance.py +0 -0
  816. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile.py +0 -0
  817. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  818. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  819. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  820. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reducers.py +0 -0
  821. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  822. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  823. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  824. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_rotation.py +0 -0
  825. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runner.py +0 -0
  826. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  827. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_boundary.py +0 -0
  828. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_decouple.py +0 -0
  829. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_package_data.py +0 -0
  830. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_projection.py +0 -0
  831. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_schema_flow.py +0 -0
  832. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  833. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  834. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_contract.py +0 -0
  835. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  836. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_install.py +0 -0
  837. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  838. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_blockers.py +0 -0
  839. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  840. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_reentry.py +0 -0
  841. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  842. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  843. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  844. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_state.py +0 -0
  845. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  846. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  847. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  848. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  849. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  850. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v22_e2e.py +0 -0
  851. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v22_principles.py +0 -0
  852. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  853. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_reconcile.py +0 -0
  854. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_sched.py +0 -0
  855. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_schedharden.py +0 -0
  856. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_wave_runner.py +0 -0
  857. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_observability.py +0 -0
  858. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_runner.py +0 -0
  859. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_state.py +0 -0
  860. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_worktrees.py +0 -0
  861. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  862. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_state_disagreement_312.py +0 -0
  863. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_worktree_executor.py +0 -0
  864. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  865. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  866. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  867. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_flag.py +0 -0
  868. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_markers.py +0 -0
  869. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  870. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  871. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  872. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  873. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  874. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pkg_layout_freeze.py +0 -0
  875. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_plan_ir_iter_waves.py +0 -0
  876. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pr_readback_789.py +0 -0
  877. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_preflight_verification.py +0 -0
  878. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_president_wiring.py +0 -0
  879. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_presroute_cli.py +0 -0
  880. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_presroute_landed.py +0 -0
  881. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proc_cpu.py +0 -0
  882. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_attestation_workflow.py +0 -0
  883. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_cleanup.py +0 -0
  884. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_isolation.py +0 -0
  885. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_receipts.py +0 -0
  886. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_prune_merged_worktrees_script.py +0 -0
  887. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_public_installer.py +0 -0
  888. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_publishing.py +0 -0
  889. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pushflow.py +0 -0
  890. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ratification_policy.py +0 -0
  891. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  892. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_portability_85c.py +0 -0
  893. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  894. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_verification_log.py +0 -0
  895. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  896. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_redaction_channel_control_isolation.py +0 -0
  897. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reflection_sync.py +0 -0
  898. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  899. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_release_pin_autotrack.py +0 -0
  900. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_repo_validation.py +0 -0
  901. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_leg_sandbox.py +0 -0
  902. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_policy_govlean_repairs.py +0 -0
  903. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_stage_binding.py +0 -0
  904. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_stage_board_findings.py +0 -0
  905. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_staged_tree_authorization.py +0 -0
  906. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_summary.py +0 -0
  907. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_roadmap_authority.py +0 -0
  908. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_roadmap_ownership.py +0 -0
  909. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_roadmap_representation_consistency.py +0 -0
  910. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_route_log.py +0 -0
  911. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_route_policy_conformance.py +0 -0
  912. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_routing_invariants.py +0 -0
  913. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  914. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_adapter_output_720.py +0 -0
  915. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_event_log_hardening_720.py +0 -0
  916. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_procfs_identity_870.py +0 -0
  917. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_state_mirror_agreement.py +0 -0
  918. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_clone.py +0 -0
  919. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_egress.py +0 -0
  920. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_policy.py +0 -0
  921. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_preamble.py +0 -0
  922. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_retention.py +0 -0
  923. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  924. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sibling_matcher_patterns.py +0 -0
  925. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_bundle_pinned.py +0 -0
  926. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_install_body_expansion.py +0 -0
  927. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_liveness_contract.py +0 -0
  928. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_plan_manifest_write.py +0 -0
  929. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_sources_seam.py +0 -0
  930. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skills_bundle_drift.py +0 -0
  931. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skills_canon_parity.py +0 -0
  932. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skills_src_claude_literal_lint.py +0 -0
  933. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_spec_conformance_gate.py +0 -0
  934. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_specpkgmin_wheel.py +0 -0
  935. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  936. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_status_read_only_62.py +0 -0
  937. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_subscription_scrub_xai_864.py +0 -0
  938. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  939. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  940. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sync_skills_apply_failloud.py +0 -0
  941. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_task_message_broker.py +0 -0
  942. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_task_message_broker_cli.py +0 -0
  943. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_task_message_resolver.py +0 -0
  944. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_tdd_chronology.py +0 -0
  945. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
  946. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_authority_import_811.py +0 -0
  947. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_order_only_deps_47.py +0 -0
  948. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_roadmap.py +0 -0
  949. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_unattended_release.py +0 -0
  950. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  951. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  952. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  953. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  954. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  955. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_proofgate.py +0 -0
  956. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_dotdot_execution_428.py +0 -0
  957. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_evidence.py +0 -0
  958. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_evidence_validator.py +0 -0
  959. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_interpreter_guard_221.py +0 -0
  960. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_venv_identity_428.py +0 -0
  961. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_visual_avatar_evidence_validator.py +0 -0
  962. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_visual_evidence_validator.py +0 -0
  963. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_workerpool_failure_isolation.py +0 -0
  964. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_workerpool_parallel.py +0 -0
  965. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_workerpool_worktree_alloc.py +0 -0
  966. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_worktree_index.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.7.17
3
+ Version: 0.7.19
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author-email: ViperJuice <viperjuice@users.noreply.github.com>
6
6
  License-Expression: Apache-2.0
@@ -49,7 +49,7 @@ To install just this runtime package directly:
49
49
 
50
50
  ```sh
51
51
  pip install phase-loop-runtime # latest compatible release
52
- pip install phase-loop-runtime==0.7.17 # …or pin an exact version
52
+ pip install phase-loop-runtime==0.7.19 # …or pin an exact version
53
53
  ```
54
54
 
55
55
  To pin a specific tag from source instead, substitute a tag from
@@ -19,7 +19,7 @@ To install just this runtime package directly:
19
19
 
20
20
  ```sh
21
21
  pip install phase-loop-runtime # latest compatible release
22
- pip install phase-loop-runtime==0.7.17 # …or pin an exact version
22
+ pip install phase-loop-runtime==0.7.19 # …or pin an exact version
23
23
  ```
24
24
 
25
25
  To pin a specific tag from source instead, substitute a tag from
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
7
- version = "0.7.17"
7
+ version = "0.7.19"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -154,6 +154,7 @@ phase_loop_runtime = [
154
154
  [tool.pytest.ini_options]
155
155
  markers = [
156
156
  "dotfiles_integration: test requires a dotfiles fleet tree (skipped standalone)",
157
+ "quarantine(reason): known flake tracked by an OPEN issue; deselected on pull-request CI only (agent-harness#1029)",
157
158
  ]
158
159
 
159
160
  [tool.setuptools.data-files]
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.17"
21
+ __version__ = "0.7.19"
@@ -2659,6 +2659,73 @@ Fields:
2659
2659
  A synthetic `_train_review_` record (`node_id="_train_review_"`) is appended
2660
2660
  when the train-level review panel approves. Its `status` is `"approved"`.
2661
2661
 
2662
+ An approval with usable-reviewer evidence may also carry the optional
2663
+ `review_packet_sha256` field, omitted on historical and non-review records.
2664
+ Reuse requires its exact immutable packet bytes and the current usable-reviewer
2665
+ floor; a legacy approval without the digest cannot authorize pending merges.
2666
+
2667
+ The version-1 train review packet binds train order/edges, full admitted heads,
2668
+ PR identities, live base tips, unique merge bases, tree IDs, changed-path/mode/blob
2669
+ inventory, full substantive patches, acceptance and head-bound evidence.
2670
+ `--review-material FILE` declares supporting material for every exact node ID;
2671
+ local command/disposal evidence is labelled operator-supplied attestation.
2672
+ GitHub check runs are fetched by identity and checked against the admitted head.
2673
+ Optional explicit whole-subtree disposal certificates bind full inventories and
2674
+ unabridged diff hashes; they certify deletion mechanics, not generatedness.
2675
+ Operator-only removal sidecars never enter reviewer scratch.
2676
+
2677
+ `run-train --governed --review-only --review-material FILE --preview-review DIR`
2678
+ prepares identical review material before broker construction, leases, recovery,
2679
+ admission or models. A ready receipt is not approval. The rendered prompt,
2680
+ including framing and instructions, must fit 512 KiB; the separate 1 MiB packet
2681
+ parser limit does not establish readiness. There is no truncation fallback.
2682
+
2683
+ `run-train --governed --monitoring-policy heartbeat_only` runs the train-level review
2684
+ under review monitoring policy v1 heartbeat-only: the frozen four-vendor default board
2685
+ (any other composition is refused), no model deadline, no native host seat. The policy
2686
+ is bound into the review authorization and passed to the invoker, which refuses a
2687
+ mismatch. Native emission/fill, a non-governed run or an unqualified Gemini route is
2688
+ refused before ledger, broker, publish or packet effects (CLI and direct callers), and
2689
+ re-checked before any seat launches. The bounded review path is unchanged.
2690
+
2691
+ Trusted-opt-in FAB readmission during ordinary governed merging first freezes
2692
+ the entire prospective packet against proposed-head evidence without granting
2693
+ authority. Existing broker readmission and fresh complete durable bindings must
2694
+ then match before those identical bytes enter review/cache/native sinks. Current
2695
+ readmission eligibility is checked immediately before recovery. While FAB promotion
2696
+ is active, real repository revocation is replayed before recovery, sinks, approval
2697
+ and each merge. Review-only/native emission perform no recovery/readmission; preview
2698
+ does not consult broker evidence. No late head advancement follows train review.
2699
+ Transport readiness does not attest actual provider consumption of all content.
2700
+
2701
+ Production stores read-back packets under `review-packets/<sha256>/` beside the
2702
+ ledger. Missing/corrupt packet storage holds. Explicit fresh material invalidates
2703
+ changed approvals; omitted material retains stored snapshots without asserting
2704
+ checks were refreshed. Native fills retain artifact/brief/composition validation.
2705
+ Partial resumes keep original merged-node sections only after validating their
2706
+ complete admission bindings (node, branch, PR, head and FAB run) and live merge
2707
+ outcomes; unavailable history holds rather than
2708
+ reconstructing scope from current main. Observed pending base/head drift before
2709
+ approval and each merge requires a fresh packet. GitHub's existing head pin
2710
+ remains independent; these reads do not atomically pin the base.
2711
+
2712
+ Direct patch text preserves LF/TAB and reversibly escapes backslashes, CR and
2713
+ disallowed Unicode. JSON sections decode as outer escapes, JSON, then nested
2714
+ `content.text` escapes, including four-digit `\u` and supplementary eight-digit
2715
+ `\U` escapes (the latter are not standard JSON escapes).
2716
+ `raw_sha256` hashes original bytes; `escaped_sha256`
2717
+ hashes intermediate escaped text; preview `presentation_sha256` hashes the
2718
+ final rendered section. Readback integrity is not a power-loss durability
2719
+ guarantee; that recovery work is tracked in agent-harness#977.
2720
+ Packet identity, material and revocation checkpoints, including finalization,
2721
+ storage and checks immediately before review and approval, use `review_halted`
2722
+ before recovery/readmission begins and `merge_halted` afterward. The per-node
2723
+ recovery/readmission handler alone appends a blocked row, and only after that
2724
+ node's helper began; later packet holds retain the latest durable binding.
2725
+ Panel rejections and native-fill refusals remain `review_halted`; merge-loop
2726
+ refusals remain `merge_halted`. All retain the typed reason and prior merges. Malformed
2727
+ stored metadata and excessive JSON nesting yield a typed hold and preview receipt.
2728
+
2662
2729
  Idempotent resume: re-running `run_train` reads the ledger to skip nodes that
2663
2730
  are already `pr_open` (confirmed via a live `_pr_is_open` check) or already
2664
2731
  `merged`. A `blocked` node in the ledger is retried on resume.
@@ -660,8 +660,8 @@ review text and the exception in detail; sandbox facts describe actual enforceme
660
660
 
661
661
  ### Qualified Gemini extension (agent-harness#905)
662
662
 
663
- The Linux x64 subscription `agy` 1.2.10 entry image must match SHA256
664
- `aea7ed8df1e79b716c0ccd14c7d8086db75b14da535ffb7febdec9a488deff67`.
663
+ The Linux x64 subscription `agy` 1.2.11 entry image must match SHA256
664
+ `ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`.
665
665
  The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
666
666
  Python version alone is not a capability check. Unknown images or missing
667
667
  capabilities refuse before availability/auth effects. Required bwrap mount/gate
@@ -915,6 +915,14 @@ def build_parser() -> argparse.ArgumentParser:
915
915
  "(per-repo governed panel review before merge)."
916
916
  ),
917
917
  )
918
+ run_train_sub.add_argument("--review-material", metavar="FILE", help="Version-1 head-bound train review evidence manifest.")
919
+ run_train_sub.add_argument("--preview-review", metavar="DIR", help="With --governed --review-only: prepare a packet without broker, lease, ledger mutation or models.")
920
+ run_train_sub.add_argument(
921
+ "--monitoring-policy", choices=("bounded", "heartbeat_only"), default="bounded",
922
+ help=("With --governed: how the train review watches its seats. heartbeat_only runs the "
923
+ "frozen four-vendor default board with no model deadline and no native seat, as "
924
+ "advisor-board --monitoring-policy heartbeat_only does. Default: bounded."),
925
+ )
918
926
  run_train_sub.add_argument(
919
927
  "--emit-native-request", dest="emit_native_request", action="store_true", default=False,
920
928
  help=("With --governed --review-only: stage the train bundle and the claude seat's native-fill "
@@ -1174,6 +1182,31 @@ def build_parser() -> argparse.ArgumentParser:
1174
1182
  return parser
1175
1183
 
1176
1184
 
1185
+
1186
+ def _confirmed_outside_git_work_tree(path: Path | str) -> bool:
1187
+ """True ONLY when no ``.git`` entry exists at ``path`` or any ancestor.
1188
+
1189
+ Structural: git's output is never parsed. Any ``.git`` entry (directory, ``gitdir:``
1190
+ file -- reachable or not -- or symlink) means "maybe a repository", and so does ANY
1191
+ error: ``os.lstat`` is called directly because ``Path.exists``/``is_symlink`` swallow
1192
+ OSError on newer Pythons (EACCES/EIO would read as "absent"), and a symlink loop in
1193
+ ``resolve`` raises RuntimeError on Python <= 3.12 (agent-harness#1054/#1055 r2/r3).
1194
+ """
1195
+ try:
1196
+ # strict=True: non-strict resolve() swallows lookup errors and returns the
1197
+ # unresolved alias, whose lexical ancestors can miss the real repository
1198
+ # (#1054 r4 / #1055 r3, codex). Any error -- incl. a missing path -- fails closed.
1199
+ resolved = Path(path).resolve(strict=True)
1200
+ for directory in (resolved, *resolved.parents):
1201
+ try:
1202
+ os.lstat(directory / ".git")
1203
+ except (FileNotFoundError, NotADirectoryError):
1204
+ continue
1205
+ return False
1206
+ except (OSError, RuntimeError, ValueError): # ValueError: an embedded NUL byte
1207
+ return False
1208
+ return True
1209
+
1177
1210
  def main(argv: list[str] | None = None) -> int:
1178
1211
  parser = build_parser()
1179
1212
  args = parser.parse_args(argv)
@@ -1401,11 +1434,24 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
1401
1434
  # specs/roadmap-status.json at all) is a silent no-op.
1402
1435
  candidate_path = Path(candidate)
1403
1436
  status_repo = candidate_path.resolve().parent.parent
1404
- try:
1405
- roadmap_lint.validate_roadmap_status_coherence(status_repo, required=True)
1406
- except roadmap_lint.RoadmapStatusError as exc:
1407
- print(f"validate-roadmap: roadmap-status coherence error: {exc}", file=sys.stderr)
1408
- return 1
1437
+ # The repository is inferred as the roadmap's grandparent
1438
+ # (<repo>/specs/<roadmap>.md). Outside a git work tree that guess is
1439
+ # not a repository at all -- a roadmap loose in a tempdir made it
1440
+ # ``/tmp`` itself -- so there is no canonical repository to check:
1441
+ # skip with a note rather than validate a shared system directory
1442
+ # (agent-harness#987 / #1053, maintainer decision 2026-09-25).
1443
+ if _confirmed_outside_git_work_tree(status_repo):
1444
+ print(
1445
+ f"validate-roadmap: note: {status_repo} is not inside a git work tree; "
1446
+ "skipping the repository roadmap-status coherence check",
1447
+ file=sys.stderr,
1448
+ )
1449
+ else:
1450
+ try:
1451
+ roadmap_lint.validate_roadmap_status_coherence(status_repo, required=True)
1452
+ except roadmap_lint.RoadmapStatusError as exc:
1453
+ print(f"validate-roadmap: roadmap-status coherence error: {exc}", file=sys.stderr)
1454
+ return 1
1409
1455
  if getattr(args, "check_assumptions", False):
1410
1456
  from . import roadmap_assumptions
1411
1457
 
@@ -4474,9 +4520,37 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
4474
4520
  return 1 # unreachable
4475
4521
  emit_native_request = bool(getattr(args, "emit_native_request", False))
4476
4522
  native_leg_specs = list(getattr(args, "native_legs", []) or [])
4523
+ preview_output = getattr(args, "preview_review", None)
4524
+ review_material = getattr(args, "review_material", None)
4525
+ if preview_output == "":
4526
+ parser.error("--preview-review requires a non-empty directory")
4527
+ if preview_output is not None and (not review_only or run_mode != "governed" or emit_native_request or native_leg_specs):
4528
+ parser.error("--preview-review requires --governed --review-only and cannot combine with native emission/fill")
4477
4529
  if (emit_native_request or native_leg_specs) and not review_only:
4478
4530
  parser.error("--emit-native-request / --native-leg require --governed --review-only")
4479
4531
  return 1 # unreachable
4532
+ monitoring_policy = getattr(args, "monitoring_policy", "bounded")
4533
+ review_board_preview = None
4534
+ if monitoring_policy == "heartbeat_only":
4535
+ if run_mode != "governed":
4536
+ parser.error("--monitoring-policy heartbeat_only requires --governed")
4537
+ if emit_native_request:
4538
+ parser.error("--monitoring-policy heartbeat_only cannot combine with --emit-native-request "
4539
+ "(heartbeat-only review has no native seat)")
4540
+ # Refuse an unsupported board before any ledger, broker or packet effect, exactly
4541
+ # as advisor-board does (a native fill is one such route).
4542
+ from .advisor_board.backing import resolve_review_monitoring_policy
4543
+ from .advisor_board.fixtures import DEFAULT_BOARD
4544
+ from .panel_invoker import _preflight_gemini_heartbeat
4545
+ try:
4546
+ resolve_review_monitoring_policy(monitoring_policy, DEFAULT_BOARD,
4547
+ native_fill_requested=bool(native_leg_specs))
4548
+ _preflight_gemini_heartbeat(DEFAULT_BOARD, monitoring_policy)
4549
+ except (OSError, ValueError) as exc:
4550
+ print(f"run-train: review monitoring policy refused: {exc}", file=sys.stderr)
4551
+ return 2
4552
+ review_board_preview = [{"harness": seat.harness, "model": seat.model, "effort": seat.effort}
4553
+ for seat in DEFAULT_BOARD.seats]
4480
4554
  native_leg_fills = None
4481
4555
  if native_leg_specs:
4482
4556
  from .panel_invoker import load_native_leg_fills as _load_fill
@@ -4521,6 +4595,22 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
4521
4595
 
4522
4596
  as_json = bool(getattr(args, "json", False))
4523
4597
 
4598
+ if preview_output is not None:
4599
+ import hashlib
4600
+ from .train_review_packet import preview_review_packet
4601
+ receipt = preview_review_packet(
4602
+ roadmap, ledger_path, _resolve_workspace, review_material, Path(preview_output),
4603
+ train_digest=hashlib.sha256(train_path.read_bytes()).hexdigest(),
4604
+ )
4605
+ result = {"status": "review_packet_ready" if receipt["ready"] else "review_halted", **receipt,
4606
+ # The review this packet would get. A bounded board is composed at review
4607
+ # time (availability- and auth-aware), so it has no fixed seats to show.
4608
+ "review_monitoring_policy": monitoring_policy, "review_board": review_board_preview}
4609
+ print(json.dumps(result, sort_keys=True) if as_json else
4610
+ (f"Review packet prepared at {preview_output}; no review approval recorded." if receipt["ready"] else
4611
+ "Review packet held: " + "; ".join(receipt["errors"])))
4612
+ return 0 if receipt["ready"] else 1
4613
+
4524
4614
  # Build a broker-authoritative coordinator runtime so publish actually opens PRs.
4525
4615
  # Without a broker_client, publish_from_worktree fail-closes `broker_required` and
4526
4616
  # the train opens ZERO PRs. The routing broker binds per BrokerRequest.repo (the
@@ -4593,6 +4683,8 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
4593
4683
  review_only=review_only,
4594
4684
  emit_native_request=emit_native_request,
4595
4685
  native_leg_fills=native_leg_fills,
4686
+ review_material=review_material,
4687
+ review_monitoring_policy=monitoring_policy,
4596
4688
  )
4597
4689
  finally:
4598
4690
  try:
@@ -4640,17 +4732,18 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
4640
4732
  if result["status"] == "native_fill_requested":
4641
4733
  # REVIEWTRUTH early slice: the emit arm staged the bundle + request; nothing was spent.
4642
4734
  if not as_json:
4735
+ native_leg = shlex.quote(f"claude={Path(result['request_path']).parent}")
4736
+ material_arg = f" --review-material {shlex.quote(str(review_material))}" if review_material is not None else ""
4737
+ print("Keep the original --train, --workspace-root/--workspace and --ledger-dir arguments.")
4643
4738
  print(
4644
4739
  f"run-train: native fill requested for seat {result.get('seat_key')} — write the review to "
4645
4740
  f"{Path(result['request_path']).parent / 'review.md'} and re-run with "
4646
- f"--governed --review-only --native-leg claude={Path(result['request_path']).parent}"
4741
+ f"--governed --review-only --native-leg {native_leg}{material_arg}"
4647
4742
  )
4648
4743
  return 0
4649
4744
  if result["status"] == "review_approved":
4650
4745
  # agent-harness#906: --review-only terminal — approval recorded, ZERO merges.
4651
4746
  nodes = result.get("nodes", {})
4652
- if not as_json and emit_native_request:
4653
- print("run-train: the train review is already approved on the ledger; no native fill request was emitted.")
4654
4747
  if not as_json:
4655
4748
  print(
4656
4749
  f"run-train: train-level review APPROVED — {len(nodes)} admitted PR(s), "
@@ -174,6 +174,17 @@ _TOOL_CACHE_DIR_NAMES = frozenset(
174
174
  )
175
175
  _TOOL_CACHE_DIR_SUFFIXES = (".egg-info",)
176
176
 
177
+ def _handoff_root_relpath() -> str:
178
+ # Taken from the resolver itself rather than restated, so the audit cannot drift from
179
+ # where the skills are told to write (phase_loop_runtime.skill_paths).
180
+ from .skill_paths import resolve_handoff_root
181
+
182
+ anchor = Path("/")
183
+ return resolve_handoff_root(anchor).relative_to(anchor.resolve()).as_posix()
184
+
185
+
186
+ _HANDOFF_ROOT = _handoff_root_relpath()
187
+
177
188
 
178
189
  def classify_ignored_output(repo_relpath: str) -> IgnoredOutputVerdict:
179
190
  """Grade one gitignored path by WHO produced it.
@@ -210,6 +221,15 @@ def classify_ignored_output(repo_relpath: str) -> IgnoredOutputVerdict:
210
221
  RUNNER_OWNED, False, f"runner lifecycle state under {entry}"
211
222
  )
212
223
 
224
+ # agent-harness#1084: the repo-local skill handoff root is lifecycle state the skills
225
+ # are REQUIRED to write and to keep ignored. Only the exact root the resolver returns
226
+ # (repo root, directory form or a path under it) earns this; the same name nested
227
+ # anywhere else, or a bare file of that name, still blocks.
228
+ if norm == _HANDOFF_ROOT + "/" or norm.startswith(_HANDOFF_ROOT + "/"):
229
+ return IgnoredOutputVerdict(
230
+ RUNNER_OWNED, False, f"required skill handoff under {_HANDOFF_ROOT}/"
231
+ )
232
+
213
233
  # A cache name only earns trust as a DIRECTORY. Git renders a collapsed
214
234
  # directory with a trailing slash and a file without one, so a bare `.venv`
215
235
  # or `node_modules` entry is an ordinary FILE (or a symlink) that merely
@@ -14,8 +14,8 @@ import time
14
14
  from .agy_canary_evidence import AgyCanaryEvidenceError, _linux_memfd_seal_abi, _sealed_tree_fd
15
15
 
16
16
 
17
- QUALIFIED_IMAGE_SHA256 = "aea7ed8df1e79b716c0ccd14c7d8086db75b14da535ffb7febdec9a488deff67"
18
- QUALIFIED_HELP_SHA256 = "5a03bf7dc9d3d7645f5853906cc117363fd8978a79c2a89521f0ff7590dbe454"
17
+ QUALIFIED_IMAGE_SHA256 = "ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56"
18
+ QUALIFIED_HELP_SHA256 = "83e3a0c36269f23972ba33d0013b9a6b2933ddb07cde268fa40e0fb1a5f33755"
19
19
  PROFILE_ID = "agy_memfd_home_deny_all_v1"
20
20
  PRIVATE_HOME = "/dev/phase-loop-agy"
21
21
  _CAPABILITY = "gemini_heartbeat_capability_unavailable"
@@ -329,9 +329,17 @@ def governed_board_gate(
329
329
  native_leg_fills: Sequence[object] | None = None,
330
330
  emit_native_request: bool = False,
331
331
  native_fill_dir: "Path | str | None" = None,
332
+ monitoring_policy: str = "bounded",
332
333
  ) -> "GateResult | dict[str, object]":
333
334
  """A governed gate backed by the broker-AUTHORIZED review board (agent-harness#906).
334
335
 
336
+ ``monitoring_policy="heartbeat_only"`` (agent-harness#906, ``run-train
337
+ --monitoring-policy``) runs the review the way ``advisor-board --monitoring-policy
338
+ heartbeat_only`` does: the frozen default four-vendor board (any other composition is
339
+ refused, even from an injected ``compose``), no model deadline, and no native host seat.
340
+ It is checked here, before minting or any launch, and forwarded to both the
341
+ authorization and ``invoke_board``, which refuse a mismatch between the two.
342
+
335
343
  REVIEWTRUTH early slice (EC-REVIEWTRUTH-14, plan agent-harness#918): ``emit_native_request``
336
344
  performs the same composition, author exclusion, floor and staging the invoke arm will
337
345
  redo, writes ``request.json`` / ``artifact.md`` / ``instructions.md`` under
@@ -391,11 +399,29 @@ def governed_board_gate(
391
399
  "(the coordinator's git toplevel or the first node's workspace); none was "
392
400
  "resolved; holding (non-human)",
393
401
  )
402
+ heartbeat_only = monitoring_policy == "heartbeat_only"
403
+ if monitoring_policy not in ("bounded", "heartbeat_only"):
404
+ return _block_result(
405
+ "review_isolation_unavailable", "governed_board_monitoring_policy_refused",
406
+ f"review monitoring policy {monitoring_policy!r} is not supported; holding (non-human)",
407
+ )
408
+ if heartbeat_only and (native_leg_fills or emit_native_request):
409
+ # CONTRACTS.md, review monitoring policy v1: heartbeat-only has no native host seat.
410
+ return _block_result(
411
+ "review_isolation_unavailable", "governed_board_monitoring_policy_refused",
412
+ "review_monitoring_unsupported_route:native_fill: heartbeat_only review has no "
413
+ "native host seat; holding (non-human)",
414
+ )
394
415
  from . import panel_invoker as _pi
395
416
  from .advisor_board import backing as _backing
396
417
  from .advisor_board.composition import FLOOR_SEATS, compose_review_board
418
+ from .advisor_board.fixtures import DEFAULT_BOARD
397
419
 
398
- compose_fn = compose if compose is not None else compose_review_board
420
+ # heartbeat_only seats the frozen default board, as the advisor-board CLI does: an
421
+ # unavailable vendor then fails its own seat instead of being silently backfilled.
422
+ compose_fn = compose if compose is not None else (
423
+ (lambda: DEFAULT_BOARD) if heartbeat_only else compose_review_board
424
+ )
399
425
  try:
400
426
  _backing.prepare_review_composition_authorization()
401
427
  try:
@@ -425,9 +451,37 @@ def governed_board_gate(
425
451
  )
426
452
  if dropped:
427
453
  board = _replace(board, seats=seats)
454
+ if heartbeat_only:
455
+ if board != DEFAULT_BOARD:
456
+ # Frozen composition, whatever produced it: an injected composer or author
457
+ # exclusion that changes the seats is refused, never reviewed (agent-harness#1061 r1).
458
+ return _block_result(
459
+ "review_isolation_unavailable", "governed_board_monitoring_policy_refused",
460
+ "heartbeat_only review requires the frozen four-vendor default board; "
461
+ f"composed {sorted(getattr(s, 'harness', '?') for s in board.seats)}; holding (non-human)",
462
+ )
463
+ try:
464
+ _backing.resolve_review_monitoring_policy(monitoring_policy, board)
465
+ _pi._preflight_gemini_heartbeat(board, monitoring_policy)
466
+ except (OSError, ValueError) as exc:
467
+ return _block_result(
468
+ "review_isolation_unavailable", "governed_board_monitoring_policy_refused",
469
+ f"review monitoring policy refused before any launch: {exc}; holding (non-human)",
470
+ )
471
+ policy_kwargs: dict[str, object] = {"monitoring_policy": monitoring_policy} if heartbeat_only else {}
428
472
  invoke_fn = invoke if invoke is not None else _pi.invoke_board
429
473
  from .advisor_board.composition import composition_digest
430
474
 
475
+ if artifact.startswith("# Train review packet v1\n"):
476
+ try:
477
+ from .train_review_packet import preflight_packet
478
+ preflight_packet(artifact, instructions=_pi._resolve_brief("review", brief_ref), board=board)
479
+ except (OSError, UnicodeError, ValueError) as exc:
480
+ return _block_result(
481
+ "review_isolation_unavailable", "governed_board_packet_preflight_failed",
482
+ f"review packet transport preflight failed: {exc}; holding (non-human)",
483
+ )
484
+
431
485
  if emit_native_request:
432
486
  # Emit arm: no authorization, no seat, no digest binding beyond the read-back bytes.
433
487
  try:
@@ -497,6 +551,7 @@ def governed_board_gate(
497
551
  staged_artifact,
498
552
  mode="review",
499
553
  canonical_repo_authority=canonical_repo_authority,
554
+ **policy_kwargs,
500
555
  )
501
556
  invoke_kwargs: dict[str, object] = {
502
557
  "repo_dir": provider_scratch,
@@ -504,6 +559,7 @@ def governed_board_gate(
504
559
  "review_authorization": authorization,
505
560
  "canonical_repo_authority": canonical_repo_authority,
506
561
  "spawn": spawn,
562
+ **policy_kwargs,
507
563
  }
508
564
  if brief_ref is not None:
509
565
  invoke_kwargs["brief_ref"] = brief_ref