phase-loop-runtime 0.5.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/PKG-INFO +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/pyproject.toml +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +3 -3
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/__init__.py +17 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/advisor_board/composition.py +180 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/config.py +19 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +3 -3
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/fixtures.py +13 -10
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/harness_mapping.py +19 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/matrix.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/presets.py +20 -20
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/registries.py +17 -11
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/resolver.py +9 -14
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/schema.py +4 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/standin.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/validation.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/build_bundle.py +3 -3
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/capability_registry.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/__init__.py +37 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/conformance/certificate_tier.py +174 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/conformance/git_grounded_projection.py +410 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/panel_invoker.py +70 -14
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/profiles.py +6 -6
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +13 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +22 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +13 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +15 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +13 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +15 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +6 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +13 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +15 -0
- phase_loop_runtime-0.6.0/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +176 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/train_runner.py +97 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/SOURCES.txt +13 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_backcompat.py +3 -3
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_backing_homebrew.py +13 -13
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_backing_omnigent.py +6 -6
- phase_loop_runtime-0.6.0/tests/test_advisor_board_composition.py +170 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_config.py +65 -9
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_golden.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_integration.py +8 -8
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_matrix.py +13 -13
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_observability.py +3 -3
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_presets.py +16 -13
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_registries.py +24 -10
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_resolver.py +19 -19
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_schema.py +14 -14
- phase_loop_runtime-0.6.0/tests/test_certificate_tier.py +137 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_codex_effort_max_clamp_49.py +2 -2
- phase_loop_runtime-0.6.0/tests/test_git_grounded_projection.py +333 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_disjointness_model_first.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_premerge.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_model_class_policy.py +4 -4
- phase_loop_runtime-0.6.0/tests/test_model_id_source_guard.py +133 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_observability_alerting.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_invoker_timeout_argv.py +29 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_per_leg_model_66.py +4 -4
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_cli.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_event.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_evidence_audit.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_discovery.py +4 -4
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_execution_policy.py +9 -9
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_handoff.py +4 -4
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_harnesses.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_ir.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_launcher.py +6 -6
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_ledger_debug.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_live_adapters.py +4 -4
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_metrics.py +3 -3
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_migration_regressions.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_mixedrun_dispatch.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_models.py +9 -9
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_closeout.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_plan_doc_skip.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_policy.py +6 -6
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile.py +30 -30
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile_blocker_self_clear.py +4 -4
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runner.py +14 -14
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_smoke_blockers.py +6 -6
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_state.py +17 -17
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_work_unit_observability.py +1 -1
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_work_unit_state.py +1 -1
- phase_loop_runtime-0.6.0/tests/test_prune_merged_worktrees_script.py +152 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_routing_invariants.py +1 -1
- phase_loop_runtime-0.6.0/tests/test_sweep_fleet_worktrees_script.py +262 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_invariants.py +2 -2
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_merge.py +110 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/setup.cfg +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/cli.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/tests/test_worktree_index.py +0 -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.
|
|
7
|
+
version = "0.6.0"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -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.
|
|
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)
|
|
132
|
+
- `phase_loop_runtime.conformance`: Named conformance-check surface for actor-side self-check and the CR-fence. Covers the SHAPE / GOVERNANCE tier (the six L0 consiliency gates, `scan_consiliency_gates`) and the CERT / SCHEMA tier (`validate_certificate` — structural conformance of a declared parity certificate to the contract-distributed `certificate` schema; NOT authority / provenance / signing, which stays in gp). It also carries the OBSERVABILITY / EMISSION tier (`reconcile_git_grounded_projection` and `GitGroundedProjection`): a consent-gated, producer-agnostic reconciler that turns raw git reality (read via `git_discipline`, classified against the `pipeline_ref_classes` contract SoT) into a `raw-sha256` digest-bound projection body the Portal's projection-index verify path re-verifies at render; it emits, it does not sign or own Portal ingest.
|
|
133
133
|
- `phase_loop_runtime.discovery`: Roadmap and repository resolution.
|
|
134
134
|
- `phase_loop_runtime.handoff`: TUI handoff generation and metadata.
|
|
135
135
|
- `phase_loop_runtime.models`: Core data models, schemas, and literals.
|
|
@@ -44,7 +44,7 @@ equivalence is proven by a test (not asserted in prose).
|
|
|
44
44
|
`seat_vendor_family(seat)`, model-first with a harness-lane fallback.
|
|
45
45
|
Byte-consistent with `governed_review.author_vendor_for_model` (:60-75) and
|
|
46
46
|
`_EXECUTOR_VENDOR` (:47-53). Two same-vendor seats on different harnesses
|
|
47
|
-
(`gpt-5.
|
|
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.
|
|
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.
|
|
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
|
+
]
|
{phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/config.py
RENAMED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
69
|
-
# projects to one family; a cross-vendor mismatch (gpt-5.
|
|
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.
|
|
72
|
-
("gpt-5.
|
|
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.
|
|
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.
|
|
89
|
-
Seat(model="gpt-5.
|
|
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
|
|
106
|
-
|
|
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
|
)
|
{phase_loop_runtime-0.5.0 → phase_loop_runtime-0.6.0}/src/phase_loop_runtime/advisor_board/matrix.py
RENAMED
|
@@ -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.
|
|
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`` —
|
|
10
|
-
|
|
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 =
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
130
|
+
Seat(model="gpt-5.6-sol", effort="max", harness="codex", lens="adversarial"),
|
|
131
131
|
Seat(model="Gemini 3.1 Pro", effort="high", harness="gemini", lens="alternative"),
|
|
132
132
|
Seat(model="claude-fable-5", effort="max", harness="claude", lens="completeness"),
|
|
133
133
|
),
|
|
@@ -104,7 +104,7 @@ class CompatibilityMatrix(Protocol):
|
|
|
104
104
|
|
|
105
105
|
``is_valid(model, harness)`` -> ``(ok, AuthAvailability)``: ``ok`` is whether
|
|
106
106
|
the pairing is *expressible at all* (an invalid pairing such as
|
|
107
|
-
``claude:gpt-5.
|
|
107
|
+
``claude:gpt-5.6-sol`` is rejected at config time with a clear message); the
|
|
108
108
|
``AuthAvailability`` reports which lanes are actually usable so a valid-but-
|
|
109
109
|
unauthed seat degrades rather than blocks. ``default_lane`` is the harness a
|
|
110
110
|
bare ``model`` seat resolves onto.
|
|
@@ -184,21 +184,26 @@ class UnknownHarnessError(KeyError):
|
|
|
184
184
|
|
|
185
185
|
# --- harness registry data --------------------------------------------------
|
|
186
186
|
|
|
187
|
-
# The
|
|
188
|
-
# TUI legs, ABDHOME); opencode / pi / cursor are breadth — registered here
|
|
187
|
+
# The registered harnesses. claude / codex / gemini / grok are the homebrew built-4
|
|
188
|
+
# (native + TUI legs, ABDHOME); opencode / pi / cursor are breadth — registered here
|
|
189
189
|
# regardless, but their default transport is ``omnigent`` (routed via
|
|
190
190
|
# omniagent-plus -> Omnigent per ABDOMNI; NOT hand-written homebrew adapters).
|
|
191
|
-
# ``cli`` is the availability-probe binary: codex -> ``codex``, gemini -> ``agy
|
|
192
|
-
# (panel_invoker._LEG_CLI), cursor -> ``cursor-agent`` (so cursor is
|
|
193
|
-
# cursor-agent binary being present).
|
|
194
|
-
# subscription lane is the default and the api-key lane is
|
|
195
|
-
# board opt-in (never-silent-key).
|
|
191
|
+
# ``cli`` is the availability-probe binary: codex -> ``codex``, gemini -> ``agy``,
|
|
192
|
+
# grok -> ``grok`` (panel_invoker._LEG_CLI), cursor -> ``cursor-agent`` (so cursor is
|
|
193
|
+
# gated on the cursor-agent binary being present). claude / codex / gemini support
|
|
194
|
+
# both credential lanes; the subscription lane is the default and the api-key lane is
|
|
195
|
+
# reachable only behind a board opt-in (never-silent-key). grok is registered
|
|
196
|
+
# SUBSCRIPTION-ONLY (its headless CLI drives a Grok subscription login; no vendor
|
|
197
|
+
# api-key var is wired for it — see ``backing.VENDOR_API_KEY_VARS``), so a grok seat
|
|
198
|
+
# never touches the api-key lane.
|
|
196
199
|
_BOTH_LANES: tuple[str, ...] = (AUTH_SUBSCRIPTION, AUTH_API_KEY)
|
|
200
|
+
_SUBSCRIPTION_ONLY: tuple[str, ...] = (AUTH_SUBSCRIPTION,)
|
|
197
201
|
|
|
198
202
|
_HARNESS_SPECS: tuple[HarnessSpec, ...] = (
|
|
199
203
|
HarnessSpec(name="claude", cli="claude", auth_lanes=_BOTH_LANES, backing=BACKING_HOMEBREW),
|
|
200
204
|
HarnessSpec(name="codex", cli="codex", auth_lanes=_BOTH_LANES, backing=BACKING_HOMEBREW),
|
|
201
205
|
HarnessSpec(name="gemini", cli="agy", auth_lanes=_BOTH_LANES, backing=BACKING_HOMEBREW),
|
|
206
|
+
HarnessSpec(name="grok", cli="grok", auth_lanes=_SUBSCRIPTION_ONLY, backing=BACKING_HOMEBREW),
|
|
202
207
|
HarnessSpec(name="opencode", cli="opencode", auth_lanes=_BOTH_LANES, backing=BACKING_OMNIGENT),
|
|
203
208
|
HarnessSpec(name="pi", cli="pi", auth_lanes=_BOTH_LANES, backing=BACKING_OMNIGENT),
|
|
204
209
|
HarnessSpec(name="cursor", cli="cursor-agent", auth_lanes=_BOTH_LANES, backing=BACKING_OMNIGENT),
|
|
@@ -243,18 +248,19 @@ class DefaultHarnessRegistry:
|
|
|
243
248
|
# from the governed-gate mapping). ``runnable_by`` is derived from that family
|
|
244
249
|
# across the six harnesses (a harness runs a model iff its lane vendor-family
|
|
245
250
|
# matches). ``default_lane`` is PINNED to a built-3 leg so a bare seat resolves
|
|
246
|
-
# onto the native lane — e.g. ``gpt-5.
|
|
247
|
-
# ``opencode`` but a bare ``gpt-5.
|
|
251
|
+
# onto the native lane — e.g. ``gpt-5.6-sol`` is runnable by both ``codex`` and
|
|
252
|
+
# ``opencode`` but a bare ``gpt-5.6-sol`` seat MUST resolve to ``codex`` or the
|
|
248
253
|
# default board's back-compat breaks. ``effort_ceiling`` defaults to the ladder
|
|
249
254
|
# max; lower it only where there is concrete evidence a model caps out below max
|
|
250
255
|
# (none of the built-3 do — codex's ``xhigh`` IS canonical ``max``).
|
|
251
256
|
_MODEL_DEFS: tuple[tuple[str, str, str], ...] = (
|
|
252
|
-
("gpt-5.
|
|
257
|
+
("gpt-5.6-sol", "codex", "max"),
|
|
253
258
|
("claude-sonnet-5", "claude", "max"),
|
|
254
259
|
("claude-opus-4-8", "claude", "max"),
|
|
255
260
|
("claude-haiku-4-5", "claude", "max"),
|
|
256
261
|
("claude-fable-5", "claude", "max"),
|
|
257
262
|
("Gemini 3.1 Pro", "gemini", "max"),
|
|
263
|
+
("grok-4.5", "grok", "max"),
|
|
258
264
|
)
|
|
259
265
|
|
|
260
266
|
|