phase-loop-runtime 0.7.1__tar.gz → 0.7.3__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.7.1 → phase_loop_runtime-0.7.3}/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/cli.py +69 -0
- phase_loop_runtime-0.7.3/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +34 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/discovery.py +11 -5
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/events.py +19 -6
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/panel_invoker.py +175 -32
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/ratification.py +8 -6
- phase_loop_runtime-0.7.3/src/phase_loop_runtime/roadmap_authority.py +204 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runner.py +7 -8
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +7 -2
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +7 -2
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +8 -7
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +8 -7
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/state.py +2 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/task_message_broker_client.py +18 -7
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/task_message_resolver.py +69 -14
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/SOURCES.txt +3 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_backing_homebrew.py +2 -2
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_branchgov_preflight.py +37 -12
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_leg_liveness_monitor.py +1 -1
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_invoker_spawn.py +53 -20
- phase_loop_runtime-0.7.3/tests/test_panel_native_fill_183.py +327 -0
- phase_loop_runtime-0.7.3/tests/test_roadmap_authority.py +490 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_task_message_broker_cli.py +112 -12
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_task_message_resolver.py +126 -1
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -29
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/tests/test_worktree_index.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.3"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -18,6 +18,7 @@ from .consiliency_scaffold import ScaffoldError, scaffold
|
|
|
18
18
|
from .docs_freshness import scan_docs_freshness
|
|
19
19
|
from .discovery import AmbiguousRoadmapError, find_plan_artifact, phase_source_bundle_diagnostic, resolve_repo, resolve_suite_command, select_roadmap
|
|
20
20
|
from .events import append_event, read_events
|
|
21
|
+
from .roadmap_authority import RoadmapAuthorityError, assert_roadmap_authorized
|
|
21
22
|
from .git_topology import collect_git_topology
|
|
22
23
|
from .handoff import handoff_metadata, write_tui_handoff
|
|
23
24
|
from .install_status import build_install_status
|
|
@@ -859,6 +860,9 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
859
860
|
file=sys.stderr,
|
|
860
861
|
)
|
|
861
862
|
return 2
|
|
863
|
+
except RoadmapAuthorityError as exc:
|
|
864
|
+
print(f"phase-loop {command}: roadmap authority refusal — {exc}", file=sys.stderr)
|
|
865
|
+
return 2
|
|
862
866
|
|
|
863
867
|
|
|
864
868
|
def _resolve_run_closeout_mode(args: argparse.Namespace, command: str) -> str:
|
|
@@ -1046,6 +1050,7 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1046
1050
|
_warn_roadmap_validation(select_roadmap(repo, args.roadmap))
|
|
1047
1051
|
return _evidence_audit_command(repo=repo, args=args, as_json=as_json)
|
|
1048
1052
|
if command in {"run", "resume", "dry-run"} and bool(getattr(args, "reset_capability", False)):
|
|
1053
|
+
assert_roadmap_authorized(repo, args.roadmap)
|
|
1049
1054
|
clear_degradation(repo)
|
|
1050
1055
|
|
|
1051
1056
|
if command == "execute":
|
|
@@ -1137,6 +1142,7 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1137
1142
|
)
|
|
1138
1143
|
return 0
|
|
1139
1144
|
if command == "migrate-handoffs":
|
|
1145
|
+
assert_roadmap_authorized(repo, args.roadmap)
|
|
1140
1146
|
records = migrate_handoffs(repo, apply=bool(getattr(args, "apply", False)))
|
|
1141
1147
|
if as_json:
|
|
1142
1148
|
print(records_to_json(records))
|
|
@@ -1145,8 +1151,10 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1145
1151
|
print(f"{record.status}\t{record.action}\t{record.skill_name}\t{record.source}\t{record.target}")
|
|
1146
1152
|
return 1 if any(record.action == "blocked" for record in records) else 0
|
|
1147
1153
|
if command == "migrate-events":
|
|
1154
|
+
assert_roadmap_authorized(repo, args.roadmap)
|
|
1148
1155
|
return _migrate_events_command(repo=repo, dry_run=bool(args.dry_run), backup_suffix=args.backup_suffix)
|
|
1149
1156
|
if command == "archive-state":
|
|
1157
|
+
assert_roadmap_authorized(repo, args.roadmap)
|
|
1150
1158
|
print(render_archive_result(
|
|
1151
1159
|
archive_state(repo, reason=getattr(args, "reason", None), dry_run=bool(getattr(args, "dry_run", False))),
|
|
1152
1160
|
as_json=as_json,
|
|
@@ -1360,6 +1368,19 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1360
1368
|
return _run_returncode(snapshot, results)
|
|
1361
1369
|
|
|
1362
1370
|
|
|
1371
|
+
def _native_agent_request_json(leg: object) -> dict | None:
|
|
1372
|
+
"""Serialize a leg's ``needs_native_agent`` request (ABDNATIVE / #183) to a
|
|
1373
|
+
JSON-safe dict, or ``None`` when the seat is not deferred to a native Agent.
|
|
1374
|
+
|
|
1375
|
+
Structural (``getattr`` + ``to_dict``) so it does not force a ``panel_invoker``
|
|
1376
|
+
import onto the bare CLI path."""
|
|
1377
|
+
request = getattr(leg, "needs_native_agent", None)
|
|
1378
|
+
if request is None:
|
|
1379
|
+
return None
|
|
1380
|
+
to_dict = getattr(request, "to_dict", None)
|
|
1381
|
+
return to_dict() if callable(to_dict) else None
|
|
1382
|
+
|
|
1383
|
+
|
|
1363
1384
|
def _advisor_board_command(*, args: argparse.Namespace) -> int:
|
|
1364
1385
|
"""LEGACY (CLEANSHIP P7): run the 4-vendor advisor board as the RUNNABLE
|
|
1365
1386
|
agent-facing default. Composes availability-aware seats via
|
|
@@ -1419,10 +1440,43 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
|
|
|
1419
1440
|
# expected non-OK), the board is below its independence floor → exit nonzero.
|
|
1420
1441
|
usable = usable_count >= FLOOR_SEATS
|
|
1421
1442
|
exit_code = 0 if usable else 1
|
|
1443
|
+
# #183 / ABDNATIVE: LOUD requested-vs-delivered shortfall. A floor-satisfying
|
|
1444
|
+
# board can still be SHORT an explicitly-requested seat (the claude/Fable seat
|
|
1445
|
+
# deferred to a native Agent), and a bare `usable:true` masks that. Report
|
|
1446
|
+
# requested (every composed seat), delivered (usable OK+text), and — the
|
|
1447
|
+
# affordance — the seats a native harness can FILL itself (each carries the
|
|
1448
|
+
# typed `needs_native_agent` request). Exit stays floor-based (unchanged): the
|
|
1449
|
+
# shortfall is a REPORTING signal, not a gate flip.
|
|
1450
|
+
# CR F3: derive unfilled seats PER-LEG (`not leg.usable`), never by seat_key
|
|
1451
|
+
# membership. Seats are collision-aware LABELS (schema permits byte-identical
|
|
1452
|
+
# seats with the SAME key), so a key-set difference would let a duplicate key —
|
|
1453
|
+
# one seat OK, its twin failed — hide the failed twin: requested=2/delivered=1
|
|
1454
|
+
# but zero unfilled reported = a silent drop. Per-leg is positional and exact.
|
|
1455
|
+
requested_seats = len(board.seats)
|
|
1456
|
+
unfilled_legs = [leg for leg in result.legs if not leg.usable]
|
|
1457
|
+
fillable_legs = [leg for leg in unfilled_legs if leg.needs_native_agent is not None]
|
|
1458
|
+
shortfall = {
|
|
1459
|
+
"requested_seats": requested_seats,
|
|
1460
|
+
"delivered_seats": usable_count,
|
|
1461
|
+
"unfilled_seats": [
|
|
1462
|
+
{
|
|
1463
|
+
"seat_key": leg.seat_key,
|
|
1464
|
+
"leg": leg.leg,
|
|
1465
|
+
"status": leg.status,
|
|
1466
|
+
"needs_native_agent": _native_agent_request_json(leg),
|
|
1467
|
+
}
|
|
1468
|
+
for leg in unfilled_legs
|
|
1469
|
+
],
|
|
1470
|
+
"natively_fillable_seats": len(fillable_legs),
|
|
1471
|
+
}
|
|
1422
1472
|
if bool(getattr(args, "json", False)):
|
|
1423
1473
|
payload = {
|
|
1424
1474
|
"board": board.name,
|
|
1425
1475
|
"usable": usable,
|
|
1476
|
+
# Requested-vs-delivered so a Bash-invoking harness sees a dropped seat.
|
|
1477
|
+
"requested_seats": requested_seats,
|
|
1478
|
+
"delivered_seats": usable_count,
|
|
1479
|
+
"shortfall": shortfall,
|
|
1426
1480
|
"independence": {
|
|
1427
1481
|
"level": independence.level,
|
|
1428
1482
|
"distinct_vendors": independence.distinct_vendors,
|
|
@@ -1438,6 +1492,9 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
|
|
|
1438
1492
|
"status": leg.status,
|
|
1439
1493
|
"detail": leg.detail,
|
|
1440
1494
|
"text": leg.text,
|
|
1495
|
+
# ABDNATIVE (#183): a deferred claude/Fable seat carries the
|
|
1496
|
+
# typed native-fill request the harness must run; None otherwise.
|
|
1497
|
+
"needs_native_agent": _native_agent_request_json(leg),
|
|
1441
1498
|
}
|
|
1442
1499
|
for leg in result.legs
|
|
1443
1500
|
],
|
|
@@ -1460,6 +1517,18 @@ def _advisor_board_command(*, args: argparse.Namespace) -> int:
|
|
|
1460
1517
|
# The statuses/verdicts are ADVISORY evidence — the operator reconciles them; a
|
|
1461
1518
|
# non-OK leg (DEGRADED/UNAVAILABLE/…) is a gap to fill, not a passed review.
|
|
1462
1519
|
print("advisor-board: verdicts are advisory — reconcile the legs; check each leg status.")
|
|
1520
|
+
# #183: surface the requested-vs-delivered shortfall LOUDLY (stderr) so a
|
|
1521
|
+
# floor-satisfying board is never mistaken for the full requested board, and
|
|
1522
|
+
# name the seats a native harness can fill itself.
|
|
1523
|
+
if unfilled_legs:
|
|
1524
|
+
print(
|
|
1525
|
+
f"advisor-board: delivered {usable_count}/{requested_seats} requested seats — "
|
|
1526
|
+
f"{len(unfilled_legs)} unfilled ({len(fillable_legs)} natively fillable):",
|
|
1527
|
+
file=sys.stderr,
|
|
1528
|
+
)
|
|
1529
|
+
for leg in unfilled_legs:
|
|
1530
|
+
fill = " → run a native Fable Agent to fill this seat" if leg.needs_native_agent else ""
|
|
1531
|
+
print(f"advisor-board: [{leg.status}] {leg.seat_key}{fill}", file=sys.stderr)
|
|
1463
1532
|
if not usable:
|
|
1464
1533
|
print(
|
|
1465
1534
|
f"advisor-board: only {usable_count} usable review leg(s) < floor {FLOOR_SEATS} "
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=Phase-loop task-message source broker
|
|
3
|
+
After=network-online.target
|
|
4
|
+
Wants=network-online.target
|
|
5
|
+
|
|
6
|
+
[Service]
|
|
7
|
+
Type=simple
|
|
8
|
+
User=viperjuice
|
|
9
|
+
Group=viperjuice
|
|
10
|
+
EnvironmentFile=/etc/phase-loop/task-message-broker.env
|
|
11
|
+
ExecStart=/opt/phase-loop-task-message-broker/bin/phase-loop task-message-broker-serve --host 127.0.0.1 --port 18765 --control-socket /home/viperjuice/.codex/app-server-control/app-server-control.sock --authority codex-app-server://claw.taile09692.ts.net --token-sha256 ${TASK_MESSAGE_TOKEN_SHA256} --agent-harness-sha ${AGENT_HARNESS_SHA}
|
|
12
|
+
Restart=on-failure
|
|
13
|
+
RestartSec=2
|
|
14
|
+
UMask=0077
|
|
15
|
+
NoNewPrivileges=yes
|
|
16
|
+
PrivateDevices=yes
|
|
17
|
+
PrivateTmp=yes
|
|
18
|
+
ProtectHome=tmpfs
|
|
19
|
+
BindReadOnlyPaths=/home/viperjuice/.codex/app-server-control/app-server-control.sock
|
|
20
|
+
ProtectSystem=strict
|
|
21
|
+
InaccessiblePaths=/proc
|
|
22
|
+
ProtectControlGroups=yes
|
|
23
|
+
ProtectKernelModules=yes
|
|
24
|
+
ProtectKernelTunables=yes
|
|
25
|
+
LockPersonality=yes
|
|
26
|
+
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
|
27
|
+
RestrictRealtime=yes
|
|
28
|
+
RestrictSUIDSGID=yes
|
|
29
|
+
SystemCallArchitectures=native
|
|
30
|
+
IPAddressDeny=any
|
|
31
|
+
IPAddressAllow=localhost
|
|
32
|
+
|
|
33
|
+
[Install]
|
|
34
|
+
WantedBy=multi-user.target
|
|
@@ -39,6 +39,7 @@ from .models import (
|
|
|
39
39
|
)
|
|
40
40
|
from .pipeline_adapter.flag import reconcile_git_reality_enabled
|
|
41
41
|
from .provenance import phase_sha256, roadmap_sha256
|
|
42
|
+
from .roadmap_authority import active_authorized_roadmap, assert_roadmap_authorized
|
|
42
43
|
from .runtime_paths import phase_loop_state_read_file
|
|
43
44
|
|
|
44
45
|
|
|
@@ -413,28 +414,33 @@ def select_roadmap(repo: Path, explicit: str | Path | None = None) -> Path:
|
|
|
413
414
|
path = Path(explicit).expanduser()
|
|
414
415
|
if not path.is_absolute():
|
|
415
416
|
path = repo / path
|
|
417
|
+
authorized = assert_roadmap_authorized(repo, path)
|
|
416
418
|
if not path.exists():
|
|
417
419
|
raise FileNotFoundError(f"roadmap not found: {path}")
|
|
418
|
-
return
|
|
420
|
+
return authorized
|
|
421
|
+
|
|
422
|
+
authority_roadmap = active_authorized_roadmap(repo)
|
|
423
|
+
if authority_roadmap is not None:
|
|
424
|
+
return authority_roadmap
|
|
419
425
|
|
|
420
426
|
state_roadmap = active_state_roadmap(repo)
|
|
421
427
|
if state_roadmap is not None:
|
|
422
|
-
return state_roadmap
|
|
428
|
+
return assert_roadmap_authorized(repo, state_roadmap)
|
|
423
429
|
|
|
424
430
|
manifest_roadmap = manifest_backed_roadmap(repo)
|
|
425
431
|
if manifest_roadmap is not None:
|
|
426
|
-
return manifest_roadmap
|
|
432
|
+
return assert_roadmap_authorized(repo, manifest_roadmap)
|
|
427
433
|
|
|
428
434
|
handoff = latest_handoff_roadmap(repo_identity(repo), "codex-phase-roadmap-builder")
|
|
429
435
|
if handoff is not None:
|
|
430
|
-
return handoff
|
|
436
|
+
return assert_roadmap_authorized(repo, handoff)
|
|
431
437
|
|
|
432
438
|
candidates = sorted((repo / "specs").glob("phase-plans-v*.md"))
|
|
433
439
|
if not candidates:
|
|
434
440
|
raise FileNotFoundError("no specs/phase-plans-v*.md roadmap found")
|
|
435
441
|
if len(candidates) != 1:
|
|
436
442
|
raise AmbiguousRoadmapError([c.resolve() for c in candidates])
|
|
437
|
-
return candidates[0]
|
|
443
|
+
return assert_roadmap_authorized(repo, candidates[0])
|
|
438
444
|
|
|
439
445
|
|
|
440
446
|
def active_state_roadmap(repo: Path) -> Path | None:
|
|
@@ -8,6 +8,7 @@ from pathlib import Path
|
|
|
8
8
|
from .closeout import phase_loop_closeout_diagnostic
|
|
9
9
|
from .git_topology import attach_git_topology, collect_git_topology
|
|
10
10
|
from .models import LoopEvent, WorkUnitEventMetadata
|
|
11
|
+
from .roadmap_authority import assert_roadmap_authorized
|
|
11
12
|
from .runtime_paths import ensure_phase_loop_excluded, phase_loop_event_file, phase_loop_event_read_files
|
|
12
13
|
|
|
13
14
|
|
|
@@ -20,16 +21,17 @@ def event_read_paths(repo: Path) -> tuple[Path, ...]:
|
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
def append_event(repo: Path, event: LoopEvent) -> None:
|
|
23
|
-
ensure_phase_loop_excluded(repo)
|
|
24
24
|
event = _event_with_closeout_metadata(event)
|
|
25
25
|
event = attach_git_topology(repo, event)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
append_payload(
|
|
27
|
+
repo,
|
|
28
|
+
event.to_json(),
|
|
29
|
+
roadmap=event.roadmap,
|
|
30
|
+
)
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
def append_work_unit_event(repo: Path, event: WorkUnitEventMetadata, *, roadmap: Path | None = None) -> None:
|
|
32
|
-
|
|
34
|
+
authorized_roadmap = assert_roadmap_authorized(repo, roadmap)
|
|
33
35
|
payload = event.to_json()
|
|
34
36
|
closeout = _extract_work_unit_closeout(payload)
|
|
35
37
|
if closeout is not None:
|
|
@@ -37,7 +39,7 @@ def append_work_unit_event(repo: Path, event: WorkUnitEventMetadata, *, roadmap:
|
|
|
37
39
|
payload.update(
|
|
38
40
|
{
|
|
39
41
|
"repo": str(repo),
|
|
40
|
-
"roadmap": str(roadmap or ""),
|
|
42
|
+
"roadmap": str(roadmap or authorized_roadmap or ""),
|
|
41
43
|
"phase": event.identity.phase,
|
|
42
44
|
"action": "work_unit",
|
|
43
45
|
"status": event.status,
|
|
@@ -46,6 +48,17 @@ def append_work_unit_event(repo: Path, event: WorkUnitEventMetadata, *, roadmap:
|
|
|
46
48
|
"git_topology": collect_git_topology(repo),
|
|
47
49
|
}
|
|
48
50
|
)
|
|
51
|
+
append_payload(repo, payload, roadmap=roadmap or authorized_roadmap)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def append_payload(
|
|
55
|
+
repo: Path,
|
|
56
|
+
payload: dict,
|
|
57
|
+
*,
|
|
58
|
+
roadmap: str | Path | None,
|
|
59
|
+
) -> None:
|
|
60
|
+
assert_roadmap_authorized(repo, roadmap)
|
|
61
|
+
ensure_phase_loop_excluded(repo)
|
|
49
62
|
path = event_path(repo)
|
|
50
63
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
51
64
|
_append_jsonl(path, payload)
|
{phase_loop_runtime-0.7.1 → phase_loop_runtime-0.7.3}/src/phase_loop_runtime/panel_invoker.py
RENAMED
|
@@ -196,6 +196,15 @@ class PanelLegResult:
|
|
|
196
196
|
# default 3-leg board stay byte-for-byte identical (one seat per vendor ==
|
|
197
197
|
# seat_key == leg). ABDHOME wires the per-seat spawn; this freezes the identity.
|
|
198
198
|
seat_key: str | None = None
|
|
199
|
+
# ABDNATIVE (#183 companion, Bug 2): the typed native-fill request is exposed by
|
|
200
|
+
# the ``needs_native_agent`` PROPERTY below and stored in the non-field
|
|
201
|
+
# ``_needs_native_agent`` attribute (attached via ``attach_native_agent_request``
|
|
202
|
+
# / ``object.__setattr__``). It is DELIBERATELY NOT a dataclass field (CR F2):
|
|
203
|
+
# ``dataclasses.asdict`` and any field-walking serializer (golden,
|
|
204
|
+
# AdvisorBoardEvent) enumerate ``fields()`` only, so the affordance is
|
|
205
|
+
# structurally UNABLE to leak into the (status, text) golden surface. The
|
|
206
|
+
# property reads a default of ``None`` so a plain leg (none attached) is never
|
|
207
|
+
# an AttributeError.
|
|
199
208
|
|
|
200
209
|
def __post_init__(self) -> None:
|
|
201
210
|
object.__setattr__(self, "status", normalize_leg_status(self.status))
|
|
@@ -206,6 +215,21 @@ class PanelLegResult:
|
|
|
206
215
|
def usable(self) -> bool:
|
|
207
216
|
return self.status == "OK" and bool(self.text.strip())
|
|
208
217
|
|
|
218
|
+
@property
|
|
219
|
+
def needs_native_agent(self) -> "NativeAgentLegRequest | None":
|
|
220
|
+
return getattr(self, "_needs_native_agent", None)
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def attach_native_agent_request(
|
|
224
|
+
leg: PanelLegResult, request: "NativeAgentLegRequest"
|
|
225
|
+
) -> PanelLegResult:
|
|
226
|
+
"""Attach a native-fill request to a (frozen) ``PanelLegResult`` post-creation
|
|
227
|
+
(CR F2): stored in the NON-field ``_needs_native_agent`` so ``asdict``/golden
|
|
228
|
+
serializers never see it; read back via the ``needs_native_agent`` property.
|
|
229
|
+
Returns ``leg`` for call-site convenience."""
|
|
230
|
+
object.__setattr__(leg, "_needs_native_agent", request)
|
|
231
|
+
return leg
|
|
232
|
+
|
|
209
233
|
|
|
210
234
|
@dataclass(frozen=True)
|
|
211
235
|
class PanelResult:
|
|
@@ -215,6 +239,16 @@ class PanelResult:
|
|
|
215
239
|
def usable_legs(self) -> tuple[PanelLegResult, ...]:
|
|
216
240
|
return tuple(leg for leg in self.legs if leg.usable)
|
|
217
241
|
|
|
242
|
+
@property
|
|
243
|
+
def native_fill_requests(self) -> tuple["NativeAgentLegRequest", ...]:
|
|
244
|
+
"""ABDNATIVE (#183 companion): the deferred seats a driving host can fill
|
|
245
|
+
natively (each carries seat_key/model/effort/lens + the review contract).
|
|
246
|
+
A non-empty result means the board is SHORT those seats until they are
|
|
247
|
+
filled — the loud requested-vs-delivered signal the caller must not miss."""
|
|
248
|
+
return tuple(
|
|
249
|
+
leg.needs_native_agent for leg in self.legs if leg.needs_native_agent is not None
|
|
250
|
+
)
|
|
251
|
+
|
|
218
252
|
|
|
219
253
|
def available_panel_legs(probe: Callable[[str], bool] | None = None) -> tuple[str, ...]:
|
|
220
254
|
"""Metadata-only liveness preflight: which panel legs have their CLI present.
|
|
@@ -1400,12 +1434,18 @@ def _normalize_claude_agent_state(value: object) -> str:
|
|
|
1400
1434
|
# under_claude_code — we are INSIDE a Claude Code session; the driving
|
|
1401
1435
|
# session supplies the leg as its own NATIVE Agent
|
|
1402
1436
|
# (Task tool). Spawning a second Claude TUI here is
|
|
1403
|
-
# the wrong route.
|
|
1404
|
-
#
|
|
1405
|
-
#
|
|
1406
|
-
#
|
|
1407
|
-
#
|
|
1408
|
-
#
|
|
1437
|
+
# the wrong route. This is the RUNTIME-EMITTED defer
|
|
1438
|
+
# code (the only case `_exec_claude_tui_leg` defers).
|
|
1439
|
+
# native_adapter_required — an AFFORDANCE/fallback for a host that fulfills the
|
|
1440
|
+
# leg via its OWN sub-agent adapter instead of the
|
|
1441
|
+
# runtime's self-PTY TUI (see native_agent_leg_request()).
|
|
1442
|
+
# #183: the runtime NO LONGER defers a headless / no-tty
|
|
1443
|
+
# NON-Claude host by default — `_run_claude_tui_session`
|
|
1444
|
+
# self-allocates its own PTY, so the leg RUNS there. This
|
|
1445
|
+
# code is produced only by a standalone
|
|
1446
|
+
# `native_agent_leg_request(env=<non-Claude>)` call, for
|
|
1447
|
+
# a host that cannot drive the TUI or prefers its own
|
|
1448
|
+
# agent (e.g. the Codex Desktop tool shell).
|
|
1409
1449
|
_CLAUDE_LEG_DEFERRED_UNDER_CLAUDE_CODE = "under_claude_code"
|
|
1410
1450
|
_CLAUDE_LEG_DEFERRED_NATIVE_ADAPTER = "native_adapter_required"
|
|
1411
1451
|
|
|
@@ -1416,10 +1456,10 @@ _CLAUDE_LEG_DEFERRED_REASONS: dict[str, str] = {
|
|
|
1416
1456
|
"runtime must not spawn a second Claude TUI here."
|
|
1417
1457
|
),
|
|
1418
1458
|
_CLAUDE_LEG_DEFERRED_NATIVE_ADAPTER: (
|
|
1419
|
-
"claude leg
|
|
1420
|
-
"
|
|
1421
|
-
"
|
|
1422
|
-
"native_agent_leg_request()."
|
|
1459
|
+
"claude leg available as an AFFORDANCE for this headless / no-tty host: "
|
|
1460
|
+
"#183 the runtime runs the self-PTY TUI here by default, but a host that "
|
|
1461
|
+
"cannot drive a TUI (or prefers its own agent) may fulfill the leg via its "
|
|
1462
|
+
"native sub-agent adapter — see native_agent_leg_request()."
|
|
1423
1463
|
),
|
|
1424
1464
|
}
|
|
1425
1465
|
|
|
@@ -1465,6 +1505,17 @@ class NativeAgentLegRequest:
|
|
|
1465
1505
|
caller's inputs (:func:`native_agent_leg_request`) and is NEVER threaded
|
|
1466
1506
|
through the governed ``(status, text)`` spawn boundary — keeping the panel /
|
|
1467
1507
|
advisor-board golden byte-identical (#92 A4).
|
|
1508
|
+
|
|
1509
|
+
ABDNATIVE (#183 companion, Bug 2): when the board attaches this to a deferred
|
|
1510
|
+
leg in the ``PanelResult`` (``PanelLegResult.needs_native_agent``), it carries
|
|
1511
|
+
the SEAT cognition the driver must reproduce — ``seat_key`` / ``effort`` /
|
|
1512
|
+
``lens`` (the model is already here) — plus the ``artifact_ref`` the board was
|
|
1513
|
+
given and the effective ``brief_ref`` (so the native fill reviews under the SAME
|
|
1514
|
+
acceptance brief as the runtime legs — the ``instructions`` field already carries
|
|
1515
|
+
the resolved brief text). These are optional (``None``) so the pure standalone
|
|
1516
|
+
builder and its existing callers are byte-unchanged; ``to_dict`` OMITS every
|
|
1517
|
+
``None`` optional key, so a bare #125 builder call serializes to exactly the
|
|
1518
|
+
original 8-key shape (byte-compat).
|
|
1468
1519
|
"""
|
|
1469
1520
|
|
|
1470
1521
|
leg: str
|
|
@@ -1475,10 +1526,25 @@ class NativeAgentLegRequest:
|
|
|
1475
1526
|
instructions: str
|
|
1476
1527
|
verdict_required: bool
|
|
1477
1528
|
verdict_contract: str
|
|
1529
|
+
# ABDNATIVE seat cognition (set when surfaced on a board result; None for the
|
|
1530
|
+
# pure standalone builder call). ``seat_key``/``effort``/``lens`` tell the
|
|
1531
|
+
# driver exactly which cognition to reproduce; ``artifact_ref`` names the
|
|
1532
|
+
# material the board reviewed; ``brief_ref`` names the effective review brief
|
|
1533
|
+
# (the driver usually already holds artifact + brief).
|
|
1534
|
+
seat_key: str | None = None
|
|
1535
|
+
effort: str | None = None
|
|
1536
|
+
lens: str | None = None
|
|
1537
|
+
artifact_ref: str | None = None
|
|
1538
|
+
brief_ref: str | None = None
|
|
1478
1539
|
|
|
1479
1540
|
def to_dict(self) -> dict[str, object]:
|
|
1480
|
-
"""JSON-serializable form for a host driver to consume across a tool boundary.
|
|
1481
|
-
|
|
1541
|
+
"""JSON-serializable form for a host driver to consume across a tool boundary.
|
|
1542
|
+
|
|
1543
|
+
Byte-compat (CR F1): the eight base keys are always present; each ADDITIVE
|
|
1544
|
+
optional key is emitted ONLY when set, so a bare ``native_agent_leg_request``
|
|
1545
|
+
call (all optionals ``None``) serializes to the exact original 8-key shape
|
|
1546
|
+
that #125's callers depend on."""
|
|
1547
|
+
out: dict[str, object] = {
|
|
1482
1548
|
"leg": self.leg,
|
|
1483
1549
|
"model": self.model,
|
|
1484
1550
|
"mode": self.mode,
|
|
@@ -1488,6 +1554,11 @@ class NativeAgentLegRequest:
|
|
|
1488
1554
|
"verdict_required": self.verdict_required,
|
|
1489
1555
|
"verdict_contract": self.verdict_contract,
|
|
1490
1556
|
}
|
|
1557
|
+
for key in ("seat_key", "effort", "lens", "artifact_ref", "brief_ref"):
|
|
1558
|
+
value = getattr(self, key)
|
|
1559
|
+
if value is not None:
|
|
1560
|
+
out[key] = value
|
|
1561
|
+
return out
|
|
1491
1562
|
|
|
1492
1563
|
|
|
1493
1564
|
# The terminal-verdict contract a native-fulfilled review leg must satisfy so its
|
|
@@ -1510,6 +1581,12 @@ def native_agent_leg_request(
|
|
|
1510
1581
|
mode: str = "review",
|
|
1511
1582
|
env: Mapping[str, str] | None = None,
|
|
1512
1583
|
model: str | None = None,
|
|
1584
|
+
seat_key: str | None = None,
|
|
1585
|
+
effort: str | None = None,
|
|
1586
|
+
lens: str | None = None,
|
|
1587
|
+
artifact_ref: str | None = None,
|
|
1588
|
+
brief_ref: str | None = None,
|
|
1589
|
+
instructions: str | None = None,
|
|
1513
1590
|
) -> NativeAgentLegRequest:
|
|
1514
1591
|
"""Build the structured request a host driver fulfills for a deferred leg (#125).
|
|
1515
1592
|
|
|
@@ -1518,6 +1595,15 @@ def native_agent_leg_request(
|
|
|
1518
1595
|
``UNAVAILABLE`` for this leg). ``mode`` selects the review vs advisory brief +
|
|
1519
1596
|
verdict contract; ``env`` selects the deferred-reason code (under Claude Code
|
|
1520
1597
|
vs native-adapter-required); ``model`` defaults to the seat's canonical model.
|
|
1598
|
+
|
|
1599
|
+
ABDNATIVE (#183 companion): the board passes the deferred seat's cognition
|
|
1600
|
+
(``seat_key`` / ``effort`` / ``lens``), the reviewed ``artifact_ref``, and the
|
|
1601
|
+
effective ``brief_ref`` so the surfaced request fully specifies the native fill.
|
|
1602
|
+
``instructions`` (CR F5) OVERRIDES the default ``_mode_instructions(mode)`` with
|
|
1603
|
+
the RESOLVED effective brief — so a board invoked with a custom ``brief_ref``
|
|
1604
|
+
hands the native seat the SAME acceptance brief as the runtime legs, not the
|
|
1605
|
+
default. All default ``None`` — the bare standalone call is byte-unchanged
|
|
1606
|
+
(#125 callers/tests unaffected).
|
|
1521
1607
|
"""
|
|
1522
1608
|
reason, detail = _claude_leg_deferred_reason(env)
|
|
1523
1609
|
verdict_required = mode != "advisory"
|
|
@@ -1527,11 +1613,16 @@ def native_agent_leg_request(
|
|
|
1527
1613
|
mode=mode,
|
|
1528
1614
|
reason=reason,
|
|
1529
1615
|
detail=detail,
|
|
1530
|
-
instructions=_mode_instructions(mode),
|
|
1616
|
+
instructions=instructions if instructions is not None else _mode_instructions(mode),
|
|
1531
1617
|
verdict_required=verdict_required,
|
|
1532
1618
|
verdict_contract=(
|
|
1533
1619
|
_REVIEW_VERDICT_CONTRACT if verdict_required else _ADVISORY_VERDICT_CONTRACT
|
|
1534
1620
|
),
|
|
1621
|
+
seat_key=seat_key,
|
|
1622
|
+
effort=effort,
|
|
1623
|
+
lens=lens,
|
|
1624
|
+
artifact_ref=artifact_ref,
|
|
1625
|
+
brief_ref=brief_ref,
|
|
1535
1626
|
)
|
|
1536
1627
|
|
|
1537
1628
|
|
|
@@ -1547,8 +1638,12 @@ def _tui_capable(
|
|
|
1547
1638
|
env: Mapping[str, str] | None = None,
|
|
1548
1639
|
isatty: Callable[[], bool] | None = None,
|
|
1549
1640
|
) -> bool:
|
|
1550
|
-
"""
|
|
1551
|
-
|
|
1641
|
+
"""True iff the PARENT has a usable controlling terminal AND we are not under
|
|
1642
|
+
Claude Code. Retained as a capability predicate, but as of #183 it is NO LONGER
|
|
1643
|
+
the gate for running the claude TUI leg: ``_exec_claude_tui_leg`` gates on
|
|
1644
|
+
``_under_claude_code`` alone, because ``_run_claude_tui_session`` self-allocates
|
|
1645
|
+
its own PTY and never needs the parent's tty. Kept for callers/tests that
|
|
1646
|
+
genuinely want to know whether the parent is terminal-attached."""
|
|
1552
1647
|
if _under_claude_code(env):
|
|
1553
1648
|
return False
|
|
1554
1649
|
check = isatty if isatty is not None else (lambda: sys.stdin.isatty() and sys.stdout.isatty())
|
|
@@ -1584,28 +1679,43 @@ def _exec_claude_tui_leg(
|
|
|
1584
1679
|
``resolve_seat_env`` result so per-seat effort + active env scrubbing reach the
|
|
1585
1680
|
real launch.
|
|
1586
1681
|
"""
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
#
|
|
1598
|
-
#
|
|
1599
|
-
#
|
|
1600
|
-
#
|
|
1601
|
-
#
|
|
1602
|
-
#
|
|
1682
|
+
# CR F4: the under-Claude-Code deferral MUST come BEFORE the local-CLI support
|
|
1683
|
+
# check. Inside Claude Code the driving session fulfills the leg as its own
|
|
1684
|
+
# native Task Agent (its authed session), which does NOT depend on a standalone
|
|
1685
|
+
# `claude` CLI being installed/current on the host. Checking support first would
|
|
1686
|
+
# return `UNAVAILABLE` + a NON-empty support detail on a Claude-Code host that
|
|
1687
|
+
# lacks the local CLI — and `_run_seat`'s deferral signature is UNAVAILABLE +
|
|
1688
|
+
# EMPTY text, so the native-fill request would never be attached: a silent drop.
|
|
1689
|
+
# Defer first (empty text, native request emitted), THEN check local support for
|
|
1690
|
+
# the run path.
|
|
1691
|
+
if _under_claude_code(env):
|
|
1692
|
+
# #92: INSIDE Claude Code, do NOT spawn a SECOND Claude TUI we cannot
|
|
1693
|
+
# drive. Degrade cleanly with the existing UNAVAILABLE status and EMPTY
|
|
1694
|
+
# review text — the empty text is load-bearing (A4): an UNAVAILABLE leg
|
|
1695
|
+
# with empty text becomes a non-gating `panel_leg_degraded` warn, never a
|
|
1696
|
+
# block, and `usable` (status=="OK") never counts it as an AGREE. The
|
|
1697
|
+
# driving Claude Code session supplies this leg natively (a Task Agent) —
|
|
1698
|
+
# see the `needs_native_agent` request the board attaches at the
|
|
1699
|
+
# invoke_board layer (ABDNATIVE / #183).
|
|
1700
|
+
#
|
|
1701
|
+
# #183 (owner-confirmed reconciliation): a merely non-TTY parent is NOT a
|
|
1702
|
+
# defer reason. `_run_claude_tui_session` SELF-ALLOCATES its own PTY
|
|
1703
|
+
# (pty.openpty), so a headless NON-Claude caller (e.g. Codex Desktop) with
|
|
1704
|
+
# valid Claude Max OAuth runs the leg RIGHT HERE — the old `_tui_capable`
|
|
1705
|
+
# parent-tty gate over-blocked that case. `native_adapter_required` is now
|
|
1706
|
+
# an AFFORDANCE/fallback (via native_agent_leg_request()) for a host that
|
|
1707
|
+
# cannot drive the TUI or prefers its own sub-agent, NOT the default that
|
|
1708
|
+
# silently dropped the seat.
|
|
1603
1709
|
reason_code, reason_detail = _claude_leg_deferred_reason(env)
|
|
1604
1710
|
logging.getLogger(__name__).warning(
|
|
1605
1711
|
"advisor-panel claude leg deferred [%s]: %s", reason_code, reason_detail
|
|
1606
1712
|
)
|
|
1607
1713
|
return "UNAVAILABLE", ""
|
|
1608
1714
|
|
|
1715
|
+
supported, support_detail = _claude_code_support_status()
|
|
1716
|
+
if not supported:
|
|
1717
|
+
return "UNAVAILABLE", support_detail
|
|
1718
|
+
|
|
1609
1719
|
env = _subscription_env() if env is None else dict(env)
|
|
1610
1720
|
output_file = out_dir / "panel-claude.txt"
|
|
1611
1721
|
prompt = _render_claude_tui_prompt(artifact, review_dir, output_file, mode)
|
|
@@ -2701,7 +2811,40 @@ def invoke_board(
|
|
|
2701
2811
|
status = "DEGRADED"
|
|
2702
2812
|
if status == "OK" and not str(text).strip():
|
|
2703
2813
|
status = "EMPTY"
|
|
2704
|
-
|
|
2814
|
+
# ABDNATIVE (#183 companion, Bug 2): when the claude/Fable seat DEFERS (the
|
|
2815
|
+
# runtime cannot drive the leg here: #92 under Claude Code, or a headless
|
|
2816
|
+
# host), surface a typed native-fill request ON THE RESULT so a driving
|
|
2817
|
+
# harness sees "YOUR seat to fill" — not a log line + a bare UNAVAILABLE.
|
|
2818
|
+
# The deferral signature is UNAVAILABLE with EMPTY text (the #92 A4
|
|
2819
|
+
# invariant); the support-missing UNAVAILABLE carries a non-empty detail and
|
|
2820
|
+
# is a genuine "no claude here", not a fillable seat. Reuse the shipped #125
|
|
2821
|
+
# builder; pass the seat cognition + reviewed artifact + the EFFECTIVE brief
|
|
2822
|
+
# (CR F5: the native seat must review under the SAME acceptance contract as
|
|
2823
|
+
# the runtime legs — `_resolve_brief` gives the exact `review-instructions.md`
|
|
2824
|
+
# the other seats got). None for every other leg (golden byte-identity holds).
|
|
2825
|
+
result = PanelLegResult(leg=leg, status=status, text=str(text), seat_key=seat.seat_key)
|
|
2826
|
+
if leg == "claude" and status == "UNAVAILABLE" and not str(text).strip():
|
|
2827
|
+
try:
|
|
2828
|
+
effective_instructions = _resolve_brief(mode, brief_ref)
|
|
2829
|
+
except (ValueError, OSError):
|
|
2830
|
+
# brief_ref was already validated on the run path that reached the
|
|
2831
|
+
# defer; fall back to the mode brief rather than crash the seat.
|
|
2832
|
+
effective_instructions = _mode_instructions(mode)
|
|
2833
|
+
request = native_agent_leg_request(
|
|
2834
|
+
leg=leg,
|
|
2835
|
+
mode=mode,
|
|
2836
|
+
env=env_source,
|
|
2837
|
+
model=seat.model,
|
|
2838
|
+
seat_key=seat.seat_key,
|
|
2839
|
+
effort=seat.effort,
|
|
2840
|
+
lens=seat.lens,
|
|
2841
|
+
artifact_ref=str(artifact_ref) if isinstance(artifact_ref, str) else None,
|
|
2842
|
+
brief_ref=str(brief_ref) if isinstance(brief_ref, str) else None,
|
|
2843
|
+
instructions=effective_instructions,
|
|
2844
|
+
)
|
|
2845
|
+
# CR F2: attach post-creation (non-field) so asdict/golden can't see it.
|
|
2846
|
+
attach_native_agent_request(result, request)
|
|
2847
|
+
return result
|
|
2705
2848
|
|
|
2706
2849
|
# Fan the seats out concurrently (parallel by default; max_concurrency=1 →
|
|
2707
2850
|
# sequential); results come back in SEAT ORDER (positional re-key + golden
|
|
@@ -6,7 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
8
|
from ..git_topology import collect_git_topology
|
|
9
|
-
from ..
|
|
9
|
+
from ..events import append_payload
|
|
10
10
|
from ..models import utc_now
|
|
11
11
|
from .merge_policy import MergePolicy
|
|
12
12
|
|
|
@@ -21,12 +21,11 @@ def emit_ratification_passed(
|
|
|
21
21
|
ratification_gate: str,
|
|
22
22
|
merge_policy: MergePolicy,
|
|
23
23
|
audit: dict[str, Any],
|
|
24
|
+
*,
|
|
25
|
+
roadmap_path: Path | None = None,
|
|
24
26
|
) -> None:
|
|
25
27
|
repo = Path(repo_root)
|
|
26
28
|
payload = _payload(repo, roadmap_version, phase_alias, ratification_gate, merge_policy, audit)
|
|
27
|
-
ensure_phase_loop_excluded(repo)
|
|
28
|
-
event_path = phase_loop_event_file(repo)
|
|
29
|
-
event_path.parent.mkdir(parents=True, exist_ok=True)
|
|
30
29
|
event = {
|
|
31
30
|
"timestamp": utc_now(),
|
|
32
31
|
"repo": str(repo),
|
|
@@ -40,8 +39,11 @@ def emit_ratification_passed(
|
|
|
40
39
|
"payload": payload,
|
|
41
40
|
"git_topology": collect_git_topology(repo),
|
|
42
41
|
}
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
append_payload(
|
|
43
|
+
repo,
|
|
44
|
+
event,
|
|
45
|
+
roadmap=roadmap_path or repo / "specs" / f"phase-plans-{roadmap_version}.md",
|
|
46
|
+
)
|
|
45
47
|
|
|
46
48
|
trigger = repo / TRIGGER_PATH
|
|
47
49
|
trigger.parent.mkdir(parents=True, exist_ok=True)
|