phase-loop-runtime 0.7.16__tar.gz → 0.7.17__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 (960) hide show
  1. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/PKG-INFO +2 -2
  2. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/README.md +1 -1
  3. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/pyproject.toml +1 -1
  4. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +203 -20
  6. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/backing.py +290 -4
  7. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/composition.py +4 -4
  8. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/config.py +99 -1
  9. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/fixtures.py +14 -11
  10. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/harness_mapping.py +25 -12
  11. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/presets.py +10 -8
  12. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/registries.py +2 -0
  13. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/schema.py +1 -1
  14. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/agy_canary_evidence.py +237 -15
  15. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/build_bundle.py +10 -4
  16. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/capability_registry.py +11 -7
  17. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/cli.py +98 -5
  18. phase_loop_runtime-0.7.17/src/phase_loop_runtime/gemini_heartbeat.py +292 -0
  19. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/launcher.py +21 -12
  20. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/panel_invoker.py +781 -110
  21. phase_loop_runtime-0.7.17/src/phase_loop_runtime/president_adapter.py +572 -0
  22. phase_loop_runtime-0.7.17/src/phase_loop_runtime/president_operation.py +173 -0
  23. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/profiles.py +9 -8
  24. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
  25. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/roadmap_lint.py +57 -15
  26. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/runner.py +10 -1
  27. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/sandbox_egress.py +34 -1
  28. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +12 -8
  29. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +12 -8
  30. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +3 -3
  31. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +5 -4
  32. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +12 -8
  33. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +12 -8
  34. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +12 -8
  35. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +12 -8
  36. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +12 -8
  37. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +12 -8
  38. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime.egg-info/PKG-INFO +2 -2
  39. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime.egg-info/SOURCES.txt +15 -0
  40. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_composition.py +1 -1
  41. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_golden.py +2 -2
  42. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_presets.py +10 -10
  43. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_registries.py +10 -3
  44. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_static_import_862.py +2 -2
  45. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_agy_canary_evidence.py +1391 -28
  46. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_autosel.py +2 -0
  47. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_broker_command_builders.py +5 -0
  48. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_broker_staged_tree_delivery.py +51 -1
  49. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ci_offload_lock.py +75 -0
  50. phase_loop_runtime-0.7.17/tests/test_ci_xdist_adoption.py +416 -0
  51. phase_loop_runtime-0.7.17/tests/test_ci_xdist_witness.py +142 -0
  52. phase_loop_runtime-0.7.17/tests/test_conform_timing_instrumentation.py +809 -0
  53. phase_loop_runtime-0.7.17/tests/test_frozen_blob_batch_parse.py +127 -0
  54. phase_loop_runtime-0.7.17/tests/test_gemini_heartbeat_bootstrap.py +1288 -0
  55. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_premerge.py +65 -1
  56. phase_loop_runtime-0.7.17/tests/test_govlean_panel_policy.py +288 -0
  57. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_grok_narrow_reject_231.py +39 -21
  58. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_grokexec.py +17 -8
  59. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_harden_evidence_verifier.py +54 -0
  60. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_launcher_liveness.py +4 -0
  61. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_legible_review_repairs.py +2 -2
  62. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_legible_roadmap_contract.py +21 -21
  63. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_model_class_policy.py +3 -3
  64. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_model_tier_taxonomy.py +4 -4
  65. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_conform_evidence.py +97 -3
  66. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_redaction_separation.py +59 -20
  67. phase_loop_runtime-0.7.17/tests/test_owned_command_procfs_1003.py +77 -0
  68. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_invoker_spawn.py +4 -4
  69. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_invoker_timeout_argv.py +19 -5
  70. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_native_fill_183.py +18 -0
  71. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_per_leg_model_66.py +6 -6
  72. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_execution_policy.py +6 -2
  73. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_launcher.py +9 -1
  74. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_roadmap_validate.py +213 -4
  75. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_v45_schedharden.py +4 -1
  76. phase_loop_runtime-0.7.17/tests/test_president_heartbeat_1001.py +338 -0
  77. phase_loop_runtime-0.7.17/tests/test_president_ladder_config.py +585 -0
  78. phase_loop_runtime-0.7.17/tests/test_president_wiring.py +1232 -0
  79. phase_loop_runtime-0.7.17/tests/test_presroute_cli.py +100 -0
  80. phase_loop_runtime-0.7.17/tests/test_presroute_hardening.py +341 -0
  81. phase_loop_runtime-0.7.17/tests/test_presroute_landed.py +35 -0
  82. phase_loop_runtime-0.7.17/tests/test_proc_cpu.py +99 -0
  83. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_public_installer.py +185 -9
  84. phase_loop_runtime-0.7.17/tests/test_redaction_channel_control_isolation.py +115 -0
  85. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_monitor_policy.py +80 -23
  86. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_policy_govlean_repairs.py +9 -4
  87. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sandbox_egress.py +76 -0
  88. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skill_liveness_contract.py +4 -1
  89. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skills_canon_parity.py +5 -4
  90. phase_loop_runtime-0.7.17/tests/test_subscription_scrub_xai_864.py +74 -0
  91. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_tdd_chronology.py +220 -0
  92. phase_loop_runtime-0.7.16/src/phase_loop_runtime/president_adapter.py +0 -143
  93. phase_loop_runtime-0.7.16/tests/test_govlean_panel_policy.py +0 -157
  94. phase_loop_runtime-0.7.16/tests/test_president_wiring.py +0 -689
  95. phase_loop_runtime-0.7.16/tests/test_proc_cpu.py +0 -45
  96. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/MANIFEST.in +0 -0
  97. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/protocol/protocol.md +0 -0
  98. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/setup.cfg +0 -0
  99. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  100. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  101. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  102. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  103. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  104. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  105. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  106. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  107. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  108. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  109. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  110. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  111. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  112. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  113. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  114. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  115. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  116. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  117. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  118. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  119. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  120. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  121. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  122. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  123. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  124. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  125. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  126. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  127. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  128. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  129. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  130. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  131. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  132. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  133. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  134. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  135. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  136. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  137. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  138. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  139. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  140. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  141. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  142. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  143. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  144. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  145. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  146. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  147. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  148. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  149. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  150. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  151. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  152. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  153. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  154. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  155. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  156. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  157. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  158. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  159. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  160. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/research.py +0 -0
  161. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  162. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  163. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  164. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  165. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_modular.py +0 -0
  166. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  167. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  168. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  169. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  170. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  171. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  172. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  173. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  174. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/broker.py +0 -0
  175. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/classifier.py +0 -0
  176. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  177. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  178. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/closeout.py +0 -0
  179. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  180. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  181. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/closeout_validation.py +0 -0
  182. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/closeout_validators.py +0 -0
  183. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  184. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
  185. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
  186. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
  187. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
  188. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
  189. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
  190. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
  191. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
  192. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
  193. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
  194. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
  195. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
  196. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
  197. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
  198. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
  199. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
  200. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  201. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  202. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  203. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
  204. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  205. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  206. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  207. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  208. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  209. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  210. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  211. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  212. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  213. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  214. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  215. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  216. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  217. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  218. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  219. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  220. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  221. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  222. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  223. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  224. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  225. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
  226. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  227. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
  228. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  229. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  230. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  231. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  232. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  233. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  234. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  235. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  236. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/convergence/status.py +0 -0
  237. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  238. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/declared_identity.py +0 -0
  239. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  240. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  241. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/discovery.py +0 -0
  242. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  243. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  244. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/docs_audit.py +0 -0
  245. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/docs_freshness.py +0 -0
  246. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  247. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/doctor.py +0 -0
  248. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  249. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/entry_doc_check.py +0 -0
  250. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/events.py +0 -0
  251. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/events_migration.py +0 -0
  252. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/evidence_audit.py +0 -0
  253. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  254. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/executor_availability.py +0 -0
  255. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fab_canonical.py +0 -0
  256. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fab_delta.py +0 -0
  257. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fab_gate.py +0 -0
  258. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fab_producer.py +0 -0
  259. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fab_provenance.py +0 -0
  260. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fabpub_capability.py +0 -0
  261. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
  262. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
  263. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fleet_map.py +0 -0
  264. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  265. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  266. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/gate_posture.py +0 -0
  267. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/git_discipline.py +0 -0
  268. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/git_ops.py +0 -0
  269. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/git_topology.py +0 -0
  270. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/goal_coverage.py +0 -0
  271. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/governed_bundle.py +0 -0
  272. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/governed_premerge.py +0 -0
  273. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/governed_review.py +0 -0
  274. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/handoff.py +0 -0
  275. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/handoff_path.py +0 -0
  276. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  277. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/injection.py +0 -0
  278. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/install_status.py +0 -0
  279. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  280. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/lease_store.py +0 -0
  281. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/legible_evidence.py +0 -0
  282. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/maintenance.py +0 -0
  283. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  284. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/models.py +0 -0
  285. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/observability.py +0 -0
  286. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  287. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  288. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  289. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  290. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  291. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  292. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  293. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  294. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  295. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/plan_ir.py +0 -0
  296. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/plan_manifest.py +0 -0
  297. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
  298. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/planner_validation.py +0 -0
  299. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/producer_manifest.py +0 -0
  300. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/prompts.py +0 -0
  301. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/proof_stages.py +0 -0
  302. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/provenance.py +0 -0
  303. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/publishing.py +0 -0
  304. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/py.typed +0 -0
  305. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/ratification_policy.py +0 -0
  306. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/reconcile.py +0 -0
  307. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/redaction.py +0 -0
  308. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/reflection_sync.py +0 -0
  309. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/release_guard.py +0 -0
  310. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/render.py +0 -0
  311. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/repo_validation.py +0 -0
  312. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/review_stage.py +0 -0
  313. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/review_summary.py +0 -0
  314. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
  315. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  316. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
  317. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
  318. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
  319. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/route_log.py +0 -0
  320. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  321. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  322. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/runtime_paths.py +0 -0
  323. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/runtime_projection.py +0 -0
  324. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/runtime_resources.py +0 -0
  325. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/sandbox_policy.py +0 -0
  326. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/sandbox_retention.py +0 -0
  327. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/schema_export.py +0 -0
  328. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  329. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  330. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  331. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skill_install.py +0 -0
  332. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skill_inventory.py +0 -0
  333. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skill_paths.py +0 -0
  334. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  335. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  336. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  337. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  338. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  339. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  340. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  341. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  342. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  343. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  344. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  345. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  346. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  347. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  348. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  349. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  350. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  351. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  352. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  353. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  354. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  355. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  356. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  357. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  358. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  359. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  360. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  361. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  362. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  364. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  365. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  366. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  367. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  368. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  369. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  370. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  371. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  372. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  373. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  374. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  375. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  376. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  377. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  378. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  379. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  380. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  381. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  382. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  383. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  384. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  385. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  386. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  387. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  388. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  389. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  390. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  391. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  392. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  393. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  394. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  395. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  396. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  397. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  398. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  399. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  400. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  401. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  402. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  403. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  404. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  405. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  406. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  407. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  408. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  409. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
  410. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  411. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  412. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  413. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  414. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  415. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  416. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  417. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  418. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  419. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  420. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  421. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  422. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  423. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  424. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  425. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  426. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  427. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  428. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  429. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  430. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  431. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  432. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  433. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  434. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  435. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  436. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  437. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  438. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  439. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  440. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  441. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  442. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  443. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  444. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  445. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  446. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  447. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  448. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  449. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  450. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  451. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  452. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  453. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  454. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  455. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  456. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  457. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  458. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  459. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  460. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  461. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  462. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  463. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  464. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  465. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  466. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  467. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  468. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  469. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  470. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  471. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  472. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  473. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  474. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  475. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  476. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  477. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  478. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  479. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  480. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  481. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  482. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  483. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  484. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  485. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  486. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  487. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  488. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  489. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  490. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  491. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  492. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  493. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  494. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  495. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  496. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  497. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  498. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  499. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  500. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  501. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  502. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  503. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  504. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  505. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  506. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  507. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  508. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  509. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  510. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  511. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  512. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  513. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/state.py +0 -0
  514. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/state_degradation.py +0 -0
  515. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/state_ops.py +0 -0
  516. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/task_message_broker.py +0 -0
  517. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  518. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  519. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/tdd_receipts.py +0 -0
  520. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/train_ledger.py +0 -0
  521. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/train_roadmap.py +0 -0
  522. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/train_runner.py +0 -0
  523. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/verification_evidence.py +0 -0
  524. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  525. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
  526. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  527. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/worker_pool.py +0 -0
  528. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime/worktree_index.py +0 -0
  529. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  530. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  531. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  532. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  533. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_acceptance_falsifier_contract.py +0 -0
  534. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_advisory_mode.py +0 -0
  535. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_alias_install.py +0 -0
  536. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_backcompat.py +0 -0
  537. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_backing_homebrew.py +0 -0
  538. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_backing_omnigent.py +0 -0
  539. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_cli_legacy.py +0 -0
  540. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_concurrency.py +0 -0
  541. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_config.py +0 -0
  542. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_ingestion.py +0 -0
  543. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_integration.py +0 -0
  544. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_live_research.py +0 -0
  545. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_matrix.py +0 -0
  546. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_observability.py +0 -0
  547. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_research.py +0 -0
  548. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_resolver.py +0 -0
  549. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_board_schema.py +0 -0
  550. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_advisor_twin_alias_legacy.py +0 -0
  551. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_agent_runtime_provider_cs08.py +0 -0
  552. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_branchgov_preflight.py +0 -0
  553. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_broker_evidence_schema_drift_789.py +0 -0
  554. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_certificate_tier.py +0 -0
  555. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ci_chronology_scope.py +0 -0
  556. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ci_gate_metrics.py +0 -0
  557. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ci_main_red.py +0 -0
  558. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ci_workflow_concurrency.py +0 -0
  559. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_claude_json_schema_metaschema_291.py +0 -0
  560. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_cli_train_status_45.py +0 -0
  561. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_break_glass_cli.py +0 -0
  562. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_classifier.py +0 -0
  563. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_convergence_fixes.py +0 -0
  564. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_exception_vocab.py +0 -0
  565. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  566. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_import_cycle_819.py +0 -0
  567. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  568. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_validator_hook.py +0 -0
  569. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_closeout_verification_gate.py +0 -0
  570. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_codex_effort_max_clamp_49.py +0 -0
  571. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_committed_range_diff.py +0 -0
  572. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_common_directory_leases_807.py +0 -0
  573. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_conformance_golden.py +0 -0
  574. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_conftest_isolation.py +0 -0
  575. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_consiliency_dual_layout.py +0 -0
  576. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_consiliency_gates.py +0 -0
  577. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_consiliency_ingest.py +0 -0
  578. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_consiliency_scaffold.py +0 -0
  579. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_console_scripts_are_declared.py +0 -0
  580. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_contract_floor_guard_378.py +0 -0
  581. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_adapters.py +0 -0
  582. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_broker_admission.py +0 -0
  583. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_broker_api.py +0 -0
  584. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_broker_credsep.py +0 -0
  585. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_broker_evidence.py +0 -0
  586. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_broker_revocation_race.py +0 -0
  587. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_broker_verbs.py +0 -0
  588. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_cli_integration.py +0 -0
  589. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_coordination_contracts.py +0 -0
  590. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_dispatch.py +0 -0
  591. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_event_contracts.py +0 -0
  592. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_event_log.py +0 -0
  593. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_fencing.py +0 -0
  594. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_fixture_contracts.py +0 -0
  595. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_invalidation.py +0 -0
  596. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_live_enable.py +0 -0
  597. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_provider_contracts.py +0 -0
  598. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_reconcile.py +0 -0
  599. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_refresh.py +0 -0
  600. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_runtime_imports.py +0 -0
  601. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_seat_lifecycle.py +0 -0
  602. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_status.py +0 -0
  603. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_convergence_train_integration.py +0 -0
  604. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_coordinator_wave_loop.py +0 -0
  605. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_cr_fixes_pr220.py +0 -0
  606. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_delegated_visual_evidence_91.py +0 -0
  607. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_discovery_hygiene_legacy.py +0 -0
  608. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_dispatch_hold_guard.py +0 -0
  609. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  610. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_dispatch_lock_helper.py +0 -0
  611. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_dispatch_lock_reentrancy.py +0 -0
  612. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  613. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_doc_delta_validator.py +0 -0
  614. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_docs_audit.py +0 -0
  615. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_docs_freshness.py +0 -0
  616. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_doctor_bom.py +0 -0
  617. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_dotfiles_tree.py +0 -0
  618. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
  619. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_entry_doc_check.py +0 -0
  620. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_execgov.py +0 -0
  621. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_execreg_launch_registry.py +0 -0
  622. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_execute_phase_handoff_mode.py +0 -0
  623. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_execution_policy_tiering.py +0 -0
  624. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_executor_availability.py +0 -0
  625. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_executor_exited_without_closeout_785.py +0 -0
  626. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_export_schema.py +0 -0
  627. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_activation_promotion.py +0 -0
  628. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_canonical_b.py +0 -0
  629. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_closeout_crash_safety.py +0 -0
  630. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_closeout_wiring.py +0 -0
  631. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_delta_c.py +0 -0
  632. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_delta_consumer.py +0 -0
  633. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
  634. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_gate_d.py +0 -0
  635. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_producer.py +0 -0
  636. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fab_provenance_a.py +0 -0
  637. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_admission_compat_789.py +0 -0
  638. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
  639. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_partition_rotation_789d.py +0 -0
  640. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_recovery_controls_789.py +0 -0
  641. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
  642. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_shared_epoch.py +0 -0
  643. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
  644. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
  645. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fabreadmit_broker.py +0 -0
  646. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fleet_map.py +0 -0
  647. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fleet_metrics.py +0 -0
  648. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_fleet_metrics_export.py +0 -0
  649. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_gate_a_wheel_isolation.py +0 -0
  650. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_gate_fail_open_visibility.py +0 -0
  651. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_gate_parity_244_245.py +0 -0
  652. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_gate_posture.py +0 -0
  653. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_git_discipline.py +0 -0
  654. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_git_grounded_projection.py +0 -0
  655. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_goal_coverage.py +0 -0
  656. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_cross_vendor_floor_358.py +0 -0
  657. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_disjointness_model_first.py +0 -0
  658. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_e2e.py +0 -0
  659. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_gate_crfixes.py +0 -0
  660. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_planning_gate.py +0 -0
  661. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_premerge_live.py +0 -0
  662. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_governed_review.py +0 -0
  663. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_declared_identity.py +0 -0
  664. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
  665. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_plan_pin_lint.py +0 -0
  666. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_producer_manifest.py +0 -0
  667. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_proof_stages.py +0 -0
  668. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_roadmap_reseal.py +0 -0
  669. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_skill_policy_parity.py +0 -0
  670. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_govlean_tdd_receipts.py +0 -0
  671. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_harden_evidence_producer.py +0 -0
  672. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_harden_json_depth_825.py +0 -0
  673. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_hotfix_lane.py +0 -0
  674. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_injection_skill_failloud.py +0 -0
  675. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_lane_ir_override.py +0 -0
  676. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_launchspec_golden.py +0 -0
  677. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_lease_store.py +0 -0
  678. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_lease_store_conformance.py +0 -0
  679. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ledger_serialization.py +0 -0
  680. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_leg_liveness_monitor.py +0 -0
  681. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_legible_evidence.py +0 -0
  682. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_live_smoke_gate_executes.py +0 -0
  683. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_manifest_per_entry_164.py +0 -0
  684. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_model_id_source_guard.py +0 -0
  685. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_native_claude_seat_fill.py +0 -0
  686. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_native_claude_seat_fill_green.py +0 -0
  687. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  688. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_observability_alerting.py +0 -0
  689. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_advisory.py +0 -0
  690. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_advisory_cli.py +0 -0
  691. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  692. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_authority_boundary.py +0 -0
  693. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_canonical_corpus.py +0 -0
  694. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_contract_drift.py +0 -0
  695. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_contract_imports.py +0 -0
  696. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_contract_pin.py +0 -0
  697. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_core_api.py +0 -0
  698. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_provenance.py +0 -0
  699. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_real_ci.py +0 -0
  700. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_real_cli.py +0 -0
  701. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_real_output.py +0 -0
  702. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_real_runtime.py +0 -0
  703. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_redaction.py +0 -0
  704. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_release_surface.py +0 -0
  705. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_schema_validation.py +0 -0
  706. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_outside_agent_vectors.py +0 -0
  707. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_packaged_vector_manifest_pin.py +0 -0
  708. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_advisory_mode_63.py +0 -0
  709. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  710. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_context_refs_114.py +0 -0
  711. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_gemini_no_command_preamble.py +0 -0
  712. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_invoker.py +0 -0
  713. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_invoker_windows_import.py +0 -0
  714. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  715. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_leg_failure_diagnostic.py +0 -0
  716. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_streaming_verdicts.py +0 -0
  717. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_tui_eof_48.py +0 -0
  718. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_tui_liveness_188.py +0 -0
  719. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_tui_workspace_trust_223.py +0 -0
  720. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_panel_verdict_summary.py +0 -0
  721. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_parallel_dispatch_backcompat.py +0 -0
  722. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_parallel_dispatch_cli.py +0 -0
  723. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_adoption_bundle.py +0 -0
  724. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  725. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_dependency.py +0 -0
  726. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  727. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_injection.py +0 -0
  728. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_modular.py +0 -0
  729. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  730. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  731. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_schema_export.py +0 -0
  732. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_baml_schema_source.py +0 -0
  733. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  734. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  735. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_build_bundle.py +0 -0
  736. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_classifier.py +0 -0
  737. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  738. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  739. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  740. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  741. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_channel_security.py +0 -0
  742. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  743. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  744. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  745. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_claude_route_selection.py +0 -0
  746. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_cli.py +0 -0
  747. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  748. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_control_only.py +0 -0
  749. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_event.py +0 -0
  750. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  751. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_hardening.py +0 -0
  752. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  753. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_schema.py +0 -0
  754. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_closeout_validation.py +0 -0
  755. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_collaborator_citation.py +0 -0
  756. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_collaborator_docs.py +0 -0
  757. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  758. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  759. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  760. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  761. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  762. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_discovery.py +0 -0
  763. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_docs.py +0 -0
  764. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  765. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  766. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  767. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  768. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_downstream_portal.py +0 -0
  769. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  770. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_drift_audit.py +0 -0
  771. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  772. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  773. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_events_migration.py +0 -0
  774. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_evidence_audit.py +0 -0
  775. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  776. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  777. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  778. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  779. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_executor_degradation.py +0 -0
  780. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_full_phase_mode.py +0 -0
  781. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_handoff.py +0 -0
  782. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_handoff_migration.py +0 -0
  783. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_init.py +0 -0
  784. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_injection.py +0 -0
  785. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_install_status.py +0 -0
  786. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  787. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_lane_harnesses.py +0 -0
  788. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_lane_ir.py +0 -0
  789. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  790. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_lane_scheduler.py +0 -0
  791. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_ledger_debug.py +0 -0
  792. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_ledger_dedup.py +0 -0
  793. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_live_adapters.py +0 -0
  794. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_maintenance.py +0 -0
  795. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_metrics.py +0 -0
  796. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_migration_regressions.py +0 -0
  797. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  798. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  799. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  800. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_models.py +0 -0
  801. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_native_flags.py +0 -0
  802. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  803. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pi_executor.py +0 -0
  804. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  805. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  806. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  807. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  808. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  809. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_pipeline_mode.py +0 -0
  810. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  811. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_plan_manifest.py +0 -0
  812. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  813. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_planner_validation.py +0 -0
  814. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_policy.py +0 -0
  815. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_protocol_contract.py +0 -0
  816. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_provenance.py +0 -0
  817. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_reconcile.py +0 -0
  818. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  819. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  820. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  821. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_reducers.py +0 -0
  822. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  823. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  824. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  825. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_rotation.py +0 -0
  826. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_runner.py +0 -0
  827. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  828. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_runtime_boundary.py +0 -0
  829. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_runtime_decouple.py +0 -0
  830. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_runtime_package_data.py +0 -0
  831. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_runtime_projection.py +0 -0
  832. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_schema_flow.py +0 -0
  833. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  834. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  835. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_skill_contract.py +0 -0
  836. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  837. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_skill_install.py +0 -0
  838. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  839. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_smoke_blockers.py +0 -0
  840. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  841. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_smoke_reentry.py +0 -0
  842. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  843. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  844. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  845. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_state.py +0 -0
  846. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  847. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  848. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  849. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  850. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  851. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_v22_e2e.py +0 -0
  852. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_v22_principles.py +0 -0
  853. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  854. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_v45_reconcile.py +0 -0
  855. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_v45_sched.py +0 -0
  856. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_wave_runner.py +0 -0
  857. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_work_unit_observability.py +0 -0
  858. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_work_unit_runner.py +0 -0
  859. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_work_unit_state.py +0 -0
  860. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_loop_worktrees.py +0 -0
  861. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  862. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_state_disagreement_312.py +0 -0
  863. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_phase_worktree_executor.py +0 -0
  864. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  865. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  866. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  867. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_flag.py +0 -0
  868. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_markers.py +0 -0
  869. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  870. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  871. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  872. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  873. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  874. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pkg_layout_freeze.py +0 -0
  875. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_plan_ir_iter_waves.py +0 -0
  876. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pr_readback_789.py +0 -0
  877. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_preflight_verification.py +0 -0
  878. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_proofgate_attestation_workflow.py +0 -0
  879. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_proofgate_cleanup.py +0 -0
  880. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_proofgate_isolation.py +0 -0
  881. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_proofgate_receipts.py +0 -0
  882. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_prune_merged_worktrees_script.py +0 -0
  883. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_publishing.py +0 -0
  884. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_pushflow.py +0 -0
  885. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_ratification_policy.py +0 -0
  886. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  887. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_reconcile_portability_85c.py +0 -0
  888. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  889. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_reconcile_verification_log.py +0 -0
  890. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
  891. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_reflection_sync.py +0 -0
  892. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  893. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_release_pin_autotrack.py +0 -0
  894. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_repo_validation.py +0 -0
  895. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_leg_sandbox.py +0 -0
  896. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_stage_binding.py +0 -0
  897. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_stage_board_findings.py +0 -0
  898. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_staged_tree_authorization.py +0 -0
  899. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_review_summary.py +0 -0
  900. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_roadmap_authority.py +0 -0
  901. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_roadmap_ownership.py +0 -0
  902. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_roadmap_representation_consistency.py +0 -0
  903. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_route_log.py +0 -0
  904. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_route_policy_conformance.py +0 -0
  905. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_routing_invariants.py +0 -0
  906. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
  907. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_runtime_adapter_output_720.py +0 -0
  908. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_runtime_event_log_hardening_720.py +0 -0
  909. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_runtime_procfs_identity_870.py +0 -0
  910. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_runtime_state_mirror_agreement.py +0 -0
  911. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sandbox_clone.py +0 -0
  912. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sandbox_policy.py +0 -0
  913. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sandbox_preamble.py +0 -0
  914. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sandbox_retention.py +0 -0
  915. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  916. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sibling_matcher_patterns.py +0 -0
  917. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skill_bundle_pinned.py +0 -0
  918. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skill_install_body_expansion.py +0 -0
  919. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skill_plan_manifest_write.py +0 -0
  920. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skill_sources_seam.py +0 -0
  921. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skills_bundle_drift.py +0 -0
  922. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_skills_src_claude_literal_lint.py +0 -0
  923. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_spec_conformance_gate.py +0 -0
  924. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_specpkgmin_wheel.py +0 -0
  925. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
  926. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_status_read_only_62.py +0 -0
  927. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  928. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  929. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_sync_skills_apply_failloud.py +0 -0
  930. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_task_message_broker.py +0 -0
  931. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_task_message_broker_cli.py +0 -0
  932. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_task_message_resolver.py +0 -0
  933. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
  934. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_authority_import_811.py +0 -0
  935. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_e2e.py +0 -0
  936. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_invariants.py +0 -0
  937. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_merge.py +0 -0
  938. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_order_only_deps_47.py +0 -0
  939. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_prebuilt.py +0 -0
  940. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_review_authorization.py +0 -0
  941. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_roadmap.py +0 -0
  942. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_train_runner.py +0 -0
  943. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_unattended_release.py +0 -0
  944. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  945. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  946. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_validate_plan_doc_fail_closed.py +0 -0
  947. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  948. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  949. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_validate_plan_doc_proofgate.py +0 -0
  950. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_verification_dotdot_execution_428.py +0 -0
  951. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_verification_evidence.py +0 -0
  952. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_verification_evidence_validator.py +0 -0
  953. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_verification_interpreter_guard_221.py +0 -0
  954. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_verification_venv_identity_428.py +0 -0
  955. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_visual_avatar_evidence_validator.py +0 -0
  956. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_visual_evidence_validator.py +0 -0
  957. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_workerpool_failure_isolation.py +0 -0
  958. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_workerpool_parallel.py +0 -0
  959. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/tests/test_workerpool_worktree_alloc.py +0 -0
  960. {phase_loop_runtime-0.7.16 → phase_loop_runtime-0.7.17}/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.16
