phase-loop-runtime 0.7.17__tar.gz → 0.7.18__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 (965) hide show
  1. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/PKG-INFO +2 -2
  2. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/README.md +1 -1
  3. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/pyproject.toml +2 -1
  4. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +67 -0
  6. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/cli.py +101 -8
  7. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/governed_review.py +57 -1
  8. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/panel_invoker.py +158 -9
  9. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  10. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +50 -18
  11. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +48 -16
  12. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +48 -16
  13. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +48 -16
  14. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/train_ledger.py +4 -1
  15. phase_loop_runtime-0.7.18/src/phase_loop_runtime/train_review_packet.py +862 -0
  16. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/train_runner.py +387 -268
  17. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime.egg-info/PKG-INFO +2 -2
  18. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime.egg-info/SOURCES.txt +8 -0
  19. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_golden.py +17 -0
  20. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_chronology_scope.py +168 -24
  21. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_offload_lock.py +21 -6
  22. phase_loop_runtime-0.7.18/tests/test_ci_quarantine.py +299 -0
  23. phase_loop_runtime-0.7.18/tests/test_execfind_falsifier.py +777 -0
  24. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_activation_promotion.py +35 -13
  25. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_delta_consumer.py +73 -54
  26. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_flag_off_recovery_leak_299.py +15 -10
  27. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_gemini_heartbeat_bootstrap.py +187 -10
  28. phase_loop_runtime-0.7.18/tests/test_governed_review.py +642 -0
  29. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_legible_roadmap_contract.py +6 -6
  30. phase_loop_runtime-0.7.18/tests/test_local_check.py +210 -0
  31. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_model_tier_taxonomy.py +7 -2
  32. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_native_claude_seat_fill.py +5 -0
  33. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_tui_workspace_trust_223.py +59 -0
  34. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_roadmap_validate.py +213 -2
  35. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_president_ladder_config.py +2 -0
  36. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_presroute_hardening.py +162 -0
  37. phase_loop_runtime-0.7.18/tests/test_qualify_network_owner.py +135 -0
  38. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_monitor_policy.py +198 -12
  39. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_e2e.py +7 -0
  40. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_invariants.py +6 -1
  41. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_merge.py +24 -21
  42. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_prebuilt.py +79 -0
  43. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_review_authorization.py +9 -1
  44. phase_loop_runtime-0.7.18/tests/test_train_review_monitoring_policy.py +325 -0
  45. phase_loop_runtime-0.7.18/tests/test_train_review_packet.py +2532 -0
  46. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_runner.py +14 -6
  47. phase_loop_runtime-0.7.18/tests/test_verify_qualified_agy_route_core.py +218 -0
  48. phase_loop_runtime-0.7.17/tests/test_governed_review.py +0 -212
  49. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/MANIFEST.in +0 -0
  50. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/protocol/protocol.md +0 -0
  51. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/setup.cfg +0 -0
  52. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  53. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  54. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  55. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  56. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  57. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  58. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  59. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  60. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  61. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  62. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  63. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  64. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  65. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  66. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  67. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  68. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  69. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  70. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  71. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  72. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  73. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  74. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  75. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  76. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  77. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  78. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  79. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  80. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  81. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  82. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  83. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  84. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  85. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  86. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  87. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  88. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  89. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  90. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  91. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  92. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  93. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  94. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  95. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  96. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  97. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  98. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  99. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  100. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  101. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  102. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  103. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  104. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  105. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  106. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  107. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  108. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  109. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  110. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  111. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  112. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  113. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  114. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  115. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  116. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  117. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  118. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  119. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  120. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  121. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  122. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  123. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  124. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  125. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  126. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
  127. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_modular.py +0 -0
  128. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  129. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  130. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  131. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  132. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  133. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  134. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  135. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  136. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/broker.py +0 -0
  137. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/build_bundle.py +0 -0
  138. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/capability_registry.py +0 -0
  139. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/classifier.py +0 -0
  140. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  141. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  142. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/closeout.py +0 -0
  143. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  144. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  145. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/closeout_validation.py +0 -0
  146. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/closeout_validators.py +0 -0
  147. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  148. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  149. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  150. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  151. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  152. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  153. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  154. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  155. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  156. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  157. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  158. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  159. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  160. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  161. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  162. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  163. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  164. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  165. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  166. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  167. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  168. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  169. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  170. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  171. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  172. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  173. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  174. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  175. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  176. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  177. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  178. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  179. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  180. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  181. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  182. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  183. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  184. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  185. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  186. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  187. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  188. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  189. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  190. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  191. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
  192. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  193. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  194. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  195. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  196. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  197. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  198. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  199. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  200. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/convergence/status.py +0 -0
  201. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  202. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/declared_identity.py +0 -0
  203. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  204. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  205. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/discovery.py +0 -0
  206. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  207. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  208. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/docs_audit.py +0 -0
  209. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/docs_freshness.py +0 -0
  210. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  211. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/doctor.py +0 -0
  212. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  213. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  214. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/events.py +0 -0
  215. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/events_migration.py +0 -0
  216. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/evidence_audit.py +0 -0
  217. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  218. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/executor_availability.py +0 -0
  219. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fab_canonical.py +0 -0
  220. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fab_delta.py +0 -0
  221. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fab_gate.py +0 -0
  222. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fab_producer.py +0 -0
  223. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fab_provenance.py +0 -0
  224. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  225. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  226. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  227. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fleet_map.py +0 -0
  228. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  229. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  230. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/gate_posture.py +0 -0
  231. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/gemini_heartbeat.py +0 -0
  232. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/git_discipline.py +0 -0
  233. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/git_ops.py +0 -0
  234. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/git_topology.py +0 -0
  235. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/goal_coverage.py +0 -0
  236. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/governed_bundle.py +0 -0
  237. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/governed_premerge.py +0 -0
  238. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/handoff.py +0 -0
  239. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/handoff_path.py +0 -0
  240. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  241. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/injection.py +0 -0
  242. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/install_status.py +0 -0
  243. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  244. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/launcher.py +0 -0
  245. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/lease_store.py +0 -0
  246. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/legible_evidence.py +0 -0
  247. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/maintenance.py +0 -0
  248. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  249. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/models.py +0 -0
  250. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/observability.py +0 -0
  251. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  252. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  253. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  254. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  255. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  256. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  257. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  258. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  259. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  260. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/plan_ir.py +0 -0
  261. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/plan_manifest.py +0 -0
  262. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  263. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/planner_validation.py +0 -0
  264. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/president_adapter.py +0 -0
  265. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/president_operation.py +0 -0
  266. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/producer_manifest.py +0 -0
  267. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/profiles.py +0 -0
  268. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/prompts.py +0 -0
  269. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/proof_stages.py +0 -0
  270. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/provenance.py +0 -0
  271. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/publishing.py +0 -0
  272. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/py.typed +0 -0
  273. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/ratification_policy.py +0 -0
  274. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/reconcile.py +0 -0
  275. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/redaction.py +0 -0
  276. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/reflection_sync.py +0 -0
  277. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/release_guard.py +0 -0
  278. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/render.py +0 -0
  279. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/repo_validation.py +0 -0
  280. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/review_stage.py +0 -0
  281. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/review_summary.py +0 -0
  282. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  283. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  284. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  285. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  286. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  287. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  288. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/route_log.py +0 -0
  289. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  290. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  291. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/runner.py +0 -0
  292. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/runtime_paths.py +0 -0
  293. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/runtime_projection.py +0 -0
  294. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/runtime_resources.py +0 -0
  295. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/sandbox_egress.py +0 -0
  296. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/sandbox_policy.py +0 -0
  297. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/sandbox_retention.py +0 -0
  298. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/schema_export.py +0 -0
  299. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  300. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  301. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  302. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skill_install.py +0 -0
  303. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skill_inventory.py +0 -0
  304. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skill_paths.py +0 -0
  305. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  306. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  307. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  308. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  309. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  310. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  311. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  312. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  313. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
  314. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  315. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  316. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  317. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  318. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  319. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  320. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  321. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  322. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  323. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  324. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  325. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  326. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  327. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  328. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  329. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  330. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  331. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  332. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  333. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  334. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  335. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  336. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  337. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  338. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  339. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  340. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  341. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  342. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  343. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  344. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  345. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  346. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  347. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  348. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  349. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  350. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  351. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  352. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  353. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  354. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  355. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  356. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  357. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  359. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  361. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  362. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  363. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  364. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  365. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  366. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  367. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  368. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  369. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  370. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  371. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  372. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  373. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  374. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  375. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  376. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  377. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  378. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  379. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  380. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  381. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  382. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  383. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  384. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  385. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  386. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  387. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  388. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  389. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  390. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  391. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  392. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  393. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  394. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  395. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  396. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  397. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  398. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  399. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  400. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  401. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  402. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  403. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  404. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  405. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  406. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  407. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  408. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  409. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  410. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  411. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  412. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  413. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  414. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  415. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  416. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  417. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  418. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  419. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  420. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  421. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  422. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  423. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  424. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  425. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  426. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  427. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  428. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  429. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  430. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  431. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  432. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  433. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  434. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  435. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  436. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  437. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  438. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  439. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  440. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  441. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  442. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  443. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  444. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  445. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  446. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  447. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  448. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  449. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  450. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  451. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  452. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  453. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  454. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  455. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  456. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  457. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  458. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  459. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  460. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  461. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  462. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  463. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  464. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  465. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  466. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  467. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  468. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  469. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  470. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  471. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  472. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  473. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  474. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  475. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  476. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  477. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  478. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  479. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  480. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  481. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  482. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  483. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  484. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  485. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  486. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  487. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  488. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  489. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  490. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/state.py +0 -0
  491. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/state_degradation.py +0 -0
  492. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/state_ops.py +0 -0
  493. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/task_message_broker.py +0 -0
  494. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  495. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  496. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  497. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/train_roadmap.py +0 -0
  498. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/verification_evidence.py +0 -0
  499. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  500. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  501. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  502. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/worker_pool.py +0 -0
  503. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime/worktree_index.py +0 -0
  504. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  505. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  506. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  507. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  508. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_acceptance_falsifier_contract.py +0 -0
  509. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_advisory_mode.py +0 -0
  510. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_alias_install.py +0 -0
  511. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_backcompat.py +0 -0
  512. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_backing_homebrew.py +0 -0
  513. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_backing_omnigent.py +0 -0
  514. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_cli_legacy.py +0 -0
  515. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_composition.py +0 -0
  516. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_concurrency.py +0 -0
  517. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_config.py +0 -0
  518. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_ingestion.py +0 -0
  519. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_integration.py +0 -0
  520. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_live_research.py +0 -0
  521. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_matrix.py +0 -0
  522. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_observability.py +0 -0
  523. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_presets.py +0 -0
  524. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_registries.py +0 -0
  525. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_research.py +0 -0
  526. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_resolver.py +0 -0
  527. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_schema.py +0 -0
  528. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_board_static_import_862.py +0 -0
  529. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_advisor_twin_alias_legacy.py +0 -0
  530. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_agent_runtime_provider_cs08.py +0 -0
  531. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_agy_canary_evidence.py +0 -0
  532. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_autosel.py +0 -0
  533. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_branchgov_preflight.py +0 -0
  534. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_broker_command_builders.py +0 -0
  535. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  536. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_broker_staged_tree_delivery.py +0 -0
  537. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_certificate_tier.py +0 -0
  538. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_gate_metrics.py +0 -0
  539. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_main_red.py +0 -0
  540. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_workflow_concurrency.py +0 -0
  541. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_xdist_adoption.py +0 -0
  542. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ci_xdist_witness.py +0 -0
  543. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  544. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_cli_train_status_45.py +0 -0
  545. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_break_glass_cli.py +0 -0
  546. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_classifier.py +0 -0
  547. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_convergence_fixes.py +0 -0
  548. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_exception_vocab.py +0 -0
  549. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  550. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_import_cycle_819.py +0 -0
  551. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  552. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_validator_hook.py +0 -0
  553. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_closeout_verification_gate.py +0 -0
  554. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_codex_effort_max_clamp_49.py +0 -0
  555. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_committed_range_diff.py +0 -0
  556. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_common_directory_leases_807.py +0 -0
  557. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_conform_timing_instrumentation.py +0 -0
  558. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_conformance_golden.py +0 -0
  559. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_conftest_isolation.py +0 -0
  560. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_consiliency_dual_layout.py +0 -0
  561. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_consiliency_gates.py +0 -0
  562. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_consiliency_ingest.py +0 -0
  563. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_consiliency_scaffold.py +0 -0
  564. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_console_scripts_are_declared.py +0 -0
  565. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_contract_floor_guard_378.py +0 -0
  566. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_adapters.py +0 -0
  567. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_broker_admission.py +0 -0
  568. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_broker_api.py +0 -0
  569. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_broker_credsep.py +0 -0
  570. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_broker_evidence.py +0 -0
  571. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_broker_revocation_race.py +0 -0
  572. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_broker_verbs.py +0 -0
  573. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_cli_integration.py +0 -0
  574. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_coordination_contracts.py +0 -0
  575. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_dispatch.py +0 -0
  576. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_event_contracts.py +0 -0
  577. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_event_log.py +0 -0
  578. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_fencing.py +0 -0
  579. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_fixture_contracts.py +0 -0
  580. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_invalidation.py +0 -0
  581. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_live_enable.py +0 -0
  582. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_provider_contracts.py +0 -0
  583. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_reconcile.py +0 -0
  584. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_refresh.py +0 -0
  585. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_runtime_imports.py +0 -0
  586. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_seat_lifecycle.py +0 -0
  587. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_status.py +0 -0
  588. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_convergence_train_integration.py +0 -0
  589. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_coordinator_wave_loop.py +0 -0
  590. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_cr_fixes_pr220.py +0 -0
  591. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_delegated_visual_evidence_91.py +0 -0
  592. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_discovery_hygiene_legacy.py +0 -0
  593. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_dispatch_hold_guard.py +0 -0
  594. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  595. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_dispatch_lock_helper.py +0 -0
  596. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_dispatch_lock_reentrancy.py +0 -0
  597. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  598. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_doc_delta_validator.py +0 -0
  599. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_docs_audit.py +0 -0
  600. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_docs_freshness.py +0 -0
  601. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_doctor_bom.py +0 -0
  602. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_dotfiles_tree.py +0 -0
  603. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
  604. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_entry_doc_check.py +0 -0
  605. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_execgov.py +0 -0
  606. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_execreg_launch_registry.py +0 -0
  607. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_execute_phase_handoff_mode.py +0 -0
  608. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_execution_policy_tiering.py +0 -0
  609. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_executor_availability.py +0 -0
  610. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_executor_exited_without_closeout_785.py +0 -0
  611. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_export_schema.py +0 -0
  612. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_canonical_b.py +0 -0
  613. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_closeout_crash_safety.py +0 -0
  614. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_closeout_wiring.py +0 -0
  615. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_delta_c.py +0 -0
  616. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_gate_d.py +0 -0
  617. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_producer.py +0 -0
  618. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fab_provenance_a.py +0 -0
  619. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_admission_compat_789.py +0 -0
  620. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  621. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_partition_rotation_789d.py +0 -0
  622. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_recovery_controls_789.py +0 -0
  623. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  624. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_shared_epoch.py +0 -0
  625. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
  626. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  627. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fabreadmit_broker.py +0 -0
  628. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fleet_map.py +0 -0
  629. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fleet_metrics.py +0 -0
  630. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_fleet_metrics_export.py +0 -0
  631. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_frozen_blob_batch_parse.py +0 -0
  632. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_gate_a_wheel_isolation.py +0 -0
  633. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_gate_fail_open_visibility.py +0 -0
  634. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_gate_parity_244_245.py +0 -0
  635. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_gate_posture.py +0 -0
  636. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_git_discipline.py +0 -0
  637. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_git_grounded_projection.py +0 -0
  638. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_goal_coverage.py +0 -0
  639. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  640. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_disjointness_model_first.py +0 -0
  641. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_e2e.py +0 -0
  642. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_gate_crfixes.py +0 -0
  643. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_planning_gate.py +0 -0
  644. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_premerge.py +0 -0
  645. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_governed_premerge_live.py +0 -0
  646. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_declared_identity.py +0 -0
  647. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_panel_policy.py +0 -0
  648. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  649. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_plan_pin_lint.py +0 -0
  650. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_producer_manifest.py +0 -0
  651. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_proof_stages.py +0 -0
  652. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_roadmap_reseal.py +0 -0
  653. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_skill_policy_parity.py +0 -0
  654. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_govlean_tdd_receipts.py +0 -0
  655. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_grok_narrow_reject_231.py +0 -0
  656. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_grokexec.py +0 -0
  657. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_harden_evidence_producer.py +0 -0
  658. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_harden_evidence_verifier.py +0 -0
  659. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_harden_json_depth_825.py +0 -0
  660. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_hotfix_lane.py +0 -0
  661. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_injection_skill_failloud.py +0 -0
  662. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_lane_ir_override.py +0 -0
  663. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_launcher_liveness.py +0 -0
  664. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_launchspec_golden.py +0 -0
  665. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_lease_store.py +0 -0
  666. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_lease_store_conformance.py +0 -0
  667. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ledger_serialization.py +0 -0
  668. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_leg_liveness_monitor.py +0 -0
  669. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_legible_evidence.py +0 -0
  670. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_legible_review_repairs.py +0 -0
  671. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_live_smoke_gate_executes.py +0 -0
  672. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_manifest_per_entry_164.py +0 -0
  673. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_model_class_policy.py +0 -0
  674. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_model_id_source_guard.py +0 -0
  675. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_native_claude_seat_fill_green.py +0 -0
  676. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  677. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_observability_alerting.py +0 -0
  678. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_advisory.py +0 -0
  679. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_advisory_cli.py +0 -0
  680. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  681. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_authority_boundary.py +0 -0
  682. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_canonical_corpus.py +0 -0
  683. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_conform_evidence.py +0 -0
  684. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_contract_drift.py +0 -0
  685. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_contract_imports.py +0 -0
  686. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_contract_pin.py +0 -0
  687. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_core_api.py +0 -0
  688. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_provenance.py +0 -0
  689. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_real_ci.py +0 -0
  690. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_real_cli.py +0 -0
  691. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_real_output.py +0 -0
  692. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_real_runtime.py +0 -0
  693. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_redaction.py +0 -0
  694. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_redaction_separation.py +0 -0
  695. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_release_surface.py +0 -0
  696. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_schema_validation.py +0 -0
  697. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_outside_agent_vectors.py +0 -0
  698. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_owned_command_procfs_1003.py +0 -0
  699. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_packaged_vector_manifest_pin.py +0 -0
  700. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_advisory_mode_63.py +0 -0
  701. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  702. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_context_refs_114.py +0 -0
  703. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  704. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_invoker.py +0 -0
  705. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_invoker_spawn.py +0 -0
  706. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_invoker_timeout_argv.py +0 -0
  707. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_invoker_windows_import.py +0 -0
  708. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  709. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  710. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_native_fill_183.py +0 -0
  711. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_per_leg_model_66.py +0 -0
  712. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_streaming_verdicts.py +0 -0
  713. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_tui_eof_48.py +0 -0
  714. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_tui_liveness_188.py +0 -0
  715. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_panel_verdict_summary.py +0 -0
  716. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_parallel_dispatch_backcompat.py +0 -0
  717. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_parallel_dispatch_cli.py +0 -0
  718. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_adoption_bundle.py +0 -0
  719. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  720. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_dependency.py +0 -0
  721. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  722. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_injection.py +0 -0
  723. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_modular.py +0 -0
  724. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  725. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  726. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_schema_export.py +0 -0
  727. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_baml_schema_source.py +0 -0
  728. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  729. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  730. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_build_bundle.py +0 -0
  731. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_classifier.py +0 -0
  732. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  733. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  734. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  735. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  736. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_channel_security.py +0 -0
  737. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  738. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  739. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  740. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_claude_route_selection.py +0 -0
  741. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_cli.py +0 -0
  742. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  743. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_control_only.py +0 -0
  744. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_event.py +0 -0
  745. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  746. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_hardening.py +0 -0
  747. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  748. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_schema.py +0 -0
  749. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_closeout_validation.py +0 -0
  750. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_collaborator_citation.py +0 -0
  751. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_collaborator_docs.py +0 -0
  752. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  753. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  754. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  755. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  756. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  757. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_discovery.py +0 -0
  758. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_docs.py +0 -0
  759. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  760. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  761. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  762. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  763. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_downstream_portal.py +0 -0
  764. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  765. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_drift_audit.py +0 -0
  766. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  767. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  768. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_events_migration.py +0 -0
  769. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_evidence_audit.py +0 -0
  770. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  771. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  772. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  773. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  774. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_execution_policy.py +0 -0
  775. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_executor_degradation.py +0 -0
  776. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_full_phase_mode.py +0 -0
  777. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_handoff.py +0 -0
  778. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_handoff_migration.py +0 -0
  779. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_init.py +0 -0
  780. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_injection.py +0 -0
  781. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_install_status.py +0 -0
  782. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  783. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_lane_harnesses.py +0 -0
  784. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_lane_ir.py +0 -0
  785. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  786. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_lane_scheduler.py +0 -0
  787. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_launcher.py +0 -0
  788. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_ledger_debug.py +0 -0
  789. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_ledger_dedup.py +0 -0
  790. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_live_adapters.py +0 -0
  791. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_maintenance.py +0 -0
  792. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_metrics.py +0 -0
  793. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_migration_regressions.py +0 -0
  794. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  795. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  796. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  797. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_models.py +0 -0
  798. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_native_flags.py +0 -0
  799. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  800. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pi_executor.py +0 -0
  801. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  802. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  803. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  804. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  805. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  806. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_pipeline_mode.py +0 -0
  807. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  808. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_plan_manifest.py +0 -0
  809. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  810. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_planner_validation.py +0 -0
  811. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_policy.py +0 -0
  812. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_protocol_contract.py +0 -0
  813. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_provenance.py +0 -0
  814. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_reconcile.py +0 -0
  815. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  816. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  817. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  818. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_reducers.py +0 -0
  819. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  820. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  821. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  822. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_rotation.py +0 -0
  823. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_runner.py +0 -0
  824. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  825. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_runtime_boundary.py +0 -0
  826. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_runtime_decouple.py +0 -0
  827. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_runtime_package_data.py +0 -0
  828. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_runtime_projection.py +0 -0
  829. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_schema_flow.py +0 -0
  830. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  831. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  832. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_skill_contract.py +0 -0
  833. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  834. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_skill_install.py +0 -0
  835. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  836. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_smoke_blockers.py +0 -0
  837. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  838. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_smoke_reentry.py +0 -0
  839. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  840. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  841. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  842. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_state.py +0 -0
  843. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  844. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  845. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  846. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  847. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  848. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_v22_e2e.py +0 -0
  849. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_v22_principles.py +0 -0
  850. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  851. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_v45_reconcile.py +0 -0
  852. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_v45_sched.py +0 -0
  853. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_v45_schedharden.py +0 -0
  854. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_wave_runner.py +0 -0
  855. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_work_unit_observability.py +0 -0
  856. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_work_unit_runner.py +0 -0
  857. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_work_unit_state.py +0 -0
  858. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_loop_worktrees.py +0 -0
  859. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  860. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_state_disagreement_312.py +0 -0
  861. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_phase_worktree_executor.py +0 -0
  862. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  863. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  864. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  865. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_flag.py +0 -0
  866. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_markers.py +0 -0
  867. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  868. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  869. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  870. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  871. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  872. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pkg_layout_freeze.py +0 -0
  873. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_plan_ir_iter_waves.py +0 -0
  874. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pr_readback_789.py +0 -0
  875. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_preflight_verification.py +0 -0
  876. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_president_heartbeat_1001.py +0 -0
  877. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_president_wiring.py +0 -0
  878. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_presroute_cli.py +0 -0
  879. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_presroute_landed.py +0 -0
  880. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_proc_cpu.py +0 -0
  881. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_proofgate_attestation_workflow.py +0 -0
  882. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_proofgate_cleanup.py +0 -0
  883. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_proofgate_isolation.py +0 -0
  884. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_proofgate_receipts.py +0 -0
  885. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_prune_merged_worktrees_script.py +0 -0
  886. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_public_installer.py +0 -0
  887. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_publishing.py +0 -0
  888. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_pushflow.py +0 -0
  889. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_ratification_policy.py +0 -0
  890. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  891. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_reconcile_portability_85c.py +0 -0
  892. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  893. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_reconcile_verification_log.py +0 -0
  894. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  895. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_redaction_channel_control_isolation.py +0 -0
  896. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_reflection_sync.py +0 -0
  897. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  898. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_release_pin_autotrack.py +0 -0
  899. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_repo_validation.py +0 -0
  900. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_leg_sandbox.py +0 -0
  901. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_policy_govlean_repairs.py +0 -0
  902. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_stage_binding.py +0 -0
  903. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_stage_board_findings.py +0 -0
  904. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_staged_tree_authorization.py +0 -0
  905. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_review_summary.py +0 -0
  906. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_roadmap_authority.py +0 -0
  907. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_roadmap_ownership.py +0 -0
  908. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_roadmap_representation_consistency.py +0 -0
  909. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_route_log.py +0 -0
  910. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_route_policy_conformance.py +0 -0
  911. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_routing_invariants.py +0 -0
  912. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  913. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_runtime_adapter_output_720.py +0 -0
  914. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_runtime_event_log_hardening_720.py +0 -0
  915. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_runtime_procfs_identity_870.py +0 -0
  916. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_runtime_state_mirror_agreement.py +0 -0
  917. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sandbox_clone.py +0 -0
  918. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sandbox_egress.py +0 -0
  919. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sandbox_policy.py +0 -0
  920. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sandbox_preamble.py +0 -0
  921. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sandbox_retention.py +0 -0
  922. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  923. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sibling_matcher_patterns.py +0 -0
  924. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skill_bundle_pinned.py +0 -0
  925. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skill_install_body_expansion.py +0 -0
  926. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skill_liveness_contract.py +0 -0
  927. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skill_plan_manifest_write.py +0 -0
  928. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skill_sources_seam.py +0 -0
  929. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skills_bundle_drift.py +0 -0
  930. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skills_canon_parity.py +0 -0
  931. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_skills_src_claude_literal_lint.py +0 -0
  932. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_spec_conformance_gate.py +0 -0
  933. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_specpkgmin_wheel.py +0 -0
  934. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  935. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_status_read_only_62.py +0 -0
  936. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_subscription_scrub_xai_864.py +0 -0
  937. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  938. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  939. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_sync_skills_apply_failloud.py +0 -0
  940. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_task_message_broker.py +0 -0
  941. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_task_message_broker_cli.py +0 -0
  942. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_task_message_resolver.py +0 -0
  943. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_tdd_chronology.py +0 -0
  944. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
  945. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_authority_import_811.py +0 -0
  946. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_order_only_deps_47.py +0 -0
  947. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_train_roadmap.py +0 -0
  948. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_unattended_release.py +0 -0
  949. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  950. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  951. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  952. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  953. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  954. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_validate_plan_doc_proofgate.py +0 -0
  955. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_verification_dotdot_execution_428.py +0 -0
  956. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_verification_evidence.py +0 -0
  957. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_verification_evidence_validator.py +0 -0
  958. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_verification_interpreter_guard_221.py +0 -0
  959. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_verification_venv_identity_428.py +0 -0
  960. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_visual_avatar_evidence_validator.py +0 -0
  961. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_visual_evidence_validator.py +0 -0
  962. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_workerpool_failure_isolation.py +0 -0
  963. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_workerpool_parallel.py +0 -0
  964. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/tests/test_workerpool_worktree_alloc.py +0 -0
  965. {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.18}/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.18
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.18 # …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.18 # …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.18"
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.18"
@@ -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.
@@ -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), "
@@ -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
@@ -1728,6 +1728,57 @@ def _canonical_review_repo_authority(repo_dir: Path | str | None) -> Path:
1728
1728
  return Path(root).resolve()
