phase-loop-runtime 0.7.15__tar.gz → 0.7.16__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.15 → phase_loop_runtime-0.7.16}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/README.md +1 -1
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +38 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/backing.py +229 -59
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/cli.py +54 -3
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/panel_invoker.py +317 -27
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/sandbox_egress.py +48 -13
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +17 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime.egg-info/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime.egg-info/SOURCES.txt +1 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ci_chronology_scope.py +48 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_runtime_imports.py +9 -1
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_gate_fail_open_visibility.py +34 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_harden_evidence_verifier.py +52 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_legible_roadmap_contract.py +6 -6
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_tui_workspace_trust_223.py +99 -4
- phase_loop_runtime-0.7.16/tests/test_review_monitor_policy.py +1025 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_roadmap_ownership.py +3 -1
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_roadmap_representation_consistency.py +4 -3
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skill_liveness_contract.py +12 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/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.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/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.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/president_adapter.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/review_stage.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_board_static_import_862.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ci_offload_lock.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_conftest_isolation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_executor_exited_without_closeout_785.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_activation_promotion.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_delta_consumer.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_admission_compat_789.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_partition_rotation_789d.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_skill_policy_parity.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_harden_evidence_producer.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_model_tier_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_native_claude_seat_fill.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pr_readback_789.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_president_wiring.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_review_policy_govlean_repairs.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_review_stage_binding.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_review_authorization.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.15 → phase_loop_runtime-0.7.16}/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.16
|
|
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.16 # …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.16 # …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.16"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -485,3 +485,41 @@ a landing decision. `tests/test_president_wiring.py`.
|
|
|
485
485
|
- **Standalone launchers.** A caller that wants the four-seat board without a
|
|
486
486
|
president passes an explicit `review_policy=ReviewLandingPolicy(required_seats=...,
|
|
487
487
|
requires_president=False)` rather than a president-requiring tier.
|
|
488
|
+
|
|
489
|
+
## Review monitoring policy v1 (agent-harness#892)
|
|
490
|
+
|
|
491
|
+
The opt-in policy vocabulary is `bounded | heartbeat_only`; omission is bounded.
|
|
492
|
+
Heartbeat-only permits only brokered subscription/homebrew Claude TUI, Codex,
|
|
493
|
+
and Grok, with no timeout overrides, capture, research, API fallback, gateway,
|
|
494
|
+
or native host seat. Whole-board capability preflight precedes availability,
|
|
495
|
+
auth, session creation, and provider dispatch. Gemini/agy remains unsupported.
|
|
496
|
+
|
|
497
|
+
The requested/effective policy is bound to the operation lease and minted leg.
|
|
498
|
+
Heartbeat-only admission expires 10 seconds after minting and is single-use;
|
|
499
|
+
complete frame receipt and ownership are checked before inference. Admitted
|
|
500
|
+
model response waiting has no aggregate wall-clock deadline or silence cutoff.
|
|
501
|
+
It makes one attempt, including when that attempt completes empty.
|
|
502
|
+
Cancellation and owner loss retain child/provider/server ownership until
|
|
503
|
+
quiescence; unproven quiescence cannot become successful evidence.
|
|
504
|
+
Private staged inputs and diagnostics are retained when quiescence cannot be
|
|
505
|
+
proven; that retention is failure evidence, not successful cleanup.
|
|
506
|
+
|
|
507
|
+
`review_monitoring.v1` is a separate metadata-only opt-in record: invocation and
|
|
508
|
+
seat position, requested/effective policy, admission window, null model/silence
|
|
509
|
+
deadlines, last observed progress age, observation state, and terminal reason.
|
|
510
|
+
Genuine output within the existing print-read observation interval is
|
|
511
|
+
`progress_observed`; older output or no output is `progress_unobserved`.
|
|
512
|
+
The TUI timestamp is refreshed by novel output lines, review-file growth and
|
|
513
|
+
transcript growth — a startup banner is novel output and refreshes it; only
|
|
514
|
+
repeated cosmetic repaints do not, once the existing novelty detector has seen
|
|
515
|
+
their text. The CPU-tick heartbeat never refreshes it.
|
|
516
|
+
Neither state is a health attestation or permission to terminate. Frozen
|
|
517
|
+
broker request/response keys, status literals, and observer envelopes are unchanged.
|
|
518
|
+
|
|
519
|
+
When staging requires egress isolation, acquisition follows staged-tree and operation
|
|
520
|
+
authorization revalidation. Heartbeat-only holds the network helper lifetime through
|
|
521
|
+
an owner pipe, with no aggregate expiry; owner exit closes both helpers. Provider
|
|
522
|
+
PID ownership is established after network entry but before the capability bounding
|
|
523
|
+
set is emptied. Every launch retains the common provider launch seam and broker
|
|
524
|
+
threads inherit its ContextVar prefix. EgressUnavailable stays DEGRADED with empty
|
|
525
|
+
review text and the exception in detail; sandbox facts describe actual enforcement.
|
|
@@ -192,6 +192,47 @@ _REVIEW_INSTRUCTIONS_SHA256: ContextVar[str | None] = ContextVar(
|
|
|
192
192
|
)
|
|
193
193
|
|
|
194
194
|
|
|
195
|
+
@dataclass(frozen=True)
|
|
196
|
+
class ReviewMonitoringPolicy:
|
|
197
|
+
requested: str
|
|
198
|
+
effective: str
|
|
199
|
+
admission_window_s: float = 10.0
|
|
200
|
+
model_deadline_s: None = None
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def resolve_review_monitoring_policy(
|
|
204
|
+
requested: str, board: object, *, timeouts_by_leg: Mapping | None = None,
|
|
205
|
+
mode: str = "review", capture: bool = False, research: bool = False,
|
|
206
|
+
gateway: bool = False, native_fill_requested: bool = False,
|
|
207
|
+
) -> ReviewMonitoringPolicy:
|
|
208
|
+
"""Pure whole-board preflight; never probe or replace a requested seat.
|
|
209
|
+
|
|
210
|
+
``native_fill_requested``: the caller supplied a native leg fill (EC-REVIEWTRUTH-14). Under
|
|
211
|
+
heartbeat-only that route is unsupported (CONTRACTS.md, review monitoring policy v1: no native
|
|
212
|
+
host seat); it is refused HERE, before composition, auth, minting or any launch, so a fill can
|
|
213
|
+
never be bound as a usable OK under a policy that excludes it (agent-harness#908 board r4 (d)).
|
|
214
|
+
"""
|
|
215
|
+
if requested not in ("bounded", "heartbeat_only"):
|
|
216
|
+
raise ValueError("review_monitoring_policy_invalid")
|
|
217
|
+
if requested == "heartbeat_only":
|
|
218
|
+
if timeouts_by_leg:
|
|
219
|
+
raise ValueError("review_monitoring_timeout_conflict")
|
|
220
|
+
if native_fill_requested:
|
|
221
|
+
raise ValueError("review_monitoring_unsupported_route:native_fill")
|
|
222
|
+
if mode != "review" or capture or research or gateway:
|
|
223
|
+
raise ValueError("review_monitoring_unsupported_transport")
|
|
224
|
+
if getattr(board, "allow_api_key_fallback", False):
|
|
225
|
+
raise ValueError("review_monitoring_unsupported_api_fallback")
|
|
226
|
+
for seat in getattr(board, "seats", ()):
|
|
227
|
+
lane = str(seat.harness or "").lower()
|
|
228
|
+
if (lane not in ("claude", "codex", "grok")
|
|
229
|
+
or seat.auth != AUTH_SUBSCRIPTION or seat.backing != BACKING_HOMEBREW
|
|
230
|
+
or seat.host_leg):
|
|
231
|
+
raise ValueError(f"review_monitoring_unsupported_route:{lane or 'unresolved'}")
|
|
232
|
+
harden_subscription_model(lane, seat.model, seat.effort)
|
|
233
|
+
return ReviewMonitoringPolicy(requested, requested)
|
|
234
|
+
|
|
235
|
+
|
|
195
236
|
@dataclass(frozen=True)
|
|
196
237
|
class BrokerRequest:
|
|
197
238
|
operation: str
|
|
@@ -217,6 +258,7 @@ class ReviewLegAuthorization:
|
|
|
217
258
|
issued_monotonic_ns: int
|
|
218
259
|
expires_monotonic_ns: int
|
|
219
260
|
_seal: object
|
|
261
|
+
monitoring_policy: str = "bounded"
|
|
220
262
|
|
|
221
263
|
|
|
222
264
|
@dataclass(frozen=True)
|
|
@@ -237,14 +279,18 @@ class _ReviewInvocationLease:
|
|
|
237
279
|
self.route_counts = Counter(authorization.routes)
|
|
238
280
|
self.active = False
|
|
239
281
|
self.closed = False
|
|
282
|
+
self.monitoring_policy = authorization.monitoring_policy
|
|
283
|
+
self.cancel_event = threading.Event()
|
|
240
284
|
|
|
241
285
|
|
|
242
286
|
class _ReviewLegClaim:
|
|
243
287
|
"""Private single-consumer state for a minted leg capability."""
|
|
244
288
|
|
|
245
|
-
def __init__(self) -> None:
|
|
289
|
+
def __init__(self, authorization: ReviewLegAuthorization, lease: _ReviewInvocationLease | None) -> None:
|
|
246
290
|
self.lock = threading.Lock()
|
|
247
291
|
self.claimed = False
|
|
292
|
+
self.monitoring_policy = authorization.monitoring_policy
|
|
293
|
+
self.lease = lease
|
|
248
294
|
|
|
249
295
|
|
|
250
296
|
class _BrokerInferenceAdapter:
|
|
@@ -303,7 +349,7 @@ def _lease_for(authorization: "ReviewIsolationAuthorization") -> _ReviewInvocati
|
|
|
303
349
|
return current[1]
|
|
304
350
|
|
|
305
351
|
|
|
306
|
-
def _remember_leg_claim(authorization: ReviewLegAuthorization) -> None:
|
|
352
|
+
def _remember_leg_claim(authorization: ReviewLegAuthorization, lease: _ReviewInvocationLease | None = None) -> None:
|
|
307
353
|
key = id(authorization)
|
|
308
354
|
|
|
309
355
|
def discard(reference: weakref.ReferenceType[ReviewLegAuthorization]) -> None:
|
|
@@ -313,7 +359,7 @@ def _remember_leg_claim(authorization: ReviewLegAuthorization) -> None:
|
|
|
313
359
|
_LEG_CLAIMS.pop(key, None)
|
|
314
360
|
|
|
315
361
|
with _LEASES_LOCK:
|
|
316
|
-
_LEG_CLAIMS[key] = (weakref.ref(authorization, discard), _ReviewLegClaim())
|
|
362
|
+
_LEG_CLAIMS[key] = (weakref.ref(authorization, discard), _ReviewLegClaim(authorization, lease))
|
|
317
363
|
|
|
318
364
|
|
|
319
365
|
def _claim_leg_authorization(authorization: ReviewLegAuthorization) -> None:
|
|
@@ -323,17 +369,36 @@ def _claim_leg_authorization(authorization: ReviewLegAuthorization) -> None:
|
|
|
323
369
|
raise ValueError("missing HARDEN review leg claim")
|
|
324
370
|
claim = current[1]
|
|
325
371
|
with claim.lock:
|
|
372
|
+
if authorization.monitoring_policy != claim.monitoring_policy:
|
|
373
|
+
raise ValueError("review_monitoring_policy_mismatch")
|
|
326
374
|
if claim.claimed:
|
|
327
375
|
raise ValueError("HARDEN review leg capability already consumed")
|
|
328
376
|
claim.claimed = True
|
|
329
377
|
|
|
330
378
|
|
|
331
|
-
def
|
|
379
|
+
def _leg_operation_active(authorization: ReviewLegAuthorization) -> bool:
|
|
380
|
+
with _LEASES_LOCK:
|
|
381
|
+
entry = _LEG_CLAIMS.get(id(authorization))
|
|
382
|
+
if entry is None or entry[0]() is not authorization:
|
|
383
|
+
return False
|
|
384
|
+
claim = entry[1]
|
|
385
|
+
if claim.monitoring_policy != authorization.monitoring_policy:
|
|
386
|
+
return False
|
|
387
|
+
lease = claim.lease
|
|
388
|
+
if lease is None:
|
|
389
|
+
return authorization.monitoring_policy == "bounded"
|
|
390
|
+
with lease.lock:
|
|
391
|
+
return lease.active and not lease.closed and not lease.cancel_event.is_set()
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
def _recv_frame(sock: socket.socket, maximum: int, *, admission_check: Callable[[], float] | None = None) -> bytes:
|
|
332
395
|
"""Read one length-delimited AF_UNIX message; streams have no message edges."""
|
|
333
396
|
def exact(size: int) -> bytes:
|
|
334
397
|
chunks: list[bytes] = []
|
|
335
398
|
remaining = size
|
|
336
399
|
while remaining:
|
|
400
|
+
if admission_check is not None:
|
|
401
|
+
sock.settimeout(admission_check())
|
|
337
402
|
chunk = sock.recv(remaining)
|
|
338
403
|
if not chunk:
|
|
339
404
|
raise ValueError("truncated broker frame")
|
|
@@ -441,12 +506,20 @@ class ParentUnixBroker:
|
|
|
441
506
|
self._instruction_sha256 = sha256(instructions.read_bytes()).hexdigest()
|
|
442
507
|
self.nonce = secrets.token_hex(32)
|
|
443
508
|
self.root = Path(tempfile.mkdtemp(prefix="phase-loop-broker-")); self.root.chmod(0o700)
|
|
444
|
-
secret_fd
|
|
509
|
+
secret_fd = None
|
|
510
|
+
secret_path = None
|
|
445
511
|
try:
|
|
512
|
+
secret_fd, secret_path = tempfile.mkstemp(prefix="phase-loop-host-probe-")
|
|
446
513
|
os.fchmod(secret_fd, 0o600)
|
|
447
514
|
os.write(secret_fd, secrets.token_bytes(32))
|
|
515
|
+
except BaseException:
|
|
516
|
+
if secret_path is not None:
|
|
517
|
+
Path(secret_path).unlink(missing_ok=True)
|
|
518
|
+
self.root.rmdir()
|
|
519
|
+
raise
|
|
448
520
|
finally:
|
|
449
|
-
|
|
521
|
+
if secret_fd is not None:
|
|
522
|
+
os.close(secret_fd)
|
|
450
523
|
self._host_secret_probe = Path(secret_path)
|
|
451
524
|
self.path = self.root / "intended-inference.sock"; self._used = False
|
|
452
525
|
self.evidence: dict[str, object] = {
|
|
@@ -461,10 +534,43 @@ class ParentUnixBroker:
|
|
|
461
534
|
"cleanup_root_removed": False,
|
|
462
535
|
"child_quiescent": False,
|
|
463
536
|
}
|
|
464
|
-
|
|
465
|
-
|
|
537
|
+
try:
|
|
538
|
+
self._sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
539
|
+
self._sock.bind(str(self.path))
|
|
540
|
+
self._sock.listen(1)
|
|
541
|
+
self._sock.settimeout(10)
|
|
542
|
+
self.path.chmod(0o600)
|
|
543
|
+
except BaseException:
|
|
544
|
+
try:
|
|
545
|
+
self.close()
|
|
546
|
+
except OSError:
|
|
547
|
+
self.evidence["cleanup_failed"] = True
|
|
548
|
+
raise
|
|
549
|
+
self._connection: socket.socket | None = None
|
|
550
|
+
self._cancel_event = threading.Event()
|
|
551
|
+
self._stopping = False
|
|
552
|
+
|
|
553
|
+
def _admission_remaining(self) -> float:
|
|
554
|
+
remaining = (self.authorization.expires_monotonic_ns - time.monotonic_ns()) / 1e9
|
|
555
|
+
if remaining <= 0:
|
|
556
|
+
raise ValueError("broker authorization expired")
|
|
557
|
+
if self._stopping or self._cancel_event.is_set() or not _leg_operation_active(self.authorization):
|
|
558
|
+
raise ValueError("broker operation cancelled or closed")
|
|
559
|
+
return remaining
|
|
560
|
+
|
|
561
|
+
def _wake_server(self) -> None:
|
|
562
|
+
self._stopping = True
|
|
563
|
+
for sock in (self._connection, self._sock):
|
|
564
|
+
if sock is not None:
|
|
565
|
+
try:
|
|
566
|
+
sock.shutdown(socket.SHUT_RDWR)
|
|
567
|
+
except OSError:
|
|
568
|
+
pass
|
|
569
|
+
|
|
466
570
|
def close(self) -> None:
|
|
467
|
-
self
|
|
571
|
+
sock = getattr(self, "_sock", None)
|
|
572
|
+
if sock is not None:
|
|
573
|
+
sock.close()
|
|
468
574
|
try: self.path.unlink()
|
|
469
575
|
except FileNotFoundError: pass
|
|
470
576
|
try: self.root.rmdir()
|
|
@@ -500,7 +606,9 @@ class ParentUnixBroker:
|
|
|
500
606
|
expected_pid: int,
|
|
501
607
|
expected_start: int,
|
|
502
608
|
) -> None:
|
|
609
|
+
self._sock.settimeout(min(10.0, self._admission_remaining()))
|
|
503
610
|
conn, _ = self._sock.accept()
|
|
611
|
+
self._connection = conn
|
|
504
612
|
with conn:
|
|
505
613
|
if not hasattr(socket, "SO_PEERCRED"): raise ValueError("peer credentials unavailable")
|
|
506
614
|
peer = conn.getsockopt(socket.SOL_SOCKET, socket.SO_PEERCRED, 12)
|
|
@@ -508,11 +616,14 @@ class ParentUnixBroker:
|
|
|
508
616
|
if uid != os.getuid() or gid != os.getgid() or not self._descends_from(pid, expected_pid, expected_start): raise ValueError("broker peer ancestry mismatch")
|
|
509
617
|
self.evidence.update({"peer_pid": pid, "peer_uid": uid, "peer_gid": gid, "peer_ancestry_verified": True})
|
|
510
618
|
if time.monotonic_ns() >= self.authorization.expires_monotonic_ns: raise ValueError("broker authorization expired")
|
|
511
|
-
raw = _recv_frame(conn, _BROKER_MAX_BYTES)
|
|
619
|
+
raw = _recv_frame(conn, _BROKER_MAX_BYTES, admission_check=self._admission_remaining)
|
|
512
620
|
data = json.loads(raw)
|
|
513
621
|
if set(data) != {"schema","operation","nonce","harness","model","purpose","input_sha256"}: raise ValueError("broker request grammar")
|
|
514
622
|
if self._used or data != {"schema":PARENT_UNIX_BROKER_V1,"operation":self.authorization.operation,"nonce":self.nonce,"harness":self.harness,"model":self.model,"purpose":self.authorization.purpose,"input_sha256":self.authorization.input_sha256}: raise ValueError("broker request binding")
|
|
515
|
-
self.
|
|
623
|
+
self._admission_remaining()
|
|
624
|
+
self._used = True
|
|
625
|
+
conn.settimeout(None)
|
|
626
|
+
status, text = adapter.invoke()
|
|
516
627
|
if (
|
|
517
628
|
status not in _BROKER_RESPONSE_STATUSES
|
|
518
629
|
or not isinstance(text, str)
|
|
@@ -525,7 +636,8 @@ class ParentUnixBroker:
|
|
|
525
636
|
_send_frame(conn, json.dumps({"schema":PARENT_UNIX_BROKER_V1,"status":status,"text":text}, separators=(",", ":")).encode())
|
|
526
637
|
|
|
527
638
|
def run_credentialless_client(
|
|
528
|
-
self, adapter: _BrokerInferenceAdapter, *, deadline_s: float,
|
|
639
|
+
self, adapter: _BrokerInferenceAdapter, *, deadline_s: float | None,
|
|
640
|
+
cancel_event: threading.Event | None = None,
|
|
529
641
|
) -> tuple[dict[str, object], dict[str, object]]:
|
|
530
642
|
"""Run the sole child operation: a fixed broker request in a no-net namespace."""
|
|
531
643
|
if (
|
|
@@ -534,6 +646,14 @@ class ParentUnixBroker:
|
|
|
534
646
|
or not adapter.is_quiescent()
|
|
535
647
|
):
|
|
536
648
|
raise ValueError("broker requires a quiescent cancellable inference adapter")
|
|
649
|
+
heartbeat_only = self.authorization.monitoring_policy == "heartbeat_only"
|
|
650
|
+
if (heartbeat_only and deadline_s is not None) or (not heartbeat_only and (
|
|
651
|
+
deadline_s is None or not math.isfinite(deadline_s) or deadline_s <= 0
|
|
652
|
+
)):
|
|
653
|
+
raise ValueError("review_monitoring_policy_mismatch")
|
|
654
|
+
if cancel_event is not None:
|
|
655
|
+
self._cancel_event = cancel_event
|
|
656
|
+
self._admission_remaining()
|
|
537
657
|
bwrap = Path("/usr/bin/bwrap")
|
|
538
658
|
python = Path("/usr/bin/python3")
|
|
539
659
|
if platform.system() != "Linux" or not bwrap.is_file() or not os.access(bwrap, os.X_OK) or not python.is_file():
|
|
@@ -579,55 +699,78 @@ class ParentUnixBroker:
|
|
|
579
699
|
argv = [str(bwrap),"--unshare-all","--die-with-parent","--new-session","--clearenv",*runtime_binds,"--dir","/run","--ro-bind",str(self.root),"/run/phase-loop-broker","--ro-bind",str(self.staged_dir),"/run/phase-loop-review","--tmpfs","/tmp","--proc","/proc","--dev","/dev","--setenv","PATH","/usr/bin","--setenv","PYTHONNOUSERSITE","1","--setenv","PYTHONDONTWRITEBYTECODE","1",str(python),"-I","-S","-c",code]
|
|
580
700
|
error: list[BaseException] = []
|
|
581
701
|
child: list[tuple[subprocess.Popen[bytes], int]] = []
|
|
582
|
-
child_ready = threading.Event()
|
|
583
702
|
def serve() -> None:
|
|
584
|
-
if not child_ready.wait(timeout=max(1.0, deadline_s)):
|
|
585
|
-
error.append(ValueError("broker child launch was not observed")); return
|
|
586
703
|
try:
|
|
587
704
|
self.serve_once(
|
|
588
705
|
adapter, expected_pid=child[0][0].pid, expected_start=child[0][1]
|
|
589
706
|
)
|
|
590
707
|
except BaseException as exc: error.append(exc)
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
proc=subprocess.Popen(argv,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,env={"PATH":"/usr/bin","PYTHONNOUSERSITE":"1","PYTHONDONTWRITEBYTECODE":"1"},close_fds=True,start_new_session=True)
|
|
595
|
-
_ppid, start = self._proc_stat(proc.pid)
|
|
596
|
-
child.append((proc, start)); child_ready.set()
|
|
708
|
+
thread = None
|
|
709
|
+
proc = None
|
|
710
|
+
start = None
|
|
597
711
|
stdout = b""; stderr = b""; timed_out = False; provider_cancelled = False
|
|
712
|
+
completed = False
|
|
713
|
+
started = time.monotonic()
|
|
598
714
|
try:
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
except subprocess.TimeoutExpired:
|
|
715
|
+
proc=subprocess.Popen(argv,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,env={"PATH":"/usr/bin","PYTHONNOUSERSITE":"1","PYTHONDONTWRITEBYTECODE":"1"},close_fds=True,start_new_session=True)
|
|
716
|
+
_ppid, start = self._proc_stat(proc.pid)
|
|
717
|
+
child.append((proc, start))
|
|
718
|
+
thread = start_context_carrying_thread(serve, daemon=False)
|
|
719
|
+
payload = json.dumps(request,separators=(",",":")).encode()
|
|
720
|
+
while True:
|
|
721
|
+
if self._cancel_event.is_set() or not _leg_operation_active(self.authorization):
|
|
722
|
+
error.append(ValueError("broker operation cancelled or closed"))
|
|
723
|
+
break
|
|
724
|
+
if error:
|
|
725
|
+
break
|
|
726
|
+
if deadline_s is not None and time.monotonic() - started >= max(1.0, deadline_s) + 2.0:
|
|
727
|
+
timed_out = True
|
|
728
|
+
break
|
|
614
729
|
try:
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
730
|
+
stdout, stderr = proc.communicate(payload, timeout=0.1)
|
|
731
|
+
completed = proc.returncode == 0
|
|
732
|
+
break
|
|
733
|
+
except subprocess.TimeoutExpired:
|
|
734
|
+
payload = None
|
|
619
735
|
finally:
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
736
|
+
if not completed or self._cancel_event.is_set():
|
|
737
|
+
self._wake_server()
|
|
738
|
+
try:
|
|
739
|
+
provider_cancelled = True
|
|
740
|
+
adapter.cancel()
|
|
741
|
+
except BaseException as exc:
|
|
742
|
+
error.append(exc)
|
|
743
|
+
finally:
|
|
744
|
+
if proc is not None:
|
|
745
|
+
for signum in (15, 9):
|
|
746
|
+
try:
|
|
747
|
+
try: os.killpg(proc.pid, signum)
|
|
748
|
+
except ProcessLookupError: pass
|
|
749
|
+
stdout, stderr = proc.communicate(timeout=2)
|
|
750
|
+
break
|
|
751
|
+
except BaseException as exc:
|
|
752
|
+
error.append(exc)
|
|
753
|
+
if thread is not None:
|
|
754
|
+
thread.join(timeout=_BROKER_TRANSPORT_ALLOWANCE_NS / 1_000_000_000)
|
|
755
|
+
if proc is not None:
|
|
756
|
+
for pipe in (proc.stdin, proc.stdout, proc.stderr):
|
|
757
|
+
if pipe is not None:
|
|
758
|
+
try: pipe.close()
|
|
759
|
+
except BaseException as exc: error.append(exc)
|
|
760
|
+
try:
|
|
761
|
+
provider_quiescent = adapter.is_quiescent()
|
|
762
|
+
except BaseException as exc:
|
|
763
|
+
error.append(exc)
|
|
764
|
+
provider_quiescent = False
|
|
765
|
+
self.evidence.update({
|
|
766
|
+
"child_quiescent": proc is None or proc.poll() is not None,
|
|
767
|
+
"broker_thread_quiescent": (thread is None or not thread.is_alive()),
|
|
768
|
+
"provider_adapter_quiescent": provider_quiescent,
|
|
769
|
+
"provider_cancel_requested": provider_cancelled,
|
|
770
|
+
})
|
|
771
|
+
if not provider_quiescent or (thread is not None and thread.is_alive()) or (proc is not None and proc.poll() is None):
|
|
772
|
+
from ..panel_invoker import ProviderProcessGroupQuiescenceError
|
|
773
|
+
raise ProviderProcessGroupQuiescenceError("broker provider or server quiescence unproven")
|
|
631
774
|
adapter_quiescent = adapter.is_quiescent()
|
|
632
775
|
self.evidence.update({
|
|
633
776
|
"bwrap": str(bwrap), "outer_bwrap_pid": proc.pid, "outer_bwrap_start": start,
|
|
@@ -646,13 +789,26 @@ class ParentUnixBroker:
|
|
|
646
789
|
"child_returncode": proc.returncode, "child_quiescent": proc.poll() is not None,
|
|
647
790
|
"no_inherited_fd_observed": proc.returncode == 0,
|
|
648
791
|
"child_stderr_sha256": sha256(stderr).hexdigest(),
|
|
649
|
-
"operation_deadline_s": float(deadline_s),
|
|
792
|
+
"operation_deadline_s": float(deadline_s) if deadline_s is not None else None,
|
|
650
793
|
"child_timeout": timed_out,
|
|
651
|
-
"broker_thread_quiescent": not thread.is_alive(),
|
|
794
|
+
"broker_thread_quiescent": (thread is None or not thread.is_alive()),
|
|
652
795
|
"provider_adapter_quiescent": adapter_quiescent,
|
|
653
796
|
"provider_cancel_requested": provider_cancelled,
|
|
654
797
|
})
|
|
655
|
-
if
|
|
798
|
+
if heartbeat_only:
|
|
799
|
+
self.evidence["monitoring"] = {
|
|
800
|
+
"schema": "review_monitoring.v1", "requested_policy": "heartbeat_only",
|
|
801
|
+
"effective_policy": "heartbeat_only", "operation_deadline_s": None,
|
|
802
|
+
"authorization_expiry_scope": "admission_only",
|
|
803
|
+
"admission_expires_monotonic_ns": self.authorization.expires_monotonic_ns,
|
|
804
|
+
}
|
|
805
|
+
if self._cancel_event.is_set() or not _leg_operation_active(self.authorization):
|
|
806
|
+
error.append(ValueError("broker operation cancelled or closed"))
|
|
807
|
+
from ..panel_invoker import ProviderProcessGroupQuiescenceError
|
|
808
|
+
for failure in error:
|
|
809
|
+
if isinstance(failure, ProviderProcessGroupQuiescenceError):
|
|
810
|
+
raise failure
|
|
811
|
+
if timed_out or error or (thread is not None and thread.is_alive()) or not adapter_quiescent or proc.returncode != 0:
|
|
656
812
|
raise ValueError(f"credentialless broker client failed: {error[0] if error else 'deadline' if timed_out else proc.returncode}")
|
|
657
813
|
result=json.loads(stdout)
|
|
658
814
|
if set(result) != {"schema", "status", "text"} or result.get("schema") != PARENT_UNIX_BROKER_V1:
|
|
@@ -690,6 +846,7 @@ class ReviewIsolationAuthorization:
|
|
|
690
846
|
canonical_repo_sha256: str
|
|
691
847
|
issued_monotonic_ns: int
|
|
692
848
|
_seal: object
|
|
849
|
+
monitoring_policy: str = "bounded"
|
|
693
850
|
# Digest of the reviewed TREE a seat is allowed to read, or None when no tree
|
|
694
851
|
# is staged (the historical shape, byte-for-byte). `canonical_repo_sha256`
|
|
695
852
|
# binds repository IDENTITY and cannot stand in for this: it does not move when
|
|
@@ -811,12 +968,14 @@ def prepare_review_isolation_authorization(
|
|
|
811
968
|
mode: str,
|
|
812
969
|
canonical_repo_authority: Path | str | None = None,
|
|
813
970
|
stage_review_tree: bool | None = None,
|
|
971
|
+
monitoring_policy: str = "bounded",
|
|
814
972
|
) -> ReviewIsolationAuthorization:
|
|
815
973
|
"""Authorize a review before composition or any provider/session effect.
|
|
816
974
|
|
|
817
975
|
The caller must provide the final immutable artifact bytes. Unsupported or
|
|
818
976
|
non-subscription seats are rejected rather than silently downgraded.
|
|
819
977
|
"""
|
|
978
|
+
resolve_review_monitoring_policy(monitoring_policy, board, mode=mode)
|
|
820
979
|
if platform.system() != "Linux" or mode != "review":
|
|
821
980
|
raise ValueError("HARDEN review isolation requires a Linux review operation")
|
|
822
981
|
seats = getattr(board, "seats", ())
|
|
@@ -861,6 +1020,7 @@ def prepare_review_isolation_authorization(
|
|
|
861
1020
|
issued_monotonic_ns=issued,
|
|
862
1021
|
_seal=_AUTHORIZATION_SEAL,
|
|
863
1022
|
staged_tree_sha256=staged_tree_sha256,
|
|
1023
|
+
monitoring_policy=monitoring_policy,
|
|
864
1024
|
)
|
|
865
1025
|
_remember_lease(authorization)
|
|
866
1026
|
return authorization
|
|
@@ -942,6 +1102,7 @@ def revalidate_review_isolation_authorization(
|
|
|
942
1102
|
authorization: ReviewIsolationAuthorization | None, board: object | None, artifact: str, *, mode: str,
|
|
943
1103
|
staged_dir: Path | None = None,
|
|
944
1104
|
canonical_repo_authority: Path | str | None = None,
|
|
1105
|
+
monitoring_policy: str | None = None,
|
|
945
1106
|
) -> None:
|
|
946
1107
|
"""Independently revalidate the operation capability immediately before use."""
|
|
947
1108
|
if not isinstance(authorization, ReviewIsolationAuthorization) or authorization._seal is not _AUTHORIZATION_SEAL:
|
|
@@ -952,6 +1113,9 @@ def revalidate_review_isolation_authorization(
|
|
|
952
1113
|
# staging) runs behind an authorization that can no longer be activated.
|
|
953
1114
|
lease = _lease_for(authorization)
|
|
954
1115
|
with lease.lock:
|
|
1116
|
+
if (authorization.monitoring_policy != lease.monitoring_policy
|
|
1117
|
+
or (monitoring_policy is not None and monitoring_policy != lease.monitoring_policy)):
|
|
1118
|
+
raise ValueError("review_monitoring_policy_mismatch")
|
|
955
1119
|
if lease.closed:
|
|
956
1120
|
raise ValueError("HARDEN review authorization is closed")
|
|
957
1121
|
if (
|
|
@@ -1044,12 +1208,13 @@ def close_review_isolation_authorization(
|
|
|
1044
1208
|
with lease.lock:
|
|
1045
1209
|
lease.active = False
|
|
1046
1210
|
lease.closed = True
|
|
1211
|
+
lease.cancel_event.set()
|
|
1047
1212
|
|
|
1048
1213
|
|
|
1049
1214
|
def derive_review_leg_authorization(
|
|
1050
1215
|
authorization: ReviewIsolationAuthorization | None,
|
|
1051
1216
|
artifact: str,
|
|
1052
|
-
*, harness: str, model: str, deadline_s: float, mode: str,
|
|
1217
|
+
*, harness: str, model: str, deadline_s: float | None, mode: str,
|
|
1053
1218
|
canonical_repo_authority: Path | str | None,
|
|
1054
1219
|
) -> ReviewLegAuthorization:
|
|
1055
1220
|
"""Mint the short-lived, single-route capability immediately before launch."""
|
|
@@ -1063,8 +1228,9 @@ def derive_review_leg_authorization(
|
|
|
1063
1228
|
if (
|
|
1064
1229
|
not isinstance(authorization, ReviewIsolationAuthorization)
|
|
1065
1230
|
or (harness, model) not in authorization.routes
|
|
1066
|
-
or
|
|
1067
|
-
|
|
1231
|
+
or (authorization.monitoring_policy == "bounded" and (
|
|
1232
|
+
deadline_s is None or not math.isfinite(deadline_s) or deadline_s <= 0))
|
|
1233
|
+
or (authorization.monitoring_policy == "heartbeat_only" and deadline_s is not None)
|
|
1068
1234
|
):
|
|
1069
1235
|
raise ValueError("invalid HARDEN review leg authority")
|
|
1070
1236
|
lease = _lease_for(authorization)
|
|
@@ -1083,10 +1249,14 @@ def derive_review_leg_authorization(
|
|
|
1083
1249
|
canonical_repo_sha256=authorization.canonical_repo_sha256,
|
|
1084
1250
|
broker_contract=PARENT_UNIX_BROKER_V1, harness=harness, model=model,
|
|
1085
1251
|
issued_monotonic_ns=issued,
|
|
1086
|
-
expires_monotonic_ns=issued +
|
|
1252
|
+
expires_monotonic_ns=issued + (
|
|
1253
|
+
10_000_000_000 if authorization.monitoring_policy == "heartbeat_only"
|
|
1254
|
+
else int(float(deadline_s) * 1_000_000_000) + _BROKER_TRANSPORT_ALLOWANCE_NS
|
|
1255
|
+
),
|
|
1087
1256
|
_seal=_AUTHORIZATION_SEAL,
|
|
1257
|
+
monitoring_policy=authorization.monitoring_policy,
|
|
1088
1258
|
)
|
|
1089
|
-
_remember_leg_claim(leg)
|
|
1259
|
+
_remember_leg_claim(leg, lease)
|
|
1090
1260
|
return leg
|
|
1091
1261
|
|
|
1092
1262
|
# Credentials and routing selectors that can move a Claude Code process away
|