phase-loop-runtime 0.7.6__tar.gz → 0.7.7__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.6 → phase_loop_runtime-0.7.7}/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/cli.py +34 -1
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_roadmap.py +47 -4
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_runner.py +268 -128
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
- phase_loop_runtime-0.7.7/tests/test_train_prebuilt.py +463 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_roadmap.py +75 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_runner.py +57 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/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.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/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.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/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.7"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -653,6 +653,19 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
653
653
|
"Default: current directory."
|
|
654
654
|
),
|
|
655
655
|
)
|
|
656
|
+
run_train_sub.add_argument(
|
|
657
|
+
"--workspace",
|
|
658
|
+
dest="workspace_overrides",
|
|
659
|
+
action="append",
|
|
660
|
+
default=None,
|
|
661
|
+
metavar="repo=PATH",
|
|
662
|
+
help=(
|
|
663
|
+
"Per-node workspace override: map a node's repo to an arbitrary "
|
|
664
|
+
"absolute checkout path (e.g. a different volume). Repeatable: "
|
|
665
|
+
"--workspace my-service=/mnt/vol/my-service. Takes precedence over "
|
|
666
|
+
"a node's **Workspace:** attribute and the --workspace-root default."
|
|
667
|
+
),
|
|
668
|
+
)
|
|
656
669
|
run_train_sub.add_argument(
|
|
657
670
|
"--ledger-dir",
|
|
658
671
|
default=None,
|
|
@@ -2886,9 +2899,29 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
|
|
|
2886
2899
|
# run_mode mirrors how 'run' handles --governed (cli.py:796)
|
|
2887
2900
|
run_mode = "governed" if bool(getattr(args, "governed", False)) else "autonomous"
|
|
2888
2901
|
|
|
2889
|
-
# Workspace resolution:
|
|
2902
|
+
# Workspace resolution precedence (highest first):
|
|
2903
|
+
# 1. --workspace <repo>=<path> CLI override (arbitrary absolute paths)
|
|
2904
|
+
# 2. the node's **Workspace:** attribute (from the train roadmap)
|
|
2905
|
+
# 3. <workspace-root>/<node.repo> (the default)
|
|
2890
2906
|
workspace_root = Path(getattr(args, "workspace_root", None) or ".")
|
|
2907
|
+
workspace_overrides: dict = {}
|
|
2908
|
+
for spec in getattr(args, "workspace_overrides", None) or []:
|
|
2909
|
+
if "=" not in spec:
|
|
2910
|
+
parser.error(f"--workspace expects 'repo=PATH', got {spec!r}")
|
|
2911
|
+
repo_key, _, path_val = spec.partition("=")
|
|
2912
|
+
repo_key = repo_key.strip()
|
|
2913
|
+
path_val = path_val.strip()
|
|
2914
|
+
if not repo_key or not path_val:
|
|
2915
|
+
parser.error(f"--workspace expects a non-empty 'repo=PATH', got {spec!r}")
|
|
2916
|
+
workspace_overrides[repo_key] = Path(path_val)
|
|
2917
|
+
|
|
2891
2918
|
def _resolve_workspace(node) -> Path:
|
|
2919
|
+
override = workspace_overrides.get(node.repo)
|
|
2920
|
+
if override is not None:
|
|
2921
|
+
return override
|
|
2922
|
+
node_ws = getattr(node, "workspace", None)
|
|
2923
|
+
if node_ws:
|
|
2924
|
+
return Path(node_ws)
|
|
2892
2925
|
return workspace_root / node.repo
|
|
2893
2926
|
|
|
2894
2927
|
# Ledger path — must not be inside any repo's .phase-loop/
|
{phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_roadmap.py
RENAMED
|
@@ -45,12 +45,27 @@ from .cross_repo_channel import ChannelDescriptor, parse_channel_line
|
|
|
45
45
|
# ---------------------------------------------------------------------------
|
|
46
46
|
# Data model — IF-0-P2-1
|
|
47
47
|
|
|
48
|
+
#: Supported node modes. ``execute`` (default) runs the per-repo run_loop to
|
|
49
|
+
#: build the node's phase, then publishes what it produced. ``prebuilt`` lands
|
|
50
|
+
#: an already-committed, independently-verified branch WITHOUT re-executing the
|
|
51
|
+
#: phase (no executor dispatch) — see ``train_runner`` for the prebuilt path.
|
|
52
|
+
SUPPORTED_NODE_MODES = frozenset({"execute", "prebuilt"})
|
|
53
|
+
|
|
54
|
+
|
|
48
55
|
@dataclass(frozen=True)
|
|
49
56
|
class TrainNode:
|
|
50
|
-
"""Identity of one node in the release train: a ``(repo, roadmap)`` pair.
|
|
57
|
+
"""Identity of one node in the release train: a ``(repo, roadmap)`` pair.
|
|
58
|
+
|
|
59
|
+
``mode`` selects how the coordinator lands the node (``execute`` = run the
|
|
60
|
+
phase then publish; ``prebuilt`` = publish an already-committed branch with
|
|
61
|
+
no executor dispatch). ``workspace`` optionally overrides where the node's
|
|
62
|
+
checkout lives on disk (an absolute path), for nodes on arbitrary volumes.
|
|
63
|
+
"""
|
|
51
64
|
|
|
52
65
|
repo: str
|
|
53
66
|
roadmap: str
|
|
67
|
+
mode: str = "execute"
|
|
68
|
+
workspace: Optional[str] = None
|
|
54
69
|
|
|
55
70
|
@property
|
|
56
71
|
def node_id(self) -> str:
|
|
@@ -116,7 +131,7 @@ class TrainRoadmap:
|
|
|
116
131
|
_TITLE_RE = re.compile(r"^#\s+Release Train:\s*(.+?)\s*$", re.MULTILINE)
|
|
117
132
|
_NODE_HEADING_RE = re.compile(r"^###\s+Node:\s*(.+?)\s*$", re.MULTILINE)
|
|
118
133
|
_FIELD_RE = re.compile(
|
|
119
|
-
r"^\*\*(?P<label>Depends on|Channel):\*\*\s*(?P<value>.+)$",
|
|
134
|
+
r"^\*\*(?P<label>Depends on|Channel|Mode|Workspace):\*\*\s*(?P<value>.+)$",
|
|
120
135
|
re.MULTILINE | re.IGNORECASE,
|
|
121
136
|
)
|
|
122
137
|
|
|
@@ -180,13 +195,41 @@ def parse_train_roadmap(text: str) -> TrainRoadmap:
|
|
|
180
195
|
raw_edges: List[Tuple[TrainNode, str, str]] = [] # (downstream, dep_id, channel_raw)
|
|
181
196
|
|
|
182
197
|
for raw_id, body in node_bodies:
|
|
183
|
-
|
|
184
|
-
nodes.append(node)
|
|
198
|
+
base = _parse_node_id(raw_id)
|
|
185
199
|
|
|
186
200
|
fields: Dict[str, str] = {}
|
|
187
201
|
for m in _FIELD_RE.finditer(body):
|
|
188
202
|
fields[m.group("label").lower()] = m.group("value").strip()
|
|
189
203
|
|
|
204
|
+
# Mode: default 'execute'; a bare (none) value also means the default.
|
|
205
|
+
# Reject any unknown mode with a coded, node-named parse error. (T-A..
|
|
206
|
+
# T-F are taken by validate_train; (T-G) is the next free code and keeps
|
|
207
|
+
# the same coded-diagnostic style for the mode-grammar violation.)
|
|
208
|
+
mode_raw = fields.get("mode", "execute").strip().lower()
|
|
209
|
+
if mode_raw in _NONE_VALUES:
|
|
210
|
+
mode_raw = "execute"
|
|
211
|
+
if mode_raw not in SUPPORTED_NODE_MODES:
|
|
212
|
+
raise ValueError(
|
|
213
|
+
f"(T-G) node '{base.node_id}' declares unknown mode {mode_raw!r}; "
|
|
214
|
+
f"supported modes are 'execute' (default) and 'prebuilt'"
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
# Workspace: optional per-node absolute-path override for the checkout.
|
|
218
|
+
workspace_raw = fields.get("workspace")
|
|
219
|
+
workspace = (
|
|
220
|
+
workspace_raw.strip()
|
|
221
|
+
if workspace_raw and workspace_raw.strip().lower() not in _NONE_VALUES
|
|
222
|
+
else None
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
node = TrainNode(
|
|
226
|
+
repo=base.repo,
|
|
227
|
+
roadmap=base.roadmap,
|
|
228
|
+
mode=mode_raw,
|
|
229
|
+
workspace=workspace,
|
|
230
|
+
)
|
|
231
|
+
nodes.append(node)
|
|
232
|
+
|
|
190
233
|
dep_raw = fields.get("depends on", "(none)")
|
|
191
234
|
channel_raw = fields.get("channel", "(none)")
|
|
192
235
|
|
{phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime/train_runner.py
RENAMED
|
@@ -72,6 +72,11 @@ from .train_roadmap import TrainEdge, TrainNode, TrainRoadmap
|
|
|
72
72
|
ResolveWorkspace = Callable[[TrainNode], Path]
|
|
73
73
|
ResolveOwnedPaths = Callable[[TrainNode], Sequence[str]]
|
|
74
74
|
|
|
75
|
+
#: Default base branch a prebuilt node's committed work is measured against.
|
|
76
|
+
#: Matches ``_check_base_branch_exists``'s default so the ahead-check and the
|
|
77
|
+
#: existence-check agree on which ``origin/<base>`` to use.
|
|
78
|
+
_DEFAULT_BASE = "main"
|
|
79
|
+
|
|
75
80
|
|
|
76
81
|
@dataclass(frozen=True)
|
|
77
82
|
class CoordinatorRuntime:
|
|
@@ -195,6 +200,71 @@ def _check_base_branch_exists(
|
|
|
195
200
|
return None
|
|
196
201
|
|
|
197
202
|
|
|
203
|
+
def _check_branch_ahead_of_base(
|
|
204
|
+
workspace: Path, node_id: str, base: str = _DEFAULT_BASE
|
|
205
|
+
) -> Optional[str]:
|
|
206
|
+
"""Return an error string if the branch is NOT strictly ahead of origin/<base>.
|
|
207
|
+
|
|
208
|
+
A prebuilt node must carry committed work — a clean-but-not-ahead workspace
|
|
209
|
+
has nothing to publish, which is a preflight error. Uses the two-dot
|
|
210
|
+
``origin/<base>..HEAD`` count (commits on HEAD not on base).
|
|
211
|
+
"""
|
|
212
|
+
completed = subprocess.run(
|
|
213
|
+
["git", "-C", str(workspace), "rev-list", "--count", f"origin/{base}..HEAD"],
|
|
214
|
+
capture_output=True,
|
|
215
|
+
text=True,
|
|
216
|
+
timeout=15,
|
|
217
|
+
)
|
|
218
|
+
if completed.returncode != 0:
|
|
219
|
+
return (
|
|
220
|
+
f"[{node_id}] could not compute commits ahead of 'origin/{base}': "
|
|
221
|
+
f"{completed.stderr.strip() or 'rev-list failed'}"
|
|
222
|
+
)
|
|
223
|
+
try:
|
|
224
|
+
ahead = int(completed.stdout.strip() or "0")
|
|
225
|
+
except ValueError:
|
|
226
|
+
ahead = 0
|
|
227
|
+
if ahead <= 0:
|
|
228
|
+
return (
|
|
229
|
+
f"[{node_id}] prebuilt node workspace '{workspace}' is clean but not "
|
|
230
|
+
f"ahead of 'origin/{base}' — nothing to publish (a prebuilt node must "
|
|
231
|
+
f"carry committed work)"
|
|
232
|
+
)
|
|
233
|
+
return None
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def _prebuilt_owned_paths(
|
|
237
|
+
workspace: Path, base: str = _DEFAULT_BASE
|
|
238
|
+
) -> List[str]:
|
|
239
|
+
"""Return the paths a prebuilt branch changed vs origin/<base> (committed diff).
|
|
240
|
+
|
|
241
|
+
Uses the three-dot ``origin/<base>...HEAD`` diff (changes on HEAD since the
|
|
242
|
+
merge-base) so the published PR's owned-paths reflect exactly the committed
|
|
243
|
+
work. Stubbable seam: inject ``_prebuilt_owned_paths_fn`` into
|
|
244
|
+
:func:`run_train`.
|
|
245
|
+
"""
|
|
246
|
+
completed = subprocess.run(
|
|
247
|
+
["git", "-C", str(workspace), "diff", "--name-only", f"origin/{base}...HEAD"],
|
|
248
|
+
capture_output=True,
|
|
249
|
+
text=True,
|
|
250
|
+
timeout=30,
|
|
251
|
+
)
|
|
252
|
+
if completed.returncode != 0:
|
|
253
|
+
# Fail CLOSED: a diff error must not yield an empty owned-paths scope that the
|
|
254
|
+
# broker admission would approve while the push still publishes the real branch
|
|
255
|
+
# (approved-nothing / published-something scope mismatch). Raising blocks the node.
|
|
256
|
+
raise RuntimeError(
|
|
257
|
+
f"could not compute prebuilt owned paths vs 'origin/{base}': "
|
|
258
|
+
f"{completed.stderr.strip() or 'git diff failed'}"
|
|
259
|
+
)
|
|
260
|
+
owned = [p.strip() for p in completed.stdout.splitlines() if p.strip()]
|
|
261
|
+
if not owned:
|
|
262
|
+
# A prebuilt node that is ahead-of-base yet has no net file changes has nothing
|
|
263
|
+
# to publish — fail closed rather than admit an empty scope.
|
|
264
|
+
raise RuntimeError(f"prebuilt branch has no committed changes vs 'origin/{base}' to publish")
|
|
265
|
+
return owned
|
|
266
|
+
|
|
267
|
+
|
|
198
268
|
def _default_preflight(
|
|
199
269
|
nodes: List[TrainNode],
|
|
200
270
|
resolve_workspace: ResolveWorkspace,
|
|
@@ -206,6 +276,11 @@ def _default_preflight(
|
|
|
206
276
|
2. Per-repo: workspace clean (no uncommitted changes).
|
|
207
277
|
3. Per-repo: remote ``origin`` is reachable.
|
|
208
278
|
4. Per-repo: base branch ``origin/main`` exists.
|
|
279
|
+
5. Prebuilt nodes only: the branch is strictly AHEAD of ``origin/main``
|
|
280
|
+
(it carries the committed work). A clean-but-not-ahead prebuilt node
|
|
281
|
+
is a preflight error — nothing to publish.
|
|
282
|
+
|
|
283
|
+
Execute-node checks (2–4) are unchanged; prebuilt adds check 5.
|
|
209
284
|
|
|
210
285
|
A non-empty return means the entry gate is closed; zero PRs must be opened.
|
|
211
286
|
"""
|
|
@@ -218,11 +293,15 @@ def _default_preflight(
|
|
|
218
293
|
|
|
219
294
|
for node in nodes:
|
|
220
295
|
workspace = resolve_workspace(node)
|
|
221
|
-
|
|
296
|
+
checks = [
|
|
222
297
|
_check_repo_clean,
|
|
223
298
|
_check_remote_reachable,
|
|
224
299
|
_check_base_branch_exists,
|
|
225
|
-
|
|
300
|
+
]
|
|
301
|
+
# Prebuilt nodes must additionally be strictly ahead of the base.
|
|
302
|
+
if getattr(node, "mode", "execute") == "prebuilt":
|
|
303
|
+
checks.append(_check_branch_ahead_of_base)
|
|
304
|
+
for check_fn in checks:
|
|
226
305
|
err = check_fn(workspace, node.node_id)
|
|
227
306
|
if err:
|
|
228
307
|
errors.append(err)
|
|
@@ -666,6 +745,9 @@ def run_train(
|
|
|
666
745
|
_pr_is_open: Optional[Callable] = None,
|
|
667
746
|
_live_pr_head_sha_fn: Optional[Callable] = None,
|
|
668
747
|
_preflight_fn: Optional[Callable] = None,
|
|
748
|
+
# Prebuilt-node seam: derives a prebuilt branch's owned paths from its
|
|
749
|
+
# committed diff vs base. Defaults to the live git implementation.
|
|
750
|
+
_prebuilt_owned_paths_fn: Optional[Callable] = None,
|
|
669
751
|
# Broker admission builder (runtime, node, workspace, owned_paths) → AdmissionRequest.
|
|
670
752
|
# Only invoked when a broker-authoritative coordinator_runtime is supplied.
|
|
671
753
|
_admission_fn: Optional[Callable] = None,
|
|
@@ -753,6 +835,11 @@ def run_train(
|
|
|
753
835
|
_live_pr_head_sha_fn if _live_pr_head_sha_fn is not None else _live_pr_head_sha
|
|
754
836
|
)
|
|
755
837
|
preflight_fn = _preflight_fn if _preflight_fn is not None else _default_preflight
|
|
838
|
+
prebuilt_owned_paths_fn = (
|
|
839
|
+
_prebuilt_owned_paths_fn
|
|
840
|
+
if _prebuilt_owned_paths_fn is not None
|
|
841
|
+
else _prebuilt_owned_paths
|
|
842
|
+
)
|
|
756
843
|
admission_fn = _admission_fn if _admission_fn is not None else _default_build_admission
|
|
757
844
|
|
|
758
845
|
# Track whether caller supplied an explicit owned-paths resolver so we know
|
|
@@ -775,6 +862,26 @@ def run_train(
|
|
|
775
862
|
# --- Step 1: Topo-sort (raises ValueError on cycle) --------------------
|
|
776
863
|
topo_order = roadmap.topo_order()
|
|
777
864
|
|
|
865
|
+
# Prebuilt nodes stop at drafts_open; P4 governed merge for prebuilt nodes
|
|
866
|
+
# is out of scope (the re-verify path expects per-repo phase-loop state a
|
|
867
|
+
# prebuilt node need not carry). Fail loud BEFORE any PR opens rather than
|
|
868
|
+
# emit a misleading reverify failure mid-merge. Follow-up: a prebuilt-aware
|
|
869
|
+
# P4 re-verify (verify the committed branch against the merged upstream pin).
|
|
870
|
+
if _merge_phase_enabled and run_mode == "governed":
|
|
871
|
+
prebuilt_ids = [
|
|
872
|
+
n.node_id for n in topo_order
|
|
873
|
+
if getattr(n, "mode", "execute") == "prebuilt"
|
|
874
|
+
]
|
|
875
|
+
if prebuilt_ids:
|
|
876
|
+
return {
|
|
877
|
+
"status": "preflight_failed",
|
|
878
|
+
"errors": [
|
|
879
|
+
"prebuilt node(s) are not supported under --governed (P4 merge): "
|
|
880
|
+
f"{', '.join(prebuilt_ids)}; run without --governed to open draft "
|
|
881
|
+
"PRs and stop at drafts_open, then merge the prebuilt PRs manually"
|
|
882
|
+
],
|
|
883
|
+
}
|
|
884
|
+
|
|
778
885
|
# --- Step 2: Train-level preflight — ALL repos, BEFORE any PR ----------
|
|
779
886
|
# This is the structural guarantee that preflight failure → zero PRs:
|
|
780
887
|
# we return immediately here, before the per-node loop is entered.
|
|
@@ -930,138 +1037,171 @@ def run_train(
|
|
|
930
1037
|
append_record(ledger_path, LedgerRecord(node_id=nid, status="running"))
|
|
931
1038
|
|
|
932
1039
|
try:
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
#
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
ref = upstream_result.get("head_sha")
|
|
960
|
-
if not ref:
|
|
961
|
-
# Block: do NOT fall back to injecting a moving branch name.
|
|
962
|
-
# A missing SHA means neither the live query nor the ledger
|
|
963
|
-
# have a pinnable ref — injecting a branch name would build
|
|
964
|
-
# the downstream against a moving target.
|
|
965
|
-
raise RuntimeError(
|
|
966
|
-
f"no resolvable SHA for upstream '{edge.upstream.node_id}' "
|
|
967
|
-
f"(live head SHA query returned None and ledger head_sha is "
|
|
968
|
-
f"None); cannot inject a moving branch name for channel "
|
|
969
|
-
f"{edge.channel.kind!r} — resolve the upstream SHA and re-run"
|
|
1040
|
+
if getattr(node, "mode", "execute") == "prebuilt":
|
|
1041
|
+
# Prebuilt node: land already-committed, independently-verified
|
|
1042
|
+
# work. NO upstream injection (it would dirty the clean tree and
|
|
1043
|
+
# force a re-commit), NO run_loop (no executor dispatch), NO
|
|
1044
|
+
# snapshot guard. owned_paths come from the committed diff vs
|
|
1045
|
+
# base (or an explicit resolver); publish pushes the existing
|
|
1046
|
+
# branch WITHOUT a new commit (prebuilt=True).
|
|
1047
|
+
if _explicit_owned_paths:
|
|
1048
|
+
owned_paths = list(resolve_owned_paths(node)) # type: ignore[arg-type]
|
|
1049
|
+
else:
|
|
1050
|
+
owned_paths = list(prebuilt_owned_paths_fn(workspace, _DEFAULT_BASE))
|
|
1051
|
+
pr_body = _build_pr_body(node, topo_order, completed_nodes, upstream_edges)
|
|
1052
|
+
publish_kwargs: Dict[str, object] = {
|
|
1053
|
+
"draft": True, # P3 invariant: draft-only, never merge
|
|
1054
|
+
"pr_body": pr_body,
|
|
1055
|
+
"prebuilt": True,
|
|
1056
|
+
}
|
|
1057
|
+
# Route the prebuilt publish through the broker EXACTLY as the
|
|
1058
|
+
# execute path does: a broker-authoritative coordinator_runtime
|
|
1059
|
+
# supplies the client + a per-node admission. Without a
|
|
1060
|
+
# broker_client the publish primitive fails closed
|
|
1061
|
+
# (broker_required) — a prebuilt node never does a direct push.
|
|
1062
|
+
if coordinator_runtime is not None:
|
|
1063
|
+
publish_kwargs["broker_client"] = coordinator_runtime.broker_client
|
|
1064
|
+
publish_kwargs["admission"] = admission_fn(
|
|
1065
|
+
coordinator_runtime, node, workspace, owned_paths
|
|
970
1066
|
)
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
# (ii) Invoke the unchanged per-repo run_loop.
|
|
976
|
-
# The real run_loop returns (StateSnapshot, list[LaunchResult]).
|
|
977
|
-
result_tuple = run_loop_fn(
|
|
978
|
-
workspace, workspace / node.roadmap, run_mode=run_mode
|
|
979
|
-
)
|
|
980
|
-
|
|
981
|
-
# SHOULD-FIX 3: Guard against partial multi-phase nodes.
|
|
982
|
-
#
|
|
983
|
-
# run_loop defaults to max_phases=1, so a node with a >1-phase
|
|
984
|
-
# roadmap stops after the first phase. If any phase is still
|
|
985
|
-
# "planned" the node is incomplete — publishing it ships a partial
|
|
986
|
-
# draft PR. Block loudly instead.
|
|
987
|
-
#
|
|
988
|
-
# Use getattr so we're forward-compatible with test fixtures that
|
|
989
|
-
# return lightweight SimpleNamespace objects lacking a phases field.
|
|
990
|
-
_node_snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
|
|
991
|
-
_node_phases = getattr(_node_snapshot, "phases", None)
|
|
992
|
-
if _node_phases is not None:
|
|
993
|
-
# A node may publish a draft PR only when EVERY phase reached a
|
|
994
|
-
# clean green terminal — "complete" or "awaiting_phase_closeout"
|
|
995
|
-
# (the post-run_loop success state under manual closeout). ANY
|
|
996
|
-
# other state (planned/blocked/failed_verification/executing/
|
|
997
|
-
# human_required/unknown) means the node is incomplete or broken.
|
|
998
|
-
# Blocking only "planned" (the prior narrow guard) let a
|
|
999
|
-
# *failed*-phase node publish a draft that could later trivial-pass
|
|
1000
|
-
# P4 re-verify on a no-verification plan — a combined false-green.
|
|
1001
|
-
# Block loudly on any non-green phase instead.
|
|
1002
|
-
_GREEN_PHASE_STATES = {"complete", "awaiting_phase_closeout"}
|
|
1003
|
-
_not_green = sorted(
|
|
1004
|
-
ph for ph, st in _node_phases.items() if st not in _GREEN_PHASE_STATES
|
|
1067
|
+
publish_result = publish_fn(
|
|
1068
|
+
workspace,
|
|
1069
|
+
owned_paths,
|
|
1070
|
+
**publish_kwargs,
|
|
1005
1071
|
)
|
|
1006
|
-
if _not_green:
|
|
1007
|
-
raise RuntimeError(
|
|
1008
|
-
f"node '{nid}' has phases not in a green state after run_loop "
|
|
1009
|
-
f"({', '.join(_not_green)}); refusing to publish a partial or "
|
|
1010
|
-
f"failed draft PR — every phase must reach complete/"
|
|
1011
|
-
f"awaiting_phase_closeout before publishing"
|
|
1012
|
-
)
|
|
1013
|
-
|
|
1014
|
-
# (iii) Determine owned paths (Finding #1).
|
|
1015
|
-
# If the caller supplied an explicit resolver, honour it.
|
|
1016
|
-
# Otherwise use the snapshot's produced/owned paths so the
|
|
1017
|
-
# published PR contains the actual implementation, not just
|
|
1018
|
-
# the roadmap file.
|
|
1019
|
-
if _explicit_owned_paths:
|
|
1020
|
-
owned_paths = list(resolve_owned_paths(node)) # type: ignore[arg-type]
|
|
1021
1072
|
else:
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1073
|
+
# (i) Inject upstream draft refs (IF-0-P2-2) BEFORE run_loop.
|
|
1074
|
+
# Collect injected paths to union into owned_paths after run_loop.
|
|
1075
|
+
#
|
|
1076
|
+
# The guard below is a defensive invariant. It should be unreachable
|
|
1077
|
+
# in a well-formed train: validate_train_loud (T-B) ensures every
|
|
1078
|
+
# upstream is a declared node, and topo-sort guarantees we processed
|
|
1079
|
+
# it before this node. If the upstream failed/was blocked, run_train
|
|
1080
|
+
# returns immediately and never reaches this downstream. Kept here to
|
|
1081
|
+
# make the "no silent skip" contract explicit and catch future refactors.
|
|
1082
|
+
injected_channel_paths: List[str] = []
|
|
1083
|
+
for edge in upstream_edges:
|
|
1084
|
+
if edge.channel.kind == "order-only":
|
|
1085
|
+
# #47: an order-only edge enforces merge ORDER (via the topo
|
|
1086
|
+
# sort + sequential per-node execution) but carries no physical
|
|
1087
|
+
# channel — the downstream does not consume the upstream, so
|
|
1088
|
+
# there is nothing to inject. Skip; do not resolve a ref.
|
|
1089
|
+
continue
|
|
1090
|
+
upstream_result = completed_nodes.get(edge.upstream.node_id)
|
|
1091
|
+
if upstream_result is None:
|
|
1092
|
+
# Defensive: topo-order + T-B validation make this
|
|
1093
|
+
# unreachable; kept as an explicit fail-loud guard.
|
|
1094
|
+
raise RuntimeError(
|
|
1095
|
+
f"upstream ref for '{edge.upstream.node_id}' is not resolved "
|
|
1096
|
+
f"(not in completed_nodes) — cannot inject into "
|
|
1097
|
+
f"'{nid}'; the upstream must be built and published first"
|
|
1098
|
+
)
|
|
1099
|
+
ref = upstream_result.get("head_sha")
|
|
1100
|
+
if not ref:
|
|
1101
|
+
# Block: do NOT fall back to injecting a moving branch name.
|
|
1102
|
+
# A missing SHA means neither the live query nor the ledger
|
|
1103
|
+
# have a pinnable ref — injecting a branch name would build
|
|
1104
|
+
# the downstream against a moving target.
|
|
1105
|
+
raise RuntimeError(
|
|
1106
|
+
f"no resolvable SHA for upstream '{edge.upstream.node_id}' "
|
|
1107
|
+
f"(live head SHA query returned None and ledger head_sha is "
|
|
1108
|
+
f"None); cannot inject a moving branch name for channel "
|
|
1109
|
+
f"{edge.channel.kind!r} — resolve the upstream SHA and re-run"
|
|
1110
|
+
)
|
|
1111
|
+
injected = set_upstream_ref_fn(workspace, edge.channel, ref)
|
|
1112
|
+
if injected:
|
|
1113
|
+
injected_channel_paths.extend(injected)
|
|
1114
|
+
|
|
1115
|
+
# (ii) Invoke the unchanged per-repo run_loop.
|
|
1116
|
+
# The real run_loop returns (StateSnapshot, list[LaunchResult]).
|
|
1117
|
+
result_tuple = run_loop_fn(
|
|
1118
|
+
workspace, workspace / node.roadmap, run_mode=run_mode
|
|
1119
|
+
)
|
|
1120
|
+
|
|
1121
|
+
# SHOULD-FIX 3: Guard against partial multi-phase nodes.
|
|
1122
|
+
#
|
|
1123
|
+
# run_loop defaults to max_phases=1, so a node with a >1-phase
|
|
1124
|
+
# roadmap stops after the first phase. If any phase is still
|
|
1125
|
+
# "planned" the node is incomplete — publishing it ships a partial
|
|
1126
|
+
# draft PR. Block loudly instead.
|
|
1127
|
+
#
|
|
1128
|
+
# Use getattr so we're forward-compatible with test fixtures that
|
|
1129
|
+
# return lightweight SimpleNamespace objects lacking a phases field.
|
|
1130
|
+
_node_snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
|
|
1131
|
+
_node_phases = getattr(_node_snapshot, "phases", None)
|
|
1132
|
+
if _node_phases is not None:
|
|
1133
|
+
# A node may publish a draft PR only when EVERY phase reached a
|
|
1134
|
+
# clean green terminal — "complete" or "awaiting_phase_closeout"
|
|
1135
|
+
# (the post-run_loop success state under manual closeout). ANY
|
|
1136
|
+
# other state (planned/blocked/failed_verification/executing/
|
|
1137
|
+
# human_required/unknown) means the node is incomplete or broken.
|
|
1138
|
+
# Blocking only "planned" (the prior narrow guard) let a
|
|
1139
|
+
# *failed*-phase node publish a draft that could later trivial-pass
|
|
1140
|
+
# P4 re-verify on a no-verification plan — a combined false-green.
|
|
1141
|
+
# Block loudly on any non-green phase instead.
|
|
1142
|
+
_GREEN_PHASE_STATES = {"complete", "awaiting_phase_closeout"}
|
|
1143
|
+
_not_green = sorted(
|
|
1144
|
+
ph for ph, st in _node_phases.items() if st not in _GREEN_PHASE_STATES
|
|
1028
1145
|
)
|
|
1029
|
-
|
|
1146
|
+
if _not_green:
|
|
1147
|
+
raise RuntimeError(
|
|
1148
|
+
f"node '{nid}' has phases not in a green state after run_loop "
|
|
1149
|
+
f"({', '.join(_not_green)}); refusing to publish a partial or "
|
|
1150
|
+
f"failed draft PR — every phase must reach complete/"
|
|
1151
|
+
f"awaiting_phase_closeout before publishing"
|
|
1152
|
+
)
|
|
1153
|
+
|
|
1154
|
+
# (iii) Determine owned paths (Finding #1).
|
|
1155
|
+
# If the caller supplied an explicit resolver, honour it.
|
|
1156
|
+
# Otherwise use the snapshot's produced/owned paths so the
|
|
1157
|
+
# published PR contains the actual implementation, not just
|
|
1158
|
+
# the roadmap file.
|
|
1159
|
+
if _explicit_owned_paths:
|
|
1160
|
+
owned_paths = list(resolve_owned_paths(node)) # type: ignore[arg-type]
|
|
1030
1161
|
else:
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
publish_kwargs[
|
|
1057
|
-
|
|
1058
|
-
|
|
1162
|
+
snapshot = result_tuple[0] if isinstance(result_tuple, tuple) else None
|
|
1163
|
+
if snapshot is not None:
|
|
1164
|
+
produced = (
|
|
1165
|
+
getattr(snapshot, "phase_owned_dirty_paths", None)
|
|
1166
|
+
or getattr(snapshot, "dirty_paths", None)
|
|
1167
|
+
or ()
|
|
1168
|
+
)
|
|
1169
|
+
owned_paths = list(produced)
|
|
1170
|
+
else:
|
|
1171
|
+
owned_paths = []
|
|
1172
|
+
|
|
1173
|
+
# Union the coordinator-injected channel paths into owned_paths so
|
|
1174
|
+
# the pin/submodule change always ships in the PR even if run_loop's
|
|
1175
|
+
# snapshot doesn't include the injected file (Finding #6 / union fix).
|
|
1176
|
+
# de-duplicate while preserving order (snapshot paths first).
|
|
1177
|
+
if injected_channel_paths:
|
|
1178
|
+
seen = set(owned_paths)
|
|
1179
|
+
for p in injected_channel_paths:
|
|
1180
|
+
if p not in seen:
|
|
1181
|
+
owned_paths.append(p)
|
|
1182
|
+
seen.add(p)
|
|
1183
|
+
|
|
1184
|
+
# (iv) Publish as draft PR via the P1 runtime primitive.
|
|
1185
|
+
# draft=True is structural — P3 never merges.
|
|
1186
|
+
pr_body = _build_pr_body(node, topo_order, completed_nodes, upstream_edges)
|
|
1187
|
+
publish_kwargs: Dict[str, object] = {
|
|
1188
|
+
"draft": True, # P3 invariant: draft-only, never merge
|
|
1189
|
+
"pr_body": pr_body,
|
|
1190
|
+
}
|
|
1191
|
+
# Route the publish through the broker's admission+verb path when a
|
|
1192
|
+
# broker-authoritative runtime is supplied. Past the line-699 guard,
|
|
1193
|
+
# coordinator_runtime is not None ⟹ broker_client is not None. Legacy
|
|
1194
|
+
# callers (no runtime) publish exactly as before — no broker kwargs.
|
|
1195
|
+
if coordinator_runtime is not None:
|
|
1196
|
+
publish_kwargs["broker_client"] = coordinator_runtime.broker_client
|
|
1197
|
+
publish_kwargs["admission"] = admission_fn(
|
|
1198
|
+
coordinator_runtime, node, workspace, owned_paths
|
|
1199
|
+
)
|
|
1200
|
+
publish_result = publish_fn(
|
|
1201
|
+
workspace,
|
|
1202
|
+
owned_paths,
|
|
1203
|
+
**publish_kwargs,
|
|
1059
1204
|
)
|
|
1060
|
-
publish_result = publish_fn(
|
|
1061
|
-
workspace,
|
|
1062
|
-
owned_paths,
|
|
1063
|
-
**publish_kwargs,
|
|
1064
|
-
)
|
|
1065
1205
|
|
|
1066
1206
|
except Exception as exc:
|
|
1067
1207
|
# Inject or run_loop or publish raised — mark blocked so the node
|
{phase_loop_runtime-0.7.6 → phase_loop_runtime-0.7.7}/src/phase_loop_runtime.egg-info/SOURCES.txt
RENAMED
|
@@ -752,6 +752,7 @@ tests/test_train_e2e.py
|
|
|
752
752
|
tests/test_train_invariants.py
|
|
753
753
|
tests/test_train_merge.py
|
|
754
754
|
tests/test_train_order_only_deps_47.py
|
|
755
|
+
tests/test_train_prebuilt.py
|
|
755
756
|
tests/test_train_roadmap.py
|
|
756
757
|
tests/test_train_runner.py
|
|
757
758
|
tests/test_unattended_release.py
|