3
+ Version: 0.7.17
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.16 # …or pin an exact version
52
+ pip install phase-loop-runtime==0.7.17 # …or pin an exact version
53
53
  ```
54
54
 
55
55
  To pin a specific tag from source instead, substitute a tag from
@@ -19,7 +19,7 @@ To install just this runtime package directly:
19
19
 
20
20
  ```sh
21
21
  pip install phase-loop-runtime # latest compatible release
22
- pip install phase-loop-runtime==0.7.16 # …or pin an exact version
22
+ pip install phase-loop-runtime==0.7.17 # …or pin an exact version
23
23
  ```
24
24
 
25
25
  To pin a specific tag from source instead, substitute a tag from
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
7
- version = "0.7.16"
7
+ version = "0.7.17"
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.16"
21
+ __version__ = "0.7.17"
@@ -95,14 +95,17 @@ equivalence is proven by a test (not asserted in prose).
95
95
  deferred seat natively and the fill counts only once bound (EC-REVIEWTRUTH-14,
96
96
  agent-harness#921) — the host×seat routing rule above.
97
97
  - **`VENDOR_API_KEY_VARS`** — the flat `_API_KEY_VARS` tuple re-keyed by vendor
98
- family; its union equals today's tuple (proven), so scrubbing stays
99
- byte-equivalent.
98
+ family; its union equals today's tuple (proven). It is also the api-key INJECTION map.
99
+ `scrub_subscription_env` additionally removes `SUBSCRIPTION_SCRUB_ONLY_VARS`
100
+ (`XAI_API_KEY`, `GROK_CODE_XAI_API_KEY`; agent-harness#864): the api-key variables of the
101
+ subscription-only grok harness, scrubbed but never injectable -- and
102
+ `GROK_SUBSCRIPTION_BLOCKED_ENV_VARS`, grok's endpoint redirects.
100
103
 
101
104
  ## IF-0-ABDFREEZE-4 — Back-compat contract · `fixtures.py` + `tests/test_advisor_board_backcompat.py`
102
105
 
103
106
  - The model-first `default` board (`DEFAULT_BOARD`) resolves four vendors in
104
- `DEFAULT_BOARD_VENDOR_ORDER`: Codex/Sol, Gemini/Flash high, Claude/Fable, and
105
- Grok 4.6. The separate legacy `PANEL_LEGS` tuple and explicit `invoke_panel`
107
+ `DEFAULT_BOARD_VENDOR_ORDER`: Codex/Sol, Gemini/Flash high, Claude/Opus 5.5, and
108
+ Grok 4.7. The separate legacy `PANEL_LEGS` tuple and explicit `invoke_panel`
106
109
  API remain the frozen three-leg Codex/Gemini/Claude boundary.
107
110
  - `advisor-panel` stays a working alias of `advisor-board` — the rename + alias is
108
111
  ABDRESOLVE; this contract only *states* the invariant.
@@ -184,24 +187,27 @@ The seven built-in presets (`presets.PRESETS`). Every preset self-validates agai
184
187
  the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
185
188
  `tests/test_advisor_board_integration.py`).
186
189
 
187
- - **Review-class = Fable, decoupled from the implementer.** Pre-merge and legal
188
- review are mid-tier decisions where being wrong is expensive, so the review-class
189
- boards (`default`, `code-review`, `legal-review`, `legal-strategy-review`) seat
190
- Fable (`claude-fable-5-1`) on the claude lane — NOT the implementer model
190
+ - **Review-class = Opus 5.5 (for now), decoupled from the implementer.** Pre-merge
191
+ and legal review are mid-tier decisions where being wrong is expensive, so the
192
+ review-class boards (`default`, `code-review`, `legal-review`,
193
+ `legal-strategy-review`) seat Opus 5.5 (`claude-opus-5-5`) on the claude lane — the
194
+ maintainer's review default "for now" (2026-09-23), Fable (`claude-fable-5-1`)
195
+ before that and still selectable — NOT the implementer model
191
196
  `profiles.CLAUDE_IMPLEMENTER_MODEL` (`claude-sonnet-5`). `panel_invoker.DEFAULT_LEG_MODELS["claude"]`
192
197
  is the SINGLE source of truth for the panel's default claude model: the claude
193
198
  leg builder (`_claude_tui_command`) and the Agent-View attempt both read it, so
194
199
  the *legacy* `invoke_panel` path AND the live governed gates
195
200
  (`governed_review` / `governed_premerge`, which call `invoke_panel` with no model
196
- override) review on Fable. `CLAUDE_IMPLEMENTER_MODEL` is untouched — the
201
+ override) review on Opus 5.5. `CLAUDE_IMPLEMENTER_MODEL` is untouched — the
197
202
  implementer stays Sonnet. The `default` board (`fixtures.DEFAULT_BOARD`) is
198
- byte-pinned to this Fable `invoke_panel` panel by the golden proof
203
+ byte-pinned to this `invoke_panel` panel by the golden proof
199
204
  (`tests/test_advisor_board_golden.py`); the sole sanctioned delta stays `seat_key`.
200
205
  - **`default` and `code-review` are four-vendor frontier boards.** Gemini uses
201
- `gemini-3.8-flash` at its `high` ceiling alongside Sol, Fable, and Grok 4.6;
206
+ `gemini-3.8-flash` at its `high` ceiling alongside Sol, Opus 5.5, and Grok 4.7;
202
207
  `code-review` preserves availability-aware backfill and distinct lenses.
203
- - **President availability ladder.** Review findings go first to Fable, then
204
- Sol, Grok 4.6, and Gemini 3.8 Flash. Descent occurs only for a typed
208
+ - **President availability ladder.** Review findings go first to the `fable` seat
209
+ (Opus 5.5 by default — the rung names the seat, not the model), then
210
+ Sol, Grok 4.7, and Gemini 3.8 Flash. Descent occurs only for a typed
205
211
  `president_unavailable` result, never because a president dissents. The ladder
206
212
  is EXECUTED (not merely declared) by every `requires_president` landing policy —
207
213
  see ABDPRES below.
@@ -214,8 +220,8 @@ the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
214
220
  - **Catch-alls for unmodeled tasks (`general`, `solo`).** So the board library is not
215
221
  limited to the pre-modeled domains: `general` is the domain-agnostic top-tier PANEL
216
222
  (three frontier vendors — gpt-6-astra/adversarial, gemini-3.8-flash/alternative,
217
- claude-fable-5-1/completeness — hand it any task + brief), and `solo` is the
218
- single-MEMBER form (one `claude-fable-5-1` seat) for a quick top-end opinion when a
223
+ claude-opus-5-5/completeness — hand it any task + brief), and `solo` is the
224
+ single-MEMBER form (one `claude-opus-5-5` seat) for a quick top-end opinion when a
219
225
  panel is overkill. A ONE-seat board validates + resolves through `invoke_board` like
220
226
  any other (bare/single seats are supported). Both default to TOP-END models: an
221
227
  unanticipated task cannot be assumed low-stakes, so the safe default is frontier —
@@ -450,7 +456,9 @@ a landing decision. `tests/test_president_wiring.py`.
450
456
  seated rung with it: the governed caller must receive that as a board result it
451
457
  persists, not as an error it never records. Only a caller-contract error
452
458
  (`president_round_limit`) propagates as `PresidentPolicyError`.
453
- - **Execution route (fail-closed by design).** `president_adapter.build_president_invoke`
459
+ - **Execution route — SUPERSEDED by ABDPRESROUTE below** (agent-harness#952): a seated
460
+ rung now runs through `public_board_president.v1`. The text of this bullet records the
461
+ pre-PRESROUTE route. `president_adapter.build_president_invoke`
454
462
  binds the ladder to a board's seats (`seat_for_rung`: rung alias → seat model →
455
463
  harness). An UNSEATED rung answers typed `president_unavailable` (the ladder
456
464
  descends). A SEATED rung answers `failed` / `president_execution_route_unavailable`
@@ -486,13 +494,139 @@ a landing decision. `tests/test_president_wiring.py`.
486
494
  president passes an explicit `review_policy=ReviewLandingPolicy(required_seats=...,
487
495
  requires_president=False)` rather than a president-requiring tier.
488
496
 
497
+ ## ABDPRESROUTE — The president operation · `president_operation.py`, `president_adapter.py`, `advisor_board/backing.py`, `panel_invoker.invoke_board` (IF-0-PRESROUTE-1, Consiliency/agent-harness#952)
498
+
499
+ The president's OWN HARDEN-authorized operation, `public_board_president.v1`, beside —
500
+ never through — the review operation `public_board_review.v1`. Frozen falsifiers:
501
+ `tests/test_president_wiring.py`, `tests/test_govlean_panel_policy.py` (SL-0,
502
+ `content_tdd_receipt.v1`), golden `tests/data/president_ruling_v1.golden.json`.
503
+
504
+ - **Callable.** `president_operation.run_president_operation(*, brief, findings,
505
+ authorization, invoke, max_substantive_rounds) -> PresidentOperationResult(ruling,
506
+ authorization_identity, rung_index, brief_digest, findings_digest)`. It refuses an
507
+ authorization whose `operation` is not exactly `public_board_president.v1`
508
+ (`PresidentPolicyError("president_operation_authorization_mismatch")`) BEFORE any rung
509
+ is invoked, then walks `PRESIDENT_LADDER` through `invoke` with the president prompt
510
+ built from the findings; the brief is digested, not sent.
511
+ - **Digests.** `brief_digest = sha256(brief)`; `findings_digest =
512
+ sha256("\n".join(findings))` in prompt order; lowercase hex. On a board, the brief is
513
+ the composed president prompt `_president_prompt(findings)`.
514
+ - **Completion grammar.** Per-finding `FINDING <id>: BLOCKING|DEFERRED — <reason>`,
515
+ terminal `FORCING DECISION: <decision>` (`_valid_president_grammar`); a launched rung's
516
+ turn is complete when its last line is a non-empty `FORCING DECISION:`
517
+ (`_completion_ok(text, "president")`), never a review verdict.
518
+ - **Authorization.** `backing.prepare_president_isolation_authorization(board, brief)`
519
+ mints `PresidentIsolationAuthorization` (same seal as review isolation;
520
+ `child_credentialless=True`, `child_network_egress=False`, `live_tree_exposed=False`,
521
+ `api_fallback=False`; subscription routes; brief digest; repository identity when the
522
+ launch has one — the operation reads no tree). The adapter revalidates it
523
+ (`revalidate_president_isolation_authorization`) immediately before a rung launches and
524
+ launches that authorization's route; a seat the authorization does not route (Claude
525
+ included) is refused without launching.
526
+ - **Rung routes** (`president_adapter.build_president_invoke(..., monitoring_policy=)`).
527
+ Unseated rung → typed `president_unavailable` (descend). `sol` / `grok` → the brokered
528
+ `_exec_leg` in a throwaway directory, whose only launch is `launch_provider`. `gemini` →
529
+ the broker's acknowledged agy stream with the PRESIDENT's own final instruction (a ruling,
530
+ not a review verdict), launched through `_run_leg_with_liveness` → `launch_provider` and
531
+ decoded by `_broker_gemini_stream_result`; with the agy subscription credential it runs in
532
+ the broker's agy profile, without one in an empty private HOME (no credential of any kind),
533
+ so the provider itself refuses and the failure is typed. `fable` under Claude Code (from the passed `base_env`; the adapter
534
+ falls back to the process environment only when none is passed, so it never spawns a
535
+ second TUI) → a deferred native fill `{"status": "native_fill_deferred", rung,
536
+ brief_digest, findings_digest}`, refused with `president_fill_heartbeat_refused` under
537
+ `heartbeat_only`. `fable` elsewhere → the brokered self-PTY session
538
+ (`_run_claude_tui_session`, tools off, no directory grant). A failed launch is a typed
539
+ `failed` (`president_invocation_failed`, no descent).
540
+ - **Ladder** (EC-PRESROUTE-3). `PRESIDENT_LADDER` is the seat-alias tuple; each alias
541
+ resolves to its vendor's registry PIN through `DEFAULT_REVIEW_SEAT_ALIASES` (where the
542
+ `model-id-source:` markers live). No model id is spelled in the ladder.
543
+ - **Brokered, monitored launch** (agent-harness#1001). Every non-native rung launch runs
544
+ under the isolation a review seat gets: `isolated_network` egress (no retained
545
+ capabilities), a single-use broker capability minted by
546
+ `backing.derive_president_leg_authorization` from the operation's lease
547
+ (`prepare_president_isolation_authorization(..., monitoring_policy=)` registers it;
548
+ `activate_/close_president_isolation_authorization` bracket each launch) carrying the
549
+ PRESIDENT operation identity, and the `ParentUnixBroker` over read-only staged bytes (the
550
+ brief and a fixed president instruction marker). Under `heartbeat_only` the transport runs
551
+ with a `_ReviewMonitor` -- no model-thinking deadline, no silence kill; cancellation (the
552
+ board's `cancel_event`) and owner loss are the only stops -- and the gemini rung uses the
553
+ owned heartbeat agy profile, and the Claude rung hands the broker's quiescence latch to its
554
+ TUI session. A missing canonical repository, an empty egress prefix (always -- the
555
+ authorization declares no network egress) or a cancelled operation
556
+ (`president_operation_cancelled`, which stops the walk) is a typed refusal before any provider
557
+ starts. Under BOUNDED monitoring only, a patched transport or launch site is the in-process
558
+ control seam and is not brokered (never evidence), as for review seats; `heartbeat_only` is
559
+ always brokered.
560
+ - **Configured ladder** (agent-harness#998 follow-up). `PRESIDENT_LADDER` is the BUILT-IN
561
+ order; the effective order is `advisor_board.config.load_president_ladder(repo_dir, *,
562
+ env, path)`: built-in < the user file's `[president] ladder`
563
+ (`$XDG_CONFIG_HOME/agent-harness/advisor-boards.toml`) < the repository's
564
+ `<repo>/.agent-harness/advisor-boards.toml` (`[president]` only; `[[boards]]` there is
565
+ refused). A ladder is a non-empty list of distinct seat aliases or alias-table model ids
566
+ (`validate_president_ladder`); a malformed one or an unknown key is `BoardConfigError`,
567
+ never a silent fall-back. The seam carries it (`build_president_invoke(..., ladder=)`,
568
+ `PresidentInvoke.ladder`); `invoke_president` walks `effective_president_ladder(invoke)`
569
+ (the seam's ladder, else the built-in), and `rung_index` is the rung's position in THAT
570
+ ladder. The phase-loop runner (`_run_legible_panel`), `advisor-board --landing-tier` and
571
+ `invoke_board`'s auto-wired seam load it; a malformed ladder is refused before any seat
572
+ (`president_ladder_invalid` / CLI exit 2). The user layer follows the environment it is
573
+ given: the auto-wired seam reads it from the passed `base_env` (its `XDG_CONFIG_HOME`,
574
+ else its `HOME`; neither ⇒ no user layer), never from the process HOME.
575
+ - **Defer → resume** (EC-PRESROUTE-2). A deferred Fable rung makes `invoke_board` return
576
+ the seats with `PanelResult.needs_native_president` = `{rung, brief_digest,
577
+ findings_digest, prompt}` and no ruling, persisting `president.pending.json`
578
+ (`president.pending.v1`: the request plus the findings and seat verdicts it was built
579
+ from) to `stream_dir`; a deferral without `stream_dir` is refused
580
+ (`president_native_fill_stream_required`). `invoke_board(..., native_president_fill=
581
+ {rung, brief_digest, findings_digest, text})` RESUMES after the same factory /
582
+ revalidation gate and before any seat launches -- no seat is re-run, so seats that would
583
+ word things differently cannot strand the route. The pending request is BOUND to its run
584
+ (resolved-artifact digest, the review-brief digest captured ONCE before any seat runs,
585
+ the board's ordered seat keys, mode, landing policy, president ladder and the seat each
586
+ rung resolves to under the run's `review_seat_aliases`) and the resume
587
+ refuses any difference. A new deferral removes any `president.ruling.json` an earlier
588
+ run left in the stream (after its pending request is written); every persisted ruling
589
+ removes any pending request (so an older request cannot later resume over it). The
590
+ resume and the ruling record resolve the rung through the run's `review_seat_aliases`. The fill is accepted only when that binding matches, the
591
+ stored verdicts are this board's seats in order and re-derive the stored findings, the
592
+ pending rung is this board's natively filled (Claude) rung, the persisted digests
593
+ recompute from the stored findings, the fill's rung and BOTH digests equal them, and the
594
+ text passes the ruling grammar for those findings. An accepted request is CONSUMED (it
595
+ answers once). This guards against a stale or mismatched stream, not a caller who forges
596
+ its own stream directory (the stream is the caller's durable context); otherwise `president_fill_digest_mismatch` (or
597
+ `president_ruling_format_missing` / `president_native_fill_stream_required`) and nothing
598
+ is persisted. The resumed result carries the deferred seats' verdicts (republished to the
599
+ stream) and the ruling. Under Claude Code, `invoke_board` wires the adapter itself when no
600
+ seam is passed -- keyed on the PASSED `base_env` only, never the process environment.
601
+ - **Ruling record** (EC-PRESROUTE-5). Every president ruling a board obtains on a call that
602
+ has a review stream (`stream_dir`; the runner and the CLI always pass one, and the native
603
+ path refuses without one) is written atomically to `<stream_dir>/president.ruling.json`.
604
+ A stream-less call -- which the frozen SL-0 corpus exercises on several president nodes --
605
+ returns its ruling unrecorded, since there is no stream to record it in. Schema
606
+ `president.ruling.v1`:
607
+ `schema`, `authorization_identity` (`public_board_president.v1`), `rung_index`,
608
+ `model_id` (the ruling rung's registry PIN on the board), `format_reask_count`,
609
+ `brief_digest`, `findings_digest`, `forcing_decision`, `finding_rulings`
610
+ (`[{id, disposition, reason}]`). `president_operation.president_ruling_record(result)`
611
+ builds the same shape from a `PresidentOperationResult`.
612
+ - **Override expiry** (EC-PRESROUTE-4). `panel_invoker.enforce_requires_president(tier,
613
+ *, requires_president)` refuses a `plan`/`production_code` landing carrying
614
+ `requires_president=False` (`requires_president_override_refused`); `invoke_board`
615
+ calls it whenever a `landing_tier` is given. The interim ratification note is EXPIRED.
616
+ - **CLI.** `advisor-board --landing-tier <tier>` runs the board under a tier (a president
617
+ tier binds the seam to the driving process's environment);
618
+ `--native-president FILL.json` resumes a deferred rung against the pending request
619
+ under `--native-fill-dir`/`native-fill/president/`.
620
+
489
621
  ## Review monitoring policy v1 (agent-harness#892)
490
622
 
491
623
  The opt-in policy vocabulary is `bounded | heartbeat_only`; omission is bounded.
492
- Heartbeat-only permits only brokered subscription/homebrew Claude TUI, Codex,
493
- and Grok, with no timeout overrides, capture, research, API fallback, gateway,
494
- or native host seat. Whole-board capability preflight precedes availability,
495
- auth, session creation, and provider dispatch. Gemini/agy remains unsupported.
624
+ Heartbeat-only permits brokered subscription/homebrew Claude TUI, Codex and
625
+ Grok, plus the qualified Gemini extension below. It permits no timeout overrides,
626
+ capture, research, API fallback, gateway or native host seat. Whole-board
627
+ capability preflight precedes availability, auth, session creation and provider
628
+ dispatch. Missing or changed Gemini capability refuses the requested whole board;
629
+ its membership is never reduced or backfilled to satisfy this policy.
496
630
 
497
631
  The requested/effective policy is bound to the operation lease and minted leg.
498
632
  Heartbeat-only admission expires 10 seconds after minting and is single-use;
@@ -523,3 +657,52 @@ PID ownership is established after network entry but before the capability bound
523
657
  set is emptied. Every launch retains the common provider launch seam and broker
524
658
  threads inherit its ContextVar prefix. EgressUnavailable stays DEGRADED with empty
525
659
  review text and the exception in detail; sandbox facts describe actual enforcement.
660
+
661
+ ### Qualified Gemini extension (agent-harness#905)
662
+
663
+ The Linux x64 subscription `agy` 1.2.10 entry image must match SHA256
664
+ `aea7ed8df1e79b716c0ccd14c7d8086db75b14da535ffb7febdec9a488deff67`.
665
+ The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
666
+ Python version alone is not a capability check. Unknown images or missing
667
+ capabilities refuse before availability/auth effects. Required bwrap mount/gate
668
+ flags are checked at admission, before inference. Measure help through the
669
+ admitted `agy` filename: the usage line includes that name, while the same
670
+ archive member invoked as `antigravity` produces different help bytes. The
671
+ measured help defines literal `--print-timeout 0` as waiting for completion.
672
+ A quick real completion establishes compatibility; clock controls establish
673
+ that old runtime deadlines and silence cannot terminate a healthy heartbeat-only
674
+ operation.
675
+
676
+ The sealed image and deny-all settings are read-only mounts inside a private
677
+ HOME owned by the existing PID/mount namespace. A private symlink references the
678
+ subscription credential; no credential payload is copied, logged or restored.
679
+ Heartbeat credential lookup uses the supplied scrubbed HOME, recording a process
680
+ HOME fallback truthfully if HOME is absent. Legitimate refresh writes survive.
681
+ The real qualification driver requires an explicit HOME and checks target
682
+ presence before and after, without reading its contents.
683
+
684
+ The broker transports same-session acknowledged input over stdin, with no tree
685
+ attachment, `--add-dir`, permission bypass, retry or native thinking timer. Empty,
686
+ rejected and nonzero-exit streams remain non-votes with fixed diagnostics;
687
+ provider stdout/stderr and arbitrary exception strings are not substituted for
688
+ review prose. Native timeout under zero has a distinct diagnostic. Bounded
689
+ retry timing and supported positive deadline argv remain unchanged; accepted
690
+ Gemini review prose excludes stderr.
691
+
692
+ Namespace init identity is held before execution is released. Cancellation
693
+ reaps before closing a blocked execution gate; abrupt owner death can release
694
+ its EOF gate shortly before the parent-death signal takes effect. There is no
695
+ strict zero-exec claim for abrupt loss. Cleanup requires namespace-init exit
696
+ and corroborating observations, including detached/nested descendants. Failed
697
+ quiescence cannot yield a usable vote. No receipt proves remote billing settlement.
698
+
699
+ `phase-loop-runtime/scripts/qualify_gemini_heartbeat.py` separately qualifies
700
+ completion, cancellation after observed progress, and abrupt owner loss. Its
701
+ receipts bind package source, image/help/profile/helper hashes, inputs, argv,
702
+ monitoring, broker records and local cleanup observations. Helper evidence is
703
+ sampled, not a complete exec audit; the entry image pin does not freeze helper
704
+ images. Directory validation accounts for every attempt in the declared series
705
+ root, rejecting failures, omissions and terminal/admission mismatches. Preserve
706
+ failed series; diagnose a changed candidate before another attempt. Validation
707
+ uses that host's measured helper images. These receipts do not replace the
708
+ historical bounded-success evidence verifier.
@@ -225,7 +225,7 @@ def resolve_review_monitoring_policy(
225
225
  raise ValueError("review_monitoring_unsupported_api_fallback")
226
226
  for seat in getattr(board, "seats", ()):
227
227
  lane = str(seat.harness or "").lower()
228
- if (lane not in ("claude", "codex", "grok")
228
+ if (lane not in ("claude", "codex", "grok", "gemini")
229
229
  or seat.auth != AUTH_SUBSCRIPTION or seat.backing != BACKING_HOMEBREW
230
230
  or seat.host_leg):
231
231
  raise ValueError(f"review_monitoring_unsupported_route:{lane or 'unresolved'}")
@@ -1292,8 +1292,38 @@ CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS: tuple[str, ...] = (
1292
1292
  )
1293
1293
 
1294
1294
 
1295
+ # API-key variables of a SUBSCRIPTION-ONLY harness (agent-harness#864). They are removed
1296
+ # from every subscription child environment but are deliberately NOT in
1297
+ # ``VENDOR_API_KEY_VARS``: that map is also the api-key INJECTION map, and grok has no
1298
+ # api-key lane (``registries``), so no opt-in may ever inject one. Names from the grok
1299
+ # CLI's own documentation: ``XAI_API_KEY`` (Bearer API key) and ``GROK_CODE_XAI_API_KEY``
1300
+ # (its backward-compatible alias).
1301
+ SUBSCRIPTION_SCRUB_ONLY_VARS: tuple[str, ...] = ("XAI_API_KEY", "GROK_CODE_XAI_API_KEY")
1302
+
1303
+ # Endpoint selectors that redirect a grok child's inference traffic away from the
1304
+ # subscription service -- the grok counterpart of ``ANTHROPIC_BASE_URL`` in
1305
+ # ``CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS``. Documented by the grok CLI (1.0.41):
1306
+ # ``GROK_CLI_CHAT_PROXY_BASE_URL`` (override the cli-chat-proxy URL),
1307
+ # ``GROK_XAI_API_BASE_URL`` (public xAI API base) and ``GROK_MODELS_BASE_URL`` (custom
1308
+ # inference base URL). ``XAI_API_BASE_URL`` is NOT shown to be read by the CLI; it is
1309
+ # removed defensively (an xAI SDK-style endpoint name; removing it is harmless).
1310
+ # Not exhaustive: other grok configuration (e.g. its config-file endpoints) is out of
1311
+ # an environment scrub's reach.
1312
+ GROK_SUBSCRIPTION_BLOCKED_ENV_VARS: tuple[str, ...] = (
1313
+ "GROK_CLI_CHAT_PROXY_BASE_URL",
1314
+ "GROK_XAI_API_BASE_URL",
1315
+ "GROK_MODELS_BASE_URL",
1316
+ "XAI_API_BASE_URL",
1317
+ )
1318
+
1319
+
1295
1320
  def all_vendor_key_vars() -> tuple[str, ...]:
1296
- """Every vendor API-key var (scrub set for a subscription seat)."""
1321
+ """Every INJECTABLE vendor API-key var (``VENDOR_API_KEY_VARS``).
1322
+
1323
+ A subset of what a subscription seat loses: ``scrub_subscription_env`` also removes
1324
+ ``SUBSCRIPTION_SCRUB_ONLY_VARS`` and the per-harness blocked selectors. Filter with
1325
+ ``scrub_subscription_env``, never with this alone.
1326
+ """
1297
1327
  seen: list[str] = []
1298
1328
  for vars_ in VENDOR_API_KEY_VARS.values():
1299
1329
  for var in vars_:
@@ -1305,12 +1335,19 @@ def all_vendor_key_vars() -> tuple[str, ...]:
1305
1335
  def scrub_subscription_env(base_env: Mapping[str, str]) -> dict[str, str]:
1306
1336
  """Return a subscription-only child environment.
1307
1337
 
1308
- All vendor API keys are removed. Claude-specific credential helpers,
1338
+ All vendor API keys are removed -- including the api-key variables of the
1339
+ subscription-only grok harness (``SUBSCRIPTION_SCRUB_ONLY_VARS``) and grok's
1340
+ endpoint redirects (``GROK_SUBSCRIPTION_BLOCKED_ENV_VARS``). Claude-specific credential helpers,
1309
1341
  custom request headers, alternate endpoints, and cloud-provider selectors
1310
1342
  are removed as well so a Claude seat cannot silently escape the first-party
1311
1343
  subscription lane.
1312
1344
  """
1313
- blocked = set(all_vendor_key_vars()) | set(CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS)
1345
+ blocked = (
1346
+ set(all_vendor_key_vars())
1347
+ | set(SUBSCRIPTION_SCRUB_ONLY_VARS)
1348
+ | set(CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS)
1349
+ | set(GROK_SUBSCRIPTION_BLOCKED_ENV_VARS)
1350
+ )
1314
1351
  return {key: value for key, value in base_env.items() if key not in blocked}
1315
1352
 
1316
1353
 
@@ -1384,6 +1421,246 @@ def resolve_seat_env(
1384
1421
  raise ValueError(f"unknown seat.auth {seat.auth!r}")
1385
1422
 
1386
1423
 
1424
+ # --- PRESROUTE (v10 Phase 14): the president operation's authorization ---------------
1425
+ #
1426
+ # ADDITIVE beside ``public_board_review.v1``; the review authorization above is not
1427
+ # touched. The president operation rules on a board's findings; it never reads a
1428
+ # tree, so no tree is staged and none is exposed. Minted like review isolation (the
1429
+ # same seal, subscription routes and repository-identity digest) and revalidated
1430
+ # immediately before a rung launches, exactly as ``spawn`` revalidates the review
1431
+ # authorization before it launches.
1432
+
1433
+ PRESIDENT_OPERATION_V1 = "public_board_president.v1"
1434
+
1435
+
1436
+ @dataclass(frozen=True)
1437
+ class PresidentIsolationAuthorization:
1438
+ """Capability for one brokered president operation over one brief.
1439
+
1440
+ Metadata and digests only, like :class:`ReviewIsolationAuthorization`: no child
1441
+ credential, provider method, host command or live-tree path crosses it, and
1442
+ ``_seal`` is identity-checked here and never serialized.
1443
+ """
1444
+
1445
+ operation: str
1446
+ purpose: str
1447
+ brief_sha256: str
1448
+ broker_contract: str
1449
+ routes: tuple[tuple[str, str], ...]
1450
+ child_credentialless: bool
1451
+ child_network_egress: bool
1452
+ live_tree_exposed: bool
1453
+ api_fallback: bool
1454
+ canonical_repo_sha256: str
1455
+ issued_monotonic_ns: int
1456
+ _seal: object
1457
+ # agent-harness#1001: the policy every rung launch of this operation runs under.
1458
+ # ``heartbeat_only`` = no model-thinking deadline and no silence kill; the leg's
1459
+ # admission window is the only clock. Bound to the operation's lease.
1460
+ monitoring_policy: str = "bounded"
1461
+
1462
+
1463
+ def _president_repo_digest(canonical_repo_authority: Path | str | None) -> str:
1464
+ """Repository identity when there is one, else ``""``.
1465
+
1466
+ Unlike review isolation, the president operation reads no tree -- only the findings
1467
+ text in its brief -- so a missing repository is not a reason to refuse it. Where a
1468
+ repository exists its identity is still bound, and revalidation recomputes the same
1469
+ value, so an authorization carried to a different repository is refused.
1470
+ """
1471
+ try:
1472
+ return _canonical_repo_digest(canonical_repo_authority)
1473
+ except ValueError:
1474
+ return ""
1475
+
1476
+
1477
+ def _president_routes(board: object) -> tuple[tuple[str, str], ...]:
1478
+ routes: list[tuple[str, str]] = []
1479
+ for seat in getattr(board, "seats", ()):
1480
+ harness = str(getattr(seat, "harness", "") or "").lower()
1481
+ model = str(getattr(seat, "model", ""))
1482
+ if not harness:
1483
+ continue
1484
+ if getattr(seat, "auth", None) != AUTH_SUBSCRIPTION or getattr(seat, "backing", None) != BACKING_HOMEBREW:
1485
+ continue
1486
+ try:
1487
+ routes.append((harness, harden_subscription_model(harness, model, getattr(seat, "effort", None))))
1488
+ except ValueError:
1489
+ # Same rule as review isolation: a non-policy Claude seat is a native-host
1490
+ # fill, never a brokered provider route.
1491
+ if harness != "claude":
1492
+ raise
1493
+ return tuple(routes)
1494
+
1495
+
1496
+ def prepare_president_isolation_authorization(
1497
+ board: object,
1498
+ brief: str,
1499
+ *,
1500
+ canonical_repo_authority: Path | str | None = None,
1501
+ monitoring_policy: str = "bounded",
1502
+ ) -> PresidentIsolationAuthorization:
1503
+ """Authorize one president operation over ``brief`` before any provider effect.
1504
+
1505
+ Registers the operation's single-use lease (as review isolation does): a brokered
1506
+ rung launch activates it, derives one leg capability per launch from it, and closes it.
1507
+ """
1508
+ if platform.system() != "Linux":
1509
+ raise ValueError("HARDEN president isolation requires Linux")
1510
+ if monitoring_policy not in ("bounded", "heartbeat_only"):
1511
+ raise ValueError("review_monitoring_policy_invalid")
1512
+ authorization = PresidentIsolationAuthorization(
1513
+ operation=PRESIDENT_OPERATION_V1,
1514
+ purpose=str(getattr(board, "purpose", "")),
1515
+ brief_sha256=sha256(brief.encode("utf-8")).hexdigest(),
1516
+ broker_contract=PARENT_UNIX_BROKER_V1,
1517
+ routes=_president_routes(board),
1518
+ child_credentialless=True,
1519
+ child_network_egress=False,
1520
+ live_tree_exposed=False,
1521
+ api_fallback=False,
1522
+ canonical_repo_sha256=_president_repo_digest(canonical_repo_authority),
1523
+ issued_monotonic_ns=time.monotonic_ns(),
1524
+ _seal=_AUTHORIZATION_SEAL,
1525
+ monitoring_policy=monitoring_policy,
1526
+ )
1527
+ _remember_lease(authorization) # type: ignore[arg-type]
1528
+ return authorization
1529
+
1530
+
1531
+ def revalidate_president_isolation_authorization(
1532
+ authorization: PresidentIsolationAuthorization | None,
1533
+ board: object,
1534
+ brief: str,
1535
+ *,
1536
+ canonical_repo_authority: Path | str | None = None,
1537
+ ) -> None:
1538
+ """Independently revalidate a president authorization immediately before use.
1539
+
1540
+ Refuses a missing, forged or foreign authorization, one minted for another
1541
+ brief or board, and one whose isolation posture was altered.
1542
+ """
1543
+ if (
1544
+ not isinstance(authorization, PresidentIsolationAuthorization)
1545
+ or authorization._seal is not _AUTHORIZATION_SEAL
1546
+ ):
1547
+ raise ValueError("missing or forged HARDEN president authorization")
1548
+ if (
1549
+ authorization.operation != PRESIDENT_OPERATION_V1
1550
+ or authorization.brief_sha256 != sha256(brief.encode("utf-8")).hexdigest()
1551
+ or authorization.broker_contract != PARENT_UNIX_BROKER_V1
1552
+ or authorization.routes != _president_routes(board)
1553
+ or not authorization.child_credentialless
1554
+ or authorization.child_network_egress
1555
+ or authorization.live_tree_exposed
1556
+ or authorization.api_fallback
1557
+ or authorization.canonical_repo_sha256 != _president_repo_digest(canonical_repo_authority)
1558
+ ):
1559
+ raise ValueError("HARDEN president authorization does not match this operation")
1560
+ try:
1561
+ lease = _lease_for(authorization) # type: ignore[arg-type]
1562
+ except ValueError:
1563
+ lease = None
1564
+ if lease is not None and lease.monitoring_policy != authorization.monitoring_policy:
1565
+ raise ValueError("review_monitoring_policy_mismatch")
1566
+
1567
+
1568
+ def activate_president_isolation_authorization(
1569
+ authorization: PresidentIsolationAuthorization | None,
1570
+ board: object,
1571
+ brief: str,
1572
+ *,
1573
+ canonical_repo_authority: Path | str | None = None,
1574
+ ) -> None:
1575
+ """Claim the operation's single-use lease before its first host effect (agent-harness#1001)."""
1576
+ revalidate_president_isolation_authorization(
1577
+ authorization, board, brief, canonical_repo_authority=canonical_repo_authority
1578
+ )
1579
+ assert authorization is not None
1580
+ lease = _lease_for(authorization) # type: ignore[arg-type]
1581
+ with lease.lock:
1582
+ if lease.closed or lease.active:
1583
+ raise ValueError("HARDEN president authorization is not available for activation")
1584
+ if time.monotonic_ns() - lease.prepared_monotonic_ns > _PRE_ACTIVATION_FRESHNESS_NS:
1585
+ raise ValueError("HARDEN president authorization expired before activation")
1586
+ lease.active = True
1587
+
1588
+
1589
+ def close_president_isolation_authorization(
1590
+ authorization: PresidentIsolationAuthorization | None,
1591
+ ) -> None:
1592
+ """Close the operation's lease on every path; a closed lease can never be revived."""
1593
+ if not isinstance(authorization, PresidentIsolationAuthorization):
1594
+ return
1595
+ try:
1596
+ lease = _lease_for(authorization) # type: ignore[arg-type]
1597
+ except ValueError:
1598
+ return
1599
+ with lease.lock:
1600
+ lease.active = False
1601
+ lease.closed = True
1602
+ lease.cancel_event.set()
1603
+
1604
+
1605
+ def derive_president_leg_authorization(
1606
+ authorization: PresidentIsolationAuthorization | None,
1607
+ board: object,
1608
+ brief: str,
1609
+ *,
1610
+ harness: str,
1611
+ model: str,
1612
+ deadline_s: float | None,
1613
+ instructions_sha256: str,
1614
+ canonical_repo_authority: Path | str | None,
1615
+ ) -> ReviewLegAuthorization:
1616
+ """Mint the single-route broker capability for ONE president rung launch.
1617
+
1618
+ The capability carries the PRESIDENT operation identity (never the review one),
1619
+ the brief as its bound input, and the operation's monitoring policy. A brokered
1620
+ launch needs a probeable canonical repository; without one it is refused here,
1621
+ before any host effect, with that reason.
1622
+ """
1623
+ revalidate_president_isolation_authorization(
1624
+ authorization, board, brief, canonical_repo_authority=canonical_repo_authority
1625
+ )
1626
+ assert authorization is not None
1627
+ if not authorization.canonical_repo_sha256:
1628
+ raise ValueError("president broker isolation requires a canonical repository")
1629
+ policy = authorization.monitoring_policy
1630
+ if (
1631
+ (harness, model) not in authorization.routes
1632
+ or (policy == "bounded" and (
1633
+ deadline_s is None or not math.isfinite(deadline_s) or deadline_s <= 0))
1634
+ or (policy == "heartbeat_only" and deadline_s is not None)
1635
+ ):
1636
+ raise ValueError("invalid HARDEN president leg authority")
1637
+ lease = _lease_for(authorization) # type: ignore[arg-type]
1638
+ route = (harness, model)
1639
+ with lease.lock:
1640
+ if lease.closed or not lease.active:
1641
+ raise ValueError("HARDEN president authorization is not active")
1642
+ if lease.route_counts[route] <= 0:
1643
+ raise ValueError("HARDEN president route occurrence already consumed")
1644
+ lease.route_counts[route] -= 1
1645
+ issued = time.monotonic_ns()
1646
+ leg = ReviewLegAuthorization(
1647
+ operation=authorization.operation, purpose=authorization.purpose,
1648
+ input_sha256=authorization.brief_sha256,
1649
+ instructions_sha256=instructions_sha256,
1650
+ canonical_repo_sha256=authorization.canonical_repo_sha256,
1651
+ broker_contract=PARENT_UNIX_BROKER_V1, harness=harness, model=model,
1652
+ issued_monotonic_ns=issued,
1653
+ expires_monotonic_ns=issued + (
1654
+ 10_000_000_000 if policy == "heartbeat_only"
1655
+ else int(float(deadline_s) * 1_000_000_000) + _BROKER_TRANSPORT_ALLOWANCE_NS # type: ignore[arg-type]
1656
+ ),
1657
+ _seal=_AUTHORIZATION_SEAL,
1658
+ monitoring_policy=policy,
1659
+ )
1660
+ _remember_leg_claim(leg, lease)
1661
+ return leg
1662
+
1663
+
1387
1664
  __all__ = [
1388
1665
  "PARENT_UNIX_BROKER_V1",
1389
1666
  "HARDEN_SUPPORTED_SUBSCRIPTION_ROUTES",
@@ -1402,6 +1679,15 @@ __all__ = [
1402
1679
  "derive_review_leg_authorization",
1403
1680
  "revalidate_review_isolation_authorization",
1404
1681
  "revalidate_review_composition_authorization",
1682
+ "PRESIDENT_OPERATION_V1",
1683
+ "PresidentIsolationAuthorization",
1684
+ "activate_president_isolation_authorization",
1685
+ "close_president_isolation_authorization",
1686
+ "derive_president_leg_authorization",
1687
+ "prepare_president_isolation_authorization",
1688
+ "revalidate_president_isolation_authorization",
1689
+ "GROK_SUBSCRIPTION_BLOCKED_ENV_VARS",
1690
+ "SUBSCRIPTION_SCRUB_ONLY_VARS",
1405
1691
  "VENDOR_API_KEY_VARS",
1406
1692
  "CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS",
1407
1693
  "all_vendor_key_vars",