phase-loop-runtime 0.5.0__tar.gz → 0.6.0__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 (679) hide show
  1. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +1 -1
  5. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +1 -1
  6. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +3 -3
  7. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/__init__.py +17 -0
  8. phase_loop_runtime-0.6.0/src/phase_loop_runtime/advisor_board/composition.py +180 -0
  9. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/config.py +19 -1
  10. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +3 -3
  11. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/fixtures.py +13 -10
  12. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/harness_mapping.py +19 -2
  13. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/matrix.py +1 -1
  14. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/presets.py +20 -20
  15. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/registries.py +17 -11
  16. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/resolver.py +9 -14
  17. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/schema.py +4 -1
  18. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/standin.py +2 -2
  19. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/validation.py +1 -1
  20. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/build_bundle.py +3 -3
  21. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/capability_registry.py +1 -1
  22. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/__init__.py +37 -0
  23. phase_loop_runtime-0.6.0/src/phase_loop_runtime/conformance/certificate_tier.py +174 -0
  24. phase_loop_runtime-0.6.0/src/phase_loop_runtime/conformance/git_grounded_projection.py +410 -0
  25. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/panel_invoker.py +70 -14
  26. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/profiles.py +6 -6
  27. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +6 -0
  28. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +6 -0
  29. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +13 -0
  30. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +22 -0
  31. phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  32. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +1 -1
  33. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +6 -0
  34. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +6 -0
  35. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +13 -0
  36. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +15 -0
  37. phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  38. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +1 -1
  39. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +6 -0
  40. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +6 -0
  41. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +13 -0
  42. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +15 -0
  43. phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  44. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +6 -0
  45. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +6 -0
  46. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +13 -0
  47. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +15 -0
  48. phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  49. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/train_runner.py +97 -0
  50. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  51. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/SOURCES.txt +13 -0
  52. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_backcompat.py +3 -3
  53. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_backing_homebrew.py +13 -13
  54. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_backing_omnigent.py +6 -6
  55. phase_loop_runtime-0.6.0/tests/test_advisor_board_composition.py +170 -0
  56. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_config.py +65 -9
  57. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_golden.py +2 -2
  58. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_integration.py +8 -8
  59. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_matrix.py +13 -13
  60. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_observability.py +3 -3
  61. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_presets.py +16 -13
  62. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_registries.py +24 -10
  63. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_resolver.py +19 -19
  64. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_schema.py +14 -14
  65. phase_loop_runtime-0.6.0/tests/test_certificate_tier.py +137 -0
  66. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_codex_effort_max_clamp_49.py +2 -2
  67. phase_loop_runtime-0.6.0/tests/test_git_grounded_projection.py +333 -0
  68. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_disjointness_model_first.py +2 -2
  69. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_premerge.py +1 -1
  70. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_model_class_policy.py +4 -4
  71. phase_loop_runtime-0.6.0/tests/test_model_id_source_guard.py +133 -0
  72. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_observability_alerting.py +2 -2
  73. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_invoker_timeout_argv.py +29 -0
  74. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_per_leg_model_66.py +4 -4
  75. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_cli.py +1 -1
  76. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_event.py +2 -2
  77. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_evidence_audit.py +1 -1
  78. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +1 -1
  79. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_discovery.py +4 -4
  80. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_execution_policy.py +9 -9
  81. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_handoff.py +4 -4
  82. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_harnesses.py +2 -2
  83. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_ir.py +1 -1
  84. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_launcher.py +6 -6
  85. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_ledger_debug.py +2 -2
  86. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_live_adapters.py +4 -4
  87. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_metrics.py +3 -3
  88. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_migration_regressions.py +1 -1
  89. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_mixedrun_dispatch.py +2 -2
  90. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_models.py +9 -9
  91. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_closeout.py +2 -2
  92. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_plan_doc_skip.py +1 -1
  93. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_policy.py +6 -6
  94. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile.py +30 -30
  95. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile_blocker_self_clear.py +4 -4
  96. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +1 -1
  97. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +1 -1
  98. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runner.py +14 -14
  99. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_smoke_blockers.py +6 -6
  100. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_state.py +17 -17
  101. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_work_unit_observability.py +1 -1
  102. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_work_unit_state.py +1 -1
  103. phase_loop_runtime-0.6.0/tests/test_prune_merged_worktrees_script.py +152 -0
  104. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_routing_invariants.py +1 -1
  105. phase_loop_runtime-0.6.0/tests/test_sweep_fleet_worktrees_script.py +262 -0
  106. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_invariants.py +2 -2
  107. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_merge.py +110 -0
  108. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/MANIFEST.in +0 -0
  109. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/README.md +0 -0
  110. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/protocol/protocol.md +0 -0
  111. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/setup.cfg +0 -0
  112. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  113. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  114. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  115. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  116. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  117. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  118. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  119. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  120. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  121. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  122. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  123. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  124. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  125. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  126. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  127. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  128. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  129. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  130. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  131. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  132. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  133. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  134. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  135. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  136. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  137. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  138. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  139. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  140. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  141. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  142. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  143. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  144. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  145. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  146. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  147. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  148. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  149. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  150. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  151. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  152. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  153. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  154. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  155. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  156. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  157. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  158. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  159. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  160. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  161. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  162. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  163. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  164. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  165. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  166. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  167. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  168. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  169. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_modular.py +0 -0
  170. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  171. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  172. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  173. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  174. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  175. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  176. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  177. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  178. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/broker.py +0 -0
  179. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/classifier.py +0 -0
  180. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  181. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  182. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/cli.py +0 -0
  183. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout.py +0 -0
  184. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  185. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  186. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_validation.py +0 -0
  187. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_validators.py +0 -0
  188. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  189. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  190. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  191. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  192. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  193. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  194. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  195. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  196. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  197. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  198. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  199. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  200. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  201. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  202. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  203. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/discovery.py +0 -0
  204. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  205. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  206. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/docs_audit.py +0 -0
  207. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/docs_freshness.py +0 -0
  208. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  209. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  210. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/events.py +0 -0
  211. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/events_migration.py +0 -0
  212. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/evidence_audit.py +0 -0
  213. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  214. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/fleet_map.py +0 -0
  215. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  216. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  217. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/gate_posture.py +0 -0
  218. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/git_discipline.py +0 -0
  219. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/git_ops.py +0 -0
  220. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/git_topology.py +0 -0
  221. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/governed_bundle.py +0 -0
  222. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/governed_premerge.py +0 -0
  223. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/governed_review.py +0 -0
  224. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/handoff.py +0 -0
  225. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/handoff_path.py +0 -0
  226. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/injection.py +0 -0
  227. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/install_status.py +0 -0
  228. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  229. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/launcher.py +0 -0
  230. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/lease_store.py +0 -0
  231. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/maintenance.py +0 -0
  232. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  233. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/models.py +0 -0
  234. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/observability.py +0 -0
  235. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  236. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  237. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  238. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  239. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  240. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  241. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  242. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  243. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  244. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/plan_ir.py +0 -0
  245. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/plan_manifest.py +0 -0
  246. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/planner_validation.py +0 -0
  247. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/prompts.py +0 -0
  248. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/provenance.py +0 -0
  249. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/publishing.py +0 -0
  250. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/py.typed +0 -0
  251. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/reconcile.py +0 -0
  252. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/redaction.py +0 -0
  253. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/reflection_sync.py +0 -0
  254. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/release_guard.py +0 -0
  255. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/render.py +0 -0
  256. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/repo_validation.py +0 -0
  257. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/review_summary.py +0 -0
  258. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  259. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/route_log.py +0 -0
  260. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  261. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  262. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runner.py +0 -0
  263. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runtime_paths.py +0 -0
  264. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runtime_projection.py +0 -0
  265. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runtime_resources.py +0 -0
  266. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/schema_export.py +0 -0
  267. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  268. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_install.py +0 -0
  269. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_inventory.py +0 -0
  270. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_paths.py +0 -0
  271. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  272. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  273. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  274. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  275. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  276. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  277. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  278. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  279. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  280. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  281. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  282. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  283. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  284. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  285. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  286. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  287. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  288. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  289. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  290. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  291. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  292. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  293. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  294. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  295. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  296. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  297. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  298. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  299. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  300. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  301. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  302. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  303. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  304. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  305. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  306. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  307. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  308. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  309. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  310. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  311. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  312. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  313. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  314. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  315. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  316. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  317. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  318. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  319. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  320. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  321. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  322. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  323. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  324. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  325. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  326. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  327. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  328. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  329. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  330. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  331. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  332. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  333. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  334. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  335. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  336. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  337. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  338. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  339. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  340. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  341. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  342. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  343. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  344. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  345. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  346. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  347. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  348. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  349. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  350. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  351. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  352. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  353. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  354. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  355. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  356. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  357. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  358. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  359. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  360. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  361. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  362. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  363. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  364. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  365. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  366. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  367. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  368. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  369. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  370. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  371. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  372. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  373. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  374. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  375. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  376. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  377. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  378. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  379. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  380. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  381. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  382. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  383. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  384. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  385. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  386. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  387. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  388. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  389. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  390. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  391. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  392. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  393. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  394. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  395. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  396. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  397. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  398. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  399. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  400. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  401. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  402. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  403. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  404. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  405. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  406. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  407. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  408. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  409. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  410. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  411. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  412. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  413. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  414. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  415. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  416. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  417. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  418. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  419. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  420. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  421. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  422. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  423. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  424. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  425. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  426. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  427. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  428. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  429. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  430. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  431. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  432. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  433. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  434. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  435. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  436. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  437. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  438. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/state.py +0 -0
  439. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/state_degradation.py +0 -0
  440. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/state_ops.py +0 -0
  441. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/train_ledger.py +0 -0
  442. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/train_roadmap.py +0 -0
  443. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/verification_evidence.py +0 -0
  444. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  445. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  446. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/worker_pool.py +0 -0
  447. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/worktree_index.py +0 -0
  448. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  449. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  450. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  451. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  452. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_advisory_mode.py +0 -0
  453. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_alias_install.py +0 -0
  454. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_concurrency.py +0 -0
  455. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_ingestion.py +0 -0
  456. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_agent_runtime_provider_cs08.py +0 -0
  457. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_branchgov_preflight.py +0 -0
  458. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_cli_train_status_45.py +0 -0
  459. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_break_glass_cli.py +0 -0
  460. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_classifier.py +0 -0
  461. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_convergence_fixes.py +0 -0
  462. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_exception_vocab.py +0 -0
  463. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_validator_hook.py +0 -0
  464. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_verification_gate.py +0 -0
  465. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_dual_layout.py +0 -0
  466. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_gates.py +0 -0
  467. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_ingest.py +0 -0
  468. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_scaffold.py +0 -0
  469. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_coordinator_wave_loop.py +0 -0
  470. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  471. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dispatch_lock_helper.py +0 -0
  472. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  473. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_doc_delta_validator.py +0 -0
  474. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_docs_audit.py +0 -0
  475. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_docs_freshness.py +0 -0
  476. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dotfiles_tree.py +0 -0
  477. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_execute_phase_handoff_mode.py +0 -0
  478. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_execution_policy_tiering.py +0 -0
  479. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_export_schema.py +0 -0
  480. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_fleet_map.py +0 -0
  481. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_fleet_metrics.py +0 -0
  482. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_fleet_metrics_export.py +0 -0
  483. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_gate_a_wheel_isolation.py +0 -0
  484. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_gate_posture.py +0 -0
  485. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_git_discipline.py +0 -0
  486. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_e2e.py +0 -0
  487. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_gate_crfixes.py +0 -0
  488. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_planning_gate.py +0 -0
  489. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_premerge_live.py +0 -0
  490. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_review.py +0 -0
  491. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_hotfix_lane.py +0 -0
  492. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_injection_skill_failloud.py +0 -0
  493. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_lane_ir_override.py +0 -0
  494. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_launcher_liveness.py +0 -0
  495. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_lease_store.py +0 -0
  496. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_lease_store_conformance.py +0 -0
  497. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_ledger_serialization.py +0 -0
  498. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_advisory.py +0 -0
  499. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_advisory_cli.py +0 -0
  500. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  501. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_authority_boundary.py +0 -0
  502. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_contract_drift.py +0 -0
  503. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_contract_imports.py +0 -0
  504. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_contract_pin.py +0 -0
  505. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_core_api.py +0 -0
  506. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_provenance.py +0 -0
  507. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_ci.py +0 -0
  508. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_cli.py +0 -0
  509. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_output.py +0 -0
  510. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_runtime.py +0 -0
  511. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_redaction.py +0 -0
  512. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_release_surface.py +0 -0
  513. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_schema_validation.py +0 -0
  514. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_vectors.py +0 -0
  515. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_advisory_mode_63.py +0 -0
  516. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_context_refs_114.py +0 -0
  517. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_invoker.py +0 -0
  518. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_invoker_spawn.py +0 -0
  519. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  520. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_tui_eof_48.py +0 -0
  521. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_verdict_summary.py +0 -0
  522. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_parallel_dispatch_backcompat.py +0 -0
  523. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_parallel_dispatch_cli.py +0 -0
  524. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_adoption_bundle.py +0 -0
  525. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  526. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_dependency.py +0 -0
  527. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  528. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_injection.py +0 -0
  529. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_modular.py +0 -0
  530. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  531. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  532. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_schema_export.py +0 -0
  533. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_schema_source.py +0 -0
  534. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  535. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_build_bundle.py +0 -0
  536. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_classifier.py +0 -0
  537. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  538. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  539. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  540. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  541. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_security.py +0 -0
  542. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  543. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  544. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  545. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_route_selection.py +0 -0
  546. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  547. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_control_only.py +0 -0
  548. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_hardening.py +0 -0
  549. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  550. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_schema.py +0 -0
  551. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_validation.py +0 -0
  552. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_collaborator_citation.py +0 -0
  553. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_collaborator_docs.py +0 -0
  554. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  555. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  556. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  557. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_docs.py +0 -0
  558. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  559. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  560. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  561. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  562. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_portal.py +0 -0
  563. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  564. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_drift_audit.py +0 -0
  565. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  566. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_events_migration.py +0 -0
  567. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit.py +0 -0
  568. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  569. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  570. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  571. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  572. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_executor_degradation.py +0 -0
  573. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_full_phase_mode.py +0 -0
  574. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_handoff_migration.py +0 -0
  575. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_init.py +0 -0
  576. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_injection.py +0 -0
  577. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_install_status.py +0 -0
  578. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  579. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_scheduler.py +0 -0
  580. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_ledger_dedup.py +0 -0
  581. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_maintenance.py +0 -0
  582. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  583. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  584. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_native_flags.py +0 -0
  585. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  586. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pi_executor.py +0 -0
  587. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  588. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  589. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  590. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  591. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_mode.py +0 -0
  592. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_plan_manifest.py +0 -0
  593. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  594. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_planner_validation.py +0 -0
  595. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_protocol_contract.py +0 -0
  596. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_provenance.py +0 -0
  597. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  598. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reducers.py +0 -0
  599. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  600. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_roadmap_validate.py +0 -0
  601. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_rotation.py +0 -0
  602. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  603. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_boundary.py +0 -0
  604. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_decouple.py +0 -0
  605. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_package_data.py +0 -0
  606. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_projection.py +0 -0
  607. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_schema_flow.py +0 -0
  608. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  609. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  610. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_contract.py +0 -0
  611. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  612. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_install.py +0 -0
  613. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  614. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  615. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_smoke_reentry.py +0 -0
  616. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  617. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  618. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  619. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  620. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  621. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  622. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  623. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  624. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v22_e2e.py +0 -0
  625. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v22_principles.py +0 -0
  626. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  627. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_reconcile.py +0 -0
  628. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_sched.py +0 -0
  629. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_schedharden.py +0 -0
  630. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_wave_runner.py +0 -0
  631. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_work_unit_runner.py +0 -0
  632. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_worktrees.py +0 -0
  633. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  634. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_worktree_executor.py +0 -0
  635. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  636. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  637. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  638. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_flag.py +0 -0
  639. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_markers.py +0 -0
  640. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  641. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  642. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  643. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  644. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  645. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pkg_layout_freeze.py +0 -0
  646. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_plan_ir_iter_waves.py +0 -0
  647. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_preflight_verification.py +0 -0
  648. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_publishing.py +0 -0
  649. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  650. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_reconcile_verification_log.py +0 -0
  651. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_reflection_sync.py +0 -0
  652. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_repo_validation.py +0 -0
  653. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_review_summary.py +0 -0
  654. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_route_log.py +0 -0
  655. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_route_policy_conformance.py +0 -0
  656. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_runtime_state_mirror_agreement.py +0 -0
  657. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_sibling_matcher_patterns.py +0 -0
  658. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_bundle_pinned.py +0 -0
  659. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_install_body_expansion.py +0 -0
  660. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_plan_manifest_write.py +0 -0
  661. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_sources_seam.py +0 -0
  662. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skills_bundle_drift.py +0 -0
  663. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skills_canon_parity.py +0 -0
  664. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skills_src_claude_literal_lint.py +0 -0
  665. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_spec_conformance_gate.py +0 -0
  666. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_sync_skills_apply_failloud.py +0 -0
  667. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_e2e.py +0 -0
  668. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_order_only_deps_47.py +0 -0
  669. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_roadmap.py +0 -0
  670. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_runner.py +0 -0
  671. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  672. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  673. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_verification_evidence.py +0 -0
  674. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_verification_evidence_validator.py +0 -0
  675. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_visual_evidence_validator.py +0 -0
  676. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_workerpool_failure_isolation.py +0 -0
  677. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_workerpool_parallel.py +0 -0
  678. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_workerpool_worktree_alloc.py +0 -0
  679. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/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.5.0