1729
1729
 
1730
1730
 
1731
+ def _outside_any_git_work_tree(path: Path | str) -> bool:
1732
+ """True ONLY when no ``.git`` entry exists at ``path`` or any ancestor.
1733
+
1734
+ Structural: git's output is never parsed. Any ``.git`` entry (directory, ``gitdir:``
1735
+ file -- reachable or not -- or symlink) means "maybe a repository", and so does ANY
1736
+ error: ``os.lstat`` is called directly because ``Path.exists``/``is_symlink`` swallow
1737
+ OSError on newer Pythons (EACCES/EIO would read as "absent"), and a symlink loop in
1738
+ ``resolve`` raises RuntimeError on Python <= 3.12 (agent-harness#1054/#1055 r2/r3).
1739
+ """
1740
+ try:
1741
+ # strict=True: non-strict resolve() swallows lookup errors and returns the
1742
+ # unresolved alias, whose lexical ancestors can miss the real repository
1743
+ # (#1054 r4 / #1055 r3, codex). Any error -- incl. a missing path -- fails closed.
1744
+ resolved = Path(path).resolve(strict=True)
1745
+ for directory in (resolved, *resolved.parents):
1746
+ try:
1747
+ os.lstat(directory / ".git")
1748
+ except (FileNotFoundError, NotADirectoryError):
1749
+ continue
1750
+ return False
1751
+ except (OSError, RuntimeError, ValueError): # ValueError: an embedded NUL byte
1752
+ return False
1753
+ return True
1754
+
1755
+
1756
+ def _resolve_review_authority(
1757
+ canonical_repo_authority: Path | str | None,
1758
+ repo_dir: Path | str | None,
1759
+ *,
1760
+ governed: bool,
1761
+ resolve: Callable[[Path | str | None], Path] | None = None,
1762
+ ) -> Path:
1763
+ """The HARDEN review authority -- the tree fingerprinted AND staged -- resolved once.
1764
+
1765
+ Order (agent-harness#1053, maintainer decision 2026-09-25): an explicit
1766
+ ``canonical_repo_authority``; else ``repo_dir``, the repository under review; else the
1767
+ process cwd. ``repo_dir`` is not consulted for a GOVERNED request (a pre-minted
1768
+ authorization is bound to its own authority). A ``repo_dir`` falls back to the cwd only
1769
+ when it is structurally outside any git work tree -- it cannot be fingerprinted as a
1770
+ repository -- so a real repository whose resolution FAILS (git missing, refused, timed
1771
+ out) reaches the typed refusal instead of silently reviewing the cwd. Each call makes
1772
+ exactly one resolution (a frozen static-import probe pins that single ``git`` call).
1773
+ """
1774
+ resolve = resolve or _canonical_review_repo_authority
1775
+ if canonical_repo_authority is not None or repo_dir is None or governed:
1776
+ return resolve(canonical_repo_authority)
1777
+ if _outside_any_git_work_tree(repo_dir):
1778
+ return resolve(None)
1779
+ return resolve(repo_dir)
1780
+
1781
+
1731
1782
  def _completion_ok(text: str, mode: str = "review") -> bool:
