phase-loop-runtime 0.7.21__tar.gz → 0.7.22__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.21/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.22}/PKG-INFO +8 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/README.md +7 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/pyproject.toml +1 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +128 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/backing.py +99 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/fixtures.py +3 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/registries.py +2 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/cli.py +72 -4
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_classifier.py +121 -34
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/live.py +136 -48
- phase_loop_runtime-0.7.22/src/phase_loop_runtime/credential_redaction.py +488 -0
- phase_loop_runtime-0.7.22/src/phase_loop_runtime/falsifier.py +270 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/gemini_heartbeat.py +6 -0
- phase_loop_runtime-0.7.22/src/phase_loop_runtime/generated_outputs.py +843 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_premerge.py +5 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_review.py +276 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/observability.py +3 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/panel_invoker.py +746 -157
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +3 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_manifest.py +118 -57
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/prompts.py +84 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/publishing.py +413 -11
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/redaction.py +0 -5
- phase_loop_runtime-0.7.22/src/phase_loop_runtime/review_stage.py +1163 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runner.py +42 -17
- phase_loop_runtime-0.7.22/src/phase_loop_runtime/seat_preflight.py +170 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +10 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +2 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +10 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +2 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +10 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +2 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +10 -5
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_runner.py +3 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/verification_evidence.py +52 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22/src/phase_loop_runtime.egg-info}/PKG-INFO +8 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/SOURCES.txt +15 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_registries.py +51 -0
- phase_loop_runtime-0.7.22/tests/test_agy_single_event_transport_1175.py +187 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_classifier.py +16 -6
- phase_loop_runtime-0.7.22/tests/test_closeout_generated_outputs.py +1418 -0
- phase_loop_runtime-0.7.22/tests/test_credential_redaction_shapes.py +502 -0
- phase_loop_runtime-0.7.22/tests/test_execfind_governed_promotion.py +441 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_executor_exited_without_closeout_785.py +42 -2
- phase_loop_runtime-0.7.22/tests/test_fabpub_zero_history_bootstrap.py +1631 -0
- phase_loop_runtime-0.7.22/tests/test_finding_F001.py +28 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gemini_heartbeat_bootstrap.py +24 -3
- phase_loop_runtime-0.7.22/tests/test_gemini_heartbeat_filesystem_view.py +262 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_review.py +3 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_legible_roadmap_contract.py +6 -6
- phase_loop_runtime-0.7.22/tests/test_native_fill_refusal_cause.py +111 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_claude_review_output.py +3 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_liveness_188.py +66 -0
- phase_loop_runtime-0.7.22/tests/test_plan_manifest_append_order_1174.py +205 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pr_readback_789.py +4 -2
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_president_heartbeat_1001.py +4 -1
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_publishing.py +511 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_qualified_agy_image_set.py +6 -2
- phase_loop_runtime-0.7.22/tests/test_redaction_main_coverage_cases.py +57 -0
- phase_loop_runtime-0.7.22/tests/test_review_seat_stall_1176.py +1432 -0
- phase_loop_runtime-0.7.22/tests/test_review_stage_binding.py +1913 -0
- phase_loop_runtime-0.7.22/tests/test_seat_preflight_1204.py +461 -0
- phase_loop_runtime-0.7.21/src/phase_loop_runtime/review_stage.py +0 -456
- phase_loop_runtime-0.7.21/tests/test_fabpub_zero_history_bootstrap.py +0 -582
- phase_loop_runtime-0.7.21/tests/test_review_stage_binding.py +0 -183
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/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.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/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.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_provenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_qualification.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/agy_watch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/lease_supervisor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/president_adapter.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/president_operation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_advisory_cli_802.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_board_static_import_862.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_agy_self_qualification.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_chronology_scope.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_offload_lock.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_quarantine.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_xdist_adoption.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ci_xdist_witness.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_conform_timing_instrumentation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_conftest_isolation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_egress_prefix_crosses_the_broker_thread.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execfind_falsifier.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_activation_promotion.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_delta_consumer.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_admission_compat_789.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_partition_rotation_789d.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_frozen_blob_batch_parse.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_fail_open_visibility.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_skill_policy_parity.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_harden_evidence_producer.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_harden_evidence_verifier.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_launcher_exec_supervisor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_local_check.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_model_tier_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_native_claude_seat_fill.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_owned_command_procfs_1003.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_doc_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_lanes.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_leg_status_detail_1096.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_lens_delivery.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_tui_workspace_trust_223.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_president_ladder_config.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_president_wiring.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_presroute_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_presroute_hardening.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_presroute_landed.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_qualify_network_owner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_redaction_channel_control_isolation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_monitor_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_policy_govlean_repairs.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_roadmap_representation_consistency.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_egress.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_seat_host_uid_1098.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_liveness_contract.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_subscription_scrub_xai_864.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_the_real_launch_carries_the_prefix.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_review_authorization.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_review_monitoring_policy.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_verify_qualified_agy_route_core.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.21 → phase_loop_runtime-0.7.22}/tests/test_worktree_index.py +0 -0
{phase_loop_runtime-0.7.21/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.22}/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.22
|
|
4
4
|
Summary: Harness-neutral phase-loop orchestration runtime and CLI
|
|
5
5
|
Author-email: ViperJuice <viperjuice@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -49,7 +49,7 @@ To install just this runtime package directly:
|
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
pip install phase-loop-runtime # latest compatible release
|
|
52
|
-
pip install phase-loop-runtime==0.7.
|
|
52
|
+
pip install phase-loop-runtime==0.7.22 # …or pin an exact version
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -288,6 +288,12 @@ closeout, the persisted `terminal-summary.json` reflects the runner's blocking v
|
|
|
288
288
|
(the child's self-reported `complete`/`passed` is not overlaid back), preventing a
|
|
289
289
|
stale "complete" summary from reconcile-skipping the work on the next run.
|
|
290
290
|
|
|
291
|
+
The `phase-loop-closeout-audit --repo .` command grades **ignored** paths by producer. It
|
|
292
|
+
accepts harness handoffs that carry the handoff contract, and a project's declared build
|
|
293
|
+
outputs backed by a recorded producer run. Declare those outputs in a committed
|
|
294
|
+
`.phase-loop-generated-outputs.json`; anything else still blocks. See
|
|
295
|
+
`docs/phase-loop/closeout-generated-outputs.md` (agent-harness#1139).
|
|
296
|
+
|
|
291
297
|
## Conformance library (one library, two roles)
|
|
292
298
|
|
|
293
299
|
`phase_loop_runtime.conformance` is the named, stable, importable surface for the
|
|
@@ -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.22 # …or pin an exact version
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -258,6 +258,12 @@ closeout, the persisted `terminal-summary.json` reflects the runner's blocking v
|
|
|
258
258
|
(the child's self-reported `complete`/`passed` is not overlaid back), preventing a
|
|
259
259
|
stale "complete" summary from reconcile-skipping the work on the next run.
|
|
260
260
|
|
|
261
|
+
The `phase-loop-closeout-audit --repo .` command grades **ignored** paths by producer. It
|
|
262
|
+
accepts harness handoffs that carry the handoff contract, and a project's declared build
|
|
263
|
+
outputs backed by a recorded producer run. Declare those outputs in a committed
|
|
264
|
+
`.phase-loop-generated-outputs.json`; anything else still blocks. See
|
|
265
|
+
`docs/phase-loop/closeout-generated-outputs.md` (agent-harness#1139).
|
|
266
|
+
|
|
261
267
|
## Conformance library (one library, two roles)
|
|
262
268
|
|
|
263
269
|
`phase_loop_runtime.conformance` is the named, stable, importable surface for the
|
|
@@ -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.22"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -551,7 +551,7 @@ never through — the review operation `public_board_review.v1`. Frozen falsifie
|
|
|
551
551
|
- **Rung routes** (`president_adapter.build_president_invoke(..., monitoring_policy=)`).
|
|
552
552
|
Unseated rung → typed `president_unavailable` (descend). `sol` / `grok` → the brokered
|
|
553
553
|
`_exec_leg` in a throwaway directory, whose only launch is `launch_provider`. `gemini` →
|
|
554
|
-
the broker's
|
|
554
|
+
the broker's agy stream with the PRESIDENT's own final instruction (a ruling,
|
|
555
555
|
not a review verdict), launched through `_run_leg_with_liveness` → `launch_provider` and
|
|
556
556
|
decoded by `_broker_gemini_stream_result`; with the agy subscription credential it runs in
|
|
557
557
|
the broker's agy profile, without one in an empty private HOME (no credential of any kind),
|
|
@@ -672,7 +672,60 @@ The TUI timestamp is refreshed by novel output lines, review-file growth and
|
|
|
672
672
|
transcript growth — a startup banner is novel output and refreshes it; only
|
|
673
673
|
repeated cosmetic repaints do not, once the existing novelty detector has seen
|
|
674
674
|
their text. The CPU-tick heartbeat never refreshes it.
|
|
675
|
-
Neither state is a health attestation or permission to terminate.
|
|
675
|
+
Neither state is a health attestation or permission to terminate.
|
|
676
|
+
The record also carries a progress notice (agent-harness#1176). When no genuine
|
|
677
|
+
progress has been seen for `stall_notice_s` (default 3600 s; override with
|
|
678
|
+
`PHASE_LOOP_REVIEW_STALL_NOTICE_S`), and no progress at all counts from seat
|
|
679
|
+
start, `progress_notice` is `seat_progress_stalled`, `progress_notice_count`
|
|
680
|
+
counts crossings, and one operator warning with only that code and numbers is
|
|
681
|
+
logged. Resumed progress and a terminal observation clear the active notice;
|
|
682
|
+
`last_progress_notice` and the count stay as history. The notice never ends the
|
|
683
|
+
seat. The record reaches the board: `advisor-board --json` legs carry it as
|
|
684
|
+
`review_monitoring`, the text summary prints a `[seat_progress_stalled]` line
|
|
685
|
+
per affected seat on stderr, each streamed per-leg verdict file carries it, and
|
|
686
|
+
the governed record adds a `seat_progress_stalled` warn finding per seat.
|
|
687
|
+
The exact brokered Claude transcript is classified once per change, by
|
|
688
|
+
`_claude_transcript_outcome`, into one outcome; the answer parser and the
|
|
689
|
+
give-up detector are views of it, so they cannot disagree:
|
|
690
|
+
- `answer`: the route's answer parser (the agent-harness#1002/#1077/#1017
|
|
691
|
+
rules; the president route fails closed on any error record in the turn)
|
|
692
|
+
returns text. An accepted answer always wins, whatever follows it. An
|
|
693
|
+
`isApiErrorMessage` record is never answer text. Every record of the answer
|
|
694
|
+
must be a member of the current request (defined below; a sidechain sighting
|
|
695
|
+
counts), so a record that is not evidence for the request never answers it
|
|
696
|
+
either. If the text is not an
|
|
697
|
+
accepted verdict, the leg is handed it back as
|
|
698
|
+
`claude_tui_broker_terminal_nonconforming` instead of waiting.
|
|
699
|
+
- `gave_up`: no answer, and the last live record after the current request is
|
|
700
|
+
an `isApiErrorMessage` give-up. The leg ends at once as DEGRADED with
|
|
701
|
+
`claude_seat_output_budget_exhausted` (`error: max_output_tokens`),
|
|
702
|
+
`claude_seat_usage_limited` (`error: rate_limit` with
|
|
703
|
+
`quotaLimits.status: rejected`, a subscription cap, followed by
|
|
704
|
+
`: usage_limit (resets HH:MM, Mon D YYYY)` rendered in UTC from
|
|
705
|
+
`quotaLimits.resetsAt` when present), `claude_seat_rate_limited` (any other
|
|
706
|
+
`rate_limit`) or `claude_seat_provider_api_error`.
|
|
707
|
+
- `rejected`: no answer, and the turn ended in a completed (`end_turn` /
|
|
708
|
+
`stop_sequence`) answer carrying a text block that the route's parser refuses.
|
|
709
|
+
The leg ends at once as DEGRADED with `claude_seat_transcript_rejected`.
|
|
710
|
+
- `pending`: anything else (an open or capped message, the CLI's resume prompt,
|
|
711
|
+
a newer request, a writer mid-append). A `max_tokens` stop is never terminal.
|
|
712
|
+
The "last live record" is decided in APPEND order among the current request's
|
|
713
|
+
records, chosen by membership, not position. The current request is the last
|
|
714
|
+
user record that is not `isMeta`, carries no tool_result and is not a replay (its
|
|
715
|
+
uuid and content recurring, whatever its completion metadata, as in the answer
|
|
716
|
+
parser). A record is evidence for it only when it is a new version first seen in
|
|
717
|
+
it: its uuid was first seen after the request (a record of an earlier request is
|
|
718
|
+
never evidence, wherever it is appended, except an `isApiErrorMessage` record
|
|
719
|
+
appended in the current request, which always is); it is not an exact replay of a
|
|
720
|
+
version already seen (same uuid, content, `stop_reason` presence and value, and
|
|
721
|
+
error flag) nor a stale open copy of a stopped record whose content is unchanged;
|
|
722
|
+
and it is not a sidechain record (`isSidechain`), which the answer parser drops
|
|
723
|
+
too. An open record first seen in the current request, even a changed version
|
|
724
|
+
after its own stop, is still streaming and reads `pending`. An `isApiErrorMessage`
|
|
725
|
+
record is terminal event evidence and is never collapsed into an earlier
|
|
726
|
+
version of its uuid. Replays and rewritten metadata are not progress. `provider_terminal_state` records the code that
|
|
727
|
+
ended the leg. `isApiErrorMessage` matches JSON `true` or the string `"true"`,
|
|
728
|
+
on the record or the message. Frozen
|
|
676
729
|
broker request/response keys, status literals, and observer envelopes are unchanged.
|
|
677
730
|
|
|
678
731
|
When staging requires egress isolation, acquisition follows staged-tree and operation
|
|
@@ -687,8 +740,10 @@ review text and the exception in detail; sandbox facts describe actual enforceme
|
|
|
687
740
|
|
|
688
741
|
The Linux x64 subscription `agy` entry image must match one member of the closed
|
|
689
742
|
set `gemini_heartbeat.QUALIFIED_IMAGES`: 1.2.11 SHA256
|
|
690
|
-
`ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56
|
|
691
|
-
`ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca
|
|
743
|
+
`ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`, 1.2.12 SHA256
|
|
744
|
+
`ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`, 1.2.14 SHA256
|
|
745
|
+
`0d0d3eba22daf29504dd290151c7ed9a4d33b0c6aa0acfc5da27bc3b01d2f029` or 1.2.15 SHA256
|
|
746
|
+
`5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164`. Each member
|
|
692
747
|
carries its measured help digest and has its own qualification record; the
|
|
693
748
|
evidence catalog and the runtime set must name exactly the same members.
|
|
694
749
|
The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
|
|
@@ -710,7 +765,8 @@ HOME fallback truthfully if HOME is absent. Legitimate refresh writes survive.
|
|
|
710
765
|
The real qualification driver requires an explicit HOME and checks target
|
|
711
766
|
presence before and after, without reading its contents.
|
|
712
767
|
|
|
713
|
-
The broker transports same-session
|
|
768
|
+
The broker transports same-session input over stdin (one event when the sealed prompt fits
|
|
769
|
+
one chunk, acknowledged chunks otherwise; agent-harness#1175), with no tree
|
|
714
770
|
attachment, `--add-dir`, permission bypass, retry or native thinking timer. Empty,
|
|
715
771
|
rejected and nonzero-exit streams remain non-votes with fixed diagnostics;
|
|
716
772
|
provider stdout/stderr and arbitrary exception strings are not substituted for
|
|
@@ -839,3 +895,70 @@ A non-release `agy` image is admitted only by verifying it, never by trusting it
|
|
|
839
895
|
verified pushed oid in its own `watch_push` entry, and reads both the record and the
|
|
840
896
|
created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
|
|
841
897
|
agree. It refuses when it cannot prove its open-PR listing complete.
|
|
898
|
+
|
|
899
|
+
## ABDFALSIFY — Executable review findings (IF-0-EXECFIND-1)
|
|
900
|
+
|
|
901
|
+
An optional `falsifier` attachment names one `FindingFalsifier` with
|
|
902
|
+
`finding_id`, `new_test_path`, `expected_nodeid`, and a unified `diff` creating
|
|
903
|
+
only `phase-loop-runtime/tests/test_finding_<finding_id>.py`. A
|
|
904
|
+
`FindingFalsifierAttachment` contains a tuple of these entries with unique
|
|
905
|
+
finding IDs. The attachment is a non-field property on `PanelLegResult`; it
|
|
906
|
+
does not change the serialized leg or board schema. The seat supplies text,
|
|
907
|
+
never an executable command or a claimed test outcome.
|
|
908
|
+
|
|
909
|
+
`run_finding_falsifier` accepts one attached falsifier, board `seat_key`, canonical
|
|
910
|
+
repository, positive wall-clock/output bounds, and a single-use
|
|
911
|
+
`FalsifierIsolationAuthorization` bound to the exact 40-character `reviewed_sha`.
|
|
912
|
+
Its identity is `public_board_falsifier.v1`; its child has no credentials,
|
|
913
|
+
network egress, or live-tree mount. The source must be clean at that SHA.
|
|
914
|
+
Before applying the diff, the staged materialized path set, bytes, symlink
|
|
915
|
+
targets, and executable bits must equal the reviewed Git tree, including no
|
|
916
|
+
ignored extra files. Only the named pytest node runs in the staged clone.
|
|
917
|
+
|
|
918
|
+
Each run stages its own tree from the canonical repository at the head under
|
|
919
|
+
test, never from a seat's tree, and copies installed dependency files into a
|
|
920
|
+
per-run import root (copies, never links; uv's `--link-mode=copy` equivalent).
|
|
921
|
+
Those two trees are the run's protected objects: every regular file in them,
|
|
922
|
+
`.git` included, must have a link count of exactly one before the node starts
|
|
923
|
+
and after it exits, or the run is `error` (agent-harness#1134). The shared system
|
|
924
|
+
interpreter is read-only to the run and is not a protected object. The runner
|
|
925
|
+
resolves `/usr/bin/python3` once and launches exactly that file. Falsifier runs
|
|
926
|
+
execute without site processing (`-S`): no `.pth`, `sitecustomize` or
|
|
927
|
+
`usercustomize` runs and no host site directory is on `sys.path`, so the
|
|
928
|
+
interpreter's inputs are its standard-library entries plus the run's explicit
|
|
929
|
+
staged paths. Every dependency, pytest included, comes from the per-run staged
|
|
930
|
+
dependency root (a distribution without a RECORD is staged from its declared
|
|
931
|
+
top-level modules); a host site directory on the falsifier path is refused as
|
|
932
|
+
`falsifier_host_site_packages_refused`. The measured set is the launched
|
|
933
|
+
interpreter's own `sys.path` under the same flags and environment, so the
|
|
934
|
+
inventory and the launch are identical by construction. Every entry is
|
|
935
|
+
digested before and after the run: archive entries and `.pth`, archive and
|
|
936
|
+
customize files by content, directories by an lstat manifest (mode, size,
|
|
937
|
+
device, inode, mtime, ctime), and every symlink target outside the set followed
|
|
938
|
+
and hashed by content. An entry the runner cannot digest fails closed, and a
|
|
939
|
+
changed scope or digest is `error`.
|
|
940
|
+
Before staging, the canonical repository must not be reachable through any
|
|
941
|
+
system-root mount (compared by device and in-filesystem path, not by pathname),
|
|
942
|
+
and a repository that contains any mount point is refused as
|
|
943
|
+
`falsifier_repository_submount_refused`. The record schema is unchanged; the reason
|
|
944
|
+
stays in the result's `detail`.
|
|
945
|
+
|
|
946
|
+
The frozen outcome tuple is `red_on_head`, `green_on_head`, `apply_failed`,
|
|
947
|
+
`node_missing`, `error`. Pytest emits JUnit, but the recorded outcome comes from
|
|
948
|
+
the wrapper's reported call-phase result; the test-writable XML is not read as
|
|
949
|
+
authority. Seat-authored and reviewed-tree Python (including conftest) run
|
|
950
|
+
in the wrapper's process and can forge
|
|
951
|
+
the reported status, including a parent-keyed frame. RED and GREEN are therefore
|
|
952
|
+
observed, untrusted results: neither binds nor dismisses a finding. Drift,
|
|
953
|
+
expiry, unavailable isolation, and incomplete evidence are `error`; every
|
|
954
|
+
valid attached result remains a blocking `finding_receipt` pending a president
|
|
955
|
+
ruling. The metadata-only
|
|
956
|
+
`finding_falsifier.v1` record has exactly `schema`,
|
|
957
|
+
`authorization_identity`, `seat_key`, `reviewed_sha`, `finding_id`, `nodeid`,
|
|
958
|
+
`outcome`, `red_output_digest`, `diff_digest`, `wall_clock_bound_s`, and
|
|
959
|
+
`output_cap_bytes`. `diff_digest` hashes the offered UTF-8 diff bytes;
|
|
960
|
+
`red_output_digest` hashes separately captured stdout followed by stderr
|
|
961
|
+
and is null unless RED. The caller binds the record with SHA-256 over
|
|
962
|
+
canonical JSON (`sort_keys=True`, compact separators, `ensure_ascii=False`).
|
|
963
|
+
The full freeze and golden values live in
|
|
964
|
+
`tests/data/execfind_falsifier_attachment_v1.golden.json`.
|
|
@@ -857,6 +857,22 @@ class ReviewIsolationAuthorization:
|
|
|
857
857
|
staged_tree_sha256: str | None = None
|
|
858
858
|
|
|
859
859
|
|
|
860
|
+
@dataclass(frozen=True)
|
|
861
|
+
class FalsifierIsolationAuthorization:
|
|
862
|
+
"""Single-use authority to run one attached test against a reviewed commit."""
|
|
863
|
+
|
|
864
|
+
operation: str
|
|
865
|
+
reviewed_sha: str
|
|
866
|
+
canonical_repo_sha256: str
|
|
867
|
+
child_credentialless: bool
|
|
868
|
+
child_network_egress: bool
|
|
869
|
+
live_tree_exposed: bool
|
|
870
|
+
issued_monotonic_ns: int
|
|
871
|
+
_seal: object
|
|
872
|
+
routes: tuple[tuple[str, str], ...] = ()
|
|
873
|
+
monitoring_policy: str = "bounded"
|
|
874
|
+
|
|
875
|
+
|
|
860
876
|
def _staged_tree_digest(canonical_repo_authority: Path | str | None) -> str | None:
|
|
861
877
|
"""Digest of the reviewed tree a seat will be allowed to read.
|
|
862
878
|
|
|
@@ -903,6 +919,7 @@ def _canonical_repo_digest(canonical_repo_authority: Path | str | None) -> str:
|
|
|
903
919
|
text=True,
|
|
904
920
|
stderr=subprocess.DEVNULL,
|
|
905
921
|
timeout=3,
|
|
922
|
+
env={key: value for key, value in os.environ.items() if not key.startswith("GIT_")},
|
|
906
923
|
).strip()
|
|
907
924
|
except (OSError, subprocess.SubprocessError):
|
|
908
925
|
raise ValueError("HARDEN review has no canonical repository authority") from None
|
|
@@ -1211,6 +1228,83 @@ def close_review_isolation_authorization(
|
|
|
1211
1228
|
lease.cancel_event.set()
|
|
1212
1229
|
|
|
1213
1230
|
|
|
1231
|
+
def prepare_falsifier_isolation_authorization(
|
|
1232
|
+
*, repo: Path, reviewed_sha: str,
|
|
1233
|
+
) -> FalsifierIsolationAuthorization:
|
|
1234
|
+
"""Mint one credentialless, no-egress staged-test operation."""
|
|
1235
|
+
if platform.system() != "Linux" or len(reviewed_sha) != 40 or any(
|
|
1236
|
+
character not in "0123456789abcdef" for character in reviewed_sha
|
|
1237
|
+
):
|
|
1238
|
+
raise ValueError("invalid falsifier repository or reviewed SHA")
|
|
1239
|
+
authorization = FalsifierIsolationAuthorization(
|
|
1240
|
+
operation="public_board_falsifier.v1",
|
|
1241
|
+
reviewed_sha=reviewed_sha,
|
|
1242
|
+
canonical_repo_sha256=_canonical_repo_digest(repo),
|
|
1243
|
+
child_credentialless=True,
|
|
1244
|
+
child_network_egress=False,
|
|
1245
|
+
live_tree_exposed=False,
|
|
1246
|
+
issued_monotonic_ns=time.monotonic_ns(),
|
|
1247
|
+
_seal=_AUTHORIZATION_SEAL,
|
|
1248
|
+
)
|
|
1249
|
+
_remember_lease(authorization) # type: ignore[arg-type]
|
|
1250
|
+
return authorization
|
|
1251
|
+
|
|
1252
|
+
|
|
1253
|
+
def _falsifier_authorization_lease(
|
|
1254
|
+
authorization: FalsifierIsolationAuthorization | None,
|
|
1255
|
+
) -> _ReviewInvocationLease:
|
|
1256
|
+
if (
|
|
1257
|
+
not isinstance(authorization, FalsifierIsolationAuthorization)
|
|
1258
|
+
or authorization._seal is not _AUTHORIZATION_SEAL
|
|
1259
|
+
or authorization.operation != "public_board_falsifier.v1"
|
|
1260
|
+
or not authorization.child_credentialless
|
|
1261
|
+
or authorization.child_network_egress
|
|
1262
|
+
or authorization.live_tree_exposed
|
|
1263
|
+
):
|
|
1264
|
+
raise ValueError("missing, forged, or mismatched falsifier authorization")
|
|
1265
|
+
return _lease_for(authorization) # type: ignore[arg-type]
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
def revalidate_falsifier_isolation_authorization(
|
|
1269
|
+
authorization: FalsifierIsolationAuthorization | None, *, repo: Path,
|
|
1270
|
+
) -> None:
|
|
1271
|
+
lease = _falsifier_authorization_lease(authorization)
|
|
1272
|
+
if authorization.canonical_repo_sha256 != _canonical_repo_digest(repo):
|
|
1273
|
+
raise ValueError("falsifier authorization repository drifted")
|
|
1274
|
+
with lease.lock:
|
|
1275
|
+
if lease.closed or (
|
|
1276
|
+
not lease.active
|
|
1277
|
+
and time.monotonic_ns() - lease.prepared_monotonic_ns > _PRE_ACTIVATION_FRESHNESS_NS
|
|
1278
|
+
):
|
|
1279
|
+
raise ValueError("falsifier authorization is closed or expired")
|
|
1280
|
+
|
|
1281
|
+
|
|
1282
|
+
def activate_falsifier_isolation_authorization(
|
|
1283
|
+
authorization: FalsifierIsolationAuthorization, *, repo: Path,
|
|
1284
|
+
) -> None:
|
|
1285
|
+
revalidate_falsifier_isolation_authorization(authorization, repo=repo)
|
|
1286
|
+
lease = _lease_for(authorization) # type: ignore[arg-type]
|
|
1287
|
+
with lease.lock:
|
|
1288
|
+
if lease.closed or lease.active:
|
|
1289
|
+
raise ValueError("falsifier authorization already consumed")
|
|
1290
|
+
lease.active = True
|
|
1291
|
+
|
|
1292
|
+
|
|
1293
|
+
def close_falsifier_isolation_authorization(
|
|
1294
|
+
authorization: FalsifierIsolationAuthorization | None,
|
|
1295
|
+
) -> None:
|
|
1296
|
+
if not isinstance(authorization, FalsifierIsolationAuthorization):
|
|
1297
|
+
return
|
|
1298
|
+
try:
|
|
1299
|
+
lease = _lease_for(authorization) # type: ignore[arg-type]
|
|
1300
|
+
except ValueError:
|
|
1301
|
+
return
|
|
1302
|
+
with lease.lock:
|
|
1303
|
+
lease.active = False
|
|
1304
|
+
lease.closed = True
|
|
1305
|
+
lease.cancel_event.set()
|
|
1306
|
+
|
|
1307
|
+
|
|
1214
1308
|
def derive_review_leg_authorization(
|
|
1215
1309
|
authorization: ReviewIsolationAuthorization | None,
|
|
1216
1310
|
artifact: str,
|
|
@@ -1667,10 +1761,15 @@ __all__ = [
|
|
|
1667
1761
|
"harden_subscription_model",
|
|
1668
1762
|
"harden_subscription_review_board",
|
|
1669
1763
|
"ReviewIsolationAuthorization",
|
|
1764
|
+
"FalsifierIsolationAuthorization",
|
|
1670
1765
|
"ReviewCompositionAuthorization",
|
|
1671
1766
|
"ReviewLegAuthorization",
|
|
1672
1767
|
"ParentUnixBroker",
|
|
1673
1768
|
"prepare_review_isolation_authorization",
|
|
1769
|
+
"prepare_falsifier_isolation_authorization",
|
|
1770
|
+
"revalidate_falsifier_isolation_authorization",
|
|
1771
|
+
"activate_falsifier_isolation_authorization",
|
|
1772
|
+
"close_falsifier_isolation_authorization",
|
|
1674
1773
|
"prepare_review_composition_authorization",
|
|
1675
1774
|
"current_review_composition_authorization",
|
|
1676
1775
|
"clear_review_composition_authorization",
|
|
@@ -78,7 +78,10 @@ CANONICAL_VALID_PAIRS: tuple[tuple[str, str], ...] = (
|
|
|
78
78
|
("gpt-5.6-sol", "codex"), # legacy default id remains expressible
|
|
79
79
|
("gpt-6-sol", "codex"), # explicit seat on user/ad-hoc boards (not a governed grok stand-in)
|
|
80
80
|
("gpt-6-sol", "opencode"), # same family; matches the production registry's runnable_by
|
|
81
|
+
("gpt-6.1-sol", "codex"), # explicit seat, selected by board config (not a default)
|
|
82
|
+
("gpt-6.1-sol", "opencode"), # same family; registered by vendor family, not launch-verified
|
|
81
83
|
("claude-sonnet-5", "claude"),
|
|
84
|
+
("claude-sonnet-5-5", "claude"), # explicit seat, selected by board config (not a default)
|
|
82
85
|
("claude-opus-5-5", "claude"),
|
|
83
86
|
("claude-fable-5-1", "claude"),
|
|
84
87
|
("Gemini 3.1 Pro", "gemini"),
|
|
@@ -257,7 +257,9 @@ _MODEL_DEFS: tuple[tuple[str, str, str], ...] = (
|
|
|
257
257
|
("gpt-6-astra", "codex", "max"),
|
|
258
258
|
("gpt-5.6-sol", "codex", "max"), # explicit legacy seat (fleet default before 2026-09-04)
|
|
259
259
|
("gpt-6-sol", "codex", "max"), # explicit seat (codex's own default model); not a board default
|
|
260
|
+
("gpt-6.1-sol", "codex", "max"), # explicit seat, selected by board config; not a board default
|
|
260
261
|
("claude-sonnet-5", "claude", "max"),
|
|
262
|
+
("claude-sonnet-5-5", "claude", "max"), # explicit seat, selected by board config; not a board default
|
|
261
263
|
("claude-opus-4-8", "claude", "max"),
|
|
262
264
|
# design-model-tier-taxonomy.md: claude-opus-5 is the new Claude heavy model.
|
|
263
265
|
# opus-4-8 is retained above — still referenced by tests (advisor_board_schema) —
|
|
@@ -1151,6 +1151,14 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
1151
1151
|
"--agy-canary-private-board-name",
|
|
1152
1152
|
help="Capture-only basename for the full board JSON inside the private evidence root.",
|
|
1153
1153
|
)
|
|
1154
|
+
# agent-harness#1204: the brief points at files in the staged tree.
|
|
1155
|
+
advisor_board_sub.add_argument(
|
|
1156
|
+
"--pointer-brief", action="store_true", default=False,
|
|
1157
|
+
help=("Declare that the brief points the reviewers at files in the staged tree instead of "
|
|
1158
|
+
"inlining them. Before any seat launches, each seat whose route cannot open those "
|
|
1159
|
+
"files is warned (seat_pointer_brief_unreadable, on stderr); it still runs, but its "
|
|
1160
|
+
"verdict is not counted as source-grounded, and the floor counts grounded seats only."),
|
|
1161
|
+
)
|
|
1154
1162
|
# agent-harness#802: an advisory, non-gating run over a standalone document.
|
|
1155
1163
|
advisor_board_sub.add_argument(
|
|
1156
1164
|
"--advisory", action="store_true", default=False,
|
|
@@ -2068,7 +2076,7 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2068
2076
|
write_private_board,
|
|
2069
2077
|
)
|
|
2070
2078
|
from .panel_invoker import _mode_instructions, _preflight_gemini_heartbeat, invoke_board
|
|
2071
|
-
from .panel_invoker import PresidentPolicyError
|
|
2079
|
+
from .panel_invoker import NativeFillRefusalError, PresidentPolicyError
|
|
2072
2080
|
|
|
2073
2081
|
# The authoritative review instructions: the code-review brief, or the advisory contract,
|
|
2074
2082
|
# staged as the brief file every seat and native fill binds (agent-harness#802).
|
|
@@ -2123,6 +2131,12 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2123
2131
|
if capture is None and private_board_name:
|
|
2124
2132
|
print("advisor-board: private board name requires PHASE_LOOP_AGY_CANARY_EVIDENCE_DIR", file=sys.stderr)
|
|
2125
2133
|
return 2
|
|
2134
|
+
pointer_brief = bool(getattr(args, "pointer_brief", False))
|
|
2135
|
+
if capture is not None and pointer_brief:
|
|
2136
|
+
# The capture board's schema is closed; a pointer-brief board is not a capture.
|
|
2137
|
+
print("advisor-board: --pointer-brief cannot be combined with agy canary capture", file=sys.stderr)
|
|
2138
|
+
capture.close()
|
|
2139
|
+
return 2
|
|
2126
2140
|
if capture is not None and not bool(getattr(args, "json", False)):
|
|
2127
2141
|
print("advisor-board: capture requires --json so full board output stays private", file=sys.stderr)
|
|
2128
2142
|
capture.close()
|
|
@@ -2315,6 +2329,10 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2315
2329
|
"agy_canary_capture": capture,
|
|
2316
2330
|
**({"monitoring_policy": monitoring_policy} if monitoring_policy != "bounded" else {}),
|
|
2317
2331
|
}
|
|
2332
|
+
if pointer_brief:
|
|
2333
|
+
# agent-harness#1204: the preflight's notices are printed BEFORE any launch.
|
|
2334
|
+
invoke_kwargs["pointer_brief"] = True
|
|
2335
|
+
invoke_kwargs["on_seat_preflight"] = _print_seat_preflight
|
|
2318
2336
|
if review_authorization is not None:
|
|
2319
2337
|
invoke_kwargs["review_authorization"] = review_authorization
|
|
2320
2338
|
invoke_kwargs["canonical_repo_authority"] = canonical_repo_authority
|
|
@@ -2326,6 +2344,14 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2326
2344
|
if capture is not None:
|
|
2327
2345
|
capture.close()
|
|
2328
2346
|
return 2
|
|
2347
|
+
except NativeFillRefusalError as exc:
|
|
2348
|
+
# agent-harness#1183: a fill refused at binding (the seat did not defer) is a native-fill
|
|
2349
|
+
# refusal naming the seat's real outcome, never an artifact-staging failure.
|
|
2350
|
+
refusal = exc.refusal
|
|
2351
|
+
print(f"advisor-board: native fill refused [{refusal.reason}]: {refusal.detail} (seat {refusal.seat_key})", file=sys.stderr)
|
|
2352
|
+
if capture is not None:
|
|
2353
|
+
capture.close()
|
|
2354
|
+
return 2
|
|
2329
2355
|
except (OSError, ValueError, AgyCanaryEvidenceError) as exc:
|
|
2330
2356
|
# Artifact staging / resolution failures fail closed with a recoverable exit,
|
|
2331
2357
|
# not a traceback.
|
|
@@ -2351,13 +2377,17 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2351
2377
|
independence = board_independence(board)
|
|
2352
2378
|
usable_count = len(result.usable_legs)
|
|
2353
2379
|
usable_vendors = {leg.leg for leg in result.usable_legs}
|
|
2380
|
+
# agent-harness#1204 (ii): the floor counts source-grounded seats only. Without
|
|
2381
|
+
# --pointer-brief no seat is marked, so this equals ``usable_count``.
|
|
2382
|
+
from .seat_preflight import grounded_usable_legs
|
|
2383
|
+
grounded_count = len(grounded_usable_legs(result))
|
|
2354
2384
|
# A runnable review command must signal when the result is NOT a usable review.
|
|
2355
2385
|
# Tie the exit code to the board's own contract: it targets 4 independent
|
|
2356
2386
|
# reviewers with a HARD FLOOR of ``FLOOR_SEATS`` (3). If fewer than the floor of
|
|
2357
2387
|
# legs returned an OK verdict with text (the rest DEGRADED / ERROR / TIMEOUT /
|
|
2358
2388
|
# EMPTY / UNAVAILABLE — e.g. the claude leg deferring under Claude Code is one
|
|
2359
2389
|
# expected non-OK), the board is below its independence floor → exit nonzero.
|
|
2360
|
-
usable =
|
|
2390
|
+
usable = grounded_count >= FLOOR_SEATS
|
|
2361
2391
|
exit_code = 0 if usable else 1
|
|
2362
2392
|
# PRESROUTE: a president-tier board that the president ruled BLOCKING is not a
|
|
2363
2393
|
# usable landing; say so and exit nonzero.
|
|
@@ -2426,10 +2456,22 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2426
2456
|
# ABDNATIVE (#183): a deferred claude seat carries the
|
|
2427
2457
|
# typed native-fill request the harness must run; None otherwise.
|
|
2428
2458
|
"needs_native_agent": _native_agent_request_json(leg),
|
|
2459
|
+
# agent-harness#1176: a heartbeat_only seat's monitoring record (progress
|
|
2460
|
+
# notice, provider terminal state); absent under the bounded policy.
|
|
2461
|
+
**({"review_monitoring": dict(leg.review_monitoring)}
|
|
2462
|
+
if leg.review_monitoring is not None else {}),
|
|
2429
2463
|
}
|
|
2430
2464
|
for leg in result.legs
|
|
2431
2465
|
],
|
|
2432
2466
|
}
|
|
2467
|
+
if pointer_brief:
|
|
2468
|
+
# agent-harness#1204: present only for a pointer-brief board, so every other
|
|
2469
|
+
# payload (and the closed capture schema) is unchanged.
|
|
2470
|
+
payload["grounded_seats"] = grounded_count
|
|
2471
|
+
payload["notices"] = [n.as_json() for n in result.seat_preflight_notices]
|
|
2472
|
+
for entry, leg in zip(payload["legs"], result.legs):
|
|
2473
|
+
entry["source_grounded"] = leg.source_grounded
|
|
2474
|
+
entry["notices"] = [n.as_json() for n in leg.seat_preflight_notices]
|
|
2433
2475
|
if advisory:
|
|
2434
2476
|
payload.update(_advisory_labels(review_brief, composed_board=board.name))
|
|
2435
2477
|
if capture is not None:
|
|
@@ -2475,6 +2517,9 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2475
2517
|
shown = _finalize_leg_detail(leg.detail)
|
|
2476
2518
|
detail = f" — {shown}" if shown else ""
|
|
2477
2519
|
print(f" [{leg.status}] {leg.seat_key}{detail}")
|
|
2520
|
+
for notice in leg.seat_preflight_notices:
|
|
2521
|
+
# agent-harness#1204: once per seat, from the notice table's literals.
|
|
2522
|
+
print(f" notice {notice.code}: {notice.what} -- fix: {notice.fix}")
|
|
2478
2523
|
# Print each reviewer's actual verdict text so the board can be reconciled
|
|
2479
2524
|
# from the command's output (not just leg statuses).
|
|
2480
2525
|
text = (leg.text or "").strip()
|
|
@@ -2484,6 +2529,19 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2484
2529
|
# The statuses/verdicts are ADVISORY evidence — the operator reconciles them; a
|
|
2485
2530
|
# non-OK leg (DEGRADED/UNAVAILABLE/…) is a gap to fill, not a passed review.
|
|
2486
2531
|
print("advisor-board: verdicts are advisory — reconcile the legs; check each leg status.")
|
|
2532
|
+
# agent-harness#1176: a heartbeat_only seat that went without genuine progress past its
|
|
2533
|
+
# notice window says so in the board summary, whatever its final status.
|
|
2534
|
+
for leg in result.legs:
|
|
2535
|
+
monitoring = leg.review_monitoring or {}
|
|
2536
|
+
count = monitoring.get("progress_notice_count")
|
|
2537
|
+
if isinstance(count, int) and count > 0:
|
|
2538
|
+
window = monitoring.get("stall_notice_s")
|
|
2539
|
+
window_s = f"{int(window)}s" if isinstance(window, (int, float)) else "its window"
|
|
2540
|
+
print(
|
|
2541
|
+
f"advisor-board: [seat_progress_stalled] {leg.seat_key} — no genuine progress "
|
|
2542
|
+
f"for {window_s} ({count} notice(s)); final status {leg.status}",
|
|
2543
|
+
file=sys.stderr,
|
|
2544
|
+
)
|
|
2487
2545
|
# #183: surface the requested-vs-delivered shortfall LOUDLY (stderr) so a
|
|
2488
2546
|
# floor-satisfying board is never mistaken for the full requested board, and
|
|
2489
2547
|
# name the seats a native harness can fill itself.
|
|
@@ -2504,14 +2562,22 @@ def _advisor_board_command(*, args: argparse.Namespace, _advisory_root: Path | N
|
|
|
2504
2562
|
why = f" — {shown}" if shown else ""
|
|
2505
2563
|
print(f"advisor-board: [{leg.status}] {leg.seat_key}{why}{fill}", file=sys.stderr)
|
|
2506
2564
|
if not usable:
|
|
2565
|
+
grounded = (f" ({grounded_count} source-grounded)" if grounded_count != usable_count
|
|
2566
|
+
else "")
|
|
2507
2567
|
print(
|
|
2508
|
-
f"advisor-board: only {usable_count} usable review leg(s) < floor {FLOOR_SEATS} "
|
|
2568
|
+
f"advisor-board: only {usable_count} usable review leg(s){grounded} < floor {FLOOR_SEATS} "
|
|
2509
2569
|
"— below the board's independence floor, not a usable board.",
|
|
2510
2570
|
file=sys.stderr,
|
|
2511
2571
|
)
|
|
2512
2572
|
return exit_code
|
|
2513
2573
|
|
|
2514
2574
|
|
|
2575
|
+
def _print_seat_preflight(notices) -> None:
|
|
2576
|
+
"""agent-harness#1204: the pointer-brief preflight, printed before any seat launches."""
|
|
2577
|
+
for notice in notices:
|
|
2578
|
+
print(f"advisor-board: preflight: {notice.render()}", file=sys.stderr)
|
|
2579
|
+
|
|
2580
|
+
|
|
2515
2581
|
def _outside_agent_preflight_command(args: argparse.Namespace) -> int:
|
|
2516
2582
|
from .conformance.outside_agent_advisory import (
|
|
2517
2583
|
build_malformed_outside_agent_advisory_evidence,
|
|
@@ -3139,7 +3205,9 @@ def _hotfix_verification_commands(plan_stub: Path) -> list[list[str]]:
|
|
|
3139
3205
|
|
|
3140
3206
|
|
|
3141
3207
|
def _redact_hotfix_reason(reason: str) -> str:
|
|
3142
|
-
|
|
3208
|
+
from .credential_redaction import redact_text
|
|
3209
|
+
|
|
3210
|
+
return " ".join(redact_text(reason).split())[:200]
|
|
3143
3211
|
|
|
3144
3212
|
|
|
3145
3213
|
def _migrate_events_command(*, repo: Path, dry_run: bool, backup_suffix: str) -> int:
|