phase-loop-runtime 0.6.1__tar.gz → 0.7.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.6.1 → phase_loop_runtime-0.7.0}/PKG-INFO +4 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/pyproject.toml +11 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +13 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/__init__.py +2 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/composition.py +63 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/config.py +20 -2
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/capability_registry.py +156 -4
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/cli.py +290 -24
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/default_executor_resolver.py +315 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/discovery.py +41 -2
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/doctor.py +466 -0
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/executor_availability.py +128 -0
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/harness_env_signatures.py +206 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/injection.py +15 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/launcher.py +589 -275
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/models.py +58 -3
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/panel_invoker.py +134 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/profiles.py +17 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/reconcile.py +24 -13
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/runner.py +389 -22
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +79 -0
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +95 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +14 -10
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +14 -10
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +20 -11
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +12 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +12 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +12 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +12 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +12 -8
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +12 -8
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/task_message_resolver.py +349 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime.egg-info/PKG-INFO +4 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime.egg-info/SOURCES.txt +27 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime.egg-info/requires.txt +3 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_backcompat.py +6 -2
- phase_loop_runtime-0.7.0/tests/test_advisor_board_cli_legacy.py +179 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_composition.py +79 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_config.py +33 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_golden.py +3 -1
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_integration.py +3 -1
- phase_loop_runtime-0.7.0/tests/test_advisor_twin_alias_legacy.py +58 -0
- phase_loop_runtime-0.7.0/tests/test_autosel.py +614 -0
- phase_loop_runtime-0.7.0/tests/test_conformance_golden.py +387 -0
- phase_loop_runtime-0.7.0/tests/test_discovery_hygiene_legacy.py +176 -0
- phase_loop_runtime-0.7.0/tests/test_doctor_bom.py +198 -0
- phase_loop_runtime-0.7.0/tests/test_execgov.py +381 -0
- phase_loop_runtime-0.7.0/tests/test_execreg_launch_registry.py +199 -0
- phase_loop_runtime-0.7.0/tests/test_executor_availability.py +151 -0
- phase_loop_runtime-0.7.0/tests/test_grokexec.py +471 -0
- phase_loop_runtime-0.7.0/tests/test_launchspec_golden.py +58 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_invoker_timeout_argv.py +12 -1
- phase_loop_runtime-0.7.0/tests/test_panel_streaming_verdicts.py +213 -0
- phase_loop_runtime-0.7.0/tests/test_phase_loop_break_glass_rerun.py +378 -0
- phase_loop_runtime-0.7.0/tests/test_phase_loop_concurrent_phase_dispatch.py +47 -0
- phase_loop_runtime-0.7.0/tests/test_phase_loop_dry_run_closeout_guard.py +94 -0
- phase_loop_runtime-0.7.0/tests/test_phase_loop_issue_84_explicit_phase.py +113 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_policy.py +1 -1
- phase_loop_runtime-0.7.0/tests/test_phase_loop_repair_precondition_planned_closeout.py +260 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_runtime_decouple.py +34 -0
- phase_loop_runtime-0.7.0/tests/test_release_pin_autotrack.py +123 -0
- phase_loop_runtime-0.7.0/tests/test_status_read_only_62.py +297 -0
- phase_loop_runtime-0.7.0/tests/test_task_message_resolver.py +250 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/setup.cfg +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.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.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.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.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/tests/test_worktree_index.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phase-loop-runtime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Harness-neutral phase-loop orchestration runtime and CLI
|
|
5
5
|
Author: ViperJuice
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -20,6 +20,9 @@ Requires-Dist: pydantic<3,>=2
|
|
|
20
20
|
Requires-Dist: PyYAML<7,>=6
|
|
21
21
|
Requires-Dist: consiliency-contract<0.7,>=0.6.5
|
|
22
22
|
Requires-Dist: jsonschema<5,>=4
|
|
23
|
+
Requires-Dist: packaging>=21
|
|
24
|
+
Requires-Dist: websockets<16,>=12
|
|
25
|
+
Requires-Dist: rfc8785<0.2,>=0.1.4
|
|
23
26
|
Requires-Dist: tomli<3,>=2; python_version < "3.11"
|
|
24
27
|
|
|
25
28
|
# phase-loop-runtime
|
|
@@ -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.7.0"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -44,6 +44,16 @@ dependencies = [
|
|
|
44
44
|
# guarantees the contract-owned vocabulary (incl. governance_contracts) is live.
|
|
45
45
|
"consiliency-contract>=0.6.5,<0.7",
|
|
46
46
|
"jsonschema>=4,<5",
|
|
47
|
+
# `phase-loop doctor` (IF-0-AHADOPT-2) compares consumer pins to registry
|
|
48
|
+
# latest with PEP 440 version ordering. Declared so the BOM produces real
|
|
49
|
+
# stale|current verdicts on the isolated `uv tool install` path (where pip —
|
|
50
|
+
# and its transitive packaging — is not present); the doctor still degrades to
|
|
51
|
+
# `unknown` rather than crash if it is somehow absent.
|
|
52
|
+
"packaging>=21",
|
|
53
|
+
# Governed task-message resolver: authenticated Codex app-server transport
|
|
54
|
+
# plus contract-identical RFC 8785 approval-body hashing.
|
|
55
|
+
"websockets>=12,<16",
|
|
56
|
+
"rfc8785>=0.1.4,<0.2",
|
|
47
57
|
# Advisor Board config loader (ABDREG) parses advisor-boards.toml. tomllib is
|
|
48
58
|
# stdlib on 3.11+; on the 3.10 requires-python floor it is absent, so pull in
|
|
49
59
|
# the tomli backport there (import shim in advisor_board/config.py).
|
|
@@ -255,6 +255,19 @@ the golden proves byte-identity):
|
|
|
255
255
|
`claude` seats) now runs two concurrent same-lane CLI/PTY sessions — a scenario this
|
|
256
256
|
fan-out newly enables and nothing yet tests. The `default` board has one claude seat,
|
|
257
257
|
so it is unaffected.
|
|
258
|
+
- **Opt-in streaming delivery (REVIEWGOV IF-0-REVIEWGOV-2).** `_run_legs_ordered` (and
|
|
259
|
+
the `invoke_panel` / `invoke_board` entry points) take optional, keyword-only,
|
|
260
|
+
default-`None` `on_leg_complete` (a per-leg callback) and `stream_dir` /
|
|
261
|
+
`review_dir` (incremental per-leg verdict files). When BOTH are `None` the path is
|
|
262
|
+
byte-for-byte the historical one — block on the futures in submission order — so the
|
|
263
|
+
golden is untouched. When EITHER is set, results are collected via `as_completed` so
|
|
264
|
+
each leg is delivered the MOMENT it lands (callback + a `leg-<i>-<label>.verdict.json`
|
|
265
|
+
file written into the dir), while the **consolidated return is still re-sorted to
|
|
266
|
+
submission order** (`result[i]` ↔ `items[i]`). The side-channel is **fail-open**: a
|
|
267
|
+
raising callback or an unwritable dir is swallowed (logged), never breaking the pool
|
|
268
|
+
or failing a leg. Proven by a SINGLE shared out-of-order-completion fixture used by
|
|
269
|
+
both the default-ordering (golden) and fast-before-slow (streaming) tests, so the
|
|
270
|
+
golden cannot pass trivially.
|
|
258
271
|
|
|
259
272
|
## ABDREF — "Reference, don't inline" ingestion · `panel_invoker._resolve_artifact` / `_resolve_brief`
|
|
260
273
|
|
|
@@ -86,6 +86,7 @@ from .composition import (
|
|
|
86
86
|
BoardIndependence,
|
|
87
87
|
board_independence,
|
|
88
88
|
compose_review_board,
|
|
89
|
+
default_board_auth_ok,
|
|
89
90
|
)
|
|
90
91
|
from .presets import (
|
|
91
92
|
CODE_REVIEW_BOARD,
|
|
@@ -229,6 +230,7 @@ __all__ = [
|
|
|
229
230
|
"get_preset",
|
|
230
231
|
# composition (availability-aware 4-vendor board)
|
|
231
232
|
"compose_review_board",
|
|
233
|
+
"default_board_auth_ok",
|
|
232
234
|
"board_independence",
|
|
233
235
|
"BoardIndependence",
|
|
234
236
|
"LENS_CYCLE",
|
|
@@ -72,9 +72,33 @@ def _seat_for(vendor: str, lens: str) -> Seat:
|
|
|
72
72
|
return Seat(model=spec["model"], effort=spec["effort"], harness=spec["harness"], lens=lens)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
+
def default_board_auth_ok(vendor: str) -> bool:
|
|
76
|
+
"""Production auth gate for a board vendor (REVIEWGOV-W1 / #151).
|
|
77
|
+
|
|
78
|
+
Reuses the executor's OWN cached, timeout-bounded, fail-closed ``auth_ok`` — the
|
|
79
|
+
closure ``capability_registry`` binds onto each record, which wraps
|
|
80
|
+
``executor_availability.auth_ok_for`` over that record's
|
|
81
|
+
``auth_preflight_probes`` (the same probes ``run_auth_preflight`` uses). So the
|
|
82
|
+
board's auth verdict is single-sourced with the dispatch path's, cached across
|
|
83
|
+
the board's seats, and never re-implements probing. A board vendor with no
|
|
84
|
+
registered capability record, or whose gate raises, fails CLOSED (treated as
|
|
85
|
+
unauthed → dropped → backfilled). The board vendors (grok/claude/codex/gemini)
|
|
86
|
+
map 1:1 onto executor names. Import is function-local to avoid the
|
|
87
|
+
``advisor_board`` ↔ ``capability_registry`` import cycle."""
|
|
88
|
+
from ..capability_registry import capability_registry
|
|
89
|
+
|
|
90
|
+
try:
|
|
91
|
+
gate = capability_registry().get(vendor)
|
|
92
|
+
auth_ok = getattr(gate, "auth_ok", None) if gate is not None else None
|
|
93
|
+
return bool(auth_ok()) if auth_ok is not None else False
|
|
94
|
+
except Exception:
|
|
95
|
+
return False
|
|
96
|
+
|
|
97
|
+
|
|
75
98
|
def compose_review_board(
|
|
76
99
|
*,
|
|
77
100
|
is_available: Callable[[str], bool] | None = None,
|
|
101
|
+
auth_ok: Callable[[str], bool] | None = None,
|
|
78
102
|
target: int = DEFAULT_TARGET_SEATS,
|
|
79
103
|
floor: int = FLOOR_SEATS,
|
|
80
104
|
name: str = "code-review",
|
|
@@ -82,19 +106,49 @@ def compose_review_board(
|
|
|
82
106
|
) -> Board:
|
|
83
107
|
"""Compose the availability-aware review board.
|
|
84
108
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
(
|
|
88
|
-
|
|
89
|
-
|
|
109
|
+
A vendor is seated only when it is BOTH reachable AND authenticated —
|
|
110
|
+
composition gates on ``is_available ∧ auth_ok`` (REVIEWGOV IF-0-REVIEWGOV-1 /
|
|
111
|
+
#151). A PATH-present-but-unauthenticated vendor (e.g. a ``grok`` binary on PATH
|
|
112
|
+
with no logged-in session) is treated as **down**: it is dropped and its seat is
|
|
113
|
+
backfilled onto an authenticated vendor with a distinct lens, exactly like a
|
|
114
|
+
PATH-absent vendor. This closes the hole where the board composed on PATH alone
|
|
115
|
+
and seated a vendor whose leg would then fail-closed to DEGRADED.
|
|
116
|
+
|
|
117
|
+
``is_available(vendor) -> bool`` decides reachability; it defaults to the
|
|
118
|
+
advisor-board's canonical PATH probe (``DEFAULT_HARNESS_REGISTRY.is_available``)
|
|
119
|
+
so composition is registration-driven and grok is probed exactly like
|
|
120
|
+
codex/gemini/claude.
|
|
121
|
+
|
|
122
|
+
``auth_ok(vendor) -> bool`` decides authentication; it defaults to
|
|
123
|
+
``default_board_auth_ok`` (the cached, timeout-bounded, fail-closed
|
|
124
|
+
``auth_ok_for`` gate), so the production default is genuinely auth-aware.
|
|
125
|
+
|
|
126
|
+
**Test affordance (documented coupling, not the general contract):** when
|
|
127
|
+
``is_available`` is INJECTED but ``auth_ok`` is not, auth defaults to
|
|
128
|
+
pass-through (every vendor treated authed) so an availability-SIMULATION caller
|
|
129
|
+
fully owns the gate and never shells out to the real auth probe. Inject
|
|
130
|
+
``auth_ok`` explicitly to simulate the auth dimension. The all-vendors-up static
|
|
131
|
+
presets (``presets.CODE_REVIEW_BOARD``, ``resolver._STANDIN_CODE_REVIEW``) rely
|
|
132
|
+
on this so their module-import composition stays hermetic. Any NON-test caller
|
|
133
|
+
that injects ``is_available`` alone therefore opts OUT of auth gating — pass
|
|
134
|
+
``auth_ok`` (e.g. ``default_board_auth_ok``) to keep it.
|
|
90
135
|
|
|
91
136
|
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
|
|
137
|
+
and authed (never fewer than ``floor``); an empty board only when NO vendor is
|
|
138
|
+
both up and authed.
|
|
93
139
|
"""
|
|
94
140
|
if target < floor:
|
|
95
141
|
raise ValueError(f"target {target} is below the floor {floor}")
|
|
96
|
-
|
|
97
|
-
|
|
142
|
+
avail_probe = is_available if is_available is not None else DEFAULT_HARNESS_REGISTRY.is_available
|
|
143
|
+
if auth_ok is not None:
|
|
144
|
+
auth_probe = auth_ok
|
|
145
|
+
elif is_available is not None:
|
|
146
|
+
# Injected availability owns the gate: auth defaults to pass-through so a
|
|
147
|
+
# simulation caller never shells out (see docstring test affordance).
|
|
148
|
+
auth_probe = lambda _vendor: True # noqa: E731
|
|
149
|
+
else:
|
|
150
|
+
auth_probe = default_board_auth_ok
|
|
151
|
+
available = [v for v in _VENDOR_ORDER if avail_probe(v) and auth_probe(v)]
|
|
98
152
|
if not available:
|
|
99
153
|
# Nothing to compose — the caller's run degrades wholesale. (The floor is a
|
|
100
154
|
# count of INDEPENDENT reviewers to seat on AVAILABLE vendors; with zero up
|
|
@@ -174,6 +228,7 @@ def board_independence(board: Board) -> BoardIndependence:
|
|
|
174
228
|
|
|
175
229
|
__all__ = [
|
|
176
230
|
"compose_review_board",
|
|
231
|
+
"default_board_auth_ok",
|
|
177
232
|
"LENS_CYCLE",
|
|
178
233
|
"DEFAULT_TARGET_SEATS",
|
|
179
234
|
"FLOOR_SEATS",
|
{phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/advisor_board/config.py
RENAMED
|
@@ -31,7 +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
|
+
from .composition import compose_review_board, default_board_auth_ok
|
|
35
35
|
from .presets import DEFAULT_BOARD_NAME, PRESETS
|
|
36
36
|
from .schema import (
|
|
37
37
|
AUTH_LANES,
|
|
@@ -168,6 +168,7 @@ def load_boards(
|
|
|
168
168
|
matrix: Any | None = None,
|
|
169
169
|
validate: bool = True,
|
|
170
170
|
is_available: "Callable[[str], bool] | None" = None,
|
|
171
|
+
auth_ok: "Callable[[str], bool] | None" = None,
|
|
171
172
|
) -> BoardConfig:
|
|
172
173
|
"""Load the board config, layering user boards over the built-in presets.
|
|
173
174
|
|
|
@@ -185,6 +186,16 @@ def load_boards(
|
|
|
185
186
|
availability view is single-sourced) and otherwise defaults to the advisor-
|
|
186
187
|
board PATH probe. Composition happens BEFORE the user overlay, so a
|
|
187
188
|
user-defined ``code-review`` board still wins.
|
|
189
|
+
|
|
190
|
+
``auth_ok(vendor) -> bool`` (REVIEWGOV-W1 / #151) additionally gates the
|
|
191
|
+
composed ``code-review`` board on AUTHENTICATION so a PATH-present-but-unauthed
|
|
192
|
+
vendor is dropped and backfilled. When omitted it defaults to
|
|
193
|
+
``composition.default_board_auth_ok`` — the cached, timeout-bounded, fail-closed
|
|
194
|
+
``auth_ok_for`` gate — so the LIVE convening path is genuinely auth-aware (the
|
|
195
|
+
real fix for #151). The gate only runs for vendors that pass the availability
|
|
196
|
+
(PATH) probe, so a host with no vendor CLI installed short-circuits without
|
|
197
|
+
shelling out. Inject ``auth_ok`` (e.g. ``lambda _v: True``) to isolate the
|
|
198
|
+
availability dimension in a test.
|
|
188
199
|
"""
|
|
189
200
|
boards: dict[str, Board] = dict(PRESETS)
|
|
190
201
|
default_board = DEFAULT_BOARD_NAME
|
|
@@ -193,7 +204,14 @@ def load_boards(
|
|
|
193
204
|
compose_probe = is_available
|
|
194
205
|
if compose_probe is None and matrix is not None:
|
|
195
206
|
compose_probe = getattr(getattr(matrix, "harnesses", None), "is_available", None)
|
|
196
|
-
|
|
207
|
+
# #151: the LIVE convening path is auth-aware by DEFAULT — a PATH-present but
|
|
208
|
+
# unauthenticated vendor is dropped and backfilled. Pass an explicit ``auth_ok``
|
|
209
|
+
# so the composer never falls through to its is_available-injected pass-through
|
|
210
|
+
# affordance (which exists only for the static presets / simulation tests). The
|
|
211
|
+
# gate short-circuits for vendors that fail the availability probe, so a host
|
|
212
|
+
# with no vendor CLI never shells out.
|
|
213
|
+
compose_auth = auth_ok if auth_ok is not None else default_board_auth_ok
|
|
214
|
+
composed_review = compose_review_board(is_available=compose_probe, auth_ok=compose_auth)
|
|
197
215
|
boards[composed_review.name] = composed_review
|
|
198
216
|
|
|
199
217
|
cfg_path = path if path is not None else board_config_path(env)
|
{phase_loop_runtime-0.6.1 → phase_loop_runtime-0.7.0}/src/phase_loop_runtime/capability_registry.py
RENAMED
|
@@ -122,6 +122,9 @@ DEFAULT_CAPABILITY_REGISTRY = {
|
|
|
122
122
|
subagent_posture="native",
|
|
123
123
|
live_available=True,
|
|
124
124
|
dry_run_available=True,
|
|
125
|
+
# tty-only: the claude leg drives the interactive TUI and needs a real
|
|
126
|
+
# controlling terminal, so it must never be auto-picked headlessly.
|
|
127
|
+
headless_launchable=False,
|
|
125
128
|
live_proof_gate="disposable_proof_required",
|
|
126
129
|
promotion_status="proof_gated",
|
|
127
130
|
promotion_requirements=(
|
|
@@ -241,6 +244,52 @@ DEFAULT_CAPABILITY_REGISTRY = {
|
|
|
241
244
|
output_capture_format="terminal_summary",
|
|
242
245
|
default_model_profiles={action: _ACTION_DEFAULT_PROFILES[action] for action in ("roadmap", "plan", "execute", "repair", "review")},
|
|
243
246
|
),
|
|
247
|
+
"grok": ExecutorCapabilityRecord(
|
|
248
|
+
executor="grok",
|
|
249
|
+
supported_actions=("roadmap", "plan", "execute", "repair", "review"),
|
|
250
|
+
# GROKEXEC: grok runs headless (`grok -p`) with `--output-format plain`, so
|
|
251
|
+
# like the agy/gemini leg it has NO structured-output flag on this path (the
|
|
252
|
+
# closeout is prompt-injected + text-parsed). Its permission model is
|
|
253
|
+
# all-or-nothing per-run (`--permission-mode`), so `explicit_approval_controls`
|
|
254
|
+
# is dropped, mirroring gemini. `skill_bundle_injection` is ALSO dropped: grok
|
|
255
|
+
# ships no bespoke phase-loop skill bundle, so it is driven purely by the
|
|
256
|
+
# staged context file (`context_file_instructions`) — claiming bundle injection
|
|
257
|
+
# would be dishonest (no grok-* skills exist to inject).
|
|
258
|
+
capabilities=(
|
|
259
|
+
"live_launch",
|
|
260
|
+
"dry_run",
|
|
261
|
+
"inline_instructions",
|
|
262
|
+
"context_file_instructions",
|
|
263
|
+
),
|
|
264
|
+
strengths=("xAI-family reasoning model", "context-file friendly", "authenticated local CLI"),
|
|
265
|
+
# grok write actions auto-approve via `--permission-mode bypassPermissions`;
|
|
266
|
+
# `review` is HARD read-only via a `--tools` allow-list of read/search
|
|
267
|
+
# built-ins only (headless grok auto-approves writes regardless of
|
|
268
|
+
# permission-mode/sandbox, so tool restriction is the only real lever).
|
|
269
|
+
limits=(
|
|
270
|
+
"requires local grok CLI subscription auth",
|
|
271
|
+
"grok headless auto-approves writes; write actions run bypassPermissions, review is read-only via a read-only --tools allow-list",
|
|
272
|
+
"grok --output-format plain emits no structured JSON; closeout is prompt-injected and text-parsed",
|
|
273
|
+
),
|
|
274
|
+
injection_mode="context_file",
|
|
275
|
+
permission_posture="explicit",
|
|
276
|
+
subagent_posture="limited",
|
|
277
|
+
live_available=True,
|
|
278
|
+
dry_run_available=True,
|
|
279
|
+
live_proof_gate="disposable_proof_required",
|
|
280
|
+
promotion_status="proof_gated",
|
|
281
|
+
promotion_requirements=(
|
|
282
|
+
"fake harness parity regression proof",
|
|
283
|
+
"disposable live roadmap proof",
|
|
284
|
+
"launch.json",
|
|
285
|
+
"terminal-summary.json",
|
|
286
|
+
),
|
|
287
|
+
auth_preflight_mode="metadata_only",
|
|
288
|
+
auth_preflight_probes=("grok --version", "grok --help"),
|
|
289
|
+
timeout_posture="runner_managed",
|
|
290
|
+
output_capture_format="terminal_summary",
|
|
291
|
+
default_model_profiles={action: _ACTION_DEFAULT_PROFILES[action] for action in ("roadmap", "plan", "execute", "repair", "review")},
|
|
292
|
+
),
|
|
244
293
|
"opencode": ExecutorCapabilityRecord(
|
|
245
294
|
executor="opencode",
|
|
246
295
|
supported_actions=("roadmap", "plan", "execute", "repair", "review"),
|
|
@@ -354,6 +403,8 @@ DEFAULT_CAPABILITY_REGISTRY = {
|
|
|
354
403
|
subagent_posture="none",
|
|
355
404
|
live_available=False,
|
|
356
405
|
dry_run_available=True,
|
|
406
|
+
# No headless launch surface at all (operator handoff, not a spawned CLI).
|
|
407
|
+
headless_launchable=False,
|
|
357
408
|
promotion_status="manual_only",
|
|
358
409
|
promotion_requirements=("manual import", "shared automation handoff"),
|
|
359
410
|
timeout_posture="unknown",
|
|
@@ -436,6 +487,18 @@ DEFAULT_PROVIDER_POLICY_CAPABILITIES = {
|
|
|
436
487
|
"thinkingConfig.thinkingLevel is carried by custom aliases and is not exposed as a CLI flag.",
|
|
437
488
|
),
|
|
438
489
|
),
|
|
490
|
+
"grok": ProviderPolicyCapability(
|
|
491
|
+
provider="xai",
|
|
492
|
+
executor="grok",
|
|
493
|
+
supported_work_units=_ALL_WORK_UNITS,
|
|
494
|
+
supported_efforts=_ALL_EFFORTS,
|
|
495
|
+
unsupported_policy_behavior=_FAIL_CLOSED,
|
|
496
|
+
default_effort="medium",
|
|
497
|
+
effort_map={effort: effort for effort in _ALL_EFFORTS},
|
|
498
|
+
notes=(
|
|
499
|
+
"grok's `--reasoning-effort` CLI flag accepts a superset of NORMALIZED_EFFORT_LEVELS (its own set adds `none`), so every normalized effort passes through directly with no clamp.",
|
|
500
|
+
),
|
|
501
|
+
),
|
|
439
502
|
"gemini-api": ProviderPolicyCapability(
|
|
440
503
|
provider="gemini-api-openai-compatible",
|
|
441
504
|
executor="command",
|
|
@@ -508,8 +571,74 @@ DEFAULT_PROVIDER_POLICY_CAPABILITIES = {
|
|
|
508
571
|
}
|
|
509
572
|
|
|
510
573
|
|
|
574
|
+
_BOUND_CAPABILITY_REGISTRY: dict[str, ExecutorCapabilityRecord] | None = None
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
def _provider_backing_for(executor: str):
|
|
578
|
+
"""EXECREG (IF-0-EXECREG-1): the ``provider_backing`` seam hook, wired to the
|
|
579
|
+
``AgentRuntimeProvider`` seam (``agent_runtime_provider.py``). The registry maps
|
|
580
|
+
each executor to its ``AgentRuntimeProvider`` backing; none is registered yet,
|
|
581
|
+
so every executor resolves to ``None`` — nullable, no behavior change. A future
|
|
582
|
+
backing swap (TUI -> official API, per north-star Principle 3) is a binding here,
|
|
583
|
+
not a dispatch edit. Function-local import keeps this off the module import path
|
|
584
|
+
(and out of any cycle)."""
|
|
585
|
+
from .agent_runtime_provider import AgentRuntimeProvider
|
|
586
|
+
|
|
587
|
+
# executor -> registered AgentRuntimeProvider backing (empty until B5/backings land).
|
|
588
|
+
provider_registry: dict[str, AgentRuntimeProvider] = {}
|
|
589
|
+
return provider_registry.get(executor)
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def _bind_capability_records(
|
|
593
|
+
base: dict[str, ExecutorCapabilityRecord]
|
|
594
|
+
) -> dict[str, ExecutorCapabilityRecord]:
|
|
595
|
+
"""Attach the EXECREG callables to each base record. Function-local imports
|
|
596
|
+
break the launcher<->capability_registry import cycle (launcher imports this
|
|
597
|
+
module at top level). The cache/memo for auth/availability lives in
|
|
598
|
+
``executor_availability`` (module level), never on the frozen record."""
|
|
599
|
+
from .launcher import LAUNCH_COMMAND_BUILDERS, SESSION_TRANSCRIPT_HOOKS
|
|
600
|
+
from .executor_availability import auth_ok_for, is_executor_available
|
|
601
|
+
|
|
602
|
+
bound: dict[str, ExecutorCapabilityRecord] = {}
|
|
603
|
+
for name, record in base.items():
|
|
604
|
+
bound[name] = record.bind_runtime(
|
|
605
|
+
build_command=LAUNCH_COMMAND_BUILDERS.get(name),
|
|
606
|
+
is_available=(lambda executor=name: is_executor_available(executor)),
|
|
607
|
+
auth_ok=(
|
|
608
|
+
lambda executor=name, probes=record.auth_preflight_probes: auth_ok_for(
|
|
609
|
+
executor, probes
|
|
610
|
+
)
|
|
611
|
+
),
|
|
612
|
+
provider_backing=_provider_backing_for(name),
|
|
613
|
+
# EXECREG session-preservation seam: a metadata-only transcript hook per
|
|
614
|
+
# executor (registry-driven, like build_command). Only executors that
|
|
615
|
+
# persist a discoverable session (grok) register one; the rest resolve
|
|
616
|
+
# to None — dormant until AUTOSEL/observability wires them.
|
|
617
|
+
get_session_transcript=SESSION_TRANSCRIPT_HOOKS.get(name),
|
|
618
|
+
)
|
|
619
|
+
return bound
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
_BOUND_CACHE_SOURCE: dict[str, ExecutorCapabilityRecord] | None = None
|
|
623
|
+
|
|
624
|
+
|
|
511
625
|
def capability_registry() -> dict[str, ExecutorCapabilityRecord]:
|
|
512
|
-
|
|
626
|
+
"""The executor capability registry, with EXECREG runtime callables bound onto
|
|
627
|
+
each record (``build_command`` / ``is_available`` / ``auth_ok`` /
|
|
628
|
+
``provider_backing`` / ``get_session_transcript``). Bound lazily and cached
|
|
629
|
+
keyed on the identity of ``DEFAULT_CAPABILITY_REGISTRY`` — so the binding cost is
|
|
630
|
+
paid once in the common case, but a test (or any caller) that REPLACES
|
|
631
|
+
``DEFAULT_CAPABILITY_REGISTRY`` (e.g. ``patch(..., patched_registry)``) is
|
|
632
|
+
honored: the identity changes, so the cache rebinds against the new source
|
|
633
|
+
instead of returning a stale snapshot. Metadata is identical to the source
|
|
634
|
+
(record equality is unaffected — the callables are ClassVar bindings, not
|
|
635
|
+
fields)."""
|
|
636
|
+
global _BOUND_CAPABILITY_REGISTRY, _BOUND_CACHE_SOURCE
|
|
637
|
+
source = DEFAULT_CAPABILITY_REGISTRY
|
|
638
|
+
if _BOUND_CAPABILITY_REGISTRY is None or _BOUND_CACHE_SOURCE is not source:
|
|
639
|
+
_BOUND_CAPABILITY_REGISTRY = _bind_capability_records(source)
|
|
640
|
+
_BOUND_CACHE_SOURCE = source
|
|
641
|
+
return _BOUND_CAPABILITY_REGISTRY
|
|
513
642
|
|
|
514
643
|
|
|
515
644
|
def provider_policy_capabilities() -> dict[str, ProviderPolicyCapability]:
|
|
@@ -633,7 +762,18 @@ def resolve_dispatch_decision(
|
|
|
633
762
|
operator: DispatchHints | None = None,
|
|
634
763
|
plan: DispatchHints | None = None,
|
|
635
764
|
roadmap: DispatchHints | None = None,
|
|
765
|
+
default_executor: str | None = None,
|
|
636
766
|
) -> DispatchDecision:
|
|
767
|
+
# AUTOSEL (IF-0-AUTOSEL-2): ``default_executor`` replaces the bare codex seed.
|
|
768
|
+
# It is the PRIMARY ``preferred`` only when no operator/plan/roadmap hint names
|
|
769
|
+
# one; when a preferred hint IS set the seed is demoted to a TRAILING fallback
|
|
770
|
+
# candidate (last in ``candidate_order``). ``None`` reproduces legacy behavior
|
|
771
|
+
# exactly (seed = ``default_executor_for_action(action)`` == codex in both roles),
|
|
772
|
+
# so callers that set ``preferred_executors`` explicitly (repair pivot, work-unit
|
|
773
|
+
# rotation, delegation broker) are unaffected — they pass ``None`` and the trailing
|
|
774
|
+
# candidate stays legacy codex. The runner only passes a non-None seed when there
|
|
775
|
+
# is NO preferred hint, so an AUTOSEL pick never displaces an operator's choice.
|
|
776
|
+
seed_default = default_executor or default_executor_for_action(action)
|
|
637
777
|
registry = registry or capability_registry()
|
|
638
778
|
if action == "maintain-skills":
|
|
639
779
|
return DispatchDecision(
|
|
@@ -648,9 +788,9 @@ def resolve_dispatch_decision(
|
|
|
648
788
|
allowed = merged.allowed_executors or tuple(
|
|
649
789
|
executor for executor, record in registry.items() if action in record.supported_actions
|
|
650
790
|
)
|
|
651
|
-
preferred = merged.preferred_executors or (
|
|
791
|
+
preferred = merged.preferred_executors or (seed_default,)
|
|
652
792
|
fallback = tuple(executor for executor in merged.fallback_executors if executor not in preferred)
|
|
653
|
-
candidate_order = _dedupe((*preferred, *fallback, *allowed,
|
|
793
|
+
candidate_order = _dedupe((*preferred, *fallback, *allowed, seed_default))
|
|
654
794
|
considered: list[str] = []
|
|
655
795
|
degraded = active_degraded_executors(repo) if repo is not None and not dry_run else set()
|
|
656
796
|
degraded_viable: list[str] = []
|
|
@@ -665,6 +805,7 @@ def resolve_dispatch_decision(
|
|
|
665
805
|
tuple(considered),
|
|
666
806
|
"disabled_executor",
|
|
667
807
|
f"Dispatch policy rejected `{executor}` for `{action}` because it is disabled by hints.",
|
|
808
|
+
seed_default=seed_default,
|
|
668
809
|
)
|
|
669
810
|
continue
|
|
670
811
|
if executor not in allowed:
|
|
@@ -675,6 +816,7 @@ def resolve_dispatch_decision(
|
|
|
675
816
|
tuple(considered),
|
|
676
817
|
"executor_not_allowed",
|
|
677
818
|
f"Dispatch policy rejected `{executor}` for `{action}` because it is outside the allowed executor set.",
|
|
819
|
+
seed_default=seed_default,
|
|
678
820
|
)
|
|
679
821
|
continue
|
|
680
822
|
record = registry.get(executor)
|
|
@@ -686,6 +828,7 @@ def resolve_dispatch_decision(
|
|
|
686
828
|
tuple(considered),
|
|
687
829
|
"unsupported_action",
|
|
688
830
|
f"Dispatch policy rejected `{executor}` for `{action}` because the registry does not support that action.",
|
|
831
|
+
seed_default=seed_default,
|
|
689
832
|
)
|
|
690
833
|
continue
|
|
691
834
|
missing = tuple(capability for capability in merged.required_capabilities if capability not in record.capabilities)
|
|
@@ -697,6 +840,7 @@ def resolve_dispatch_decision(
|
|
|
697
840
|
tuple(considered),
|
|
698
841
|
"missing_required_capabilities",
|
|
699
842
|
f"Dispatch policy rejected `{executor}` for `{action}` because it lacks required capabilities: {', '.join(missing)}.",
|
|
843
|
+
seed_default=seed_default,
|
|
700
844
|
)
|
|
701
845
|
continue
|
|
702
846
|
if dry_run:
|
|
@@ -710,6 +854,7 @@ def resolve_dispatch_decision(
|
|
|
710
854
|
tuple(considered),
|
|
711
855
|
"live_launch_unavailable",
|
|
712
856
|
f"Dispatch policy selected `{executor}` for `{action}`, but that executor is currently dry-run-only.",
|
|
857
|
+
seed_default=seed_default,
|
|
713
858
|
)
|
|
714
859
|
if executor in preferred and fallback:
|
|
715
860
|
continue
|
|
@@ -738,6 +883,7 @@ def resolve_dispatch_decision(
|
|
|
738
883
|
tuple(considered or candidate_order),
|
|
739
884
|
"all_candidates_session_degraded",
|
|
740
885
|
f"Dispatch policy could not resolve a live executor for `{action}` because all otherwise viable candidates are session-degraded.",
|
|
886
|
+
seed_default=seed_default,
|
|
741
887
|
)
|
|
742
888
|
|
|
743
889
|
return _blocked_decision(
|
|
@@ -746,6 +892,7 @@ def resolve_dispatch_decision(
|
|
|
746
892
|
tuple(considered or candidate_order),
|
|
747
893
|
"no_allowed_executor",
|
|
748
894
|
f"Dispatch policy could not resolve an executor for `{action}` with the current hints and registry.",
|
|
895
|
+
seed_default=seed_default,
|
|
749
896
|
)
|
|
750
897
|
|
|
751
898
|
|
|
@@ -818,12 +965,17 @@ def _blocked_decision(
|
|
|
818
965
|
considered: tuple[str, ...],
|
|
819
966
|
blocked_reason: str,
|
|
820
967
|
blocked_summary: str,
|
|
968
|
+
*,
|
|
969
|
+
seed_default: str | None = None,
|
|
821
970
|
) -> DispatchDecision:
|
|
971
|
+
# AUTOSEL: the reported preferred set must match the seed actually resolved
|
|
972
|
+
# (grok CR #1) — an AUTOSEL seed of e.g. grok must not be reported as codex on
|
|
973
|
+
# a blocked decision. ``None`` reproduces the legacy codex default.
|
|
822
974
|
return DispatchDecision(
|
|
823
975
|
action=action,
|
|
824
976
|
selected_executor=None,
|
|
825
977
|
source=merged.source,
|
|
826
|
-
preferred_executors=merged.preferred_executors or (default_executor_for_action(action),),
|
|
978
|
+
preferred_executors=merged.preferred_executors or (seed_default or default_executor_for_action(action),),
|
|
827
979
|
allowed_executors=merged.allowed_executors,
|
|
828
980
|
fallback_executors=merged.fallback_executors,
|
|
829
981
|
disabled_executors=merged.disabled_executors,
|