phase-loop-runtime 0.7.18__tar.gz → 0.7.19__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.18 → phase_loop_runtime-0.7.19}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/README.md +1 -1
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +2 -2
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_classifier.py +20 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gemini_heartbeat.py +2 -2
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/panel_invoker.py +211 -16
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_runner.py +9 -3
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_classifier.py +34 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_legible_roadmap_contract.py +6 -6
- phase_loop_runtime-0.7.19/tests/test_panel_claude_review_output.py +775 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_president_heartbeat_1001.py +188 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_qualify_network_owner.py +39 -5
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_prebuilt.py +2 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_review_monitoring_policy.py +46 -4
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_review_packet.py +65 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/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.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/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.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/president_adapter.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/president_operation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/review_stage.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_static_import_862.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_chronology_scope.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_offload_lock.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_quarantine.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_xdist_adoption.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ci_xdist_witness.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_conform_timing_instrumentation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_conftest_isolation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_execfind_falsifier.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_executor_exited_without_closeout_785.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_activation_promotion.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_delta_consumer.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_admission_compat_789.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_partition_rotation_789d.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_frozen_blob_batch_parse.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_gate_fail_open_visibility.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_gemini_heartbeat_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_skill_policy_parity.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_harden_evidence_producer.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_harden_evidence_verifier.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_local_check.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_model_tier_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_native_claude_seat_fill.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_owned_command_procfs_1003.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_workspace_trust_223.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pr_readback_789.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_president_ladder_config.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_president_wiring.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_presroute_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_presroute_hardening.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_presroute_landed.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_redaction_channel_control_isolation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_monitor_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_policy_govlean_repairs.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_stage_binding.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_roadmap_representation_consistency.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skill_liveness_contract.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_subscription_scrub_xai_864.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_review_authorization.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_verify_qualified_agy_route_core.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_worktree_index.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phase-loop-runtime
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.19
|
|
4
4
|
Summary: Harness-neutral phase-loop orchestration runtime and CLI
|
|
5
5
|
Author-email: ViperJuice <viperjuice@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -49,7 +49,7 @@ To install just this runtime package directly:
|
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
pip install phase-loop-runtime # latest compatible release
|
|
52
|
-
pip install phase-loop-runtime==0.7.
|
|
52
|
+
pip install phase-loop-runtime==0.7.19 # …or pin an exact version
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -19,7 +19,7 @@ To install just this runtime package directly:
|
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
pip install phase-loop-runtime # latest compatible release
|
|
22
|
-
pip install phase-loop-runtime==0.7.
|
|
22
|
+
pip install phase-loop-runtime==0.7.19 # …or pin an exact version
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -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.19"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -660,8 +660,8 @@ review text and the exception in detail; sandbox facts describe actual enforceme
|
|
|
660
660
|
|
|
661
661
|
### Qualified Gemini extension (agent-harness#905)
|
|
662
662
|
|
|
663
|
-
The Linux x64 subscription `agy` 1.2.
|
|
664
|
-
`
|
|
663
|
+
The Linux x64 subscription `agy` 1.2.11 entry image must match SHA256
|
|
664
|
+
`ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`.
|
|
665
665
|
The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
|
|
666
666
|
Python version alone is not a capability check. Unknown images or missing
|
|
667
667
|
capabilities refuse before availability/auth effects. Required bwrap mount/gate
|
|
@@ -174,6 +174,17 @@ _TOOL_CACHE_DIR_NAMES = frozenset(
|
|
|
174
174
|
)
|
|
175
175
|
_TOOL_CACHE_DIR_SUFFIXES = (".egg-info",)
|
|
176
176
|
|
|
177
|
+
def _handoff_root_relpath() -> str:
|
|
178
|
+
# Taken from the resolver itself rather than restated, so the audit cannot drift from
|
|
179
|
+
# where the skills are told to write (phase_loop_runtime.skill_paths).
|
|
180
|
+
from .skill_paths import resolve_handoff_root
|
|
181
|
+
|
|
182
|
+
anchor = Path("/")
|
|
183
|
+
return resolve_handoff_root(anchor).relative_to(anchor.resolve()).as_posix()
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
_HANDOFF_ROOT = _handoff_root_relpath()
|
|
187
|
+
|
|
177
188
|
|
|
178
189
|
def classify_ignored_output(repo_relpath: str) -> IgnoredOutputVerdict:
|
|
179
190
|
"""Grade one gitignored path by WHO produced it.
|
|
@@ -210,6 +221,15 @@ def classify_ignored_output(repo_relpath: str) -> IgnoredOutputVerdict:
|
|
|
210
221
|
RUNNER_OWNED, False, f"runner lifecycle state under {entry}"
|
|
211
222
|
)
|
|
212
223
|
|
|
224
|
+
# agent-harness#1084: the repo-local skill handoff root is lifecycle state the skills
|
|
225
|
+
# are REQUIRED to write and to keep ignored. Only the exact root the resolver returns
|
|
226
|
+
# (repo root, directory form or a path under it) earns this; the same name nested
|
|
227
|
+
# anywhere else, or a bare file of that name, still blocks.
|
|
228
|
+
if norm == _HANDOFF_ROOT + "/" or norm.startswith(_HANDOFF_ROOT + "/"):
|
|
229
|
+
return IgnoredOutputVerdict(
|
|
230
|
+
RUNNER_OWNED, False, f"required skill handoff under {_HANDOFF_ROOT}/"
|
|
231
|
+
)
|
|
232
|
+
|
|
213
233
|
# A cache name only earns trust as a DIRECTORY. Git renders a collapsed
|
|
214
234
|
# directory with a trailing slash and a file without one, so a bare `.venv`
|
|
215
235
|
# or `node_modules` entry is an ordinary FILE (or a symlink) that merely
|
{phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gemini_heartbeat.py
RENAMED
|
@@ -14,8 +14,8 @@ import time
|
|
|
14
14
|
from .agy_canary_evidence import AgyCanaryEvidenceError, _linux_memfd_seal_abi, _sealed_tree_fd
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
QUALIFIED_IMAGE_SHA256 = "
|
|
18
|
-
QUALIFIED_HELP_SHA256 = "
|
|
17
|
+
QUALIFIED_IMAGE_SHA256 = "ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56"
|
|
18
|
+
QUALIFIED_HELP_SHA256 = "83e3a0c36269f23972ba33d0013b9a6b2933ddb07cde268fa40e0fb1a5f33755"
|
|
19
19
|
PROFILE_ID = "agy_memfd_home_deny_all_v1"
|
|
20
20
|
PRIVATE_HOME = "/dev/phase-loop-agy"
|
|
21
21
|
_CAPABILITY = "gemini_heartbeat_capability_unavailable"
|
{phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/panel_invoker.py
RENAMED
|
@@ -3987,29 +3987,202 @@ def _assistant_text_from_jsonl(path: Path) -> str:
|
|
|
3987
3987
|
return "\n".join(texts).strip()
|
|
3988
3988
|
|
|
3989
3989
|
|
|
3990
|
-
def _final_assistant_text_from_jsonl(path: Path) -> str:
|
|
3991
|
-
"""Return
|
|
3992
|
-
|
|
3990
|
+
def _final_assistant_text_from_jsonl(path: Path, *, require_terminal: bool = False) -> str:
|
|
3991
|
+
"""Return the final turn's single assistant message, or "" when that cannot be proven.
|
|
3992
|
+
|
|
3993
|
+
The rule (agent-harness#1002): a TURN starts at the last user record that is not a replay
|
|
3994
|
+
(same uuid AND same content as an earlier user record; a changed request under a reused
|
|
3995
|
+
uuid is a new request). History before the turn never blocks a later answer.
|
|
3996
|
+
|
|
3997
|
+
Records: an exact replay of any earlier version of a record (same uuid, content and
|
|
3998
|
+
completion state) is dropped, because the CLI re-journals records with changed
|
|
3999
|
+
``usage``/``parentUuid``/``promptId``; a stale open version of a stopped record is dropped
|
|
4000
|
+
too. Within the turn, an explicitly open (null) stop_reason may change to a value under its
|
|
4001
|
+
uuid, and the latest version wins; any other state change, or a content change after the
|
|
4002
|
+
message stopped or across messages, fails closed.
|
|
4003
|
+
|
|
4004
|
+
The answer is the turn's last message id. It fails closed if any of its records shares a
|
|
4005
|
+
uuid, a message id or its content with history (earlier messages of the turn may share a
|
|
4006
|
+
history id: parallel tool calls continue one message across a tool_result), or if an
|
|
4007
|
+
identity-less answer repeats any other assistant record. A message id that leaves and
|
|
4008
|
+
returns, uuid and uuid-less records mixed, or a repeated uuid-less record also fails closed.
|
|
4009
|
+
Blocks of one message that repeat the same text under distinct uuids are all kept, so a copy
|
|
4010
|
+
of such a block under a fresh uuid is not detected.
|
|
4011
|
+
|
|
4012
|
+
With ``require_terminal`` (the president route, agent-harness#1016), any damaged line fails
|
|
4013
|
+
closed, the answer's last record must stop with ``end_turn``, and no assistant record of the
|
|
4014
|
+
final turn (superseded versions and replays included) may stop with anything else (earlier
|
|
4015
|
+
blocks stay null), carry a tool call, be a ``<synthetic>`` model record, or carry
|
|
4016
|
+
``isApiErrorMessage`` on the message or the record.
|
|
4017
|
+
|
|
4018
|
+
Measured on real Claude Code 2.1.282 journals: every record has a uuid, 9 of 28,960 turns
|
|
4019
|
+
hold more than one message id and none an A-B-A.
|
|
4020
|
+
"""
|
|
3993
4021
|
try:
|
|
3994
|
-
lines = path.read_text(encoding="utf-8", errors="replace").
|
|
4022
|
+
lines = path.read_text(encoding="utf-8", errors="replace").split("\n")
|
|
3995
4023
|
except OSError:
|
|
3996
4024
|
return ""
|
|
3997
|
-
for
|
|
4025
|
+
last_line = max((i for i, text in enumerate(lines) if text.strip()), default=-1)
|
|
4026
|
+
records: list[tuple[dict, dict]] = []
|
|
4027
|
+
for index, line in enumerate(lines):
|
|
4028
|
+
if not line.strip():
|
|
4029
|
+
continue
|
|
3998
4030
|
try:
|
|
3999
4031
|
payload = json.loads(line)
|
|
4000
4032
|
except json.JSONDecodeError:
|
|
4001
|
-
|
|
4033
|
+
if index == last_line or require_terminal:
|
|
4034
|
+
# A writer may still be appending the latest record. The president route owns a
|
|
4035
|
+
# fresh transcript per call, so any damaged line there (for example a half-written
|
|
4036
|
+
# newer request) fails closed rather than being skipped as history.
|
|
4037
|
+
return ""
|
|
4038
|
+
continue # a damaged line with valid records after it is history
|
|
4002
4039
|
message = payload.get("message") if isinstance(payload, dict) else None
|
|
4003
|
-
if
|
|
4040
|
+
if isinstance(message, dict) and message.get("role") in ("user", "assistant"):
|
|
4041
|
+
if message.get("id") is not None and not isinstance(message.get("id"), str):
|
|
4042
|
+
return ""
|
|
4043
|
+
if message.get("stop_reason") is not None and not isinstance(message.get("stop_reason"), str):
|
|
4044
|
+
return ""
|
|
4045
|
+
records.append((payload, message))
|
|
4046
|
+
|
|
4047
|
+
def _uuid(payload: dict) -> str | None:
|
|
4048
|
+
value = payload.get("uuid")
|
|
4049
|
+
return value if isinstance(value, str) and value else None
|
|
4050
|
+
|
|
4051
|
+
def _said(message: dict) -> str: # what a record SAYS; accounting and links excluded
|
|
4052
|
+
return json.dumps([message.get("id"), message.get("role"), message.get("content")], sort_keys=True)
|
|
4053
|
+
|
|
4054
|
+
def _state(message: dict) -> tuple:
|
|
4055
|
+
return ("stop_reason" in message, message.get("stop_reason"))
|
|
4056
|
+
|
|
4057
|
+
boundary = -1
|
|
4058
|
+
seen_users: set[tuple[str, str]] = set()
|
|
4059
|
+
for position, (payload, message) in enumerate(records):
|
|
4060
|
+
if message.get("role") != "user":
|
|
4004
4061
|
continue
|
|
4005
|
-
|
|
4006
|
-
|
|
4007
|
-
if
|
|
4008
|
-
|
|
4009
|
-
|
|
4010
|
-
|
|
4011
|
-
|
|
4012
|
-
|
|
4062
|
+
user_id = _uuid(payload)
|
|
4063
|
+
if user_id is not None:
|
|
4064
|
+
if (user_id, _said(message)) in seen_users:
|
|
4065
|
+
continue # a re-journaled user record is not a new request
|
|
4066
|
+
seen_users.add((user_id, _said(message)))
|
|
4067
|
+
boundary = position
|
|
4068
|
+
history = [(p, m) for p, m in records[: max(boundary, 0)] if m.get("role") == "assistant"]
|
|
4069
|
+
history_ids = {m.get("id") for _, m in history} - {None}
|
|
4070
|
+
history_uuids = {_uuid(p) for p, _ in history} - {None}
|
|
4071
|
+
history_said = {_said(m) for _, m in history}
|
|
4072
|
+
|
|
4073
|
+
known: dict[str, tuple[str, tuple]] = {} # the latest version of each uuid
|
|
4074
|
+
seen_versions: dict[str, set[tuple[str, tuple]]] = {} # every version of each uuid
|
|
4075
|
+
stopped_ids: set[object] = set() # message ids that carried any stop_reason
|
|
4076
|
+
turn: list[tuple[dict, dict]] = []
|
|
4077
|
+
for position, (payload, message) in enumerate(records):
|
|
4078
|
+
if message.get("role") != "assistant":
|
|
4079
|
+
continue
|
|
4080
|
+
uid, said, state = _uuid(payload), _said(message), _state(message)
|
|
4081
|
+
in_turn = position > boundary
|
|
4082
|
+
if uid is not None and uid in known:
|
|
4083
|
+
if (said, state) in seen_versions[uid]:
|
|
4084
|
+
continue # an exact replay of this or an earlier version of the record
|
|
4085
|
+
known_said, known_state = known[uid]
|
|
4086
|
+
if said == known_said and state == (True, None) and known_state[1] is not None:
|
|
4087
|
+
continue # a stale open version of a stopped record; a stop never re-opens
|
|
4088
|
+
previous_id = json.loads(known_said)[0]
|
|
4089
|
+
if in_turn and known_said != said and (
|
|
4090
|
+
previous_id is None or previous_id != message.get("id")
|
|
4091
|
+
or previous_id in stopped_ids):
|
|
4092
|
+
# A streaming block may be revised while its message is open; after the
|
|
4093
|
+
# message stopped, or across messages, a changed record fails closed.
|
|
4094
|
+
return ""
|
|
4095
|
+
if in_turn and known_state != state and not (known_state == (True, None) and state[0]):
|
|
4096
|
+
return "" # only an explicitly open (null) stop_reason may change, to a value
|
|
4097
|
+
if uid is not None:
|
|
4098
|
+
known[uid] = (said, state)
|
|
4099
|
+
seen_versions.setdefault(uid, set()).add((said, state))
|
|
4100
|
+
if message.get("stop_reason") is not None:
|
|
4101
|
+
stopped_ids.add(message.get("id"))
|
|
4102
|
+
if in_turn:
|
|
4103
|
+
turn.append((payload, message))
|
|
4104
|
+
if not turn:
|
|
4105
|
+
return ""
|
|
4106
|
+
identityless = [_said(m) for p, m in turn if _uuid(p) is None]
|
|
4107
|
+
if len(identityless) != len(set(identityless)):
|
|
4108
|
+
return "" # a repeated uuid-less record may be a replay
|
|
4109
|
+
sequence: list[object] = []
|
|
4110
|
+
for _, message in turn:
|
|
4111
|
+
if not sequence or sequence[-1] != message.get("id"):
|
|
4112
|
+
sequence.append(message.get("id"))
|
|
4113
|
+
if len(sequence) != len(set(sequence)):
|
|
4114
|
+
return "" # a message id left and returned within the turn
|
|
4115
|
+
final_id = sequence[-1]
|
|
4116
|
+
if final_id is None:
|
|
4117
|
+
group = [turn[-1]] # identity-less messages are independent, never joined
|
|
4118
|
+
else:
|
|
4119
|
+
group = [(p, m) for p, m in turn if m.get("id") == final_id]
|
|
4120
|
+
if any(_uuid(p) in history_uuids or _said(m) in history_said
|
|
4121
|
+
or (m.get("id") is not None and m.get("id") in history_ids)
|
|
4122
|
+
for p, m in group):
|
|
4123
|
+
# A copy or update of history cannot answer a new request. Earlier messages of the
|
|
4124
|
+
# turn may share a history id: the CLI writes a parallel tool call's next tool_use
|
|
4125
|
+
# block under the same message id after the previous tool_result.
|
|
4126
|
+
return ""
|
|
4127
|
+
if final_id is None:
|
|
4128
|
+
# An identity-less answer must not repeat any other assistant record, earlier in this
|
|
4129
|
+
# turn or in history: a copy stripped of its message id cannot be told from a replay.
|
|
4130
|
+
final_payload, final_message = group[0]
|
|
4131
|
+
spoken = json.dumps([final_message.get("role"), final_message.get("content")], sort_keys=True)
|
|
4132
|
+
if any(m is not final_message and m.get("role") == "assistant"
|
|
4133
|
+
and (_uuid(final_payload) is None or _uuid(p) != _uuid(final_payload))
|
|
4134
|
+
and json.dumps([m.get("role"), m.get("content")], sort_keys=True) == spoken
|
|
4135
|
+
for p, m in records):
|
|
4136
|
+
return ""
|
|
4137
|
+
with_uuid = [(p, m) for p, m in group if _uuid(p) is not None]
|
|
4138
|
+
if with_uuid and len(with_uuid) != len(group):
|
|
4139
|
+
return "" # uuid and uuid-less records cannot be told apart from a replay
|
|
4140
|
+
if with_uuid:
|
|
4141
|
+
latest: dict[str, tuple[dict, dict]] = {}
|
|
4142
|
+
order: list[str] = []
|
|
4143
|
+
for payload, message in group:
|
|
4144
|
+
uid = _uuid(payload)
|
|
4145
|
+
if uid not in latest:
|
|
4146
|
+
order.append(uid)
|
|
4147
|
+
latest[uid] = (payload, message)
|
|
4148
|
+
final_records = [latest[uid] for uid in order]
|
|
4149
|
+
else:
|
|
4150
|
+
final_records = list(group)
|
|
4151
|
+
versions = [m for _, m in final_records]
|
|
4152
|
+
terminal_payload, terminal = final_records[-1]
|
|
4153
|
+
# The president route checks every raw assistant record of the final turn: the answer's
|
|
4154
|
+
# superseded versions and exact replays included (the replay rule ignores API-error and
|
|
4155
|
+
# <synthetic> markers), and earlier messages of the turn too. After the last user record
|
|
4156
|
+
# (a tool_result is a user record) a genuine final answer has no tool call, marker or
|
|
4157
|
+
# non-final stop anywhere in its turn, so any of them fails closed on this route.
|
|
4158
|
+
answer_records = list(group) + [
|
|
4159
|
+
(p, m) for p, m in records[boundary + 1:] if m.get("role") == "assistant"
|
|
4160
|
+
]
|
|
4161
|
+
if require_terminal and (
|
|
4162
|
+
terminal.get("stop_reason") != "end_turn"
|
|
4163
|
+
or any(m.get("stop_reason") not in (None, "end_turn") or m.get("model") == "<synthetic>"
|
|
4164
|
+
or m.get("isApiErrorMessage") or p.get("isApiErrorMessage")
|
|
4165
|
+
or not isinstance(m.get("content"), list)
|
|
4166
|
+
or any(isinstance(item, dict) and item.get("type") == "tool_use" for item in m["content"])
|
|
4167
|
+
for p, m in answer_records)
|
|
4168
|
+
):
|
|
4169
|
+
return "" # the president route needs a genuine, completed end_turn
|
|
4170
|
+
if "stop_reason" in terminal and terminal["stop_reason"] is None:
|
|
4171
|
+
return "" # the message has not completed
|
|
4172
|
+
texts: list[str] = []
|
|
4173
|
+
for message in versions:
|
|
4174
|
+
content = message.get("content")
|
|
4175
|
+
if not isinstance(content, list):
|
|
4176
|
+
return ""
|
|
4177
|
+
if message.get("stop_reason") not in (None, "end_turn", "stop_sequence"):
|
|
4178
|
+
return "" # max_tokens, tool_use or another non-final stop
|
|
4179
|
+
if any(isinstance(item, dict) and item.get("type") == "tool_use" for item in content):
|
|
4180
|
+
return ""
|
|
4181
|
+
texts.append("\n".join(
|
|
4182
|
+
item["text"] for item in content
|
|
4183
|
+
if isinstance(item, dict) and item.get("type") == "text" and isinstance(item.get("text"), str)
|
|
4184
|
+
))
|
|
4185
|
+
return "\n".join(text for text in texts if text).strip(" \t\r\n")
|
|
4013
4186
|
|
|
4014
4187
|
|
|
4015
4188
|
def _cleanup_broker_claude_transcript(
|
|
@@ -4831,7 +5004,12 @@ def _run_claude_tui_session(
|
|
|
4831
5004
|
def _broker_final() -> str:
|
|
4832
5005
|
if not allow_transcript_final or broker_transcript_path is None:
|
|
4833
5006
|
return ""
|
|
4834
|
-
|
|
5007
|
+
# A president may need a format re-ask. Hand its completed API turn to
|
|
5008
|
+
# invoke_president even when the text lacks the required ruling grammar;
|
|
5009
|
+
# never treat a streaming or partial transcript as that completed turn.
|
|
5010
|
+
return _final_assistant_text_from_jsonl(
|
|
5011
|
+
broker_transcript_path, require_terminal=mode == "president",
|
|
5012
|
+
)
|
|
4835
5013
|
|
|
4836
5014
|
def _pending_tool_uses() -> tuple[str, ...]:
|
|
4837
5015
|
# Brokered Claude has an empty tool surface, so only the exact assistant
|
|
@@ -4969,8 +5147,15 @@ def _run_claude_tui_session(
|
|
|
4969
5147
|
return _finish(0, review_text, "claude_tui_file_output")
|
|
4970
5148
|
transcript_text = transcript_salvage or _transcript_text()
|
|
4971
5149
|
broker_final = _broker_final()
|
|
5150
|
+
if broker_final and review_monitor is not None and review_monitor.cancel.is_set():
|
|
5151
|
+
review_monitor.observe(terminal="user_cancel")
|
|
5152
|
+
return _finish(1, "", "review_operation_cancelled")
|
|
4972
5153
|
if broker_final and _completion_ok(broker_final, mode):
|
|
4973
5154
|
return _finish(0, broker_final, "claude_tui_broker_final_assistant")
|
|
5155
|
+
if broker_final and mode == "president":
|
|
5156
|
+
# Same completed-journal evidence as the conforming return above,
|
|
5157
|
+
# after the same cancellation re-check: hand it to the re-ask.
|
|
5158
|
+
return _finish(0, broker_final, "claude_tui_broker_terminal_nonconforming")
|
|
4974
5159
|
return _finish(
|
|
4975
5160
|
proc.poll() or 1,
|
|
4976
5161
|
review_text or transcript_text,
|
|
@@ -5090,16 +5275,26 @@ def _run_claude_tui_session(
|
|
|
5090
5275
|
if _completion_ok(transcript_text, mode):
|
|
5091
5276
|
transcript_salvage = transcript_text
|
|
5092
5277
|
broker_final = _broker_final()
|
|
5278
|
+
if broker_final and review_monitor is not None and review_monitor.cancel.is_set():
|
|
5279
|
+
review_monitor.observe(terminal="user_cancel")
|
|
5280
|
+
return _finish(1, "", "review_operation_cancelled")
|
|
5093
5281
|
if broker_final and _completion_ok(broker_final, mode):
|
|
5094
5282
|
return _finish(0, broker_final, "claude_tui_broker_final_assistant")
|
|
5283
|
+
if broker_final and mode == "president":
|
|
5284
|
+
return _finish(0, broker_final, "claude_tui_broker_terminal_nonconforming")
|
|
5095
5285
|
if proc.poll() is not None:
|
|
5096
5286
|
review_text = _current_output()
|
|
5097
5287
|
transcript_text = transcript_salvage or _transcript_text()
|
|
5098
5288
|
if _completion_ok(review_text, mode):
|
|
5099
5289
|
return _finish(0, review_text, "claude_tui_file_output")
|
|
5100
5290
|
broker_final = _broker_final()
|
|
5291
|
+
if broker_final and review_monitor is not None and review_monitor.cancel.is_set():
|
|
5292
|
+
review_monitor.observe(terminal="user_cancel")
|
|
5293
|
+
return _finish(1, "", "review_operation_cancelled")
|
|
5101
5294
|
if broker_final and _completion_ok(broker_final, mode):
|
|
5102
5295
|
return _finish(0, broker_final, "claude_tui_broker_final_assistant")
|
|
5296
|
+
if broker_final and mode == "president":
|
|
5297
|
+
return _finish(0, broker_final, "claude_tui_broker_terminal_nonconforming")
|
|
5103
5298
|
detail = "claude_tui_missing_canonical_output"
|
|
5104
5299
|
return _finish(
|
|
5105
5300
|
proc.returncode or 1, review_text or transcript_text, detail
|
|
@@ -28,8 +28,8 @@ from typing import Any, Mapping, Sequence
|
|
|
28
28
|
PROBE_SIDECAR_REL = "specs/roadmap-assumption-probes-v10.json"
|
|
29
29
|
PROBE_SCHEMA = "roadmap_assumption_probe.v1"
|
|
30
30
|
CANONICAL_ROADMAP_REL = "specs/phase-plans-v10.md"
|
|
31
|
-
CANONICAL_ROADMAP_SHA256 = "
|
|
32
|
-
CANONICAL_PROBES_SHA256 = "
|
|
31
|
+
CANONICAL_ROADMAP_SHA256 = "124554d1ce4232b60c71e8fc71d3f4e334c6d63080f8d62f498cbed68d08eeae"
|
|
32
|
+
CANONICAL_PROBES_SHA256 = "f8f6fd3f4e61b2e7f1c49260f6cec07a6cdb2b8cfb82ac145306f6cebd5d08c3"
|
|
33
33
|
CANONICAL_PROBE_IDS = (
|
|
34
34
|
"LEGIBLE-A1-CONFORM-UNGATED", "LEGIBLE-A1-I118", "LEGIBLE-A1-PIN-SHA",
|
|
35
35
|
"LEGIBLE-A1-PIN-TAG", "LEGIBLE-A1-PR102", "LEGIBLE-A1-PR377",
|
{phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_runner.py
RENAMED
|
@@ -2458,9 +2458,11 @@ def _append_blocked_keeping_admission(ledger_path: Path, node_id: str, *, branch
|
|
|
2458
2458
|
except (OSError, ValueError):
|
|
2459
2459
|
# Unreadable now: append NOTHING. A branch-only row would win the last-wins fold
|
|
2460
2460
|
# once reads recover and erase the admission (agent-harness#978 round 11, codex).
|
|
2461
|
-
#
|
|
2462
|
-
# append nothing before refusing, and P3 halts before its
|
|
2463
|
-
# capture fails (round 12).
|
|
2461
|
+
# For an ADMITTED node the binding stays the fold because no caller has appended
|
|
2462
|
+
# over it: P4 callers append nothing before refusing, and P3 halts before its
|
|
2463
|
+
# breadcrumb when its capture fails (round 12). This branch is also reachable for a
|
|
2464
|
+
# fresh P3 node, whose breadcrumb is then the fold -- harmless, as a fresh node has
|
|
2465
|
+
# no binding to lose (agent-harness#1064).
|
|
2464
2466
|
return
|
|
2465
2467
|
if latest is None:
|
|
2466
2468
|
append_record(ledger_path, LedgerRecord(node_id=node_id, status="blocked", branch=branch))
|
|
@@ -2593,6 +2595,10 @@ def _run_train_unfenced(
|
|
|
2593
2595
|
review_material: "Path | str | None" = None,
|
|
2594
2596
|
# run-train --monitoring-policy: how the DEFAULT train review watches its seats.
|
|
2595
2597
|
# "heartbeat_only" = no model deadline, frozen four-vendor board, no native seat.
|
|
2598
|
+
# Scope (agent-harness#1065): only the default train-level review honours it. An
|
|
2599
|
+
# injected ``_train_review_fn`` owns its own monitoring, and the FAB delta-shortcut
|
|
2600
|
+
# review (``fab_delta_shortcut``; not exposed by the CLI) and per-node governed
|
|
2601
|
+
# reviews keep theirs.
|
|
2596
2602
|
review_monitoring_policy: str = "bounded",
|
|
2597
2603
|
# P4 seams — unused when _merge_phase_enabled is False.
|
|
2598
2604
|
_merge_pr_fn: Optional[Callable] = None, # (workspace, branch, base, head_sha) → merged_sha
|
{phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phase-loop-runtime
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.19
|
|
4
4
|
Summary: Harness-neutral phase-loop orchestration runtime and CLI
|
|
5
5
|
Author-email: ViperJuice <viperjuice@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -49,7 +49,7 @@ To install just this runtime package directly:
|
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
pip install phase-loop-runtime # latest compatible release
|
|
52
|
-
pip install phase-loop-runtime==0.7.
|
|
52
|
+
pip install phase-loop-runtime==0.7.19 # …or pin an exact version
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
To pin a specific tag from source instead, substitute a tag from
|
{phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/SOURCES.txt
RENAMED
|
@@ -680,6 +680,7 @@ tests/test_outside_agent_vectors.py
|
|
|
680
680
|
tests/test_owned_command_procfs_1003.py
|
|
681
681
|
tests/test_packaged_vector_manifest_pin.py
|
|
682
682
|
tests/test_panel_advisory_mode_63.py
|
|
683
|
+
tests/test_panel_claude_review_output.py
|
|
683
684
|
tests/test_panel_codex_auth_signature_body_252.py
|
|
684
685
|
tests/test_panel_context_refs_114.py
|
|
685
686
|
tests/test_panel_gemini_no_command_preamble.py
|
|
@@ -409,6 +409,40 @@ class TestIgnoredOutputAudit(unittest.TestCase):
|
|
|
409
409
|
f"spoofed runner dir must block: {result}")
|
|
410
410
|
self.assertTrue(result[UNKNOWN_IGNORED])
|
|
411
411
|
|
|
412
|
+
def test_the_required_skill_handoff_root_does_not_block(self):
|
|
413
|
+
"""agent-harness#1084: the handoff the skills must write, at the exact root the
|
|
414
|
+
resolver returns, passes the audit end to end; the ignore entry is the one the
|
|
415
|
+
skills direct.
|
|
416
|
+
"""
|
|
417
|
+
from phase_loop_runtime.skill_paths import resolve_handoff_root
|
|
418
|
+
|
|
419
|
+
with TemporaryDirectory() as tmp:
|
|
420
|
+
repo = self._repo(tmp)
|
|
421
|
+
(repo / ".gitignore").write_text(
|
|
422
|
+
".phase-loop/\n.ruff_cache/\n__pycache__/\n.venv/\nscratch/\n.dev-skills/handoffs/\n")
|
|
423
|
+
root = resolve_handoff_root(repo)
|
|
424
|
+
self.assertEqual(root, repo.resolve() / ".dev-skills" / "handoffs")
|
|
425
|
+
(root / "codex-execute-phase").mkdir(parents=True)
|
|
426
|
+
(root / "codex-execute-phase" / "latest.md").write_text("from: codex-execute-phase\n")
|
|
427
|
+
result = audit_ignored_outputs(repo)
|
|
428
|
+
self.assertFalse(result["blocks"], result)
|
|
429
|
+
self.assertEqual(result[UNKNOWN_IGNORED], [])
|
|
430
|
+
|
|
431
|
+
def test_only_the_exact_handoff_root_is_recognised(self):
|
|
432
|
+
for path in (".dev-skills/handoffs/", ".dev-skills/handoffs/claude-plan-phase/latest.md"):
|
|
433
|
+
verdict = classify_ignored_output(path)
|
|
434
|
+
self.assertEqual(verdict.provenance, RUNNER_OWNED, path)
|
|
435
|
+
self.assertFalse(verdict.blocks, path)
|
|
436
|
+
for path in (
|
|
437
|
+
".dev-skills/handoffs", # a FILE of that name
|
|
438
|
+
".dev-skills/", # the parent, not the handoff root
|
|
439
|
+
".dev-skills/other/x.md",
|
|
440
|
+
"nested/.dev-skills/handoffs/x", # the name elsewhere in the tree
|
|
441
|
+
" .dev-skills/handoffs/x", # leading whitespace
|
|
442
|
+
".dev-skills/handoffs2/x",
|
|
443
|
+
):
|
|
444
|
+
self.assertEqual(classify_ignored_output(path).provenance, UNKNOWN_IGNORED, path)
|
|
445
|
+
|
|
412
446
|
def test_an_unknown_ignored_output_makes_the_audit_block(self):
|
|
413
447
|
with TemporaryDirectory() as tmp:
|
|
414
448
|
repo = self._repo(tmp)
|
{phase_loop_runtime-0.7.18 → phase_loop_runtime-0.7.19}/tests/test_legible_roadmap_contract.py
RENAMED
|
@@ -195,10 +195,10 @@ _FROZEN_ROADMAP_EXCERPT = """\
|
|
|
195
195
|
/ `verdict_schema_sha256`. CONFORM's pin work is therefore NO LONGER externally gated and is
|
|
196
196
|
satisfiable against merged sources; EC-CONFORM-5/6/7 are re-derived accordingly below. (Swept
|
|
197
197
|
the other four assumptions against current `main`: #2 subsequently reconciled — `governed-pipeline#128`
|
|
198
|
-
CLOSED, we still ship `0.7.
|
|
198
|
+
CLOSED, we still ship `0.7.19`; #3 holds — `tui_adapter_required` still present in
|
|
199
199
|
|
|
200
200
|
stale; #2's later drift is reconciled below.)
|
|
201
|
-
2. `governed-pipeline` pins agent-harness 0.7.14 while we ship 0.7.
|
|
201
|
+
2. `governed-pipeline` pins agent-harness 0.7.14 while we ship 0.7.19; it has acted on
|
|
202
202
|
`governed-pipeline#128`, which is CLOSED. No phase here depends on that being resolved.
|
|
203
203
|
3. The claude/fable board seat is structurally unavailable when the runtime drives the board from
|
|
204
204
|
|
|
@@ -1448,7 +1448,7 @@ ASSUMPTION_PROBES: tuple[dict[str, object], ...] = (
|
|
|
1448
1448
|
"id": "LEGIBLE-A2-LOCAL-VERSION",
|
|
1449
1449
|
"assumption": 2,
|
|
1450
1450
|
"kind": "repo_constant",
|
|
1451
|
-
"anchor": "we ship 0.7.
|
|
1451
|
+
"anchor": "we ship 0.7.19",
|
|
1452
1452
|
"mutation_id": "change-either-surface-alone",
|
|
1453
1453
|
"positive_control_id": "current-equal-pair",
|
|
1454
1454
|
"subject": {
|
|
@@ -1457,9 +1457,9 @@ ASSUMPTION_PROBES: tuple[dict[str, object], ...] = (
|
|
|
1457
1457
|
{"module": "phase_loop_runtime", "attribute": "__version__"},
|
|
1458
1458
|
]
|
|
1459
1459
|
},
|
|
1460
|
-
"expected": {"must_agree": True, "agreed_value": "0.7.
|
|
1461
|
-
"observation": {"values": ["0.7.
|
|
1462
|
-
"mutation": {"values": ["0.7.
|
|
1460
|
+
"expected": {"must_agree": True, "agreed_value": "0.7.19"},
|
|
1461
|
+
"observation": {"values": ["0.7.19", "0.7.19"]},
|
|
1462
|
+
"mutation": {"values": ["0.7.20", "0.7.19"]},
|
|
1463
1463
|
},
|
|
1464
1464
|
{
|
|
1465
1465
|
"id": "LEGIBLE-A2-NO-DEPENDENCY",
|