phase-loop-runtime 0.5.0__tar.gz → 0.6.1__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 (683) hide show
  1. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/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.1}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +1 -1
  6. phase_loop_runtime-0.6.1/src/phase_loop_runtime/_proc_cpu.py +57 -0
  7. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +3 -3
  8. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/__init__.py +17 -0
  9. phase_loop_runtime-0.6.1/src/phase_loop_runtime/advisor_board/composition.py +180 -0
  10. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/config.py +19 -1
  11. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +3 -3
  12. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/fixtures.py +13 -10
  13. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/harness_mapping.py +19 -2
  14. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/matrix.py +1 -1
  15. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/presets.py +20 -20
  16. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/registries.py +17 -11
  17. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/resolver.py +9 -14
  18. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/schema.py +4 -1
  19. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/standin.py +2 -2
  20. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/validation.py +1 -1
  21. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/build_bundle.py +3 -3
  22. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/capability_registry.py +1 -1
  23. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/__init__.py +37 -0
  24. phase_loop_runtime-0.6.1/src/phase_loop_runtime/conformance/certificate_tier.py +174 -0
  25. phase_loop_runtime-0.6.1/src/phase_loop_runtime/conformance/git_grounded_projection.py +410 -0
  26. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/panel_invoker.py +343 -40
  27. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/profiles.py +6 -6
  28. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +6 -0
  29. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +6 -0
  30. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +13 -0
  31. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +22 -0
  32. phase_loop_runtime-0.6.1/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  33. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +1 -1
  34. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +6 -0
  35. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +6 -0
  36. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +13 -0
  37. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +15 -0
  38. phase_loop_runtime-0.6.1/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  39. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +1 -1
  40. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +6 -0
  41. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +6 -0
  42. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +13 -0
  43. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +15 -0
  44. phase_loop_runtime-0.6.1/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  45. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +6 -0
  46. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +6 -0
  47. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +13 -0
  48. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +15 -0
  49. phase_loop_runtime-0.6.1/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
  50. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/train_runner.py +97 -0
  51. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  52. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/SOURCES.txt +16 -0
  53. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_backcompat.py +3 -3
  54. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_backing_homebrew.py +39 -50
  55. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_backing_omnigent.py +6 -6
  56. phase_loop_runtime-0.6.1/tests/test_advisor_board_composition.py +170 -0
  57. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_config.py +65 -9
  58. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_golden.py +20 -24
  59. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_integration.py +8 -8
  60. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_matrix.py +13 -13
  61. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_observability.py +3 -3
  62. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_presets.py +16 -13
  63. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_registries.py +24 -10
  64. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_resolver.py +19 -19
  65. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_schema.py +14 -14
  66. phase_loop_runtime-0.6.1/tests/test_certificate_tier.py +137 -0
  67. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_codex_effort_max_clamp_49.py +2 -2
  68. phase_loop_runtime-0.6.1/tests/test_git_grounded_projection.py +333 -0
  69. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_disjointness_model_first.py +2 -2
  70. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_premerge.py +1 -1
  71. phase_loop_runtime-0.6.1/tests/test_leg_liveness_monitor.py +180 -0
  72. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_model_class_policy.py +4 -4
  73. phase_loop_runtime-0.6.1/tests/test_model_id_source_guard.py +133 -0
  74. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_observability_alerting.py +2 -2
  75. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_advisory_mode_63.py +1 -1
  76. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_context_refs_114.py +8 -4
  77. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_invoker_spawn.py +49 -34
  78. phase_loop_runtime-0.6.1/tests/test_panel_invoker_timeout_argv.py +146 -0
  79. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_leg_auth_preflight_64.py +23 -18
  80. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_per_leg_model_66.py +17 -12
  81. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_cli.py +1 -1
  82. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_event.py +2 -2
  83. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_evidence_audit.py +1 -1
  84. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +1 -1
  85. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_discovery.py +4 -4
  86. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_execution_policy.py +9 -9
  87. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_handoff.py +4 -4
  88. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_harnesses.py +2 -2
  89. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_ir.py +1 -1
  90. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_launcher.py +6 -6
  91. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_ledger_debug.py +2 -2
  92. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_live_adapters.py +4 -4
  93. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_metrics.py +3 -3
  94. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_migration_regressions.py +1 -1
  95. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_mixedrun_dispatch.py +2 -2
  96. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_models.py +9 -9
  97. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_closeout.py +2 -2
  98. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_plan_doc_skip.py +1 -1
  99. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_policy.py +6 -6
  100. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile.py +30 -30
  101. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile_blocker_self_clear.py +4 -4
  102. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +1 -1
  103. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +1 -1
  104. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runner.py +14 -14
  105. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_smoke_blockers.py +6 -6
  106. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_state.py +17 -17
  107. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_work_unit_observability.py +1 -1
  108. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_work_unit_state.py +1 -1
  109. phase_loop_runtime-0.6.1/tests/test_proc_cpu.py +45 -0
  110. phase_loop_runtime-0.6.1/tests/test_prune_merged_worktrees_script.py +152 -0
  111. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_routing_invariants.py +1 -1
  112. phase_loop_runtime-0.6.1/tests/test_sweep_fleet_worktrees_script.py +262 -0
  113. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_train_invariants.py +2 -2
  114. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_train_merge.py +110 -0
  115. phase_loop_runtime-0.5.0/tests/test_panel_invoker_timeout_argv.py +0 -85
  116. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/MANIFEST.in +0 -0
  117. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/README.md +0 -0
  118. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/protocol/protocol.md +0 -0
  119. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/setup.cfg +0 -0
  120. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  121. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  122. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  123. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  124. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  125. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  126. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  127. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  128. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  129. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  130. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  131. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
  132. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  133. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  134. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  135. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  136. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  137. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  138. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  139. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  140. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  141. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  142. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  143. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  144. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  145. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  146. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  147. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  148. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  149. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  150. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  151. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  152. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  153. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  154. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  155. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  156. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  157. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  158. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  159. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  160. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  161. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  162. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  163. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  164. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  165. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  166. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  167. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  168. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  169. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  170. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  171. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  172. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  173. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  174. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  175. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  176. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  177. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_modular.py +0 -0
  178. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  179. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  180. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  181. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  182. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  183. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  184. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  185. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  186. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/broker.py +0 -0
  187. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/classifier.py +0 -0
  188. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  189. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  190. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/cli.py +0 -0
  191. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout.py +0 -0
  192. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  193. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  194. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_validation.py +0 -0
  195. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/closeout_validators.py +0 -0
  196. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  197. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  198. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  199. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  200. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  201. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  202. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  203. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  204. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  205. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  206. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  207. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  208. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  209. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  210. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  211. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/discovery.py +0 -0
  212. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  213. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  214. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/docs_audit.py +0 -0
  215. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/docs_freshness.py +0 -0
  216. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  217. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  218. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/events.py +0 -0
  219. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/events_migration.py +0 -0
  220. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/evidence_audit.py +0 -0
  221. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  222. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/fleet_map.py +0 -0
  223. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  224. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  225. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/gate_posture.py +0 -0
  226. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/git_discipline.py +0 -0
  227. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/git_ops.py +0 -0
  228. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/git_topology.py +0 -0
  229. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/governed_bundle.py +0 -0
  230. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/governed_premerge.py +0 -0
  231. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/governed_review.py +0 -0
  232. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/handoff.py +0 -0
  233. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/handoff_path.py +0 -0
  234. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/injection.py +0 -0
  235. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/install_status.py +0 -0
  236. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  237. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/launcher.py +0 -0
  238. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/lease_store.py +0 -0
  239. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/maintenance.py +0 -0
  240. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  241. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/models.py +0 -0
  242. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/observability.py +0 -0
  243. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  244. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  245. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  246. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  247. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  248. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  249. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  250. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  251. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  252. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/plan_ir.py +0 -0
  253. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/plan_manifest.py +0 -0
  254. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/planner_validation.py +0 -0
  255. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/prompts.py +0 -0
  256. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/provenance.py +0 -0
  257. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/publishing.py +0 -0
  258. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/py.typed +0 -0
  259. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/reconcile.py +0 -0
  260. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/redaction.py +0 -0
  261. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/reflection_sync.py +0 -0
  262. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/release_guard.py +0 -0
  263. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/render.py +0 -0
  264. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/repo_validation.py +0 -0
  265. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/review_summary.py +0 -0
  266. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  267. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/route_log.py +0 -0
  268. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  269. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  270. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runner.py +0 -0
  271. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runtime_paths.py +0 -0
  272. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runtime_projection.py +0 -0
  273. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/runtime_resources.py +0 -0
  274. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/schema_export.py +0 -0
  275. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  276. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_install.py +0 -0
  277. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_inventory.py +0 -0
  278. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_paths.py +0 -0
  279. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  280. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  281. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  282. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  283. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  284. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  285. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  286. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  287. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  288. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  289. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  290. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  291. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  292. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  293. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  294. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  295. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  296. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  297. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  298. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  299. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  300. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  301. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  302. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  303. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  304. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  305. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  306. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  307. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  308. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  309. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  310. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  311. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  312. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  313. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  314. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  315. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  316. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  317. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  318. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  319. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  320. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  321. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  322. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  323. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  324. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  325. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  326. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  327. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  328. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  329. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  330. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  331. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  332. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  333. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  334. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  335. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  336. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  337. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  338. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  339. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  340. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  341. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  342. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  343. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  344. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  345. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  346. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  347. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  348. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  349. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  350. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  351. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  352. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  353. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  354. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  355. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  356. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  357. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  358. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  359. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  360. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  361. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  362. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  363. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  364. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  365. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  366. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  367. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  368. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  369. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  370. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  371. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  372. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  373. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  374. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  375. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  376. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  377. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  378. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  379. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  380. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  381. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  382. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  383. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  384. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  385. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  386. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  387. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  388. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  389. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  390. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  391. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  392. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  393. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  394. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  395. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  396. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  397. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  398. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  399. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  400. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  401. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  402. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  403. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  404. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  405. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  406. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  407. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  408. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  409. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  410. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  411. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  412. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  413. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  414. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  415. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  416. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  417. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  418. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  419. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  420. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  421. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  422. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  423. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  424. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  425. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  426. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  427. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  428. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  429. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  430. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  431. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  432. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  433. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  434. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  435. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  436. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  437. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  438. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  439. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  440. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  441. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  442. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  443. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  444. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  445. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  446. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/state.py +0 -0
  447. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/state_degradation.py +0 -0
  448. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/state_ops.py +0 -0
  449. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/train_ledger.py +0 -0
  450. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/train_roadmap.py +0 -0
  451. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/verification_evidence.py +0 -0
  452. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  453. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  454. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/worker_pool.py +0 -0
  455. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime/worktree_index.py +0 -0
  456. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  457. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  458. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  459. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  460. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_advisory_mode.py +0 -0
  461. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_alias_install.py +0 -0
  462. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_concurrency.py +0 -0
  463. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_advisor_board_ingestion.py +0 -0
  464. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_agent_runtime_provider_cs08.py +0 -0
  465. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_branchgov_preflight.py +0 -0
  466. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_cli_train_status_45.py +0 -0
  467. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_break_glass_cli.py +0 -0
  468. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_classifier.py +0 -0
  469. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_convergence_fixes.py +0 -0
  470. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_exception_vocab.py +0 -0
  471. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_validator_hook.py +0 -0
  472. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_closeout_verification_gate.py +0 -0
  473. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_dual_layout.py +0 -0
  474. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_gates.py +0 -0
  475. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_ingest.py +0 -0
  476. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_consiliency_scaffold.py +0 -0
  477. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_coordinator_wave_loop.py +0 -0
  478. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  479. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_dispatch_lock_helper.py +0 -0
  480. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  481. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_doc_delta_validator.py +0 -0
  482. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_docs_audit.py +0 -0
  483. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_docs_freshness.py +0 -0
  484. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_dotfiles_tree.py +0 -0
  485. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_execute_phase_handoff_mode.py +0 -0
  486. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_execution_policy_tiering.py +0 -0
  487. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_export_schema.py +0 -0
  488. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_fleet_map.py +0 -0
  489. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_fleet_metrics.py +0 -0
  490. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_fleet_metrics_export.py +0 -0
  491. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_gate_a_wheel_isolation.py +0 -0
  492. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_gate_posture.py +0 -0
  493. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_git_discipline.py +0 -0
  494. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_e2e.py +0 -0
  495. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_gate_crfixes.py +0 -0
  496. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_planning_gate.py +0 -0
  497. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_premerge_live.py +0 -0
  498. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_governed_review.py +0 -0
  499. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_hotfix_lane.py +0 -0
  500. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_injection_skill_failloud.py +0 -0
  501. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_lane_ir_override.py +0 -0
  502. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_launcher_liveness.py +0 -0
  503. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_lease_store.py +0 -0
  504. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_lease_store_conformance.py +0 -0
  505. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_ledger_serialization.py +0 -0
  506. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_advisory.py +0 -0
  507. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_advisory_cli.py +0 -0
  508. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  509. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_authority_boundary.py +0 -0
  510. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_contract_drift.py +0 -0
  511. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_contract_imports.py +0 -0
  512. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_contract_pin.py +0 -0
  513. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_core_api.py +0 -0
  514. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_provenance.py +0 -0
  515. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_ci.py +0 -0
  516. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_cli.py +0 -0
  517. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_output.py +0 -0
  518. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_real_runtime.py +0 -0
  519. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_redaction.py +0 -0
  520. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_release_surface.py +0 -0
  521. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_schema_validation.py +0 -0
  522. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_outside_agent_vectors.py +0 -0
  523. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_invoker.py +0 -0
  524. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_tui_eof_48.py +0 -0
  525. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_panel_verdict_summary.py +0 -0
  526. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_parallel_dispatch_backcompat.py +0 -0
  527. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_parallel_dispatch_cli.py +0 -0
  528. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_adoption_bundle.py +0 -0
  529. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  530. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_dependency.py +0 -0
  531. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  532. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_injection.py +0 -0
  533. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_modular.py +0 -0
  534. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  535. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  536. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_schema_export.py +0 -0
  537. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_baml_schema_source.py +0 -0
  538. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  539. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_build_bundle.py +0 -0
  540. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_classifier.py +0 -0
  541. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  542. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  543. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  544. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  545. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_security.py +0 -0
  546. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  547. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  548. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  549. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_claude_route_selection.py +0 -0
  550. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  551. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_control_only.py +0 -0
  552. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_hardening.py +0 -0
  553. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  554. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_schema.py +0 -0
  555. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_closeout_validation.py +0 -0
  556. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_collaborator_citation.py +0 -0
  557. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_collaborator_docs.py +0 -0
  558. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  559. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  560. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  561. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_docs.py +0 -0
  562. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  563. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  564. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  565. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  566. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_portal.py +0 -0
  567. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  568. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_drift_audit.py +0 -0
  569. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  570. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_events_migration.py +0 -0
  571. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit.py +0 -0
  572. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  573. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  574. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  575. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  576. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_executor_degradation.py +0 -0
  577. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_full_phase_mode.py +0 -0
  578. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_handoff_migration.py +0 -0
  579. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_init.py +0 -0
  580. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_injection.py +0 -0
  581. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_install_status.py +0 -0
  582. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  583. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_lane_scheduler.py +0 -0
  584. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_ledger_dedup.py +0 -0
  585. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_maintenance.py +0 -0
  586. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  587. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  588. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_native_flags.py +0 -0
  589. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  590. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pi_executor.py +0 -0
  591. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  592. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  593. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  594. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  595. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_pipeline_mode.py +0 -0
  596. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_plan_manifest.py +0 -0
  597. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  598. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_planner_validation.py +0 -0
  599. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_protocol_contract.py +0 -0
  600. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_provenance.py +0 -0
  601. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  602. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_reducers.py +0 -0
  603. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  604. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_roadmap_validate.py +0 -0
  605. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_rotation.py +0 -0
  606. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  607. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_boundary.py +0 -0
  608. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_decouple.py +0 -0
  609. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_package_data.py +0 -0
  610. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_runtime_projection.py +0 -0
  611. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_schema_flow.py +0 -0
  612. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  613. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  614. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_contract.py +0 -0
  615. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  616. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_install.py +0 -0
  617. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  618. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  619. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_smoke_reentry.py +0 -0
  620. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  621. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  622. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  623. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  624. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  625. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  626. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  627. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  628. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v22_e2e.py +0 -0
  629. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v22_principles.py +0 -0
  630. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  631. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_reconcile.py +0 -0
  632. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_sched.py +0 -0
  633. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_v45_schedharden.py +0 -0
  634. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_wave_runner.py +0 -0
  635. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_work_unit_runner.py +0 -0
  636. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_loop_worktrees.py +0 -0
  637. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  638. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_phase_worktree_executor.py +0 -0
  639. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  640. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  641. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  642. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_flag.py +0 -0
  643. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_markers.py +0 -0
  644. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  645. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  646. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  647. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  648. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  649. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_pkg_layout_freeze.py +0 -0
  650. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_plan_ir_iter_waves.py +0 -0
  651. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_preflight_verification.py +0 -0
  652. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_publishing.py +0 -0
  653. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  654. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_reconcile_verification_log.py +0 -0
  655. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_reflection_sync.py +0 -0
  656. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_repo_validation.py +0 -0
  657. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_review_summary.py +0 -0
  658. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_route_log.py +0 -0
  659. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_route_policy_conformance.py +0 -0
  660. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_runtime_state_mirror_agreement.py +0 -0
  661. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_sibling_matcher_patterns.py +0 -0
  662. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skill_bundle_pinned.py +0 -0
  663. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skill_install_body_expansion.py +0 -0
  664. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skill_plan_manifest_write.py +0 -0
  665. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skill_sources_seam.py +0 -0
  666. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skills_bundle_drift.py +0 -0
  667. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skills_canon_parity.py +0 -0
  668. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_skills_src_claude_literal_lint.py +0 -0
  669. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_spec_conformance_gate.py +0 -0
  670. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_sync_skills_apply_failloud.py +0 -0
  671. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_train_e2e.py +0 -0
  672. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_train_order_only_deps_47.py +0 -0
  673. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_train_roadmap.py +0 -0
  674. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_train_runner.py +0 -0
  675. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  676. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  677. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_verification_evidence.py +0 -0
  678. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_verification_evidence_validator.py +0 -0
  679. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_visual_evidence_validator.py +0 -0
  680. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_workerpool_failure_isolation.py +0 -0
  681. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_workerpool_parallel.py +0 -0
  682. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/tests/test_workerpool_worktree_alloc.py +0 -0
  683. {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.1}/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.1
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.1"
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.1"
@@ -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.
@@ -0,0 +1,57 @@
1
+ """Process-group CPU sampling for the leg-liveness monitor.
2
+
3
+ A panel leg is launched with ``start_new_session=True``, so its process-group id
4
+ (pgid) equals the leader pid and every descendant it spawns inherits that pgid.
5
+ ``group_cpu_ticks(leader_pid)`` therefore sums CPU (utime+stime) across the whole
6
+ leg — leader and all children — which is the heartbeat signal for a leg that is
7
+ *thinking silently* (codex/grok in print mode emit no incremental stdout, then
8
+ write their ``--output-last-message`` file at the end; a thinking process burns
9
+ CPU, a wedged one does not).
10
+
11
+ Linux-only via ``/proc``. On any other platform (or a missing ``/proc``) it
12
+ returns 0, so the runner degrades to a stdout-only heartbeat — still correct: a
13
+ streaming leg heartbeats on stdout, and a silent-AND-idle leg is genuinely dead.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import os
18
+
19
+
20
+ def _pgrp_and_ticks(pid: int) -> tuple[int, int]:
21
+ """Return ``(process_group_id, utime+stime)`` for ``pid`` from /proc/<pid>/stat.
22
+
23
+ The ``comm`` field (2nd) is wrapped in parens and may itself contain spaces or
24
+ parens, so parse the fixed fields AFTER the last ``)``: from there field 3
25
+ (state) is index 0, so pgrp (field 5) = index 2, utime (14) = index 11, and
26
+ stime (15) = index 12.
27
+ """
28
+ with open(f"/proc/{pid}/stat", encoding="ascii", errors="replace") as fh:
29
+ data = fh.read()
30
+ after = data[data.rfind(")") + 2 :].split()
31
+ pgrp = int(after[2])
32
+ return pgrp, int(after[11]) + int(after[12])
33
+
34
+
35
+ def group_cpu_ticks(leader_pid: int) -> int:
36
+ """Sum CPU ticks (utime+stime) across every process in ``leader_pid``'s group.
37
+
38
+ Returns 0 when ``/proc`` is unavailable (non-Linux) or nothing matches — the
39
+ caller treats 0-delta as "no CPU heartbeat", which combined with the stdout
40
+ heartbeat still catches a genuinely wedged leg and never false-kills a
41
+ streaming one.
42
+ """
43
+ total = 0
44
+ try:
45
+ entries = os.listdir("/proc")
46
+ except OSError:
47
+ return 0
48
+ for entry in entries:
49
+ if not entry.isdigit():
50
+ continue
51
+ try:
52
+ pgrp, ticks = _pgrp_and_ticks(int(entry))
53
+ except (OSError, ValueError, IndexError):
54
+ continue # process exited mid-scan, or an unreadable/odd stat line
55
+ if pgrp == leader_pid:
56
+ total += ticks
57
+ return total
@@ -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
  ),