phase-loop-runtime 0.4.0__tar.gz → 0.5.0__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.4.0 → phase_loop_runtime-0.5.0}/PKG-INFO +1 -1
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/pyproject.toml +1 -1
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/__init__.py +1 -1
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/cli.py +98 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/__init__.py +79 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_advisory.py +208 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_core.py +118 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_imports.py +161 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_pin.py +33 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_provenance.py +146 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_real.py +220 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_real_output.py +57 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_redaction.py +123 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_schema.py +123 -0
- phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_vectors.py +173 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/SOURCES.txt +28 -1
- phase_loop_runtime-0.5.0/tests/test_outside_agent_advisory.py +101 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_advisory_cli.py +98 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_advisory_fixtures.py +35 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_authority_boundary.py +89 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_contract_drift.py +21 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_contract_imports.py +93 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_contract_pin.py +19 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_core_api.py +81 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_provenance.py +73 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_real_ci.py +78 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_real_cli.py +144 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_real_output.py +83 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_real_runtime.py +129 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_redaction.py +93 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_release_surface.py +207 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_schema_validation.py +65 -0
- phase_loop_runtime-0.5.0/tests/test_outside_agent_vectors.py +77 -0
- phase_loop_runtime-0.4.0/src/phase_loop_runtime/conformance.py +0 -94
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/MANIFEST.in +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/protocol/protocol.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/setup.cfg +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/adoption_bundle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/config.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/events.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_modular.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/broker.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/build_bundle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/capability_registry.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/classifier.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/claude_agent_view.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_classifier.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_validators.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_gates.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_layout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/discovery.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/dispatch_lock.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/docs_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/docs_freshness.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/docs_surfaces.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/events.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/events_migration.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/evidence_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/fleet_map.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/fleet_metrics.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/gate_posture.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/git_discipline.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/git_ops.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/git_topology.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/governed_bundle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/governed_premerge.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/governed_review.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/handoff.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/handoff_path.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/injection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/install_status.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/lane_scheduler.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/launcher.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/lease_store.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/maintenance.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/models.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/observability.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/panel_invoker.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/plan_ir.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/plan_manifest.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/planner_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/profiles.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/prompts.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/provenance.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/publishing.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/py.typed +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/reconcile.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/redaction.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/reflection_sync.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/release_guard.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/render.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/repo_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/review_summary.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/roadmap_lint.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/route_log.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runtime_paths.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runtime_projection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runtime_resources.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/schema_export.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_install.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_inventory.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_paths.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/state_degradation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/state_ops.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/train_ledger.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/train_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/train_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/verification_evidence.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/worker_pool.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/worktree_index.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_advisory_mode.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_alias_install.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_backcompat.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_backing_homebrew.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_backing_omnigent.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_concurrency.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_config.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_golden.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_ingestion.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_integration.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_matrix.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_observability.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_presets.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_registries.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_resolver.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_schema.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_agent_runtime_provider_cs08.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_branchgov_preflight.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_cli_train_status_45.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_break_glass_cli.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_classifier.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_convergence_fixes.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_exception_vocab.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_validator_hook.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_verification_gate.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_codex_effort_max_clamp_49.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_dual_layout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_gates.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_ingest.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_scaffold.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_coordinator_wave_loop.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dispatch_lock_helper.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dispatch_lock_same_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_doc_delta_validator.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_docs_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_docs_freshness.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dotfiles_tree.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_execute_phase_handoff_mode.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_execution_policy_tiering.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_export_schema.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_fleet_map.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_fleet_metrics.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_fleet_metrics_export.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_gate_a_wheel_isolation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_gate_posture.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_git_discipline.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_disjointness_model_first.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_e2e.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_gate_crfixes.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_planning_gate.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_premerge.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_premerge_live.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_review.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_hotfix_lane.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_injection_skill_failloud.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_lane_ir_override.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_launcher_liveness.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_lease_store.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_lease_store_conformance.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_ledger_serialization.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_model_class_policy.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_observability_alerting.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_advisory_mode_63.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_context_refs_114.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_invoker.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_invoker_spawn.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_invoker_timeout_argv.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_leg_auth_preflight_64.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_per_leg_model_66.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_tui_eof_48.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_verdict_summary.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_parallel_dispatch_backcompat.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_parallel_dispatch_cli.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_adoption_bundle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_dependency.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_end_to_end.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_injection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_modular.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_schema_export.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_schema_source.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_branch_divergence_event.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_build_bundle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_classifier.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_security.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_route_selection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_cli.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_cli_plugin_load.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_control_only.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_event.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_hardening.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_schema.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_collaborator_citation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_collaborator_docs.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_collaborator_rollback.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_discovery.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_docs.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dotfiles_sources.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_portal.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_regenesis.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_drift_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dry_run_then_run.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_events_migration.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_execution_policy.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_executor_degradation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_full_phase_mode.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_handoff.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_handoff_migration.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_init.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_injection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_install_status.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_harnesses.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_ir.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_scheduler.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_launcher.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_ledger_debug.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_ledger_dedup.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_live_adapters.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_maintenance.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_metrics.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_migration_regressions.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_mixedrun_observability.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_models.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_native_flags.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pi_executor.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_bridge.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_bundle.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_closeout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_freshness.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_mode.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_plan_doc_skip.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_plan_manifest.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_planner_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_policy.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_protocol_contract.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_provenance.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reducers.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_roadmap_amendments.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_roadmap_validate.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_rotation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_boundary.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_decouple.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_package_data.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_projection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_schema_flow.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_contract.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_execute_contract.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_install.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_planner_contract.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_smoke_blockers.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_smoke_reentry.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v22_e2e.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v22_principles.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_found_contracts.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_reconcile.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_sched.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_schedharden.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_wave_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_work_unit_observability.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_work_unit_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_work_unit_state.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_worktrees.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_owned_dirty_relaxation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_worktree_executor.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_flag.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_markers.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pkg_layout_freeze.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_plan_ir_iter_waves.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_preflight_verification.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_publishing.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_reconcile_manifest_dedup_46.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_reconcile_verification_log.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_reflection_sync.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_repo_validation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_review_summary.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_route_log.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_route_policy_conformance.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_routing_invariants.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_runtime_state_mirror_agreement.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_sibling_matcher_patterns.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_bundle_pinned.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_install_body_expansion.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_plan_manifest_write.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_sources_seam.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skills_bundle_drift.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skills_canon_parity.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skills_src_claude_literal_lint.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_spec_conformance_gate.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_sync_skills_apply_failloud.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_e2e.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_invariants.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_merge.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_order_only_deps_47.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_roadmap.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_runner.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_v34_parallel_dispatch_soak.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_validate_plan_doc_docs_lane.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_verification_evidence.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_verification_evidence_validator.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_visual_evidence_validator.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_workerpool_failure_isolation.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_workerpool_parallel.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_workerpool_worktree_alloc.py +0 -0
- {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/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
|
+
version = "0.5.0"
|
|
8
8
|
description = "Harness-neutral phase-loop orchestration runtime and CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -670,6 +670,28 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
670
670
|
action="store_true",
|
|
671
671
|
help="Emit the ledger state as JSON.",
|
|
672
672
|
)
|
|
673
|
+
outside_agent_sub = subparsers.add_parser(
|
|
674
|
+
"outside-agent-preflight",
|
|
675
|
+
help="Emit advisory metadata-only outside-agent preflight evidence.",
|
|
676
|
+
)
|
|
677
|
+
outside_agent_sub.add_argument("submission_file", metavar="submission-file")
|
|
678
|
+
outside_agent_sub.add_argument("--output", help="Path to write advisory evidence JSON.")
|
|
679
|
+
outside_agent_validate_sub = subparsers.add_parser(
|
|
680
|
+
"outside-agent-validate",
|
|
681
|
+
help="Emit governed-pipeline outside-agent validation verdict JSON.",
|
|
682
|
+
)
|
|
683
|
+
outside_agent_validate_sub.add_argument("submission_file", metavar="submission-file")
|
|
684
|
+
outside_agent_validate_sub.add_argument(
|
|
685
|
+
"--output",
|
|
686
|
+
required=True,
|
|
687
|
+
help="Path to write governed-pipeline validation verdict JSON.",
|
|
688
|
+
)
|
|
689
|
+
outside_agent_validate_sub.add_argument(
|
|
690
|
+
"--submitted-ref",
|
|
691
|
+
action="append",
|
|
692
|
+
default=[],
|
|
693
|
+
help="Repo-relative ref submitted to governed-pipeline; may be repeated.",
|
|
694
|
+
)
|
|
673
695
|
# DECOUPLE SL-1: dotfiles-domain commands are added here, only when a profile
|
|
674
696
|
# plugin is installed/opted-in. A clean wheel registers none.
|
|
675
697
|
_register_profile_commands(subparsers)
|
|
@@ -751,6 +773,10 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
751
773
|
return _run_train_command(parser=parser, args=args)
|
|
752
774
|
if command == "train-status":
|
|
753
775
|
return _run_train_status_command(parser=parser, args=args)
|
|
776
|
+
if command == "outside-agent-preflight":
|
|
777
|
+
return _outside_agent_preflight_command(args=args)
|
|
778
|
+
if command == "outside-agent-validate":
|
|
779
|
+
return _outside_agent_validate_command(args=args)
|
|
754
780
|
if command == "docs-audit":
|
|
755
781
|
from . import docs_audit
|
|
756
782
|
|
|
@@ -1128,6 +1154,78 @@ def _main(parser: argparse.ArgumentParser, args: argparse.Namespace, command: st
|
|
|
1128
1154
|
return _run_returncode(snapshot, results)
|
|
1129
1155
|
|
|
1130
1156
|
|
|
1157
|
+
def _outside_agent_preflight_command(args: argparse.Namespace) -> int:
|
|
1158
|
+
from .conformance.outside_agent_advisory import (
|
|
1159
|
+
build_malformed_outside_agent_advisory_evidence,
|
|
1160
|
+
build_outside_agent_advisory_evidence,
|
|
1161
|
+
digest_outside_agent_submission_bytes,
|
|
1162
|
+
serialize_outside_agent_advisory_evidence,
|
|
1163
|
+
)
|
|
1164
|
+
|
|
1165
|
+
submission_path = Path(args.submission_file)
|
|
1166
|
+
try:
|
|
1167
|
+
raw = submission_path.read_bytes()
|
|
1168
|
+
except OSError as exc:
|
|
1169
|
+
evidence = build_malformed_outside_agent_advisory_evidence(
|
|
1170
|
+
input_digest=digest_outside_agent_submission_bytes(str(submission_path).encode("utf-8")),
|
|
1171
|
+
message=f"outside-agent submission JSON could not be read: {exc.__class__.__name__}",
|
|
1172
|
+
)
|
|
1173
|
+
else:
|
|
1174
|
+
try:
|
|
1175
|
+
submission = json.loads(raw.decode("utf-8"))
|
|
1176
|
+
except (UnicodeDecodeError, json.JSONDecodeError):
|
|
1177
|
+
evidence = build_malformed_outside_agent_advisory_evidence(
|
|
1178
|
+
input_digest=digest_outside_agent_submission_bytes(raw),
|
|
1179
|
+
)
|
|
1180
|
+
else:
|
|
1181
|
+
evidence = build_outside_agent_advisory_evidence(submission)
|
|
1182
|
+
|
|
1183
|
+
payload = serialize_outside_agent_advisory_evidence(evidence)
|
|
1184
|
+
text = json.dumps(payload, indent=2, sort_keys=True) + "\n"
|
|
1185
|
+
if args.output:
|
|
1186
|
+
Path(args.output).write_text(text, encoding="utf-8")
|
|
1187
|
+
print(text, end="")
|
|
1188
|
+
return int(evidence.exit_code)
|
|
1189
|
+
|
|
1190
|
+
|
|
1191
|
+
def _outside_agent_validate_command(args: argparse.Namespace) -> int:
|
|
1192
|
+
from .conformance.outside_agent_real import (
|
|
1193
|
+
build_malformed_outside_agent_validation_verdict,
|
|
1194
|
+
build_outside_agent_validation_verdict,
|
|
1195
|
+
)
|
|
1196
|
+
from .conformance.outside_agent_real_output import (
|
|
1197
|
+
digest_outside_agent_validation_bytes,
|
|
1198
|
+
serialize_outside_agent_validation_verdict,
|
|
1199
|
+
)
|
|
1200
|
+
|
|
1201
|
+
submission_path = Path(args.submission_file)
|
|
1202
|
+
try:
|
|
1203
|
+
raw = submission_path.read_bytes()
|
|
1204
|
+
except OSError as exc:
|
|
1205
|
+
validation = build_malformed_outside_agent_validation_verdict(
|
|
1206
|
+
input_digest=digest_outside_agent_validation_bytes(str(submission_path).encode("utf-8")),
|
|
1207
|
+
message=f"outside-agent submission JSON could not be read: {exc.__class__.__name__}",
|
|
1208
|
+
)
|
|
1209
|
+
else:
|
|
1210
|
+
try:
|
|
1211
|
+
submission = json.loads(raw.decode("utf-8"))
|
|
1212
|
+
except (UnicodeDecodeError, json.JSONDecodeError):
|
|
1213
|
+
validation = build_malformed_outside_agent_validation_verdict(
|
|
1214
|
+
input_digest=digest_outside_agent_validation_bytes(raw),
|
|
1215
|
+
)
|
|
1216
|
+
else:
|
|
1217
|
+
validation = build_outside_agent_validation_verdict(
|
|
1218
|
+
submission,
|
|
1219
|
+
submitted_refs=tuple(args.submitted_ref or ()),
|
|
1220
|
+
)
|
|
1221
|
+
|
|
1222
|
+
payload = serialize_outside_agent_validation_verdict(validation)
|
|
1223
|
+
text = json.dumps(payload, indent=2, sort_keys=True) + "\n"
|
|
1224
|
+
Path(args.output).write_text(text, encoding="utf-8")
|
|
1225
|
+
print(text, end="")
|
|
1226
|
+
return int(validation.exit_code)
|
|
1227
|
+
|
|
1228
|
+
|
|
1131
1229
|
def _parse_lane_ir_override(parser: argparse.ArgumentParser, args: argparse.Namespace, command: str) -> tuple[str, ...]:
|
|
1132
1230
|
raw = getattr(args, "allow_lane_ir_override", None)
|
|
1133
1231
|
if raw is None:
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""``phase_loop_runtime.conformance`` -- the named conformance surface.
|
|
2
|
+
|
|
3
|
+
This package preserves the existing public ``.consiliency/`` conformance
|
|
4
|
+
imports while providing a namespace for outside-agent contract pin helpers.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from ..consiliency_gates import (
|
|
9
|
+
CONSILIENCY_GATES_ENV,
|
|
10
|
+
CONSILIENCY_GATES_MODES,
|
|
11
|
+
DEFAULT_CONSILIENCY_GATES_MODE,
|
|
12
|
+
resolve_consiliency_gates_mode,
|
|
13
|
+
scan_consiliency_gates,
|
|
14
|
+
)
|
|
15
|
+
from ..consiliency_ingest import evaluate_governance_scope
|
|
16
|
+
from ..git_discipline import evaluate_git_discipline, self_heal_partition
|
|
17
|
+
from .outside_agent_core import (
|
|
18
|
+
OutsideAgentBlocker,
|
|
19
|
+
OutsideAgentConformanceVerdict,
|
|
20
|
+
OutsideAgentEvidenceRef,
|
|
21
|
+
OutsideAgentSubmissionKind,
|
|
22
|
+
OutsideAgentVerdictStatus,
|
|
23
|
+
validate_outside_agent_submission,
|
|
24
|
+
)
|
|
25
|
+
from .outside_agent_advisory import (
|
|
26
|
+
OutsideAgentAdvisoryEvidence,
|
|
27
|
+
OutsideAgentAdvisoryExitCode,
|
|
28
|
+
build_outside_agent_advisory_evidence,
|
|
29
|
+
serialize_outside_agent_advisory_evidence,
|
|
30
|
+
)
|
|
31
|
+
from .outside_agent_imports import (
|
|
32
|
+
OutsideAgentContractError,
|
|
33
|
+
load_outside_agent_contract_pin,
|
|
34
|
+
)
|
|
35
|
+
from .outside_agent_pin import (
|
|
36
|
+
EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN,
|
|
37
|
+
OutsideAgentContractPin,
|
|
38
|
+
)
|
|
39
|
+
from .outside_agent_real import (
|
|
40
|
+
OutsideAgentSubmittedRef,
|
|
41
|
+
OutsideAgentValidationExitCode,
|
|
42
|
+
OutsideAgentValidationVerdict,
|
|
43
|
+
build_outside_agent_validation_verdict,
|
|
44
|
+
)
|
|
45
|
+
from .outside_agent_real_output import (
|
|
46
|
+
digest_outside_agent_validation_bytes,
|
|
47
|
+
serialize_outside_agent_validation_verdict,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
__all__ = [
|
|
51
|
+
"scan_consiliency_gates",
|
|
52
|
+
"resolve_consiliency_gates_mode",
|
|
53
|
+
"CONSILIENCY_GATES_ENV",
|
|
54
|
+
"CONSILIENCY_GATES_MODES",
|
|
55
|
+
"DEFAULT_CONSILIENCY_GATES_MODE",
|
|
56
|
+
"evaluate_git_discipline",
|
|
57
|
+
"self_heal_partition",
|
|
58
|
+
"evaluate_governance_scope",
|
|
59
|
+
"OutsideAgentBlocker",
|
|
60
|
+
"OutsideAgentConformanceVerdict",
|
|
61
|
+
"OutsideAgentEvidenceRef",
|
|
62
|
+
"OutsideAgentSubmissionKind",
|
|
63
|
+
"OutsideAgentVerdictStatus",
|
|
64
|
+
"validate_outside_agent_submission",
|
|
65
|
+
"OutsideAgentAdvisoryEvidence",
|
|
66
|
+
"OutsideAgentAdvisoryExitCode",
|
|
67
|
+
"build_outside_agent_advisory_evidence",
|
|
68
|
+
"serialize_outside_agent_advisory_evidence",
|
|
69
|
+
"OutsideAgentContractError",
|
|
70
|
+
"load_outside_agent_contract_pin",
|
|
71
|
+
"EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN",
|
|
72
|
+
"OutsideAgentContractPin",
|
|
73
|
+
"OutsideAgentSubmittedRef",
|
|
74
|
+
"OutsideAgentValidationExitCode",
|
|
75
|
+
"OutsideAgentValidationVerdict",
|
|
76
|
+
"build_outside_agent_validation_verdict",
|
|
77
|
+
"digest_outside_agent_validation_bytes",
|
|
78
|
+
"serialize_outside_agent_validation_verdict",
|
|
79
|
+
]
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"""Advisory outside-agent preflight evidence."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import hashlib
|
|
5
|
+
import json
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
from enum import IntEnum
|
|
8
|
+
from typing import Any, Mapping
|
|
9
|
+
|
|
10
|
+
from .outside_agent_core import (
|
|
11
|
+
OutsideAgentBlocker,
|
|
12
|
+
OutsideAgentConformanceVerdict,
|
|
13
|
+
OutsideAgentVerdictStatus,
|
|
14
|
+
validate_outside_agent_submission,
|
|
15
|
+
)
|
|
16
|
+
from .outside_agent_pin import (
|
|
17
|
+
EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN,
|
|
18
|
+
OutsideAgentContractPin,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
_REDACTION_BLOCKER_CODES = frozenset(
|
|
23
|
+
{
|
|
24
|
+
"local_env_value_present",
|
|
25
|
+
"raw_log_present",
|
|
26
|
+
"raw_payload_present",
|
|
27
|
+
"secret_like_value_present",
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
_PROVENANCE_BLOCKER_CODES = frozenset(
|
|
31
|
+
{
|
|
32
|
+
"absolute_path_ref",
|
|
33
|
+
"digest_mismatch",
|
|
34
|
+
"missing_digest",
|
|
35
|
+
"path_traversal_ref",
|
|
36
|
+
"unsafe_source_ref",
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class OutsideAgentAdvisoryExitCode(IntEnum):
|
|
42
|
+
PASS = 0
|
|
43
|
+
INTERNAL_ERROR = 1
|
|
44
|
+
MALFORMED_INPUT = 2
|
|
45
|
+
REDACTION_VIOLATION = 3
|
|
46
|
+
PROVENANCE_FAILURE = 4
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass(frozen=True)
|
|
50
|
+
class OutsideAgentAdvisoryEvidence:
|
|
51
|
+
authority: str
|
|
52
|
+
classification: str
|
|
53
|
+
exit_code: OutsideAgentAdvisoryExitCode
|
|
54
|
+
verdict: OutsideAgentConformanceVerdict
|
|
55
|
+
metadata: Mapping[str, str] = field(default_factory=dict)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def build_outside_agent_advisory_evidence(
|
|
59
|
+
submission: Any,
|
|
60
|
+
*,
|
|
61
|
+
contract_pin: OutsideAgentContractPin = EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN,
|
|
62
|
+
) -> OutsideAgentAdvisoryEvidence:
|
|
63
|
+
"""Build deterministic advisory evidence without external I/O."""
|
|
64
|
+
if not isinstance(submission, Mapping):
|
|
65
|
+
verdict = _malformed_verdict(
|
|
66
|
+
input_digest=_digest_value(submission),
|
|
67
|
+
contract_pin=contract_pin,
|
|
68
|
+
blocker=OutsideAgentBlocker(
|
|
69
|
+
"malformed_input",
|
|
70
|
+
"outside-agent submission JSON must be an object",
|
|
71
|
+
ref="$",
|
|
72
|
+
),
|
|
73
|
+
)
|
|
74
|
+
return _evidence_for_verdict(verdict)
|
|
75
|
+
|
|
76
|
+
verdict = validate_outside_agent_submission(submission, contract_pin=contract_pin)
|
|
77
|
+
return _evidence_for_verdict(verdict)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def build_malformed_outside_agent_advisory_evidence(
|
|
81
|
+
*,
|
|
82
|
+
input_digest: str,
|
|
83
|
+
message: str = "outside-agent submission JSON could not be parsed",
|
|
84
|
+
contract_pin: OutsideAgentContractPin = EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN,
|
|
85
|
+
) -> OutsideAgentAdvisoryEvidence:
|
|
86
|
+
verdict = _malformed_verdict(
|
|
87
|
+
input_digest=input_digest,
|
|
88
|
+
contract_pin=contract_pin,
|
|
89
|
+
blocker=OutsideAgentBlocker("malformed_input", message, ref="$"),
|
|
90
|
+
)
|
|
91
|
+
return _evidence_for_verdict(verdict)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def serialize_outside_agent_advisory_evidence(
|
|
95
|
+
evidence: OutsideAgentAdvisoryEvidence,
|
|
96
|
+
) -> dict[str, Any]:
|
|
97
|
+
verdict = evidence.verdict
|
|
98
|
+
return {
|
|
99
|
+
"authority": evidence.authority,
|
|
100
|
+
"classification": evidence.classification,
|
|
101
|
+
"exit_code": int(evidence.exit_code),
|
|
102
|
+
"verdict_schema_version": verdict.verdict_schema_version,
|
|
103
|
+
"submission_kind": verdict.submission_kind.value if verdict.submission_kind else None,
|
|
104
|
+
"status": verdict.status.value,
|
|
105
|
+
"blockers": [
|
|
106
|
+
{"code": blocker.code, "message": blocker.message, "ref": blocker.ref}
|
|
107
|
+
for blocker in verdict.blockers
|
|
108
|
+
],
|
|
109
|
+
"contract_pin": {
|
|
110
|
+
"schema_version": verdict.contract_pin.schema_version,
|
|
111
|
+
"verdict_schema_version": verdict.contract_pin.verdict_schema_version,
|
|
112
|
+
"contract_package": verdict.contract_pin.contract_package,
|
|
113
|
+
"contract_version": verdict.contract_pin.contract_version,
|
|
114
|
+
"contract_git_sha": verdict.contract_pin.contract_git_sha,
|
|
115
|
+
"vector_manifest_name": verdict.contract_pin.vector_manifest_name,
|
|
116
|
+
"vector_manifest_hash": verdict.contract_pin.vector_manifest_hash,
|
|
117
|
+
"source_owner": verdict.contract_pin.source_owner,
|
|
118
|
+
"redaction_posture": verdict.contract_pin.redaction_posture,
|
|
119
|
+
},
|
|
120
|
+
"input_digest": verdict.input_digest,
|
|
121
|
+
"provenance_refs": list(verdict.provenance_refs),
|
|
122
|
+
"evidence_refs": [
|
|
123
|
+
{"ref": ref.ref, "digest": ref.digest, "kind": ref.kind}
|
|
124
|
+
for ref in verdict.evidence_refs
|
|
125
|
+
],
|
|
126
|
+
"redaction_posture": verdict.redaction_posture,
|
|
127
|
+
"metadata": dict(evidence.metadata),
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def digest_outside_agent_submission_bytes(value: bytes) -> str:
|
|
132
|
+
return hashlib.sha256(value).hexdigest()
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _evidence_for_verdict(
|
|
136
|
+
verdict: OutsideAgentConformanceVerdict,
|
|
137
|
+
) -> OutsideAgentAdvisoryEvidence:
|
|
138
|
+
exit_code = _exit_code_for_blockers(verdict.blockers)
|
|
139
|
+
return OutsideAgentAdvisoryEvidence(
|
|
140
|
+
authority="advisory",
|
|
141
|
+
classification=_classification_for_exit_code(exit_code),
|
|
142
|
+
exit_code=exit_code,
|
|
143
|
+
verdict=verdict,
|
|
144
|
+
metadata={"source": "outside_agent_advisory_preflight"},
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def _exit_code_for_blockers(
|
|
149
|
+
blockers: tuple[OutsideAgentBlocker, ...],
|
|
150
|
+
) -> OutsideAgentAdvisoryExitCode:
|
|
151
|
+
if not blockers:
|
|
152
|
+
return OutsideAgentAdvisoryExitCode.PASS
|
|
153
|
+
codes = {blocker.code for blocker in blockers}
|
|
154
|
+
if codes & _REDACTION_BLOCKER_CODES:
|
|
155
|
+
return OutsideAgentAdvisoryExitCode.REDACTION_VIOLATION
|
|
156
|
+
if codes & _PROVENANCE_BLOCKER_CODES:
|
|
157
|
+
return OutsideAgentAdvisoryExitCode.PROVENANCE_FAILURE
|
|
158
|
+
return OutsideAgentAdvisoryExitCode.MALFORMED_INPUT
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _classification_for_exit_code(exit_code: OutsideAgentAdvisoryExitCode) -> str:
|
|
162
|
+
return {
|
|
163
|
+
OutsideAgentAdvisoryExitCode.PASS: "clean_advisory_pass",
|
|
164
|
+
OutsideAgentAdvisoryExitCode.INTERNAL_ERROR: "internal_error",
|
|
165
|
+
OutsideAgentAdvisoryExitCode.MALFORMED_INPUT: "malformed_input",
|
|
166
|
+
OutsideAgentAdvisoryExitCode.REDACTION_VIOLATION: "redaction_violation",
|
|
167
|
+
OutsideAgentAdvisoryExitCode.PROVENANCE_FAILURE: "provenance_failure",
|
|
168
|
+
}[exit_code]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def _malformed_verdict(
|
|
172
|
+
*,
|
|
173
|
+
input_digest: str,
|
|
174
|
+
contract_pin: OutsideAgentContractPin,
|
|
175
|
+
blocker: OutsideAgentBlocker,
|
|
176
|
+
) -> OutsideAgentConformanceVerdict:
|
|
177
|
+
return OutsideAgentConformanceVerdict(
|
|
178
|
+
verdict_schema_version=contract_pin.verdict_schema_version,
|
|
179
|
+
submission_kind=None,
|
|
180
|
+
status=OutsideAgentVerdictStatus.BLOCKED,
|
|
181
|
+
blockers=(blocker,),
|
|
182
|
+
contract_pin=contract_pin,
|
|
183
|
+
input_digest=input_digest,
|
|
184
|
+
provenance_refs=(),
|
|
185
|
+
evidence_refs=(),
|
|
186
|
+
redaction_posture=contract_pin.redaction_posture,
|
|
187
|
+
metadata={"source_owner": contract_pin.source_owner},
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def _digest_value(value: Any) -> str:
|
|
192
|
+
encoded = json.dumps(
|
|
193
|
+
value,
|
|
194
|
+
sort_keys=True,
|
|
195
|
+
separators=(",", ":"),
|
|
196
|
+
default=str,
|
|
197
|
+
).encode("utf-8")
|
|
198
|
+
return hashlib.sha256(encoded).hexdigest()
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
__all__ = [
|
|
202
|
+
"OutsideAgentAdvisoryEvidence",
|
|
203
|
+
"OutsideAgentAdvisoryExitCode",
|
|
204
|
+
"build_malformed_outside_agent_advisory_evidence",
|
|
205
|
+
"build_outside_agent_advisory_evidence",
|
|
206
|
+
"digest_outside_agent_submission_bytes",
|
|
207
|
+
"serialize_outside_agent_advisory_evidence",
|
|
208
|
+
]
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Deterministic outside-agent conformance verdict core."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import hashlib
|
|
5
|
+
import json
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Any, Mapping
|
|
9
|
+
|
|
10
|
+
from .outside_agent_pin import (
|
|
11
|
+
EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN,
|
|
12
|
+
OutsideAgentContractPin,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class OutsideAgentSubmissionKind(str, Enum):
|
|
17
|
+
WORK_REQUEST = "work_request"
|
|
18
|
+
IMPLEMENTATION_SUBMISSION = "implementation_submission"
|
|
19
|
+
AMBIGUITY_REPORT = "ambiguity_report"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class OutsideAgentVerdictStatus(str, Enum):
|
|
23
|
+
PASS = "pass"
|
|
24
|
+
BLOCKED = "blocked"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass(frozen=True)
|
|
28
|
+
class OutsideAgentBlocker:
|
|
29
|
+
code: str
|
|
30
|
+
message: str
|
|
31
|
+
ref: str | None = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass(frozen=True)
|
|
35
|
+
class OutsideAgentEvidenceRef:
|
|
36
|
+
ref: str
|
|
37
|
+
digest: str
|
|
38
|
+
kind: str = "metadata"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass(frozen=True)
|
|
42
|
+
class OutsideAgentConformanceVerdict:
|
|
43
|
+
verdict_schema_version: str
|
|
44
|
+
submission_kind: OutsideAgentSubmissionKind | None
|
|
45
|
+
status: OutsideAgentVerdictStatus
|
|
46
|
+
blockers: tuple[OutsideAgentBlocker, ...]
|
|
47
|
+
contract_pin: OutsideAgentContractPin
|
|
48
|
+
input_digest: str
|
|
49
|
+
provenance_refs: tuple[str, ...]
|
|
50
|
+
evidence_refs: tuple[OutsideAgentEvidenceRef, ...]
|
|
51
|
+
redaction_posture: str = "metadata_only"
|
|
52
|
+
metadata: Mapping[str, str] = field(default_factory=dict)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def validate_outside_agent_submission(
|
|
56
|
+
submission: Mapping[str, Any],
|
|
57
|
+
*,
|
|
58
|
+
contract_pin: OutsideAgentContractPin = EXPECTED_OUTSIDE_AGENT_CONTRACT_PIN,
|
|
59
|
+
) -> OutsideAgentConformanceVerdict:
|
|
60
|
+
"""Validate a metadata-only outside-agent submission without external I/O."""
|
|
61
|
+
from .outside_agent_provenance import validate_outside_agent_provenance
|
|
62
|
+
from .outside_agent_redaction import assert_outside_agent_metadata_only
|
|
63
|
+
from .outside_agent_schema import validate_outside_agent_submission_schema
|
|
64
|
+
|
|
65
|
+
input_digest = _digest_mapping(submission)
|
|
66
|
+
schema_result = validate_outside_agent_submission_schema(
|
|
67
|
+
submission, contract_pin=contract_pin
|
|
68
|
+
)
|
|
69
|
+
provenance_result = validate_outside_agent_provenance(submission)
|
|
70
|
+
redaction_blockers = assert_outside_agent_metadata_only(submission)
|
|
71
|
+
|
|
72
|
+
blockers = (
|
|
73
|
+
schema_result.blockers
|
|
74
|
+
+ provenance_result.blockers
|
|
75
|
+
+ tuple(redaction_blockers)
|
|
76
|
+
)
|
|
77
|
+
status = (
|
|
78
|
+
OutsideAgentVerdictStatus.BLOCKED
|
|
79
|
+
if blockers
|
|
80
|
+
else OutsideAgentVerdictStatus.PASS
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
evidence_refs = tuple(
|
|
84
|
+
OutsideAgentEvidenceRef(ref=ref.ref, digest=ref.digest, kind=ref.kind)
|
|
85
|
+
for ref in provenance_result.evidence_refs
|
|
86
|
+
)
|
|
87
|
+
return OutsideAgentConformanceVerdict(
|
|
88
|
+
verdict_schema_version=contract_pin.verdict_schema_version,
|
|
89
|
+
submission_kind=schema_result.submission_kind,
|
|
90
|
+
status=status,
|
|
91
|
+
blockers=blockers,
|
|
92
|
+
contract_pin=contract_pin,
|
|
93
|
+
input_digest=input_digest,
|
|
94
|
+
provenance_refs=provenance_result.provenance_refs,
|
|
95
|
+
evidence_refs=evidence_refs,
|
|
96
|
+
redaction_posture=contract_pin.redaction_posture,
|
|
97
|
+
metadata={"source_owner": contract_pin.source_owner},
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _digest_mapping(value: Mapping[str, Any]) -> str:
|
|
102
|
+
encoded = json.dumps(
|
|
103
|
+
value,
|
|
104
|
+
sort_keys=True,
|
|
105
|
+
separators=(",", ":"),
|
|
106
|
+
default=str,
|
|
107
|
+
).encode("utf-8")
|
|
108
|
+
return hashlib.sha256(encoded).hexdigest()
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
__all__ = [
|
|
112
|
+
"OutsideAgentBlocker",
|
|
113
|
+
"OutsideAgentConformanceVerdict",
|
|
114
|
+
"OutsideAgentEvidenceRef",
|
|
115
|
+
"OutsideAgentSubmissionKind",
|
|
116
|
+
"OutsideAgentVerdictStatus",
|
|
117
|
+
"validate_outside_agent_submission",
|
|
118
|
+
]
|