3
+ Version: 0.6.0
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.0
@@ -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.5.0"
7
+ version = "0.6.0"
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.5.0"
21
+ __version__ = "0.6.0"
@@ -148,7 +148,7 @@ pi-agent-watch \
148
148
  --repo /path/to/repo \
149
149
  --roadmap specs/phase-plans-v1.md \
150
150
  --provider openai-codex \
151
- --model gpt-5.5 \
151
+ --model gpt-5.6-sol \
152
152
  --thinking high \
153
153
  --phase-executor claude \
154
154
  --claude-execution-mode agent_team \
@@ -129,7 +129,7 @@ roots. See `docs/phase-loop/spec-discovery-roots.md`.
129
129
  The following modules under `phase_loop_runtime.*` are considered public:
130
130
 
131
131
  - `phase_loop_runtime.cli`: CLI entrypoint and parser definition.
132
- - `phase_loop_runtime.conformance`: Named conformance-check surface (the six L0 consiliency gates) for actor-side self-check and the CR-fence.
132
+ - `phase_loop_runtime.conformance`: Named conformance-check surface for actor-side self-check and the CR-fence. Covers the SHAPE / GOVERNANCE tier (the six L0 consiliency gates, `scan_consiliency_gates`) and the CERT / SCHEMA tier (`validate_certificate` — structural conformance of a declared parity certificate to the contract-distributed `certificate` schema; NOT authority / provenance / signing, which stays in gp). It also carries the OBSERVABILITY / EMISSION tier (`reconcile_git_grounded_projection` and `GitGroundedProjection`): a consent-gated, producer-agnostic reconciler that turns raw git reality (read via `git_discipline`, classified against the `pipeline_ref_classes` contract SoT) into a `raw-sha256` digest-bound projection body the Portal's projection-index verify path re-verifies at render; it emits, it does not sign or own Portal ingest.
133
133
  - `phase_loop_runtime.discovery`: Roadmap and repository resolution.