1732
1783
  """Is a leg's output a COMPLETE response for this mode?
1733
1784
 
@@ -2335,7 +2386,7 @@ def _provider_launch_prefix(cwd, retain_caps=()):
2335
2386
  # its cwd -- codex's own sandbox does -- then fails with ENOENT before any inference
2336
2387
  # (agent-harness#908 board round 4, finding (f); reproduced with the real codex CLI:
2337
2388
  # `--wd` -> exit 1 "No such file or directory (os error 2)", path-based chdir -> OK).
2338
- # `env --chdir` runs after nsenter and setpriv, so the chdir is a plain path lookup in
2389
+ # `env --chdir` runs after nsenter and capability setup, so the chdir is a plain path lookup in
2339
2390
  # the namespace the provider will live in; the cwd attested as ``provider_cwd_sha256``
2340
2391
  # is unchanged. A plain nested user+mount namespace does NOT reproduce the failure --
2341
2392
  # the fchdir()ed cwd stays reachable there -- so the class needs the provider's own
@@ -2369,10 +2420,28 @@ def launch_provider(argv, *, process_owner=(), retain_caps=(), **kwargs) -> "sub
2369
2420
  """
2370
2421
  prefix = _provider_launch_prefix(kwargs.get("cwd"), retain_caps)
2371
2422
  if process_owner:
