phase-loop-runtime 0.7.25__tar.gz → 0.7.26__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.25/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.26}/PKG-INFO +6 -3
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/README.md +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/pyproject.toml +22 -5
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/agy_canary_evidence.py +7 -2
- phase_loop_runtime-0.7.26/src/phase_loop_runtime/agy_integrity.py +129 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/cli.py +4 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/closeout_classifier.py +48 -4
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/doctor.py +12 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/maintenance.py +48 -19
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/panel_invoker.py +68 -7
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/prompts.py +3 -2
- phase_loop_runtime-0.7.26/src/phase_loop_runtime/reflection_corpus.py +636 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/review_stage.py +39 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- phase_loop_runtime-0.7.26/src/phase_loop_runtime/rule_enforcement.json +88 -0
- phase_loop_runtime-0.7.26/src/phase_loop_runtime/rule_enforcement.py +214 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +8 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +15 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_jail.py +4 -2
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_jail_autoqualify.py +20 -1
- phase_loop_runtime-0.7.26/src/phase_loop_runtime/seat_jail_prerequisites.py +54 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_jail_qualification.py +11 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +12 -11
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +2 -2
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/gemini-plan-phase → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/claude-plan-phase}/scripts/validate_plan_doc.py +425 -4
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +38 -41
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +2 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +54 -37
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner}/assets/aggregator_prompt.md +26 -8
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +16 -2
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +2 -2
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/opencode-plan-phase → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/codex-plan-phase}/scripts/validate_plan_doc.py +425 -4
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +13 -11
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +2 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +31 -19
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner}/assets/aggregator_prompt.md +26 -8
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +16 -2
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +2 -2
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/claude-plan-phase → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/gemini-plan-phase}/scripts/validate_plan_doc.py +425 -4
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +13 -11
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +2 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +31 -19
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner}/assets/aggregator_prompt.md +26 -8
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +2 -2
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/codex-plan-phase → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/opencode-plan-phase}/scripts/validate_plan_doc.py +425 -4
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +13 -11
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +2 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +31 -19
- {phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner → phase_loop_runtime-0.7.26/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner}/assets/aggregator_prompt.md +26 -8
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/verification_evidence.py +33 -3
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26/src/phase_loop_runtime.egg-info}/PKG-INFO +6 -3
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime.egg-info/SOURCES.txt +14 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime.egg-info/requires.txt +3 -2
- phase_loop_runtime-0.7.26/tests/test_agy_integrity_seat_admission.py +571 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agy_static_integrity.py +65 -0
- phase_loop_runtime-0.7.26/tests/test_agy_upstream_advisory.py +184 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_classifier.py +134 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_executor_exited_without_closeout_785.py +7 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gate_a_wheel_isolation.py +2 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_skill_policy_parity.py +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_harden_evidence_producer.py +729 -79
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_leg_liveness_monitor.py +1 -14
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_legible_roadmap_contract.py +6 -6
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_tui_eof_48.py +2 -17
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_maintenance.py +40 -18
- phase_loop_runtime-0.7.26/tests/test_proofgate_mutation_worktree_parent.py +78 -0
- phase_loop_runtime-0.7.26/tests/test_reflection_corpus.py +652 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_seat_stall_1176.py +21 -15
- phase_loop_runtime-0.7.26/tests/test_rule_enforcement_registry.py +180 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_credential_refresh.py +2 -2
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_egress_rules.py +1 -1
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_host_path_links.py +46 -0
- phase_loop_runtime-0.7.26/tests/test_seat_jail_prerequisites_1357.py +437 -0
- phase_loop_runtime-0.7.26/tests/test_seat_wrapper_cli_1318.py +122 -0
- phase_loop_runtime-0.7.26/tests/test_validate_plan_doc_owned_companions.py +257 -0
- phase_loop_runtime-0.7.26/tests/test_validate_plan_doc_spec_closeout.py +65 -0
- phase_loop_runtime-0.7.26/tests/test_validate_plan_doc_word_budget.py +288 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_verification_evidence.py +6 -6
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/agy_integrity.py +0 -70
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_baml_worker.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/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.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/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.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/agent_view_cleanup.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/agy_provenance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/agy_qualification.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/agy_watch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/phase_loop_bridge.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/credential_redaction.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/falsifier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/gemini_heartbeat.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/generated_outputs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/lease_supervisor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/panel_reply.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/president_adapter.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/president_operation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/sandbox_placement.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_credentials.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_jail_apparmor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_keyring_exec.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_preflight.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_seccomp.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/seat_uid.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_advisory_cli_802.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_board_static_import_862.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agent_cli_scratch_inventory_1147.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agent_view_cleanup.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agy_self_qualification.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_agy_single_event_transport_1175.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_chronology_scope.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_offload_lock.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_quarantine.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_xdist_adoption.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ci_xdist_witness.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_generated_outputs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_conform_timing_instrumentation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_conftest_isolation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_credential_redaction_shapes.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_execfind_falsifier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_execfind_governed_promotion.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_activation_promotion.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_delta_consumer.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_admission_compat_789.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_partition_rotation_789d.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_sealed_head_recovery_1296.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_finding_F001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_finding_F002.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_finding_F004.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_finding_F005.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_frozen_blob_batch_parse.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gate_fail_open_visibility.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gemini_credential_expiry_parse.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gemini_heartbeat_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_gemini_heartbeat_filesystem_view.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_harden_evidence_verifier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_launch_audit_exemption_scope_1282.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_launch_audit_inventory.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_launch_audit_live_marker_1282.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_launcher_exec_supervisor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_local_check.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_model_tier_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_native_claude_seat_fill.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_native_fill_refusal_cause.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_owned_command_procfs_1003.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_claude_review_output.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_doc_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_lanes.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_leg_status_detail_1096.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_lens_delivery.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_reply.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_tui_liveness_188.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_tui_workspace_trust_223.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_v1_callers.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_v1_runtime.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_baml_v1_supervisor_slot.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_plan_manifest_append_order_1174.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r2_F001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r2_F002.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r2_F003.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r2_F004.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r4_F001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r4_F002.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r4_F003.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r5_F001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r6_F001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r7_F001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr1161_r9_F002.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pr_readback_789.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_president_heartbeat_1001.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_president_ladder_config.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_president_wiring.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_presroute_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_presroute_hardening.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_presroute_landed.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_qualified_agy_image_set.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_qualify_network_owner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_redaction_channel_control_isolation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_redaction_main_coverage_cases.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_monitor_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_policy_govlean_repairs.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_stage_binding.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_roadmap_representation_consistency.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_placement.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sandbox_staging_1147.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_scratch_runtime_audit_1147.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_admin_cleanup.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_caller_ancestry.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_caller_owner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_credentials.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_executor_review.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_host_git.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_host_uid_1098.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_io.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_ipc.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_jail.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_jail_apparmor.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_jail_autoqualify.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_jail_live_d8.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_journal_collection.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_keyring.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_keyring_order_control.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_launch_guard.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_launch_helpers_trusted.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_login_wait_a3_1166.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_login_wait_board_context_r12.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_notices.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_output_rewrite_1282.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_owner_composition.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_owner_notices.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_owner_round1_1282.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_owner_setup_clock_1282.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_owner_view.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_preflight_1204.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_profiles.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_qualification_host_context.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_reference_inventory.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_review_base_unavailable.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_review_output_redaction.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_review_refusals.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_sandbox_permissions.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_tool_approvals.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_transcript_io.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_seat_tui_owner_refusal.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skill_liveness_contract.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_subscription_scrub_xai_864.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_review_authorization.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_review_monitoring_policy.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_verify_qualified_agy_route_core.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_worktree_cleanup_dirty_gate.py +0 -0
- {phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/tests/test_worktree_index.py +0 -0
{phase_loop_runtime-0.7.25/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.26}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phase-loop-runtime
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.26
|
|
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
|
|
@@ -22,10 +22,13 @@ Requires-Dist: pydantic<3,>=2
|
|
|
22
22
|
Requires-Dist: PyYAML<7,>=6
|
|
23
23
|
Requires-Dist: consiliency-contract<0.7,>=0.6.5
|
|
24
24
|
Requires-Dist: jsonschema<5,>=4
|
|
25
|
+
Requires-Dist: pytest<9,>=8
|
|
26
|
+
Requires-Dist: exceptiongroup>=1
|
|
27
|
+
Requires-Dist: typing-extensions>=4.6
|
|
25
28
|
Requires-Dist: packaging>=21
|
|
26
29
|
Requires-Dist: websockets<16,>=12
|
|
27
30
|
Requires-Dist: rfc8785<0.2,>=0.1.4
|
|
28
|
-
Requires-Dist: tomli<3,>=2
|
|
31
|
+
Requires-Dist: tomli<3,>=2
|
|
29
32
|
Provides-Extra: visual
|
|
30
33
|
Requires-Dist: Pillow<13,>=10; extra == "visual"
|
|
31
34
|
|
|
@@ -50,7 +53,7 @@ To install just this runtime package directly:
|
|
|
50
53
|
|
|
51
54
|
```sh
|
|
52
55
|
pip install phase-loop-runtime # latest compatible release
|
|
53
|
-
pip install phase-loop-runtime==0.7.
|
|
56
|
+
pip install phase-loop-runtime==0.7.26 # …or pin an exact version
|
|
54
57
|
```
|
|
55
58
|
|
|
56
59
|
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.26 # …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.26"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -46,6 +46,19 @@ dependencies = [
|
|
|
46
46
|
# guarantees the contract-owned vocabulary (incl. governance_contracts) is live.
|
|
47
47
|
"consiliency-contract>=0.6.5,<0.7",
|
|
48
48
|
"jsonschema>=4,<5",
|
|
49
|
+
# agent-harness#1357 (maintainer ruling): the seat jail's qualification runs a real falsifier
|
|
50
|
+
# run whose wrapper imports pytest, and the run copies its dependencies from the runtime's own
|
|
51
|
+
# environment. A host installed from the published package had no pytest anywhere, so the
|
|
52
|
+
# jail could not qualify. >=8 is the line the suite and Gate A are tested on; <9 keeps the
|
|
53
|
+
# hookwrapper API the wrapper uses inside the tested range -- widen it with a test run.
|
|
54
|
+
"pytest>=8,<9",
|
|
55
|
+
# The falsifier run's interpreter is /usr/bin/python3, whose minor can be older than the
|
|
56
|
+
# runtime's, and pytest's backports (exceptiongroup, tomli; exceptiongroup's typing-extensions)
|
|
57
|
+
# are selected by markers evaluated for the runtime's interpreter. A 3.11+ runtime over a 3.10
|
|
58
|
+
# system interpreter got neither, and the run could not import pytest. Declare them with no
|
|
59
|
+
# marker so the snapshot can always stage them (agent-harness#1361).
|
|
60
|
+
"exceptiongroup>=1",
|
|
61
|
+
"typing-extensions>=4.6",
|
|
49
62
|
# `phase-loop doctor` (IF-0-AHADOPT-2) compares consumer pins to registry
|
|
50
63
|
# latest with PEP 440 version ordering. Declared so the BOM produces real
|
|
51
64
|
# stale|current verdicts on the isolated `uv tool install` path (where pip —
|
|
@@ -57,9 +70,11 @@ dependencies = [
|
|
|
57
70
|
"websockets>=12,<16",
|
|
58
71
|
"rfc8785>=0.1.4,<0.2",
|
|
59
72
|
# Advisor Board config loader (ABDREG) parses advisor-boards.toml. tomllib is
|
|
60
|
-
# stdlib on 3.11+; on the 3.10 requires-python floor it is absent, so
|
|
61
|
-
#
|
|
62
|
-
|
|
73
|
+
# stdlib on 3.11+; on the 3.10 requires-python floor it is absent, so the
|
|
74
|
+
# tomli backport is the fallback (import shim in advisor_board/config.py).
|
|
75
|
+
# Unconditional: pytest also needs it when the falsifier run's interpreter,
|
|
76
|
+
# /usr/bin/python3, is older than 3.11, whatever the runtime's own minor is.
|
|
77
|
+
"tomli>=2,<3",
|
|
63
78
|
]
|
|
64
79
|
|
|
65
80
|
[project.optional-dependencies]
|
|
@@ -76,7 +91,8 @@ visual = ["Pillow>=10,<13"]
|
|
|
76
91
|
[dependency-groups]
|
|
77
92
|
# Keep build aligned with hosted pytest and Dagger _base. Gate A's inner
|
|
78
93
|
# test environment intentionally installs unpinned tools.
|
|
79
|
-
|
|
94
|
+
# pytest is a runtime dependency now (see [project].dependencies), so it is not repeated here.
|
|
95
|
+
test = ["build==1.6.1", "setuptools>=70.1", "pip"]
|
|
80
96
|
|
|
81
97
|
[project.urls]
|
|
82
98
|
Homepage = "https://github.com/Consiliency/agent-harness"
|
|
@@ -133,6 +149,7 @@ where = ["src"]
|
|
|
133
149
|
[tool.setuptools.package-data]
|
|
134
150
|
phase_loop_runtime = [
|
|
135
151
|
"py.typed",
|
|
152
|
+
"rule_enforcement.json",
|
|
136
153
|
"baml_src/*.baml",
|
|
137
154
|
"route_policy/fixtures/*.json",
|
|
138
155
|
"schemas/*.json",
|
|
@@ -134,9 +134,14 @@ def _seat_parent_descriptor(root_fd: int, relative: str) -> tuple[int, str]:
|
|
|
134
134
|
if not parts or any(part in ("", ".", "..") for part in parts):
|
|
135
135
|
raise AgyCanaryEvidenceError("seat path is not relative and normalized")
|
|
136
136
|
directory = os.dup(root_fd)
|
|
137
|
+
# Intermediate hops are O_PATH (search permission only), so a search-only ancestor
|
|
138
|
+
# such as a team host's 0711 workspace dir does not refuse the walk; the parent
|
|
139
|
+
# handed back stays O_RDONLY for callers that read it (agent-harness#1317).
|
|
140
|
+
hop = getattr(os, "O_PATH", os.O_RDONLY)
|
|
137
141
|
try:
|
|
138
|
-
for part in parts[:-1]:
|
|
139
|
-
|
|
142
|
+
for index, part in enumerate(parts[:-1]):
|
|
143
|
+
access = os.O_RDONLY if index == len(parts) - 2 else hop
|
|
144
|
+
child = os.open(part, access | os.O_DIRECTORY | os.O_NOFOLLOW | os.O_CLOEXEC,
|
|
140
145
|
dir_fd=directory)
|
|
141
146
|
os.close(directory)
|
|
142
147
|
directory = child
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""Admission of qualified provider entry images.
|
|
2
|
+
|
|
3
|
+
Release-qualified images are admitted statically, by digest. With the caller's env,
|
|
4
|
+
``check`` also admits a locally self-qualified image through
|
|
5
|
+
``agy_qualification.lookup``, which may run ``agy --help`` from a sealed memfd to
|
|
6
|
+
measure the help digest (agent-harness#1331). It never qualifies an image."""
|
|
7
|
+
|
|
8
|
+
from hashlib import sha256
|
|
9
|
+
from contextlib import contextmanager
|
|
10
|
+
import os
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
import stat
|
|
13
|
+
import shutil
|
|
14
|
+
|
|
15
|
+
from . import gemini_heartbeat
|
|
16
|
+
|
|
17
|
+
_PROVIDER_SEARCH_PATH = os.environ.get("PATH", os.defpath)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AgyImageUnqualified(RuntimeError):
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _locally_qualified(data, source, env):
|
|
25
|
+
"""The image's local self-qualification admission (agent-harness#1076), else refuse.
|
|
26
|
+
|
|
27
|
+
Same lookup as ``gemini_heartbeat.admit`` step 2: opt-out, failed entry, provenance,
|
|
28
|
+
then the qualified entry for this host and runtime. Lookup only; it never qualifies."""
|
|
29
|
+
from . import agy_qualification
|
|
30
|
+
from .panel_invoker import ProviderProcessGroupQuiescenceError
|
|
31
|
+
from .sandbox_egress import EgressUnavailable
|
|
32
|
+
from .seat_jail import SeatSandboxRefused
|
|
33
|
+
try:
|
|
34
|
+
return agy_qualification.lookup(dict(env), data, str(source)).image
|
|
35
|
+
except gemini_heartbeat.AdmissionMiss as miss:
|
|
36
|
+
miss.image.close()
|
|
37
|
+
raise AgyImageUnqualified("agy_image_unqualified") from None
|
|
38
|
+
except (EgressUnavailable, gemini_heartbeat.GeminiQuiescenceError,
|
|
39
|
+
ProviderProcessGroupQuiescenceError, SeatSandboxRefused):
|
|
40
|
+
# The help measurement's own typed outcomes keep their type, so each reaches its
|
|
41
|
+
# handler: a seat refusal its code (agent-harness#1333 PR1), a quiescence failure the
|
|
42
|
+
# leg's quiescence path, a jail refusal its notice (agent-harness#1350 president).
|
|
43
|
+
# This precedes the broad mapping below, so the AgyCanaryEvidenceError BASE (a real
|
|
44
|
+
# memfd seal failure) is still the typed refusal.
|
|
45
|
+
raise
|
|
46
|
+
except (OSError, ValueError, RuntimeError) as exc:
|
|
47
|
+
# Opt-out, a failed record, an unsafe store, an unreadable image or a seal failure.
|
|
48
|
+
raise AgyImageUnqualified("agy_image_unqualified") from exc
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def check(path, env=None):
|
|
52
|
+
"""Admit a release-qualified agy image. With ``env``, also admit a locally
|
|
53
|
+
self-qualified one, so the seat probe and launch honour the same admission as the
|
|
54
|
+
heartbeat route (agent-harness#1331). Without ``env`` (canary evidence) only
|
|
55
|
+
release-qualified images are admitted."""
|
|
56
|
+
descriptor = None
|
|
57
|
+
try:
|
|
58
|
+
source = Path(path).resolve(strict=True)
|
|
59
|
+
descriptor = os.open(source, os.O_RDONLY | os.O_NOFOLLOW | os.O_NONBLOCK | os.O_CLOEXEC)
|
|
60
|
+
info = os.fstat(descriptor)
|
|
61
|
+
if not stat.S_ISREG(info.st_mode) or info.st_size > 300_000_000:
|
|
62
|
+
raise AgyImageUnqualified("agy_image_unqualified")
|
|
63
|
+
chunks, size = [], 0
|
|
64
|
+
while size <= 300_000_000:
|
|
65
|
+
chunk = os.read(descriptor, min(1024 * 1024, 300_000_001 - size))
|
|
66
|
+
if not chunk:
|
|
67
|
+
break
|
|
68
|
+
size += len(chunk)
|
|
69
|
+
chunks.append(chunk)
|
|
70
|
+
data = b"".join(chunks)
|
|
71
|
+
if size > 300_000_000:
|
|
72
|
+
raise AgyImageUnqualified("agy_image_unqualified")
|
|
73
|
+
if sha256(data).hexdigest() not in gemini_heartbeat.QUALIFIED_IMAGES:
|
|
74
|
+
if env is None:
|
|
75
|
+
raise AgyImageUnqualified("agy_image_unqualified")
|
|
76
|
+
return _locally_qualified(data, source, env)
|
|
77
|
+
return gemini_heartbeat.VerifiedImage.from_bytes(data, source)
|
|
78
|
+
except (OSError, ValueError) as exc:
|
|
79
|
+
raise AgyImageUnqualified("agy_image_unqualified") from exc
|
|
80
|
+
finally:
|
|
81
|
+
if descriptor is not None:
|
|
82
|
+
os.close(descriptor)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def admit_for_seat(path, env):
|
|
86
|
+
"""Admission for the two owned review-seat sites only (agent-harness#1333 PR1).
|
|
87
|
+
|
|
88
|
+
``check`` with the seat's env, from one read: a release member is admitted offline
|
|
89
|
+
before any config or store read, otherwise a ``locally_qualified`` image through
|
|
90
|
+
``agy_qualification.lookup`` (agent-harness#1331); what runs is the sealed memfd of
|
|
91
|
+
those bytes, never the path. On the local-qualification path (an image that is not a
|
|
92
|
+
release member), a miss, the opt-out, a failed record, an unsafe store, an unreadable
|
|
93
|
+
image or a memfd-seal failure is the typed refusal. What the help measurement raises with
|
|
94
|
+
its own type passes through unchanged, and on the brokered review route the leg keeps its
|
|
95
|
+
code and notice: a typed seat refusal
|
|
96
|
+
(``EgressUnavailable`` and its subclasses, e.g. ``seat_filtered_egress_unavailable``), a
|
|
97
|
+
quiescence failure (``GeminiQuiescenceError``, ``ProviderProcessGroupQuiescenceError``)
|
|
98
|
+
and a jail refusal (``SeatSandboxRefused``). The executor and canary callers call ``check``
|
|
99
|
+
without an env and stay release-only.
|
|
100
|
+
"""
|
|
101
|
+
return check(path, env)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def trusted_command(argv, env):
|
|
105
|
+
if not argv or Path(argv[0]).name not in {"agy", "gemini"}:
|
|
106
|
+
return argv
|
|
107
|
+
source = shutil.which(argv[0], path=_PROVIDER_SEARCH_PATH)
|
|
108
|
+
if source is None:
|
|
109
|
+
raise AgyImageUnqualified("agy_image_unqualified")
|
|
110
|
+
image = check(source)
|
|
111
|
+
try:
|
|
112
|
+
return [str(image.path), *argv[1:]]
|
|
113
|
+
finally:
|
|
114
|
+
image.close()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@contextmanager
|
|
118
|
+
def admitted_command(argv):
|
|
119
|
+
if not argv or Path(argv[0]).name not in {"agy", "gemini"}:
|
|
120
|
+
yield argv, ()
|
|
121
|
+
return
|
|
122
|
+
source = shutil.which(argv[0], path=_PROVIDER_SEARCH_PATH)
|
|
123
|
+
if source is None:
|
|
124
|
+
raise AgyImageUnqualified("agy_image_unqualified")
|
|
125
|
+
image = check(source)
|
|
126
|
+
try:
|
|
127
|
+
yield [f"/proc/self/fd/{image.fd}", *argv[1:]], (image.fd,)
|
|
128
|
+
finally:
|
|
129
|
+
image.close()
|
|
@@ -2690,6 +2690,10 @@ def _seat_sandbox_command(args: argparse.Namespace) -> int:
|
|
|
2690
2690
|
return seat_jail_qualification.main([])
|
|
2691
2691
|
except seat_jail_qualification.QualificationError as exc:
|
|
2692
2692
|
print(f"seat-sandbox qualify: cannot run: {exc}", file=sys.stderr)
|
|
2693
|
+
if seat_jail_autoqualify.classify_failure(exc) == "prerequisite_missing":
|
|
2694
|
+
# agent-harness#1357: a missing prerequisite names the literal fix.
|
|
2695
|
+
print("seat-sandbox qualify: fix: "
|
|
2696
|
+
f"{seat_jail_autoqualify.fix_for('prerequisite_missing')}", file=sys.stderr)
|
|
2693
2697
|
return 1
|
|
2694
2698
|
except TimeoutError:
|
|
2695
2699
|
print("seat-sandbox qualify: cannot run: another qualification holds the lock",
|
|
@@ -388,13 +388,57 @@ def audit_ignored_outputs(repo: Path, phase: str | None = None) -> dict:
|
|
|
388
388
|
return buckets
|
|
389
389
|
|
|
390
390
|
|
|
391
|
+
# The required closeout action for each exit, printed by `main` as its last line.
|
|
392
|
+
# The execute-phase skills carry the same mapping only as a fallback for a pinned
|
|
393
|
+
# runtime that predates this line (agent-harness#1303).
|
|
394
|
+
CLOSEOUT_ACTIONS = {
|
|
395
|
+
0: "action: exit 0 (no unknown ignored outputs) -> ignored paths do not block "
|
|
396
|
+
"closeout; the dirty-path classification still decides the terminal status",
|
|
397
|
+
1: "action: exit 1 (unknown ignored outputs) -> BLOCKS: stop with "
|
|
398
|
+
"terminal_status=blocked and blocker_class=dirty_worktree_conflict; never "
|
|
399
|
+
"report complete",
|
|
400
|
+
2: "action: exit 2 (probe failed) -> BLOCKS: stop with "
|
|
401
|
+
"terminal_status=blocked and blocker_class=dirty_worktree_conflict; inability "
|
|
402
|
+
"to measure is never evidence of a clean tree",
|
|
403
|
+
}
|
|
404
|
+
# Printed when the audit raises instead of returning. The exception still propagates,
|
|
405
|
+
# so the process exits 1 with its traceback; this line names no exit number for that reason.
|
|
406
|
+
CRASH_ACTION = (
|
|
407
|
+
"action: exit non-zero (the closeout audit failed to run) -> BLOCKS: stop with "
|
|
408
|
+
"terminal_status=blocked and blocker_class=dirty_worktree_conflict; inability to "
|
|
409
|
+
"measure is never evidence of a clean tree"
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
def _exit(code: int) -> int:
|
|
414
|
+
print(CLOSEOUT_ACTIONS[code])
|
|
415
|
+
return code
|
|
416
|
+
|
|
417
|
+
|
|
391
418
|
def main(argv: list[str]) -> int:
|
|
419
|
+
"""``python -m phase_loop_runtime.closeout_classifier --repo .``; see ``_main``.
|
|
420
|
+
|
|
421
|
+
An exception still ends with exactly one blocking action line, then propagates.
|
|
422
|
+
"""
|
|
423
|
+
|
|
424
|
+
try:
|
|
425
|
+
return _main(argv)
|
|
426
|
+
except (Exception, KeyboardInterrupt):
|
|
427
|
+
print(CRASH_ACTION, flush=True)
|
|
428
|
+
raise
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
def _main(argv: list[str]) -> int:
|
|
392
432
|
"""``python -m phase_loop_runtime.closeout_classifier --repo .``
|
|
393
433
|
|
|
394
434
|
Exit 0 = no unknown ignored outputs, so ignored dirt is NOT a closeout
|
|
395
435
|
blocker. Exit 1 = unknown ignored outputs present, which still blocks.
|
|
396
436
|
Exit 2 = the probe itself failed (including an invalid committed
|
|
397
|
-
generated-outputs declaration).
|
|
437
|
+
generated-outputs declaration). Every exit the audit returns or raises from
|
|
438
|
+
prints exactly one action line last (``CLOSEOUT_ACTIONS``, or ``CRASH_ACTION``
|
|
439
|
+
for an exception), so the executor reads the required terminal action from the
|
|
440
|
+
tool instead of re-deriving it from skill prose (agent-harness#1303). A process
|
|
441
|
+
killed by a signal prints none, and the skills' exit-code list governs.
|
|
398
442
|
|
|
399
443
|
``--record-outputs`` (agent-harness#1139) first runs, one at a time and under
|
|
400
444
|
observation, every producer the committed ``.phase-loop-generated-outputs.json``
|
|
@@ -415,11 +459,11 @@ def main(argv: list[str]) -> int:
|
|
|
415
459
|
generated_outputs.run_declared_producers(repo, phase=phase)
|
|
416
460
|
except (generated_outputs.DeclarationError, generated_outputs.PhaseIdentityError) as exc:
|
|
417
461
|
print(f"closeout-ignored-audit: CANNOT RECORD — {exc}")
|
|
418
|
-
return 2
|
|
462
|
+
return _exit(2)
|
|
419
463
|
result = audit_ignored_outputs(repo, phase)
|
|
420
464
|
if result["probe_failed"]:
|
|
421
465
|
print(f"closeout-ignored-audit: CANNOT EVALUATE — {result['reason']}")
|
|
422
|
-
return 2
|
|
466
|
+
return _exit(2)
|
|
423
467
|
reasons = result.get("unknown_reasons", {})
|
|
424
468
|
for bucket in _BUCKETS:
|
|
425
469
|
paths = result[bucket]
|
|
@@ -429,7 +473,7 @@ def main(argv: list[str]) -> int:
|
|
|
429
473
|
suffix = f" -- {reasons[p]}" if p in reasons else ""
|
|
430
474
|
print(f" {p}{suffix}")
|
|
431
475
|
print(f"\nverdict: {result['reason']}")
|
|
432
|
-
return 1 if result["blocks"] else 0
|
|
476
|
+
return _exit(1 if result["blocks"] else 0)
|
|
433
477
|
|
|
434
478
|
|
|
435
479
|
def console_main() -> int:
|
|
@@ -31,6 +31,7 @@ from pathlib import Path
|
|
|
31
31
|
from typing import Any, Callable, Optional
|
|
32
32
|
|
|
33
33
|
from . import repo_validation
|
|
34
|
+
from . import seat_jail_prerequisites
|
|
34
35
|
from .install_status import _assert_redacted, build_install_status
|
|
35
36
|
|
|
36
37
|
SCHEMA_ID = "phase-loop-doctor.v1"
|
|
@@ -501,6 +502,9 @@ def build_doctor_report(
|
|
|
501
502
|
"bom": bom,
|
|
502
503
|
# PUSHFLOW: ahead-of-origin divergence aggregate (counts only, no paths).
|
|
503
504
|
"worktree_divergence": build_worktree_divergence(root),
|
|
505
|
+
# agent-harness#1357: what the seat jail's qualification needs from the runtime's own
|
|
506
|
+
# environment (today: pytest). Status only, with the literal fix when missing.
|
|
507
|
+
"seat_jail_prerequisites": seat_jail_prerequisites.check(),
|
|
504
508
|
}
|
|
505
509
|
# Metadata-only guarantee: no absolute paths, no secrets. Reuses the same
|
|
506
510
|
# redaction contract as phase-loop-install-status.v1.
|
|
@@ -551,6 +555,14 @@ def _print_doctor(report: dict[str, Any]) -> None:
|
|
|
551
555
|
f" [{entry['verdict']:<7}] {entry['target']:<32} "
|
|
552
556
|
f"pinned={entry['pinned']} latest={entry['latest']} ({entry['ecosystem']}, {gate})"
|
|
553
557
|
)
|
|
558
|
+
prerequisites = report.get("seat_jail_prerequisites")
|
|
559
|
+
if prerequisites:
|
|
560
|
+
print("")
|
|
561
|
+
print("Seat jail prerequisites (needed to qualify jailed review seats):")
|
|
562
|
+
for item in prerequisites:
|
|
563
|
+
print(f" {item['name']:<10} {item['status']} → {item['unlocks']}")
|
|
564
|
+
if item.get("fix"):
|
|
565
|
+
print(f" fix: {item['fix']}")
|
|
554
566
|
div = report.get("worktree_divergence")
|
|
555
567
|
if div:
|
|
556
568
|
print("")
|
{phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/maintenance.py
RENAMED
|
@@ -16,6 +16,7 @@ from .observability import operator_halt_metadata, run_artifacts, stop_requested
|
|
|
16
16
|
from .profiles import resolve_profile
|
|
17
17
|
from .prompts import build_skill_maintenance_prompt
|
|
18
18
|
from .provenance import roadmap_sha256, snapshot_provenance
|
|
19
|
+
from . import reflection_corpus
|
|
19
20
|
from .reconcile import reconcile
|
|
20
21
|
from .runtime_paths import ensure_phase_loop_excluded, phase_loop_dir
|
|
21
22
|
from .skill_inventory import (
|
|
@@ -41,23 +42,28 @@ class SyncSkillsOptions:
|
|
|
41
42
|
apply: bool = False
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
def collect_reflection_inventory(repo: Path) -> dict[str, object]:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
def collect_reflection_inventory(repo: Path, min_reflections: int = 2) -> dict[str, object]:
|
|
46
|
+
"""Per-skill reflection counts across every harness root, gated on ``min_reflections``.
|
|
47
|
+
|
|
48
|
+
``due`` is the threshold trigger: ``maintain-skills`` launches the planner only
|
|
49
|
+
when at least one skill has ``min_reflections`` admitted reflections.
|
|
50
|
+
"""
|
|
51
|
+
corpus, _ = reflection_corpus.collect(min_reflections=min_reflections)
|
|
52
|
+
return reflection_corpus.inventory(corpus)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def prepare_reflection_corpus(repo: Path, min_reflections: int) -> tuple[dict[str, object], Path | None]:
|
|
56
|
+
"""Collect, filter and write the planner's input under ``.phase-loop/``."""
|
|
57
|
+
corpus, boilerplate = reflection_corpus.collect(min_reflections=min_reflections)
|
|
58
|
+
inventory = reflection_corpus.inventory(corpus)
|
|
59
|
+
if not corpus.due:
|
|
60
|
+
return inventory, None
|
|
61
|
+
ensure_phase_loop_excluded(repo)
|
|
62
|
+
stamp = utc_now().replace(":", "").replace("-", "")
|
|
63
|
+
out_dir = phase_loop_dir(repo) / "skill-maintenance" / f"corpus-{stamp}"
|
|
64
|
+
reflection_corpus.write_corpus(corpus, boilerplate, out_dir)
|
|
65
|
+
inventory["corpus_dir"] = str(out_dir)
|
|
66
|
+
return inventory, out_dir
|
|
61
67
|
|
|
62
68
|
|
|
63
69
|
def validate_maintenance_options(options: MaintenanceOptions) -> Blocker | None:
|
|
@@ -171,8 +177,12 @@ def run_maintenance(
|
|
|
171
177
|
) -> tuple[StateSnapshot, list[LaunchResult]]:
|
|
172
178
|
phases = reconcile(repo, roadmap).phases
|
|
173
179
|
selection = resolve_profile(model_profile or "skill-maintenance", model=model, effort=effort)
|
|
174
|
-
inventory = collect_reflection_inventory(repo)
|
|
175
180
|
blocker = validate_maintenance_options(options) or active_loop_blocker(repo, desired_mode="skill-maintenance")
|
|
181
|
+
corpus_dir: Path | None = None
|
|
182
|
+
if blocker or options.apply_skill_edits:
|
|
183
|
+
inventory = collect_reflection_inventory(repo, options.min_reflections)
|
|
184
|
+
else:
|
|
185
|
+
inventory, corpus_dir = prepare_reflection_corpus(repo, options.min_reflections)
|
|
176
186
|
if blocker:
|
|
177
187
|
snapshot = StateSnapshot(
|
|
178
188
|
timestamp=utc_now(),
|
|
@@ -195,7 +205,26 @@ def run_maintenance(
|
|
|
195
205
|
append_event(repo, _maintenance_event(repo, roadmap, "blocked", selection, inventory, blocker=blocker))
|
|
196
206
|
return snapshot, []
|
|
197
207
|
|
|
198
|
-
|
|
208
|
+
if not options.apply_skill_edits and corpus_dir is None:
|
|
209
|
+
# Threshold not met: launching the planner would aggregate noise (or nothing).
|
|
210
|
+
snapshot = StateSnapshot(
|
|
211
|
+
timestamp=utc_now(),
|
|
212
|
+
repo=str(repo),
|
|
213
|
+
roadmap=str(roadmap),
|
|
214
|
+
phases=phases,
|
|
215
|
+
current_phase=next((phase for phase, status in phases.items() if status != "complete"), None),
|
|
216
|
+
last_action="maintain-skills",
|
|
217
|
+
model=selection.model,
|
|
218
|
+
reasoning_effort=selection.effort,
|
|
219
|
+
source=selection.source,
|
|
220
|
+
override_reason=selection.override_reason,
|
|
221
|
+
**snapshot_provenance(roadmap),
|
|
222
|
+
)
|
|
223
|
+
_write_state_and_handoff(repo, roadmap, snapshot, results=[])
|
|
224
|
+
append_event(repo, _maintenance_event(repo, roadmap, "plan_skipped", selection, inventory))
|
|
225
|
+
return snapshot, []
|
|
226
|
+
|
|
227
|
+
prompt = build_skill_maintenance_prompt(options, corpus_dir=corpus_dir)
|
|
199
228
|
command = build_codex_command(repo, selection, prompt, json_output=json_output, bypass_approvals=bypass_approvals)
|
|
200
229
|
if stop_requested(repo):
|
|
201
230
|
metadata = operator_halt_metadata(repo)
|
{phase_loop_runtime-0.7.25 → phase_loop_runtime-0.7.26}/src/phase_loop_runtime/panel_invoker.py
RENAMED
|
@@ -271,12 +271,15 @@ def _trusted_host_path(path) -> str:
|
|
|
271
271
|
|
|
272
272
|
def _seat_bind_source(path, *, output=False) -> str:
|
|
273
273
|
path = _trusted_host_path(path)
|
|
274
|
-
|
|
274
|
+
# O_PATH needs only search permission, so a bind source below a search-only
|
|
275
|
+
# ancestor (a team host's root-owned 0711 workspace dirs) is reachable; with
|
|
276
|
+
# O_DIRECTORY, O_NOFOLLOW still refuses a link component (agent-harness#1317).
|
|
277
|
+
walk = getattr(os, "O_PATH", os.O_RDONLY) | os.O_DIRECTORY | os.O_NOFOLLOW
|
|
278
|
+
directory = os.open("/", walk)
|
|
275
279
|
try:
|
|
276
280
|
parts = Path(path).parts[1:]
|
|
277
281
|
for part in parts[:-1]:
|
|
278
|
-
child = os.open(part,
|
|
279
|
-
dir_fd=directory)
|
|
282
|
+
child = os.open(part, walk, dir_fd=directory)
|
|
280
283
|
os.close(directory)
|
|
281
284
|
directory = child
|
|
282
285
|
info = os.stat(parts[-1], dir_fd=directory, follow_symlinks=False)
|
|
@@ -2008,7 +2011,7 @@ def _seat_launch_modes(
|
|
|
2008
2011
|
_what, why, _fix = _seat_jail.NOTICES[refusal]
|
|
2009
2012
|
modes.append(sp.SeatMode(key, leg, sp.MODE_DEGRADED, refusal,
|
|
2010
2013
|
f"{why}; reason: {reason}",
|
|
2011
|
-
_seat_jail_autoqualify.
|
|
2014
|
+
_seat_jail_autoqualify.fix_for(reason), None, position))
|
|
2012
2015
|
elif refusal is not None:
|
|
2013
2016
|
modes.append(_coded(sp.MODE_DEGRADED, refusal))
|
|
2014
2017
|
elif not route.jailed:
|
|
@@ -4551,6 +4554,50 @@ def _seat_secret_values(value):
|
|
|
4551
4554
|
yield from _seat_secret_values(item)
|
|
4552
4555
|
|
|
4553
4556
|
|
|
4557
|
+
_SHELL_WRAPPER_EXPORT = re.compile(r'export [A-Z_][A-Z0-9_]*=(?:[A-Za-z0-9._/:@+-]|"\$PATH")*')
|
|
4558
|
+
# Only `-c key=value` config pairs may sit between the target and "$@": an interpreter
|
|
4559
|
+
# line (`exec /usr/bin/env node cli.js "$@"`) or any other flag is not followed.
|
|
4560
|
+
_SHELL_WRAPPER_EXEC = re.compile(
|
|
4561
|
+
r'exec (/[A-Za-z0-9._@+/-]+)(?: -c [A-Za-z0-9._-]+=[A-Za-z0-9._/:@+-]+)* "\$@"')
|
|
4562
|
+
|
|
4563
|
+
|
|
4564
|
+
def _shell_wrapper_target(path: Path, provider: str | None = None) -> Path | None:
|
|
4565
|
+
"""The absolute ``exec`` target of a trusted launcher wrapper, else ``None``.
|
|
4566
|
+
|
|
4567
|
+
Team-host tooling ships each CLI as ``#!/bin/sh`` + ``export`` lines + one
|
|
4568
|
+
``exec /abs/path [-c k=v ...] "$@"`` (agent-harness#1318). The seat binds only the
|
|
4569
|
+
provider itself, so the wrapper's target would be missing from the view. Only a regular
|
|
4570
|
+
file owned by root or the operator, writable by no one else, read through one no-follow,
|
|
4571
|
+
non-blocking descriptor, of exactly that shape, whose target is named ``provider``
|
|
4572
|
+
(when given), is followed."""
|
|
4573
|
+
try:
|
|
4574
|
+
descriptor = os.open(path, os.O_RDONLY | os.O_NOFOLLOW | os.O_NONBLOCK | os.O_CLOEXEC)
|
|
4575
|
+
except OSError:
|
|
4576
|
+
return None
|
|
4577
|
+
try:
|
|
4578
|
+
info = os.fstat(descriptor)
|
|
4579
|
+
if (not stat.S_ISREG(info.st_mode) or info.st_uid not in {0, os.getuid()}
|
|
4580
|
+
or info.st_mode & 0o022 or info.st_size > 4096):
|
|
4581
|
+
return None
|
|
4582
|
+
text = os.read(descriptor, 4097).decode("utf-8")
|
|
4583
|
+
except (OSError, UnicodeDecodeError):
|
|
4584
|
+
return None
|
|
4585
|
+
finally:
|
|
4586
|
+
os.close(descriptor)
|
|
4587
|
+
lines = [line.strip() for line in text.splitlines() if line.strip()]
|
|
4588
|
+
if len(lines) < 2 or lines[0] != "#!/bin/sh":
|
|
4589
|
+
return None
|
|
4590
|
+
if not all(_SHELL_WRAPPER_EXPORT.fullmatch(line) for line in lines[1:-1]):
|
|
4591
|
+
return None
|
|
4592
|
+
match = _SHELL_WRAPPER_EXEC.fullmatch(lines[-1])
|
|
4593
|
+
if not match:
|
|
4594
|
+
return None
|
|
4595
|
+
target = Path(match.group(1))
|
|
4596
|
+
if provider is not None and target.name.lower() != provider:
|
|
4597
|
+
return None
|
|
4598
|
+
return target
|
|
4599
|
+
|
|
4600
|
+
|
|
4554
4601
|
def _seat_provider_source(command, env):
|
|
4555
4602
|
name = Path(command).name.lower()
|
|
4556
4603
|
harness = {"agy": "gemini", "gemini": "gemini", "codex.js": "codex",
|
|
@@ -4559,6 +4606,11 @@ def _seat_provider_source(command, env):
|
|
|
4559
4606
|
if source is None:
|
|
4560
4607
|
raise FileNotFoundError("seat_provider_unavailable")
|
|
4561
4608
|
source = Path(source).resolve(strict=True)
|
|
4609
|
+
for _hop in range(4):
|
|
4610
|
+
target = _shell_wrapper_target(source, Path(command).name.lower())
|
|
4611
|
+
if target is None:
|
|
4612
|
+
break
|
|
4613
|
+
source = target.resolve(strict=True)
|
|
4562
4614
|
if harness == "codex" and source.suffix == ".js":
|
|
4563
4615
|
package = source.parent.parent
|
|
4564
4616
|
machine = os.uname().machine
|
|
@@ -4567,7 +4619,9 @@ def _seat_provider_source(command, env):
|
|
|
4567
4619
|
if suffix is None:
|
|
4568
4620
|
raise _sandbox_egress.SeatIdentityUnverified("seat_provider_unavailable")
|
|
4569
4621
|
candidates = (package / "node_modules/@openai" / ("codex-linux-" + suffix) / "vendor" / triple / "bin/codex",
|
|
4570
|
-
package / "vendor" / triple / "bin/codex"
|
|
4622
|
+
package / "vendor" / triple / "bin/codex",
|
|
4623
|
+
# npm hoists the platform package beside @openai/codex.
|
|
4624
|
+
package.parent / ("codex-linux-" + suffix) / "vendor" / triple / "bin/codex")
|
|
4571
4625
|
source = next((path for path in candidates if path.is_file()), None)
|
|
4572
4626
|
if source is None:
|
|
4573
4627
|
raise _sandbox_egress.SeatIdentityUnverified("seat_provider_unavailable")
|
|
@@ -4676,7 +4730,7 @@ def seat_profile(*, harness, executable, env, cwd, readonly_paths=(), outputs=()
|
|
|
4676
4730
|
stack.callback(refresh_image.close)
|
|
4677
4731
|
else:
|
|
4678
4732
|
from . import agy_integrity
|
|
4679
|
-
refresh_image = agy_integrity.
|
|
4733
|
+
refresh_image = agy_integrity.admit_for_seat(executable, env)
|
|
4680
4734
|
stack.callback(refresh_image.close)
|
|
4681
4735
|
_refresh_gemini_credential(home, refresh_image)
|
|
4682
4736
|
def directory(path):
|
|
@@ -4771,7 +4825,7 @@ def seat_profile(*, harness, executable, env, cwd, readonly_paths=(), outputs=()
|
|
|
4771
4825
|
gemini_profile.evidence["provider_agy_subscription_reference"] = "private_access_token_copy"
|
|
4772
4826
|
elif harness == "gemini":
|
|
4773
4827
|
from . import agy_integrity
|
|
4774
|
-
image = agy_integrity.
|
|
4828
|
+
image = agy_integrity.admit_for_seat(executable, env)
|
|
4775
4829
|
stack.callback(image.close)
|
|
4776
4830
|
descriptor = image.reopen()
|
|
4777
4831
|
stack.callback(os.close, descriptor)
|
|
@@ -11695,8 +11749,15 @@ def _default_spawn(
|
|
|
11695
11749
|
except Exception as exc:
|
|
11696
11750
|
if leg != "gemini":
|
|
11697
11751
|
raise
|
|
11752
|
+
# A typed seat refusal (admission, jail, egress) keeps its code and
|
|
11753
|
+
# notice here exactly as off the broker (the outer handler below).
|
|
11754
|
+
failure = _exception_failure(exc)
|
|
11755
|
+
typed = isinstance(failure, str) and failure in _seat_jail.NOTICE_CODES
|
|
11756
|
+
if typed:
|
|
11757
|
+
seat_notices.append(failure)
|
|
11698
11758
|
gemini_detail = (
|
|
11699
11759
|
"review_monitoring_write_failed" if review_monitor is not None and review_monitor.write_failed
|
|
11760
|
+
else failure if typed
|
|
11700
11761
|
else str(exc) if str(exc) in _GEMINI_BROKER_DETAILS
|
|
11701
11762
|
else "Gemini broker local provider failure"
|
|
11702
11763
|
)
|
|
@@ -225,9 +225,10 @@ def _build_prompt_route(
|
|
|
225
225
|
)
|
|
226
226
|
|
|
227
227
|
|
|
228
|
-
def build_skill_maintenance_prompt(options) -> str:
|
|
228
|
+
def build_skill_maintenance_prompt(options, corpus_dir: Path | None = None) -> str:
|
|
229
229
|
if not options.apply_skill_edits:
|
|
230
|
-
|
|
230
|
+
prompt = f"codex-skill-improvement-planner --min-reflections {options.min_reflections}"
|
|
231
|
+
return f"{prompt} --corpus {corpus_dir}" if corpus_dir is not None else prompt
|
|
231
232
|
parts = ["codex-skill-editor", "--improvement-plan", str(options.improvement_plan)]
|
|
232
233
|
for skill in options.allow_skills:
|
|
233
234
|
parts.extend(["--allow-skill", skill])
|