phase-loop-runtime 0.7.7__tar.gz → 0.7.9__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.7 → phase_loop_runtime-0.7.9}/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cli.py +31 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/__init__.py +2 -2
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/credsep.py +8 -1
- phase_loop_runtime-0.7.9/src/phase_loop_runtime/convergence/broker/live.py +187 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/gemini-execute-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/claude-execute-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/gemini-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/claude-plan-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/opencode-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/codex-plan-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/opencode-execute-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/gemini-execute-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/codex-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/gemini-plan-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/claude-execute-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/opencode-execute-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7/src/phase_loop_runtime/skills_bundle/claude-plan-phase → phase_loop_runtime-0.7.9/src/phase_loop_runtime/skills_bundle/opencode-plan-phase}/scripts/validate_plan_doc.py +31 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/SOURCES.txt +2 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_credsep.py +21 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_live_enable.py +137 -1
- phase_loop_runtime-0.7.9/tests/test_specpkgmin_wheel.py +99 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_runner.py +61 -0
- phase_loop_runtime-0.7.9/tests/test_validate_plan_doc_producer_dependency.py +128 -0
- phase_loop_runtime-0.7.7/src/phase_loop_runtime/convergence/broker/live.py +0 -82
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/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.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/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.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.7 → phase_loop_runtime-0.7.9}/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.9"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -2934,11 +2934,42 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
|
|
|
2934
2934
|
|
|
2935
2935
|
as_json = bool(getattr(args, "json", False))
|
|
2936
2936
|
|
|
2937
|
+
# Build a broker-authoritative coordinator runtime so publish actually opens PRs.
|
|
2938
|
+
# Without a broker_client, publish_from_worktree fail-closes `broker_required` and
|
|
2939
|
+
# the train opens ZERO PRs. The routing broker binds per BrokerRequest.repo (the
|
|
2940
|
+
# node's resolved workspace) AND keeps a PER-REPO admission/evidence store, so one
|
|
2941
|
+
# node's ambiguous outcome fail-closes only that repo. The broker root is namespaced
|
|
2942
|
+
# by the roadmap's RESOLVED PATH hash (not the bare filename stem): two distinct
|
|
2943
|
+
# roadmap files — even same-stemmed, even under one explicit `--ledger-dir` — get
|
|
2944
|
+
# distinct broker roots, so an ambiguous outcome in one train can never fail-close a
|
|
2945
|
+
# different train. Keying on the stable path (not the content digest) keeps a
|
|
2946
|
+
# resumed train on its own epoch across roadmap edits. It lives under the ledger dir,
|
|
2947
|
+
# which the roadmap author keeps outside any repo's .phase-loop/ (INV-4); it is NOT
|
|
2948
|
+
# machine-enforced to be outside every node worktree, so keep train roadmaps + their
|
|
2949
|
+
# ledger dir out of the checkouts.
|
|
2950
|
+
import hashlib
|
|
2951
|
+
|
|
2952
|
+
from .convergence.broker import build_routing_broker_client
|
|
2953
|
+
|
|
2954
|
+
train_key = hashlib.sha256(str(train_path.resolve()).encode("utf-8")).hexdigest()[:16]
|
|
2955
|
+
coordinator_root = ledger_dir / "broker" / train_key
|
|
2956
|
+
coordinator_root.mkdir(parents=True, exist_ok=True)
|
|
2957
|
+
roadmap_digest = hashlib.sha256(train_path.read_bytes()).hexdigest()
|
|
2958
|
+
coordinator_runtime = train_runner.CoordinatorRuntime(
|
|
2959
|
+
train_id=train_path.stem,
|
|
2960
|
+
coordinator_root=coordinator_root,
|
|
2961
|
+
roadmap_path=str(train_path),
|
|
2962
|
+
roadmap_digest=roadmap_digest,
|
|
2963
|
+
workspace_id=train_path.stem,
|
|
2964
|
+
broker_client=build_routing_broker_client(broker_root=coordinator_root),
|
|
2965
|
+
)
|
|
2966
|
+
|
|
2937
2967
|
result = train_runner.run_train(
|
|
2938
2968
|
roadmap,
|
|
2939
2969
|
ledger_path,
|
|
2940
2970
|
run_mode=run_mode,
|
|
2941
2971
|
resolve_workspace=_resolve_workspace,
|
|
2972
|
+
coordinator_runtime=coordinator_runtime,
|
|
2942
2973
|
_merge_phase_enabled=True, # P4 gate: autonomous→drafts_open, governed→merge
|
|
2943
2974
|
)
|
|
2944
2975
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
from .admission import AdmissionRecord, BrokerAdmissionPolicy, LinearizableAdmissionStore
|
|
3
3
|
from .credsep import BrokerEnvironmentBoundary, GitHubBrokerAdapter
|
|
4
4
|
from .evidence import BrokerEvidenceStore, EvidenceRecord
|
|
5
|
-
from .live import build_github_broker_client
|
|
5
|
+
from .live import build_github_broker_client, build_routing_broker_client
|
|
6
6
|
from .verbs import BrokerClient, BrokerExecutionResult, BrokerProviderAdapter, BrokerService, publish_committed_branch_idempotency_key
|
|
7
|
-
__all__ = ["AdmissionRecord", "BrokerAdmissionPolicy", "LinearizableAdmissionStore", "BrokerEnvironmentBoundary", "GitHubBrokerAdapter", "BrokerEvidenceStore", "EvidenceRecord", "BrokerClient", "BrokerExecutionResult", "BrokerProviderAdapter", "BrokerService", "build_github_broker_client", "publish_committed_branch_idempotency_key"]
|
|
7
|
+
__all__ = ["AdmissionRecord", "BrokerAdmissionPolicy", "LinearizableAdmissionStore", "BrokerEnvironmentBoundary", "GitHubBrokerAdapter", "BrokerEvidenceStore", "EvidenceRecord", "BrokerClient", "BrokerExecutionResult", "BrokerProviderAdapter", "BrokerService", "build_github_broker_client", "build_routing_broker_client", "publish_committed_branch_idempotency_key"]
|
|
@@ -98,7 +98,14 @@ class GitHubBrokerAdapter:
|
|
|
98
98
|
# so remote.origin.pushurl / url.*.pushInsteadOf cannot redirect the mutation.
|
|
99
99
|
pushed = self.run(["git", "-C", str(self.repo_path), "push", origin_url, ref], capture_output=True, text=True)
|
|
100
100
|
if pushed.returncode: return self._ambiguous(request, "push-unconfirmed")
|
|
101
|
-
|
|
101
|
+
# `gh pr create` REQUIRES --title (+ --body) when non-interactive; the bare
|
|
102
|
+
# `--draft`/`--fill` form aborts headless ("must provide --title and --body").
|
|
103
|
+
# Derive a deterministic title from the branch HEAD's commit subject and pass
|
|
104
|
+
# the request's pr_body verbatim (empty body is valid once --title is present).
|
|
105
|
+
# --head pins the branch explicitly so gh never infers a wrong head.
|
|
106
|
+
title = self._output("log", "-1", "--format=%s") or request.branch
|
|
107
|
+
args = ["gh", "pr", "create", "--repo", origin_repo, "--head", request.branch, "--title", title, "--body", request.pr_body or title]
|
|
108
|
+
if request.draft: args.append("--draft")
|
|
102
109
|
created = self.run(args, cwd=self.repo_path, capture_output=True, text=True)
|
|
103
110
|
if created.returncode: return self._ambiguous(request, "pr-unconfirmed")
|
|
104
111
|
# Exact-published-head verification: READ the remote and confirm the branch
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"""Opt-in construction of a live, credential-capable GitHub broker client.
|
|
2
|
+
|
|
3
|
+
This is the *only* helper that assembles a broker able to perform a real GitHub
|
|
4
|
+
mutation. It is never auto-instantiated: legacy ``run_train`` callers that pass
|
|
5
|
+
no ``coordinator_runtime`` (or a runtime with ``broker_client=None``) publish
|
|
6
|
+
exactly as before. A caller wanting broker-mediated publication builds a client
|
|
7
|
+
here and attaches it to :class:`CoordinatorRuntime.broker_client`.
|
|
8
|
+
|
|
9
|
+
The wired client enforces every already-merged safety property: linearizable
|
|
10
|
+
admission, permanent fail-closed ``outcome_ambiguous_blocked`` evidence, canonical
|
|
11
|
+
``(repo, branch, head_sha)`` idempotency, and the adapter's exact-published-head
|
|
12
|
+
verification. Only the ``publish_committed_branch``/``github`` verb is SUPPORTED
|
|
13
|
+
(see ``provider_contracts``); the service refuses every other verb.
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import hashlib
|
|
18
|
+
import subprocess
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from typing import Callable
|
|
21
|
+
|
|
22
|
+
from phase_loop_runtime.convergence.contracts import AdmissionRequest
|
|
23
|
+
from phase_loop_runtime.convergence.provider_contracts import PROVIDER_COMPLETION_CLASSIFICATIONS
|
|
24
|
+
|
|
25
|
+
from .admission import BrokerAdmissionPolicy, LinearizableAdmissionStore
|
|
26
|
+
from .credsep import ALLOWED_ORIGIN_HOSTS, GitHubBrokerAdapter
|
|
27
|
+
from .evidence import BrokerEvidenceStore
|
|
28
|
+
from .verbs import BrokerClient, BrokerService
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _default_admission_policy(_request: AdmissionRequest) -> bool:
|
|
32
|
+
"""Admit any structurally-valid admission request.
|
|
33
|
+
|
|
34
|
+
``AdmissionRequest.__post_init__`` already rejects a request missing any
|
|
35
|
+
fencing field, so a request that reaches the policy is well-formed. Epoch
|
|
36
|
+
staleness and idempotency-key conflicts are enforced inside
|
|
37
|
+
``LinearizableAdmissionStore.admit`` regardless of this policy.
|
|
38
|
+
"""
|
|
39
|
+
return True
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def build_github_broker_client(
|
|
43
|
+
repo_path: Path,
|
|
44
|
+
*,
|
|
45
|
+
broker_root: Path,
|
|
46
|
+
admission_policy: BrokerAdmissionPolicy | None = None,
|
|
47
|
+
run: Callable[..., subprocess.CompletedProcess] = subprocess.run,
|
|
48
|
+
) -> BrokerClient:
|
|
49
|
+
"""Wire a live GitHub broker client.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
repo_path:
|
|
54
|
+
Worktree the :class:`GitHubBrokerAdapter` runs git/gh against.
|
|
55
|
+
broker_root:
|
|
56
|
+
Durable directory for the admission log + terminal-evidence log. MUST
|
|
57
|
+
live OUTSIDE ``repo_path`` (e.g. ``CoordinatorRuntime.coordinator_root``)
|
|
58
|
+
so broker state never dirties the worktree being published — a dirty
|
|
59
|
+
worktree trips the publish staged-diff audit and the train clean-worktree
|
|
60
|
+
preflight.
|
|
61
|
+
admission_policy:
|
|
62
|
+
Optional admission gate; defaults to admitting any well-formed request.
|
|
63
|
+
run:
|
|
64
|
+
Injectable subprocess runner (tests pass a fake to mock the git/gh seam).
|
|
65
|
+
|
|
66
|
+
Returns
|
|
67
|
+
-------
|
|
68
|
+
BrokerClient
|
|
69
|
+
A :class:`BrokerService` bound to the global (verb-gated) contracts, so
|
|
70
|
+
only ``publish_committed_branch``/``github`` can execute.
|
|
71
|
+
"""
|
|
72
|
+
admission_store = LinearizableAdmissionStore(
|
|
73
|
+
Path(broker_root),
|
|
74
|
+
admission_policy or _default_admission_policy,
|
|
75
|
+
)
|
|
76
|
+
evidence_store = BrokerEvidenceStore(Path(broker_root))
|
|
77
|
+
adapter = GitHubBrokerAdapter(Path(repo_path), run=run)
|
|
78
|
+
return BrokerService(
|
|
79
|
+
admission_store,
|
|
80
|
+
evidence_store,
|
|
81
|
+
adapter,
|
|
82
|
+
contracts=PROVIDER_COMPLETION_CLASSIFICATIONS,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _repo_store_slug(repo: str) -> str:
|
|
87
|
+
"""Stable, filesystem-safe subdir name for a repo's per-repo broker store.
|
|
88
|
+
|
|
89
|
+
``BrokerRequest.repo`` is an arbitrary absolute workspace path, so hash it rather
|
|
90
|
+
than embed the path. A short hex prefix is collision-free in practice and keeps
|
|
91
|
+
the on-disk layout readable.
|
|
92
|
+
"""
|
|
93
|
+
return hashlib.sha256(repo.encode("utf-8")).hexdigest()[:16]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class _RoutingBrokerService:
|
|
97
|
+
"""A :class:`BrokerClient` that routes each request to a PER-REPO broker service.
|
|
98
|
+
|
|
99
|
+
``build_github_broker_client`` fixes ONE ``repo_path`` at construction, so a single
|
|
100
|
+
client can only faithfully serve one repo — a multi-repo ``run_train`` threading one
|
|
101
|
+
``coordinator_runtime.broker_client`` across every node would run
|
|
102
|
+
``git -C <wrong-repo>`` and trip the branch/head guard on node 2+.
|
|
103
|
+
|
|
104
|
+
Critically, each repo gets its OWN admission + evidence store under
|
|
105
|
+
``broker_root/<repo-slug>`` — the stores are NOT shared. ``epoch_blocked`` is a
|
|
106
|
+
GLOBAL scan over a store (``any(state is OUTCOME_AMBIGUOUS_BLOCKED)``) and an
|
|
107
|
+
ambiguous terminal is durable + permanent, and it fires on BENIGN transients
|
|
108
|
+
(push-unconfirmed / remote-read-failed / pr-unconfirmed / remote-head-mismatch /
|
|
109
|
+
pr-head-unconfirmed). A shared store would therefore let one repo's transient
|
|
110
|
+
hiccup permanently fail-close every OTHER repo in the train (and, with an
|
|
111
|
+
un-namespaced ``broker_root``, other trains too). Per-repo stores scope the
|
|
112
|
+
fail-closed epoch to exactly the repo whose mutation became ambiguous — the correct
|
|
113
|
+
blast radius: repo A's unknown state says nothing about repo B's independent remote.
|
|
114
|
+
The caller namespaces ``broker_root`` per train (see the ``run-train`` CLI), closing
|
|
115
|
+
the cross-train dimension.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
def __init__(
|
|
119
|
+
self,
|
|
120
|
+
broker_root: Path,
|
|
121
|
+
*,
|
|
122
|
+
admission_policy: BrokerAdmissionPolicy,
|
|
123
|
+
run: Callable[..., subprocess.CompletedProcess],
|
|
124
|
+
allowed_hosts,
|
|
125
|
+
contracts=PROVIDER_COMPLETION_CLASSIFICATIONS,
|
|
126
|
+
) -> None:
|
|
127
|
+
self._broker_root = Path(broker_root)
|
|
128
|
+
self._admission_policy = admission_policy
|
|
129
|
+
self._run = run
|
|
130
|
+
self._allowed_hosts = allowed_hosts
|
|
131
|
+
self._contracts = contracts
|
|
132
|
+
self._services: dict[str, BrokerService] = {}
|
|
133
|
+
|
|
134
|
+
def _service_for(self, repo: str) -> BrokerService:
|
|
135
|
+
service = self._services.get(repo)
|
|
136
|
+
if service is None:
|
|
137
|
+
root = self._broker_root / _repo_store_slug(repo)
|
|
138
|
+
service = BrokerService(
|
|
139
|
+
LinearizableAdmissionStore(root, self._admission_policy),
|
|
140
|
+
BrokerEvidenceStore(root),
|
|
141
|
+
GitHubBrokerAdapter(Path(repo), run=self._run, allowed_hosts=self._allowed_hosts),
|
|
142
|
+
contracts=self._contracts,
|
|
143
|
+
)
|
|
144
|
+
self._services[repo] = service
|
|
145
|
+
return service
|
|
146
|
+
|
|
147
|
+
def execute(self, request):
|
|
148
|
+
return self._service_for(request.repo).execute(request)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def build_routing_broker_client(
|
|
152
|
+
*,
|
|
153
|
+
broker_root: Path,
|
|
154
|
+
admission_policy: BrokerAdmissionPolicy | None = None,
|
|
155
|
+
run: Callable[..., subprocess.CompletedProcess] = subprocess.run,
|
|
156
|
+
allowed_hosts=ALLOWED_ORIGIN_HOSTS,
|
|
157
|
+
) -> BrokerClient:
|
|
158
|
+
"""Wire a live GitHub broker client that serves a MULTI-repo train.
|
|
159
|
+
|
|
160
|
+
Like :func:`build_github_broker_client` but routes per ``BrokerRequest.repo``: the
|
|
161
|
+
git/gh adapter is bound to the request's repo, AND each repo gets its own admission
|
|
162
|
+
+ evidence store under ``broker_root/<repo-slug>``. Per-repo stores are load-bearing
|
|
163
|
+
for safety, not just routing — a shared store's GLOBAL ``epoch_blocked`` would let one
|
|
164
|
+
repo's ambiguous outcome (reachable via a benign transient) permanently fail-close
|
|
165
|
+
every other repo. See :class:`_RoutingBrokerService`.
|
|
166
|
+
|
|
167
|
+
Parameters
|
|
168
|
+
----------
|
|
169
|
+
broker_root:
|
|
170
|
+
Durable parent directory for the per-repo admission + evidence stores. MUST
|
|
171
|
+
live OUTSIDE every node's worktree, and the caller SHOULD namespace it per train
|
|
172
|
+
(e.g. ``<ledger-dir>/broker/<train-stem>``) so unrelated trains never share an
|
|
173
|
+
epoch.
|
|
174
|
+
admission_policy:
|
|
175
|
+
Optional admission gate; defaults to admitting any well-formed request.
|
|
176
|
+
run:
|
|
177
|
+
Injectable subprocess runner (tests pass a fake to mock the git/gh seam).
|
|
178
|
+
allowed_hosts:
|
|
179
|
+
Origin-host allow-list applied to every per-request adapter (github.com-only
|
|
180
|
+
by default); a self-hosted/GHE fleet passes its own set.
|
|
181
|
+
"""
|
|
182
|
+
return _RoutingBrokerService(
|
|
183
|
+
Path(broker_root),
|
|
184
|
+
admission_policy=admission_policy or _default_admission_policy,
|
|
185
|
+
run=run,
|
|
186
|
+
allowed_hosts=allowed_hosts,
|
|
187
|
+
)
|
|
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
|
|
|
477
477
|
return out
|
|
478
478
|
|
|
479
479
|
|
|
480
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
481
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
482
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
483
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
484
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
485
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
486
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
487
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
488
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
489
|
+
agent-harness#182."""
|
|
490
|
+
try:
|
|
491
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
492
|
+
except Exception:
|
|
493
|
+
return []
|
|
494
|
+
try:
|
|
495
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
496
|
+
except Exception:
|
|
497
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
498
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
499
|
+
return []
|
|
500
|
+
out: Findings = []
|
|
501
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
502
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
503
|
+
out.append(
|
|
504
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
505
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
506
|
+
)
|
|
507
|
+
return out
|
|
508
|
+
|
|
509
|
+
|
|
480
510
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
481
511
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
482
512
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
|
|
|
613
643
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
614
644
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
615
645
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
646
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
616
647
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
617
648
|
findings.extend(_check_h_eager_reexport(src))
|
|
618
649
|
|
|
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
|
|
|
560
560
|
return out
|
|
561
561
|
|
|
562
562
|
|
|
563
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
564
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
565
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
566
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
567
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
568
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
569
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
570
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
571
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
572
|
+
agent-harness#182."""
|
|
573
|
+
try:
|
|
574
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
575
|
+
except Exception:
|
|
576
|
+
return []
|
|
577
|
+
try:
|
|
578
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
579
|
+
except Exception:
|
|
580
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
581
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
582
|
+
return []
|
|
583
|
+
out: Findings = []
|
|
584
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
585
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
586
|
+
out.append(
|
|
587
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
588
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
589
|
+
)
|
|
590
|
+
return out
|
|
591
|
+
|
|
592
|
+
|
|
563
593
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
564
594
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
565
595
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
|
|
|
1057
1087
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
1058
1088
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
1059
1089
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
1090
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
1060
1091
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
1061
1092
|
findings.extend(_check_h_eager_reexport(src))
|
|
1062
1093
|
findings.extend(_check_i_spec_closeout_plan(src))
|
|
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
|
|
|
477
477
|
return out
|
|
478
478
|
|
|
479
479
|
|
|
480
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
481
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
482
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
483
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
484
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
485
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
486
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
487
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
488
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
489
|
+
agent-harness#182."""
|
|
490
|
+
try:
|
|
491
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
492
|
+
except Exception:
|
|
493
|
+
return []
|
|
494
|
+
try:
|
|
495
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
496
|
+
except Exception:
|
|
497
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
498
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
499
|
+
return []
|
|
500
|
+
out: Findings = []
|
|
501
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
502
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
503
|
+
out.append(
|
|
504
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
505
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
506
|
+
)
|
|
507
|
+
return out
|
|
508
|
+
|
|
509
|
+
|
|
480
510
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
481
511
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
482
512
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
|
|
|
613
643
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
614
644
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
615
645
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
646
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
616
647
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
617
648
|
findings.extend(_check_h_eager_reexport(src))
|
|
618
649
|
|
|
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
|
|
|
560
560
|
return out
|
|
561
561
|
|
|
562
562
|
|
|
563
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
564
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
565
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
566
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
567
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
568
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
569
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
570
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
571
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
572
|
+
agent-harness#182."""
|
|
573
|
+
try:
|
|
574
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
575
|
+
except Exception:
|
|
576
|
+
return []
|
|
577
|
+
try:
|
|
578
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
579
|
+
except Exception:
|
|
580
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
581
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
582
|
+
return []
|
|
583
|
+
out: Findings = []
|
|
584
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
585
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
586
|
+
out.append(
|
|
587
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
588
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
589
|
+
)
|
|
590
|
+
return out
|
|
591
|
+
|
|
592
|
+
|
|
563
593
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
564
594
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
565
595
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
|
|
|
1057
1087
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
1058
1088
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
1059
1089
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
1090
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
1060
1091
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
1061
1092
|
findings.extend(_check_h_eager_reexport(src))
|
|
1062
1093
|
findings.extend(_check_i_spec_closeout_plan(src))
|
|
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
|
|
|
477
477
|
return out
|
|
478
478
|
|
|
479
479
|
|
|
480
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
481
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
482
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
483
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
484
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
485
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
486
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
487
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
488
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
489
|
+
agent-harness#182."""
|
|
490
|
+
try:
|
|
491
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
492
|
+
except Exception:
|
|
493
|
+
return []
|
|
494
|
+
try:
|
|
495
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
496
|
+
except Exception:
|
|
497
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
498
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
499
|
+
return []
|
|
500
|
+
out: Findings = []
|
|
501
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
502
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
503
|
+
out.append(
|
|
504
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
505
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
506
|
+
)
|
|
507
|
+
return out
|
|
508
|
+
|
|
509
|
+
|
|
480
510
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
481
511
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
482
512
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
|
|
|
613
643
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
614
644
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
615
645
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
646
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
616
647
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
617
648
|
findings.extend(_check_h_eager_reexport(src))
|
|
618
649
|
|
|
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
|
|
|
560
560
|
return out
|
|
561
561
|
|
|
562
562
|
|
|
563
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
564
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
565
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
566
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
567
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
568
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
569
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
570
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
571
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
572
|
+
agent-harness#182."""
|
|
573
|
+
try:
|
|
574
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
575
|
+
except Exception:
|
|
576
|
+
return []
|
|
577
|
+
try:
|
|
578
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
579
|
+
except Exception:
|
|
580
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
581
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
582
|
+
return []
|
|
583
|
+
out: Findings = []
|
|
584
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
585
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
586
|
+
out.append(
|
|
587
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
588
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
589
|
+
)
|
|
590
|
+
return out
|
|
591
|
+
|
|
592
|
+
|
|
563
593
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
564
594
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
565
595
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
|
|
|
1057
1087
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
1058
1088
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
1059
1089
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
1090
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
1060
1091
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
1061
1092
|
findings.extend(_check_h_eager_reexport(src))
|
|
1062
1093
|
findings.extend(_check_i_spec_closeout_plan(src))
|
|
@@ -477,6 +477,36 @@ def _check_f_interfaces_trace(
|
|
|
477
477
|
return out
|
|
478
478
|
|
|
479
479
|
|
|
480
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
481
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
482
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
483
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
484
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
485
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
486
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
487
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
488
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
489
|
+
agent-harness#182."""
|
|
490
|
+
try:
|
|
491
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
492
|
+
except Exception:
|
|
493
|
+
return []
|
|
494
|
+
try:
|
|
495
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
496
|
+
except Exception:
|
|
497
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
498
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
499
|
+
return []
|
|
500
|
+
out: Findings = []
|
|
501
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
502
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
503
|
+
out.append(
|
|
504
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
505
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
506
|
+
)
|
|
507
|
+
return out
|
|
508
|
+
|
|
509
|
+
|
|
480
510
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
481
511
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
482
512
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -613,6 +643,7 @@ def main(argv: List[str]) -> int:
|
|
|
613
643
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
614
644
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
615
645
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
646
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
616
647
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
617
648
|
findings.extend(_check_h_eager_reexport(src))
|
|
618
649
|
|
|
@@ -560,6 +560,36 @@ def _check_f_interfaces_trace(
|
|
|
560
560
|
return out
|
|
561
561
|
|
|
562
562
|
|
|
563
|
+
def _check_o_producer_dependency(plan_path: Path) -> Findings:
|
|
564
|
+
"""(O) A lane consuming an interface PROVIDED by another in-plan lane must depend on
|
|
565
|
+
that lane directly. Rather than REIMPLEMENT the parse + interface identity (which
|
|
566
|
+
reintroduces the very validator-vs-runtime divergence this closes — different lane
|
|
567
|
+
parsers and a normalized vs exact-string interface identity), DELEGATE to the runtime
|
|
568
|
+
lane IR (`phase_loop_runtime.plan_ir`) — the single source of truth the scheduler
|
|
569
|
+
fails closed on with `missing_producer_dependency`. Parity is then true by
|
|
570
|
+
construction. If the runtime is not importable at plan time, skip: the execute-time
|
|
571
|
+
lane IR still enforces the contract (no regression, and no divergent pre-warn).
|
|
572
|
+
agent-harness#182."""
|
|
573
|
+
try:
|
|
574
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
575
|
+
except Exception:
|
|
576
|
+
return []
|
|
577
|
+
try:
|
|
578
|
+
ir = parse_phase_plan_ir(Path(plan_path))
|
|
579
|
+
except Exception:
|
|
580
|
+
# Parse/format errors are other checks' domain (A/B/C); (O) only speaks to the
|
|
581
|
+
# producer-dependency edge and stays silent when the plan cannot be parsed.
|
|
582
|
+
return []
|
|
583
|
+
out: Findings = []
|
|
584
|
+
for diag in getattr(ir, "diagnostics", ()): # LaneIRDiagnostic
|
|
585
|
+
if getattr(diag, "kind", "") == "missing_producer_dependency":
|
|
586
|
+
out.append(
|
|
587
|
+
f"(O) {diag.message} — add the producer to the consumer's `Depends on` "
|
|
588
|
+
f"(the lane IR fails closed with missing_producer_dependency at execute time)"
|
|
589
|
+
)
|
|
590
|
+
return out
|
|
591
|
+
|
|
592
|
+
|
|
563
593
|
def _check_g_grep_paired_with_tests(src: str) -> Findings:
|
|
564
594
|
"""Every acceptance criterion that uses `rg`/`grep` as its sole assertion
|
|
565
595
|
must cite a test file in the same bullet. A bare grep is defeatable by
|
|
@@ -1057,6 +1087,7 @@ def main(argv: List[str]) -> int:
|
|
|
1057
1087
|
findings.extend(_check_d_owned_files_disjoint(lane_sections_parsed, repo_root))
|
|
1058
1088
|
findings.extend(_check_e_test_before_impl(lane_sections_parsed))
|
|
1059
1089
|
findings.extend(_check_f_interfaces_trace(lane_sections_parsed, lane_sections_raw))
|
|
1090
|
+
findings.extend(_check_o_producer_dependency(path))
|
|
1060
1091
|
findings.extend(_check_g_grep_paired_with_tests(src))
|
|
1061
1092
|
findings.extend(_check_h_eager_reexport(src))
|
|
1062
1093
|
findings.extend(_check_i_spec_closeout_plan(src))
|