2372
- # Enter the network namespace before creating the ownership PID namespace,
2373
- # but drop capabilities only AFTER both namespaces exist.
2374
2423
  position = prefix.index("setpriv") if "setpriv" in prefix else len(prefix)
2375
- prefix[position:position] = process_owner
2424
+ if tuple(retain_caps) not in ((), ("setfcap",)):
2425
+ raise ValueError("unsupported owned provider capability policy")
2426
+ if retain_caps:
2427
+ # Keep Codex in the holder's user namespace so its own sandbox can
2428
+ # create another one. The unshare supervisor owns the PID namespace;
2429
+ # the inner setpriv still drops every capability except SETFCAP.
2430
+ prefix[position:position] = ["setpriv", "--pdeathsig", "SIGKILL", "--",
2431
+ "/usr/bin/unshare", "--pid", "--fork",
2432
+ "--kill-child=SIGKILL", "--mount-proc"]
2433
+ inner_setpriv = prefix.index("setpriv", position + 1)
2434
+ prefix[inner_setpriv + 1:inner_setpriv + 1] = ["--pdeathsig", "keep"]
2435
+ else:
2436
+ # Bubblewrap drops CAP_SETPCAP before a later setpriv can use it.
2437
+ owner = list(process_owner)
2438
+ if owner[0] != "/usr/bin/bwrap":
2439
+ raise ValueError("unsupported owned provider")
2440
+ owner[1:1] = ["--unshare-user", "--uid", str(os.getuid()),
2441
+ "--gid", str(os.getgid()), "--cap-drop", "ALL"]
2442
+ if position < len(prefix):
2443
+ del prefix[position:prefix.index("--", position) + 1]
2444
+ prefix[position:position] = owner
2376
2445
  return subprocess.Popen([*prefix, *argv], **kwargs)
