phase-loop-runtime 0.7.17__tar.gz → 0.7.19__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/README.md +1 -1
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/pyproject.toml +2 -1
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +67 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +2 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/cli.py +101 -8
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_classifier.py +20 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gemini_heartbeat.py +2 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_review.py +57 -1
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/panel_invoker.py +369 -25
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +50 -18
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +48 -16
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +48 -16
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +48 -16
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_ledger.py +4 -1
- phase_loop_runtime-0.7.19/src/phase_loop_runtime/train_review_packet.py +862 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_runner.py +393 -268
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/SOURCES.txt +9 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_golden.py +17 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_chronology_scope.py +168 -24
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_offload_lock.py +21 -6
- phase_loop_runtime-0.7.19/tests/test_ci_quarantine.py +299 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_classifier.py +34 -0
- phase_loop_runtime-0.7.19/tests/test_execfind_falsifier.py +777 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_activation_promotion.py +35 -13
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_delta_consumer.py +73 -54
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_flag_off_recovery_leak_299.py +15 -10
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gemini_heartbeat_bootstrap.py +187 -10
- phase_loop_runtime-0.7.19/tests/test_governed_review.py +642 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_legible_roadmap_contract.py +6 -6
- phase_loop_runtime-0.7.19/tests/test_local_check.py +210 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_model_tier_taxonomy.py +7 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_native_claude_seat_fill.py +5 -0
- phase_loop_runtime-0.7.19/tests/test_panel_claude_review_output.py +775 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_workspace_trust_223.py +59 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_roadmap_validate.py +213 -2
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_president_heartbeat_1001.py +188 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_president_ladder_config.py +2 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_presroute_hardening.py +162 -0
- phase_loop_runtime-0.7.19/tests/test_qualify_network_owner.py +169 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_monitor_policy.py +198 -12
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_e2e.py +7 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_invariants.py +6 -1
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_merge.py +24 -21
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_prebuilt.py +81 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_review_authorization.py +9 -1
- phase_loop_runtime-0.7.19/tests/test_train_review_monitoring_policy.py +367 -0
- phase_loop_runtime-0.7.19/tests/test_train_review_packet.py +2597 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_runner.py +14 -6
- phase_loop_runtime-0.7.19/tests/test_verify_qualified_agy_route_core.py +218 -0
- phase_loop_runtime-0.7.17/tests/test_governed_review.py +0 -212
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/president_adapter.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/president_operation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/review_stage.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_board_static_import_862.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_xdist_adoption.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ci_xdist_witness.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_conform_timing_instrumentation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_conftest_isolation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_executor_exited_without_closeout_785.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_admission_compat_789.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_partition_rotation_789d.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_frozen_blob_batch_parse.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_fail_open_visibility.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_skill_policy_parity.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_harden_evidence_producer.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_harden_evidence_verifier.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_owned_command_procfs_1003.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pr_readback_789.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_president_wiring.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_presroute_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_presroute_landed.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_redaction_channel_control_isolation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_policy_govlean_repairs.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_stage_binding.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_roadmap_representation_consistency.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_liveness_contract.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_subscription_scrub_xai_864.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/tests/test_worktree_index.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phase-loop-runtime
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.19
|
|
4
4
|
Summary: Harness-neutral phase-loop orchestration runtime and CLI
|
|
5
5
|
Author-email: ViperJuice <viperjuice@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -49,7 +49,7 @@ To install just this runtime package directly:
|
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
pip install phase-loop-runtime # latest compatible release
|
|
52
|
-
pip install phase-loop-runtime==0.7.
|
|
52
|
+
pip install phase-loop-runtime==0.7.19 # …or pin an exact version
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -19,7 +19,7 @@ To install just this runtime package directly:
|
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
pip install phase-loop-runtime # latest compatible release
|
|
22
|
-
pip install phase-loop-runtime==0.7.
|
|
22
|
+
pip install phase-loop-runtime==0.7.19 # …or pin an exact version
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.19"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -154,6 +154,7 @@ phase_loop_runtime = [
|
|
|
154
154
|
[tool.pytest.ini_options]
|
|
155
155
|
markers = [
|
|
156
156
|
"dotfiles_integration: test requires a dotfiles fleet tree (skipped standalone)",
|
|
157
|
+
"quarantine(reason): known flake tracked by an OPEN issue; deselected on pull-request CI only (agent-harness#1029)",
|
|
157
158
|
]
|
|
158
159
|
|
|
159
160
|
[tool.setuptools.data-files]
|
|
@@ -2659,6 +2659,73 @@ Fields:
|
|
|
2659
2659
|
A synthetic `_train_review_` record (`node_id="_train_review_"`) is appended
|
|
2660
2660
|
when the train-level review panel approves. Its `status` is `"approved"`.
|
|
2661
2661
|
|
|
2662
|
+
An approval with usable-reviewer evidence may also carry the optional
|
|
2663
|
+
`review_packet_sha256` field, omitted on historical and non-review records.
|
|
2664
|
+
Reuse requires its exact immutable packet bytes and the current usable-reviewer
|
|
2665
|
+
floor; a legacy approval without the digest cannot authorize pending merges.
|
|
2666
|
+
|
|
2667
|
+
The version-1 train review packet binds train order/edges, full admitted heads,
|
|
2668
|
+
PR identities, live base tips, unique merge bases, tree IDs, changed-path/mode/blob
|
|
2669
|
+
inventory, full substantive patches, acceptance and head-bound evidence.
|
|
2670
|
+
`--review-material FILE` declares supporting material for every exact node ID;
|
|
2671
|
+
local command/disposal evidence is labelled operator-supplied attestation.
|
|
2672
|
+
GitHub check runs are fetched by identity and checked against the admitted head.
|
|
2673
|
+
Optional explicit whole-subtree disposal certificates bind full inventories and
|
|
2674
|
+
unabridged diff hashes; they certify deletion mechanics, not generatedness.
|
|
2675
|
+
Operator-only removal sidecars never enter reviewer scratch.
|
|
2676
|
+
|
|
2677
|
+
`run-train --governed --review-only --review-material FILE --preview-review DIR`
|
|
2678
|
+
prepares identical review material before broker construction, leases, recovery,
|
|
2679
|
+
admission or models. A ready receipt is not approval. The rendered prompt,
|
|
2680
|
+
including framing and instructions, must fit 512 KiB; the separate 1 MiB packet
|
|
2681
|
+
parser limit does not establish readiness. There is no truncation fallback.
|
|
2682
|
+
|
|
2683
|
+
`run-train --governed --monitoring-policy heartbeat_only` runs the train-level review
|
|
2684
|
+
under review monitoring policy v1 heartbeat-only: the frozen four-vendor default board
|
|
2685
|
+
(any other composition is refused), no model deadline, no native host seat. The policy
|
|
2686
|
+
is bound into the review authorization and passed to the invoker, which refuses a
|
|
2687
|
+
mismatch. Native emission/fill, a non-governed run or an unqualified Gemini route is
|
|
2688
|
+
refused before ledger, broker, publish or packet effects (CLI and direct callers), and
|
|
2689
|
+
re-checked before any seat launches. The bounded review path is unchanged.
|
|
2690
|
+
|
|
2691
|
+
Trusted-opt-in FAB readmission during ordinary governed merging first freezes
|
|
2692
|
+
the entire prospective packet against proposed-head evidence without granting
|
|
2693
|
+
authority. Existing broker readmission and fresh complete durable bindings must
|
|
2694
|
+
then match before those identical bytes enter review/cache/native sinks. Current
|
|
2695
|
+
readmission eligibility is checked immediately before recovery. While FAB promotion
|
|
2696
|
+
is active, real repository revocation is replayed before recovery, sinks, approval
|
|
2697
|
+
and each merge. Review-only/native emission perform no recovery/readmission; preview
|
|
2698
|
+
does not consult broker evidence. No late head advancement follows train review.
|
|
2699
|
+
Transport readiness does not attest actual provider consumption of all content.
|
|
2700
|
+
|
|
2701
|
+
Production stores read-back packets under `review-packets/<sha256>/` beside the
|
|
2702
|
+
ledger. Missing/corrupt packet storage holds. Explicit fresh material invalidates
|
|
2703
|
+
changed approvals; omitted material retains stored snapshots without asserting
|
|
2704
|
+
checks were refreshed. Native fills retain artifact/brief/composition validation.
|
|
2705
|
+
Partial resumes keep original merged-node sections only after validating their
|
|
2706
|
+
complete admission bindings (node, branch, PR, head and FAB run) and live merge
|
|
2707
|
+
outcomes; unavailable history holds rather than
|
|
2708
|
+
reconstructing scope from current main. Observed pending base/head drift before
|
|
2709
|
+
approval and each merge requires a fresh packet. GitHub's existing head pin
|
|
2710
|
+
remains independent; these reads do not atomically pin the base.
|
|
2711
|
+
|
|
2712
|
+
Direct patch text preserves LF/TAB and reversibly escapes backslashes, CR and
|
|
2713
|
+
disallowed Unicode. JSON sections decode as outer escapes, JSON, then nested
|
|
2714
|
+
`content.text` escapes, including four-digit `\u` and supplementary eight-digit
|
|
2715
|
+
`\U` escapes (the latter are not standard JSON escapes).
|
|
2716
|
+
`raw_sha256` hashes original bytes; `escaped_sha256`
|
|
2717
|
+
hashes intermediate escaped text; preview `presentation_sha256` hashes the
|
|
2718
|
+
final rendered section. Readback integrity is not a power-loss durability
|
|
2719
|
+
guarantee; that recovery work is tracked in agent-harness#977.
|
|
2720
|
+
Packet identity, material and revocation checkpoints, including finalization,
|
|
2721
|
+
storage and checks immediately before review and approval, use `review_halted`
|
|
2722
|
+
before recovery/readmission begins and `merge_halted` afterward. The per-node
|
|
2723
|
+
recovery/readmission handler alone appends a blocked row, and only after that
|
|
2724
|
+
node's helper began; later packet holds retain the latest durable binding.
|
|
2725
|
+
Panel rejections and native-fill refusals remain `review_halted`; merge-loop
|
|
2726
|
+
refusals remain `merge_halted`. All retain the typed reason and prior merges. Malformed
|
|
2727
|
+
stored metadata and excessive JSON nesting yield a typed hold and preview receipt.
|
|
2728
|
+
|
|
2662
2729
|
Idempotent resume: re-running `run_train` reads the ledger to skip nodes that
|
|
2663
2730
|
are already `pr_open` (confirmed via a live `_pr_is_open` check) or already
|
|
2664
2731
|
`merged`. A `blocked` node in the ledger is retried on resume.
|
|
@@ -660,8 +660,8 @@ review text and the exception in detail; sandbox facts describe actual enforceme
|
|
|
660
660
|
|
|
661
661
|
### Qualified Gemini extension (agent-harness#905)
|
|
662
662
|
|
|
663
|
-
The Linux x64 subscription `agy` 1.2.
|
|
664
|
-
`
|
|
663
|
+
The Linux x64 subscription `agy` 1.2.11 entry image must match SHA256
|
|
664
|
+
`ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`.
|
|
665
665
|
The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
|
|
666
666
|
Python version alone is not a capability check. Unknown images or missing
|
|
667
667
|
capabilities refuse before availability/auth effects. Required bwrap mount/gate
|
|
@@ -915,6 +915,14 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
915
915
|
"(per-repo governed panel review before merge)."
|
|
916
916
|
),
|
|
917
917
|
)
|
|
918
|
+
run_train_sub.add_argument("--review-material", metavar="FILE", help="Version-1 head-bound train review evidence manifest.")
|
|
919
|
+
run_train_sub.add_argument("--preview-review", metavar="DIR", help="With --governed --review-only: prepare a packet without broker, lease, ledger mutation or models.")
|
|
920
|
+
run_train_sub.add_argument(
|
|
921
|
+
"--monitoring-policy", choices=("bounded", "heartbeat_only"), default="bounded",
|
|
922
|
+
help=("With --governed: how the train review watches its seats. heartbeat_only runs the "
|
|
923
|
+
"frozen four-vendor default board with no model deadline and no native seat, as "
|
|
924
|
+
"advisor-board --monitoring-policy heartbeat_only does. Default: bounded."),
|
|
925
|
+
)
|
|
918
926
|
run_train_sub.add_argument(
|
|
919
927
|
"--emit-native-request", dest="emit_native_request", action="store_true", default=False,
|
|
920
928
|
help=("With --governed --review-only: stage the train bundle and the claude seat's native-fill "
|
|
@@ -1174,6 +1182,31 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
1174
1182
|
return parser
|
|
1175
1183
|
|
|
1176
1184
|
|
|
1185
|
+
|
|
1186
|
+
def _confirmed_outside_git_work_tree(path: Path | str) -> bool:
|
|
1187
|
+
"""True ONLY when no ``.git`` entry exists at ``path`` or any ancestor.
|
|
1188
|
+
|
|
1189
|
+
Structural: git's output is never parsed. Any ``.git`` entry (directory, ``gitdir:``
|
|
1190
|
+
file -- reachable or not -- or symlink) means "maybe a repository", and so does ANY
|
|
1191
|
+
error: ``os.lstat`` is called directly because ``Path.exists``/``is_symlink`` swallow
|
|
1192
|
+
OSError on newer Pythons (EACCES/EIO would read as "absent"), and a symlink loop in
|
|
1193
|
+
``resolve`` raises RuntimeError on Python <= 3.12 (agent-harness#1054/#1055 r2/r3).
|
|
1194
|
+
"""
|
|
1195
|
+
try:
|
|
1196
|
+
# strict=True: non-strict resolve() swallows lookup errors and returns the
|
|
1197
|
+
# unresolved alias, whose lexical ancestors can miss the real repository
|
|
1198
|
+
# (#1054 r4 / #1055 r3, codex). Any error -- incl. a missing path -- fails closed.
|
|
1199
|
+
resolved = Path(path).resolve(strict=True)
|
|
1200
|
+
for directory in (resolved, *resolved.parents):
|
|
1201
|
+
try:
|
|
1202
|
+
os.lstat(directory / ".git")
|
|
1203
|
+
except (FileNotFoundError, NotADirectoryError):
|
|
1204
|
+
continue
|
|
1205
|
+
return False
|
|
1206
|
+
except (OSError, RuntimeError, ValueError): # ValueError: an embedded NUL byte
|
|
1207
|
+
return False
|
|
1208
|
+
return True
|
|
1209
|
+
|
|
1177
1210
|
def main(argv: list[str] | None = None) -> int:
|
|
1178
1211
|
parser = build_parser()
|
|
1179
1212
|
args = parser.parse_args(argv)
|
|
@@ -1401,11 +1434,24 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1401
1434
|
# specs/roadmap-status.json at all) is a silent no-op.
|
|
1402
1435
|
candidate_path = Path(candidate)
|
|
1403
1436
|
status_repo = candidate_path.resolve().parent.parent
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1437
|
+
# The repository is inferred as the roadmap's grandparent
|
|
1438
|
+
# (<repo>/specs/<roadmap>.md). Outside a git work tree that guess is
|
|
1439
|
+
# not a repository at all -- a roadmap loose in a tempdir made it
|
|
1440
|
+
# ``/tmp`` itself -- so there is no canonical repository to check:
|
|
1441
|
+
# skip with a note rather than validate a shared system directory
|
|
1442
|
+
# (agent-harness#987 / #1053, maintainer decision 2026-09-25).
|
|
1443
|
+
if _confirmed_outside_git_work_tree(status_repo):
|
|
1444
|
+
print(
|
|
1445
|
+
f"validate-roadmap: note: {status_repo} is not inside a git work tree; "
|
|
1446
|
+
"skipping the repository roadmap-status coherence check",
|
|
1447
|
+
file=sys.stderr,
|
|
1448
|
+
)
|
|
1449
|
+
else:
|
|
1450
|
+
try:
|
|
1451
|
+
roadmap_lint.validate_roadmap_status_coherence(status_repo, required=True)
|
|
1452
|
+
except roadmap_lint.RoadmapStatusError as exc:
|
|
1453
|
+
print(f"validate-roadmap: roadmap-status coherence error: {exc}", file=sys.stderr)
|
|
1454
|
+
return 1
|
|
1409
1455
|
if getattr(args, "check_assumptions", False):
|
|
1410
1456
|
from . import roadmap_assumptions
|
|
1411
1457
|
|
|
@@ -4474,9 +4520,37 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
|
|
|
4474
4520
|
return 1 # unreachable
|
|
4475
4521
|
emit_native_request = bool(getattr(args, "emit_native_request", False))
|
|
4476
4522
|
native_leg_specs = list(getattr(args, "native_legs", []) or [])
|
|
4523
|
+
preview_output = getattr(args, "preview_review", None)
|
|
4524
|
+
review_material = getattr(args, "review_material", None)
|
|
4525
|
+
if preview_output == "":
|
|
4526
|
+
parser.error("--preview-review requires a non-empty directory")
|
|
4527
|
+
if preview_output is not None and (not review_only or run_mode != "governed" or emit_native_request or native_leg_specs):
|
|
4528
|
+
parser.error("--preview-review requires --governed --review-only and cannot combine with native emission/fill")
|
|
4477
4529
|
if (emit_native_request or native_leg_specs) and not review_only:
|
|
4478
4530
|
parser.error("--emit-native-request / --native-leg require --governed --review-only")
|
|
4479
4531
|
return 1 # unreachable
|
|
4532
|
+
monitoring_policy = getattr(args, "monitoring_policy", "bounded")
|
|
4533
|
+
review_board_preview = None
|
|
4534
|
+
if monitoring_policy == "heartbeat_only":
|
|
4535
|
+
if run_mode != "governed":
|
|
4536
|
+
parser.error("--monitoring-policy heartbeat_only requires --governed")
|
|
4537
|
+
if emit_native_request:
|
|
4538
|
+
parser.error("--monitoring-policy heartbeat_only cannot combine with --emit-native-request "
|
|
4539
|
+
"(heartbeat-only review has no native seat)")
|
|
4540
|
+
# Refuse an unsupported board before any ledger, broker or packet effect, exactly
|
|
4541
|
+
# as advisor-board does (a native fill is one such route).
|
|
4542
|
+
from .advisor_board.backing import resolve_review_monitoring_policy
|
|
4543
|
+
from .advisor_board.fixtures import DEFAULT_BOARD
|
|
4544
|
+
from .panel_invoker import _preflight_gemini_heartbeat
|
|
4545
|
+
try:
|
|
4546
|
+
resolve_review_monitoring_policy(monitoring_policy, DEFAULT_BOARD,
|
|
4547
|
+
native_fill_requested=bool(native_leg_specs))
|
|
4548
|
+
_preflight_gemini_heartbeat(DEFAULT_BOARD, monitoring_policy)
|
|
4549
|
+
except (OSError, ValueError) as exc:
|
|
4550
|
+
print(f"run-train: review monitoring policy refused: {exc}", file=sys.stderr)
|
|
4551
|
+
return 2
|
|
4552
|
+
review_board_preview = [{"harness": seat.harness, "model": seat.model, "effort": seat.effort}
|
|
4553
|
+
for seat in DEFAULT_BOARD.seats]
|
|
4480
4554
|
native_leg_fills = None
|
|
4481
4555
|
if native_leg_specs:
|
|
4482
4556
|
from .panel_invoker import load_native_leg_fills as _load_fill
|
|
@@ -4521,6 +4595,22 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
|
|
|
4521
4595
|
|
|
4522
4596
|
as_json = bool(getattr(args, "json", False))
|
|
4523
4597
|
|
|
4598
|
+
if preview_output is not None:
|
|
4599
|
+
import hashlib
|
|
4600
|
+
from .train_review_packet import preview_review_packet
|
|
4601
|
+
receipt = preview_review_packet(
|
|
4602
|
+
roadmap, ledger_path, _resolve_workspace, review_material, Path(preview_output),
|
|
4603
|
+
train_digest=hashlib.sha256(train_path.read_bytes()).hexdigest(),
|
|
4604
|
+
)
|
|
4605
|
+
result = {"status": "review_packet_ready" if receipt["ready"] else "review_halted", **receipt,
|
|
4606
|
+
# The review this packet would get. A bounded board is composed at review
|
|
4607
|
+
# time (availability- and auth-aware), so it has no fixed seats to show.
|
|
4608
|
+
"review_monitoring_policy": monitoring_policy, "review_board": review_board_preview}
|
|
4609
|
+
print(json.dumps(result, sort_keys=True) if as_json else
|
|
4610
|
+
(f"Review packet prepared at {preview_output}; no review approval recorded." if receipt["ready"] else
|
|
4611
|
+
"Review packet held: " + "; ".join(receipt["errors"])))
|
|
4612
|
+
return 0 if receipt["ready"] else 1
|
|
4613
|
+
|
|
4524
4614
|
# Build a broker-authoritative coordinator runtime so publish actually opens PRs.
|
|
4525
4615
|
# Without a broker_client, publish_from_worktree fail-closes `broker_required` and
|
|
4526
4616
|
# the train opens ZERO PRs. The routing broker binds per BrokerRequest.repo (the
|
|
@@ -4593,6 +4683,8 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
|
|
|
4593
4683
|
review_only=review_only,
|
|
4594
4684
|
emit_native_request=emit_native_request,
|
|
4595
4685
|
native_leg_fills=native_leg_fills,
|
|
4686
|
+
review_material=review_material,
|
|
4687
|
+
review_monitoring_policy=monitoring_policy,
|
|
4596
4688
|
)
|
|
4597
4689
|
finally:
|
|
4598
4690
|
try:
|
|
@@ -4640,17 +4732,18 @@ def _run_train_command(*, parser: argparse.ArgumentParser, args: argparse.Namesp
|
|
|
4640
4732
|
if result["status"] == "native_fill_requested":
|
|
4641
4733
|
# REVIEWTRUTH early slice: the emit arm staged the bundle + request; nothing was spent.
|
|
4642
4734
|
if not as_json:
|
|
4735
|
+
native_leg = shlex.quote(f"claude={Path(result['request_path']).parent}")
|
|
4736
|
+
material_arg = f" --review-material {shlex.quote(str(review_material))}" if review_material is not None else ""
|
|
4737
|
+
print("Keep the original --train, --workspace-root/--workspace and --ledger-dir arguments.")
|
|
4643
4738
|
print(
|
|
4644
4739
|
f"run-train: native fill requested for seat {result.get('seat_key')} — write the review to "
|
|
4645
4740
|
f"{Path(result['request_path']).parent / 'review.md'} and re-run with "
|
|
4646
|
-
f"--governed --review-only --native-leg
|
|
4741
|
+
f"--governed --review-only --native-leg {native_leg}{material_arg}"
|
|
4647
4742
|
)
|
|
4648
4743
|
return 0
|
|
4649
4744
|
if result["status"] == "review_approved":
|
|
4650
4745
|
# agent-harness#906: --review-only terminal — approval recorded, ZERO merges.
|
|
4651
4746
|
nodes = result.get("nodes", {})
|
|
4652
|
-
if not as_json and emit_native_request:
|
|
4653
|
-
print("run-train: the train review is already approved on the ledger; no native fill request was emitted.")
|
|
4654
4747
|
if not as_json:
|
|
4655
4748
|
print(
|
|
4656
4749
|
f"run-train: train-level review APPROVED — {len(nodes)} admitted PR(s), "
|
|
@@ -174,6 +174,17 @@ _TOOL_CACHE_DIR_NAMES = frozenset(
|
|
|
174
174
|
)
|
|
175
175
|
_TOOL_CACHE_DIR_SUFFIXES = (".egg-info",)
|
|
176
176
|
|
|
177
|
+
def _handoff_root_relpath() -> str:
|
|
178
|
+
# Taken from the resolver itself rather than restated, so the audit cannot drift from
|
|
179
|
+
# where the skills are told to write (phase_loop_runtime.skill_paths).
|
|
180
|
+
from .skill_paths import resolve_handoff_root
|
|
181
|
+
|
|
182
|
+
anchor = Path("/")
|
|
183
|
+
return resolve_handoff_root(anchor).relative_to(anchor.resolve()).as_posix()
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
_HANDOFF_ROOT = _handoff_root_relpath()
|
|
187
|
+
|
|
177
188
|
|
|
178
189
|
def classify_ignored_output(repo_relpath: str) -> IgnoredOutputVerdict:
|
|
179
190
|
"""Grade one gitignored path by WHO produced it.
|
|
@@ -210,6 +221,15 @@ def classify_ignored_output(repo_relpath: str) -> IgnoredOutputVerdict:
|
|
|
210
221
|
RUNNER_OWNED, False, f"runner lifecycle state under {entry}"
|
|
211
222
|
)
|
|
212
223
|
|
|
224
|
+
# agent-harness#1084: the repo-local skill handoff root is lifecycle state the skills
|
|
225
|
+
# are REQUIRED to write and to keep ignored. Only the exact root the resolver returns
|
|
226
|
+
# (repo root, directory form or a path under it) earns this; the same name nested
|
|
227
|
+
# anywhere else, or a bare file of that name, still blocks.
|
|
228
|
+
if norm == _HANDOFF_ROOT + "/" or norm.startswith(_HANDOFF_ROOT + "/"):
|
|
229
|
+
return IgnoredOutputVerdict(
|
|
230
|
+
RUNNER_OWNED, False, f"required skill handoff under {_HANDOFF_ROOT}/"
|
|
231
|
+
)
|
|
232
|
+
|
|
213
233
|
# A cache name only earns trust as a DIRECTORY. Git renders a collapsed
|
|
214
234
|
# directory with a trailing slash and a file without one, so a bare `.venv`
|
|
215
235
|
# or `node_modules` entry is an ordinary FILE (or a symlink) that merely
|
{phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/gemini_heartbeat.py
RENAMED
|
@@ -14,8 +14,8 @@ import time
|
|
|
14
14
|
from .agy_canary_evidence import AgyCanaryEvidenceError, _linux_memfd_seal_abi, _sealed_tree_fd
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
QUALIFIED_IMAGE_SHA256 = "
|
|
18
|
-
QUALIFIED_HELP_SHA256 = "
|
|
17
|
+
QUALIFIED_IMAGE_SHA256 = "ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56"
|
|
18
|
+
QUALIFIED_HELP_SHA256 = "83e3a0c36269f23972ba33d0013b9a6b2933ddb07cde268fa40e0fb1a5f33755"
|
|
19
19
|
PROFILE_ID = "agy_memfd_home_deny_all_v1"
|
|
20
20
|
PRIVATE_HOME = "/dev/phase-loop-agy"
|
|
21
21
|
_CAPABILITY = "gemini_heartbeat_capability_unavailable"
|
{phase_loop_runtime-0.7.17 → phase_loop_runtime-0.7.19}/src/phase_loop_runtime/governed_review.py
RENAMED
|
@@ -329,9 +329,17 @@ def governed_board_gate(
|
|
|
329
329
|
native_leg_fills: Sequence[object] | None = None,
|
|
330
330
|
emit_native_request: bool = False,
|
|
331
331
|
native_fill_dir: "Path | str | None" = None,
|
|
332
|
+
monitoring_policy: str = "bounded",
|
|
332
333
|
) -> "GateResult | dict[str, object]":
|
|
333
334
|
"""A governed gate backed by the broker-AUTHORIZED review board (agent-harness#906).
|
|
334
335
|
|
|
336
|
+
``monitoring_policy="heartbeat_only"`` (agent-harness#906, ``run-train
|
|
337
|
+
--monitoring-policy``) runs the review the way ``advisor-board --monitoring-policy
|
|
338
|
+
heartbeat_only`` does: the frozen default four-vendor board (any other composition is
|
|
339
|
+
refused, even from an injected ``compose``), no model deadline, and no native host seat.
|
|
340
|
+
It is checked here, before minting or any launch, and forwarded to both the
|
|
341
|
+
authorization and ``invoke_board``, which refuse a mismatch between the two.
|
|
342
|
+
|
|
335
343
|
REVIEWTRUTH early slice (EC-REVIEWTRUTH-14, plan agent-harness#918): ``emit_native_request``
|
|
336
344
|
performs the same composition, author exclusion, floor and staging the invoke arm will
|
|
337
345
|
redo, writes ``request.json`` / ``artifact.md`` / ``instructions.md`` under
|
|
@@ -391,11 +399,29 @@ def governed_board_gate(
|
|
|
391
399
|
"(the coordinator's git toplevel or the first node's workspace); none was "
|
|
392
400
|
"resolved; holding (non-human)",
|
|
393
401
|
)
|
|
402
|
+
heartbeat_only = monitoring_policy == "heartbeat_only"
|
|
403
|
+
if monitoring_policy not in ("bounded", "heartbeat_only"):
|
|
404
|
+
return _block_result(
|
|
405
|
+
"review_isolation_unavailable", "governed_board_monitoring_policy_refused",
|
|
406
|
+
f"review monitoring policy {monitoring_policy!r} is not supported; holding (non-human)",
|
|
407
|
+
)
|
|
408
|
+
if heartbeat_only and (native_leg_fills or emit_native_request):
|
|
409
|
+
# CONTRACTS.md, review monitoring policy v1: heartbeat-only has no native host seat.
|
|
410
|
+
return _block_result(
|
|
411
|
+
"review_isolation_unavailable", "governed_board_monitoring_policy_refused",
|
|
412
|
+
"review_monitoring_unsupported_route:native_fill: heartbeat_only review has no "
|
|
413
|
+
"native host seat; holding (non-human)",
|
|
414
|
+
)
|
|
394
415
|
from . import panel_invoker as _pi
|
|
395
416
|
from .advisor_board import backing as _backing
|
|
396
417
|
from .advisor_board.composition import FLOOR_SEATS, compose_review_board
|
|
418
|
+
from .advisor_board.fixtures import DEFAULT_BOARD
|
|
397
419
|
|
|
398
|
-
|
|
420
|
+
# heartbeat_only seats the frozen default board, as the advisor-board CLI does: an
|
|
421
|
+
# unavailable vendor then fails its own seat instead of being silently backfilled.
|
|
422
|
+
compose_fn = compose if compose is not None else (
|
|
423
|
+
(lambda: DEFAULT_BOARD) if heartbeat_only else compose_review_board
|
|
424
|
+
)
|
|
399
425
|
try:
|
|
400
426
|
_backing.prepare_review_composition_authorization()
|
|
401
427
|
try:
|
|
@@ -425,9 +451,37 @@ def governed_board_gate(
|
|
|
425
451
|
)
|
|
426
452
|
if dropped:
|
|
427
453
|
board = _replace(board, seats=seats)
|
|
454
|
+
if heartbeat_only:
|
|
455
|
+
if board != DEFAULT_BOARD:
|
|
456
|
+
# Frozen composition, whatever produced it: an injected composer or author
|
|
457
|
+
# exclusion that changes the seats is refused, never reviewed (agent-harness#1061 r1).
|
|
458
|
+
return _block_result(
|
|
459
|
+
"review_isolation_unavailable", "governed_board_monitoring_policy_refused",
|
|
460
|
+
"heartbeat_only review requires the frozen four-vendor default board; "
|
|
461
|
+
f"composed {sorted(getattr(s, 'harness', '?') for s in board.seats)}; holding (non-human)",
|
|
462
|
+
)
|
|
463
|
+
try:
|
|
464
|
+
_backing.resolve_review_monitoring_policy(monitoring_policy, board)
|
|
465
|
+
_pi._preflight_gemini_heartbeat(board, monitoring_policy)
|
|
466
|
+
except (OSError, ValueError) as exc:
|
|
467
|
+
return _block_result(
|
|
468
|
+
"review_isolation_unavailable", "governed_board_monitoring_policy_refused",
|
|
469
|
+
f"review monitoring policy refused before any launch: {exc}; holding (non-human)",
|
|
470
|
+
)
|
|
471
|
+
policy_kwargs: dict[str, object] = {"monitoring_policy": monitoring_policy} if heartbeat_only else {}
|
|
428
472
|
invoke_fn = invoke if invoke is not None else _pi.invoke_board
|
|
429
473
|
from .advisor_board.composition import composition_digest
|
|
430
474
|
|
|
475
|
+
if artifact.startswith("# Train review packet v1\n"):
|
|
476
|
+
try:
|
|
477
|
+
from .train_review_packet import preflight_packet
|
|
478
|
+
preflight_packet(artifact, instructions=_pi._resolve_brief("review", brief_ref), board=board)
|
|
479
|
+
except (OSError, UnicodeError, ValueError) as exc:
|
|
480
|
+
return _block_result(
|
|
481
|
+
"review_isolation_unavailable", "governed_board_packet_preflight_failed",
|
|
482
|
+
f"review packet transport preflight failed: {exc}; holding (non-human)",
|
|
483
|
+
)
|
|
484
|
+
|
|
431
485
|
if emit_native_request:
|
|
432
486
|
# Emit arm: no authorization, no seat, no digest binding beyond the read-back bytes.
|
|
433
487
|
try:
|
|
@@ -497,6 +551,7 @@ def governed_board_gate(
|
|
|
497
551
|
staged_artifact,
|
|
498
552
|
mode="review",
|
|
499
553
|
canonical_repo_authority=canonical_repo_authority,
|
|
554
|
+
**policy_kwargs,
|
|
500
555
|
)
|
|
501
556
|
invoke_kwargs: dict[str, object] = {
|
|
502
557
|
"repo_dir": provider_scratch,
|
|
@@ -504,6 +559,7 @@ def governed_board_gate(
|
|
|
504
559
|
"review_authorization": authorization,
|
|
505
560
|
"canonical_repo_authority": canonical_repo_authority,
|
|
506
561
|
"spawn": spawn,
|
|
562
|
+
**policy_kwargs,
|
|
507
563
|
}
|
|
508
564
|
if brief_ref is not None:
|
|
509
565
|
invoke_kwargs["brief_ref"] = brief_ref
|