phase-loop-runtime 0.7.20__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.20/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.22}/PKG-INFO +8 -2
  2. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/README.md +7 -1
  3. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/pyproject.toml +1 -1
  4. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +232 -5
  6. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/backing.py +99 -0
  7. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/config.py +30 -1
  8. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +6 -0
  9. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/fixtures.py +5 -0
  10. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/registries.py +3 -0
  11. phase_loop_runtime-0.7.22/src/phase_loop_runtime/agy_provenance.py +313 -0
  12. phase_loop_runtime-0.7.22/src/phase_loop_runtime/agy_qualification.py +1565 -0
  13. phase_loop_runtime-0.7.22/src/phase_loop_runtime/agy_watch.py +518 -0
  14. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/cli.py +87 -4
  15. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_classifier.py +121 -34
  16. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/live.py +136 -48
  17. phase_loop_runtime-0.7.22/src/phase_loop_runtime/credential_redaction.py +488 -0
  18. phase_loop_runtime-0.7.22/src/phase_loop_runtime/falsifier.py +270 -0
  19. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/gemini_heartbeat.py +166 -36
  20. phase_loop_runtime-0.7.22/src/phase_loop_runtime/generated_outputs.py +843 -0
  21. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_premerge.py +5 -2
  22. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_review.py +280 -6
  23. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/launcher.py +116 -124
  24. phase_loop_runtime-0.7.22/src/phase_loop_runtime/lease_supervisor.py +439 -0
  25. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/observability.py +3 -1
  26. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/panel_invoker.py +763 -161
  27. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +3 -1
  28. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_manifest.py +118 -57
  29. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/prompts.py +84 -1
  30. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/publishing.py +413 -11
  31. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/redaction.py +0 -5
  32. phase_loop_runtime-0.7.22/src/phase_loop_runtime/review_stage.py +1163 -0
  33. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  34. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runner.py +42 -17
  35. phase_loop_runtime-0.7.22/src/phase_loop_runtime/seat_preflight.py +170 -0
  36. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +10 -5
  37. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +2 -5
  38. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +10 -5
  39. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +2 -2
  40. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +10 -5
  41. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +2 -2
  42. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +10 -5
  43. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_runner.py +3 -1
  44. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/verification_evidence.py +52 -2
  45. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22/src/phase_loop_runtime.egg-info}/PKG-INFO +8 -2
  46. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/SOURCES.txt +21 -0
  47. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_config.py +47 -0
  48. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_registries.py +65 -0
  49. phase_loop_runtime-0.7.22/tests/test_agy_self_qualification.py +2741 -0
  50. phase_loop_runtime-0.7.22/tests/test_agy_single_event_transport_1175.py +187 -0
  51. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_classifier.py +16 -6
  52. phase_loop_runtime-0.7.22/tests/test_closeout_generated_outputs.py +1418 -0
  53. phase_loop_runtime-0.7.22/tests/test_credential_redaction_shapes.py +502 -0
  54. phase_loop_runtime-0.7.22/tests/test_execfind_governed_promotion.py +441 -0
  55. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_executor_exited_without_closeout_785.py +42 -2
  56. phase_loop_runtime-0.7.22/tests/test_fabpub_zero_history_bootstrap.py +1631 -0
  57. phase_loop_runtime-0.7.22/tests/test_finding_F001.py +28 -0
  58. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_gemini_heartbeat_bootstrap.py +26 -8
  59. phase_loop_runtime-0.7.22/tests/test_gemini_heartbeat_filesystem_view.py +262 -0
  60. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_review.py +3 -2
  61. phase_loop_runtime-0.7.22/tests/test_launcher_exec_supervisor.py +1076 -0
  62. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_legible_roadmap_contract.py +6 -6
  63. phase_loop_runtime-0.7.22/tests/test_native_fill_refusal_cause.py +111 -0
  64. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_claude_review_output.py +3 -1
  65. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_liveness_188.py +66 -0
  66. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_launcher.py +5 -3
  67. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_schedharden.py +23 -7
  68. phase_loop_runtime-0.7.22/tests/test_plan_manifest_append_order_1174.py +205 -0
  69. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pr_readback_789.py +4 -2
  70. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_president_heartbeat_1001.py +4 -1
  71. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_publishing.py +511 -0
  72. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_qualified_agy_image_set.py +6 -2
  73. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_qualify_network_owner.py +3 -10
  74. phase_loop_runtime-0.7.22/tests/test_redaction_main_coverage_cases.py +57 -0
  75. phase_loop_runtime-0.7.22/tests/test_review_seat_stall_1176.py +1432 -0
  76. phase_loop_runtime-0.7.22/tests/test_review_stage_binding.py +1913 -0
  77. phase_loop_runtime-0.7.22/tests/test_seat_preflight_1204.py +461 -0
  78. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_verify_qualified_agy_route_core.py +2 -1
  79. phase_loop_runtime-0.7.20/src/phase_loop_runtime/review_stage.py +0 -456
  80. phase_loop_runtime-0.7.20/tests/test_fabpub_zero_history_bootstrap.py +0 -582
  81. phase_loop_runtime-0.7.20/tests/test_review_stage_binding.py +0 -183
  82. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/MANIFEST.in +0 -0
  83. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/protocol/protocol.md +0 -0
  84. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/setup.cfg +0 -0
  85. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  86. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  87. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  88. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  89. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  90. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  91. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  92. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  93. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  94. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  95. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  96. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  97. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  98. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  99. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  100. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  101. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  102. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  103. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  104. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  105. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  106. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  107. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  108. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  109. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  110. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  111. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  112. {phase_loop_runtime-0.7.20 → 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
  113. {phase_loop_runtime-0.7.20 → 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
  114. {phase_loop_runtime-0.7.20 → 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
  115. {phase_loop_runtime-0.7.20 → 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
  116. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  117. {phase_loop_runtime-0.7.20 → 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
  118. {phase_loop_runtime-0.7.20 → 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
  119. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  120. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  121. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  122. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  123. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  124. {phase_loop_runtime-0.7.20 → 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
  125. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  126. {phase_loop_runtime-0.7.20 → 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
  127. {phase_loop_runtime-0.7.20 → 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
  128. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  129. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  130. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  131. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  132. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  133. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  134. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  135. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  136. {phase_loop_runtime-0.7.20 → 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
  137. {phase_loop_runtime-0.7.20 → 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
  138. {phase_loop_runtime-0.7.20 → 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
  139. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  140. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  141. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
  142. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  143. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
  144. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  145. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  146. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  147. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  148. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  149. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  150. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  151. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  152. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  153. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  154. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  155. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
  156. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_modular.py +0 -0
  157. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  158. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  159. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  160. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  161. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  162. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  163. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  164. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  165. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/broker.py +0 -0
  166. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/build_bundle.py +0 -0
  167. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/capability_registry.py +0 -0
  168. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/classifier.py +0 -0
  169. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  170. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  171. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout.py +0 -0
  172. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  173. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_validation.py +0 -0
  174. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_validators.py +0 -0
  175. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  176. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  177. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  178. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  179. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  180. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  181. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  182. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  183. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  184. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  185. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  186. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  187. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  188. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  189. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  190. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  191. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  192. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  193. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  194. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  195. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  196. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  197. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  198. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  199. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  200. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  201. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  202. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  203. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  204. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  205. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  206. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  207. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  208. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  209. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  210. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  211. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  212. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  213. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  214. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  215. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  216. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  217. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  218. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  219. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  220. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  221. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  222. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  223. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  224. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  225. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  226. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  227. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/status.py +0 -0
  228. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  229. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/declared_identity.py +0 -0
  230. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  231. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  232. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/discovery.py +0 -0
  233. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  234. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  235. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_audit.py +0 -0
  236. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_freshness.py +0 -0
  237. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  238. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/doctor.py +0 -0
  239. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  240. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  241. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/events.py +0 -0
  242. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/events_migration.py +0 -0
  243. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/evidence_audit.py +0 -0
  244. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  245. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/executor_availability.py +0 -0
  246. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_canonical.py +0 -0
  247. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_delta.py +0 -0
  248. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_gate.py +0 -0
  249. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_producer.py +0 -0
  250. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_provenance.py +0 -0
  251. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  252. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  253. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  254. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_map.py +0 -0
  255. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  256. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  257. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/gate_posture.py +0 -0
  258. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_discipline.py +0 -0
  259. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_ops.py +0 -0
  260. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_topology.py +0 -0
  261. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/goal_coverage.py +0 -0
  262. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_bundle.py +0 -0
  263. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/handoff.py +0 -0
  264. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/handoff_path.py +0 -0
  265. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  266. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/injection.py +0 -0
  267. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/install_status.py +0 -0
  268. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  269. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lease_store.py +0 -0
  270. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/legible_evidence.py +0 -0
  271. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/maintenance.py +0 -0
  272. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  273. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/models.py +0 -0
  274. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  275. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  276. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  277. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  278. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  279. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  280. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  281. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  282. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_ir.py +0 -0
  283. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  284. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/planner_validation.py +0 -0
  285. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/president_adapter.py +0 -0
  286. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/president_operation.py +0 -0
  287. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/producer_manifest.py +0 -0
  288. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/profiles.py +0 -0
  289. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/proof_stages.py +0 -0
  290. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/provenance.py +0 -0
  291. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/py.typed +0 -0
  292. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/ratification_policy.py +0 -0
  293. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reconcile.py +0 -0
  294. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reflection_sync.py +0 -0
  295. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/release_guard.py +0 -0
  296. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/render.py +0 -0
  297. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/repo_validation.py +0 -0
  298. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/review_summary.py +0 -0
  299. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  300. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  301. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  302. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  303. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  304. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  305. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_log.py +0 -0
  306. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  307. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  308. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_paths.py +0 -0
  309. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_projection.py +0 -0
  310. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_resources.py +0 -0
  311. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_egress.py +0 -0
  312. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_policy.py +0 -0
  313. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_retention.py +0 -0
  314. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schema_export.py +0 -0
  315. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  316. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  317. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  318. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_install.py +0 -0
  319. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_inventory.py +0 -0
  320. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_paths.py +0 -0
  321. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  322. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  323. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
  324. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  325. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
  326. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  327. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  328. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  329. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  330. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  331. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  332. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  333. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  334. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  335. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  336. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  337. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  338. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  339. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  340. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  341. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  342. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  343. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  344. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  345. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  346. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  347. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  348. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  349. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  350. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  351. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  352. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  353. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
  354. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  355. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  356. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  357. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  359. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  360. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  361. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  362. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  364. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  365. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  366. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  367. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  368. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
  369. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  370. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
  371. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  372. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  373. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  374. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  375. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  376. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  377. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  378. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  379. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  380. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  381. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  382. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  383. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  384. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  385. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  386. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  387. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  388. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  389. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  390. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  391. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  392. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  393. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  394. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  395. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  396. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  397. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  398. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  399. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  400. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  401. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  402. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  403. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  404. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  405. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  406. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  407. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  408. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  409. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  410. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  411. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  412. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  413. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
  414. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  415. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
  416. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  417. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  418. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  419. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  420. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  421. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  422. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  423. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  424. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  425. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  426. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  427. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  428. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  429. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  430. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  431. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  432. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  433. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  434. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  435. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  436. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  437. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  438. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  439. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  440. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  441. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  442. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  443. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  444. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  445. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  446. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  447. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  448. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  449. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  450. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  451. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  452. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  453. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  454. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  455. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  456. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  457. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  458. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
  459. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  460. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
  461. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  462. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  463. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  464. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  465. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  466. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  467. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  468. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  469. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  470. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  471. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  472. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  473. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  474. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  475. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  476. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  477. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  478. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  479. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  480. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  481. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  482. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  483. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  484. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  485. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  486. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  487. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  488. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  489. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  490. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  491. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  492. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  493. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  494. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  495. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  496. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  497. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  498. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  499. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  500. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  501. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  502. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  503. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state.py +0 -0
  504. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state_degradation.py +0 -0
  505. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state_ops.py +0 -0
  506. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_broker.py +0 -0
  507. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  508. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  509. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  510. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_ledger.py +0 -0
  511. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_review_packet.py +0 -0
  512. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_roadmap.py +0 -0
  513. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  514. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  515. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  516. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/worker_pool.py +0 -0
  517. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/worktree_index.py +0 -0
  518. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  519. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  520. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  521. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  522. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_acceptance_falsifier_contract.py +0 -0
  523. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_advisory_cli_802.py +0 -0
  524. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_advisory_mode.py +0 -0
  525. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_alias_install.py +0 -0
  526. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backcompat.py +0 -0
  527. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backing_homebrew.py +0 -0
  528. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backing_omnigent.py +0 -0
  529. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_cli_legacy.py +0 -0
  530. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_composition.py +0 -0
  531. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_concurrency.py +0 -0
  532. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_golden.py +0 -0
  533. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_ingestion.py +0 -0
  534. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_integration.py +0 -0
  535. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_live_research.py +0 -0
  536. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_matrix.py +0 -0
  537. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_observability.py +0 -0
  538. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_presets.py +0 -0
  539. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_research.py +0 -0
  540. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_resolver.py +0 -0
  541. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_schema.py +0 -0
  542. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_static_import_862.py +0 -0
  543. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_advisor_twin_alias_legacy.py +0 -0
  544. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_agent_runtime_provider_cs08.py +0 -0
  545. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_agy_canary_evidence.py +0 -0
  546. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_autosel.py +0 -0
  547. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_branchgov_preflight.py +0 -0
  548. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_broker_command_builders.py +0 -0
  549. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  550. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_broker_staged_tree_delivery.py +0 -0
  551. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_certificate_tier.py +0 -0
  552. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_chronology_scope.py +0 -0
  553. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_gate_metrics.py +0 -0
  554. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_main_red.py +0 -0
  555. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_offload_lock.py +0 -0
  556. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_quarantine.py +0 -0
  557. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_workflow_concurrency.py +0 -0
  558. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_xdist_adoption.py +0 -0
  559. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ci_xdist_witness.py +0 -0
  560. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  561. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_cli_train_status_45.py +0 -0
  562. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_break_glass_cli.py +0 -0
  563. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_convergence_fixes.py +0 -0
  564. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_exception_vocab.py +0 -0
  565. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  566. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_import_cycle_819.py +0 -0
  567. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  568. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_validator_hook.py +0 -0
  569. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_closeout_verification_gate.py +0 -0
  570. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_codex_effort_max_clamp_49.py +0 -0
  571. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_committed_range_diff.py +0 -0
  572. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_common_directory_leases_807.py +0 -0
  573. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_conform_timing_instrumentation.py +0 -0
  574. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_conformance_golden.py +0 -0
  575. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_conftest_isolation.py +0 -0
  576. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_consiliency_dual_layout.py +0 -0
  577. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_consiliency_gates.py +0 -0
  578. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_consiliency_ingest.py +0 -0
  579. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_consiliency_scaffold.py +0 -0
  580. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_console_scripts_are_declared.py +0 -0
  581. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_contract_floor_guard_378.py +0 -0
  582. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_adapters.py +0 -0
  583. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_admission.py +0 -0
  584. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_api.py +0 -0
  585. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_credsep.py +0 -0
  586. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_evidence.py +0 -0
  587. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_revocation_race.py +0 -0
  588. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_verbs.py +0 -0
  589. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_cli_integration.py +0 -0
  590. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_coordination_contracts.py +0 -0
  591. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_dispatch.py +0 -0
  592. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_event_contracts.py +0 -0
  593. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_event_log.py +0 -0
  594. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_fencing.py +0 -0
  595. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_fixture_contracts.py +0 -0
  596. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_invalidation.py +0 -0
  597. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_live_enable.py +0 -0
  598. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_provider_contracts.py +0 -0
  599. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_reconcile.py +0 -0
  600. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_refresh.py +0 -0
  601. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_runtime_imports.py +0 -0
  602. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_seat_lifecycle.py +0 -0
  603. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_status.py +0 -0
  604. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_convergence_train_integration.py +0 -0
  605. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_coordinator_wave_loop.py +0 -0
  606. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_cr_fixes_pr220.py +0 -0
  607. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_delegated_visual_evidence_91.py +0 -0
  608. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_discovery_hygiene_legacy.py +0 -0
  609. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_dispatch_hold_guard.py +0 -0
  610. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  611. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_helper.py +0 -0
  612. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_reentrancy.py +0 -0
  613. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  614. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_doc_delta_validator.py +0 -0
  615. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_docs_audit.py +0 -0
  616. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_docs_freshness.py +0 -0
  617. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_doctor_bom.py +0 -0
  618. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_dotfiles_tree.py +0 -0
  619. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
  620. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_entry_doc_check.py +0 -0
  621. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_execfind_falsifier.py +0 -0
  622. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_execgov.py +0 -0
  623. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_execreg_launch_registry.py +0 -0
  624. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_execute_phase_handoff_mode.py +0 -0
  625. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_execution_policy_tiering.py +0 -0
  626. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_executor_availability.py +0 -0
  627. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_export_schema.py +0 -0
  628. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_activation_promotion.py +0 -0
  629. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_canonical_b.py +0 -0
  630. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_closeout_crash_safety.py +0 -0
  631. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_closeout_wiring.py +0 -0
  632. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_delta_c.py +0 -0
  633. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_delta_consumer.py +0 -0
  634. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
  635. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_gate_d.py +0 -0
  636. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_producer.py +0 -0
  637. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fab_provenance_a.py +0 -0
  638. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_admission_compat_789.py +0 -0
  639. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
  640. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  641. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_partition_rotation_789d.py +0 -0
  642. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_recovery_controls_789.py +0 -0
  643. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  644. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabpub_shared_epoch.py +0 -0
  645. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  646. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fabreadmit_broker.py +0 -0
  647. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fleet_map.py +0 -0
  648. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fleet_metrics.py +0 -0
  649. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_fleet_metrics_export.py +0 -0
  650. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_frozen_blob_batch_parse.py +0 -0
  651. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_gate_a_wheel_isolation.py +0 -0
  652. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_gate_fail_open_visibility.py +0 -0
  653. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_gate_parity_244_245.py +0 -0
  654. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_gate_posture.py +0 -0
  655. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_git_discipline.py +0 -0
  656. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_git_grounded_projection.py +0 -0
  657. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_goal_coverage.py +0 -0
  658. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  659. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_disjointness_model_first.py +0 -0
  660. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_e2e.py +0 -0
  661. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_gate_crfixes.py +0 -0
  662. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_planning_gate.py +0 -0
  663. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_premerge.py +0 -0
  664. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_governed_premerge_live.py +0 -0
  665. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_declared_identity.py +0 -0
  666. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_panel_policy.py +0 -0
  667. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  668. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_plan_pin_lint.py +0 -0
  669. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_producer_manifest.py +0 -0
  670. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_proof_stages.py +0 -0
  671. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_roadmap_reseal.py +0 -0
  672. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_skill_policy_parity.py +0 -0
  673. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_govlean_tdd_receipts.py +0 -0
  674. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_grok_narrow_reject_231.py +0 -0
  675. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_grokexec.py +0 -0
  676. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_harden_evidence_producer.py +0 -0
  677. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_harden_evidence_verifier.py +0 -0
  678. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_harden_json_depth_825.py +0 -0
  679. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_hotfix_lane.py +0 -0
  680. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_injection_skill_failloud.py +0 -0
  681. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_lane_ir_override.py +0 -0
  682. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_launcher_liveness.py +0 -0
  683. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_launchspec_golden.py +0 -0
  684. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_lease_store.py +0 -0
  685. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_lease_store_conformance.py +0 -0
  686. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ledger_serialization.py +0 -0
  687. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_leg_liveness_monitor.py +0 -0
  688. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_legible_evidence.py +0 -0
  689. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_legible_review_repairs.py +0 -0
  690. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_live_smoke_gate_executes.py +0 -0
  691. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_local_check.py +0 -0
  692. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_manifest_per_entry_164.py +0 -0
  693. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_model_class_policy.py +0 -0
  694. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_model_id_source_guard.py +0 -0
  695. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_model_tier_taxonomy.py +0 -0
  696. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_native_claude_seat_fill.py +0 -0
  697. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_native_claude_seat_fill_green.py +0 -0
  698. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  699. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_observability_alerting.py +0 -0
  700. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory.py +0 -0
  701. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory_cli.py +0 -0
  702. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  703. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_authority_boundary.py +0 -0
  704. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_canonical_corpus.py +0 -0
  705. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_conform_evidence.py +0 -0
  706. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_drift.py +0 -0
  707. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_imports.py +0 -0
  708. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_pin.py +0 -0
  709. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_core_api.py +0 -0
  710. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_provenance.py +0 -0
  711. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_ci.py +0 -0
  712. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_cli.py +0 -0
  713. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_output.py +0 -0
  714. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_runtime.py +0 -0
  715. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_redaction.py +0 -0
  716. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_redaction_separation.py +0 -0
  717. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_release_surface.py +0 -0
  718. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_schema_validation.py +0 -0
  719. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_vectors.py +0 -0
  720. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_owned_command_procfs_1003.py +0 -0
  721. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_packaged_vector_manifest_pin.py +0 -0
  722. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_advisory_mode_63.py +0 -0
  723. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  724. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_context_refs_114.py +0 -0
  725. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_doc_contract.py +0 -0
  726. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  727. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker.py +0 -0
  728. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_spawn.py +0 -0
  729. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_timeout_argv.py +0 -0
  730. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_windows_import.py +0 -0
  731. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_lanes.py +0 -0
  732. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  733. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  734. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_status_detail_1096.py +0 -0
  735. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_lens_delivery.py +0 -0
  736. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_native_fill_183.py +0 -0
  737. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_per_leg_model_66.py +0 -0
  738. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_streaming_verdicts.py +0 -0
  739. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_eof_48.py +0 -0
  740. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_workspace_trust_223.py +0 -0
  741. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_panel_verdict_summary.py +0 -0
  742. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_parallel_dispatch_backcompat.py +0 -0
  743. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_parallel_dispatch_cli.py +0 -0
  744. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_adoption_bundle.py +0 -0
  745. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  746. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_dependency.py +0 -0
  747. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  748. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_injection.py +0 -0
  749. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_modular.py +0 -0
  750. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  751. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  752. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_schema_export.py +0 -0
  753. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_schema_source.py +0 -0
  754. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  755. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  756. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_build_bundle.py +0 -0
  757. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_classifier.py +0 -0
  758. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  759. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
  760. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  761. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  762. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  763. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_security.py +0 -0
  764. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  765. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  766. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  767. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_route_selection.py +0 -0
  768. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_cli.py +0 -0
  769. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  770. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_control_only.py +0 -0
  771. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_event.py +0 -0
  772. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  773. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_hardening.py +0 -0
  774. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  775. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_schema.py +0 -0
  776. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_validation.py +0 -0
  777. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_citation.py +0 -0
  778. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_docs.py +0 -0
  779. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  780. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  781. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  782. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  783. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  784. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_discovery.py +0 -0
  785. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_docs.py +0 -0
  786. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  787. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  788. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  789. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  790. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_portal.py +0 -0
  791. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  792. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_drift_audit.py +0 -0
  793. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  794. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  795. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_events_migration.py +0 -0
  796. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit.py +0 -0
  797. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  798. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  799. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  800. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  801. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_execution_policy.py +0 -0
  802. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_executor_degradation.py +0 -0
  803. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_full_phase_mode.py +0 -0
  804. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_handoff.py +0 -0
  805. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_handoff_migration.py +0 -0
  806. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_init.py +0 -0
  807. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_injection.py +0 -0
  808. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_install_status.py +0 -0
  809. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  810. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_harnesses.py +0 -0
  811. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_ir.py +0 -0
  812. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  813. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_scheduler.py +0 -0
  814. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_ledger_debug.py +0 -0
  815. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_ledger_dedup.py +0 -0
  816. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_live_adapters.py +0 -0
  817. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_maintenance.py +0 -0
  818. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_metrics.py +0 -0
  819. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_migration_regressions.py +0 -0
  820. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  821. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  822. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  823. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_models.py +0 -0
  824. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_native_flags.py +0 -0
  825. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  826. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pi_executor.py +0 -0
  827. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  828. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  829. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  830. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  831. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  832. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_mode.py +0 -0
  833. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  834. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_plan_manifest.py +0 -0
  835. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  836. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_planner_validation.py +0 -0
  837. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_policy.py +0 -0
  838. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_protocol_contract.py +0 -0
  839. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_provenance.py +0 -0
  840. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile.py +0 -0
  841. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  842. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  843. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  844. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reducers.py +0 -0
  845. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  846. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  847. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  848. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_roadmap_validate.py +0 -0
  849. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_rotation.py +0 -0
  850. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runner.py +0 -0
  851. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  852. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_boundary.py +0 -0
  853. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_decouple.py +0 -0
  854. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_package_data.py +0 -0
  855. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_projection.py +0 -0
  856. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_schema_flow.py +0 -0
  857. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  858. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  859. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_contract.py +0 -0
  860. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  861. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_install.py +0 -0
  862. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  863. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_blockers.py +0 -0
  864. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  865. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_reentry.py +0 -0
  866. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  867. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  868. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  869. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_state.py +0 -0
  870. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  871. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  872. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  873. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  874. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  875. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v22_e2e.py +0 -0
  876. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v22_principles.py +0 -0
  877. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  878. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_reconcile.py +0 -0
  879. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_sched.py +0 -0
  880. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_wave_runner.py +0 -0
  881. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_observability.py +0 -0
  882. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_runner.py +0 -0
  883. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_state.py +0 -0
  884. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_worktrees.py +0 -0
  885. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  886. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_state_disagreement_312.py +0 -0
  887. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_phase_worktree_executor.py +0 -0
  888. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  889. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  890. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  891. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_flag.py +0 -0
  892. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_markers.py +0 -0
  893. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  894. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  895. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  896. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  897. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  898. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pkg_layout_freeze.py +0 -0
  899. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_plan_ir_iter_waves.py +0 -0
  900. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_preflight_verification.py +0 -0
  901. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_president_ladder_config.py +0 -0
  902. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_president_wiring.py +0 -0
  903. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_presroute_cli.py +0 -0
  904. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_presroute_hardening.py +0 -0
  905. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_presroute_landed.py +0 -0
  906. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_proc_cpu.py +0 -0
  907. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_proofgate_attestation_workflow.py +0 -0
  908. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_proofgate_cleanup.py +0 -0
  909. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_proofgate_isolation.py +0 -0
  910. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_proofgate_receipts.py +0 -0
  911. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_prune_merged_worktrees_script.py +0 -0
  912. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_public_installer.py +0 -0
  913. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_pushflow.py +0 -0
  914. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_ratification_policy.py +0 -0
  915. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  916. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_reconcile_portability_85c.py +0 -0
  917. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  918. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_reconcile_verification_log.py +0 -0
  919. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  920. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_redaction_channel_control_isolation.py +0 -0
  921. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_reflection_sync.py +0 -0
  922. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  923. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_release_pin_autotrack.py +0 -0
  924. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_repo_validation.py +0 -0
  925. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_review_leg_sandbox.py +0 -0
  926. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_review_monitor_policy.py +0 -0
  927. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_review_policy_govlean_repairs.py +0 -0
  928. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_review_stage_board_findings.py +0 -0
  929. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_review_staged_tree_authorization.py +0 -0
  930. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_review_summary.py +0 -0
  931. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_roadmap_authority.py +0 -0
  932. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_roadmap_ownership.py +0 -0
  933. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_roadmap_representation_consistency.py +0 -0
  934. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_route_log.py +0 -0
  935. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_route_policy_conformance.py +0 -0
  936. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_routing_invariants.py +0 -0
  937. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  938. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_runtime_adapter_output_720.py +0 -0
  939. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_runtime_event_log_hardening_720.py +0 -0
  940. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_runtime_procfs_identity_870.py +0 -0
  941. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_runtime_state_mirror_agreement.py +0 -0
  942. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sandbox_clone.py +0 -0
  943. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sandbox_egress.py +0 -0
  944. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sandbox_policy.py +0 -0
  945. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sandbox_preamble.py +0 -0
  946. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sandbox_retention.py +0 -0
  947. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_seat_host_uid_1098.py +0 -0
  948. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  949. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sibling_matcher_patterns.py +0 -0
  950. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skill_bundle_pinned.py +0 -0
  951. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skill_install_body_expansion.py +0 -0
  952. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skill_liveness_contract.py +0 -0
  953. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skill_plan_manifest_write.py +0 -0
  954. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skill_sources_seam.py +0 -0
  955. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skills_bundle_drift.py +0 -0
  956. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skills_canon_parity.py +0 -0
  957. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_skills_src_claude_literal_lint.py +0 -0
  958. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_spec_conformance_gate.py +0 -0
  959. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_specpkgmin_wheel.py +0 -0
  960. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  961. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_status_read_only_62.py +0 -0
  962. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_subscription_scrub_xai_864.py +0 -0
  963. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  964. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  965. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_sync_skills_apply_failloud.py +0 -0
  966. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_task_message_broker.py +0 -0
  967. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_task_message_broker_cli.py +0 -0
  968. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_task_message_resolver.py +0 -0
  969. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_tdd_chronology.py +0 -0
  970. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
  971. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_authority_import_811.py +0 -0
  972. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_e2e.py +0 -0
  973. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_invariants.py +0 -0
  974. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_merge.py +0 -0
  975. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_order_only_deps_47.py +0 -0
  976. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_prebuilt.py +0 -0
  977. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_review_authorization.py +0 -0
  978. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_review_monitoring_policy.py +0 -0
  979. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_review_packet.py +0 -0
  980. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_roadmap.py +0 -0
  981. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_train_runner.py +0 -0
  982. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_unattended_release.py +0 -0
  983. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  984. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  985. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  986. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  987. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  988. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_proofgate.py +0 -0
  989. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_verification_dotdot_execution_428.py +0 -0
  990. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_verification_evidence.py +0 -0
  991. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_verification_evidence_validator.py +0 -0
  992. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_verification_interpreter_guard_221.py +0 -0
  993. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_verification_venv_identity_428.py +0 -0
  994. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_visual_avatar_evidence_validator.py +0 -0
  995. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_visual_evidence_validator.py +0 -0
  996. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_workerpool_failure_isolation.py +0 -0
  997. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_workerpool_parallel.py +0 -0
  998. {phase_loop_runtime-0.7.20 → phase_loop_runtime-0.7.22}/tests/test_workerpool_worktree_alloc.py +0 -0
  999. {phase_loop_runtime-0.7.20 → 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.20
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.20 # …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.20 # …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.20"
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.20"
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
@@ -735,3 +791,174 @@ root, rejecting failures, omissions and terminal/admission mismatches. Preserve
735
791
  failed series; diagnose a changed candidate before another attempt. Validation
736
792
  uses that host's measured helper images. These receipts do not replace the
737
793
  historical bounded-success evidence verifier.
794
+
795
+ The driver lives in the package, `phase_loop_runtime.agy_qualification`; the script
796
+ is a shim over it, so an installed runtime can run it too (agent-harness#1076).
797
+
798
+ ### First-use self-qualification (agent-harness#1076)
799
+
800
+ A non-release `agy` image is admitted only by verifying it, never by trusting it.
801
+
802
+ - **Admission classes.** Every Gemini heartbeat leg carries exactly one class in
803
+ its profile evidence (`provider_admission_class`): `release_qualified` (digest in
804
+ `QUALIFIED_IMAGES`), `locally_qualified` (a verified local record), or
805
+ `qualification_candidate` (only inside a qualification run; never counted, never
806
+ persisted). The evidence's `provider_image_sha256` is the admitted image's own digest.
807
+ - **VerifiedImage.** `PATH` is resolved once (a versioned-install symlink to its final
808
+ target), the target is opened once (`O_NOFOLLOW`, regular file, size cap) and read
809
+ into memory; that buffer is hashed and fills a sealed memfd, which is re-hashed.
810
+ Help measurement, the three live operations, board legs and the president execute
811
+ that memfd (an independent, re-hashed read of it per profile) and never open the path
812
+ again.
813
+ - **Admission order.** (1) A release-qualified digest is admitted before any config,
814
+ store or network access. (2) If the user config sets `[agy] self_qualification = false`
815
+ (the repository config cannot), today's `gemini_heartbeat_capability_unavailable`
816
+ refusal is returned and nothing else is read. (3) A `failed` entry refuses
817
+ (`gemini_heartbeat_self_qualification_failed`) with no execution. (4) Help is measured
818
+ from the memfd only after a `provenance` entry verifies against the live key; the
819
+ `qualified` entry is then verified against the full live key, including that help
820
+ digest. (5) Otherwise the image is absent: legs and the president refuse; only the
821
+ whole-board preflight (`_preflight_gemini_heartbeat`) and `phase-loop
822
+ agy-qualification run` go on to first use. Legs re-admit by lookup rather than
823
+ receiving the preflight's Admission object; any future cross-process hand-off of an
824
+ image memfd must reuse the worker's seal check.
825
+ - **Provenance** (coordinator process, nothing executes). Host platform from the running
826
+ host (D4: `linux-{x64,arm64}[-musl]`); the newest `agy_provenance.RECENCY_WINDOW`
827
+ stable releases (no prerelease, no draft); the exact platform asset; its URL equal to
828
+ `https://github.com/google-antigravity/antigravity-cli/releases/download/<tag>/<asset>`;
829
+ a strict `sha256:<hex>` asset digest equal to the streamed archive digest; exactly one
830
+ regular-file `antigravity` member (duplicates and links refuse), stream-hashed and
831
+ never extracted, equal to the image digest. The transport sends no credentials, has
832
+ no proxy support, uses the interpreter's compiled-in OpenSSL trust store (not
833
+ `SSL_CERT_FILE`/`SSL_CERT_DIR`), and follows at most three https redirects within
834
+ GitHub's download hosts. Fetch failure refuses `gemini_heartbeat_provenance_unavailable`;
835
+ no match refuses `gemini_heartbeat_provenance_unverified`.
836
+ - **Behaviour.** Only after the provenance entry is written: help, then the three live
837
+ operations through the packaged driver and the release path's own validators. All
838
+ passing writes the `qualified` entry. Any observed isolation or identity violation (an
839
+ executable outside the helper policy, an unqualified provider image, a writable image
840
+ mount, an unverified network policy, a surviving process, a rejected record) writes a
841
+ `failed` entry at whatever stage it was seen (until `agy-qualification clear`). Only a
842
+ provider that was never observed running, a completion the provider did not answer
843
+ (HTTP 5xx, quota, auth), and our own local failure are transient, and cancellation writes
844
+ nothing. Transients are counted per key; the third consecutive one writes a `failed`
845
+ entry, success resets the count, and `agy-qualification clear` removes it. A lock waiter
846
+ that finds a transient recorded while it waited refuses without running or counting.
847
+ - **Worker gate.** The qualification worker receives the image as an inherited fd and,
848
+ before hashing, requires a regular-file memfd with `F_SEAL_WRITE`, `F_SEAL_GROW`,
849
+ `F_SEAL_SHRINK` and `F_SEAL_SEAL` (`F_SEAL_FUTURE_WRITE` alone is refused). It admits
850
+ the fd as a candidate only if its digest is a release constant (the manual shim and the
851
+ upstream watch's prepared tree) or has a provenance entry for the current runtime
852
+ identity. It sets `PR_SET_PDEATHSIG`, so a killed coordinator leaves no worker.
853
+ - **Store.** `$XDG_STATE_HOME/phase-loop/agy-qualification/hosts/<machine>/`, per user,
854
+ namespaced by machine-id. Directories 0700 and files 0600, owned by the euid, opened
855
+ `O_NOFOLLOW`; otherwise the store is absent to lookups and first use refuses
856
+ (`gemini_heartbeat_self_qualification_store_unsafe`). Every entry is HMAC-SHA256'd under
857
+ a per-host key over its type, the euid, the machine-id and a context recomputed from the
858
+ live key. The qualification entries (`provenance`, `qualified`, `failed`, `member_cache`,
859
+ `transient`) bind the image digest, platform and runtime identity, plus the asset name,
860
+ profile id or help digest as the type requires. The watch's `watch_push` entry binds the
861
+ branch, the version and the route-core base.
862
+ Without a readable machine-id, self-qualification refuses; the release path is unaffected.
863
+ - **Lock.** One `flock` per host namespace; waiters are cancellable and heartbeat (the board
864
+ preflight writes a content-free `agy-qualification.json` progress record into the
865
+ board's stream directory and a line on stderr, throttled per phase), and re-check the
866
+ store after acquiring. Qualification happens once per key per user per host.
867
+ - **Runtime identity (D2).** `__version__` plus the digests of the installed
868
+ `agy_qualification.ROUTE_CORE` files (`gemini_heartbeat.py`, `agy_qualification.py`,
869
+ `agy_provenance.py`), the same tuple `verify_qualified_agy_image.py --route-core` checks.
870
+ - **Counting (D1).** At `governed_review`'s gate (the rule itself is
871
+ `agy_qualification.counts_toward_landing`), a usable heartbeat Gemini leg is a vote at every
872
+ tier only if its recorded class is `release_qualified` or `locally_qualified`. A
873
+ candidate leg, or a leg with no class (including legs from boards run before the class
874
+ existed: re-run the board), cannot approve; a blocking verdict from it still blocks. The
875
+ president's input builder applies the same rule (`agy_qualification.president_input_items`):
876
+ an uncounted non-blocking leg contributes a `not counted` item instead of its review, and an
877
+ uncounted `DISAGREE` keeps its objections. A leg is an agy leg by name or by the
878
+ coordinator's profile evidence. A
879
+ Gemini leg whose admitted digest appears in the reviewed artifact is flagged
880
+ (`gemini_seat_reviews_its_own_pin`, non-gating). Boards admit with the installed base
881
+ runtime, never the reviewed tree.
882
+ - **Upstream watch.** `phase-loop agy-qualification watch` (a host timer on a subscribed
883
+ host; see `docs/ops/agy-upstream-watch.md`) proposes only the Linux x64 glibc release
884
+ route, from a fresh checkout of `main`, and opens a draft PR; it never merges. Each tick
885
+ makes exactly one ref write (a fresh `agy-watch/<version>-<utc>-<random>` branch, pushed
886
+ with an empty-expected-value lease and accepted only when `--porcelain` reports that exact
887
+ ref as newly created) and one object create (the PR). It never updates, force-pushes,
888
+ adopts, closes, edits or deletes anything that existed before the tick; the new PR body
889
+ names the own older PRs it supersedes for a maintainer to close. It requires `origin` to
890
+ have exactly one push URL, pushes to the remote NAME `origin` (never to the printed URL,
891
+ which git would resolve again). It compares no URL strings; a `--dry-run` pre-flight
892
+ must print exactly one `To` block, and the real push exactly one `To` block and one `*` row
893
+ for exactly the new ref. Both pushes carry `--no-verify`; the bot host's git/ssh
894
+ configuration is trusted. It pre-flights its store, records the
895
+ verified pushed oid in its own `watch_push` entry, and reads both the record and the
896
+ created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
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",
@@ -51,11 +51,14 @@ from .schema import (
51
51
  )
52
52
 
53
53
  # Recognised keys — anything else is a hard error (no silent drop).
54
- _KNOWN_TOP_KEYS: frozenset[str] = frozenset({"default_board", "boards", "president"})
54
+ _KNOWN_TOP_KEYS: frozenset[str] = frozenset({"default_board", "boards", "president", "agy"})
55
55
  # A repository file configures the president ladder only: repo-level boards are not a
56
56
  # feature, so a ``[[boards]]`` there is refused rather than silently ignored.
57
57
  _KNOWN_REPO_TOP_KEYS: frozenset[str] = frozenset({"president"})
58
58
  _KNOWN_PRESIDENT_KEYS: frozenset[str] = frozenset({"ladder"})
59
+ # agent-harness#1076 D3: the USER file's ``[agy] self_qualification = false`` restores the
60
+ # hard refusal of a non-release agy image. A repository file cannot carry it.
61
+ _KNOWN_AGY_KEYS: frozenset[str] = frozenset({"self_qualification"})
59
62
  # Repository-level config, relative to the repository root.
60
63
  REPO_CONFIG_RELATIVE_PATH = ".agent-harness/advisor-boards.toml"
61
64
  _KNOWN_BOARD_KEYS: frozenset[str] = frozenset(
@@ -212,6 +215,31 @@ def _parse_president(data: Mapping[str, Any], where: str) -> tuple[str, ...] | N
212
215
  raise BoardConfigError(f"{where} [president] ladder: {exc}") from exc
213
216
 
214
217
 
218
+ def _parse_agy(data: Mapping[str, Any], where: str) -> bool:
219
+ """The user file's ``[agy] self_qualification`` (default ``True``), validated."""
220
+ raw = data.get("agy")
221
+ if raw is None:
222
+ return True
223
+ if not isinstance(raw, Mapping):
224
+ raise BoardConfigError(f"{where}: 'agy' must be a table")
225
+ _reject_unknown(raw.keys(), _KNOWN_AGY_KEYS, f"{where} [agy]")
226
+ return _require_bool(raw, "self_qualification", True, f"{where} [agy]")
227
+
228
+
229
+ def load_agy_self_qualification(*, path: Path | None = None) -> bool:
230
+ """D3 (agent-harness#1076): whether first-use self-qualification is enabled.
231
+
232
+ Reads the user file only (this process's ``board_config_path()``). A malformed file
233
+ raises; the admission caller treats any error as opted out (today's refusal).
234
+ """
235
+ user_path = path if path is not None else board_config_path(None)
236
+ user = _load_toml(user_path)
237
+ if user is None:
238
+ return True
239
+ _reject_unknown(user.keys(), _KNOWN_TOP_KEYS, str(user_path))
240
+ return _parse_agy(user, str(user_path))
241
+
242
+
215
243
  def _user_config_path(env: Mapping[str, str] | None) -> Path | None:
216
244
  """The user file for ``env``: resolved from the GIVEN environment only.
217
245
 
@@ -343,6 +371,7 @@ def load_boards(
343
371
  raise BoardConfigError(f"{cfg_path} is not valid TOML: {exc}") from exc
344
372
  _reject_unknown(data.keys(), _KNOWN_TOP_KEYS, str(cfg_path))
345
373
  _parse_president(data, str(cfg_path)) # a bad [president] fails at load too
374
+ _parse_agy(data, str(cfg_path)) # and a bad [agy] (agent-harness#1076)
346
375
  raw_boards = data.get("boards", [])
347
376
  if not isinstance(raw_boards, list):
348
377
  raise BoardConfigError(f"{cfg_path}: 'boards' must be an array of tables")
@@ -12,6 +12,12 @@
12
12
  # Optional: the board a bare `advisor-board` invocation resolves to.
13
13
  default_board = "default"
14
14
 
15
+ # Optional (agent-harness#1076, user file only): first-use self-qualification of a genuine
16
+ # upstream agy release whose digest is not release-qualified. On by default; `false`
17
+ # restores the hard refusal (`gemini_heartbeat_capability_unavailable`).
18
+ # [agy]
19
+ # self_qualification = false
20
+
15
21
  # The default board reproduces today's 3-leg panel (byte-for-byte back-compat).
16
22
  # Its three seats, in panel-leg order, render to today's exact CLI invocations:
17
23
  # codex gpt-6-astra effort=max -> -c model_reasoning_effort=xhigh
@@ -76,7 +76,12 @@ CANONICAL_VALID_PAIRS: tuple[tuple[str, str], ...] = (
76
76
  ("gpt-6-astra", "codex"),
77
77
  ("gpt-6-astra", "opencode"),
78
78
  ("gpt-5.6-sol", "codex"), # legacy default id remains expressible
79
+ ("gpt-6-sol", "codex"), # explicit seat on user/ad-hoc boards (not a governed grok stand-in)
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
79
83
  ("claude-sonnet-5", "claude"),
84
+ ("claude-sonnet-5-5", "claude"), # explicit seat, selected by board config (not a default)
80
85
  ("claude-opus-5-5", "claude"),
81
86
  ("claude-fable-5-1", "claude"),
82
87
  ("Gemini 3.1 Pro", "gemini"),
@@ -256,7 +256,10 @@ class DefaultHarnessRegistry:
256
256
  _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
+ ("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
259
261
  ("claude-sonnet-5", "claude", "max"),
262
+ ("claude-sonnet-5-5", "claude", "max"), # explicit seat, selected by board config; not a board default
260
263
  ("claude-opus-4-8", "claude", "max"),
261
264
  # design-model-tier-taxonomy.md: claude-opus-5 is the new Claude heavy model.
262
265
  # opus-4-8 is retained above — still referenced by tests (advisor_board_schema) —