phase-loop-runtime 0.7.23__tar.gz → 0.7.25__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {phase_loop_runtime-0.7.23/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.25}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/README.md +1 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/pyproject.toml +2 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/__init__.py +1 -1
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/_proc_cpu.py +57 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +322 -4
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/backing.py +21 -16
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/composition.py +5 -5
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/config.py +18 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/fixtures.py +12 -12
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/presets.py +21 -21
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/agent_view_cleanup.py +97 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_canary_evidence.py +85 -5
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/agy_integrity.py +70 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/claude_agent_view.py +4 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/cli.py +168 -17
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/base.py +31 -8
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/live.py +98 -22
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/verbs.py +172 -8
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/executor_availability.py +4 -3
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/falsifier.py +1 -4
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/gemini_heartbeat.py +9 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/governed_bundle.py +4 -5
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/governed_review.py +10 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/launcher.py +113 -29
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/lease_supervisor.py +11 -4
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/legible_evidence.py +1 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/panel_invoker.py +2600 -510
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/panel_reply.py +225 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/president_adapter.py +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/publishing.py +128 -9
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/review_stage.py +127 -29
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_assumptions.py +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runner.py +5 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_egress.py +126 -23
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_credentials.py +771 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail.py +1607 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail_apparmor.py +146 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail_autoqualify.py +274 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_jail_qualification.py +463 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_keyring_exec.py +137 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/seat_preflight.py +67 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_seccomp.py +45 -0
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/seat_uid.py +570 -0
- {phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/codex-execute-phase → phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/claude-execute-phase}/scripts/cleanup_lane_worktrees.sh +21 -2
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
- {phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/gemini-execute-phase → phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/codex-execute-phase}/scripts/cleanup_lane_worktrees.sh +21 -2
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
- {phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/claude-execute-phase → phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/gemini-execute-phase}/scripts/cleanup_lane_worktrees.sh +21 -2
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +21 -2
- phase_loop_runtime-0.7.25/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +106 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25/src/phase_loop_runtime.egg-info}/PKG-INFO +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/SOURCES.txt +62 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_advisory_cli_802.py +4 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_backcompat.py +2 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_backing_homebrew.py +11 -21
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_golden.py +6 -6
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_presets.py +26 -26
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_static_import_862.py +12 -8
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agent_cli_scratch_inventory_1147.py +88 -36
- phase_loop_runtime-0.7.25/tests/test_agent_view_cleanup.py +119 -0
- phase_loop_runtime-0.7.25/tests/test_agy_static_integrity.py +150 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_autosel.py +19 -10
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_xdist_adoption.py +1 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_generated_outputs.py +24 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_conftest_isolation.py +12 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_egress_prefix_crosses_the_broker_thread.py +20 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_admission_compat_789.py +1 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_partition_rotation_789d.py +3 -0
- phase_loop_runtime-0.7.25/tests/test_fabpub_sealed_head_recovery_1296.py +591 -0
- phase_loop_runtime-0.7.25/tests/test_finding_F002.py +28 -0
- phase_loop_runtime-0.7.25/tests/test_finding_F004.py +23 -0
- phase_loop_runtime-0.7.25/tests/test_finding_F005.py +18 -0
- phase_loop_runtime-0.7.25/tests/test_gemini_credential_expiry_parse.py +45 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gemini_heartbeat_bootstrap.py +66 -57
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gemini_heartbeat_filesystem_view.py +87 -69
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_harden_evidence_producer.py +119 -1
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_harden_evidence_verifier.py +6 -0
- phase_loop_runtime-0.7.25/tests/test_launch_audit_exemption_scope_1282.py +27 -0
- phase_loop_runtime-0.7.25/tests/test_launch_audit_inventory.py +121 -0
- phase_loop_runtime-0.7.25/tests/test_launch_audit_live_marker_1282.py +50 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_launcher_liveness.py +18 -11
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_leg_liveness_monitor.py +18 -3
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_legible_roadmap_contract.py +6 -6
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_owned_command_procfs_1003.py +5 -4
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_claude_review_output.py +101 -14
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker_spawn.py +47 -4
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker_timeout_argv.py +115 -55
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_leg_auth_preflight_64.py +14 -14
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_leg_status_detail_1096.py +5 -3
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_per_leg_model_66.py +2 -8
- phase_loop_runtime-0.7.25/tests/test_panel_reply.py +200 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_tui_eof_48.py +16 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_tui_liveness_188.py +34 -13
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_tui_workspace_trust_223.py +33 -10
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_president_heartbeat_1001.py +60 -13
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_president_ladder_config.py +16 -8
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_president_wiring.py +18 -3
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_presroute_hardening.py +6 -11
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proc_cpu.py +33 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_qualified_agy_image_set.py +6 -2
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_monitor_policy.py +162 -87
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_policy_govlean_repairs.py +6 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_seat_stall_1176.py +90 -28
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_egress.py +3 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_placement.py +8 -4
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_staging_1147.py +26 -40
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_scratch_runtime_audit_1147.py +41 -14
- phase_loop_runtime-0.7.25/tests/test_seat_admin_cleanup.py +48 -0
- phase_loop_runtime-0.7.25/tests/test_seat_caller_ancestry.py +156 -0
- phase_loop_runtime-0.7.25/tests/test_seat_caller_owner.py +156 -0
- phase_loop_runtime-0.7.25/tests/test_seat_credential_refresh.py +189 -0
- phase_loop_runtime-0.7.25/tests/test_seat_credentials.py +830 -0
- phase_loop_runtime-0.7.25/tests/test_seat_egress_rules.py +138 -0
- phase_loop_runtime-0.7.25/tests/test_seat_executor_review.py +224 -0
- phase_loop_runtime-0.7.25/tests/test_seat_host_git.py +313 -0
- phase_loop_runtime-0.7.25/tests/test_seat_host_path_links.py +81 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_seat_host_uid_1098.py +95 -66
- phase_loop_runtime-0.7.25/tests/test_seat_io.py +63 -0
- phase_loop_runtime-0.7.25/tests/test_seat_ipc.py +95 -0
- phase_loop_runtime-0.7.25/tests/test_seat_jail.py +750 -0
- phase_loop_runtime-0.7.25/tests/test_seat_jail_apparmor.py +122 -0
- phase_loop_runtime-0.7.25/tests/test_seat_jail_autoqualify.py +174 -0
- phase_loop_runtime-0.7.25/tests/test_seat_jail_live_d8.py +454 -0
- phase_loop_runtime-0.7.25/tests/test_seat_journal_collection.py +233 -0
- phase_loop_runtime-0.7.25/tests/test_seat_keyring.py +343 -0
- phase_loop_runtime-0.7.25/tests/test_seat_keyring_order_control.py +66 -0
- phase_loop_runtime-0.7.25/tests/test_seat_launch_guard.py +31 -0
- phase_loop_runtime-0.7.25/tests/test_seat_launch_helpers_trusted.py +276 -0
- phase_loop_runtime-0.7.25/tests/test_seat_login_wait_a3_1166.py +346 -0
- phase_loop_runtime-0.7.25/tests/test_seat_login_wait_board_context_r12.py +172 -0
- phase_loop_runtime-0.7.25/tests/test_seat_notices.py +1147 -0
- phase_loop_runtime-0.7.25/tests/test_seat_output_rewrite_1282.py +41 -0
- phase_loop_runtime-0.7.25/tests/test_seat_owner_composition.py +78 -0
- phase_loop_runtime-0.7.25/tests/test_seat_owner_notices.py +50 -0
- phase_loop_runtime-0.7.25/tests/test_seat_owner_round1_1282.py +149 -0
- phase_loop_runtime-0.7.25/tests/test_seat_owner_setup_clock_1282.py +86 -0
- phase_loop_runtime-0.7.25/tests/test_seat_owner_view.py +314 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_seat_preflight_1204.py +123 -5
- phase_loop_runtime-0.7.25/tests/test_seat_profiles.py +266 -0
- phase_loop_runtime-0.7.25/tests/test_seat_qualification_host_context.py +68 -0
- phase_loop_runtime-0.7.25/tests/test_seat_reference_inventory.py +65 -0
- phase_loop_runtime-0.7.25/tests/test_seat_review_base_unavailable.py +41 -0
- phase_loop_runtime-0.7.25/tests/test_seat_review_output_redaction.py +56 -0
- phase_loop_runtime-0.7.25/tests/test_seat_review_refusals.py +40 -0
- phase_loop_runtime-0.7.25/tests/test_seat_sandbox_permissions.py +1090 -0
- phase_loop_runtime-0.7.25/tests/test_seat_tool_approvals.py +27 -0
- phase_loop_runtime-0.7.25/tests/test_seat_transcript_io.py +226 -0
- phase_loop_runtime-0.7.25/tests/test_seat_tui_owner_refusal.py +34 -0
- phase_loop_runtime-0.7.25/tests/test_the_real_launch_carries_the_prefix.py +362 -0
- phase_loop_runtime-0.7.25/tests/test_worktree_cleanup_dirty_gate.py +143 -0
- phase_loop_runtime-0.7.23/src/phase_loop_runtime/_proc_cpu.py +0 -57
- phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
- phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
- phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
- phase_loop_runtime-0.7.23/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -62
- phase_loop_runtime-0.7.23/tests/test_the_real_launch_carries_the_prefix.py +0 -285
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_baml_worker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/advisory_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/research.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_qualification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/agy_watch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/phase_loop_bridge.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/VENDOR.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/consiliency_spec/outside_agent_router.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-route-verdict.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/schemas/outside-agent-submission.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-empty-evidence-refs.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-git-object-id-length.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-missing-digest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-path-traversal.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-raw-payload.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-source-bundle-mismatch.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unknown-producer-identity-posture.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/invalid-unsupported-verdict.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/manifest.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-ambiguity-report.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-implementation-submission.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/_contract/test-vectors/outside-agent/valid-work-request.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/credsep.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/event_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/fencing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/refresh.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/convergence/status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/credential_redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/declared_identity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/doctor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_canonical.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_delta.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_producer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fab_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fabpub_capability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fabpub_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fabreadmit_capability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/generated_outputs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/president_operation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/proof_stages.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/reviewtruth_native_fill_capability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_representation_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_placement.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_acceptance_falsifier_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_live_research.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_research.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agy_canary_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agy_self_qualification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_agy_single_event_transport_1175.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_broker_command_builders.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_broker_evidence_schema_drift_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_broker_staged_tree_delivery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_chronology_scope.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_gate_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_main_red.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_offload_lock.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_quarantine.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_workflow_concurrency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ci_xdist_witness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_claude_json_schema_metaschema_291.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_import_cycle_819.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_committed_range_diff.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_common_directory_leases_807.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_conform_timing_instrumentation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_console_scripts_are_declared.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_contract_floor_guard_378.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_adapters.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_admission.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_api.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_credsep.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_revocation_race.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_broker_verbs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_cli_integration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_coordination_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_event_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_event_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_fencing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_fixture_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_invalidation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_live_enable.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_provider_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_refresh.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_runtime_imports.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_seat_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_convergence_train_integration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_cr_fixes_pr220.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_credential_redaction_shapes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_delegated_visual_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_hold_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_reentrancy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_doctor_bom.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_entry_doc_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execfind_falsifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execfind_governed_promotion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_executor_exited_without_closeout_785.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_activation_promotion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_canonical_b.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_closeout_crash_safety.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_closeout_wiring.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_delta_c.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_delta_consumer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_flag_off_recovery_leak_299.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_gate_d.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_producer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fab_provenance_a.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_bootstrap_writer_lock_1115.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_inventory_worktree_lifecycle_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_recovery_controls_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_rotate_partition_cli_789d.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_shared_epoch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabpub_zero_history_bootstrap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabreadmit_authority_digest_v2.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fabreadmit_broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_finding_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_frozen_blob_batch_parse.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_fail_open_visibility.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_parity_244_245.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_cross_vendor_floor_358.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_declared_identity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_panel_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_plan_manifest_issue_dispositions.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_plan_pin_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_producer_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_proof_stages.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_roadmap_reseal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_skill_policy_parity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_govlean_tdd_receipts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_grok_narrow_reject_231.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_harden_json_depth_825.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_launcher_exec_supervisor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_legible_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_legible_review_repairs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_live_smoke_gate_executes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_local_check.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_manifest_per_entry_164.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_model_tier_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_native_claude_seat_fill.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_native_claude_seat_fill_green.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_native_fill_refusal_cause.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_canonical_corpus.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_conform_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_redaction_separation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_packaged_vector_manifest_pin.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_doc_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_gemini_no_command_preamble.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_invoker_windows_import.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_lanes.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_leg_failure_diagnostic.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_lens_delivery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_native_fill_183.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_v1_callers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_v1_runtime.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_baml_v1_supervisor_slot.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_agent_view_dispatch_409.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_state_disagreement_312.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_plan_manifest_append_order_1174.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F002.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F003.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r2_F004.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r4_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r4_F002.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r4_F003.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r5_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r6_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r7_F001.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr1161_r9_F002.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pr_readback_789.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_presroute_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_presroute_landed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_attestation_workflow.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_cleanup.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_proofgate_receipts.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_public_installer.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_pushflow.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_qualify_network_owner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_ratification_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_portability_85c.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reconcile_visual_avatar_evidence_91.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_redaction_channel_control_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_redaction_main_coverage_cases.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_release_dispatch_operator_approval_145.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_leg_sandbox.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_stage_binding.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_stage_board_findings.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_staged_tree_authorization.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_roadmap_authority.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_roadmap_ownership.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_roadmap_representation_consistency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runner_visual_evidence_authoritative_91.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_adapter_output_720.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_event_log_hardening_720.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_procfs_identity_870.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_clone.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_preamble.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sandbox_retention.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_liveness_contract.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_specpkgmin_wheel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_stale_roadmap_dispatch_guard.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_status_read_only_62.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_subscription_scrub_xai_864.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_task_message_broker.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_task_message_broker_cli.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_task_message_resolver.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_tdd_chronology.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_authority_import_811.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_prebuilt.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_review_authorization.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_review_monitoring_policy.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_review_packet.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_unattended_release.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_fail_closed.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_validate_plan_doc_proofgate.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_dotdot_execution_428.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_interpreter_guard_221.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verification_venv_identity_428.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_verify_qualified_agy_route_core.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_visual_avatar_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.23 → phase_loop_runtime-0.7.25}/tests/test_worktree_index.py +0 -0
{phase_loop_runtime-0.7.23/src/phase_loop_runtime.egg-info → phase_loop_runtime-0.7.25}/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.25
|
|
4
4
|
Summary: Harness-neutral phase-loop orchestration runtime and CLI
|
|
5
5
|
Author-email: ViperJuice <viperjuice@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -50,7 +50,7 @@ To install just this runtime package directly:
|
|
|
50
50
|
|
|
51
51
|
```sh
|
|
52
52
|
pip install phase-loop-runtime # latest compatible release
|
|
53
|
-
pip install phase-loop-runtime==0.7.
|
|
53
|
+
pip install phase-loop-runtime==0.7.25 # …or pin an exact version
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -19,7 +19,7 @@ To install just this runtime package directly:
|
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
pip install phase-loop-runtime # latest compatible release
|
|
22
|
-
pip install phase-loop-runtime==0.7.
|
|
22
|
+
pip install phase-loop-runtime==0.7.25 # …or pin an exact version
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
To pin a specific tag from source instead, substitute a tag from
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.25"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -156,6 +156,7 @@ phase_loop_runtime = [
|
|
|
156
156
|
markers = [
|
|
157
157
|
"dotfiles_integration: test requires a dotfiles fleet tree (skipped standalone)",
|
|
158
158
|
"quarantine(reason): known flake tracked by an OPEN issue; deselected on pull-request CI only (agent-harness#1029)",
|
|
159
|
+
"host_seat_credentials: live jailed-seat test that reads the host's Claude login and seat-jail state (agent-harness#1132)",
|
|
159
160
|
]
|
|
160
161
|
|
|
161
162
|
[tool.setuptools.data-files]
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""Linux CPU observations for a process group and its descendants.
|
|
2
|
+
|
|
3
|
+
Owner wrappers can start a child in another session. Include that child tree
|
|
4
|
+
when sampling the leg. Missing /proc data yields zero; CPU activity alone does
|
|
5
|
+
not establish completion or grant heartbeat-only termination authority.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _pgrp_and_ticks(pid: int) -> tuple[int, int]:
|
|
13
|
+
"""Return ``(process_group_id, utime+stime)`` for ``pid`` from /proc/<pid>/stat.
|
|
14
|
+
|
|
15
|
+
The ``comm`` field (2nd) is wrapped in parens and may itself contain spaces or
|
|
16
|
+
parens, so parse the fixed fields AFTER the last ``)``: from there field 3
|
|
17
|
+
(state) is index 0, so pgrp (field 5) = index 2, utime (14) = index 11, and
|
|
18
|
+
stime (15) = index 12.
|
|
19
|
+
"""
|
|
20
|
+
with open(f"/proc/{pid}/stat", encoding="ascii", errors="replace") as fh:
|
|
21
|
+
data = fh.read()
|
|
22
|
+
after = data[data.rfind(")") + 2 :].split()
|
|
23
|
+
pgrp = int(after[2])
|
|
24
|
+
return pgrp, int(after[11]) + int(after[12])
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def group_cpu_ticks(leader_pid: int) -> int:
|
|
28
|
+
"""Sum observed ticks for the group and children, including new sessions."""
|
|
29
|
+
samples = {}
|
|
30
|
+
try:
|
|
31
|
+
entries = os.listdir("/proc")
|
|
32
|
+
except OSError:
|
|
33
|
+
return 0
|
|
34
|
+
for entry in entries:
|
|
35
|
+
if not entry.isdigit():
|
|
36
|
+
continue
|
|
37
|
+
try:
|
|
38
|
+
with open(f"/proc/{entry}/stat", encoding="ascii", errors="replace") as fh:
|
|
39
|
+
data = fh.read()
|
|
40
|
+
fields = data[data.rfind(")") + 2 :].split()
|
|
41
|
+
samples[int(entry)] = (int(fields[1]), int(fields[2]),
|
|
42
|
+
int(fields[11]) + int(fields[12]))
|
|
43
|
+
except (OSError, ValueError, IndexError):
|
|
44
|
+
continue # process exited mid-scan, or an unreadable/odd stat line
|
|
45
|
+
members = {pid for pid, (_, group, _) in samples.items() if group == leader_pid}
|
|
46
|
+
if leader_pid in samples:
|
|
47
|
+
members.add(leader_pid)
|
|
48
|
+
children = {}
|
|
49
|
+
for pid, (parent, _, _) in samples.items():
|
|
50
|
+
children.setdefault(parent, []).append(pid)
|
|
51
|
+
pending = list(members)
|
|
52
|
+
while pending:
|
|
53
|
+
for child in children.get(pending.pop(), ()):
|
|
54
|
+
if child not in members:
|
|
55
|
+
members.add(child)
|
|
56
|
+
pending.append(child)
|
|
57
|
+
return sum(samples[pid][2] for pid in members)
|
|
@@ -28,8 +28,8 @@ equivalence is proven by a test (not asserted in prose).
|
|
|
28
28
|
the **agy/gemini leg where effort is embedded in the model-name string**
|
|
29
29
|
(`render_gemini_model`, panel_invoker.py:1016). Built-3 lanes are concrete;
|
|
30
30
|
breadth lanes raise `EffortMappingError` until ABDREG/ABDHOME/ABDOMNI.
|
|
31
|
-
|
|
32
|
-
`-c model_reasoning_effort=
|
|
31
|
+
Default round-trip (proven): claude→`--effort high`, codex→
|
|
32
|
+
`-c model_reasoning_effort=high`, Gemini Flash→`gemini-3.8-flash-medium`;
|
|
33
33
|
explicit legacy Pro display names remain compatible.
|
|
34
34
|
- **Seat identity for result re-keying** — `Seat.seat_key` is a stable LABEL over
|
|
35
35
|
every distinguishing field (lane, model, effort, lens), so lens-only-different
|
|
@@ -563,6 +563,15 @@ only in a private 0600 per-leg file under the run's stream dir (`leg-logs/`, 070
|
|
|
563
563
|
reasons or the board summary. Its name carries only closed fields:
|
|
564
564
|
`leg-logs/<registry harness | leg>-<24 hex>.log`.
|
|
565
565
|
|
|
566
|
+
**Seat-jail codes (agent-harness#1132, F030).** Every seat-jail notice code is an exact
|
|
567
|
+
literal of `_HARNESS_DETAIL_CODES`: `seat_sandbox_unavailable_{host,seat_uid,tiocsti}`,
|
|
568
|
+
`seat_sandbox_not_staged`, each `seat_sandbox_refused:<sub>` as its own literal
|
|
569
|
+
(`jail_build`, `namespace`, `identity`, `preseed`, `token_file_unsafe`,
|
|
570
|
+
`gemini_credential_unsafe`, `stage_not_private`, `stage_changed`, `output_unsafe`),
|
|
571
|
+
`seat_sandbox_retained_after_teardown`, and the `claude_seat_*` / `gemini_seat_*` codes. No
|
|
572
|
+
regex template admits a seat code, and there is no parallel vocabulary: `seat_jail.NOTICES`
|
|
573
|
+
only renders each code's literal what/why/fix, and a test holds the two sets equal.
|
|
574
|
+
|
|
566
575
|
**Threat model.** I3 defends against untrusted TEXT: CLI stdout/stderr, leg bodies, exception messages and PTY output. None of it can choose or enter `detail`. In-process Python code is trusted runtime code and is out of scope: it can do anything (for example `object.__setattr__` on arbitrary objects, or replacing this module's functions). The exact-type checks (`PanelLegResult` refuses any subclass instance; only an exact `_HarnessCode` / `_LegFailure` has provenance; contents are read with `str.__str__` and re-created as a fresh `_HarnessCode`) close the cheap structural bypasses, but they are not a sandbox against hostile in-process code.
|
|
567
576
|
|
|
568
577
|
## ABDMODE — Purpose-derived default mode + advisory prompt hygiene · `panel_invoker.py` (#107)
|
|
@@ -889,8 +898,11 @@ set `gemini_heartbeat.QUALIFIED_IMAGES`: 1.2.11 SHA256
|
|
|
889
898
|
`ec7cf797ecb0e1d91ddf3b6d9d6c1d616bb89f78a5b0e43536b72a7fce695f56`, 1.2.12 SHA256
|
|
890
899
|
`ce6fdd9e7621ee9ac6eedaa337731ca1f235e412ff57cf9eabcd2aa23b3576ca`, 1.2.14 SHA256
|
|
891
900
|
`0d0d3eba22daf29504dd290151c7ed9a4d33b0c6aa0acfc5da27bc3b01d2f029`, 1.2.15 SHA256
|
|
892
|
-
`5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164
|
|
893
|
-
`a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86
|
|
901
|
+
`5f9c16b286895f8f7fdecd423883ca256a85077b8acf9a6bc1111761d34df164`, 1.2.16 SHA256
|
|
902
|
+
`a759ce7c7a235d9b6c281a25ead97cbbf2e92314a3ffd224e2f9144f3fae7a86`, 1.2.17 SHA256
|
|
903
|
+
`c54ef90651a8646ae67334d39212c81f5946feec373ad6aa335f9ef401662bc5`, 1.3.0 SHA256
|
|
904
|
+
`19be6af38f7beeaa0db415df9297e314ab3d33fdd6f853434d49f88819bc68e4` or 1.3.1 SHA256
|
|
905
|
+
`ce1bdaed3201bb84f35d69d2773caec4f18af52af00e8c25f6cace07e4359615`. Each member
|
|
894
906
|
carries its measured help digest and has its own qualification record; the
|
|
895
907
|
evidence catalog and the runtime set must name exactly the same members.
|
|
896
908
|
The running Python/kernel must support sealed memfds, pidfds and pidfd signaling;
|
|
@@ -1043,6 +1055,312 @@ A non-release `agy` image is admitted only by verifying it, never by trusting it
|
|
|
1043
1055
|
created PR back (the PR body's copy is display-only). "Up to date" requires that local record, `headRefOid` and `ls-remote` to
|
|
1044
1056
|
agree. It refuses when it cannot prove its open-PR listing complete.
|
|
1045
1057
|
|
|
1058
|
+
## SEATJAIL — Full-permission review seats inside a per-seat jail (agent-harness#1132)
|
|
1059
|
+
|
|
1060
|
+
Plan: `plans/detailed-seat-sandbox-permissions-1132-20260928.md`. Maintainer decisions D1-D8
|
|
1061
|
+
are recorded on agent-harness#1132.
|
|
1062
|
+
|
|
1063
|
+
- **Route (J7).** A production brokered Claude or Gemini leg decides its route once, after
|
|
1064
|
+
the public-entry authorization and before staging, in this order; the first failure wins
|
|
1065
|
+
and yields exactly one code: (0) no staged tree -> `seat_sandbox_not_staged`; (1) a
|
|
1066
|
+
recorded Gemini P4/P3 stop -> its code (today `gemini_seat_egress_unconfined`: the agy
|
|
1067
|
+
token carries `cloud-platform`, and the "prove then enable" containment probe found jail
|
|
1068
|
+
egress not limited to agy's inference hosts; P3 was not run and the tooled profile is not
|
|
1069
|
+
built); (2) host capability -> `seat_sandbox_unavailable_host`,
|
|
1070
|
+
`_tiocsti`, or `_seat_uid`; (3) credential presence -> `claude_seat_token_missing` /
|
|
1071
|
+
`gemini_seat_credential_missing`; (4) Gemini tooled qualification ->
|
|
1072
|
+
`gemini_seat_profile_unqualified`. Steps 0-4 send the seat to the sealed inline route,
|
|
1073
|
+
byte-identical to before, with that notice, except a Claude seat's step 3, which is not
|
|
1074
|
+
run (plan amendment A3b, below). Codex and grok are not jailed
|
|
1075
|
+
(agent-harness#895) and carry `seat_filesystem_unconfined` when given a tree.
|
|
1076
|
+
- **No sealed fallback for a jail-eligible seat (plan amendment A3b).** A Claude seat that
|
|
1077
|
+
would take the jailed route but cannot (no credential, a failed first-use qualification,
|
|
1078
|
+
a login not renewed within the wait, an unqualified or unsafe gate, an unsafe override)
|
|
1079
|
+
is DEGRADED and NOT RUN, typed, with a fix. It is never a toolless substitute.
|
|
1080
|
+
`seat_jail.JAIL_NOT_RUN_CODES` names the route codes this applies to; none of them is in
|
|
1081
|
+
`SEALED_FALLBACK_CODES`. The sealed route stays for hosts without the jail prerequisites,
|
|
1082
|
+
an unstaged review and the Gemini seat (agent-harness#1244).
|
|
1083
|
+
- **The jailed route is Claude-only.** `JAILED_LEGS` is exactly `{"claude"}`. A Gemini
|
|
1084
|
+
seat always takes the sealed route with its typed notice, whatever its credential,
|
|
1085
|
+
qualification or recorded stop; a tooled Gemini seat is agent-harness#1170.
|
|
1086
|
+
- **EC-EXECFIND-2 gate.** A jailed route whose jail profile digest has no EC-EXECFIND-2
|
|
1087
|
+
falsifier pass recorded on THIS host is REFUSED before any effect with
|
|
1088
|
+
`seat_sandbox_refused:jail_unqualified`. The notice names the per-host qualification as
|
|
1089
|
+
the fix.
|
|
1090
|
+
- **Where passes live:** per user and per host, at
|
|
1091
|
+
`$XDG_STATE_HOME/phase-loop/seat-jail-passes/<digest>.json`. A record qualifies only if it
|
|
1092
|
+
binds all of:
|
|
1093
|
+
- the digest;
|
|
1094
|
+
- this host (sha256 of `/etc/machine-id`);
|
|
1095
|
+
- the EC-EXECFIND-2 falsifier-run layout: `seat_jail.falsifier_layout_identity()`, a
|
|
1096
|
+
digest of the EXECFIND staging and run code, so a change to either invalidates every
|
|
1097
|
+
pass;
|
|
1098
|
+
- the run's evidence file, which the gate re-hashes and which must name the same values.
|
|
1099
|
+
|
|
1100
|
+
The record and the evidence must be regular, operator-owned files that are not group- or
|
|
1101
|
+
other-writable and are not links. They are read non-blocking with size caps.
|
|
1102
|
+
- **The directory chain:** every directory up to the state home must be operator-owned,
|
|
1103
|
+
must not be a link, and must not be other-writable. It may be group-writable only when
|
|
1104
|
+
its group is the operator's user-private group, which is the umask-002 default. That
|
|
1105
|
+
means all of the following hold:
|
|
1106
|
+
- it is the operator's primary gid;
|
|
1107
|
+
- the group is named after the operator;
|
|
1108
|
+
- it lists no other member;
|
|
1109
|
+
- no other account has it as its primary group.
|
|
1110
|
+
|
|
1111
|
+
Any other chain is refused with `seat_sandbox_refused:pass_store_unsafe`, whose notice
|
|
1112
|
+
names the chmod. The recorder applies the same rule and never re-permissions an
|
|
1113
|
+
existing directory.
|
|
1114
|
+
- **One fail-closed boundary:** the whole evaluation is inside a single
|
|
1115
|
+
`except Exception`. Any error is the typed refusal `jail_unqualified`, and no provider
|
|
1116
|
+
is launched. The route detail stays the closed code. The verdict's typed reason
|
|
1117
|
+
(`no_record`, `binding_mismatch`, `evidence_mismatch`, `store_unsafe:...` or
|
|
1118
|
+
`error:<ExceptionClass>`) is logged, and is carried in the launch refusal's message.
|
|
1119
|
+
- **Checked at launch:** qualification is re-checked against the jail actually built.
|
|
1120
|
+
- **Threat model:** the operator's own account can forge a record, and is trusted to. The
|
|
1121
|
+
store defends against the seat uid, stale records, other hosts and accidental reuse.
|
|
1122
|
+
- **Why per host:** the digest binds the host's layout (maintainer decision, option A).
|
|
1123
|
+
A shipped host-independent policy digest plus a first-use self-check is
|
|
1124
|
+
agent-harness#1186.
|
|
1125
|
+
- **Recording a pass:** `phase-loop seat-sandbox qualify` runs EC-EXECFIND-2's jail
|
|
1126
|
+
falsifiers (`seat_jail_qualification`) against a real falsifier run, using the EXECFIND
|
|
1127
|
+
staging, the dependency snapshot and the bounded bwrap runner:
|
|
1128
|
+
- the run holds a nonce sentinel in every protected directory, a sentinel process, and
|
|
1129
|
+
TCP, UDP, pathname Unix and abstract Unix listeners;
|
|
1130
|
+
- concurrently, a probe program running as the seat in the production jail tries to
|
|
1131
|
+
create entries, change sentinels, signal and connect, through the host paths and
|
|
1132
|
+
through anything it resolves by device and inode;
|
|
1133
|
+
- the parent judges the result: sentinels intact, no events, single-link protected
|
|
1134
|
+
files, no seat mount or descriptor resolving to a protected object or an ancestor, and
|
|
1135
|
+
the run `green_on_head`.
|
|
1136
|
+
|
|
1137
|
+
Only a pass is recorded.
|
|
1138
|
+
- **`seat_sandbox_refused:identity`** remains the code for a jail that is not the
|
|
1139
|
+
qualified profile at launch, or a failed identity probe.
|
|
1140
|
+
- **Jail profile (`seat_jail_v1`).** bwrap, no `--unshare-user` and no `--unshare-net`:
|
|
1141
|
+
read-only `/usr` (merged-`/usr` links recreated), an `/etc` subset, the provider image at
|
|
1142
|
+
`/seat/bin/<leg>`, the bundle and instructions as sealed memfds at `/seat/review/`, the
|
|
1143
|
+
staged clone read-write at `/seat/tree`, fresh `/seat/home` and `/seat/out`, tmpfs `/tmp`
|
|
1144
|
+
and `/dev/shm`, `--remount-ro /`, `--clearenv` plus a declared environment (the seat's
|
|
1145
|
+
`TMPDIR` and `CLAUDE_CODE_TMPDIR` are `/seat/home/.tmp`, on the disk-backed staging root,
|
|
1146
|
+
never the tmpfs `/tmp`; agent-harness#1147), and the J14
|
|
1147
|
+
seccomp filter (architecture kill, x32 EPERM, nested user/mount namespaces, `setns`,
|
|
1148
|
+
`clone3` ENOSYS, key syscalls, AF_ALG sockets, TIOCSTI/TIOCLINUX). The profile digest
|
|
1149
|
+
covers the mount set, the flags and the filter digest.
|
|
1150
|
+
- **Seat uid (D8).** The seat runs as a subordinate uid leased from the operator's
|
|
1151
|
+
`/etc/subuid` range, inside an egress holder namespace mapped by `newuidmap`/`newgidmap`
|
|
1152
|
+
(in it, uid 0 is the operator). Launch order: fresh session keyring, `nsenter` into H,
|
|
1153
|
+
the private-inode hand-off (`seat_sandbox_refused:stage_not_private` on any hard link),
|
|
1154
|
+
bwrap with `--cap-drop ALL` then exactly `CAP_SETUID`, `CAP_SETGID`, `CAP_SETPCAP` (P5:
|
|
1155
|
+
bwrap as namespace root otherwise keeps every capability), then `setpriv` to the seat
|
|
1156
|
+
uid with every capability set, the bounding set included, emptied and no-new-privs set,
|
|
1157
|
+
then `env --chdir=/seat/tree` as the seat. `/seat`, `/seat/bin`, `/seat/review` and
|
|
1158
|
+
`/etc` are created 0755 and the tmpfs mounts 1777, so the seat uid can traverse and use
|
|
1159
|
+
them (P5, P1).
|
|
1160
|
+
The host prerequisite (`apt install uidmap`, `usermod --add-subuids/--add-subgids`) is a
|
|
1161
|
+
one-time root step by the maintainer, never run by the runtime.
|
|
1162
|
+
- **Credential channels (plan amendment A1).** The Claude credential is resolved afresh at
|
|
1163
|
+
each jailed launch, in this order:
|
|
1164
|
+
1. The seat-token override, the record `$XDG_STATE_HOME/phase-loop/seat-credentials/
|
|
1165
|
+
claude.override.json` (owner-only, in a 0700 directory, owned by the euid). It is
|
|
1166
|
+
written only by `phase-loop seat-sandbox store-token` and used only when it is bound to
|
|
1167
|
+
the account and organization the launching session is logged in to (plan amendment A4,
|
|
1168
|
+
below). A hand-placed raw `seat-credentials/claude` file is never used.
|
|
1169
|
+
2. Otherwise, the current Claude login's `claudeAiOauth.accessToken` only, never its
|
|
1170
|
+
refresh token. It comes from the CLI's own store: `$CLAUDE_CONFIG_DIR/.credentials.json`
|
|
1171
|
+
or `~/.claude/.credentials.json`, and the login Keychain on macOS.
|
|
1172
|
+
|
|
1173
|
+
- **The login token's margin:** it must have the seat's hard deadline (its explicit
|
|
1174
|
+
per-leg timeout, else the 1800 s backstop) or `PHASE_LOOP_SEAT_LOGIN_TOKEN_MARGIN_S`
|
|
1175
|
+
left. One function (`_claude_seat_login_margin_s`) gives this margin to the pre-launch
|
|
1176
|
+
seat mode, the wait and the launch.
|
|
1177
|
+
- **A short login (plan amendment A3):** the harness never runs the Claude CLI to renew a
|
|
1178
|
+
credential. The mode line carries `claude_seat_login_token_awaiting_refresh` with the
|
|
1179
|
+
minutes left. Before staging, and before any seat id or namespace is held, the seat
|
|
1180
|
+
waits: `seat_credentials.await_login_margin` reads the store read-only every
|
|
1181
|
+
`PHASE_LOOP_SEAT_LOGIN_REFRESH_POLL_S` (30 s), for up to
|
|
1182
|
+
`PHASE_LOOP_SEAT_LOGIN_REFRESH_WAIT_S` (900 s; 0 means no wait).
|
|
1183
|
+
- **Renewed:** the seat runs jailed (logged `jailed (login refreshed)`), re-reading the
|
|
1184
|
+
token at launch.
|
|
1185
|
+
- **Not renewed in time:** the seat is DEGRADED and NOT RUN with
|
|
1186
|
+
`claude_seat_login_token_expiring`. A store that stops yielding a login ends it with
|
|
1187
|
+
`claude_seat_token_missing`. Nothing is launched (plan amendment A3b).
|
|
1188
|
+
- **Monitoring:** under `heartbeat_only` the wait is recorded as `login_wait` in the
|
|
1189
|
+
monitoring record, not as a stall, and the stall clock starts after it. Under a
|
|
1190
|
+
bounded policy it is charged to the leg's deadline. The monitor's cancel event and the
|
|
1191
|
+
quiescence latch end it.
|
|
1192
|
+
- **Delivery:** either credential is delivered only through one drained pipe named by
|
|
1193
|
+
`CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR`. No credential is in any argv, environment
|
|
1194
|
+
value, evidence or log.
|
|
1195
|
+
- **The output scan:** seat output is scanned for the credential's bytes and its
|
|
1196
|
+
standard, URL-safe and hex encodings (`claude_seat_token_in_output`).
|
|
1197
|
+
- **The residual:** a seat can use the credential for its remaining lifetime. That is
|
|
1198
|
+
hours for a login access token. The response is to log out and back in; the token also
|
|
1199
|
+
expires on its own.
|
|
1200
|
+
- **Gemini:** the D7 access-token-only copy (builder only; the tooled Gemini route is gated
|
|
1201
|
+
on P4 then P3).
|
|
1202
|
+
- **Credential outcomes by source.** For the override: `claude_seat_token_rate_limited` and
|
|
1203
|
+
`claude_seat_token_rejected`. For the login: `claude_seat_login_rate_limited` and
|
|
1204
|
+
`claude_seat_login_rejected`. A login token at or past its launch-time expiry fails as
|
|
1205
|
+
`claude_seat_login_token_expired`, in both the detail and the notice, and is safe to
|
|
1206
|
+
relaunch. None of these is a `seat_sandbox_refused:*` code. On both the sealed and the
|
|
1207
|
+
jailed route, an authentication failure in the PTY tail takes priority over the generic
|
|
1208
|
+
journaled give-up (`claude_seat_provider_api_error`), so a credential outcome is never
|
|
1209
|
+
hidden behind it; every typed give-up (limits, output budget, rejected transcript) keeps
|
|
1210
|
+
its priority.
|
|
1211
|
+
- **First-use qualification (plan amendment A2; folds in agent-harness#1186 option C).** A
|
|
1212
|
+
jailed route with no recorded pass for this host, digest and layout runs the host's jail
|
|
1213
|
+
qualification once, before launch. It is serialized by an exclusive lock in the per-user
|
|
1214
|
+
state directory, and on a pass it records the pass.
|
|
1215
|
+
- **On a pass:** the seat stays jailed, and its mode reports `qualified_now`.
|
|
1216
|
+
- **On a failure, or a run that cannot happen (a cached failure included):** the seat is
|
|
1217
|
+
DEGRADED and NOT RUN with `seat_jail_qualification_failed` and a typed reason
|
|
1218
|
+
(`prerequisite_missing`, `store_unsafe`, `uid_switch_denied`, `falsifiers_failed`, `timeout` or
|
|
1219
|
+
`error`),
|
|
1220
|
+
each with a literal fix (plan amendment A3b supersedes A2's sealed fallback).
|
|
1221
|
+
- **The failure cache:** failures are cached per host, digest and layout for
|
|
1222
|
+
`PHASE_LOOP_SEAT_JAIL_QUALIFY_RETRY_S` (default 3600 s). A lock timeout is not cached.
|
|
1223
|
+
- **The launch-time re-check** against the built jail still refuses an unrecorded digest.
|
|
1224
|
+
- **Seat modes (plan amendment A1).** Before any seat launches, every board publishes one
|
|
1225
|
+
mode per seat: `jailed`, `unconfined`, `sealed`, `degraded` or `native`. Each mode carries
|
|
1226
|
+
its notice code, reason and fix, and the modes are delivered through `on_seat_modes`, the
|
|
1227
|
+
log and `seat-modes.json`. The `advisor-board` CLI prints them to stderr and carries them as
|
|
1228
|
+
`seat_modes` in `--json`.
|
|
1229
|
+
- **Launch helpers.** The pre-jail and in-namespace helpers (`seat_keyring_exec`, the
|
|
1230
|
+
`seat_uid` handoff and its in-namespace verbs) run from the installation the parent
|
|
1231
|
+
imported: `python -I` with this package's root put first on the import path
|
|
1232
|
+
(`seat_uid.trusted_module_argv`), never `python -m`, whatever the launch's working
|
|
1233
|
+
directory is. An inventory test fails on any `sys.executable -m` launch of a package
|
|
1234
|
+
module.
|
|
1235
|
+
- **Scratch decision (agent-harness#1147).** A jailed launch's helper chain gets one env
|
|
1236
|
+
from `child_scratch_env` (`_jail_launch_env`), and that same object is handed to the
|
|
1237
|
+
identity probe and the launch. The seat never sees it: bwrap clears the environment and
|
|
1238
|
+
sets the seat's own.
|
|
1239
|
+
- **The override follows the launching session (plan amendment A4).** A seat's credential
|
|
1240
|
+
follows the subscription of the session that launched the leg.
|
|
1241
|
+
- **Storing:** `phase-loop seat-sandbox store-token` reads the override with no echo, or
|
|
1242
|
+
from stdin. A terminal that cannot hide the input is refused. The token and its account
|
|
1243
|
+
are stored as ONE record, `seat-credentials/claude.override.json`
|
|
1244
|
+
(`{"schema": "seat_credential_override.v1", "account": ..., "token": ...}`).
|
|
1245
|
+
- **The account** is the current login's `oauthAccount.accountUuid`, from
|
|
1246
|
+
`$CLAUDE_CONFIG_DIR/.claude.json` or `~/.claude.json`, read without running the CLI.
|
|
1247
|
+
- **Refused** with no login. An unsafe account file is named in the refusal.
|
|
1248
|
+
- **The write:** it goes relative to the held directory descriptors (each directory
|
|
1249
|
+
component opened without following links and checked on the descriptor), as a new
|
|
1250
|
+
0600 file under a random name renamed into place. A store is therefore atomic, and
|
|
1251
|
+
concurrent stores leave one complete record.
|
|
1252
|
+
- **At launch:** the record is read once, without following a link and without blocking.
|
|
1253
|
+
- **Used:** only when its account equals the launching session's account, and the
|
|
1254
|
+
launch uses exactly the token bytes whose account was checked.
|
|
1255
|
+
- **Not used:** when the accounts differ, when either is unknown, when the record is
|
|
1256
|
+
malformed, or when only a hand-placed raw `seat-credentials/claude` exists. The seat
|
|
1257
|
+
then uses the login and carries the notice `claude_seat_override_other_subscription`,
|
|
1258
|
+
also on its mode line, beside any login notice. That notice is not a jail refusal.
|
|
1259
|
+
- **Unsafe:** a record that is not a private regular file the euid owns refuses the
|
|
1260
|
+
launch (`seat_sandbox_refused:token_file_unsafe`).
|
|
1261
|
+
- **When the seat does not run:** a refusal (no login, a login short of the margin, a wait
|
|
1262
|
+
that ended short) carries `claude_seat_override_other_subscription` beside its one
|
|
1263
|
+
refusal code whenever a stored override was ignored. The seat's notices, the A3b
|
|
1264
|
+
DEGRADED result and the mode line all carry it.
|
|
1265
|
+
- **Per harness:** the rule lives once, in `override_decision(adapter)`. Each harness's
|
|
1266
|
+
`SeatCredentialAdapter` answers `override_present()`, `read_override()` (the record,
|
|
1267
|
+
read once) and `current_account()`, and declares its credential `sources` in precedence
|
|
1268
|
+
order; an adapter without the override source never uses one. Claude is the only
|
|
1269
|
+
adapter today, and `store-token` stores Claude's override.
|
|
1270
|
+
- **One slot per user:** the override lives under the Unix user's `$XDG_STATE_HOME`, so
|
|
1271
|
+
there is one per user, not one per config directory or account. A store from another
|
|
1272
|
+
account replaces it, and sessions on the earlier account then use their login, with
|
|
1273
|
+
the notice.
|
|
1274
|
+
- **Independent reads:** the mode line, the A3 wait and the launch each read the decision
|
|
1275
|
+
afresh. A `/login` between them can change the outcome. Every such change falls toward
|
|
1276
|
+
the login, never toward an unbound override.
|
|
1277
|
+
- **macOS:** the CLI keeps the login in the Keychain service named from
|
|
1278
|
+
`CLAUDE_SECURESTORAGE_CONFIG_DIR` when that is set, and the account in
|
|
1279
|
+
`CLAUDE_CONFIG_DIR/.claude.json`. With only the former set, the account and the login
|
|
1280
|
+
can describe different identities. Set both, or neither.
|
|
1281
|
+
- **Organization (maintainer ruling 2026-10-05):** the record (schema
|
|
1282
|
+
`seat_credential_override.v2`) binds both `oauthAccount.accountUuid` and
|
|
1283
|
+
`oauthAccount.organizationUuid`, read from the same `.claude.json`.
|
|
1284
|
+
- **At launch:** the override applies only when both are known and both equal the
|
|
1285
|
+
session's. A v1 or organization-less record is unbound.
|
|
1286
|
+
- **Storing:** `store-token` refuses when the organization is unknown.
|
|
1287
|
+
- **Permissions:** the record must be owner-only: any group or other bit refuses with
|
|
1288
|
+
`token_file_unsafe`. The store opens every directory component, the state root
|
|
1289
|
+
included, without following links; a linked state root is refused, naming the directory
|
|
1290
|
+
to set `XDG_STATE_HOME` to.
|
|
1291
|
+
- **Refusals after resolution:** a refusal raised after the credential is resolved (the
|
|
1292
|
+
jail build, the pre-seed, the namespace) also carries the ignored-override notice beside
|
|
1293
|
+
its one refusal code.
|
|
1294
|
+
- **Modes without the notice:** sealed, unconfined and native Claude modes carry no
|
|
1295
|
+
override notice, by design: the override is never their credential.
|
|
1296
|
+
- **Status:** `phase-loop seat-sandbox token-status` shows the bound account and
|
|
1297
|
+
organization, this session's, and whether the override applies. It exits 0 only when
|
|
1298
|
+
the override applies, and never shows the token.
|
|
1299
|
+
- **Seat-token rotation.** The override record is read at each jailed launch and never
|
|
1300
|
+
cached across legs or rounds.
|
|
1301
|
+
- **Rotating:** `phase-loop seat-sandbox store-token` is the only way to rotate it. It
|
|
1302
|
+
replaces the record with one rename, and the next launch uses the new token; a running
|
|
1303
|
+
leg keeps the token it was launched with.
|
|
1304
|
+
- **By hand:** a token file replaced by hand is ignored.
|
|
1305
|
+
The token is per-launch input only: neither the jail profile digest nor an EC-EXECFIND-2
|
|
1306
|
+
pass binds it, so replacing it trips no qualification check.
|
|
1307
|
+
- **A rate-limited seat token is not a jail fault.** When the provider refuses the seat
|
|
1308
|
+
token's subscription for a rate or usage limit (the shared leg-failure classifier's
|
|
1309
|
+
`usage_limit` class, with the provider's reset time when it gives one), the leg ends with
|
|
1310
|
+
that detail and the notice `claude_seat_token_rate_limited`: rotate or replace the seat
|
|
1311
|
+
token, or wait for the reset. It is never a `seat_sandbox_refused:*` code. A token the provider
|
|
1312
|
+
rejects (the classifier's `auth_failure`, measured in P2) carries
|
|
1313
|
+
`claude_seat_token_rejected`.
|
|
1314
|
+
- **Pointer-brief preflight.** On a `--pointer-brief` board, a seat whose launch takes the
|
|
1315
|
+
jailed route (the same J7 decision and EC-EXECFIND-2 gate the launch applies) has file
|
|
1316
|
+
access to the staged tree, so it is source-grounded and never marked
|
|
1317
|
+
`seat_pointer_brief_unreadable`. A jail that would be refused is not counted as one.
|
|
1318
|
+
- **Pointer mode.** A jailed seat gets a pointer brief: jail-path preamble, the
|
|
1319
|
+
AUTHORITATIVE INSTRUCTIONS inline, and POINTER frames naming the bundle (path, sha256,
|
|
1320
|
+
size) and the tree (path, source commit, approved digest). Evidence records
|
|
1321
|
+
`provider_input_mode: "pointer"`, `provider_input_inline: false`,
|
|
1322
|
+
`sandbox_filesystem_confined: true` and the jail profile id and digests;
|
|
1323
|
+
`verify_harden_evidence.py` reports EC-HARDEN-5 UNMET (accepted residual
|
|
1324
|
+
agent-harness#361, D3) on every such record.
|
|
1325
|
+
- **Notices.** `{code, seat_key, what, why, fix}`, rendered only from literals, on the
|
|
1326
|
+
`advisor-board` payload (`notices`, `legs[].notices`) and text summary, and on the
|
|
1327
|
+
governed path as one non-gating `seat_notice` finding per notice (L4b).
|
|
1328
|
+
- **Retention.** A failed in-namespace teardown keeps the seat directories under the leg's
|
|
1329
|
+
operator-owned 0700 scratch dir, adds `seat_sandbox_retained_after_teardown`, and records
|
|
1330
|
+
the path. `phase-loop seat-sandbox reap PATH` accepts only a recorded path under the
|
|
1331
|
+
stage root, opened `O_NOFOLLOW|O_DIRECTORY` component by component, and owned by a
|
|
1332
|
+
subordinate uid.
|
|
1333
|
+
|
|
1334
|
+
## SEATOWNER — The seat-launch owner (agent-harness#1222)
|
|
1335
|
+
|
|
1336
|
+
Every review seat, the president and executor `review` start through one owner,
|
|
1337
|
+
`panel_invoker.launch_owned`. A jailed Claude seat (SEATJAIL) launches through its jail
|
|
1338
|
+
instead, and the jail is that launch's owner.
|
|
1339
|
+
|
|
1340
|
+
- **Credentials, the narrowest each CLI runs with.** No seat receives a refresh token.
|
|
1341
|
+
- **Claude:** the one SEATJAIL decision. That is the bound override, else the login's
|
|
1342
|
+
access token. It is delivered through the drained pipe named by
|
|
1343
|
+
`CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR`.
|
|
1344
|
+
- **Gemini and Grok:** an access-token-only copy.
|
|
1345
|
+
- **Codex:** the auth file with its refresh token's value emptied. The key and the id
|
|
1346
|
+
token stay, because the CLI sends no bearer without them (measured).
|
|
1347
|
+
- **Every copy:** it sits in the seat's private home, and its secret values are
|
|
1348
|
+
redacted from the seat's output.
|
|
1349
|
+
- **Refusals.** Each owner refusal is a closed detail code and a `seat_jail.NOTICES`
|
|
1350
|
+
entry, with what happened, why and a fix line (`seat_owner_unavailable`,
|
|
1351
|
+
`seat_filtered_egress_unavailable`, `seat_keyring_unavailable`, ...).
|
|
1352
|
+
- **The Claude journal.** The host collects the exact session journal through retained
|
|
1353
|
+
handles, after the provider has been cleaned up, and validates it before any approval.
|
|
1354
|
+
- **Refused on both routes:** a new user turn, a max-token continuation, an unmatched
|
|
1355
|
+
`tool_use`, partial JSONL, or a missing final answer.
|
|
1356
|
+
- **A completed tool cycle is accepted:** every `tool_use` has its `tool_result`.
|
|
1357
|
+
- **A journaled `isApiErrorMessage` record** is never an answer or a continuation. The
|
|
1358
|
+
answer parser (agent-harness#1194) decides the turn.
|
|
1359
|
+
- **The route's own answer rule:**
|
|
1360
|
+
- the president requires a terminal turn;
|
|
1361
|
+
- on the review route, a completed answer outlives a later stray error.
|
|
1362
|
+
- **A refusal or cancellation keeps no partial journal on the host.**
|
|
1363
|
+
|
|
1046
1364
|
## ABDFALSIFY — Executable review findings (IF-0-EXECFIND-1)
|
|
1047
1365
|
|
|
1048
1366
|
An optional `falsifier` attachment names one `FindingFalsifier` with
|
|
@@ -483,12 +483,15 @@ class ParentUnixBroker:
|
|
|
483
483
|
):
|
|
484
484
|
raise ValueError("broker canonical repository authority is not probeable")
|
|
485
485
|
try:
|
|
486
|
-
|
|
487
|
-
|
|
486
|
+
from ..review_stage import host_git
|
|
487
|
+
|
|
488
|
+
listed = host_git(
|
|
489
|
+
self.canonical_repo, "ls-files", "-z", check=True,
|
|
488
490
|
text=True,
|
|
491
|
+
stdout=subprocess.PIPE,
|
|
489
492
|
stderr=subprocess.DEVNULL,
|
|
490
493
|
timeout=3,
|
|
491
|
-
).split("\0")
|
|
494
|
+
).stdout.split("\0")
|
|
492
495
|
probe_file = next(
|
|
493
496
|
(
|
|
494
497
|
self.canonical_repo / relative
|
|
@@ -498,7 +501,7 @@ class ParentUnixBroker:
|
|
|
498
501
|
),
|
|
499
502
|
None,
|
|
500
503
|
)
|
|
501
|
-
except (OSError, subprocess.SubprocessError):
|
|
504
|
+
except (OSError, ValueError, subprocess.SubprocessError):
|
|
502
505
|
probe_file = None
|
|
503
506
|
if probe_file is None:
|
|
504
507
|
raise ValueError("broker canonical repository authority is not probeable")
|
|
@@ -696,7 +699,7 @@ class ParentUnixBroker:
|
|
|
696
699
|
runtime_binds: list[str] = ["--ro-bind", "/usr", "/usr"]
|
|
697
700
|
for runtime in ("/lib", "/lib64"):
|
|
698
701
|
if Path(runtime).exists(): runtime_binds.extend(("--ro-bind", runtime, runtime))
|
|
699
|
-
argv = [str(bwrap),"--unshare-all","--die-with-parent","--new-session","--clearenv",*runtime_binds,"--dir","/run","--ro-bind",str(self.
|
|
702
|
+
argv = [str(bwrap),"--unshare-all","--die-with-parent","--new-session","--clearenv",*runtime_binds,"--dir","/run","--dir","/run/phase-loop-broker","--ro-bind",str(self.path),"/run/phase-loop-broker/intended-inference.sock","--ro-bind",str(self.staged_dir),"/run/phase-loop-review","--tmpfs","/tmp","--proc","/proc","--dev","/dev","--setenv","PATH","/usr/bin","--setenv","PYTHONNOUSERSITE","1","--setenv","PYTHONDONTWRITEBYTECODE","1",str(python),"-I","-S","-c",code]
|
|
700
703
|
error: list[BaseException] = []
|
|
701
704
|
child: list[tuple[subprocess.Popen[bytes], int]] = []
|
|
702
705
|
def serve() -> None:
|
|
@@ -882,18 +885,18 @@ def _staged_tree_digest(canonical_repo_authority: Path | str | None) -> str | No
|
|
|
882
885
|
authorization that permits NO staged tree rather than one asserting a digest
|
|
883
886
|
it could not compute.
|
|
884
887
|
"""
|
|
885
|
-
from ..review_stage import review_tree_manifest_sha256
|
|
888
|
+
from ..review_stage import host_git, review_tree_manifest_sha256
|
|
886
889
|
|
|
887
890
|
# Normalize to the SAME git toplevel `_canonical_review_repo_authority` resolves
|
|
888
891
|
# at spawn. Digesting an unnormalized path would bind a different tree than the
|
|
889
892
|
# one actually staged, and the mismatch would only surface as a refusal at launch.
|
|
890
893
|
candidate = Path(canonical_repo_authority) if canonical_repo_authority is not None else Path.cwd()
|
|
891
894
|
try:
|
|
892
|
-
root =
|
|
893
|
-
|
|
894
|
-
text=True, stderr=subprocess.DEVNULL, timeout=3,
|
|
895
|
-
).strip()
|
|
896
|
-
except (OSError, subprocess.SubprocessError):
|
|
895
|
+
root = host_git(
|
|
896
|
+
candidate, "rev-parse", "--show-toplevel", check=True,
|
|
897
|
+
text=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, timeout=3,
|
|
898
|
+
).stdout.strip()
|
|
899
|
+
except (OSError, ValueError, subprocess.SubprocessError):
|
|
897
900
|
return None
|
|
898
901
|
if not root:
|
|
899
902
|
return None
|
|
@@ -912,16 +915,18 @@ def _staged_tree_digest(canonical_repo_authority: Path | str | None) -> str | No
|
|
|
912
915
|
|
|
913
916
|
|
|
914
917
|
def _canonical_repo_digest(canonical_repo_authority: Path | str | None) -> str:
|
|
918
|
+
from ..review_stage import host_git
|
|
919
|
+
|
|
915
920
|
candidate = Path(canonical_repo_authority) if canonical_repo_authority is not None else Path.cwd()
|
|
916
921
|
try:
|
|
917
|
-
root =
|
|
918
|
-
|
|
922
|
+
root = host_git(
|
|
923
|
+
candidate, "rev-parse", "--show-toplevel", check=True,
|
|
919
924
|
text=True,
|
|
925
|
+
stdout=subprocess.PIPE,
|
|
920
926
|
stderr=subprocess.DEVNULL,
|
|
921
927
|
timeout=3,
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
except (OSError, subprocess.SubprocessError):
|
|
928
|
+
).stdout.strip()
|
|
929
|
+
except (OSError, ValueError, subprocess.SubprocessError):
|
|
925
930
|
raise ValueError("HARDEN review has no canonical repository authority") from None
|
|
926
931
|
if not root:
|
|
927
932
|
raise ValueError("HARDEN review has no canonical repository authority")
|
|
@@ -88,13 +88,13 @@ def _uses_production_composition_probe(
|
|
|
88
88
|
)
|
|
89
89
|
|
|
90
90
|
# Ideal per-vendor seat, in deterministic composition order. Each vendor runs at
|
|
91
|
-
#
|
|
91
|
+
# the panel default effort with a distinct primary lens.
|
|
92
92
|
_VENDOR_ORDER: tuple[str, ...] = ("grok", "claude", "codex", "gemini")
|
|
93
93
|
_VENDOR_SEAT: dict[str, dict[str, str]] = {
|
|
94
|
-
"grok": {"model": "grok-4.7", "harness": "grok", "effort": "
|
|
95
|
-
"claude": {"model": "claude-opus-5-5", "harness": "claude", "effort": "
|
|
96
|
-
"codex": {"model": "gpt-6-astra", "harness": "codex", "effort": "
|
|
97
|
-
"gemini": {"model": "gemini-3.8-flash", "harness": "gemini", "effort": "
|
|
94
|
+
"grok": {"model": "grok-4.7", "harness": "grok", "effort": "high", "lens": "adversarial"},
|
|
95
|
+
"claude": {"model": "claude-opus-5-5", "harness": "claude", "effort": "high", "lens": "correctness"},
|
|
96
|
+
"codex": {"model": "gpt-6-astra", "harness": "codex", "effort": "high", "lens": "red-team"},
|
|
97
|
+
"gemini": {"model": "gemini-3.8-flash", "harness": "gemini", "effort": "medium", "lens": "alternative-approach"},
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
# Distinct lenses the backfill cycles through (each vendor's primary lens is drawn
|
|
@@ -31,6 +31,7 @@ from collections.abc import Mapping
|
|
|
31
31
|
from dataclasses import dataclass
|
|
32
32
|
from pathlib import Path
|
|
33
33
|
import re
|
|
34
|
+
import subprocess
|
|
34
35
|
from typing import Any, Callable
|
|
35
36
|
|
|
36
37
|
try: # Python 3.11+
|
|
@@ -311,6 +312,7 @@ def load_president_ladder(
|
|
|
311
312
|
*,
|
|
312
313
|
env: Mapping[str, str] | None = None,
|
|
313
314
|
path: Path | None = None,
|
|
315
|
+
review_base: bool = False,
|
|
314
316
|
) -> tuple[str, ...]:
|
|
315
317
|
"""The effective president fallback order, first rung first.
|
|
316
318
|
|
|
@@ -331,7 +333,22 @@ def load_president_ladder(
|
|
|
331
333
|
ladder = _parse_president(user, str(user_path)) or ladder
|
|
332
334
|
if repo_dir is not None:
|
|
333
335
|
repo_path = repo_board_config_path(repo_dir)
|
|
334
|
-
|
|
336
|
+
if review_base:
|
|
337
|
+
from ..review_stage import trusted_review_control
|
|
338
|
+
|
|
339
|
+
try:
|
|
340
|
+
content = trusted_review_control(Path(repo_dir), REPO_CONFIG_RELATIVE_PATH)
|
|
341
|
+
repo = tomllib.loads(content.decode("utf-8")) if content is not None else None
|
|
342
|
+
except ValueError as exc:
|
|
343
|
+
if str(exc) != "review_base_unavailable":
|
|
344
|
+
raise BoardConfigError(f"{repo_path} has no readable base configuration") from exc
|
|
345
|
+
# No main commit to read it from: the candidate's own copy is never trusted,
|
|
346
|
+
# so the repository layer is not in force (the user and built-in ladders are).
|
|
347
|
+
repo = None
|
|
348
|
+
except (OSError, UnicodeError, subprocess.SubprocessError) as exc:
|
|
349
|
+
raise BoardConfigError(f"{repo_path} has no readable base configuration") from exc
|
|
350
|
+
else:
|
|
351
|
+
repo = _load_toml(repo_path)
|
|
335
352
|
if repo is not None:
|
|
336
353
|
_reject_unknown(repo.keys(), _KNOWN_REPO_TOP_KEYS, str(repo_path))
|
|
337
354
|
ladder = _parse_president(repo, str(repo_path)) or ladder
|
|
@@ -18,8 +18,8 @@ default_board = "default"
|
|
|
18
18
|
# [agy]
|
|
19
19
|
# self_qualification = false
|
|
20
20
|
|
|
21
|
-
#
|
|
22
|
-
# Its three seats, in panel-leg order, render to
|
|
21
|
+
# This explicit example overrides the built-in default board, keeping higher effort.
|
|
22
|
+
# Its three seats, in panel-leg order, render to these CLI invocations:
|
|
23
23
|
# codex gpt-6-astra effort=max -> -c model_reasoning_effort=xhigh
|
|
24
24
|
# gemini "Gemini 3.1 Pro" effort=high -> model "Gemini 3.1 Pro (High)"
|
|
25
25
|
# claude claude-sonnet-5 effort=max -> --effort max
|