134
134
  - `phase_loop_runtime.handoff`: TUI handoff generation and metadata.
135
135
  - `phase_loop_runtime.models`: Core data models, schemas, and literals.
@@ -44,7 +44,7 @@ equivalence is proven by a test (not asserted in prose).
44
44
  `seat_vendor_family(seat)`, model-first with a harness-lane fallback.
45
45
  Byte-consistent with `governed_review.author_vendor_for_model` (:60-75) and
46
46
  `_EXECUTOR_VENDOR` (:47-53). Two same-vendor seats on different harnesses
47
- (`gpt-5.5` on `codex` and on `opencode`) project to the same family, so the
47
+ (`gpt-5.6-sol` on `codex` and on `opencode`) project to the same family, so the
48
48
  governed reviewer≠author disjointness survives model-first. ABDHOME rewires the
49
49
  governed gates onto *this* canonical function (not a copy).
50
50
 
@@ -179,7 +179,7 @@ the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
179
179
  implementer stays Sonnet. The `default` board (`fixtures.DEFAULT_BOARD`) is
180
180
  byte-pinned to this Fable `invoke_panel` panel by the golden proof
181
181
  (`tests/test_advisor_board_golden.py`); the sole sanctioned delta stays `seat_key`.
182
- - **`code-review` = three frontier vendors, always.** codex `gpt-5.5`,
182
+ - **`code-review` = three frontier vendors, always.** codex `gpt-5.6-sol`,
183
183
  `Gemini 3.1 Pro`, and `claude-fable-5`, each on the `adversarial` lens (supersedes
184
184
  the prior two-seat codex+sonnet composition).
185
185
  - **Divergent-thinking boards keep Sonnet.** `brainstorm` / `doc-edit` /