2377
2446
 
2378
2447
 
@@ -3017,6 +3086,21 @@ def _render_broker_inline_prompt(
3017
3086
  verdict,
3018
3087
  ))
3019
3088
  )
3089
+ return _assemble_broker_inline_prompt(
3090
+ artifact, instructions, preamble,
3091
+ (instructions_begin, instructions_end), (artifact_begin, artifact_end),
3092
+ )
3093
+
3094
+
3095
+ def _assemble_broker_inline_prompt(
3096
+ artifact: str, instructions: str, preamble: str,
3097
+ instruction_frames: tuple[str, str], artifact_frames: tuple[str, str],
3098
+ ) -> str:
3099
+ """Pure assembly shared by validated launches and non-authorizing preflight."""
3100
+ artifact_bytes = artifact.encode("utf-8", errors="strict")
3101
+ instruction_bytes = instructions.encode("utf-8", errors="strict")
3102
+ instructions_begin, instructions_end = instruction_frames
3103
+ artifact_begin, artifact_end = artifact_frames
3020
3104
  prompt = "\n".join((
3021
3105
  preamble,
3022
3106
  f"AUTHORITATIVE-INSTRUCTIONS sha256={sha256(instruction_bytes).hexdigest()} bytes={len(instruction_bytes)}",
@@ -4486,7 +4570,9 @@ def _normalize_tui_line(line: str) -> str:
4486
4570
  return " ".join(line.split()).strip().lower()
4487
4571
 
4488
4572
 
4489
- def _tui_chunk_has_novel_content(chunk: bytes, seen: set[str]) -> bool:
4573
+ def _tui_chunk_has_novel_content(
4574
+ chunk: bytes, seen: set[str], ignore: Callable[[str], bool] | None = None
4575
+ ) -> bool:
4490
4576
  """True iff a PTY chunk carries SUBSTANTIVE new (non-cosmetic) terminal text.
4491
4577
 
4492
4578
  Strips ANSI escapes, splits on newline AND carriage-return (spinner overwrite),
@@ -4503,10 +4589,50 @@ def _tui_chunk_has_novel_content(chunk: bytes, seen: set[str]) -> bool:
4503
4589
  norm = _normalize_tui_line(raw)
4504
4590
  if len(norm) >= _TUI_PROGRESS_MIN_CHARS and norm not in seen:
4505
4591
  seen.add(norm)
4506
- novel = True
4592
+ # ``ignore`` lines are recorded as seen but are never progress (#992).
4593
+ if ignore is None or not ignore(norm):
4594
+ novel = True
4507
4595
  return novel
4508
4596
 
4509
4597
 
4598
+ # The workspace-trust modal's own vocabulary, normalized like any TUI line. After the
4599
+ # modal is answered, lines of the modal that were still rendering (it can arrive in
4600
+ # pieces) must not arm editor readiness (agent-harness#992).
4601
+ _TUI_TRUST_MODAL_NORMS = tuple(
4602
+ _normalize_tui_line(text)
4603
+ for text in (
4604
+ _CLAUDE_TUI_TRUST_HEADER,
4605
+ _CLAUDE_TUI_TRUST_HEADER_CURRENT,
4606
+ _CLAUDE_TUI_TRUST_QUESTION,
4607
+ _CLAUDE_TUI_TRUST_CHOICE,
4608
+ _CLAUDE_TUI_TRUST_PROMPT,
4609
+ "no, exit",
4610
+ # The rest of the live Claude Code 2.1.282 selector modal (captured 2026-09-25,
4611
+ # agent-harness#1053): its explanation, link and footer can also arrive after the
4612
+ # answer and are not editor output either.
4613
+ # Short fragments, so a paragraph WRAPPED at the terminal width still matches line by
4614
+ # line (#1060 r1, claude): e.g. at 80 columns the explanation breaks mid-sentence.
4615
+ "your own code",
4616
+ "well-known open source",
4617
+ "work from your team",
4618
+ "take a moment to review",
4619
+ "folder first",
4620
+ "read, edit, and execute",
4621
+ "execute files here",
4622
+ "security guide",
4623
+ "enter to confirm",
4624
+ "esc to cancel",
4625
+ )
4626
+ )
4627
+
4628
+
4629
+ def _tui_trust_modal_line(norm: str, cwd_norms: Sequence[str]) -> bool:
4630
+ """Is this normalized line part of the workspace-trust modal (incl. its cwd line)?"""
4631
+ return any(token in norm for token in _TUI_TRUST_MODAL_NORMS) or any(
4632
+ token and token in norm for token in cwd_norms
4633
+ )
4634
+
4635
+
4510
4636
  # A single ``os.read(8192)`` can split a novel review line across two chunks; each
4511
4637
  # fragment normalizes differently (or collides with a seen/too-short form), so the
4512
4638
  # whole-line progress signal is lost. Carry the trailing PARTIAL line (bytes after
@@ -4677,6 +4803,10 @@ def _run_claude_tui_session(
4677
4803
  cwd_tokens = _cwd_trust_tokens(
4678
4804
  cwd
4679
4805
  ) # run-unique FULL-path tokens (not the bare basename)
4806
+ cwd_norms = tuple(
4807
+ norm for norm in (_normalize_tui_line(token) for token in cwd_tokens)
4808
+ if len(norm) >= _TUI_PROGRESS_MIN_CHARS
4809
+ )
4680
4810
 
4681
4811
  def _current_output() -> str:
4682
4812
  return (
@@ -4804,8 +4934,16 @@ def _run_claude_tui_session(
4804
4934
  # boundaries so a novel line split by ``os.read`` is scanned
4805
4935
  # WHOLE (only complete lines are evaluated).
4806
4936
  complete = _tui_take_complete_lines(tui_carry, chunk)
4937
+ # Between answering the trust modal and submitting, the
4938
+ # modal's own late-rendering lines are not editor output
4939
+ # (agent-harness#992): they must not arm readiness.
4940
+ modal_ignore = (
4941
+ (lambda norm: _tui_trust_modal_line(norm, cwd_norms))
4942
+ if trust_answered and not prompt_sent
4943
+ else None
4944
+ )
4807
4945
  if complete and _tui_chunk_has_novel_content(
4808
- complete, seen_tui_lines
4946
+ complete, seen_tui_lines, modal_ignore
4809
4947
  ):
4810
4948
  now_novel = time.monotonic()
4811
4949
  last_heartbeat = now_novel
@@ -8466,8 +8604,19 @@ def invoke_board(
8466
8604
  review_instruction_token = set_review_instruction_digest(
8467
8605
  _resolve_brief(mode, brief_ref)
8468
8606
  )
8469
- canonical_repo_authority = _canonical_review_repo_authority(
8470
- canonical_repo_authority
8607
+ # The repository under review is the authority: an explicit
8608
+ # ``canonical_repo_authority`` first, then ``repo_dir`` when it IS a
8609
+ # git repository, and only then the process cwd -- so the fingerprinted
8610
+ # and staged tree is the one the caller named (agent-harness#1053,
8611
+ # maintainer decision 2026-09-25). A non-git ``repo_dir`` cannot be
8612
+ # fingerprinted as a repository and keeps the historical cwd authority,
8613
+ # so every later typed refusal is unchanged. Falling back to
8614
+ # ``repo_dir`` does NOT make this a governed request:
8615
+ # ``governed_review_request`` above keys on the caller's explicit
8616
+ # authority / authorization only.
8617
+ canonical_repo_authority = _resolve_review_authority(
8618
+ canonical_repo_authority, repo_dir,
8619
+ governed=governed_review_request,
8471
8620
  )
8472
8621
  except (OSError, UnicodeError, ValueError) as exc:
8473
8622
  return review_refusal(str(exc))
@@ -28,8 +28,8 @@ from typing import Any, Mapping, Sequence
28
28
  PROBE_SIDECAR_REL = "specs/roadmap-assumption-probes-v10.json"
29
29
  PROBE_SCHEMA = "roadmap_assumption_probe.v1"
30
30
  CANONICAL_ROADMAP_REL = "specs/phase-plans-v10.md"
31
- CANONICAL_ROADMAP_SHA256 = "3e465669d4a30be1334e40c6998a6f5aae610d7204b94346bdd27ab1f0c4a9b0"
32
- CANONICAL_PROBES_SHA256 = "684c7773fa214a00dcee6c225712b03c9c6dcc06507a12c09df64e3f38b332fc"
31
+ CANONICAL_ROADMAP_SHA256 = "ae5b814a9be561ca78fdcf976e77bcc582a4e0a09c775563a8bbaf4daf740ff4"
32
+ CANONICAL_PROBES_SHA256 = "42d473e2396df4c9dd2a9f98f9c330fa0362bfc51d3e1c99580ed48e3619ebf1"
33
33
  CANONICAL_PROBE_IDS = (
34
34
  "LEGIBLE-A1-CONFORM-UNGATED", "LEGIBLE-A1-I118", "LEGIBLE-A1-PIN-SHA",
35
35
  "LEGIBLE-A1-PIN-TAG", "LEGIBLE-A1-PR102", "LEGIBLE-A1-PR377",