phase-loop-runtime 0.7.0__tar.gz → 0.7.1__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.0 → phase_loop_runtime-0.7.1}/MANIFEST.in +1 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/pyproject.toml +2 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/cli.py +172 -18
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_validators.py +80 -1
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +29 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/discovery.py +12 -7
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/dispatch_lock.py +264 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/doctor.py +116 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/gate_posture.py +46 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/governed_review.py +20 -3
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/handoff.py +95 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/injection.py +18 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/launcher.py +315 -149
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/panel_invoker.py +153 -11
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/plan_manifest.py +114 -14
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/ratification_policy.py +313 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/reconcile.py +70 -15
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/release_guard.py +442 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runner.py +178 -2
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +18 -2
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +18 -2
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +30 -10
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +37 -12
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +14 -5
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +38 -15
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +22 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +22 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +7 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +13 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +2 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +2 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +7 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +13 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +2 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +2 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +7 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +13 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +2 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +2 -1
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/task_message_broker.py +294 -0
- phase_loop_runtime-0.7.1/src/phase_loop_runtime/task_message_broker_client.py +276 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/task_message_resolver.py +180 -39
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/worktree_index.py +70 -2
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/SOURCES.txt +13 -0
- phase_loop_runtime-0.7.1/tests/test_dispatch_lock_reentrancy.py +142 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_doctor_bom.py +7 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_launcher_liveness.py +39 -0
- phase_loop_runtime-0.7.1/tests/test_manifest_per_entry_164.py +243 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_invoker_spawn.py +73 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +63 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_handoff.py +70 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile.py +30 -0
- phase_loop_runtime-0.7.1/tests/test_pushflow.py +294 -0
- phase_loop_runtime-0.7.1/tests/test_ratification_policy.py +280 -0
- phase_loop_runtime-0.7.1/tests/test_release_dispatch_operator_approval_145.py +213 -0
- phase_loop_runtime-0.7.1/tests/test_review_leg_sandbox.py +195 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_status_read_only_62.py +9 -6
- phase_loop_runtime-0.7.1/tests/test_task_message_broker.py +329 -0
- phase_loop_runtime-0.7.1/tests/test_task_message_broker_cli.py +529 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_task_message_resolver.py +199 -8
- phase_loop_runtime-0.7.1/tests/test_unattended_release.py +188 -0
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/dispatch_lock.py +0 -167
- phase_loop_runtime-0.7.0/src/phase_loop_runtime/release_guard.py +0 -180
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/setup.cfg +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/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.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/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.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/composition.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/__init__.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/executor_availability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_cli_legacy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_composition.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_advisor_twin_alias_legacy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_autosel.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_certificate_tier.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_conformance_golden.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_discovery_hygiene_legacy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execgov.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execreg_launch_registry.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_executor_availability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_git_grounded_projection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_grokexec.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_launchspec_golden.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_leg_liveness_monitor.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_model_id_source_guard.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_advisory.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_advisory_cli.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_advisory_fixtures.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_authority_boundary.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_contract_drift.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_contract_imports.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_contract_pin.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_core_api.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_provenance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_ci.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_cli.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_output.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_real_runtime.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_redaction.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_release_surface.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_schema_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_outside_agent_vectors.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_streaming_verdicts.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_break_glass_rerun.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_proc_cpu.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_prune_merged_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_release_pin_autotrack.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_sweep_fleet_worktrees_script.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/tests/test_worktree_index.py +0 -0
|
@@ -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.1"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -111,6 +111,7 @@ phase_loop_runtime = [
|
|
|
111
111
|
"_contract_docs/**",
|
|
112
112
|
"_test_fixtures/**",
|
|
113
113
|
"skills_bundle/**",
|
|
114
|
+
"deploy/*.service",
|
|
114
115
|
# advisor_board ships its frozen config-format fixture + contract doc so a
|
|
115
116
|
# pinned install resolves them via importlib.resources (ABDFREEZE).
|
|
116
117
|
"advisor_board/fixtures/*.toml",
|
|
@@ -254,7 +254,13 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
254
254
|
parser.add_argument("--quiet-warning-seconds", type=int, default=600)
|
|
255
255
|
parser.add_argument("--quiet-blocker-seconds", type=int, default=1800)
|
|
256
256
|
parser.add_argument("--no-heartbeat", action="store_true")
|
|
257
|
-
|
|
257
|
+
# PUSHFLOW: SUPPRESS (not default="manual") so an unset closeout mode leaves NO
|
|
258
|
+
# attribute — `_resolve_run_closeout_mode` then applies the command-aware default
|
|
259
|
+
# (push for the outer run loop, manual elsewhere). A value passed in THIS
|
|
260
|
+
# before-subcommand position survives the subcommand parse (the run/resume/dry-run
|
|
261
|
+
# subparser also uses SUPPRESS), so an explicit `--closeout-mode` wins in BOTH
|
|
262
|
+
# option positions (was clobbered to the subparser default before).
|
|
263
|
+
parser.add_argument("--closeout-mode", choices=CLOSEOUT_MODES, default=argparse.SUPPRESS)
|
|
258
264
|
parser.add_argument("--work-unit-mode", action="store_true")
|
|
259
265
|
parser.add_argument("--rotate-executors")
|
|
260
266
|
parser.add_argument("--rotation-mode", choices=("phase", "work_unit"), default="phase")
|
|
@@ -285,7 +291,24 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
285
291
|
sub.add_argument("--mode", help="The execution mode: execute, repair, or review.")
|
|
286
292
|
_add_common_subparser_args(sub, name=name)
|
|
287
293
|
if name in {"run", "resume", "dry-run"}:
|
|
288
|
-
|
|
294
|
+
# PUSHFLOW: closeout pushes by DEFAULT for run/resume/dry-run (the outer
|
|
295
|
+
# orchestration loop). An explicit --closeout-mode always wins; when none
|
|
296
|
+
# is given the default is `push` (was `manual`), so phase-owned work lands
|
|
297
|
+
# on origin instead of accumulating locally. --no-push restores the prior
|
|
298
|
+
# `manual` default for operators who want to withhold the push. The push
|
|
299
|
+
# itself degrades gracefully with no push remote (recorded as push_refused
|
|
300
|
+
# by the runner, never an error). See _resolve_run_closeout_mode.
|
|
301
|
+
# SUPPRESS so an unset value does NOT overwrite a before-subcommand
|
|
302
|
+
# `--closeout-mode` with None, and so the absent case falls through to the
|
|
303
|
+
# command-aware push default in _resolve_run_closeout_mode.
|
|
304
|
+
sub.add_argument("--closeout-mode", choices=CLOSEOUT_MODES, default=argparse.SUPPRESS)
|
|
305
|
+
sub.add_argument(
|
|
306
|
+
"--no-push",
|
|
307
|
+
action="store_true",
|
|
308
|
+
help="Suppress the push-by-default closeout: fall back to manual "
|
|
309
|
+
"closeout (the prior default) instead of pushing phase-owned work to "
|
|
310
|
+
"origin. Ignored when --closeout-mode is given explicitly.",
|
|
311
|
+
)
|
|
289
312
|
sub.add_argument(
|
|
290
313
|
"--governed",
|
|
291
314
|
action="store_true",
|
|
@@ -346,6 +369,13 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
346
369
|
)
|
|
347
370
|
sub.add_argument("--path", help="Report freshness holders for a single repo-relative path. Omit to report every path touched by an active worktree.")
|
|
348
371
|
sub.add_argument("--base", help="Diff base ref (default: origin/<default-branch>, falling back to origin/main).")
|
|
372
|
+
sub.add_argument(
|
|
373
|
+
"--fail-on-ahead",
|
|
374
|
+
action="store_true",
|
|
375
|
+
help="PUSHFLOW opt-in soft-block: exit non-zero when any worktree is more than "
|
|
376
|
+
"AHEAD_WARN_THRESHOLD commits ahead of the base ref (unpushed local divergence). "
|
|
377
|
+
"Default is WARN-only; never human_required.",
|
|
378
|
+
)
|
|
349
379
|
if name == "consiliency-lease":
|
|
350
380
|
sub.description = (
|
|
351
381
|
"CS-0.10c: local-file LeaseStore -- soft, TTL+heartbeat path-set leases so parallel "
|
|
@@ -755,18 +785,37 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
755
785
|
name,
|
|
756
786
|
help="Probe or resolve an exact authenticated Codex task-message source.",
|
|
757
787
|
)
|
|
758
|
-
task_message_sub.
|
|
788
|
+
task_message_transport = task_message_sub.add_mutually_exclusive_group(required=True)
|
|
789
|
+
task_message_transport.add_argument("--endpoint", help="Authenticated Codex app-server ws:// or wss:// endpoint.")
|
|
790
|
+
task_message_transport.add_argument("--broker-url", help="Authenticated task-message broker HTTPS endpoint.")
|
|
791
|
+
task_message_transport.add_argument(
|
|
792
|
+
"--control-socket",
|
|
793
|
+
help="Absolute local managed app-server control socket; use only on the source host over an independently authenticated channel.",
|
|
794
|
+
)
|
|
759
795
|
task_message_sub.add_argument("--authority", required=True, help="Pinned source authority identity.")
|
|
760
796
|
task_message_sub.add_argument(
|
|
761
797
|
"--token-env",
|
|
762
|
-
required=
|
|
798
|
+
required=False,
|
|
763
799
|
help="Environment variable containing the app-server bearer token; the token is never printed.",
|
|
764
800
|
)
|
|
765
801
|
task_message_sub.add_argument("--timeout-seconds", type=float, default=10.0)
|
|
802
|
+
task_message_sub.add_argument("--heartbeat-timeout-seconds", type=float, default=15.0)
|
|
766
803
|
if name == "task-message-resolve":
|
|
767
804
|
task_message_sub.add_argument("--thread-id", required=True)
|
|
768
805
|
task_message_sub.add_argument("--message-id", required=True)
|
|
769
806
|
task_message_sub.add_argument("--max-source-age-seconds", type=int, default=900)
|
|
807
|
+
task_message_broker_sub = subparsers.add_parser(
|
|
808
|
+
"task-message-broker-serve",
|
|
809
|
+
help="Serve the loopback-only authenticated task-message broker.",
|
|
810
|
+
)
|
|
811
|
+
task_message_broker_sub.add_argument("--host", default="127.0.0.1")
|
|
812
|
+
task_message_broker_sub.add_argument("--port", type=int, default=18765)
|
|
813
|
+
task_message_broker_sub.add_argument("--control-socket", required=True)
|
|
814
|
+
task_message_broker_sub.add_argument("--authority", required=True)
|
|
815
|
+
task_message_broker_sub.add_argument("--token-sha256", required=True)
|
|
816
|
+
task_message_broker_sub.add_argument("--agent-harness-sha", required=True)
|
|
817
|
+
task_message_broker_sub.add_argument("--heartbeat-seconds", type=float, default=5.0)
|
|
818
|
+
task_message_broker_sub.add_argument("--timeout-seconds", type=float, default=10.0)
|
|
770
819
|
# DECOUPLE SL-1: dotfiles-domain commands are added here, only when a profile
|
|
771
820
|
# plugin is installed/opted-in. A clean wheel registers none.
|
|
772
821
|
_register_profile_commands(subparsers)
|
|
@@ -812,6 +861,32 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
812
861
|
return 2
|
|
813
862
|
|
|
814
863
|
|
|
864
|
+
def _resolve_run_closeout_mode(args: argparse.Namespace, command: str) -> str:
|
|
865
|
+
"""PUSHFLOW: resolve the effective closeout mode for the outer run loop.
|
|
866
|
+
|
|
867
|
+
Precedence (explicit-wins in EITHER option position, then the flipped default):
|
|
868
|
+
|
|
869
|
+
1. An explicit ``--closeout-mode`` always wins. Both the top-level and the
|
|
870
|
+
``run``/``resume``/``dry-run`` subparser use ``argparse.SUPPRESS``, so the
|
|
871
|
+
attribute exists only when the operator passed it (before OR after the
|
|
872
|
+
subcommand); a value given before the subcommand is no longer clobbered.
|
|
873
|
+
2. Otherwise, for the outer orchestration loop (``run``/``resume``/``dry-run``,
|
|
874
|
+
including the implicit no-subcommand forms) the default flips to ``"push"``
|
|
875
|
+
so phase-owned work lands on origin instead of accumulating unpushed — unless
|
|
876
|
+
``--no-push`` restores ``"manual"``. The runner degrades to ``push_refused``
|
|
877
|
+
when there is no push remote (never an error).
|
|
878
|
+
3. Every other command that reaches ``run_loop`` (``execute``, ``maintain-skills``)
|
|
879
|
+
keeps the prior ``"manual"`` default — the push flip is scoped to the outer
|
|
880
|
+
loop and must never turn an inner ``execute`` leg into a pusher.
|
|
881
|
+
"""
|
|
882
|
+
explicit = getattr(args, "closeout_mode", None)
|
|
883
|
+
if explicit:
|
|
884
|
+
return explicit
|
|
885
|
+
if command in {"run", "resume", "dry-run"}:
|
|
886
|
+
return "manual" if getattr(args, "no_push", False) else "push"
|
|
887
|
+
return "manual"
|
|
888
|
+
|
|
889
|
+
|
|
815
890
|
def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: str) -> int:
|
|
816
891
|
allow_cross_phase_dirty_reason = getattr(args, "allow_cross_phase_dirty", None)
|
|
817
892
|
if allow_cross_phase_dirty_reason is not None:
|
|
@@ -884,6 +959,8 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
884
959
|
return _outside_agent_validate_command(args=args)
|
|
885
960
|
if command in {"task-message-probe", "task-message-resolve"}:
|
|
886
961
|
return _task_message_command(args=args, resolve=command == "task-message-resolve")
|
|
962
|
+
if command == "task-message-broker-serve":
|
|
963
|
+
return _task_message_broker_serve_command(args=args)
|
|
887
964
|
if command == "advisor-board":
|
|
888
965
|
return _advisor_board_command(args=args)
|
|
889
966
|
if command == "docs-audit":
|
|
@@ -918,6 +995,20 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
918
995
|
print(json.dumps(report.to_json(), indent=2))
|
|
919
996
|
else:
|
|
920
997
|
print(worktree_index.render_human(report))
|
|
998
|
+
# PUSHFLOW: opt-in soft-block on unpushed local divergence. WARN-only by
|
|
999
|
+
# default (the count is already in the report/render); --fail-on-ahead makes
|
|
1000
|
+
# it exit non-zero. Never human_required.
|
|
1001
|
+
if getattr(args, "fail_on_ahead", False):
|
|
1002
|
+
over = worktree_index.worktrees_ahead_over_threshold(report)
|
|
1003
|
+
if over:
|
|
1004
|
+
names = ", ".join(f"{wt.branch or wt.path} (+{wt.commits_ahead_of_origin})" for wt in over)
|
|
1005
|
+
print(
|
|
1006
|
+
f"FAIL: {len(over)} worktree(s) more than {worktree_index.AHEAD_WARN_THRESHOLD} "
|
|
1007
|
+
f"commits ahead of {report.base_ref} (unpushed local divergence): {names}",
|
|
1008
|
+
file=sys.stderr,
|
|
1009
|
+
flush=True,
|
|
1010
|
+
)
|
|
1011
|
+
return 1
|
|
921
1012
|
return 0
|
|
922
1013
|
if command == "consiliency-lease":
|
|
923
1014
|
repo_arg = args.repo or "."
|
|
@@ -1221,7 +1312,7 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1221
1312
|
quiet_warning_seconds=args.quiet_warning_seconds or 600,
|
|
1222
1313
|
quiet_blocker_seconds=args.quiet_blocker_seconds or 1800,
|
|
1223
1314
|
heartbeat_enabled=not bool(args.no_heartbeat),
|
|
1224
|
-
closeout_mode=args
|
|
1315
|
+
closeout_mode=_resolve_run_closeout_mode(args, command),
|
|
1225
1316
|
enable_tier_3=bool(getattr(args, "enable_tier_3", False)),
|
|
1226
1317
|
tier_3_budget=3 if getattr(args, "tier_3_budget", 3) is None else getattr(args, "tier_3_budget", 3),
|
|
1227
1318
|
command_adapter_name=args.command_name,
|
|
@@ -1453,8 +1544,7 @@ def _outside_agent_validate_command(args: argparse.Namespace) -> int:
|
|
|
1453
1544
|
def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
|
|
1454
1545
|
from .task_message_resolver import CodexAppServerTaskMessageResolver, TaskMessageResolverError
|
|
1455
1546
|
|
|
1456
|
-
|
|
1457
|
-
if not token:
|
|
1547
|
+
if args.control_socket and args.token_env:
|
|
1458
1548
|
error = TaskMessageResolverError(
|
|
1459
1549
|
"attestation_invalid",
|
|
1460
1550
|
authority=args.authority,
|
|
@@ -1463,19 +1553,50 @@ def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
|
|
|
1463
1553
|
)
|
|
1464
1554
|
print(json.dumps(error.metadata(), indent=2, sort_keys=True))
|
|
1465
1555
|
return 2
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1556
|
+
remote_transport = bool(args.endpoint or args.broker_url)
|
|
1557
|
+
token = os.environ.get(args.token_env, "") if remote_transport and args.token_env else ""
|
|
1558
|
+
if remote_transport and not token:
|
|
1559
|
+
error = TaskMessageResolverError(
|
|
1560
|
+
"attestation_invalid",
|
|
1470
1561
|
authority=args.authority,
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
)
|
|
1474
|
-
payload = (
|
|
1475
|
-
resolver.resolve(thread_id=args.thread_id, message_id=args.message_id).payload()
|
|
1476
|
-
if resolve
|
|
1477
|
-
else resolver.probe()
|
|
1562
|
+
thread_id=getattr(args, "thread_id", None),
|
|
1563
|
+
message_id=getattr(args, "message_id", None),
|
|
1478
1564
|
)
|
|
1565
|
+
print(json.dumps(error.metadata(), indent=2, sort_keys=True))
|
|
1566
|
+
return 2
|
|
1567
|
+
try:
|
|
1568
|
+
if args.broker_url:
|
|
1569
|
+
from .task_message_broker_client import TaskMessageBrokerClient
|
|
1570
|
+
|
|
1571
|
+
broker = TaskMessageBrokerClient(
|
|
1572
|
+
broker_url=args.broker_url,
|
|
1573
|
+
bearer_token=token,
|
|
1574
|
+
authority=args.authority,
|
|
1575
|
+
heartbeat_timeout_seconds=args.heartbeat_timeout_seconds,
|
|
1576
|
+
)
|
|
1577
|
+
payload = (
|
|
1578
|
+
broker.resolve(
|
|
1579
|
+
thread_id=args.thread_id,
|
|
1580
|
+
message_id=args.message_id,
|
|
1581
|
+
max_source_age_seconds=args.max_source_age_seconds,
|
|
1582
|
+
)
|
|
1583
|
+
if resolve
|
|
1584
|
+
else broker.probe()
|
|
1585
|
+
)
|
|
1586
|
+
else:
|
|
1587
|
+
resolver = CodexAppServerTaskMessageResolver(
|
|
1588
|
+
endpoint=args.endpoint,
|
|
1589
|
+
bearer_token=token or None,
|
|
1590
|
+
control_socket=args.control_socket,
|
|
1591
|
+
authority=args.authority,
|
|
1592
|
+
max_source_age_seconds=getattr(args, "max_source_age_seconds", 900),
|
|
1593
|
+
timeout_seconds=args.timeout_seconds,
|
|
1594
|
+
)
|
|
1595
|
+
payload = (
|
|
1596
|
+
resolver.resolve(thread_id=args.thread_id, message_id=args.message_id).payload()
|
|
1597
|
+
if resolve
|
|
1598
|
+
else resolver.probe()
|
|
1599
|
+
)
|
|
1479
1600
|
except ValueError:
|
|
1480
1601
|
error = TaskMessageResolverError(
|
|
1481
1602
|
"attestation_invalid",
|
|
@@ -1492,6 +1613,39 @@ def _task_message_command(args: argparse.Namespace, *, resolve: bool) -> int:
|
|
|
1492
1613
|
return 0
|
|
1493
1614
|
|
|
1494
1615
|
|
|
1616
|
+
def _task_message_broker_serve_command(args: argparse.Namespace) -> int:
|
|
1617
|
+
from .task_message_broker import BrokerConfig, TaskMessageBroker, build_server, verified_installed_agent_harness_sha
|
|
1618
|
+
from .task_message_resolver import CodexAppServerTaskMessageResolver
|
|
1619
|
+
|
|
1620
|
+
try:
|
|
1621
|
+
agent_harness_sha = verified_installed_agent_harness_sha(args.agent_harness_sha)
|
|
1622
|
+
config = BrokerConfig(
|
|
1623
|
+
authority=args.authority,
|
|
1624
|
+
token_sha256=args.token_sha256,
|
|
1625
|
+
agent_harness_sha=agent_harness_sha,
|
|
1626
|
+
heartbeat_seconds=args.heartbeat_seconds,
|
|
1627
|
+
)
|
|
1628
|
+
|
|
1629
|
+
def resolver_factory(max_source_age_seconds: int) -> CodexAppServerTaskMessageResolver:
|
|
1630
|
+
return CodexAppServerTaskMessageResolver(
|
|
1631
|
+
control_socket=args.control_socket,
|
|
1632
|
+
authority=args.authority,
|
|
1633
|
+
max_source_age_seconds=max_source_age_seconds,
|
|
1634
|
+
timeout_seconds=args.timeout_seconds,
|
|
1635
|
+
)
|
|
1636
|
+
|
|
1637
|
+
server = build_server(args.host, args.port, TaskMessageBroker(config, resolver_factory))
|
|
1638
|
+
except ValueError:
|
|
1639
|
+
return 2
|
|
1640
|
+
try:
|
|
1641
|
+
server.serve_forever()
|
|
1642
|
+
except KeyboardInterrupt:
|
|
1643
|
+
return 130
|
|
1644
|
+
finally:
|
|
1645
|
+
server.server_close()
|
|
1646
|
+
return 0
|
|
1647
|
+
|
|
1648
|
+
|
|
1495
1649
|
def _parse_lane_ir_override(parser: argparse.ArgumentParser, args: argparse.Namespace, command: str) -> tuple[str, ...]:
|
|
1496
1650
|
raw = getattr(args, "allow_lane_ir_override", None)
|
|
1497
1651
|
if raw is None:
|
{phase_loop_runtime-0.7.0 → phase_loop_runtime-0.7.1}/src/phase_loop_runtime/closeout_validators.py
RENAMED
|
@@ -36,12 +36,24 @@ REVIEW_MODE_ENV = "PHASE_LOOP_REVIEW"
|
|
|
36
36
|
|
|
37
37
|
@dataclass(frozen=True)
|
|
38
38
|
class ReviewFinding:
|
|
39
|
-
"""A single review-gate observation about a closeout.
|
|
39
|
+
"""A single review-gate observation about a closeout.
|
|
40
|
+
|
|
41
|
+
``reason`` is the SHORT gate-generated summary (``panel leg gemini raised a
|
|
42
|
+
blocking concern``). ``body`` (issue #80) is the ACTUAL panel finding text — the
|
|
43
|
+
concrete review a non-human repair reads to know WHAT to fix; the runner's
|
|
44
|
+
panel scratch dir is torn down after the leg completes, so if the body is not
|
|
45
|
+
carried here it is lost. ``reviewed_sha`` (issue #88) binds the verdict to the
|
|
46
|
+
exact reviewed commit so a consumer can reject a verdict computed against a
|
|
47
|
+
different head (SHA-bound agent-review-gate). Both are optional so every
|
|
48
|
+
existing caller and persisted finding stay byte-for-byte unchanged.
|
|
49
|
+
"""
|
|
40
50
|
|
|
41
51
|
code: str
|
|
42
52
|
reason: str
|
|
43
53
|
severity: ReviewSeverity = "warn"
|
|
44
54
|
blocker_class: str | None = None
|
|
55
|
+
body: str | None = None
|
|
56
|
+
reviewed_sha: str | None = None
|
|
45
57
|
|
|
46
58
|
def __post_init__(self) -> None:
|
|
47
59
|
if self.severity not in REVIEW_SEVERITIES:
|
|
@@ -56,6 +68,13 @@ class ReviewFinding:
|
|
|
56
68
|
}
|
|
57
69
|
if self.blocker_class is not None:
|
|
58
70
|
payload["blocker_class"] = self.blocker_class
|
|
71
|
+
# #80: persist the actual finding body so it survives the panel-scratch
|
|
72
|
+
# teardown and reaches durable state/handoff/ledger artifacts.
|
|
73
|
+
if self.body is not None:
|
|
74
|
+
payload["body"] = self.body
|
|
75
|
+
# #88: persist the reviewed commit the verdict is bound to.
|
|
76
|
+
if self.reviewed_sha is not None:
|
|
77
|
+
payload["reviewed_sha"] = self.reviewed_sha
|
|
59
78
|
return payload
|
|
60
79
|
|
|
61
80
|
|
|
@@ -177,6 +196,66 @@ def apply_review_findings(
|
|
|
177
196
|
}
|
|
178
197
|
|
|
179
198
|
|
|
199
|
+
def verdict_binds_to(finding: ReviewFinding, head_sha: str | None) -> bool:
|
|
200
|
+
"""#88 SHA-bound agent-review-gate: True iff ``finding``'s verdict was computed
|
|
201
|
+
against ``head_sha``.
|
|
202
|
+
|
|
203
|
+
A finding with no recorded ``reviewed_sha`` is UNBOUND — it cannot vouch for any
|
|
204
|
+
specific commit, so it never binds (fail-closed). A ``head_sha`` of ``None``
|
|
205
|
+
(unknown head) likewise cannot be vouched for. Binding is an exact match: a
|
|
206
|
+
verdict reviewed at an earlier head must NOT be trusted for a newer head."""
|
|
207
|
+
if not finding.reviewed_sha or not head_sha:
|
|
208
|
+
return False
|
|
209
|
+
return finding.reviewed_sha == head_sha
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def ratification_findings(decision) -> tuple[ReviewFinding, ...]:
|
|
213
|
+
"""Translate a ``ratification_policy.RatificationDecision`` into closeout findings
|
|
214
|
+
(the posture wiring for IF-0-POLICY-1).
|
|
215
|
+
|
|
216
|
+
* ``escalate`` -> a single ``block`` finding with ``blocker_class=
|
|
217
|
+
"review_gate_block"`` — a NON-human, agent-recoverable hold (never
|
|
218
|
+
``human_required``), carrying the actionable shortfall detail as ``body`` and
|
|
219
|
+
the reviewed SHA (#88 binding).
|
|
220
|
+
* ``proceed_degraded`` -> a single ``warn`` finding recording the durable audit
|
|
221
|
+
trail that a degraded board was knowingly accepted (the loop continues).
|
|
222
|
+
* ``ratified`` -> no finding (a clean pass is non-gating; the caller persists
|
|
223
|
+
``decision.to_audit()`` separately if it wants the positive record).
|
|
224
|
+
|
|
225
|
+
Import is function-local so this module has no hard dependency on
|
|
226
|
+
``ratification_policy`` (and there is no import cycle).
|
|
227
|
+
"""
|
|
228
|
+
from .ratification_policy import ESCALATE, PROCEED_DEGRADED, shortfall_detail
|
|
229
|
+
|
|
230
|
+
detail = shortfall_detail(decision)
|
|
231
|
+
reviewed_sha = decision.facts.reviewed_sha
|
|
232
|
+
if decision.status == ESCALATE:
|
|
233
|
+
return (
|
|
234
|
+
ReviewFinding(
|
|
235
|
+
code=f"ratification_shortfall_{decision.gate or 'gate'}",
|
|
236
|
+
reason=f"ratification policy not met for {decision.gate or 'gate'}: {detail}",
|
|
237
|
+
severity="block",
|
|
238
|
+
blocker_class="review_gate_block",
|
|
239
|
+
body=detail,
|
|
240
|
+
reviewed_sha=reviewed_sha,
|
|
241
|
+
),
|
|
242
|
+
)
|
|
243
|
+
if decision.status == PROCEED_DEGRADED:
|
|
244
|
+
return (
|
|
245
|
+
ReviewFinding(
|
|
246
|
+
code=f"ratification_degraded_{decision.gate or 'gate'}",
|
|
247
|
+
reason=(
|
|
248
|
+
f"ratification proceeded on a degraded board for "
|
|
249
|
+
f"{decision.gate or 'gate'}: {detail}"
|
|
250
|
+
),
|
|
251
|
+
severity="warn",
|
|
252
|
+
body=detail,
|
|
253
|
+
reviewed_sha=reviewed_sha,
|
|
254
|
+
),
|
|
255
|
+
)
|
|
256
|
+
return ()
|
|
257
|
+
|
|
258
|
+
|
|
180
259
|
def load_builtin_closeout_validators() -> None:
|
|
181
260
|
"""Import the built-in validator modules so they self-register.
|
|
182
261
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=Phase-loop task-message source broker
|
|
3
|
+
After=network-online.target
|
|
4
|
+
Wants=network-online.target
|
|
5
|
+
|
|
6
|
+
[Service]
|
|
7
|
+
Type=simple
|
|
8
|
+
EnvironmentFile=%h/.config/phase-loop/task-message-broker.env
|
|
9
|
+
ExecStart=%h/.local/share/phase-loop-task-message-broker/bin/phase-loop task-message-broker-serve --host 127.0.0.1 --port 18765 --control-socket %h/.codex/app-server-control/app-server-control.sock --authority codex-app-server://claw.taile09692.ts.net --token-sha256 ${TASK_MESSAGE_TOKEN_SHA256} --agent-harness-sha ${AGENT_HARNESS_SHA}
|
|
10
|
+
Restart=on-failure
|
|
11
|
+
RestartSec=2
|
|
12
|
+
UMask=0077
|
|
13
|
+
NoNewPrivileges=yes
|
|
14
|
+
PrivateTmp=yes
|
|
15
|
+
ProtectHome=tmpfs
|
|
16
|
+
BindReadOnlyPaths=%h/.local/share/phase-loop-task-message-broker
|
|
17
|
+
BindReadOnlyPaths=%h/.codex/app-server-control/app-server-control.sock
|
|
18
|
+
ProtectSystem=strict
|
|
19
|
+
ProtectControlGroups=yes
|
|
20
|
+
ProtectKernelTunables=yes
|
|
21
|
+
LockPersonality=yes
|
|
22
|
+
MemoryDenyWriteExecute=yes
|
|
23
|
+
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
|
24
|
+
RestrictRealtime=yes
|
|
25
|
+
RestrictSUIDSGID=yes
|
|
26
|
+
SystemCallArchitectures=native
|
|
27
|
+
|
|
28
|
+
[Install]
|
|
29
|
+
WantedBy=default.target
|
|
@@ -1114,18 +1114,23 @@ def _discovery_allow_completed() -> bool:
|
|
|
1114
1114
|
|
|
1115
1115
|
|
|
1116
1116
|
def _phase_manifest_entries(repo: Path) -> tuple[object, ...]:
|
|
1117
|
+
# agent-harness#164 (IF-0-MANIFEST-1): consume the manifest PER-ENTRY. A
|
|
1118
|
+
# structural failure (unparseable / bad schema / plans-not-array) hides the
|
|
1119
|
+
# whole manifest, but a single stale/renamed/missing/parse-hostile entry is
|
|
1120
|
+
# skipped (treated orphaned) instead of silently degrading ALL entries to
|
|
1121
|
+
# regex discovery. `valid_phase_entries` materializes only the valid rows,
|
|
1122
|
+
# tolerating an unparseable sibling; the skipped entry's operator signal
|
|
1123
|
+
# (manifest_plan_file_missing) is emitted independently by
|
|
1124
|
+
# reconcile._reconcile_plan_manifest.
|
|
1117
1125
|
try:
|
|
1118
|
-
from .plan_manifest import
|
|
1126
|
+
from .plan_manifest import valid_phase_entries
|
|
1119
1127
|
except Exception:
|
|
1120
1128
|
return ()
|
|
1121
1129
|
manifest_path = repo / "plans" / "manifest.json"
|
|
1122
|
-
if manifest_path.exists()
|
|
1130
|
+
if not manifest_path.exists():
|
|
1123
1131
|
return ()
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
except Exception:
|
|
1127
|
-
return ()
|
|
1128
|
-
return tuple(entry for entry in manifest.plans if entry.type == "phase")
|
|
1132
|
+
entries = valid_phase_entries(manifest_path)
|
|
1133
|
+
return entries if entries is not None else ()
|
|
1129
1134
|
|
|
1130
1135
|
|
|
1131
1136
|
def plan_is_stale(plan: Path, roadmap: Path) -> bool:
|