@@ -190,7 +190,7 @@ the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
190
190
  (`schema.py`), so the legal lenses/purposes need no enum extension.
191
191
  - **Catch-alls for unmodeled tasks (`general`, `solo`).** So the board library is not
192
192
  limited to the pre-modeled domains: `general` is the domain-agnostic top-tier PANEL
193
- (three frontier vendors — gpt-5.5/adversarial, Gemini 3.1 Pro/alternative,
193
+ (three frontier vendors — gpt-5.6-sol/adversarial, Gemini 3.1 Pro/alternative,
194
194
  claude-fable-5/completeness — hand it any task + brief), and `solo` is the
195
195
  single-MEMBER form (one `claude-fable-5` seat) for a quick top-end opinion when a
196
196
  panel is overkill. A ONE-seat board validates + resolves through `invoke_board` like
@@ -79,7 +79,16 @@ from .matrix import (
79
79
  DefaultCompatibilityMatrix,
80
80
  default_matrix,
81
81
  )
82
+ from .composition import (
83
+ DEFAULT_TARGET_SEATS,
84
+ FLOOR_SEATS,
85
+ LENS_CYCLE,
86
+ BoardIndependence,
87
+ board_independence,
88
+ compose_review_board,
89
+ )
82
90
  from .presets import (
91
+ CODE_REVIEW_BOARD,
83
92
  DEFAULT_BOARD_NAME,
84
93
  PRESET_NAMES,
85
94
  PRESETS,
@@ -216,7 +225,15 @@ __all__ = [
216
225
  "PRESETS",
217
226
  "PRESET_NAMES",
218
227
  "DEFAULT_BOARD_NAME",
228
+ "CODE_REVIEW_BOARD",
219
229
  "get_preset",
230
+ # composition (availability-aware 4-vendor board)
231
+ "compose_review_board",
232
+ "board_independence",
233
+ "BoardIndependence",
234
+ "LENS_CYCLE",
235
+ "DEFAULT_TARGET_SEATS",
236
+ "FLOOR_SEATS",
220
237
  "BoardConfig",
221
238
  "BoardConfigError",
222
239
  "load_boards",
@@ -0,0 +1,180 @@
1
+ """Availability-aware board composition — the 4-vendor default review panel.
2
+
3
+ The ``code-review`` board's IDEAL shape is one seat per frontier vendor, each at
4
+ its MAX thinking and each carrying a DISTINCT review lens:
5
+
6
+ grok grok-4.5 max lens=adversarial
7
+ claude claude-fable-5 max lens=correctness
8
+ codex gpt-5.6-sol max lens=red-team
9
+ gemini Gemini 3.1 Pro high lens=alternative-approach (high == its ceiling)
10
+
11
+ The load-bearing behavior is the **availability-aware fallback**: a panel must
12
+ NEVER collapse to one or two reviewers just because one or two vendors are down.
13
+ ``compose_review_board`` detects the available vendors (via the advisor-board's
14
+ canonical PATH probe — ``registries.DEFAULT_HARNESS_REGISTRY.is_available``, the
15
+ SAME probe the matrix uses, so it is registration-driven and covers grok) and
16
+ composes a board of ``target`` independent seats (default 4, HARD FLOOR 3):
17
+
18
+ * one vendor-pure seat per available vendor first (its primary lens, max thinking);
19
+ * then BACKFILL the remaining seats onto the available vendors, round-robin, each
20
+ with a DIFFERENT lens drawn from the lens cycle — so two available providers
21
+ still yield a full 4-seat board, and ONE available provider yields 4
22
+ distinct-lens seats on that provider.
23
+
24
+ With at least one vendor up the board ALWAYS reaches ``target`` (the lens cycle is
25
+ longer than the floor), so the floor is a structural safety net, never a cliff.
26
+ Seats are emitted in a deterministic order (fixed vendor order, then round-robin
27
+ backfill) so the composed board is snapshot-stable. No two seats ever share the
28
+ same ``(vendor, model, lens)`` — lens-uniqueness per vendor guarantees it.
29
+
30
+ Backfill stays on the vendor's own HOMEBREW lane (same model, same lane, next
31
+ lens) — never a breadth/omnigent lane that would skip-with-warning without a
32
+ gateway, which would defeat the point of keeping the reviewer count up.
33
+ """
34
+ from __future__ import annotations
35
+
36
+ from collections import defaultdict
37
+ from collections.abc import Callable
38
+ from typing import NamedTuple
39
+
40
+ from .registries import DEFAULT_HARNESS_REGISTRY
41
+ from .schema import Board, Seat, vendor_family
42
+
43
+ # Ideal per-vendor seat, in deterministic composition order. Each vendor runs at
44
+ # its MAX thinking (gemini's ceiling is ``high``) with a distinct primary lens.
45
+ _VENDOR_ORDER: tuple[str, ...] = ("grok", "claude", "codex", "gemini")
46
+ _VENDOR_SEAT: dict[str, dict[str, str]] = {
47
+ "grok": {"model": "grok-4.5", "harness": "grok", "effort": "max", "lens": "adversarial"},
48
+ "claude": {"model": "claude-fable-5", "harness": "claude", "effort": "max", "lens": "correctness"},
49
+ "codex": {"model": "gpt-5.6-sol", "harness": "codex", "effort": "max", "lens": "red-team"},
50
+ "gemini": {"model": "Gemini 3.1 Pro", "harness": "gemini", "effort": "high", "lens": "alternative-approach"},
51
+ }
52
+
53
+ # Distinct lenses the backfill cycles through (each vendor's primary lens is drawn
54
+ # from this set, so backfill naturally hands a vendor a lens it does not yet hold).
55
+ # Longer than the floor so a single available vendor can always fill to target with
56
+ # distinct lenses.
57
+ LENS_CYCLE: tuple[str, ...] = (
58
+ "adversarial",
59
+ "correctness",
60
+ "red-team",
61
+ "opposing-counsel",
62
+ "conservative",
63
+ "alternative-approach",
64
+ )
65
+
66
+ DEFAULT_TARGET_SEATS = 4
67
+ FLOOR_SEATS = 3
68
+
69
+
70
+ def _seat_for(vendor: str, lens: str) -> Seat:
71
+ spec = _VENDOR_SEAT[vendor]
72
+ return Seat(model=spec["model"], effort=spec["effort"], harness=spec["harness"], lens=lens)
73
+
74
+
75
+ def compose_review_board(
76
+ *,
77
+ is_available: Callable[[str], bool] | None = None,
78
+ target: int = DEFAULT_TARGET_SEATS,
79
+ floor: int = FLOOR_SEATS,
80
+ name: str = "code-review",
81
+ purpose: str = "code-review",
82
+ ) -> Board:
83
+ """Compose the availability-aware review board.
84
+
85
+ ``is_available(vendor) -> bool`` decides which vendors are up; it defaults to
86
+ the advisor-board's canonical PATH probe
87
+ (``DEFAULT_HARNESS_REGISTRY.is_available``) so composition is registration-
88
+ driven and grok is probed exactly like codex/gemini/claude. Inject it in tests
89
+ to simulate 4/3/2/1 vendors up.
90
+
91
+ Returns a ``Board`` of exactly ``target`` seats whenever ≥1 vendor is available
92
+ (never fewer than ``floor``); an empty board only when NO vendor is available.
93
+ """
94
+ if target < floor:
95
+ raise ValueError(f"target {target} is below the floor {floor}")
96
+ probe = is_available if is_available is not None else DEFAULT_HARNESS_REGISTRY.is_available
97
+ available = [v for v in _VENDOR_ORDER if probe(v)]
98
+ if not available:
99
+ # Nothing to compose — the caller's run degrades wholesale. (The floor is a
100
+ # count of INDEPENDENT reviewers to seat on AVAILABLE vendors; with zero up
101
+ # there is no reviewer to seat, so an empty board is the honest result.)
102
+ return Board(name=name, purpose=purpose, seats=())
103
+
104
+ seats: list[Seat] = []
105
+ used_keys: set[tuple[str, str, str]] = set()
106
+ used_lenses: dict[str, set[str]] = defaultdict(set)
107
+
108
+ def _add(vendor: str, lens: str) -> bool:
109
+ spec = _VENDOR_SEAT[vendor]
110
+ key = (vendor, spec["model"], lens)
111
+ if key in used_keys:
112
+ return False
113
+ seats.append(_seat_for(vendor, lens))
114
+ used_keys.add(key)
115
+ used_lenses[vendor].add(lens)
116
+ return True
117
+
118
+ # Phase 1 — one vendor-pure seat per available vendor (its primary lens).
119
+ for vendor in available:
120
+ _add(vendor, _VENDOR_SEAT[vendor]["lens"])
121
+
122
+ # Phase 2 — backfill to target, round-robin across available vendors, each next
123
+ # seat carrying the vendor's next UNUSED lens from the cycle. A vendor that has
124
+ # exhausted the lens cycle is skipped; the loop stops if no vendor can add a new
125
+ # distinct seat (unreachable with target ≤ len(LENS_CYCLE) and ≥1 vendor).
126
+ rr = 0
127
+ while len(seats) < target:
128
+ progressed = False
129
+ for _ in range(len(available)):
130
+ vendor = available[rr % len(available)]
131
+ rr += 1
132
+ next_lens = next((l for l in LENS_CYCLE if l not in used_lenses[vendor]), None)
133
+ if next_lens is not None and _add(vendor, next_lens):
134
+ progressed = True
135
+ break
136
+ if not progressed:
137
+ break # every available vendor exhausted its lens cycle
138
+
139
+ return Board(name=name, purpose=purpose, seats=tuple(seats))
140
+
141
+
142
+ class BoardIndependence(NamedTuple):
143
+ """The cross-vendor independence of a composed board — the governance signal a
144
+ consumer reads (e.g. gp's ``degraded_independence`` gate: auto_merge_disabled +
145
+ human_signoff) so it never trusts a same-vendor backfilled panel as if it were
146
+ cross-vendor independent."""
147
+
148
+ level: str # "independent" | "degraded" | "none"
149
+ distinct_vendors: int
150
+ seats: int
151
+
152
+
153
+ def board_independence(board: Board) -> BoardIndependence:
154
+ """Report whether ``board`` is cross-vendor ``independent`` or ``degraded``.
155
+
156
+ ``independent`` ONLY when every seat is a distinct vendor family (no backfill).
157
+ Any repeated vendor family means correlated blind spots → ``degraded`` (e.g. a
158
+ 1-vendor board of 4 lens-varied seats). An empty board is ``none``. This is the
159
+ field the availability-aware fallback was missing: the 4-vendor CR (grok +
160
+ codex + gemini + claude, unanimous) flagged that a backfilled board looked
161
+ identical to a true cross-vendor one, so a governed gate could not fire on the
162
+ correlated-blind-spot risk."""
163
+ families = [vendor_family(seat.model, seat.harness) for seat in board.seats]
164
+ distinct = len(set(families))
165
+ n = len(families)
166
+ if n == 0:
167
+ level = "none"
168
+ elif distinct == n:
169
+ level = "independent"
170
+ else:
171
+ level = "degraded"
172
+ return BoardIndependence(level=level, distinct_vendors=distinct, seats=n)
173
+
174
+
175
+ __all__ = [
176
+ "compose_review_board",
177
+ "LENS_CYCLE",
178
+ "DEFAULT_TARGET_SEATS",
179
+ "FLOOR_SEATS",
180
+ ]
@@ -13,7 +13,7 @@ built-in ``presets``. Contract:
13
13
  top-level, board, or seat key raises ``BoardConfigError`` naming the key.
14
14
  * Every board (presets AND user boards) is validated through the compatibility
15
15
  matrix at load time, so an invalid ``(model, harness)`` pairing (e.g.
16
- ``claude:gpt-5.5``) or an over-ceiling effort is rejected at CONFIG TIME with an
16
+ ``claude:gpt-5.6-sol``) or an over-ceiling effort is rejected at CONFIG TIME with an
17
17
  actionable message (``validation.validate_board``).
18
18
 
19
19
  A missing config file is not an error: the built-in presets load on their own.
@@ -31,6 +31,7 @@ except ModuleNotFoundError: # Python 3.10 — the requires-python floor
31
31
  import tomli as tomllib # type: ignore[no-redef]
32
32
 
33
33
  from .validation import SeatValidationError, validate_board
34
+ from .composition import compose_review_board
34
35
  from .presets import DEFAULT_BOARD_NAME, PRESETS
35
36
  from .schema import (
36
37
  AUTH_LANES,
@@ -166,6 +167,7 @@ def load_boards(
166
167
  env: Mapping[str, str] | None = None,
167
168
  matrix: Any | None = None,
168
169
  validate: bool = True,
170
+ is_available: "Callable[[str], bool] | None" = None,
169
171
  ) -> BoardConfig:
170
172
  """Load the board config, layering user boards over the built-in presets.
171
173
 
@@ -174,10 +176,26 @@ def load_boards(
174
176
  False`` only for shape-parsing without availability (kept for tests). Raises
175
177
  ``BoardConfigError`` for any unknown key, malformed value, or matrix-invalid
176
178
  board — never a silent drop.
179
+
180
+ The ``code-review`` board is composed AVAILABILITY-AWARE (down vendors are
181
+ backfilled with distinct lenses onto available vendors, so a convened panel
182
+ never collapses to 1–2 reviewers) via ``composition.compose_review_board``.
183
+ ``is_available(vendor) -> bool`` decides which vendors are up; when omitted it
184
+ is taken from a probe-backed ``matrix`` (its harness registry probe, so the
185
+ availability view is single-sourced) and otherwise defaults to the advisor-
186
+ board PATH probe. Composition happens BEFORE the user overlay, so a
187
+ user-defined ``code-review`` board still wins.
177
188
  """
178
189
  boards: dict[str, Board] = dict(PRESETS)
179
190
  default_board = DEFAULT_BOARD_NAME
180
191
 
192
+ # Availability-aware code-review (before the user overlay so a user override wins).
193
+ compose_probe = is_available
194
+ if compose_probe is None and matrix is not None:
195
+ compose_probe = getattr(getattr(matrix, "harnesses", None), "is_available", None)
196
+ composed_review = compose_review_board(is_available=compose_probe)
197
+ boards[composed_review.name] = composed_review
198
+
181
199
  cfg_path = path if path is not None else board_config_path(env)
182
200
  if cfg_path.exists():
183
201
  with open(cfg_path, "rb") as fh:
@@ -14,7 +14,7 @@ default_board = "default"
14
14
 
15
15
  # The default board reproduces today's 3-leg panel (byte-for-byte back-compat).
16
16
  # Its three seats, in panel-leg order, render to today's exact CLI invocations:
17
- # codex gpt-5.5 effort=max -> -c model_reasoning_effort=xhigh
17
+ # codex gpt-5.6-sol effort=max -> -c model_reasoning_effort=xhigh
18
18
  # gemini "Gemini 3.1 Pro" effort=high -> model "Gemini 3.1 Pro (High)"
19
19
  # claude claude-sonnet-5 effort=max -> --effort max
20
20
  [[boards]]
@@ -23,7 +23,7 @@ purpose = "premerge-review"
23
23
  allow_api_key_fallback = false
24
24
 
25
25
  [[boards.seats]]
26
- model = "gpt-5.5"
26
+ model = "gpt-5.6-sol"
27
27
  effort = "max"
28
28
  harness = "codex" # optional; omit to resolve via default_lane(model)
29
29
  auth = "subscription" # subscription (default) | api_key
@@ -48,7 +48,7 @@ purpose = "code-review"
48
48
  allow_api_key_fallback = false
49
49
 
50
50
  [[boards.seats]]
51
- model = "gpt-5.5"
51
+ model = "gpt-5.6-sol"
52
52
  effort = "max"
53
53
  harness = "codex"
54
54
 
@@ -27,7 +27,7 @@ CANONICAL_LEG_ORDER: tuple[str, ...] = ("codex", "gemini", "claude")
27
27
  # The default board's three seats — model-first, effort split out of the model
28
28
  # name. These reconstruct today's ``DEFAULT_LEG_MODELS`` under
29
29
  # ``harness_mapping.render_seat_invocation``:
30
- # codex gpt-5.5 + effort max -> ``-c model_reasoning_effort=xhigh``
30
+ # codex gpt-5.6-sol + effort max -> ``-c model_reasoning_effort=xhigh``
31
31
  # gemini "Gemini 3.1 Pro" + effort high -> model ``"Gemini 3.1 Pro (High)"``
32
32
  # claude claude-fable-5 + effort max -> ``--effort max``
33
33
  #
@@ -36,7 +36,7 @@ CANONICAL_LEG_ORDER: tuple[str, ...] = ("codex", "gemini", "claude")
36
36
  # Fable, not on the implementer model ``claude-sonnet-5``. This is byte-pinned to
37
37
  # ``panel_invoker.DEFAULT_LEG_MODELS["claude"]`` (also Fable) by the golden proof.
38
38
  DEFAULT_SEATS: tuple[Seat, ...] = (
39
- Seat(model="gpt-5.5", effort="max", harness="codex",
39
+ Seat(model="gpt-5.6-sol", effort="max", harness="codex",
40
40
  auth=AUTH_SUBSCRIPTION, backing=BACKING_HOMEBREW),
41
41
  Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini",
42
42
  auth=AUTH_SUBSCRIPTION, backing=BACKING_HOMEBREW),
@@ -54,7 +54,7 @@ DEFAULT_BOARD: Board = Board(
54
54
  # Golden literals the default seats must reproduce (cross-checked in the
55
55
  # back-compat test against the live ``panel_invoker`` constants).
56
56
  DEFAULT_SEAT_RENDERED_MODEL: dict[str, str] = {
57
- "codex": "gpt-5.5",
57
+ "codex": "gpt-5.6-sol",
58
58
  "gemini": "Gemini 3.1 Pro (High)",
59
59
  "claude": "claude-fable-5",
60
60
  }
@@ -65,17 +65,20 @@ DEFAULT_SEAT_EFFORT_ARGS: dict[str, tuple[str, ...]] = {
65
65
  }
66
66
 
67
67
  # Canonical (model x harness) pairs ABDREG's matrix + ABDRESOLVE's validation test
68
- # against. Same-vendor-across-harness (gpt-5.5 on codex and opencode) is VALID and
69
- # projects to one family; a cross-vendor mismatch (gpt-5.5 on claude) is INVALID.
68
+ # against. Same-vendor-across-harness (gpt-5.6-sol on codex and opencode) is VALID and
69
+ # projects to one family; a cross-vendor mismatch (gpt-5.6-sol on claude) is INVALID.
70
70
  CANONICAL_VALID_PAIRS: tuple[tuple[str, str], ...] = (
71
- ("gpt-5.5", "codex"),
72
- ("gpt-5.5", "opencode"),
71
+ ("gpt-5.6-sol", "codex"),
72
+ ("gpt-5.6-sol", "opencode"),
73
73
  ("claude-sonnet-5", "claude"),
74
74
  ("Gemini 3.1 Pro", "gemini"),
75
+ ("grok-4.5", "grok"), # xAI-family model on the grok lane (4-vendor board)
75
76
  )
76
77
  CANONICAL_INVALID_PAIRS: tuple[tuple[str, str], ...] = (
77
- ("gpt-5.5", "claude"), # openai-family model on the claude lane
78
+ ("gpt-5.6-sol", "claude"), # openai-family model on the claude lane
78
79
  ("claude-sonnet-5", "codex"), # anthropic model on the codex lane
80
+ ("grok-4.5", "claude"), # xAI-family model on the claude lane
81
+ ("gpt-5.6-sol", "grok"), # openai-family model on the grok lane
79
82
  )
80
83
 
81
84
  # A two-same-vendor-seat board: exercises result re-keying (leg -> seat) and the
@@ -85,7 +88,7 @@ TWO_SAME_VENDOR_BOARD: Board = Board(
85
88
  name="two-openai",
86
89
  purpose="brainstorm",
87
90
  seats=(
88
- Seat(model="gpt-5.5", effort="high", harness="codex"),
89
- Seat(model="gpt-5.5", effort="high", harness="opencode"),
91
+ Seat(model="gpt-5.6-sol", effort="high", harness="codex"),
92
+ Seat(model="gpt-5.6-sol", effort="high", harness="opencode"),
90
93
  ),
91
94
  )
@@ -64,6 +64,17 @@ _CODEX_EFFORT: dict[str, str] = {
64
64
  "max": "xhigh",
65
65
  }
66
66
 
67
+ # canonical effort -> grok ``--reasoning-effort`` token. The grok CLI accepts
68
+ # ``none, minimal, low, medium, high, xhigh, max`` (verified via ``grok --help`` /
69
+ # an out-of-range probe), so canonical ``max`` maps straight to grok's own ``max``
70
+ # ceiling — the panel's grok seat runs at grok-4.5's maximum reasoning.
71
+ _GROK_EFFORT: dict[str, str] = {
72
+ "low": "low",
73
+ "medium": "medium",
74
+ "high": "high",
75
+ "max": "max",
76
+ }
77
+
67
78
  # canonical effort -> the ``(Word)`` token agy/gemini bakes into the model name
68
79
  # (panel_invoker.py:1016 uses ``(High)``).
69
80
  _GEMINI_EFFORT_WORD: dict[str, str] = {
@@ -102,8 +113,9 @@ def _require_effort(effort: str) -> None:
102
113
  def render_seat_invocation(harness: str, model: str, effort: str) -> SeatInvocation:
103
114
  """Freeze: turn a canonical ``(harness, model, effort)`` into its CLI invocation.
104
115
 
105
- Only the built-3 homebrew lanes (claude / codex / gemini) are frozen here —
106
- they are what the ``default`` board's back-compat proof rides on. Breadth
116
+ Only the homebrew lanes (claude / codex / gemini / grok) are frozen here —
117
+ claude / codex / gemini are what the ``default`` board's back-compat proof
118
+ rides on; grok joins them for the 4-vendor ``code-review`` board. Breadth
107
119
  lanes (opencode / pi / cursor / amp) raise ``EffortMappingError`` until
108
120
  ABDREG/ABDHOME/ABDOMNI populate them; a board with an unmapped lane degrades
109
121
  skip-with-warning, never silently drops effort.
@@ -120,6 +132,11 @@ def render_seat_invocation(harness: str, model: str, effort: str) -> SeatInvocat
120
132
  if lane == "gemini":
121
133
  # panel_invoker.py:1016 -> effort baked into ``--model "<base> (Word)"``
122
134
  return SeatInvocation(lane, render_gemini_model(model, effort), (), MECH_MODEL_NAME)
135
+ if lane == "grok":
136
+ # grok headless -> ``--reasoning-effort <token>`` (alias ``--effort``); the
137
+ # model is passed verbatim via ``-m``. Same flag mechanism as claude.
138
+ token = _GROK_EFFORT[effort]
139
+ return SeatInvocation(lane, model, ("--reasoning-effort", token), MECH_FLAG)
123
140
  raise EffortMappingError(
124
141
  f"effort mapping for harness {harness!r} is populated in ABDREG/ABDHOME/ABDOMNI"
125
142
  )
@@ -15,7 +15,7 @@ Populates the frozen ``CompatibilityMatrix`` interface (registries.py:101-115):
15
15
  Validity is model-first: a pairing is valid iff the harness's lane vendor-family
16
16
  matches the model's vendor-family (the FROZEN ``schema.vendor_family`` projection
17
17
  that also keeps the governed reviewer≠author disjointness intact). That makes
18
- ``gpt-5.5`` valid on both ``codex`` and ``opencode`` (same family) but invalid on
18
+ ``gpt-5.6-sol`` valid on both ``codex`` and ``opencode`` (same family) but invalid on
19
19
  ``claude`` — exactly ``fixtures.CANONICAL_VALID_PAIRS`` /
20
20
  ``CANONICAL_INVALID_PAIRS``.
21
21
 
@@ -6,8 +6,9 @@ Nine built-in presets, each a named, purpose-tagged, open-ended seat list:
6
6
  the back-compat keystone holds by construction: the default
7
7
  board reconstructs today's exact three seats (the claude seat
8
8
  on Fable, ``claude-fable-5``).
9
- * ``code-review`` — three frontier vendors, each adversarial: codex ``gpt-5.5``,
10
- ``Gemini 3.1 Pro``, and ``claude-fable-5``.
9
+ * ``code-review`` — the 4-vendor cross-vendor board (grok / claude / codex /
10
+ gemini) at max thinking, distinct lenses, composed
11
+ availability-aware (``composition.compose_review_board``).
11
12
  * ``brainstorm`` — multi-vendor divergent thinking, lens-differentiated.
12
13
  * ``doc-edit`` — a lighter documentation-editing board.
13
14
  * ``legal-review`` / ``legal-strategy-review`` / ``legal-brainstorm`` — the legal
@@ -32,21 +33,20 @@ strings (``schema.py``): the legal lenses/purposes below need no enum extension.
32
33
  """
33
34
  from __future__ import annotations
34
35
 
36
+ from .composition import compose_review_board
35
37
  from .fixtures import DEFAULT_BOARD
36
38
  from .schema import Board, Seat
37
39
 
38
- # code-review: review-class = three frontier vendors, always. Each seat carries the
39
- # adversarial lens (find-the-bug framing); the claude seat is Fable, not the
40
- # implementer. This supersedes the old two-seat (codex + sonnet) composition.
41
- CODE_REVIEW_BOARD: Board = Board(
42
- name="code-review",
43
- purpose="code-review",
44
- seats=(
45
- Seat(model="gpt-5.5", effort="max", harness="codex", lens="adversarial"),
46
- Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="adversarial"),
47
- Seat(model="claude-fable-5", effort="max", harness="claude", lens="adversarial"),
48
- ),
49
- )
40
+ # code-review: review-class = the 4-vendor cross-vendor board, each vendor at MAX
41
+ # thinking with a DISTINCT lens (grok=adversarial, claude=correctness,
42
+ # codex=red-team, gemini=alternative-approach). This is the IDEAL (all-vendors-up)
43
+ # shape; the live panel composes it AVAILABILITY-AWARE via
44
+ # ``composition.compose_review_board`` — down vendors are backfilled with distinct
45
+ # lenses onto available vendors so the reviewer count never drops below the floor.
46
+ # The static preset here is the all-available composition (so a snapshot / config
47
+ # validation sees the canonical 4-seat board); it supersedes the old three-seat
48
+ # adversarial board.
49
+ CODE_REVIEW_BOARD: Board = compose_review_board(is_available=lambda _vendor: True)
50
50
 
51
51
  # brainstorm: divergent, multi-vendor, each seat a different thinking lens.
52
52
  BRAINSTORM_BOARD: Board = Board(
@@ -54,7 +54,7 @@ BRAINSTORM_BOARD: Board = Board(
54
54
  purpose="brainstorm",
55
55
  seats=(
56
56
  Seat(model="claude-sonnet-5", effort="high", harness="claude", lens="adversarial"),
57
- Seat(model="gpt-5.5", effort="high", harness="codex", lens="supportive"),
57
+ Seat(model="gpt-5.6-sol", effort="high", harness="codex", lens="supportive"),
58
58
  Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="lateral"),
59
59
  ),
60
60
  )
@@ -65,7 +65,7 @@ DOC_EDIT_BOARD: Board = Board(
65
65
  purpose="doc-edit",
66
66
  seats=(
67
67
  Seat(model="claude-sonnet-5", effort="medium", harness="claude", lens="copyedit"),
68
- Seat(model="gpt-5.5", effort="medium", harness="codex", lens="structure"),
68
+ Seat(model="gpt-5.6-sol", effort="medium", harness="codex", lens="structure"),
69
69
  ),
70
70
  )
71
71
 
@@ -83,7 +83,7 @@ LEGAL_REVIEW_BOARD: Board = Board(
83
83
  name="legal-review",
84
84
  purpose="legal-review",
85
85
  seats=(
86
- Seat(model="gpt-5.5", effort="max", harness="codex", lens="opposing-counsel"),
86
+ Seat(model="gpt-5.6-sol", effort="max", harness="codex", lens="opposing-counsel"),
87
87
  Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="risk-liability"),
88
88
  Seat(model="claude-fable-5", effort="max", harness="claude", lens="authority-verification"),
89
89
  ),
@@ -95,7 +95,7 @@ LEGAL_STRATEGY_REVIEW_BOARD: Board = Board(
95
95
  name="legal-strategy-review",
96
96
  purpose="legal-strategy-review",
97
97
  seats=(
98
- Seat(model="gpt-5.5", effort="max", harness="codex", lens="red-team"),
98
+ Seat(model="gpt-5.6-sol", effort="max", harness="codex", lens="red-team"),
99
99
  Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="alternatives"),
100
100
  Seat(model="claude-fable-5", effort="max", harness="claude", lens="downside-ethics"),
101
101
  ),
@@ -108,7 +108,7 @@ LEGAL_BRAINSTORM_BOARD: Board = Board(
108
108
  purpose="legal-brainstorm",
109
109
  seats=(
110
110
  Seat(model="claude-sonnet-5", effort="high", harness="claude", lens="aggressive"),
111
- Seat(model="gpt-5.5", effort="high", harness="codex", lens="conservative"),
111
+ Seat(model="gpt-5.6-sol", effort="high", harness="codex", lens="conservative"),
112
112
  Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="creative"),
113
113
  ),
114
114
  )
@@ -127,7 +127,7 @@ GENERAL_BOARD: Board = Board(
127
127
  name="general",
128
128
  purpose="general",
129
129
  seats=(
130
- Seat(model="gpt-5.5", effort="max", harness="codex", lens="adversarial"),
130
+ Seat(model="gpt-5.6-sol", effort="max", harness="codex", lens="adversarial"),
131
131
  Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="alternative"),
132
132
  Seat(model="claude-fable-5", effort="max", harness="claude", lens="completeness"),
133
133
  ),
@@ -104,7 +104,7 @@ class CompatibilityMatrix(Protocol):
104
104
 
105
105
  ``is_valid(model, harness)`` -> ``(ok, AuthAvailability)``: ``ok`` is whether
106
106
  the pairing is *expressible at all* (an invalid pairing such as
107
- ``claude:gpt-5.5`` is rejected at config time with a clear message); the
107
+ ``claude:gpt-5.6-sol`` is rejected at config time with a clear message); the
108
108
  ``AuthAvailability`` reports which lanes are actually usable so a valid-but-
109
109
  unauthed seat degrades rather than blocks. ``default_lane`` is the harness a
110
110
  bare ``model`` seat resolves onto.
@@ -184,21 +184,26 @@ class UnknownHarnessError(KeyError):
184
184
 
185
185
  # --- harness registry data --------------------------------------------------
186
186
 
187
- # The six harnesses. claude / codex / gemini are the built-3 (homebrew, native +
188
- # TUI legs, ABDHOME); opencode / pi / cursor are breadth — registered here
187
+ # The registered harnesses. claude / codex / gemini / grok are the homebrew built-4
188
+ # (native + TUI legs, ABDHOME); opencode / pi / cursor are breadth — registered here
189
189
  # regardless, but their default transport is ``omnigent`` (routed via
190
190
  # omniagent-plus -> Omnigent per ABDOMNI; NOT hand-written homebrew adapters).
191
- # ``cli`` is the availability-probe binary: codex -> ``codex``, gemini -> ``agy``
192
- # (panel_invoker._LEG_CLI), cursor -> ``cursor-agent`` (so cursor is gated on the
193
- # cursor-agent binary being present). All six support both credential lanes; the
194
- # subscription lane is the default and the api-key lane is reachable only behind a
195
- # board opt-in (never-silent-key).
191
+ # ``cli`` is the availability-probe binary: codex -> ``codex``, gemini -> ``agy``,
192
+ # grok -> ``grok`` (panel_invoker._LEG_CLI), cursor -> ``cursor-agent`` (so cursor is
193
+ # gated on the cursor-agent binary being present). claude / codex / gemini support
194
+ # both credential lanes; the subscription lane is the default and the api-key lane is
195
+ # reachable only behind a board opt-in (never-silent-key). grok is registered
196
+ # SUBSCRIPTION-ONLY (its headless CLI drives a Grok subscription login; no vendor
197
+ # api-key var is wired for it — see ``backing.VENDOR_API_KEY_VARS``), so a grok seat
198
+ # never touches the api-key lane.
196
199
  _BOTH_LANES: tuple[str, ...] = (AUTH_SUBSCRIPTION, AUTH_API_KEY)
200
+ _SUBSCRIPTION_ONLY: tuple[str, ...] = (AUTH_SUBSCRIPTION,)
197
201
 
198
202
  _HARNESS_SPECS: tuple[HarnessSpec, ...] = (
199
203
  HarnessSpec(name="claude", cli="claude", auth_lanes=_BOTH_LANES, backing=BACKING_HOMEBREW),
200
204
  HarnessSpec(name="codex", cli="codex", auth_lanes=_BOTH_LANES, backing=BACKING_HOMEBREW),
201
205
  HarnessSpec(name="gemini", cli="agy", auth_lanes=_BOTH_LANES, backing=BACKING_HOMEBREW),
206
+ HarnessSpec(name="grok", cli="grok", auth_lanes=_SUBSCRIPTION_ONLY, backing=BACKING_HOMEBREW),
202
207
  HarnessSpec(name="opencode", cli="opencode", auth_lanes=_BOTH_LANES, backing=BACKING_OMNIGENT),
203
208
  HarnessSpec(name="pi", cli="pi", auth_lanes=_BOTH_LANES, backing=BACKING_OMNIGENT),
204
209
  HarnessSpec(name="cursor", cli="cursor-agent", auth_lanes=_BOTH_LANES, backing=BACKING_OMNIGENT),
@@ -243,18 +248,19 @@ class DefaultHarnessRegistry:
243
248
  # from the governed-gate mapping). ``runnable_by`` is derived from that family
244
249
  # across the six harnesses (a harness runs a model iff its lane vendor-family
245
250
  # matches). ``default_lane`` is PINNED to a built-3 leg so a bare seat resolves
246
- # onto the native lane — e.g. ``gpt-5.5`` is runnable by both ``codex`` and
247
- # ``opencode`` but a bare ``gpt-5.5`` seat MUST resolve to ``codex`` or the
251
+ # onto the native lane — e.g. ``gpt-5.6-sol`` is runnable by both ``codex`` and
252
+ # ``opencode`` but a bare ``gpt-5.6-sol`` seat MUST resolve to ``codex`` or the
248
253
  # default board's back-compat breaks. ``effort_ceiling`` defaults to the ladder
249
254
  # max; lower it only where there is concrete evidence a model caps out below max
250
255
  # (none of the built-3 do — codex's ``xhigh`` IS canonical ``max``).
251
256
  _MODEL_DEFS: tuple[tuple[str, str, str], ...] = (
252
- ("gpt-5.5", "codex", "max"),
257
+ ("gpt-5.6-sol", "codex", "max"),
253
258
  ("claude-sonnet-5", "claude", "max"),
254
259
  ("claude-opus-4-8", "claude", "max"),
255
260
  ("claude-haiku-4-5", "claude", "max"),
256
261
  ("claude-fable-5", "claude", "max"),
257
262
  ("Gemini 3.1 Pro", "gemini", "max"),
263
+ ("grok-4.5", "grok", "max"),
258
264
  )
259
265
 
260
266