phase-loop-runtime 0.7.8__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.8 → phase_loop_runtime-0.7.9}/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.8/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.8/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.8 → 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.8/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.8/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.8/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.8/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.8/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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
- phase_loop_runtime-0.7.9/tests/test_validate_plan_doc_producer_dependency.py +128 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → 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.8 → 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.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.8 → 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.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.8 → 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"
|
|
@@ -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))
|
{phase_loop_runtime-0.7.8 → phase_loop_runtime-0.7.9}/src/phase_loop_runtime.egg-info/SOURCES.txt
RENAMED
|
@@ -759,6 +759,7 @@ tests/test_train_runner.py
|
|
|
759
759
|
tests/test_unattended_release.py
|
|
760
760
|
tests/test_v34_parallel_dispatch_soak.py
|
|
761
761
|
tests/test_validate_plan_doc_docs_lane.py
|
|
762
|
+
tests/test_validate_plan_doc_producer_dependency.py
|
|
762
763
|
tests/test_verification_evidence.py
|
|
763
764
|
tests/test_verification_evidence_validator.py
|
|
764
765
|
tests/test_visual_evidence_validator.py
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""agent-harness#182 — validate_plan_doc.py (O) producer-dependency check == runtime.
|
|
2
|
+
|
|
3
|
+
The runtime lane IR (`phase_loop_runtime.plan_ir`) fails closed with
|
|
4
|
+
`missing_producer_dependency` at execute time when a lane consumes an interface provided
|
|
5
|
+
by another in-plan lane it does not depend on directly. The plan validator's `(O)` check
|
|
6
|
+
must enforce the SAME contract at plan time. To guarantee that — and to avoid re-creating
|
|
7
|
+
the very validator-vs-runtime divergence #182 is about — `(O)` DELEGATES to `plan_ir`.
|
|
8
|
+
These tests pin the behaviour AND the parity, including the exact-string interface
|
|
9
|
+
identity (so `IFoo` vs `IFoo (v2)` does NOT false-positive the way a normalized
|
|
10
|
+
reimplementation would).
|
|
11
|
+
"""
|
|
12
|
+
import importlib.util
|
|
13
|
+
import sys
|
|
14
|
+
import textwrap
|
|
15
|
+
import unittest
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
import pytest
|
|
19
|
+
|
|
20
|
+
from _dotfiles_tree import skills_bundle_present
|
|
21
|
+
from phase_loop_runtime.plan_ir import parse_phase_plan_ir
|
|
22
|
+
|
|
23
|
+
if not skills_bundle_present():
|
|
24
|
+
pytest.skip(
|
|
25
|
+
"requires the sibling phase-loop-skills bundle (absent in the standalone-from-wheel clean-room)",
|
|
26
|
+
allow_module_level=True,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
ROOT = Path(__file__).resolve().parents[2]
|
|
30
|
+
SCRIPT = ROOT / "phase-loop-skills" / "plan-phase" / "scripts" / "validate_plan_doc.py"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _load():
|
|
34
|
+
spec = importlib.util.spec_from_file_location("validate_plan_doc_prod_dep_under_test", SCRIPT)
|
|
35
|
+
mod = importlib.util.module_from_spec(spec)
|
|
36
|
+
sys.modules[spec.name] = mod # dataclasses resolve annotations via sys.modules
|
|
37
|
+
spec.loader.exec_module(mod)
|
|
38
|
+
return mod
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _plan(consumed: str, sl2_depends: str) -> str:
|
|
42
|
+
"""A 3-lane plan: SL-0 provides `IFoo`; SL-2 consumes `consumed` and depends on
|
|
43
|
+
`sl2_depends`. Empty interface lists are OMITTED (the runtime parses a literal
|
|
44
|
+
`(none)` as an interface token). The runtime tolerates the ASCII hyphen in the
|
|
45
|
+
SL heading."""
|
|
46
|
+
return textwrap.dedent(
|
|
47
|
+
f"""\
|
|
48
|
+
## Lane Index
|
|
49
|
+
|
|
50
|
+
- SL-0 — Provider; Depends on: (none)
|
|
51
|
+
- SL-1 — Middle; Depends on: SL-0
|
|
52
|
+
- SL-2 — Consumer; Depends on: {sl2_depends}
|
|
53
|
+
|
|
54
|
+
## Lanes
|
|
55
|
+
|
|
56
|
+
### SL-0 - Provider
|
|
57
|
+
|
|
58
|
+
- **Owned files**: `src/foo.py`
|
|
59
|
+
- **Interfaces provided**: `IFoo`
|
|
60
|
+
|
|
61
|
+
### SL-1 - Middle
|
|
62
|
+
|
|
63
|
+
- **Owned files**: `src/mid.py`
|
|
64
|
+
|
|
65
|
+
### SL-2 - Consumer
|
|
66
|
+
|
|
67
|
+
- **Owned files**: `src/consumer.py`
|
|
68
|
+
- **Interfaces consumed**: {consumed}
|
|
69
|
+
"""
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _runtime_missing(path: Path):
|
|
74
|
+
return [d for d in parse_phase_plan_ir(path).diagnostics if d.kind == "missing_producer_dependency"]
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class ProducerDependencyParityTest(unittest.TestCase):
|
|
78
|
+
@classmethod
|
|
79
|
+
def setUpClass(cls):
|
|
80
|
+
cls.mod = _load()
|
|
81
|
+
|
|
82
|
+
def _write(self, tmp: Path, text: str) -> Path:
|
|
83
|
+
p = tmp / "plan.md"
|
|
84
|
+
p.write_text(text, encoding="utf-8")
|
|
85
|
+
return p
|
|
86
|
+
|
|
87
|
+
def test_flags_missing_direct_producer_edge_matching_runtime(self):
|
|
88
|
+
import tempfile
|
|
89
|
+
with tempfile.TemporaryDirectory() as d:
|
|
90
|
+
path = self._write(Path(d), _plan(consumed="`IFoo`", sl2_depends="SL-1"))
|
|
91
|
+
runtime = _runtime_missing(path)
|
|
92
|
+
self.assertTrue(runtime, "fixture must trigger the runtime diagnostic (self-check)")
|
|
93
|
+
findings = self.mod._check_o_producer_dependency(path)
|
|
94
|
+
self.assertEqual(len(findings), len(runtime), findings)
|
|
95
|
+
self.assertTrue(any("SL-2" in f for f in findings), findings)
|
|
96
|
+
self.assertTrue(all("WARN" not in f for f in findings)) # ERROR, not advice
|
|
97
|
+
|
|
98
|
+
def test_clean_when_direct_edge_present_matching_runtime(self):
|
|
99
|
+
import tempfile
|
|
100
|
+
with tempfile.TemporaryDirectory() as d:
|
|
101
|
+
path = self._write(Path(d), _plan(consumed="`IFoo`", sl2_depends="SL-0"))
|
|
102
|
+
self.assertEqual(_runtime_missing(path), [], "runtime should accept the direct edge")
|
|
103
|
+
self.assertEqual(self.mod._check_o_producer_dependency(path), [])
|
|
104
|
+
|
|
105
|
+
def test_annotated_interface_is_exact_string_not_normalized(self):
|
|
106
|
+
# The CR's false-positive case: provide `IFoo`, consume `IFoo (v2)` with NO direct
|
|
107
|
+
# edge. The runtime matches interfaces by EXACT string, so `IFoo` != `IFoo (v2)` →
|
|
108
|
+
# no in-plan producer → runtime ACCEPTS. A normalized reimplementation would strip
|
|
109
|
+
# `(v2)` and wrongly ERROR. (O) must match the runtime: no finding.
|
|
110
|
+
import tempfile
|
|
111
|
+
with tempfile.TemporaryDirectory() as d:
|
|
112
|
+
path = self._write(Path(d), _plan(consumed="`IFoo (v2)`", sl2_depends="SL-1"))
|
|
113
|
+
self.assertEqual(_runtime_missing(path), [], "runtime treats IFoo and IFoo (v2) as distinct")
|
|
114
|
+
self.assertEqual(
|
|
115
|
+
self.mod._check_o_producer_dependency(path), [],
|
|
116
|
+
"(O) must not false-positive on an annotated interface (exact-string identity)",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
def test_skips_gracefully_when_plan_unparseable(self):
|
|
120
|
+
import tempfile
|
|
121
|
+
with tempfile.TemporaryDirectory() as d:
|
|
122
|
+
path = self._write(Path(d), "not a plan\n")
|
|
123
|
+
# No lanes → no producer edges → no (O) findings (A/B own the parse errors).
|
|
124
|
+
self.assertEqual(self.mod._check_o_producer_dependency(path), [])
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
if __name__ == "__main__":
|
|
128
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|