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.
Files changed (667) hide show
  1. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/PKG-INFO +1 -1
  2. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/pyproject.toml +1 -1
  3. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/__init__.py +1 -1
  4. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/cli.py +98 -0
  5. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/__init__.py +79 -0
  6. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_advisory.py +208 -0
  7. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_core.py +118 -0
  8. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_imports.py +161 -0
  9. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_pin.py +33 -0
  10. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_provenance.py +146 -0
  11. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_real.py +220 -0
  12. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_real_output.py +57 -0
  13. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_redaction.py +123 -0
  14. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_schema.py +123 -0
  15. phase_loop_runtime-0.5.0/src/phase_loop_runtime/conformance/outside_agent_vectors.py +173 -0
  16. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/PKG-INFO +1 -1
  17. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/SOURCES.txt +28 -1
  18. phase_loop_runtime-0.5.0/tests/test_outside_agent_advisory.py +101 -0
  19. phase_loop_runtime-0.5.0/tests/test_outside_agent_advisory_cli.py +98 -0
  20. phase_loop_runtime-0.5.0/tests/test_outside_agent_advisory_fixtures.py +35 -0
  21. phase_loop_runtime-0.5.0/tests/test_outside_agent_authority_boundary.py +89 -0
  22. phase_loop_runtime-0.5.0/tests/test_outside_agent_contract_drift.py +21 -0
  23. phase_loop_runtime-0.5.0/tests/test_outside_agent_contract_imports.py +93 -0
  24. phase_loop_runtime-0.5.0/tests/test_outside_agent_contract_pin.py +19 -0
  25. phase_loop_runtime-0.5.0/tests/test_outside_agent_core_api.py +81 -0
  26. phase_loop_runtime-0.5.0/tests/test_outside_agent_provenance.py +73 -0
  27. phase_loop_runtime-0.5.0/tests/test_outside_agent_real_ci.py +78 -0
  28. phase_loop_runtime-0.5.0/tests/test_outside_agent_real_cli.py +144 -0
  29. phase_loop_runtime-0.5.0/tests/test_outside_agent_real_output.py +83 -0
  30. phase_loop_runtime-0.5.0/tests/test_outside_agent_real_runtime.py +129 -0
  31. phase_loop_runtime-0.5.0/tests/test_outside_agent_redaction.py +93 -0
  32. phase_loop_runtime-0.5.0/tests/test_outside_agent_release_surface.py +207 -0
  33. phase_loop_runtime-0.5.0/tests/test_outside_agent_schema_validation.py +65 -0
  34. phase_loop_runtime-0.5.0/tests/test_outside_agent_vectors.py +77 -0
  35. phase_loop_runtime-0.4.0/src/phase_loop_runtime/conformance.py +0 -94
  36. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/MANIFEST.in +0 -0
  37. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/README.md +0 -0
  38. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/protocol/protocol.md +0 -0
  39. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/setup.cfg +0 -0
  40. {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
  41. {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
  42. {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
  43. {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
  44. {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
  45. {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
  46. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +0 -0
  47. {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
  48. {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
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {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
  87. {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
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  94. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +0 -0
  95. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/__init__.py +0 -0
  96. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/backing.py +0 -0
  97. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  98. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/config.py +0 -0
  99. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  100. {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
  101. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/fixtures.py +0 -0
  102. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -0
  103. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  104. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/observability.py +0 -0
  105. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/presets.py +0 -0
  106. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/registries.py +0 -0
  107. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  108. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/schema.py +0 -0
  109. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  110. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  111. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  112. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_modular.py +0 -0
  113. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  114. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  115. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  116. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  117. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  118. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +0 -0
  119. {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
  120. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  121. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/broker.py +0 -0
  122. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/build_bundle.py +0 -0
  123. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/capability_registry.py +0 -0
  124. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/classifier.py +0 -0
  125. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  126. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  127. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout.py +0 -0
  128. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  129. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  130. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_validation.py +0 -0
  131. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/closeout_validators.py +0 -0
  132. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  133. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  134. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  135. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  136. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  137. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/discovery.py +0 -0
  138. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  139. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  140. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/docs_audit.py +0 -0
  141. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/docs_freshness.py +0 -0
  142. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  143. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  144. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/events.py +0 -0
  145. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/events_migration.py +0 -0
  146. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/evidence_audit.py +0 -0
  147. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  148. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/fleet_map.py +0 -0
  149. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  150. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  151. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/gate_posture.py +0 -0
  152. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/git_discipline.py +0 -0
  153. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/git_ops.py +0 -0
  154. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/git_topology.py +0 -0
  155. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/governed_bundle.py +0 -0
  156. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/governed_premerge.py +0 -0
  157. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/governed_review.py +0 -0
  158. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/handoff.py +0 -0
  159. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/handoff_path.py +0 -0
  160. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/injection.py +0 -0
  161. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/install_status.py +0 -0
  162. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  163. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/launcher.py +0 -0
  164. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/lease_store.py +0 -0
  165. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/maintenance.py +0 -0
  166. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  167. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/models.py +0 -0
  168. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/observability.py +0 -0
  169. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/panel_invoker.py +0 -0
  170. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  171. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  172. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  173. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  174. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  175. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  176. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  177. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  178. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  179. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/plan_ir.py +0 -0
  180. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/plan_manifest.py +0 -0
  181. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/planner_validation.py +0 -0
  182. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/profiles.py +0 -0
  183. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/prompts.py +0 -0
  184. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/provenance.py +0 -0
  185. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/publishing.py +0 -0
  186. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/py.typed +0 -0
  187. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/reconcile.py +0 -0
  188. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/redaction.py +0 -0
  189. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/reflection_sync.py +0 -0
  190. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/release_guard.py +0 -0
  191. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/render.py +0 -0
  192. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/repo_validation.py +0 -0
  193. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/review_summary.py +0 -0
  194. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  195. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/route_log.py +0 -0
  196. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  197. {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
  198. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runner.py +0 -0
  199. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runtime_paths.py +0 -0
  200. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runtime_projection.py +0 -0
  201. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/runtime_resources.py +0 -0
  202. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/schema_export.py +0 -0
  203. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  204. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_install.py +0 -0
  205. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_inventory.py +0 -0
  206. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_paths.py +0 -0
  207. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  208. {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
  209. {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
  210. {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
  211. {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
  212. {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
  213. {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
  214. {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
  215. {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
  216. {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
  217. {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
  218. {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
  219. {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
  220. {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
  221. {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
  222. {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
  223. {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
  224. {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
  225. {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
  226. {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
  227. {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
  228. {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
  229. {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
  230. {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
  231. {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
  232. {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
  233. {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
  234. {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
  235. {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
  236. {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
  237. {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
  238. {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
  239. {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
  240. {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
  241. {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
  242. {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
  243. {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
  244. {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
  245. {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
  246. {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
  247. {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
  248. {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
  249. {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
  250. {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
  251. {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
  252. {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
  253. {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
  254. {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
  255. {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
  256. {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
  257. {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
  258. {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
  259. {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
  260. {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
  261. {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
  262. {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
  263. {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
  264. {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
  265. {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
  266. {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
  267. {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
  268. {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
  269. {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
  270. {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
  271. {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
  272. {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
  273. {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
  274. {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
  275. {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
  276. {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
  277. {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
  278. {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
  279. {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
  280. {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
  281. {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
  282. {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
  283. {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
  284. {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
  285. {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
  286. {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
  287. {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
  288. {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
  289. {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
  290. {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
  291. {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
  292. {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
  293. {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
  294. {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
  295. {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
  296. {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
  297. {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
  298. {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
  299. {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
  300. {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
  301. {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
  302. {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
  303. {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
  304. {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
  305. {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
  306. {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
  307. {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
  308. {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
  309. {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
  310. {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
  311. {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
  312. {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
  313. {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
  314. {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
  315. {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
  316. {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
  317. {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
  318. {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
  319. {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
  320. {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
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {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
  330. {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
  331. {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
  332. {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
  333. {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
  334. {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
  335. {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
  336. {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
  337. {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
  338. {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
  339. {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
  340. {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
  341. {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
  342. {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
  343. {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
  344. {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
  345. {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
  346. {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
  347. {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
  348. {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
  349. {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
  350. {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
  351. {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
  352. {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
  353. {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
  354. {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
  355. {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
  356. {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
  357. {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
  358. {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
  359. {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
  360. {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
  361. {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
  362. {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
  363. {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
  364. {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
  365. {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
  366. {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
  367. {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
  368. {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
  369. {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
  370. {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
  371. {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
  372. {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
  373. {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
  374. {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
  375. {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
  376. {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
  377. {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
  378. {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
  379. {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
  380. {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
  381. {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
  382. {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
  383. {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
  384. {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
  385. {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
  386. {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
  387. {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
  388. {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
  389. {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
  390. {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
  391. {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
  392. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/state.py +0 -0
  393. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/state_degradation.py +0 -0
  394. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/state_ops.py +0 -0
  395. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/train_ledger.py +0 -0
  396. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/train_roadmap.py +0 -0
  397. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/train_runner.py +0 -0
  398. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/verification_evidence.py +0 -0
  399. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  400. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  401. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/worker_pool.py +0 -0
  402. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime/worktree_index.py +0 -0
  403. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  404. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  405. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/requires.txt +0 -0
  406. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  407. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_advisory_mode.py +0 -0
  408. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_alias_install.py +0 -0
  409. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_backcompat.py +0 -0
  410. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_backing_homebrew.py +0 -0
  411. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_backing_omnigent.py +0 -0
  412. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_concurrency.py +0 -0
  413. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_config.py +0 -0
  414. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_golden.py +0 -0
  415. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_ingestion.py +0 -0
  416. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_integration.py +0 -0
  417. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_matrix.py +0 -0
  418. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_observability.py +0 -0
  419. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_presets.py +0 -0
  420. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_registries.py +0 -0
  421. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_resolver.py +0 -0
  422. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_advisor_board_schema.py +0 -0
  423. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_agent_runtime_provider_cs08.py +0 -0
  424. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_branchgov_preflight.py +0 -0
  425. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_cli_train_status_45.py +0 -0
  426. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_break_glass_cli.py +0 -0
  427. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_classifier.py +0 -0
  428. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_convergence_fixes.py +0 -0
  429. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_exception_vocab.py +0 -0
  430. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_validator_hook.py +0 -0
  431. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_closeout_verification_gate.py +0 -0
  432. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_codex_effort_max_clamp_49.py +0 -0
  433. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_dual_layout.py +0 -0
  434. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_gates.py +0 -0
  435. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_ingest.py +0 -0
  436. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_consiliency_scaffold.py +0 -0
  437. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_coordinator_wave_loop.py +0 -0
  438. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  439. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dispatch_lock_helper.py +0 -0
  440. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  441. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_doc_delta_validator.py +0 -0
  442. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_docs_audit.py +0 -0
  443. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_docs_freshness.py +0 -0
  444. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_dotfiles_tree.py +0 -0
  445. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_execute_phase_handoff_mode.py +0 -0
  446. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_execution_policy_tiering.py +0 -0
  447. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_export_schema.py +0 -0
  448. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_fleet_map.py +0 -0
  449. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_fleet_metrics.py +0 -0
  450. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_fleet_metrics_export.py +0 -0
  451. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_gate_a_wheel_isolation.py +0 -0
  452. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_gate_posture.py +0 -0
  453. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_git_discipline.py +0 -0
  454. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_disjointness_model_first.py +0 -0
  455. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_e2e.py +0 -0
  456. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_gate_crfixes.py +0 -0
  457. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_planning_gate.py +0 -0
  458. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_premerge.py +0 -0
  459. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_premerge_live.py +0 -0
  460. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_governed_review.py +0 -0
  461. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_hotfix_lane.py +0 -0
  462. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_injection_skill_failloud.py +0 -0
  463. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_lane_ir_override.py +0 -0
  464. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_launcher_liveness.py +0 -0
  465. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_lease_store.py +0 -0
  466. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_lease_store_conformance.py +0 -0
  467. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_ledger_serialization.py +0 -0
  468. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_model_class_policy.py +0 -0
  469. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_observability_alerting.py +0 -0
  470. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_advisory_mode_63.py +0 -0
  471. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_context_refs_114.py +0 -0
  472. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_invoker.py +0 -0
  473. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_invoker_spawn.py +0 -0
  474. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_invoker_timeout_argv.py +0 -0
  475. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_leg_auth_preflight_64.py +0 -0
  476. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_per_leg_model_66.py +0 -0
  477. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_tui_eof_48.py +0 -0
  478. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_panel_verdict_summary.py +0 -0
  479. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_parallel_dispatch_backcompat.py +0 -0
  480. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_parallel_dispatch_cli.py +0 -0
  481. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_adoption_bundle.py +0 -0
  482. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  483. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_dependency.py +0 -0
  484. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  485. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_injection.py +0 -0
  486. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_modular.py +0 -0
  487. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  488. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  489. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_schema_export.py +0 -0
  490. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_baml_schema_source.py +0 -0
  491. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  492. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_build_bundle.py +0 -0
  493. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_classifier.py +0 -0
  494. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  495. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  496. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  497. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  498. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_security.py +0 -0
  499. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  500. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  501. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  502. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_claude_route_selection.py +0 -0
  503. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_cli.py +0 -0
  504. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  505. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_control_only.py +0 -0
  506. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_event.py +0 -0
  507. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  508. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_hardening.py +0 -0
  509. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  510. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_schema.py +0 -0
  511. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_closeout_validation.py +0 -0
  512. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_collaborator_citation.py +0 -0
  513. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_collaborator_docs.py +0 -0
  514. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  515. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  516. {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
  517. {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
  518. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_discovery.py +0 -0
  519. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_docs.py +0 -0
  520. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  521. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  522. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  523. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  524. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_portal.py +0 -0
  525. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  526. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_drift_audit.py +0 -0
  527. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  528. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_events_migration.py +0 -0
  529. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit.py +0 -0
  530. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  531. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  532. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  533. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  534. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_execution_policy.py +0 -0
  535. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_executor_degradation.py +0 -0
  536. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_full_phase_mode.py +0 -0
  537. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_handoff.py +0 -0
  538. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_handoff_migration.py +0 -0
  539. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_init.py +0 -0
  540. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_injection.py +0 -0
  541. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_install_status.py +0 -0
  542. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_harnesses.py +0 -0
  543. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_ir.py +0 -0
  544. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  545. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_lane_scheduler.py +0 -0
  546. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_launcher.py +0 -0
  547. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_ledger_debug.py +0 -0
  548. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_ledger_dedup.py +0 -0
  549. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_live_adapters.py +0 -0
  550. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_maintenance.py +0 -0
  551. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_metrics.py +0 -0
  552. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_migration_regressions.py +0 -0
  553. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  554. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  555. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  556. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_models.py +0 -0
  557. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_native_flags.py +0 -0
  558. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  559. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pi_executor.py +0 -0
  560. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  561. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  562. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  563. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  564. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  565. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_pipeline_mode.py +0 -0
  566. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  567. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_plan_manifest.py +0 -0
  568. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  569. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_planner_validation.py +0 -0
  570. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_policy.py +0 -0
  571. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_protocol_contract.py +0 -0
  572. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_provenance.py +0 -0
  573. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile.py +0 -0
  574. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  575. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  576. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  577. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_reducers.py +0 -0
  578. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  579. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  580. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_roadmap_validate.py +0 -0
  581. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_rotation.py +0 -0
  582. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runner.py +0 -0
  583. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  584. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_boundary.py +0 -0
  585. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_decouple.py +0 -0
  586. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_package_data.py +0 -0
  587. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_runtime_projection.py +0 -0
  588. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_schema_flow.py +0 -0
  589. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  590. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  591. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_contract.py +0 -0
  592. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  593. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_install.py +0 -0
  594. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  595. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_smoke_blockers.py +0 -0
  596. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  597. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_smoke_reentry.py +0 -0
  598. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  599. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  600. {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
  601. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_state.py +0 -0
  602. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  603. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  604. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  605. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  606. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  607. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v22_e2e.py +0 -0
  608. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v22_principles.py +0 -0
  609. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  610. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_reconcile.py +0 -0
  611. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_sched.py +0 -0
  612. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_v45_schedharden.py +0 -0
  613. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_wave_runner.py +0 -0
  614. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_work_unit_observability.py +0 -0
  615. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_work_unit_runner.py +0 -0
  616. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_work_unit_state.py +0 -0
  617. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_loop_worktrees.py +0 -0
  618. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  619. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_phase_worktree_executor.py +0 -0
  620. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  621. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  622. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  623. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_flag.py +0 -0
  624. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_markers.py +0 -0
  625. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  626. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  627. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  628. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  629. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  630. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_pkg_layout_freeze.py +0 -0
  631. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_plan_ir_iter_waves.py +0 -0
  632. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_preflight_verification.py +0 -0
  633. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_publishing.py +0 -0
  634. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  635. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_reconcile_verification_log.py +0 -0
  636. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_reflection_sync.py +0 -0
  637. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_repo_validation.py +0 -0
  638. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_review_summary.py +0 -0
  639. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_route_log.py +0 -0
  640. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_route_policy_conformance.py +0 -0
  641. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_routing_invariants.py +0 -0
  642. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_runtime_state_mirror_agreement.py +0 -0
  643. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_sibling_matcher_patterns.py +0 -0
  644. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_bundle_pinned.py +0 -0
  645. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_install_body_expansion.py +0 -0
  646. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_plan_manifest_write.py +0 -0
  647. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skill_sources_seam.py +0 -0
  648. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skills_bundle_drift.py +0 -0
  649. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skills_canon_parity.py +0 -0
  650. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_skills_src_claude_literal_lint.py +0 -0
  651. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_spec_conformance_gate.py +0 -0
  652. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_sync_skills_apply_failloud.py +0 -0
  653. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_e2e.py +0 -0
  654. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_invariants.py +0 -0
  655. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_merge.py +0 -0
  656. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_order_only_deps_47.py +0 -0
  657. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_roadmap.py +0 -0
  658. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_train_runner.py +0 -0
  659. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  660. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  661. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_verification_evidence.py +0 -0
  662. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_verification_evidence_validator.py +0 -0
  663. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_visual_evidence_validator.py +0 -0
  664. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_workerpool_failure_isolation.py +0 -0
  665. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_workerpool_parallel.py +0 -0
  666. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_workerpool_worktree_alloc.py +0 -0
  667. {phase_loop_runtime-0.4.0 → phase_loop_runtime-0.5.0}/tests/test_worktree_index.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phase-loop-runtime
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author: ViperJuice
6
6
  License-Expression: Apache-2.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.4.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"
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.4.0"
21
+ __version__ = "0.5.0"
@@ -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
+ ]