phase-loop-runtime 0.7.23__tar.gz → 0.7.24__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.23/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.24}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/README.md +1 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/pyproject.toml +2 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +287 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/cli.py +149 -3
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/gemini_heartbeat.py +3 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/governed_review.py +10 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/panel_invoker.py +1163 -23
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/sandbox_egress.py +60 -1
- phase_loop_runtime-0.7.24/src/phase_loop_runtime/seat_credentials.py +765 -0
- phase_loop_runtime-0.7.24/src/phase_loop_runtime/seat_jail.py +1540 -0
- phase_loop_runtime-0.7.24/src/phase_loop_runtime/seat_jail_autoqualify.py +262 -0
- phase_loop_runtime-0.7.24/src/phase_loop_runtime/seat_jail_qualification.py +463 -0
- phase_loop_runtime-0.7.24/src/phase_loop_runtime/seat_keyring_exec.py +55 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/seat_preflight.py +67 -0
- phase_loop_runtime-0.7.24/src/phase_loop_runtime/seat_uid.py +570 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24/src/phase_loop_runtime.egg-info}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime.egg-info/SOURCES.txt +15 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_advisory_cli_802.py +2 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_agent_cli_scratch_inventory_1147.py +24 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_conftest_isolation.py +12 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_legible_roadmap_contract.py +6 -6
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_qualified_agy_image_set.py +3 -2
- phase_loop_runtime-0.7.24/tests/test_seat_credentials.py +830 -0
- phase_loop_runtime-0.7.24/tests/test_seat_jail.py +731 -0
- phase_loop_runtime-0.7.24/tests/test_seat_jail_autoqualify.py +170 -0
- phase_loop_runtime-0.7.24/tests/test_seat_jail_live_d8.py +454 -0
- phase_loop_runtime-0.7.24/tests/test_seat_launch_helpers_trusted.py +276 -0
- phase_loop_runtime-0.7.24/tests/test_seat_login_wait_a3_1166.py +346 -0
- phase_loop_runtime-0.7.24/tests/test_seat_login_wait_board_context_r12.py +172 -0
- phase_loop_runtime-0.7.24/tests/test_seat_notices.py +1147 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_seat_preflight_1204.py +123 -5
- phase_loop_runtime-0.7.24/tests/test_seat_sandbox_permissions.py +1089 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_baml_worker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/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.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/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.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/agy_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/agy_qualification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/agy_watch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/phase_loop_bridge.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/credential_redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/falsifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/generated_outputs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/lease_supervisor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/president_adapter.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/president_operation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/review_stage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/sandbox_placement.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_board_static_import_862.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_agy_self_qualification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_agy_single_event_transport_1175.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_chronology_scope.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_offload_lock.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_quarantine.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_xdist_adoption.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ci_xdist_witness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_generated_outputs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_conform_timing_instrumentation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_credential_redaction_shapes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_execfind_falsifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_execfind_governed_promotion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_executor_exited_without_closeout_785.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_activation_promotion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_delta_consumer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_admission_compat_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_partition_rotation_789d.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_finding_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_frozen_blob_batch_parse.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_gate_fail_open_visibility.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_gemini_heartbeat_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_gemini_heartbeat_filesystem_view.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_skill_policy_parity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_harden_evidence_producer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_harden_evidence_verifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_launcher_exec_supervisor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_local_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_model_tier_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_native_claude_seat_fill.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_native_fill_refusal_cause.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_owned_command_procfs_1003.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_claude_review_output.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_doc_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_lanes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_leg_status_detail_1096.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_lens_delivery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_tui_workspace_trust_223.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_v1_callers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_v1_runtime.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_baml_v1_supervisor_slot.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_plan_manifest_append_order_1174.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r2_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r2_F002.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r2_F003.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r2_F004.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r4_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r4_F002.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r4_F003.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r5_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r6_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r7_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr1161_r9_F002.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pr_readback_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_president_heartbeat_1001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_president_ladder_config.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_president_wiring.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_presroute_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_presroute_hardening.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_presroute_landed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_qualify_network_owner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_redaction_channel_control_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_redaction_main_coverage_cases.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_monitor_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_policy_govlean_repairs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_seat_stall_1176.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_stage_binding.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_roadmap_representation_consistency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_placement.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sandbox_staging_1147.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_scratch_runtime_audit_1147.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_seat_host_uid_1098.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skill_liveness_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_subscription_scrub_xai_864.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_review_authorization.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_review_monitoring_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_verify_qualified_agy_route_core.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/tests/test_worktree_index.py +0 -0
{phase_loop_runtime-0.7.23/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.24}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phase-loop-runtime
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.24
|
|
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
|
|
@@ -50,7 +50,7 @@ To install just this runtime package directly:
|
|
|
50
50
|
|
|
51
51
|
```sh
|
|
52
52
|
pip install phase-loop-runtime # latest compatible release
|
|
53
|
-
pip install phase-loop-runtime==0.7.
|
|
53
|
+
pip install phase-loop-runtime==0.7.24 # …or pin an exact version
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
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.24 # …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.24"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -156,6 +156,7 @@ phase_loop_runtime = [
|
|
|
156
156
|
markers = [
|
|
157
157
|
"dotfiles_integration: test requires a dotfiles fleet tree (skipped standalone)",
|
|
158
158
|
"quarantine(reason): known flake tracked by an OPEN issue; deselected on pull-request CI only (agent-harness#1029)",
|
|
159
|
+
"host_seat_credentials: live jailed-seat test that reads the host's Claude login and seat-jail state (agent-harness#1132)",
|
|
159
160
|
]
|
|
160
161
|
|
|
161
162
|
[tool.setuptools.data-files]
|
|
@@ -563,6 +563,15 @@ only in a private 0600 per-leg file under the run's stream dir (`leg-logs/`, 070
|
|
|
563
563
|
reasons or the board summary. Its name carries only closed fields:
|
|
564
564
|
`leg-logs/<registry harness | leg>-<24 hex>.log`.
|
|
565
565
|
|
|
566
|
+
**Seat-jail codes (agent-harness#1132, F030).** Every seat-jail notice code is an exact
|
|
567
|
+
literal of `_HARNESS_DETAIL_CODES`: `seat_sandbox_unavailable_{host,seat_uid,tiocsti}`,
|
|
568
|
+
`seat_sandbox_not_staged`, each `seat_sandbox_refused:<sub>` as its own literal
|
|
569
|
+
(`jail_build`, `namespace`, `identity`, `preseed`, `token_file_unsafe`,
|
|
570
|
+
`gemini_credential_unsafe`, `stage_not_private`, `stage_changed`, `output_unsafe`),
|
|
571
|
+
`seat_sandbox_retained_after_teardown`, and the `claude_seat_*` / `gemini_seat_*` codes. No
|
|
572
|
+
regex template admits a seat code, and there is no parallel vocabulary: `seat_jail.NOTICES`
|
|
573
|
+
only renders each code's literal what/why/fix, and a test holds the two sets equal.
|
|
574
|
+
|
|
566
575
|
**Threat model.** I3 defends against untrusted TEXT: CLI stdout/stderr, leg bodies, exception messages and PTY output. None of it can choose or enter `detail`. In-process Python code is trusted runtime code and is out of scope: it can do anything (for example `object.__setattr__` on arbitrary objects, or replacing this module's functions). The exact-type checks (`PanelLegResult` refuses any subclass instance; only an exact `_HarnessCode` / `_LegFailure` has provenance; contents are read with `str.__str__` and re-created as a fresh `_HarnessCode`) close the cheap structural bypasses, but they are not a sandbox against hostile in-process code.
|
|
567
576
|
|
|
568
577
|
## ABDMODE — Purpose-derived default mode + advisory prompt hygiene · `panel_invoker.py` (#107)
|
|
@@ -889,8 +898,9 @@ set `gemini_heartbeat.QUALIFIED_IMAGES`: 1.2.11 SHA256
|
|
|
889
898
|
`ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`, 1.2.12 SHA256
|
|
890
899
|
`ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`, 1.2.14 SHA256
|
|
891
900
|
`0d0d3eba22daf29504dd290151c7ed9a4d33b0c6aa0acfc5da27bc3b01d2f029`, 1.2.15 SHA256
|
|
892
|
-
`5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164
|
|
893
|
-
`a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86
|
|
901
|
+
`5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164`, 1.2.16 SHA256
|
|
902
|
+
`a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86` or 1.2.17 SHA256
|
|
903
|
+
`c54ef90651a8646ae67334d39212c81f5946feec373ad6aa335f9ef401662bc5`. Each member
|
|
894
904
|
carries its measured help digest and has its own qualification record; the
|
|
895
905
|
evidence catalog and the runtime set must name exactly the same members.
|
|
896
906
|
The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
|
|
@@ -1043,6 +1053,281 @@ A non-release `agy` image is admitted only by verifying it, never by trusting it
|
|
|
1043
1053
|
created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
|
|
1044
1054
|
agree. It refuses when it cannot prove its open-PR listing complete.
|
|
1045
1055
|
|
|
1056
|
+
## SEATJAIL — Full-permission review seats inside a per-seat jail (agent-harness#1132)
|
|
1057
|
+
|
|
1058
|
+
Plan: `plans/detailed-seat-sandbox-permissions-1132-20260928.md`. Maintainer decisions D1-D8
|
|
1059
|
+
are recorded on agent-harness#1132.
|
|
1060
|
+
|
|
1061
|
+
- **Route (J7).** A production brokered Claude or Gemini leg decides its route once, after
|
|
1062
|
+
the public-entry authorization and before staging, in this order; the first failure wins
|
|
1063
|
+
and yields exactly one code: (0) no staged tree -> `seat_sandbox_not_staged`; (1) a
|
|
1064
|
+
recorded Gemini P4/P3 stop -> its code (today `gemini_seat_egress_unconfined`: the agy
|
|
1065
|
+
token carries `cloud-platform`, and the "prove then enable" containment probe found jail
|
|
1066
|
+
egress not limited to agy's inference hosts; P3 was not run and the tooled profile is not
|
|
1067
|
+
built); (2) host capability -> `seat_sandbox_unavailable_host`,
|
|
1068
|
+
`_tiocsti`, or `_seat_uid`; (3) credential presence -> `claude_seat_token_missing` /
|
|
1069
|
+
`gemini_seat_credential_missing`; (4) Gemini tooled qualification ->
|
|
1070
|
+
`gemini_seat_profile_unqualified`. Steps 0-4 send the seat to the sealed inline route,
|
|
1071
|
+
byte-identical to before, with that notice, except a Claude seat's step 3, which is not
|
|
1072
|
+
run (plan amendment A3b, below). Codex and grok are not jailed
|
|
1073
|
+
(agent-harness#895) and carry `seat_filesystem_unconfined` when given a tree.
|
|
1074
|
+
- **No sealed fallback for a jail-eligible seat (plan amendment A3b).** A Claude seat that
|
|
1075
|
+
would take the jailed route but cannot (no credential, a failed first-use qualification,
|
|
1076
|
+
a login not renewed within the wait, an unqualified or unsafe gate, an unsafe override)
|
|
1077
|
+
is DEGRADED and NOT RUN, typed, with a fix. It is never a toolless substitute.
|
|
1078
|
+
`seat_jail.JAIL_NOT_RUN_CODES` names the route codes this applies to; none of them is in
|
|
1079
|
+
`SEALED_FALLBACK_CODES`. The sealed route stays for hosts without the jail prerequisites,
|
|
1080
|
+
an unstaged review and the Gemini seat (agent-harness#1244).
|
|
1081
|
+
- **The jailed route is Claude-only.** `JAILED_LEGS` is exactly `{"claude"}`. A Gemini
|
|
1082
|
+
seat always takes the sealed route with its typed notice, whatever its credential,
|
|
1083
|
+
qualification or recorded stop; a tooled Gemini seat is agent-harness#1170.
|
|
1084
|
+
- **EC-EXECFIND-2 gate.** A jailed route whose jail profile digest has no EC-EXECFIND-2
|
|
1085
|
+
falsifier pass recorded on THIS host is REFUSED before any effect with
|
|
1086
|
+
`seat_sandbox_refused:jail_unqualified`. The notice names the per-host qualification as
|
|
1087
|
+
the fix.
|
|
1088
|
+
- **Where passes live:** per user and per host, at
|
|
1089
|
+
`$XDG_STATE_HOME/phase-loop/seat-jail-passes/<digest>.json`. A record qualifies only if it
|
|
1090
|
+
binds all of:
|
|
1091
|
+
- the digest;
|
|
1092
|
+
- this host (sha256 of `/etc/machine-id`);
|
|
1093
|
+
- the EC-EXECFIND-2 falsifier-run layout: `seat_jail.falsifier_layout_identity()`, a
|
|
1094
|
+
digest of the EXECFIND staging and run code, so a change to either invalidates every
|
|
1095
|
+
pass;
|
|
1096
|
+
- the run's evidence file, which the gate re-hashes and which must name the same values.
|
|
1097
|
+
|
|
1098
|
+
The record and the evidence must be regular, operator-owned files that are not group- or
|
|
1099
|
+
other-writable and are not links. They are read non-blocking with size caps.
|
|
1100
|
+
- **The directory chain:** every directory up to the state home must be operator-owned,
|
|
1101
|
+
must not be a link, and must not be other-writable. It may be group-writable only when
|
|
1102
|
+
its group is the operator's user-private group, which is the umask-002 default. That
|
|
1103
|
+
means all of the following hold:
|
|
1104
|
+
- it is the operator's primary gid;
|
|
1105
|
+
- the group is named after the operator;
|
|
1106
|
+
- it lists no other member;
|
|
1107
|
+
- no other account has it as its primary group.
|
|
1108
|
+
|
|
1109
|
+
Any other chain is refused with `seat_sandbox_refused:pass_store_unsafe`, whose notice
|
|
1110
|
+
names the chmod. The recorder applies the same rule and never re-permissions an
|
|
1111
|
+
existing directory.
|
|
1112
|
+
- **One fail-closed boundary:** the whole evaluation is inside a single
|
|
1113
|
+
`except Exception`. Any error is the typed refusal `jail_unqualified`, and no provider
|
|
1114
|
+
is launched. The route detail stays the closed code. The verdict's typed reason
|
|
1115
|
+
(`no_record`, `binding_mismatch`, `evidence_mismatch`, `store_unsafe:...` or
|
|
1116
|
+
`error:<ExceptionClass>`) is logged, and is carried in the launch refusal's message.
|
|
1117
|
+
- **Checked at launch:** qualification is re-checked against the jail actually built.
|
|
1118
|
+
- **Threat model:** the operator's own account can forge a record, and is trusted to. The
|
|
1119
|
+
store defends against the seat uid, stale records, other hosts and accidental reuse.
|
|
1120
|
+
- **Why per host:** the digest binds the host's layout (maintainer decision, option A).
|
|
1121
|
+
A shipped host-independent policy digest plus a first-use self-check is
|
|
1122
|
+
agent-harness#1186.
|
|
1123
|
+
- **Recording a pass:** `phase-loop seat-sandbox qualify` runs EC-EXECFIND-2's jail
|
|
1124
|
+
falsifiers (`seat_jail_qualification`) against a real falsifier run, using the EXECFIND
|
|
1125
|
+
staging, the dependency snapshot and the bounded bwrap runner:
|
|
1126
|
+
- the run holds a nonce sentinel in every protected directory, a sentinel process, and
|
|
1127
|
+
TCP, UDP, pathname Unix and abstract Unix listeners;
|
|
1128
|
+
- concurrently, a probe program running as the seat in the production jail tries to
|
|
1129
|
+
create entries, change sentinels, signal and connect, through the host paths and
|
|
1130
|
+
through anything it resolves by device and inode;
|
|
1131
|
+
- the parent judges the result: sentinels intact, no events, single-link protected
|
|
1132
|
+
files, no seat mount or descriptor resolving to a protected object or an ancestor, and
|
|
1133
|
+
the run `green_on_head`.
|
|
1134
|
+
|
|
1135
|
+
Only a pass is recorded.
|
|
1136
|
+
- **`seat_sandbox_refused:identity`** remains the code for a jail that is not the
|
|
1137
|
+
qualified profile at launch, or a failed identity probe.
|
|
1138
|
+
- **Jail profile (`seat_jail_v1`).** bwrap, no `--unshare-user` and no `--unshare-net`:
|
|
1139
|
+
read-only `/usr` (merged-`/usr` links recreated), an `/etc` subset, the provider image at
|
|
1140
|
+
`/seat/bin/<leg>`, the bundle and instructions as sealed memfds at `/seat/review/`, the
|
|
1141
|
+
staged clone read-write at `/seat/tree`, fresh `/seat/home` and `/seat/out`, tmpfs `/tmp`
|
|
1142
|
+
and `/dev/shm`, `--remount-ro /`, `--clearenv` plus a declared environment (the seat's
|
|
1143
|
+
`TMPDIR` and `CLAUDE_CODE_TMPDIR` are `/seat/home/.tmp`, on the disk-backed staging root,
|
|
1144
|
+
never the tmpfs `/tmp`; agent-harness#1147), and the J14
|
|
1145
|
+
seccomp filter (architecture kill, x32 EPERM, nested user/mount namespaces, `setns`,
|
|
1146
|
+
`clone3` ENOSYS, key syscalls, AF_ALG sockets, TIOCSTI/TIOCLINUX). The profile digest
|
|
1147
|
+
covers the mount set, the flags and the filter digest.
|
|
1148
|
+
- **Seat uid (D8).** The seat runs as a subordinate uid leased from the operator's
|
|
1149
|
+
`/etc/subuid` range, inside an egress holder namespace mapped by `newuidmap`/`newgidmap`
|
|
1150
|
+
(in it, uid 0 is the operator). Launch order: fresh session keyring, `nsenter` into H,
|
|
1151
|
+
the private-inode hand-off (`seat_sandbox_refused:stage_not_private` on any hard link),
|
|
1152
|
+
bwrap with `--cap-drop ALL` then exactly `CAP_SETUID`, `CAP_SETGID`, `CAP_SETPCAP` (P5:
|
|
1153
|
+
bwrap as namespace root otherwise keeps every capability), then `setpriv` to the seat
|
|
1154
|
+
uid with every capability set, the bounding set included, emptied and no-new-privs set,
|
|
1155
|
+
then `env --chdir=/seat/tree` as the seat. `/seat`, `/seat/bin`, `/seat/review` and
|
|
1156
|
+
`/etc` are created 0755 and the tmpfs mounts 1777, so the seat uid can traverse and use
|
|
1157
|
+
them (P5, P1).
|
|
1158
|
+
The host prerequisite (`apt install uidmap`, `usermod --add-subuids/--add-subgids`) is a
|
|
1159
|
+
one-time root step by the maintainer, never run by the runtime.
|
|
1160
|
+
- **Credential channels (plan amendment A1).** The Claude credential is resolved afresh at
|
|
1161
|
+
each jailed launch, in this order:
|
|
1162
|
+
1. The seat-token override, the record `$XDG_STATE_HOME/phase-loop/seat-credentials/
|
|
1163
|
+
claude.override.json` (owner-only, in a 0700 directory, owned by the euid). It is
|
|
1164
|
+
written only by `phase-loop seat-sandbox store-token` and used only when it is bound to
|
|
1165
|
+
the account and organization the launching session is logged in to (plan amendment A4,
|
|
1166
|
+
below). A hand-placed raw `seat-credentials/claude` file is never used.
|
|
1167
|
+
2. Otherwise, the current Claude login's `claudeAiOauth.accessToken` only, never its
|
|
1168
|
+
refresh token. It comes from the CLI's own store: `$CLAUDE_CONFIG_DIR/.credentials.json`
|
|
1169
|
+
or `~/.claude/.credentials.json`, and the login Keychain on macOS.
|
|
1170
|
+
|
|
1171
|
+
- **The login token's margin:** it must have the seat's hard deadline (its explicit
|
|
1172
|
+
per-leg timeout, else the 1800 s backstop) or `PHASE_LOOP_SEAT_LOGIN_TOKEN_MARGIN_S`
|
|
1173
|
+
left. One function (`_claude_seat_login_margin_s`) gives this margin to the pre-launch
|
|
1174
|
+
seat mode, the wait and the launch.
|
|
1175
|
+
- **A short login (plan amendment A3):** the harness never runs the Claude CLI to renew a
|
|
1176
|
+
credential. The mode line carries `claude_seat_login_token_awaiting_refresh` with the
|
|
1177
|
+
minutes left. Before staging, and before any seat id or namespace is held, the seat
|
|
1178
|
+
waits: `seat_credentials.await_login_margin` reads the store read-only every
|
|
1179
|
+
`PHASE_LOOP_SEAT_LOGIN_REFRESH_POLL_S` (30 s), for up to
|
|
1180
|
+
`PHASE_LOOP_SEAT_LOGIN_REFRESH_WAIT_S` (900 s; 0 means no wait).
|
|
1181
|
+
- **Renewed:** the seat runs jailed (logged `jailed (login refreshed)`), re-reading the
|
|
1182
|
+
token at launch.
|
|
1183
|
+
- **Not renewed in time:** the seat is DEGRADED and NOT RUN with
|
|
1184
|
+
`claude_seat_login_token_expiring`. A store that stops yielding a login ends it with
|
|
1185
|
+
`claude_seat_token_missing`. Nothing is launched (plan amendment A3b).
|
|
1186
|
+
- **Monitoring:** under `heartbeat_only` the wait is recorded as `login_wait` in the
|
|
1187
|
+
monitoring record, not as a stall, and the stall clock starts after it. Under a
|
|
1188
|
+
bounded policy it is charged to the leg's deadline. The monitor's cancel event and the
|
|
1189
|
+
quiescence latch end it.
|
|
1190
|
+
- **Delivery:** either credential is delivered only through one drained pipe named by
|
|
1191
|
+
`CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR`. No credential is in any argv, environment
|
|
1192
|
+
value, evidence or log.
|
|
1193
|
+
- **The output scan:** seat output is scanned for the credential's bytes and its
|
|
1194
|
+
standard, URL-safe and hex encodings (`claude_seat_token_in_output`).
|
|
1195
|
+
- **The residual:** a seat can use the credential for its remaining lifetime. That is
|
|
1196
|
+
hours for a login access token. The response is to log out and back in; the token also
|
|
1197
|
+
expires on its own.
|
|
1198
|
+
- **Gemini:** the D7 access-token-only copy (builder only; the tooled Gemini route is gated
|
|
1199
|
+
on P4 then P3).
|
|
1200
|
+
- **Credential outcomes by source.** For the override: `claude_seat_token_rate_limited` and
|
|
1201
|
+
`claude_seat_token_rejected`. For the login: `claude_seat_login_rate_limited` and
|
|
1202
|
+
`claude_seat_login_rejected`. A login token at or past its launch-time expiry fails as
|
|
1203
|
+
`claude_seat_login_token_expired`, in both the detail and the notice, and is safe to
|
|
1204
|
+
relaunch. None of these is a `seat_sandbox_refused:*` code. On both the sealed and the
|
|
1205
|
+
jailed route, an authentication failure in the PTY tail takes priority over the generic
|
|
1206
|
+
journaled give-up (`claude_seat_provider_api_error`), so a credential outcome is never
|
|
1207
|
+
hidden behind it; every typed give-up (limits, output budget, rejected transcript) keeps
|
|
1208
|
+
its priority.
|
|
1209
|
+
- **First-use qualification (plan amendment A2; folds in agent-harness#1186 option C).** A
|
|
1210
|
+
jailed route with no recorded pass for this host, digest and layout runs the host's jail
|
|
1211
|
+
qualification once, before launch. It is serialized by an exclusive lock in the per-user
|
|
1212
|
+
state directory, and on a pass it records the pass.
|
|
1213
|
+
- **On a pass:** the seat stays jailed, and its mode reports `qualified_now`.
|
|
1214
|
+
- **On a failure, or a run that cannot happen (a cached failure included):** the seat is
|
|
1215
|
+
DEGRADED and NOT RUN with `seat_jail_qualification_failed` and a typed reason
|
|
1216
|
+
(`prerequisite_missing`, `store_unsafe`, `falsifiers_failed`, `timeout` or `error`),
|
|
1217
|
+
each with a literal fix (plan amendment A3b supersedes A2's sealed fallback).
|
|
1218
|
+
- **The failure cache:** failures are cached per host, digest and layout for
|
|
1219
|
+
`PHASE_LOOP_SEAT_JAIL_QUALIFY_RETRY_S` (default 3600 s). A lock timeout is not cached.
|
|
1220
|
+
- **The launch-time re-check** against the built jail still refuses an unrecorded digest.
|
|
1221
|
+
- **Seat modes (plan amendment A1).** Before any seat launches, every board publishes one
|
|
1222
|
+
mode per seat: `jailed`, `unconfined`, `sealed`, `degraded` or `native`. Each mode carries
|
|
1223
|
+
its notice code, reason and fix, and the modes are delivered through `on_seat_modes`, the
|
|
1224
|
+
log and `seat-modes.json`. The `advisor-board` CLI prints them to stderr and carries them as
|
|
1225
|
+
`seat_modes` in `--json`.
|
|
1226
|
+
- **Launch helpers.** The pre-jail and in-namespace helpers (`seat_keyring_exec`, the
|
|
1227
|
+
`seat_uid` handoff and its in-namespace verbs) run from the installation the parent
|
|
1228
|
+
imported: `python -I` with this package's root put first on the import path
|
|
1229
|
+
(`seat_uid.trusted_module_argv`), never `python -m`, whatever the launch's working
|
|
1230
|
+
directory is. An inventory test fails on any `sys.executable -m` launch of a package
|
|
1231
|
+
module.
|
|
1232
|
+
- **Scratch decision (agent-harness#1147).** A jailed launch's helper chain gets one env
|
|
1233
|
+
from `child_scratch_env` (`_jail_launch_env`), and that same object is handed to the
|
|
1234
|
+
identity probe and the launch. The seat never sees it: bwrap clears the environment and
|
|
1235
|
+
sets the seat's own.
|
|
1236
|
+
- **The override follows the launching session (plan amendment A4).** A seat's credential
|
|
1237
|
+
follows the subscription of the session that launched the leg.
|
|
1238
|
+
- **Storing:** `phase-loop seat-sandbox store-token` reads the override with no echo, or
|
|
1239
|
+
from stdin. A terminal that cannot hide the input is refused. The token and its account
|
|
1240
|
+
are stored as ONE record, `seat-credentials/claude.override.json`
|
|
1241
|
+
(`{"schema": "seat_credential_override.v1", "account": ..., "token": ...}`).
|
|
1242
|
+
- **The account** is the current login's `oauthAccount.accountUuid`, from
|
|
1243
|
+
`$CLAUDE_CONFIG_DIR/.claude.json` or `~/.claude.json`, read without running the CLI.
|
|
1244
|
+
- **Refused** with no login. An unsafe account file is named in the refusal.
|
|
1245
|
+
- **The write:** it goes relative to the held directory descriptors (each directory
|
|
1246
|
+
component opened without following links and checked on the descriptor), as a new
|
|
1247
|
+
0600 file under a random name renamed into place. A store is therefore atomic, and
|
|
1248
|
+
concurrent stores leave one complete record.
|
|
1249
|
+
- **At launch:** the record is read once, without following a link and without blocking.
|
|
1250
|
+
- **Used:** only when its account equals the launching session's account, and the
|
|
1251
|
+
launch uses exactly the token bytes whose account was checked.
|
|
1252
|
+
- **Not used:** when the accounts differ, when either is unknown, when the record is
|
|
1253
|
+
malformed, or when only a hand-placed raw `seat-credentials/claude` exists. The seat
|
|
1254
|
+
then uses the login and carries the notice `claude_seat_override_other_subscription`,
|
|
1255
|
+
also on its mode line, beside any login notice. That notice is not a jail refusal.
|
|
1256
|
+
- **Unsafe:** a record that is not a private regular file the euid owns refuses the
|
|
1257
|
+
launch (`seat_sandbox_refused:token_file_unsafe`).
|
|
1258
|
+
- **When the seat does not run:** a refusal (no login, a login short of the margin, a wait
|
|
1259
|
+
that ended short) carries `claude_seat_override_other_subscription` beside its one
|
|
1260
|
+
refusal code whenever a stored override was ignored. The seat's notices, the A3b
|
|
1261
|
+
DEGRADED result and the mode line all carry it.
|
|
1262
|
+
- **Per harness:** the rule lives once, in `override_decision(adapter)`. Each harness's
|
|
1263
|
+
`SeatCredentialAdapter` answers `override_present()`, `read_override()` (the record,
|
|
1264
|
+
read once) and `current_account()`, and declares its credential `sources` in precedence
|
|
1265
|
+
order; an adapter without the override source never uses one. Claude is the only
|
|
1266
|
+
adapter today, and `store-token` stores Claude's override.
|
|
1267
|
+
- **One slot per user:** the override lives under the Unix user's `$XDG_STATE_HOME`, so
|
|
1268
|
+
there is one per user, not one per config directory or account. A store from another
|
|
1269
|
+
account replaces it, and sessions on the earlier account then use their login, with
|
|
1270
|
+
the notice.
|
|
1271
|
+
- **Independent reads:** the mode line, the A3 wait and the launch each read the decision
|
|
1272
|
+
afresh. A `/login` between them can change the outcome. Every such change falls toward
|
|
1273
|
+
the login, never toward an unbound override.
|
|
1274
|
+
- **macOS:** the CLI keeps the login in the Keychain service named from
|
|
1275
|
+
`CLAUDE_SECURESTORAGE_CONFIG_DIR` when that is set, and the account in
|
|
1276
|
+
`CLAUDE_CONFIG_DIR/.claude.json`. With only the former set, the account and the login
|
|
1277
|
+
can describe different identities. Set both, or neither.
|
|
1278
|
+
- **Organization (maintainer ruling 2026-10-05):** the record (schema
|
|
1279
|
+
`seat_credential_override.v2`) binds both `oauthAccount.accountUuid` and
|
|
1280
|
+
`oauthAccount.organizationUuid`, read from the same `.claude.json`.
|
|
1281
|
+
- **At launch:** the override applies only when both are known and both equal the
|
|
1282
|
+
session's. A v1 or organization-less record is unbound.
|
|
1283
|
+
- **Storing:** `store-token` refuses when the organization is unknown.
|
|
1284
|
+
- **Permissions:** the record must be owner-only: any group or other bit refuses with
|
|
1285
|
+
`token_file_unsafe`. The store opens every directory component, the state root
|
|
1286
|
+
included, without following links; a linked state root is refused, naming the directory
|
|
1287
|
+
to set `XDG_STATE_HOME` to.
|
|
1288
|
+
- **Refusals after resolution:** a refusal raised after the credential is resolved (the
|
|
1289
|
+
jail build, the pre-seed, the namespace) also carries the ignored-override notice beside
|
|
1290
|
+
its one refusal code.
|
|
1291
|
+
- **Modes without the notice:** sealed, unconfined and native Claude modes carry no
|
|
1292
|
+
override notice, by design: the override is never their credential.
|
|
1293
|
+
- **Status:** `phase-loop seat-sandbox token-status` shows the bound account and
|
|
1294
|
+
organization, this session's, and whether the override applies. It exits 0 only when
|
|
1295
|
+
the override applies, and never shows the token.
|
|
1296
|
+
- **Seat-token rotation.** The override record is read at each jailed launch and never
|
|
1297
|
+
cached across legs or rounds.
|
|
1298
|
+
- **Rotating:** `phase-loop seat-sandbox store-token` is the only way to rotate it. It
|
|
1299
|
+
replaces the record with one rename, and the next launch uses the new token; a running
|
|
1300
|
+
leg keeps the token it was launched with.
|
|
1301
|
+
- **By hand:** a token file replaced by hand is ignored.
|
|
1302
|
+
The token is per-launch input only: neither the jail profile digest nor an EC-EXECFIND-2
|
|
1303
|
+
pass binds it, so replacing it trips no qualification check.
|
|
1304
|
+
- **A rate-limited seat token is not a jail fault.** When the provider refuses the seat
|
|
1305
|
+
token's subscription for a rate or usage limit (the shared leg-failure classifier's
|
|
1306
|
+
`usage_limit` class, with the provider's reset time when it gives one), the leg ends with
|
|
1307
|
+
that detail and the notice `claude_seat_token_rate_limited`: rotate or replace the seat
|
|
1308
|
+
token, or wait for the reset. It is never a `seat_sandbox_refused:*` code. A token the provider
|
|
1309
|
+
rejects (the classifier's `auth_failure`, measured in P2) carries
|
|
1310
|
+
`claude_seat_token_rejected`.
|
|
1311
|
+
- **Pointer-brief preflight.** On a `--pointer-brief` board, a seat whose launch takes the
|
|
1312
|
+
jailed route (the same J7 decision and EC-EXECFIND-2 gate the launch applies) has file
|
|
1313
|
+
access to the staged tree, so it is source-grounded and never marked
|
|
1314
|
+
`seat_pointer_brief_unreadable`. A jail that would be refused is not counted as one.
|
|
1315
|
+
- **Pointer mode.** A jailed seat gets a pointer brief: jail-path preamble, the
|
|
1316
|
+
AUTHORITATIVE INSTRUCTIONS inline, and POINTER frames naming the bundle (path, sha256,
|
|
1317
|
+
size) and the tree (path, source commit, approved digest). Evidence records
|
|
1318
|
+
`provider_input_mode: "pointer"`, `provider_input_inline: false`,
|
|
1319
|
+
`sandbox_filesystem_confined: true` and the jail profile id and digests;
|
|
1320
|
+
`verify_harden_evidence.py` reports EC-HARDEN-5 UNMET (accepted residual
|
|
1321
|
+
agent-harness#361, D3) on every such record.
|
|
1322
|
+
- **Notices.** `{code, seat_key, what, why, fix}`, rendered only from literals, on the
|
|
1323
|
+
`advisor-board` payload (`notices`, `legs[].notices`) and text summary, and on the
|
|
1324
|
+
governed path as one non-gating `seat_notice` finding per notice (L4b).
|
|
1325
|
+
- **Retention.** A failed in-namespace teardown keeps the seat directories under the leg's
|
|
1326
|
+
operator-owned 0700 scratch dir, adds `seat_sandbox_retained_after_teardown`, and records
|
|
1327
|
+
the path. `phase-loop seat-sandbox reap PATH` accepts only a recorded path under the
|
|
1328
|
+
stage root, opened `O_NOFOLLOW|O_DIRECTORY` component by component, and owned by a
|
|
1329
|
+
subordinate uid.
|
|
1330
|
+
|
|
1046
1331
|
## ABDFALSIFY — Executable review findings (IF-0-EXECFIND-1)
|
|
1047
1332
|
|
|
1048
1333
|
An optional `falsifier` attachment names one `FindingFalsifier` with
|
|
@@ -1038,6 +1038,19 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
1038
1038
|
metavar="PATH",
|
|
1039
1039
|
help="Load the BOM from a fixture JSON instead of live registries (CI/test wiring).",
|
|
1040
1040
|
)
|
|
1041
|
+
# seat-sandbox reap (agent-harness#1132, F022): remove a jailed seat's directory that
|
|
1042
|
+
# teardown retained. Only a path recorded by a retention notice is accepted.
|
|
1043
|
+
seat_sandbox_sub = subparsers.add_parser(
|
|
1044
|
+
"seat-sandbox",
|
|
1045
|
+
help=("Jailed review-seat maintenance: `qualify` runs the EC-EXECFIND-2 jail "
|
|
1046
|
+
"falsifiers on this host and records its pass; `reap PATH` removes a retained "
|
|
1047
|
+
"seat directory; `store-token` stores a Claude seat-token override (read with no "
|
|
1048
|
+
"echo, or from stdin) bound to the account you are logged in to now; "
|
|
1049
|
+
"`token-status` shows that binding (never the token)."),
|
|
1050
|
+
)
|
|
1051
|
+
seat_sandbox_sub.add_argument("seat_sandbox_action",
|
|
1052
|
+
choices=("qualify", "reap", "store-token", "token-status"))
|
|
1053
|
+
seat_sandbox_sub.add_argument("seat_sandbox_path", metavar="PATH", nargs="?")
|
|
1041
1054
|
# train-status: non-mutating inspection of the cross-repo train ledger (#45).
|
|
1042
1055
|
# Reads the SAME default ledger path as run-train; opens no PRs, writes nothing.
|
|
1043
1056
|
train_status_sub = subparsers.add_parser(
|
|
@@ -1543,6 +1556,8 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1543
1556
|
return _task_message_broker_serve_command(args=args)
|
|
1544
1557
|
if command == "advisor-board":
|
|
1545
1558
|
return _advisor_board_command(args=args)
|
|
1559
|
+
if command == "seat-sandbox":
|
|
1560
|
+
return _seat_sandbox_command(args=args)
|
|
1546
1561
|
if command == "docs-audit":
|
|
1547
1562
|
from . import docs_audit
|
|
1548
1563
|
|
|
@@ -2319,6 +2334,14 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2319
2334
|
elif getattr(args, "native_president", None) is not None:
|
|
2320
2335
|
print("advisor-board: --native-president requires --landing-tier", file=sys.stderr)
|
|
2321
2336
|
return 2
|
|
2337
|
+
# agent-harness#1132 (plan amendment A1): every seat's launch mode, printed before any
|
|
2338
|
+
# seat launches and carried into the JSON payload.
|
|
2339
|
+
seat_modes: list = []
|
|
2340
|
+
|
|
2341
|
+
def _on_seat_modes(modes) -> None:
|
|
2342
|
+
seat_modes.extend(modes)
|
|
2343
|
+
_print_seat_modes(modes)
|
|
2344
|
+
|
|
2322
2345
|
try:
|
|
2323
2346
|
with tempfile.TemporaryDirectory(prefix="advisor-board-") as scratch:
|
|
2324
2347
|
invoke_kwargs: dict[str, object] = {
|
|
@@ -2328,6 +2351,7 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2328
2351
|
**({"brief_ref": advisory_brief_ref} if advisory else {}),
|
|
2329
2352
|
"agy_canary_capture": capture,
|
|
2330
2353
|
**({"monitoring_policy": monitoring_policy} if monitoring_policy != "bounded" else {}),
|
|
2354
|
+
"on_seat_modes": _on_seat_modes,
|
|
2331
2355
|
}
|
|
2332
2356
|
if pointer_brief:
|
|
2333
2357
|
# agent-harness#1204: the preflight's notices are printed BEFORE any launch.
|
|
@@ -2436,6 +2460,11 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2436
2460
|
"requested_seats": requested_seats,
|
|
2437
2461
|
"delivered_seats": usable_count,
|
|
2438
2462
|
"shortfall": shortfall,
|
|
2463
|
+
# agent-harness#1132: typed seat notices, board-wide and per leg.
|
|
2464
|
+
"notices": _board_notices_json(result.legs),
|
|
2465
|
+
# agent-harness#1132 (plan amendment A1): each seat's launch mode, decided before
|
|
2466
|
+
# any seat launched.
|
|
2467
|
+
"seat_modes": [mode.as_json() for mode in seat_modes],
|
|
2439
2468
|
"independence": {
|
|
2440
2469
|
"level": independence.level,
|
|
2441
2470
|
# The sealed evidence floor derives these from concrete leg
|
|
@@ -2456,6 +2485,7 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2456
2485
|
# ABDNATIVE (#183): a deferred claude seat carries the
|
|
2457
2486
|
# typed native-fill request the harness must run; None otherwise.
|
|
2458
2487
|
"needs_native_agent": _native_agent_request_json(leg),
|
|
2488
|
+
"notices": [notice.as_json() for notice in leg.seat_notices],
|
|
2459
2489
|
# agent-harness#1176: a heartbeat_only seat's monitoring record (progress
|
|
2460
2490
|
# notice, provider terminal state); absent under the bounded policy.
|
|
2461
2491
|
**({"review_monitoring": dict(leg.review_monitoring)}
|
|
@@ -2467,11 +2497,13 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2467
2497
|
if pointer_brief:
|
|
2468
2498
|
# agent-harness#1204: present only for a pointer-brief board, so every other
|
|
2469
2499
|
# payload (and the closed capture schema) is unchanged.
|
|
2500
|
+
# The preflight notices join the seat notices (agent-harness#1132); neither
|
|
2501
|
+
# list replaces the other.
|
|
2470
2502
|
payload["grounded_seats"] = grounded_count
|
|
2471
|
-
payload["notices"]
|
|
2503
|
+
payload["notices"] += [n.as_json() for n in result.seat_preflight_notices]
|
|
2472
2504
|
for entry, leg in zip(payload["legs"], result.legs):
|
|
2473
2505
|
entry["source_grounded"] = leg.source_grounded
|
|
2474
|
-
entry["notices"]
|
|
2506
|
+
entry["notices"] += [n.as_json() for n in leg.seat_preflight_notices]
|
|
2475
2507
|
if advisory:
|
|
2476
2508
|
payload.update(_advisory_labels(review_brief, composed_board=board.name))
|
|
2477
2509
|
if capture is not None:
|
|
@@ -2491,9 +2523,18 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2491
2523
|
capture.close()
|
|
2492
2524
|
return 2
|
|
2493
2525
|
payload["agy_canary_capture"] = expected_capture
|
|
2526
|
+
# The private capture board has its own closed schema, which predates seat
|
|
2527
|
+
# notices and seat modes (agent-harness#1132); it is written without them,
|
|
2528
|
+
# byte-for-byte as before.
|
|
2529
|
+
capture_payload = {key: value for key, value in payload.items()
|
|
2530
|
+
if key not in ("notices", "seat_modes")}
|
|
2531
|
+
capture_payload["legs"] = [
|
|
2532
|
+
{key: value for key, value in leg.items() if key != "notices"}
|
|
2533
|
+
for leg in payload["legs"]
|
|
2534
|
+
]
|
|
2494
2535
|
try:
|
|
2495
2536
|
private = write_private_board(
|
|
2496
|
-
capture=capture, basename=private_board_name, payload=
|
|
2537
|
+
capture=capture, basename=private_board_name, payload=capture_payload
|
|
2497
2538
|
)
|
|
2498
2539
|
except AgyCanaryEvidenceError as exc:
|
|
2499
2540
|
print(f"advisor-board: private capture sink failed: {exc}", file=sys.stderr)
|
|
@@ -2517,6 +2558,8 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2517
2558
|
shown = _finalize_leg_detail(leg.detail)
|
|
2518
2559
|
detail = f" — {shown}" if shown else ""
|
|
2519
2560
|
print(f" [{leg.status}] {leg.seat_key}{detail}")
|
|
2561
|
+
for notice in leg.seat_notices:
|
|
2562
|
+
print(f" notice {notice.code}: {notice.what} / {notice.why} / fix: {notice.fix}")
|
|
2520
2563
|
for notice in leg.seat_preflight_notices:
|
|
2521
2564
|
# agent-harness#1204: once per seat, from the notice table's literals.
|
|
2522
2565
|
print(f" notice {notice.code}: {notice.what} -- fix: {notice.fix}")
|
|
@@ -2572,6 +2615,109 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2572
2615
|
return exit_code
|
|
2573
2616
|
|
|
2574
2617
|
|
|
2618
|
+
def _seat_store_token() -> int:
|
|
2619
|
+
"""`seat-sandbox store-token`: the token is read with no echo (or from stdin when it is
|
|
2620
|
+
not a terminal) and is never printed; it is stored bound to the current login's account."""
|
|
2621
|
+
import getpass
|
|
2622
|
+
|
|
2623
|
+
from . import seat_credentials
|
|
2624
|
+
|
|
2625
|
+
if sys.stdin.isatty():
|
|
2626
|
+
import warnings
|
|
2627
|
+
|
|
2628
|
+
# getpass falls back to reading with echo ON when it cannot control the terminal,
|
|
2629
|
+
# warning first; make that warning a refusal, raised before anything is read.
|
|
2630
|
+
try:
|
|
2631
|
+
with warnings.catch_warnings():
|
|
2632
|
+
warnings.simplefilter("error", getpass.GetPassWarning)
|
|
2633
|
+
token = getpass.getpass("Claude seat token (input hidden): ").encode("utf-8")
|
|
2634
|
+
except getpass.GetPassWarning:
|
|
2635
|
+
print("seat-sandbox store-token: refused: this terminal cannot hide the input; "
|
|
2636
|
+
"pipe the token on stdin instead", file=sys.stderr)
|
|
2637
|
+
return 1
|
|
2638
|
+
else:
|
|
2639
|
+
token = sys.stdin.buffer.read(64 * 1024)
|
|
2640
|
+
try:
|
|
2641
|
+
identity = seat_credentials.store_override(token)
|
|
2642
|
+
except seat_credentials.StoreRefused as exc:
|
|
2643
|
+
print(f"seat-sandbox store-token: refused: {exc}", file=sys.stderr)
|
|
2644
|
+
return 1
|
|
2645
|
+
except OSError as exc:
|
|
2646
|
+
print(f"seat-sandbox store-token: failed ({type(exc).__name__})", file=sys.stderr)
|
|
2647
|
+
return 1
|
|
2648
|
+
print(f"seat-sandbox store-token: stored, bound to account {identity.account} in "
|
|
2649
|
+
f"organization {identity.organization} (the login you are using now); seats use it "
|
|
2650
|
+
"only while you are logged in to that account and organization. "
|
|
2651
|
+
"`phase-loop seat-sandbox token-status` shows the binding.")
|
|
2652
|
+
return 0
|
|
2653
|
+
|
|
2654
|
+
|
|
2655
|
+
def _seat_token_status() -> int:
|
|
2656
|
+
"""`seat-sandbox token-status`: the stored override's binding and whether it applies to
|
|
2657
|
+
this session. Never prints the token. Exits 0 only when the override applies."""
|
|
2658
|
+
from . import seat_credentials
|
|
2659
|
+
|
|
2660
|
+
status = seat_credentials.override_status()
|
|
2661
|
+
print(f"seat-sandbox token-status: override {status['state']}"
|
|
2662
|
+
f" (bound: account {status['bound_account'] or '-'},"
|
|
2663
|
+
f" organization {status['bound_organization'] or '-'};"
|
|
2664
|
+
f" this session: account {status['session_account'] or 'unknown'},"
|
|
2665
|
+
f" organization {status['session_organization'] or 'unknown'});"
|
|
2666
|
+
f" applies to this session: {'yes' if status['applies'] else 'no'}"
|
|
2667
|
+
+ (f" [{status['notice']}]" if status['notice'] else ""))
|
|
2668
|
+
return 0 if status["applies"] else 1
|
|
2669
|
+
|
|
2670
|
+
|
|
2671
|
+
def _seat_sandbox_command(args: argparse.Namespace) -> int:
|
|
2672
|
+
from . import seat_uid
|
|
2673
|
+
|
|
2674
|
+
if args.seat_sandbox_action == "store-token":
|
|
2675
|
+
return _seat_store_token()
|
|
2676
|
+
if args.seat_sandbox_action == "token-status":
|
|
2677
|
+
return _seat_token_status()
|
|
2678
|
+
|
|
2679
|
+
if args.seat_sandbox_action == "qualify":
|
|
2680
|
+
from . import seat_jail_autoqualify, seat_jail_qualification
|
|
2681
|
+
|
|
2682
|
+
try:
|
|
2683
|
+
# The same host lock as a first-use run, so the two never race the store.
|
|
2684
|
+
with seat_jail_autoqualify.qualification_lock():
|
|
2685
|
+
return seat_jail_qualification.main([])
|
|
2686
|
+
except seat_jail_qualification.QualificationError as exc:
|
|
2687
|
+
print(f"seat-sandbox qualify: cannot run: {exc}", file=sys.stderr)
|
|
2688
|
+
return 1
|
|
2689
|
+
except TimeoutError:
|
|
2690
|
+
print("seat-sandbox qualify: cannot run: another qualification holds the lock",
|
|
2691
|
+
file=sys.stderr)
|
|
2692
|
+
return 1
|
|
2693
|
+
if not args.seat_sandbox_path:
|
|
2694
|
+
print("seat-sandbox reap: PATH is required", file=sys.stderr)
|
|
2695
|
+
return 2
|
|
2696
|
+
|
|
2697
|
+
try:
|
|
2698
|
+
seat_uid.reap(str(args.seat_sandbox_path))
|
|
2699
|
+
except seat_uid.ReapRefused as exc:
|
|
2700
|
+
print(f"seat-sandbox reap: refused: {exc}", file=sys.stderr)
|
|
2701
|
+
return 1
|
|
2702
|
+
except OSError as exc:
|
|
2703
|
+
print(f"seat-sandbox reap: failed ({type(exc).__name__}); {seat_uid.PREREQUISITE}",
|
|
2704
|
+
file=sys.stderr)
|
|
2705
|
+
return 1
|
|
2706
|
+
print(f"seat-sandbox reap: removed {args.seat_sandbox_path}")
|
|
2707
|
+
return 0
|
|
2708
|
+
|
|
2709
|
+
|
|
2710
|
+
def _board_notices_json(legs) -> list[dict[str, str]]:
|
|
2711
|
+
"""Every leg's typed seat notices (agent-harness#1132), rendered from literals."""
|
|
2712
|
+
return [notice.as_json() for leg in legs for notice in leg.seat_notices]
|
|
2713
|
+
|
|
2714
|
+
|
|
2715
|
+
def _print_seat_modes(modes) -> None:
|
|
2716
|
+
"""agent-harness#1132 (plan amendment A1): one line per seat, before any seat launches."""
|
|
2717
|
+
for mode in modes:
|
|
2718
|
+
print(f"advisor-board: seat mode: {mode.render()}", file=sys.stderr)
|
|
2719
|
+
|
|
2720
|
+
|
|
2575
2721
|
def _print_seat_preflight(notices) -> None:
|
|
2576
2722
|
"""agent-harness#1204: the pointer-brief preflight, printed before any seat launches."""
|
|
2577
2723
|
for notice in notices:
|
{phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/gemini_heartbeat.py
RENAMED
|
@@ -34,6 +34,9 @@ QUALIFIED_IMAGES = {
|
|
|
34
34
|
# agy 1.2.16
|
|
35
35
|
"a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86":
|
|
36
36
|
"8fcf40227fe84704f7f8155b3b5ebcee79dfdc5208fde6e8b07569c24425f976",
|
|
37
|
+
# agy 1.2.17
|
|
38
|
+
"c54ef90651a8646ae67334d39212c81f5946feec373ad6aa335f9ef401662bc5":
|
|
39
|
+
"8fcf40227fe84704f7f8155b3b5ebcee79dfdc5208fde6e8b07569c24425f976",
|
|
37
40
|
}
|
|
38
41
|
PROFILE_ID = "agy_memfd_home_deny_all_v1"
|
|
39
42
|
PRIVATE_HOME = "/dev/phase-loop-agy"
|
{phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.24}/src/phase_loop_runtime/governed_review.py
RENAMED
|
@@ -239,6 +239,16 @@ def _findings_from_panel(
|
|
|
239
239
|
f"record_digest={digest}; president ruling required")
|
|
240
240
|
|
|
241
241
|
for leg in panel.legs:
|
|
242
|
+
# agent-harness#1132 (L4b): the leg's typed seat notices reach the governed path
|
|
243
|
+
# too, one non-gating finding each, rendered only from the notice table's literals.
|
|
244
|
+
for notice in getattr(leg, "seat_notices", ()):
|
|
245
|
+
findings.append(ReviewFinding(
|
|
246
|
+
code="seat_notice",
|
|
247
|
+
reason=(f"seat {notice.seat_key or leg.leg} notice {notice.code}: "
|
|
248
|
+
f"{notice.what} / {notice.why} / fix: {notice.fix}"),
|
|
249
|
+
severity="warn",
|
|
250
|
+
reviewed_sha=reviewed_sha,
|
|
251
|
+
))
|
|
242
252
|
# agent-harness#1176: a heartbeat_only seat that went without genuine progress past its
|
|
243
253
|
# notice window is recorded, whatever its final status. A warn: the notice is history,
|
|
244
254
|
# never a verdict, and never permission to end a seat.
|