phase-loop-runtime 0.7.21__tar.gz → 0.7.22__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 (999) hide show
  1. {phase_loop_runtime-0.7.21/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.22}/PKG-INFO +8 -2
  2. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/README.md +7 -1
  3. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/pyproject.toml +1 -1
  4. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +128 -5
  6. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/backing.py +99 -0
  7. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/fixtures.py +3 -0
  8. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/registries.py +2 -0
  9. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/cli.py +72 -4
  10. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_classifier.py +121 -34
  11. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/live.py +136 -48
  12. phase_loop_runtime-0.7.22/src/phase_loop_runtime/credential_redaction.py +488 -0
  13. phase_loop_runtime-0.7.22/src/phase_loop_runtime/falsifier.py +270 -0
  14. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/gemini_heartbeat.py +6 -0
  15. phase_loop_runtime-0.7.22/src/phase_loop_runtime/generated_outputs.py +843 -0
  16. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_premerge.py +5 -2
  17. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_review.py +276 -5
  18. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/observability.py +3 -1
  19. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/panel_invoker.py +746 -157
  20. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +3 -1
  21. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_manifest.py +118 -57
  22. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/prompts.py +84 -1
  23. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/publishing.py +413 -11
  24. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/redaction.py +0 -5
  25. phase_loop_runtime-0.7.22/src/phase_loop_runtime/review_stage.py +1163 -0
  26. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  27. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runner.py +42 -17
  28. phase_loop_runtime-0.7.22/src/phase_loop_runtime/seat_preflight.py +170 -0
  29. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +10 -5
  30. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +2 -5
  31. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +10 -5
  32. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +2 -2
  33. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +10 -5
  34. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +2 -2
  35. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +10 -5
  36. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_runner.py +3 -1
  37. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/verification_evidence.py +52 -2
  38. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22/src/phase_loop_runtime.egg-info}/PKG-INFO +8 -2
  39. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/SOURCES.txt +15 -0
  40. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_registries.py +51 -0
  41. phase_loop_runtime-0.7.22/tests/test_agy_single_event_transport_1175.py +187 -0
  42. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_classifier.py +16 -6
  43. phase_loop_runtime-0.7.22/tests/test_closeout_generated_outputs.py +1418 -0
  44. phase_loop_runtime-0.7.22/tests/test_credential_redaction_shapes.py +502 -0
  45. phase_loop_runtime-0.7.22/tests/test_execfind_governed_promotion.py +441 -0
  46. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_executor_exited_without_closeout_785.py +42 -2
  47. phase_loop_runtime-0.7.22/tests/test_fabpub_zero_history_bootstrap.py +1631 -0
  48. phase_loop_runtime-0.7.22/tests/test_finding_F001.py +28 -0
  49. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gemini_heartbeat_bootstrap.py +24 -3
  50. phase_loop_runtime-0.7.22/tests/test_gemini_heartbeat_filesystem_view.py +262 -0
  51. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_review.py +3 -2
  52. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_legible_roadmap_contract.py +6 -6
  53. phase_loop_runtime-0.7.22/tests/test_native_fill_refusal_cause.py +111 -0
  54. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_claude_review_output.py +3 -1
  55. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_liveness_188.py +66 -0
  56. phase_loop_runtime-0.7.22/tests/test_plan_manifest_append_order_1174.py +205 -0
  57. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pr_readback_789.py +4 -2
  58. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_president_heartbeat_1001.py +4 -1
  59. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_publishing.py +511 -0
  60. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_qualified_agy_image_set.py +6 -2
  61. phase_loop_runtime-0.7.22/tests/test_redaction_main_coverage_cases.py +57 -0
  62. phase_loop_runtime-0.7.22/tests/test_review_seat_stall_1176.py +1432 -0
  63. phase_loop_runtime-0.7.22/tests/test_review_stage_binding.py +1913 -0
  64. phase_loop_runtime-0.7.22/tests/test_seat_preflight_1204.py +461 -0
  65. phase_loop_runtime-0.7.21/src/phase_loop_runtime/review_stage.py +0 -456
  66. phase_loop_runtime-0.7.21/tests/test_fabpub_zero_history_bootstrap.py +0 -582
  67. phase_loop_runtime-0.7.21/tests/test_review_stage_binding.py +0 -183
  68. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/MANIFEST.in +0 -0
  69. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/protocol/protocol.md +0 -0
  70. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/setup.cfg +0 -0
  71. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  72. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  73. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  74. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  75. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  76. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  77. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  78. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  79. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  80. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  81. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  82. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  83. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  84. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  85. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  86. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  87. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  88. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  89. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  90. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  91. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  92. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  93. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  94. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  95. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  96. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  97. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  98. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  99. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  100. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  101. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  102. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  103. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  104. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  105. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  106. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  107. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  108. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  109. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  110. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  111. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  112. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  113. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  114. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  115. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  116. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  117. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  118. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  119. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  120. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  121. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  122. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  123. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  124. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  125. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  126. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  127. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
  128. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  129. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  130. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  131. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  132. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  133. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  134. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  135. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  136. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  137. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  138. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  139. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  140. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  141. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  142. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  143. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
  144. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_provenance.py +0 -0
  145. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_qualification.py +0 -0
  146. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_watch.py +0 -0
  147. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_modular.py +0 -0
  148. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  149. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  150. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  151. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  152. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  153. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  154. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  155. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  156. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/broker.py +0 -0
  157. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/build_bundle.py +0 -0
  158. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/capability_registry.py +0 -0
  159. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/classifier.py +0 -0
  160. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  161. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  162. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout.py +0 -0
  163. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  164. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_validation.py +0 -0
  165. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_validators.py +0 -0
  166. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  167. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  168. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  169. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  170. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  171. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  172. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  173. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  174. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  175. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  176. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  177. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  178. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  179. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  180. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  181. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  182. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  183. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  184. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  185. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  186. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  187. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  188. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  189. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  190. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  191. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  192. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  193. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  194. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  195. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  196. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  197. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  198. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  199. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  200. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  201. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  202. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  203. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  204. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  205. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  206. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  207. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  208. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  209. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  210. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  211. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  212. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  213. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  214. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  215. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  216. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  217. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  218. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/status.py +0 -0
  219. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  220. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/declared_identity.py +0 -0
  221. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  222. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  223. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/discovery.py +0 -0
  224. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  225. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  226. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_audit.py +0 -0
  227. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_freshness.py +0 -0
  228. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  229. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/doctor.py +0 -0
  230. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  231. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  232. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/events.py +0 -0
  233. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/events_migration.py +0 -0
  234. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/evidence_audit.py +0 -0
  235. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  236. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/executor_availability.py +0 -0
  237. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_canonical.py +0 -0
  238. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_delta.py +0 -0
  239. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_gate.py +0 -0
  240. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_producer.py +0 -0
  241. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_provenance.py +0 -0
  242. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  243. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  244. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  245. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_map.py +0 -0
  246. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  247. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  248. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/gate_posture.py +0 -0
  249. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_discipline.py +0 -0
  250. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_ops.py +0 -0
  251. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_topology.py +0 -0
  252. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/goal_coverage.py +0 -0
  253. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_bundle.py +0 -0
  254. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/handoff.py +0 -0
  255. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/handoff_path.py +0 -0
  256. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  257. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/injection.py +0 -0
  258. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/install_status.py +0 -0
  259. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  260. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/launcher.py +0 -0
  261. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lease_store.py +0 -0
  262. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lease_supervisor.py +0 -0
  263. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/legible_evidence.py +0 -0
  264. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/maintenance.py +0 -0
  265. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  266. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/models.py +0 -0
  267. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  268. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  269. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  270. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  271. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  272. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  273. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  274. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  275. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_ir.py +0 -0
  276. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  277. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/planner_validation.py +0 -0
  278. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/president_adapter.py +0 -0
  279. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/president_operation.py +0 -0
  280. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/producer_manifest.py +0 -0
  281. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/profiles.py +0 -0
  282. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/proof_stages.py +0 -0
  283. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/provenance.py +0 -0
  284. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/py.typed +0 -0
  285. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/ratification_policy.py +0 -0
  286. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reconcile.py +0 -0
  287. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reflection_sync.py +0 -0
  288. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/release_guard.py +0 -0
  289. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/render.py +0 -0
  290. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/repo_validation.py +0 -0
  291. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/review_summary.py +0 -0
  292. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  293. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  294. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  295. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  296. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  297. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  298. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_log.py +0 -0
  299. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  300. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  301. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_paths.py +0 -0
  302. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_projection.py +0 -0
  303. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_resources.py +0 -0
  304. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_egress.py +0 -0
  305. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_policy.py +0 -0
  306. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_retention.py +0 -0
  307. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schema_export.py +0 -0
  308. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  309. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  310. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  311. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_install.py +0 -0
  312. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_inventory.py +0 -0
  313. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_paths.py +0 -0
  314. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  315. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  316. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  317. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  318. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  319. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  320. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  321. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  322. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  323. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  324. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  325. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  326. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  327. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  328. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  329. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  330. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  331. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  332. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  333. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  334. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  335. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  336. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  337. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  338. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  339. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  340. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  341. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  342. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  343. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  344. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  345. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  346. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  347. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  348. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  349. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  350. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  351. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  352. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  353. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  354. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  355. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  356. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  357. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  358. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  359. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  360. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  361. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  362. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  363. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  364. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  365. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  366. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  367. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  368. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  369. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  370. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  371. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  372. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  373. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  374. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  375. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  376. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  377. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  378. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  379. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  380. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  381. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  382. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  383. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  384. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  385. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  386. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  387. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  388. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  389. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  390. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  391. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  392. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  393. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  394. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  395. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  396. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  397. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  398. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  399. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  400. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  401. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  402. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  403. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  404. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  405. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  406. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  407. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  408. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  409. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  410. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  411. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  412. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  413. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  414. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  415. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  416. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  417. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  418. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  419. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  420. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  421. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  422. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  423. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  424. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  425. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  426. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  427. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  428. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  429. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  430. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  431. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  432. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  433. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  434. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  435. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  436. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  437. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  438. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  439. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  440. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  441. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  442. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  443. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  444. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  445. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  446. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  447. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  448. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  449. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  450. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  451. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  452. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  453. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  454. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  455. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  456. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  457. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  458. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  459. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  460. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  461. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  462. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  463. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  464. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  465. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  466. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  467. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  468. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  469. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  470. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  471. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  472. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  473. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  474. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  475. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  476. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  477. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  478. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  479. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  480. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  481. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  482. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  483. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  484. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  485. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  486. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  487. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  488. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  489. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  490. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  491. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  492. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  493. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  494. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  495. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  496. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state.py +0 -0
  497. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state_degradation.py +0 -0
  498. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state_ops.py +0 -0
  499. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_broker.py +0 -0
  500. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  501. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  502. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  503. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_ledger.py +0 -0
  504. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_review_packet.py +0 -0
  505. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_roadmap.py +0 -0
  506. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  507. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  508. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  509. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/worker_pool.py +0 -0
  510. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/worktree_index.py +0 -0
  511. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  512. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  513. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  514. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  515. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_acceptance_falsifier_contract.py +0 -0
  516. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_advisory_cli_802.py +0 -0
  517. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_advisory_mode.py +0 -0
  518. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_alias_install.py +0 -0
  519. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backcompat.py +0 -0
  520. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backing_homebrew.py +0 -0
  521. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backing_omnigent.py +0 -0
  522. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_cli_legacy.py +0 -0
  523. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_composition.py +0 -0
  524. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_concurrency.py +0 -0
  525. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_config.py +0 -0
  526. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_golden.py +0 -0
  527. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_ingestion.py +0 -0
  528. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_integration.py +0 -0
  529. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_live_research.py +0 -0
  530. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_matrix.py +0 -0
  531. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_observability.py +0 -0
  532. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_presets.py +0 -0
  533. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_research.py +0 -0
  534. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_resolver.py +0 -0
  535. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_schema.py +0 -0
  536. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_static_import_862.py +0 -0
  537. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_twin_alias_legacy.py +0 -0
  538. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_agent_runtime_provider_cs08.py +0 -0
  539. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_agy_canary_evidence.py +0 -0
  540. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_agy_self_qualification.py +0 -0
  541. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_autosel.py +0 -0
  542. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_branchgov_preflight.py +0 -0
  543. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_broker_command_builders.py +0 -0
  544. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  545. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_broker_staged_tree_delivery.py +0 -0
  546. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_certificate_tier.py +0 -0
  547. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_chronology_scope.py +0 -0
  548. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_gate_metrics.py +0 -0
  549. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_main_red.py +0 -0
  550. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_offload_lock.py +0 -0
  551. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_quarantine.py +0 -0
  552. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_workflow_concurrency.py +0 -0
  553. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_xdist_adoption.py +0 -0
  554. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_xdist_witness.py +0 -0
  555. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  556. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_cli_train_status_45.py +0 -0
  557. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_break_glass_cli.py +0 -0
  558. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_convergence_fixes.py +0 -0
  559. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_exception_vocab.py +0 -0
  560. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  561. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_import_cycle_819.py +0 -0
  562. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  563. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_validator_hook.py +0 -0
  564. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_verification_gate.py +0 -0
  565. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_codex_effort_max_clamp_49.py +0 -0
  566. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_committed_range_diff.py +0 -0
  567. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_common_directory_leases_807.py +0 -0
  568. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_conform_timing_instrumentation.py +0 -0
  569. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_conformance_golden.py +0 -0
  570. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_conftest_isolation.py +0 -0
  571. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_dual_layout.py +0 -0
  572. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_gates.py +0 -0
  573. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_ingest.py +0 -0
  574. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_scaffold.py +0 -0
  575. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_console_scripts_are_declared.py +0 -0
  576. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_contract_floor_guard_378.py +0 -0
  577. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_adapters.py +0 -0
  578. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_admission.py +0 -0
  579. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_api.py +0 -0
  580. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_credsep.py +0 -0
  581. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_evidence.py +0 -0
  582. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_revocation_race.py +0 -0
  583. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_verbs.py +0 -0
  584. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_cli_integration.py +0 -0
  585. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_coordination_contracts.py +0 -0
  586. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_dispatch.py +0 -0
  587. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_event_contracts.py +0 -0
  588. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_event_log.py +0 -0
  589. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_fencing.py +0 -0
  590. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_fixture_contracts.py +0 -0
  591. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_invalidation.py +0 -0
  592. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_live_enable.py +0 -0
  593. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_provider_contracts.py +0 -0
  594. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_reconcile.py +0 -0
  595. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_refresh.py +0 -0
  596. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_runtime_imports.py +0 -0
  597. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_seat_lifecycle.py +0 -0
  598. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_status.py +0 -0
  599. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_train_integration.py +0 -0
  600. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_coordinator_wave_loop.py +0 -0
  601. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_cr_fixes_pr220.py +0 -0
  602. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_delegated_visual_evidence_91.py +0 -0
  603. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_discovery_hygiene_legacy.py +0 -0
  604. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_hold_guard.py +0 -0
  605. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  606. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_helper.py +0 -0
  607. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_reentrancy.py +0 -0
  608. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  609. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_doc_delta_validator.py +0 -0
  610. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_docs_audit.py +0 -0
  611. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_docs_freshness.py +0 -0
  612. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_doctor_bom.py +0 -0
  613. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dotfiles_tree.py +0 -0
  614. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
  615. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_entry_doc_check.py +0 -0
  616. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execfind_falsifier.py +0 -0
  617. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execgov.py +0 -0
  618. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execreg_launch_registry.py +0 -0
  619. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execute_phase_handoff_mode.py +0 -0
  620. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execution_policy_tiering.py +0 -0
  621. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_executor_availability.py +0 -0
  622. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_export_schema.py +0 -0
  623. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_activation_promotion.py +0 -0
  624. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_canonical_b.py +0 -0
  625. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_closeout_crash_safety.py +0 -0
  626. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_closeout_wiring.py +0 -0
  627. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_delta_c.py +0 -0
  628. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_delta_consumer.py +0 -0
  629. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
  630. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_gate_d.py +0 -0
  631. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_producer.py +0 -0
  632. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_provenance_a.py +0 -0
  633. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_admission_compat_789.py +0 -0
  634. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
  635. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  636. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_partition_rotation_789d.py +0 -0
  637. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_recovery_controls_789.py +0 -0
  638. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  639. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_shared_epoch.py +0 -0
  640. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  641. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabreadmit_broker.py +0 -0
  642. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fleet_map.py +0 -0
  643. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fleet_metrics.py +0 -0
  644. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fleet_metrics_export.py +0 -0
  645. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_frozen_blob_batch_parse.py +0 -0
  646. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_a_wheel_isolation.py +0 -0
  647. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_fail_open_visibility.py +0 -0
  648. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_parity_244_245.py +0 -0
  649. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_posture.py +0 -0
  650. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_git_discipline.py +0 -0
  651. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_git_grounded_projection.py +0 -0
  652. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_goal_coverage.py +0 -0
  653. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  654. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_disjointness_model_first.py +0 -0
  655. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_e2e.py +0 -0
  656. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_gate_crfixes.py +0 -0
  657. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_planning_gate.py +0 -0
  658. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_premerge.py +0 -0
  659. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_premerge_live.py +0 -0
  660. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_declared_identity.py +0 -0
  661. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_panel_policy.py +0 -0
  662. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  663. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_plan_pin_lint.py +0 -0
  664. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_producer_manifest.py +0 -0
  665. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_proof_stages.py +0 -0
  666. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_roadmap_reseal.py +0 -0
  667. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_skill_policy_parity.py +0 -0
  668. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_tdd_receipts.py +0 -0
  669. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_grok_narrow_reject_231.py +0 -0
  670. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_grokexec.py +0 -0
  671. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_harden_evidence_producer.py +0 -0
  672. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_harden_evidence_verifier.py +0 -0
  673. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_harden_json_depth_825.py +0 -0
  674. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_hotfix_lane.py +0 -0
  675. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_injection_skill_failloud.py +0 -0
  676. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_lane_ir_override.py +0 -0
  677. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_launcher_exec_supervisor.py +0 -0
  678. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_launcher_liveness.py +0 -0
  679. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_launchspec_golden.py +0 -0
  680. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_lease_store.py +0 -0
  681. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_lease_store_conformance.py +0 -0
  682. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ledger_serialization.py +0 -0
  683. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_leg_liveness_monitor.py +0 -0
  684. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_legible_evidence.py +0 -0
  685. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_legible_review_repairs.py +0 -0
  686. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_live_smoke_gate_executes.py +0 -0
  687. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_local_check.py +0 -0
  688. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_manifest_per_entry_164.py +0 -0
  689. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_model_class_policy.py +0 -0
  690. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_model_id_source_guard.py +0 -0
  691. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_model_tier_taxonomy.py +0 -0
  692. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_native_claude_seat_fill.py +0 -0
  693. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_native_claude_seat_fill_green.py +0 -0
  694. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  695. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_observability_alerting.py +0 -0
  696. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory.py +0 -0
  697. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory_cli.py +0 -0
  698. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  699. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_authority_boundary.py +0 -0
  700. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_canonical_corpus.py +0 -0
  701. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_conform_evidence.py +0 -0
  702. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_drift.py +0 -0
  703. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_imports.py +0 -0
  704. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_pin.py +0 -0
  705. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_core_api.py +0 -0
  706. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_provenance.py +0 -0
  707. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_ci.py +0 -0
  708. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_cli.py +0 -0
  709. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_output.py +0 -0
  710. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_runtime.py +0 -0
  711. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_redaction.py +0 -0
  712. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_redaction_separation.py +0 -0
  713. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_release_surface.py +0 -0
  714. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_schema_validation.py +0 -0
  715. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_vectors.py +0 -0
  716. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_owned_command_procfs_1003.py +0 -0
  717. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_packaged_vector_manifest_pin.py +0 -0
  718. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_advisory_mode_63.py +0 -0
  719. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  720. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_context_refs_114.py +0 -0
  721. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_doc_contract.py +0 -0
  722. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  723. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker.py +0 -0
  724. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_spawn.py +0 -0
  725. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_timeout_argv.py +0 -0
  726. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_windows_import.py +0 -0
  727. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_lanes.py +0 -0
  728. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  729. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  730. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_status_detail_1096.py +0 -0
  731. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_lens_delivery.py +0 -0
  732. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_native_fill_183.py +0 -0
  733. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_per_leg_model_66.py +0 -0
  734. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_streaming_verdicts.py +0 -0
  735. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_eof_48.py +0 -0
  736. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_workspace_trust_223.py +0 -0
  737. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_verdict_summary.py +0 -0
  738. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_parallel_dispatch_backcompat.py +0 -0
  739. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_parallel_dispatch_cli.py +0 -0
  740. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_adoption_bundle.py +0 -0
  741. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  742. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_dependency.py +0 -0
  743. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  744. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_injection.py +0 -0
  745. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_modular.py +0 -0
  746. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  747. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  748. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_schema_export.py +0 -0
  749. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_schema_source.py +0 -0
  750. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  751. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  752. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_build_bundle.py +0 -0
  753. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_classifier.py +0 -0
  754. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  755. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
  756. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  757. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  758. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  759. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_security.py +0 -0
  760. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  761. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  762. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  763. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_route_selection.py +0 -0
  764. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_cli.py +0 -0
  765. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  766. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_control_only.py +0 -0
  767. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_event.py +0 -0
  768. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  769. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_hardening.py +0 -0
  770. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  771. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_schema.py +0 -0
  772. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_validation.py +0 -0
  773. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_citation.py +0 -0
  774. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_docs.py +0 -0
  775. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  776. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  777. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  778. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  779. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  780. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_discovery.py +0 -0
  781. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_docs.py +0 -0
  782. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  783. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  784. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  785. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  786. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_portal.py +0 -0
  787. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  788. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_drift_audit.py +0 -0
  789. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  790. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  791. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_events_migration.py +0 -0
  792. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit.py +0 -0
  793. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  794. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  795. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  796. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  797. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_execution_policy.py +0 -0
  798. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_executor_degradation.py +0 -0
  799. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_full_phase_mode.py +0 -0
  800. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_handoff.py +0 -0
  801. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_handoff_migration.py +0 -0
  802. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_init.py +0 -0
  803. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_injection.py +0 -0
  804. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_install_status.py +0 -0
  805. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  806. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_harnesses.py +0 -0
  807. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_ir.py +0 -0
  808. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  809. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_scheduler.py +0 -0
  810. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_launcher.py +0 -0
  811. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_ledger_debug.py +0 -0
  812. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_ledger_dedup.py +0 -0
  813. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_live_adapters.py +0 -0
  814. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_maintenance.py +0 -0
  815. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_metrics.py +0 -0
  816. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_migration_regressions.py +0 -0
  817. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  818. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  819. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  820. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_models.py +0 -0
  821. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_native_flags.py +0 -0
  822. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  823. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pi_executor.py +0 -0
  824. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  825. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  826. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  827. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  828. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  829. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_mode.py +0 -0
  830. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  831. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_plan_manifest.py +0 -0
  832. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  833. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_planner_validation.py +0 -0
  834. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_policy.py +0 -0
  835. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_protocol_contract.py +0 -0
  836. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_provenance.py +0 -0
  837. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile.py +0 -0
  838. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  839. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  840. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  841. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reducers.py +0 -0
  842. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  843. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  844. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  845. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_roadmap_validate.py +0 -0
  846. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_rotation.py +0 -0
  847. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runner.py +0 -0
  848. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  849. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_boundary.py +0 -0
  850. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_decouple.py +0 -0
  851. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_package_data.py +0 -0
  852. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_projection.py +0 -0
  853. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_schema_flow.py +0 -0
  854. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  855. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  856. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_contract.py +0 -0
  857. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  858. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_install.py +0 -0
  859. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  860. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_blockers.py +0 -0
  861. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  862. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_reentry.py +0 -0
  863. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  864. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  865. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  866. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_state.py +0 -0
  867. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  868. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  869. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  870. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  871. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  872. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v22_e2e.py +0 -0
  873. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v22_principles.py +0 -0
  874. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  875. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_reconcile.py +0 -0
  876. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_sched.py +0 -0
  877. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_schedharden.py +0 -0
  878. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_wave_runner.py +0 -0
  879. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_observability.py +0 -0
  880. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_runner.py +0 -0
  881. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_state.py +0 -0
  882. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_worktrees.py +0 -0
  883. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  884. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_state_disagreement_312.py +0 -0
  885. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_worktree_executor.py +0 -0
  886. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  887. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  888. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  889. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_flag.py +0 -0
  890. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_markers.py +0 -0
  891. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  892. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  893. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  894. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  895. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  896. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pkg_layout_freeze.py +0 -0
  897. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_plan_ir_iter_waves.py +0 -0
  898. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_preflight_verification.py +0 -0
  899. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_president_ladder_config.py +0 -0
  900. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_president_wiring.py +0 -0
  901. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_presroute_cli.py +0 -0
  902. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_presroute_hardening.py +0 -0
  903. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_presroute_landed.py +0 -0
  904. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proc_cpu.py +0 -0
  905. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_attestation_workflow.py +0 -0
  906. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_cleanup.py +0 -0
  907. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_isolation.py +0 -0
  908. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_receipts.py +0 -0
  909. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_prune_merged_worktrees_script.py +0 -0
  910. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_public_installer.py +0 -0
  911. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pushflow.py +0 -0
  912. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_qualify_network_owner.py +0 -0
  913. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ratification_policy.py +0 -0
  914. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  915. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_portability_85c.py +0 -0
  916. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  917. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_verification_log.py +0 -0
  918. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  919. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_redaction_channel_control_isolation.py +0 -0
  920. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reflection_sync.py +0 -0
  921. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  922. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_release_pin_autotrack.py +0 -0
  923. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_repo_validation.py +0 -0
  924. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_leg_sandbox.py +0 -0
  925. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_monitor_policy.py +0 -0
  926. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_policy_govlean_repairs.py +0 -0
  927. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_stage_board_findings.py +0 -0
  928. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_staged_tree_authorization.py +0 -0
  929. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_summary.py +0 -0
  930. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_roadmap_authority.py +0 -0
  931. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_roadmap_ownership.py +0 -0
  932. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_roadmap_representation_consistency.py +0 -0
  933. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_route_log.py +0 -0
  934. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_route_policy_conformance.py +0 -0
  935. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_routing_invariants.py +0 -0
  936. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  937. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_adapter_output_720.py +0 -0
  938. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_event_log_hardening_720.py +0 -0
  939. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_procfs_identity_870.py +0 -0
  940. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_state_mirror_agreement.py +0 -0
  941. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_clone.py +0 -0
  942. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_egress.py +0 -0
  943. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_policy.py +0 -0
  944. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_preamble.py +0 -0
  945. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_retention.py +0 -0
  946. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_seat_host_uid_1098.py +0 -0
  947. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  948. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sibling_matcher_patterns.py +0 -0
  949. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_bundle_pinned.py +0 -0
  950. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_install_body_expansion.py +0 -0
  951. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_liveness_contract.py +0 -0
  952. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_plan_manifest_write.py +0 -0
  953. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_sources_seam.py +0 -0
  954. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skills_bundle_drift.py +0 -0
  955. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skills_canon_parity.py +0 -0
  956. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skills_src_claude_literal_lint.py +0 -0
  957. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_spec_conformance_gate.py +0 -0
  958. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_specpkgmin_wheel.py +0 -0
  959. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  960. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_status_read_only_62.py +0 -0
  961. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_subscription_scrub_xai_864.py +0 -0
  962. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  963. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  964. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sync_skills_apply_failloud.py +0 -0
  965. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_task_message_broker.py +0 -0
  966. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_task_message_broker_cli.py +0 -0
  967. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_task_message_resolver.py +0 -0
  968. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_tdd_chronology.py +0 -0
  969. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
  970. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_authority_import_811.py +0 -0
  971. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_e2e.py +0 -0
  972. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_invariants.py +0 -0
  973. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_merge.py +0 -0
  974. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_order_only_deps_47.py +0 -0
  975. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_prebuilt.py +0 -0
  976. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_review_authorization.py +0 -0
  977. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_review_monitoring_policy.py +0 -0
  978. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_review_packet.py +0 -0
  979. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_roadmap.py +0 -0
  980. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_runner.py +0 -0
  981. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_unattended_release.py +0 -0
  982. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  983. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  984. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  985. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  986. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  987. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_proofgate.py +0 -0
  988. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_dotdot_execution_428.py +0 -0
  989. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_evidence.py +0 -0
  990. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_evidence_validator.py +0 -0
  991. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_interpreter_guard_221.py +0 -0
  992. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_venv_identity_428.py +0 -0
  993. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verify_qualified_agy_route_core.py +0 -0
  994. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_visual_avatar_evidence_validator.py +0 -0
  995. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_visual_evidence_validator.py +0 -0
  996. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_workerpool_failure_isolation.py +0 -0
  997. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_workerpool_parallel.py +0 -0
  998. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_workerpool_worktree_alloc.py +0 -0
  999. {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/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.21
3
+ Version: 0.7.22
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.21 # …or pin an exact version
52
+ pip install phase-loop-runtime==0.7.22 # …or pin an exact version
53
53
  ```
54
54
 
55
55
  To pin a specific tag from source instead, substitute a tag from
@@ -288,6 +288,12 @@ closeout, the persisted `terminal-summary.json` reflects the runner's blocking v
288
288
  (the child's self-reported `complete`/`passed` is not overlaid back), preventing a
289
289
  stale "complete" summary from reconcile-skipping the work on the next run.
290
290
 
291
+ The `phase-loop-closeout-audit --repo .` command grades **ignored** paths by producer. It
292
+ accepts harness handoffs that carry the handoff contract, and a project's declared build
293
+ outputs backed by a recorded producer run. Declare those outputs in a committed
294
+ `.phase-loop-generated-outputs.json`; anything else still blocks. See
295
+ `docs/phase-loop/closeout-generated-outputs.md` (agent-harness#1139).
296
+
291
297
  ## Conformance library (one library, two roles)
292
298
 
293
299
  `phase_loop_runtime.conformance` is the named, stable, importable surface for the
@@ -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.21 # …or pin an exact version
22
+ pip install phase-loop-runtime==0.7.22 # …or pin an exact version
23
23
  ```
24
24
 
25
25
  To pin a specific tag from source instead, substitute a tag from
@@ -258,6 +258,12 @@ closeout, the persisted `terminal-summary.json` reflects the runner's blocking v
258
258
  (the child's self-reported `complete`/`passed` is not overlaid back), preventing a
259
259
  stale "complete" summary from reconcile-skipping the work on the next run.
260
260
 
261
+ The `phase-loop-closeout-audit --repo .` command grades **ignored** paths by producer. It
262
+ accepts harness handoffs that carry the handoff contract, and a project's declared build
263
+ outputs backed by a recorded producer run. Declare those outputs in a committed
264
+ `.phase-loop-generated-outputs.json`; anything else still blocks. See
265
+ `docs/phase-loop/closeout-generated-outputs.md` (agent-harness#1139).
266
+
261
267
  ## Conformance library (one library, two roles)
262
268
 
263
269
  `phase_loop_runtime.conformance` is the named, stable, importable surface for the
@@ -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.21"
7
+ version = "0.7.22"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.21"
21
+ __version__ = "0.7.22"
@@ -551,7 +551,7 @@ never through — the review operation `public_board_review.v1`. Frozen falsifie
551
551
  - **Rung routes** (`president_adapter.build_president_invoke(..., monitoring_policy=)`).
552
552
  Unseated rung → typed `president_unavailable` (descend). `sol` / `grok` → the brokered
553
553
  `_exec_leg` in a throwaway directory, whose only launch is `launch_provider`. `gemini` →
554
- the broker's acknowledged agy stream with the PRESIDENT's own final instruction (a ruling,
554
+ the broker's agy stream with the PRESIDENT's own final instruction (a ruling,
555
555
  not a review verdict), launched through `_run_leg_with_liveness` → `launch_provider` and
556
556
  decoded by `_broker_gemini_stream_result`; with the agy subscription credential it runs in
557
557
  the broker's agy profile, without one in an empty private HOME (no credential of any kind),
@@ -672,7 +672,60 @@ The TUI timestamp is refreshed by novel output lines, review-file growth and
672
672
  transcript growth — a startup banner is novel output and refreshes it; only
673
673
  repeated cosmetic repaints do not, once the existing novelty detector has seen
674
674
  their text. The CPU-tick heartbeat never refreshes it.
675
- Neither state is a health attestation or permission to terminate. Frozen
675
+ Neither state is a health attestation or permission to terminate.
676
+ The record also carries a progress notice (agent-harness#1176). When no genuine
677
+ progress has been seen for `stall_notice_s` (default 3600 s; override with
678
+ `PHASE_LOOP_REVIEW_STALL_NOTICE_S`), and no progress at all counts from seat
679
+ start, `progress_notice` is `seat_progress_stalled`, `progress_notice_count`
680
+ counts crossings, and one operator warning with only that code and numbers is
681
+ logged. Resumed progress and a terminal observation clear the active notice;
682
+ `last_progress_notice` and the count stay as history. The notice never ends the
683
+ seat. The record reaches the board: `advisor-board --json` legs carry it as
684
+ `review_monitoring`, the text summary prints a `[seat_progress_stalled]` line
685
+ per affected seat on stderr, each streamed per-leg verdict file carries it, and
686
+ the governed record adds a `seat_progress_stalled` warn finding per seat.
687
+ The exact brokered Claude transcript is classified once per change, by
688
+ `_claude_transcript_outcome`, into one outcome; the answer parser and the
689
+ give-up detector are views of it, so they cannot disagree:
690
+ - `answer`: the route's answer parser (the agent-harness#1002/#1077/#1017
691
+ rules; the president route fails closed on any error record in the turn)
692
+ returns text. An accepted answer always wins, whatever follows it. An
693
+ `isApiErrorMessage` record is never answer text. Every record of the answer
694
+ must be a member of the current request (defined below; a sidechain sighting
695
+ counts), so a record that is not evidence for the request never answers it
696
+ either. If the text is not an
697
+ accepted verdict, the leg is handed it back as
698
+ `claude_tui_broker_terminal_nonconforming` instead of waiting.
699
+ - `gave_up`: no answer, and the last live record after the current request is
700
+ an `isApiErrorMessage` give-up. The leg ends at once as DEGRADED with
701
+ `claude_seat_output_budget_exhausted` (`error: max_output_tokens`),
702
+ `claude_seat_usage_limited` (`error: rate_limit` with
703
+ `quotaLimits.status: rejected`, a subscription cap, followed by
704
+ `: usage_limit (resets HH:MM, Mon D YYYY)` rendered in UTC from
705
+ `quotaLimits.resetsAt` when present), `claude_seat_rate_limited` (any other
706
+ `rate_limit`) or `claude_seat_provider_api_error`.
707
+ - `rejected`: no answer, and the turn ended in a completed (`end_turn` /
708
+ `stop_sequence`) answer carrying a text block that the route's parser refuses.
709
+ The leg ends at once as DEGRADED with `claude_seat_transcript_rejected`.
710
+ - `pending`: anything else (an open or capped message, the CLI's resume prompt,
711
+ a newer request, a writer mid-append). A `max_tokens` stop is never terminal.
712
+ The "last live record" is decided in APPEND order among the current request's
713
+ records, chosen by membership, not position. The current request is the last
714
+ user record that is not `isMeta`, carries no tool_result and is not a replay (its
715
+ uuid and content recurring, whatever its completion metadata, as in the answer
716
+ parser). A record is evidence for it only when it is a new version first seen in
717
+ it: its uuid was first seen after the request (a record of an earlier request is
718
+ never evidence, wherever it is appended, except an `isApiErrorMessage` record
719
+ appended in the current request, which always is); it is not an exact replay of a
720
+ version already seen (same uuid, content, `stop_reason` presence and value, and
721
+ error flag) nor a stale open copy of a stopped record whose content is unchanged;
722
+ and it is not a sidechain record (`isSidechain`), which the answer parser drops
723
+ too. An open record first seen in the current request, even a changed version
724
+ after its own stop, is still streaming and reads `pending`. An `isApiErrorMessage`
725
+ record is terminal event evidence and is never collapsed into an earlier
726
+ version of its uuid. Replays and rewritten metadata are not progress. `provider_terminal_state` records the code that
727
+ ended the leg. `isApiErrorMessage` matches JSON `true` or the string `"true"`,
728
+ on the record or the message. Frozen
676
729
  broker request/response keys, status literals, and observer envelopes are unchanged.
677
730
 
678
731
  When staging requires egress isolation, acquisition follows staged-tree and operation
@@ -687,8 +740,10 @@ review text and the exception in detail; sandbox facts describe actual enforceme
687
740
 
688
741
  The Linux x64 subscription `agy` entry image must match one member of the closed
689
742
  set `gemini_heartbeat.QUALIFIED_IMAGES`: 1.2.11 SHA256
690
- `ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56` or 1.2.12 SHA256
691
- `ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`. Each member
743
+ `ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`, 1.2.12 SHA256
744
+ `ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`, 1.2.14 SHA256
745
+ `0d0d3eba22daf29504dd290151c7ed9a4d33b0c6aa0acfc5da27bc3b01d2f029` or 1.2.15 SHA256
746
+ `5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164`. Each member
692
747
  carries its measured help digest and has its own qualification record; the
693
748
  evidence catalog and the runtime set must name exactly the same members.
694
749
  The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
@@ -710,7 +765,8 @@ HOME fallback truthfully if HOME is absent. Legitimate refresh writes survive.
710
765
  The real qualification driver requires an explicit HOME and checks target
711
766
  presence before and after, without reading its contents.
712
767
 
713
- The broker transports same-session acknowledged input over stdin, with no tree
768
+ The broker transports same-session input over stdin (one event when the sealed prompt fits
769
+ one chunk, acknowledged chunks otherwise; agent-harness#1175), with no tree
714
770
  attachment, `--add-dir`, permission bypass, retry or native thinking timer. Empty,
715
771
  rejected and nonzero-exit streams remain non-votes with fixed diagnostics;
716
772
  provider stdout/stderr and arbitrary exception strings are not substituted for
@@ -839,3 +895,70 @@ A non-release `agy` image is admitted only by verifying it, never by trusting it
839
895
  verified pushed oid in its own `watch_push` entry, and reads both the record and the
840
896
  created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
841
897
  agree. It refuses when it cannot prove its open-PR listing complete.
898
+
899
+ ## ABDFALSIFY — Executable review findings (IF-0-EXECFIND-1)
900
+
901
+ An optional `falsifier` attachment names one `FindingFalsifier` with
902
+ `finding_id`, `new_test_path`, `expected_nodeid`, and a unified `diff` creating
903
+ only `phase-loop-runtime/tests/test_finding_<finding_id>.py`. A
904
+ `FindingFalsifierAttachment` contains a tuple of these entries with unique
905
+ finding IDs. The attachment is a non-field property on `PanelLegResult`; it
906
+ does not change the serialized leg or board schema. The seat supplies text,
907
+ never an executable command or a claimed test outcome.
908
+
909
+ `run_finding_falsifier` accepts one attached falsifier, board `seat_key`, canonical
910
+ repository, positive wall-clock/output bounds, and a single-use
911
+ `FalsifierIsolationAuthorization` bound to the exact 40-character `reviewed_sha`.
912
+ Its identity is `public_board_falsifier.v1`; its child has no credentials,
913
+ network egress, or live-tree mount. The source must be clean at that SHA.
914
+ Before applying the diff, the staged materialized path set, bytes, symlink
915
+ targets, and executable bits must equal the reviewed Git tree, including no
916
+ ignored extra files. Only the named pytest node runs in the staged clone.
917
+
918
+ Each run stages its own tree from the canonical repository at the head under
919
+ test, never from a seat's tree, and copies installed dependency files into a
920
+ per-run import root (copies, never links; uv's `--link-mode=copy` equivalent).
921
+ Those two trees are the run's protected objects: every regular file in them,
922
+ `.git` included, must have a link count of exactly one before the node starts
923
+ and after it exits, or the run is `error` (agent-harness#1134). The shared system
924
+ interpreter is read-only to the run and is not a protected object. The runner
925
+ resolves `/usr/bin/python3` once and launches exactly that file. Falsifier runs
926
+ execute without site processing (`-S`): no `.pth`, `sitecustomize` or
927
+ `usercustomize` runs and no host site directory is on `sys.path`, so the
928
+ interpreter's inputs are its standard-library entries plus the run's explicit
929
+ staged paths. Every dependency, pytest included, comes from the per-run staged
930
+ dependency root (a distribution without a RECORD is staged from its declared
931
+ top-level modules); a host site directory on the falsifier path is refused as
932
+ `falsifier_host_site_packages_refused`. The measured set is the launched
933
+ interpreter's own `sys.path` under the same flags and environment, so the
934
+ inventory and the launch are identical by construction. Every entry is
935
+ digested before and after the run: archive entries and `.pth`, archive and
936
+ customize files by content, directories by an lstat manifest (mode, size,
937
+ device, inode, mtime, ctime), and every symlink target outside the set followed
938
+ and hashed by content. An entry the runner cannot digest fails closed, and a
939
+ changed scope or digest is `error`.
940
+ Before staging, the canonical repository must not be reachable through any
941
+ system-root mount (compared by device and in-filesystem path, not by pathname),
942
+ and a repository that contains any mount point is refused as
943
+ `falsifier_repository_submount_refused`. The record schema is unchanged; the reason
944
+ stays in the result's `detail`.
945
+
946
+ The frozen outcome tuple is `red_on_head`, `green_on_head`, `apply_failed`,
947
+ `node_missing`, `error`. Pytest emits JUnit, but the recorded outcome comes from
948
+ the wrapper's reported call-phase result; the test-writable XML is not read as
949
+ authority. Seat-authored and reviewed-tree Python (including conftest) run
950
+ in the wrapper's process and can forge
951
+ the reported status, including a parent-keyed frame. RED and GREEN are therefore
952
+ observed, untrusted results: neither binds nor dismisses a finding. Drift,
953
+ expiry, unavailable isolation, and incomplete evidence are `error`; every
954
+ valid attached result remains a blocking `finding_receipt` pending a president
955
+ ruling. The metadata-only
956
+ `finding_falsifier.v1` record has exactly `schema`,
957
+ `authorization_identity`, `seat_key`, `reviewed_sha`, `finding_id`, `nodeid`,
958
+ `outcome`, `red_output_digest`, `diff_digest`, `wall_clock_bound_s`, and
959
+ `output_cap_bytes`. `diff_digest` hashes the offered UTF-8 diff bytes;
960
+ `red_output_digest` hashes separately captured stdout followed by stderr
961
+ and is null unless RED. The caller binds the record with SHA-256 over
962
+ canonical JSON (`sort_keys=True`, compact separators, `ensure_ascii=False`).
963
+ The full freeze and golden values live in
964
+ `tests/data/execfind_falsifier_attachment_v1.golden.json`.
@@ -857,6 +857,22 @@ class ReviewIsolationAuthorization:
857
857
  staged_tree_sha256: str | None = None
858
858
 
859
859
 
860
+ @dataclass(frozen=True)
861
+ class FalsifierIsolationAuthorization:
862
+ """Single-use authority to run one attached test against a reviewed commit."""
863
+
864
+ operation: str
865
+ reviewed_sha: str
866
+ canonical_repo_sha256: str
867
+ child_credentialless: bool
868
+ child_network_egress: bool
869
+ live_tree_exposed: bool
870
+ issued_monotonic_ns: int
871
+ _seal: object
872
+ routes: tuple[tuple[str, str], ...] = ()
873
+ monitoring_policy: str = "bounded"
874
+
875
+
860
876
  def _staged_tree_digest(canonical_repo_authority: Path | str | None) -> str | None:
861
877
  """Digest of the reviewed tree a seat will be allowed to read.
862
878
 
@@ -903,6 +919,7 @@ def _canonical_repo_digest(canonical_repo_authority: Path | str | None) -> str:
903
919
  text=True,
904
920
  stderr=subprocess.DEVNULL,
905
921
  timeout=3,
922
+ env={key: value for key, value in os.environ.items() if not key.startswith("GIT_")},
906
923
  ).strip()
907
924
  except (OSError, subprocess.SubprocessError):
908
925
  raise ValueError("HARDEN review has no canonical repository authority") from None
@@ -1211,6 +1228,83 @@ def close_review_isolation_authorization(
1211
1228
  lease.cancel_event.set()
1212
1229
 
1213
1230
 
1231
+ def prepare_falsifier_isolation_authorization(
1232
+ *, repo: Path, reviewed_sha: str,
1233
+ ) -> FalsifierIsolationAuthorization:
1234
+ """Mint one credentialless, no-egress staged-test operation."""
1235
+ if platform.system() != "Linux" or len(reviewed_sha) != 40 or any(
1236
+ character not in "0123456789abcdef" for character in reviewed_sha
1237
+ ):
1238
+ raise ValueError("invalid falsifier repository or reviewed SHA")
1239
+ authorization = FalsifierIsolationAuthorization(
1240
+ operation="public_board_falsifier.v1",
1241
+ reviewed_sha=reviewed_sha,
1242
+ canonical_repo_sha256=_canonical_repo_digest(repo),
1243
+ child_credentialless=True,
1244
+ child_network_egress=False,
1245
+ live_tree_exposed=False,
1246
+ issued_monotonic_ns=time.monotonic_ns(),
1247
+ _seal=_AUTHORIZATION_SEAL,
1248
+ )
1249
+ _remember_lease(authorization) # type: ignore[arg-type]
1250
+ return authorization
1251
+
1252
+
1253
+ def _falsifier_authorization_lease(
1254
+ authorization: FalsifierIsolationAuthorization | None,
1255
+ ) -> _ReviewInvocationLease:
1256
+ if (
1257
+ not isinstance(authorization, FalsifierIsolationAuthorization)
1258
+ or authorization._seal is not _AUTHORIZATION_SEAL
1259
+ or authorization.operation != "public_board_falsifier.v1"
1260
+ or not authorization.child_credentialless
1261
+ or authorization.child_network_egress
1262
+ or authorization.live_tree_exposed
1263
+ ):
1264
+ raise ValueError("missing, forged, or mismatched falsifier authorization")
1265
+ return _lease_for(authorization) # type: ignore[arg-type]
1266
+
1267
+
1268
+ def revalidate_falsifier_isolation_authorization(
1269
+ authorization: FalsifierIsolationAuthorization | None, *, repo: Path,
1270
+ ) -> None:
1271
+ lease = _falsifier_authorization_lease(authorization)
1272
+ if authorization.canonical_repo_sha256 != _canonical_repo_digest(repo):
1273
+ raise ValueError("falsifier authorization repository drifted")
1274
+ with lease.lock:
1275
+ if lease.closed or (
1276
+ not lease.active
1277
+ and time.monotonic_ns() - lease.prepared_monotonic_ns > _PRE_ACTIVATION_FRESHNESS_NS
1278
+ ):
1279
+ raise ValueError("falsifier authorization is closed or expired")
1280
+
1281
+
1282
+ def activate_falsifier_isolation_authorization(
1283
+ authorization: FalsifierIsolationAuthorization, *, repo: Path,
1284
+ ) -> None:
1285
+ revalidate_falsifier_isolation_authorization(authorization, repo=repo)
1286
+ lease = _lease_for(authorization) # type: ignore[arg-type]
1287
+ with lease.lock:
1288
+ if lease.closed or lease.active:
1289
+ raise ValueError("falsifier authorization already consumed")
1290
+ lease.active = True
1291
+
1292
+
1293
+ def close_falsifier_isolation_authorization(
1294
+ authorization: FalsifierIsolationAuthorization | None,
1295
+ ) -> None:
1296
+ if not isinstance(authorization, FalsifierIsolationAuthorization):
1297
+ return
1298
+ try:
1299
+ lease = _lease_for(authorization) # type: ignore[arg-type]
1300
+ except ValueError:
1301
+ return
1302
+ with lease.lock:
1303
+ lease.active = False
1304
+ lease.closed = True
1305
+ lease.cancel_event.set()
1306
+
1307
+
1214
1308
  def derive_review_leg_authorization(
1215
1309
  authorization: ReviewIsolationAuthorization | None,
1216
1310
  artifact: str,
@@ -1667,10 +1761,15 @@ __all__ = [
1667
1761
  "harden_subscription_model",
1668
1762
  "harden_subscription_review_board",
1669
1763
  "ReviewIsolationAuthorization",
1764
+ "FalsifierIsolationAuthorization",
1670
1765
  "ReviewCompositionAuthorization",
1671
1766
  "ReviewLegAuthorization",
1672
1767
  "ParentUnixBroker",
1673
1768
  "prepare_review_isolation_authorization",
1769
+ "prepare_falsifier_isolation_authorization",
1770
+ "revalidate_falsifier_isolation_authorization",
1771
+ "activate_falsifier_isolation_authorization",
1772
+ "close_falsifier_isolation_authorization",
1674
1773
  "prepare_review_composition_authorization",
1675
1774
  "current_review_composition_authorization",
1676
1775
  "clear_review_composition_authorization",
@@ -78,7 +78,10 @@ CANONICAL_VALID_PAIRS: tuple[tuple[str, str], ...] = (
78
78
  ("gpt-5.6-sol", "codex"), # legacy default id remains expressible
79
79
  ("gpt-6-sol", "codex"), # explicit seat on user/ad-hoc boards (not a governed grok stand-in)
80
80
  ("gpt-6-sol", "opencode"), # same family; matches the production registry's runnable_by
81
+ ("gpt-6.1-sol", "codex"), # explicit seat, selected by board config (not a default)
82
+ ("gpt-6.1-sol", "opencode"), # same family; registered by vendor family, not launch-verified
81
83
  ("claude-sonnet-5", "claude"),
84
+ ("claude-sonnet-5-5", "claude"), # explicit seat, selected by board config (not a default)
82
85
  ("claude-opus-5-5", "claude"),
83
86
  ("claude-fable-5-1", "claude"),
84
87
  ("Gemini 3.1 Pro", "gemini"),
@@ -257,7 +257,9 @@ _MODEL_DEFS: tuple[tuple[str, str, str], ...] = (
257
257
  ("gpt-6-astra", "codex", "max"),
258
258
  ("gpt-5.6-sol", "codex", "max"), # explicit legacy seat (fleet default before 2026-09-04)
259
259
  ("gpt-6-sol", "codex", "max"), # explicit seat (codex's own default model); not a board default
260
+ ("gpt-6.1-sol", "codex", "max"), # explicit seat, selected by board config; not a board default
260
261
  ("claude-sonnet-5", "claude", "max"),
262
+ ("claude-sonnet-5-5", "claude", "max"), # explicit seat, selected by board config; not a board default
261
263
  ("claude-opus-4-8", "claude", "max"),
262
264
  # design-model-tier-taxonomy.md: claude-opus-5 is the new Claude heavy model.
263
265
  # opus-4-8 is retained above — still referenced by tests (advisor_board_schema) —
@@ -1151,6 +1151,14 @@ def build_parser() -> argparse.ArgumentParser:
1151
1151
  "--agy-canary-private-board-name",
1152
1152
  help="Capture-only basename for the full board JSON inside the private evidence root.",
1153
1153
  )
1154
+ # agent-harness#1204: the brief points at files in the staged tree.
1155
+ advisor_board_sub.add_argument(
1156
+ "--pointer-brief", action="store_true", default=False,
1157
+ help=("Declare that the brief points the reviewers at files in the staged tree instead of "
1158
+ "inlining them. Before any seat launches, each seat whose route cannot open those "
1159
+ "files is warned (seat_pointer_brief_unreadable, on stderr); it still runs, but its "
1160
+ "verdict is not counted as source-grounded, and the floor counts grounded seats only."),
1161
+ )
1154
1162
  # agent-harness#802: an advisory, non-gating run over a standalone document.
1155
1163
  advisor_board_sub.add_argument(
1156
1164
  "--advisory", action="store_true", default=False,
@@ -2068,7 +2076,7 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2068
2076
  write_private_board,
2069
2077
  )
2070
2078
  from .panel_invoker import _mode_instructions, _preflight_gemini_heartbeat, invoke_board
2071
- from .panel_invoker import PresidentPolicyError
2079
+ from .panel_invoker import NativeFillRefusalError, PresidentPolicyError
2072
2080
 
2073
2081
  # The authoritative review instructions: the code-review brief, or the advisory contract,
2074
2082
  # staged as the brief file every seat and native fill binds (agent-harness#802).
@@ -2123,6 +2131,12 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2123
2131
  if capture is None and private_board_name:
2124
2132
  print("advisor-board: private board name requires PHASE_LOOP_AGY_CANARY_EVIDENCE_DIR", file=sys.stderr)
2125
2133
  return 2
2134
+ pointer_brief = bool(getattr(args, "pointer_brief", False))
2135
+ if capture is not None and pointer_brief:
2136
+ # The capture board's schema is closed; a pointer-brief board is not a capture.
2137
+ print("advisor-board: --pointer-brief cannot be combined with agy canary capture", file=sys.stderr)
2138
+ capture.close()
2139
+ return 2
2126
2140
  if capture is not None and not bool(getattr(args, "json", False)):
2127
2141
  print("advisor-board: capture requires --json so full board output stays private", file=sys.stderr)
2128
2142
  capture.close()
@@ -2315,6 +2329,10 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2315
2329
  "agy_canary_capture": capture,
2316
2330
  **({"monitoring_policy": monitoring_policy} if monitoring_policy != "bounded" else {}),
2317
2331
  }
2332
+ if pointer_brief:
2333
+ # agent-harness#1204: the preflight's notices are printed BEFORE any launch.
2334
+ invoke_kwargs["pointer_brief"] = True
2335
+ invoke_kwargs["on_seat_preflight"] = _print_seat_preflight
2318
2336
  if review_authorization is not None:
2319
2337
  invoke_kwargs["review_authorization"] = review_authorization
2320
2338
  invoke_kwargs["canonical_repo_authority"] = canonical_repo_authority
@@ -2326,6 +2344,14 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2326
2344
  if capture is not None:
2327
2345
  capture.close()
2328
2346
  return 2
2347
+ except NativeFillRefusalError as exc:
2348
+ # agent-harness#1183: a fill refused at binding (the seat did not defer) is a native-fill
2349
+ # refusal naming the seat's real outcome, never an artifact-staging failure.
2350
+ refusal = exc.refusal
2351
+ print(f"advisor-board: native fill refused [{refusal.reason}]: {refusal.detail} (seat {refusal.seat_key})", file=sys.stderr)
2352
+ if capture is not None:
2353
+ capture.close()
2354
+ return 2
2329
2355
  except (OSError, ValueError, AgyCanaryEvidenceError) as exc:
2330
2356
  # Artifact staging / resolution failures fail closed with a recoverable exit,
2331
2357
  # not a traceback.
@@ -2351,13 +2377,17 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2351
2377
  independence = board_independence(board)
2352
2378
  usable_count = len(result.usable_legs)
2353
2379
  usable_vendors = {leg.leg for leg in result.usable_legs}
2380
+ # agent-harness#1204 (ii): the floor counts source-grounded seats only. Without
2381
+ # --pointer-brief no seat is marked, so this equals ``usable_count``.
2382
+ from .seat_preflight import grounded_usable_legs
2383
+ grounded_count = len(grounded_usable_legs(result))
2354
2384
  # A runnable review command must signal when the result is NOT a usable review.
2355
2385
  # Tie the exit code to the board's own contract: it targets 4 independent
2356
2386
  # reviewers with a HARD FLOOR of ``FLOOR_SEATS`` (3). If fewer than the floor of
2357
2387
  # legs returned an OK verdict with text (the rest DEGRADED / ERROR / TIMEOUT /
2358
2388
  # EMPTY / UNAVAILABLE — e.g. the claude leg deferring under Claude Code is one
2359
2389
  # expected non-OK), the board is below its independence floor → exit nonzero.
2360
- usable = usable_count >= FLOOR_SEATS
2390
+ usable = grounded_count >= FLOOR_SEATS
2361
2391
  exit_code = 0 if usable else 1
2362
2392
  # PRESROUTE: a president-tier board that the president ruled BLOCKING is not a
2363
2393
  # usable landing; say so and exit nonzero.
@@ -2426,10 +2456,22 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2426
2456
  # ABDNATIVE (#183): a deferred claude seat carries the
2427
2457
  # typed native-fill request the harness must run; None otherwise.
2428
2458
  "needs_native_agent": _native_agent_request_json(leg),
2459
+ # agent-harness#1176: a heartbeat_only seat's monitoring record (progress
2460
+ # notice, provider terminal state); absent under the bounded policy.
2461
+ **({"review_monitoring": dict(leg.review_monitoring)}
2462
+ if leg.review_monitoring is not None else {}),
2429
2463
  }
2430
2464
  for leg in result.legs
2431
2465
  ],
2432
2466
  }
2467
+ if pointer_brief:
2468
+ # agent-harness#1204: present only for a pointer-brief board, so every other
2469
+ # payload (and the closed capture schema) is unchanged.
2470
+ payload["grounded_seats"] = grounded_count
2471
+ payload["notices"] = [n.as_json() for n in result.seat_preflight_notices]
2472
+ for entry, leg in zip(payload["legs"], result.legs):
2473
+ entry["source_grounded"] = leg.source_grounded
2474
+ entry["notices"] = [n.as_json() for n in leg.seat_preflight_notices]
2433
2475
  if advisory:
2434
2476
  payload.update(_advisory_labels(review_brief, composed_board=board.name))
2435
2477
  if capture is not None:
@@ -2475,6 +2517,9 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2475
2517
  shown = _finalize_leg_detail(leg.detail)
2476
2518
  detail = f" — {shown}" if shown else ""
2477
2519
  print(f" [{leg.status}] {leg.seat_key}{detail}")
2520
+ for notice in leg.seat_preflight_notices:
2521
+ # agent-harness#1204: once per seat, from the notice table's literals.
2522
+ print(f" notice {notice.code}: {notice.what} -- fix: {notice.fix}")
2478
2523
  # Print each reviewer's actual verdict text so the board can be reconciled
2479
2524
  # from the command's output (not just leg statuses).
2480
2525
  text = (leg.text or "").strip()
@@ -2484,6 +2529,19 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2484
2529
  # The statuses/verdicts are ADVISORY evidence — the operator reconciles them; a
2485
2530
  # non-OK leg (DEGRADED/UNAVAILABLE/…) is a gap to fill, not a passed review.
2486
2531
  print("advisor-board: verdicts are advisory — reconcile the legs; check each leg status.")
2532
+ # agent-harness#1176: a heartbeat_only seat that went without genuine progress past its
2533
+ # notice window says so in the board summary, whatever its final status.
2534
+ for leg in result.legs:
2535
+ monitoring = leg.review_monitoring or {}
2536
+ count = monitoring.get("progress_notice_count")
2537
+ if isinstance(count, int) and count > 0:
2538
+ window = monitoring.get("stall_notice_s")
2539
+ window_s = f"{int(window)}s" if isinstance(window, (int, float)) else "its window"
2540
+ print(
2541
+ f"advisor-board: [seat_progress_stalled] {leg.seat_key} — no genuine progress "
2542
+ f"for {window_s} ({count} notice(s)); final status {leg.status}",
2543
+ file=sys.stderr,
2544
+ )
2487
2545
  # #183: surface the requested-vs-delivered shortfall LOUDLY (stderr) so a
2488
2546
  # floor-satisfying board is never mistaken for the full requested board, and
2489
2547
  # name the seats a native harness can fill itself.
@@ -2504,14 +2562,22 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
2504
2562
  why = f" — {shown}" if shown else ""
2505
2563
  print(f"advisor-board: [{leg.status}] {leg.seat_key}{why}{fill}", file=sys.stderr)
2506
2564
  if not usable:
2565
+ grounded = (f" ({grounded_count} source-grounded)" if grounded_count != usable_count
2566
+ else "")
2507
2567
  print(
2508
- f"advisor-board: only {usable_count} usable review leg(s) < floor {FLOOR_SEATS} "
2568
+ f"advisor-board: only {usable_count} usable review leg(s){grounded} < floor {FLOOR_SEATS} "
2509
2569
  "— below the board's independence floor, not a usable board.",
2510
2570
  file=sys.stderr,
2511
2571
  )
2512
2572
  return exit_code
2513
2573
 
2514
2574
 
2575
+ def _print_seat_preflight(notices) -> None:
2576
+ """agent-harness#1204: the pointer-brief preflight, printed before any seat launches."""
2577
+ for notice in notices:
2578
+ print(f"advisor-board: preflight: {notice.render()}", file=sys.stderr)
2579
+
2580
+
2515
2581
  def _outside_agent_preflight_command(args: argparse.Namespace) -> int:
2516
2582
  from .conformance.outside_agent_advisory import (
2517
2583
  build_malformed_outside_agent_advisory_evidence,
@@ -3139,7 +3205,9 @@ def _hotfix_verification_commands(plan_stub: Path) -> list[list[str]]:
3139
3205
 
3140
3206
 
3141
3207
  def _redact_hotfix_reason(reason: str) -> str:
3142
- return " ".join(reason.split())[:200]
3208
+ from .credential_redaction import redact_text
3209
+
3210
+ return " ".join(redact_text(reason).split())[:200]
3143
3211
 
3144
3212
 
3145
3213
  def _migrate_events_command(*, repo: Path, dry_run: bool, backup_suffix: str) -> int: